实习周记---20180519
因?yàn)楣ぷ魅胀砩想娔X實(shí)在懶得拎回來(lái),所以就每周寫一篇周記來(lái)記錄一下吧
周一的時(shí)候初步完成了放假之前沒(méi)寫完的代碼,寫完之后學(xué)習(xí)了一下如何在idea里打jar包。不得不說(shuō)還是在myeclipse里打jar包比較容易。因?yàn)槲疫@次的項(xiàng)目是用maven建的,所以網(wǎng)上那些lib什么的教程貌似沒(méi)有用啊,最后挑了一個(gè)看起來(lái)靠譜一些的打了個(gè)jar,結(jié)果依賴的其他jar包沒(méi)有合到那個(gè)主jar里,是分開的幾個(gè)jar。不過(guò)我把那幾個(gè)jar一起傳服務(wù)器里也能跑。打算先這么湊合用,以后抽空研究怎么把依賴jar也合進(jìn)去。
周二的一大早,發(fā)現(xiàn)程序跑完了,也有結(jié)果。但是寫代碼的過(guò)程中我就感覺(jué)redis讀取速度很慢。果然,通過(guò)預(yù)測(cè)時(shí)間,發(fā)現(xiàn)程序跑完要八個(gè)小時(shí)。顯然這太久了。
關(guān)于預(yù)測(cè)時(shí)間,比如總共需要跑一億個(gè)數(shù)據(jù),我們?cè)诔绦蜷_始時(shí)long一個(gè)當(dāng)前時(shí)間戳,然后通過(guò)計(jì)數(shù),跑完一百萬(wàn)個(gè)數(shù)的時(shí)候獲取一個(gè)時(shí)間戳,打印下來(lái)求得時(shí)間差,再乘以一百,就是跑完整個(gè)程序(一億個(gè)數(shù))需要的時(shí)間。
后來(lái)定位原因,發(fā)現(xiàn)是取redis數(shù)據(jù)的過(guò)程消耗的時(shí)間太久了。我的是古老的原始寫法。同事給了我利用pipeline的寫法,最后運(yùn)行時(shí)間降低至12分鐘,可以說(shuō)是飛躍了。
周三。因?yàn)槭怯性S多個(gè)redis,收集起來(lái)最后統(tǒng)計(jì)大的數(shù)據(jù)。而我的java程序里只是運(yùn)行了一個(gè)redis。所以要并行多個(gè)jar來(lái)處理。每個(gè)jar對(duì)應(yīng)一個(gè)redis。
于是有了如下收獲
1.終于弄明白了自從學(xué)java以來(lái)的困擾,public static void main(String []args){},這個(gè)args[],到底是個(gè)什么東西?
原來(lái)這是傳參數(shù)的地方,我們String s=args[0];,s就是我們傳的第一個(gè)參數(shù)。那么值在哪里寫呢。
在idea中調(diào)試代碼的時(shí)候,參數(shù)通過(guò)點(diǎn)一下右上角你運(yùn)行的那個(gè)類名字,出來(lái)一個(gè)下來(lái)菜單,點(diǎn)擊第一個(gè)Edit Configurations,在configuration中的第三條,program arguments中填寫。
在服務(wù)器中運(yùn)行的時(shí)候,傳參就是通過(guò)? ?java -jar? K10.jar? 123456? ? 這樣的命令來(lái)傳參。如果在命令后面加個(gè)&,就是指在后臺(tái)運(yùn)行。如果不加,那么你關(guān)閉xshell的時(shí)候,該jar也會(huì)停止運(yùn)行。
2.了解了shell腳本
每次看測(cè)試工程師jd的時(shí)候,都有會(huì)用shell腳本的要求。我們這次利用shell來(lái)運(yùn)行jar包。
shell的后綴是.sh,運(yùn)行命令是sh shell.sh
后面加上&就是在后臺(tái)運(yùn)行,這點(diǎn)個(gè)運(yùn)行jar時(shí)一樣。注意&和前面的h有空格隔開。其實(shí)我感覺(jué)不隔也可以,一樣是在后臺(tái)正常跑,但是老大說(shuō)必須隔開。
目前有兩個(gè)小問(wèn)題沒(méi)有解決,不過(guò)無(wú)傷大雅
一個(gè)是循環(huán)輸出語(yǔ)句的循環(huán)不會(huì)寫,暫時(shí)是一個(gè)個(gè)列出來(lái)的。另外就是運(yùn)行shell腳本之后,每一行都會(huì)有command not found。不過(guò)還是成功運(yùn)行了,jar也都跑起來(lái)了。留待日后研究。
另外就是要注意的一點(diǎn),在shell里不要暴露redis的host名稱。
還有個(gè)沒(méi)弄懂的地方,用java中處理第二個(gè)參數(shù)時(shí),用Integer.parseInt()的時(shí)候,shell運(yùn)行不成功。但是用integer.valueof()就好了。暫時(shí)沒(méi)有弄清楚原因。
周四。繼續(xù)碼代碼。感覺(jué)主程序已經(jīng)要突破八百行了,自己看著都很亂。還有很多行是idea標(biāo)虛線的,提示重復(fù)代碼。準(zhǔn)備后續(xù)好好處理一下。
弄明白了方法中最后的return到底返回的什么東西。這也是以前一直沒(méi)有弄清楚的。
寫代碼在不知不覺(jué)中就會(huì)遇到很多問(wèn)題。寫比看有用。
周五。最糟心的一天,新需求感覺(jué)應(yīng)該是完成了,但是本機(jī)測(cè)試了一下了,跑完大概要300天,就算服務(wù)器跑估計(jì)也要30天。出問(wèn)題的地方已經(jīng)定位出來(lái)了,是通過(guò)今天redis的key去對(duì)應(yīng)昨天redis key的時(shí)候出的問(wèn)題。鏈接的次數(shù)太多,每一條我都get一下,就會(huì)很慢。鼓搗了一天,有了一丁點(diǎn)思路,不過(guò)已經(jīng)寫好的東西就要打亂好多,很難受。而且對(duì)list,map這些實(shí)在不熟悉,唉。加油吧。
總結(jié)
以上是生活随笔為你收集整理的实习周记---20180519的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 一天一种设计模式之六-----工厂方法模
- 下一篇: 视频播放器for android