實習週記---20180519

因爲工作日晚上電腦實在懶得拎回來,所以就每週寫一篇週記來記錄一下吧


週一的時候初步完成了放假之前沒寫完的代碼,寫完之後學習了一下如何在idea裏打jar包。不得不說還是在myeclipse裏打jar包比較容易。因爲我這次的項目是用maven建的,所以網上那些lib什麼的教程貌似沒有用啊,最後挑了一個看起來靠譜一些的打了個jar,結果依賴的其他jar包沒有合到那個主jar裏,是分開的幾個jar。不過我把那幾個jar一起傳服務器裏也能跑。打算先這麼湊合用,以後抽空研究怎麼把依賴jar也合進去。

週二的一大早,發現程序跑完了,也有結果。但是寫代碼的過程中我就感覺redis讀取速度很慢。果然,通過預測時間,發現程序跑完要八個小時。顯然這太久了。

關於預測時間,比如總共需要跑一億個數據,我們在程序開始時long一個當前時間戳,然後通過計數,跑完一百萬個數的時候獲取一個時間戳,打印下來求得時間差,再乘以一百,就是跑完整個程序(一億個數)需要的時間。

後來定位原因,發現是取redis數據的過程消耗的時間太久了。我的是古老的原始寫法。同事給了我利用pipeline的寫法,最後運行時間降低至12分鐘,可以說是飛躍了。

週三。因爲是有許多個redis,收集起來最後統計大的數據。而我的java程序裏只是運行了一個redis。所以要並行多個jar來處理。每個jar對應一個redis。

於是有了如下收穫

1.終於弄明白了自從學java以來的困擾,public static void main(String []args){},這個args[],到底是個什麼東西?

原來這是傳參數的地方,我們String s=args[0];,s就是我們傳的第一個參數。那麼值在哪裏寫呢。

在idea中調試代碼的時候,參數通過點一下右上角你運行的那個類名字,出來一個下來菜單,點擊第一個Edit Configurations,在configuration中的第三條,program arguments中填寫。

在服務器中運行的時候,傳參就是通過   java -jar  K10.jar  123456    這樣的命令來傳參。如果在命令後面加個&,就是指在後臺運行。如果不加,那麼你關閉xshell的時候,該jar也會停止運行。

2.瞭解了shell腳本

每次看測試工程師jd的時候,都有會用shell腳本的要求。我們這次利用shell來運行jar包。

shell的後綴是.sh,運行命令是sh shell.sh

後面加上&就是在後臺運行,這點個運行jar時一樣。注意&和前面的h有空格隔開。其實我感覺不隔也可以,一樣是在後臺正常跑,但是老大說必須隔開。

目前有兩個小問題沒有解決,不過無傷大雅

一個是循環輸出語句的循環不會寫,暫時是一個個列出來的。另外就是運行shell腳本之後,每一行都會有command not found。不過還是成功運行了,jar也都跑起來了。留待日後研究。

另外就是要注意的一點,在shell裏不要暴露redis的host名稱。

還有個沒弄懂的地方,用java中處理第二個參數時,用Integer.parseInt()的時候,shell運行不成功。但是用integer.valueof()就好了。暫時沒有弄清楚原因。

週四。繼續碼代碼。感覺主程序已經要突破八百行了,自己看着都很亂。還有很多行是idea標虛線的,提示重複代碼。準備後續好好處理一下。

弄明白了方法中最後的return到底返回的什麼東西。這也是以前一直沒有弄清楚的。

寫代碼在不知不覺中就會遇到很多問題。寫比看有用。

週五。最糟心的一天,新需求感覺應該是完成了,但是本機測試了一下了,跑完大概要300天,就算服務器跑估計也要30天。出問題的地方已經定位出來了,是通過今天redis的key去對應昨天redis key的時候出的問題。鏈接的次數太多,每一條我都get一下,就會很慢。鼓搗了一天,有了一丁點思路,不過已經寫好的東西就要打亂好多,很難受。而且對list,map這些實在不熟悉,唉。加油吧。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章