前言
只有光頭才能變強。
文字已收錄至我的GitHub倉庫,歡迎Star:github.com/ZhongFuChen…
不知道大家還是學生的時候有沒有這個問題:公司做的專案和自己在學校練手的專案有多大的區別。我以前在學校跟著視訊做一些專案練手,總感覺公司做的東西會要難很多,不知道跟公司的真實專案區別在哪。
總的來說,我實習的總時間也快半年了,談談我覺得公司專案和自己練手的專案有啥區別,歡迎補充。
一、區別
在視訊練的專案大多數都是由講師在本地編碼來講解整一個專案的開發過程,而我們去到公司做的第一件事是啥?把專案clone(checkout)到本地來看。
這就有兩個區別:
- 去到公司往往不是從零開發一個專案,專案的框架和程式碼都已經寫好了。我們更多要做的就是迭代這個專案(或者說修復這個專案原本就有的Bug)
- 一個專案往往都會有幾個人進行開發,這就肯定要用到版本管理工具(SVN/Git)。所以,去公司做專案之前最好是提前去學學Git/SVN這些工具的使用
比如說,我們使用Git的時候,要修改程式碼的時候會新建一個分支,改完了再合併到master分支上。
好了,現在專案已經在本地上了,那我們要將專案在本地上啟動起來嗎?這得問同事。在公司做專案,一般都分了好幾個環境
- 線上(現在正在給使用者用的)
- 測試(寫完功能,先看一下在測試環境下有沒有問題,沒問題才釋出到線上環境)
- ...等等(可能名字叫起來不一樣,但不可能在本地上寫完的程式碼直接就放到線上去跑了)
有的時候,可能環境過於複雜(各種系統相互依賴),clone(checkout)下來的專案就很難在本地上啟動起來,或者說在本地上的資料跟線上的資料差距太大了(比較難看出效果)。所以,有的時候可能就不用在本地將專案啟動起來。
那問題來了,我寫完的程式碼怎麼除錯啊?我們可以這樣乾的:將本地寫好的程式碼push到測試環境,然後本地遠端連線測試環境,對其進行除錯。
還有,我們自己做專案的時候,try-catch
完了之後,習慣可能就e.printStackTrace();
但公司的專案不會有e.printStackTrace();
這種程式碼的存在。因為這列印出來的錯誤資訊沒有日期、等級等等,分析起來不方便。
在公司一般將錯誤的資訊(或者有用的資訊)寫到log(日誌)中。
- 比如說:
LOG.error("send java3y article failed, {}", e);
於是,一般出現了問題,我們先去登上機器,查一下日誌的資訊是怎麼樣的。而登上線上的機器上,也不是直連的,會經過一層堡壘機。堡壘機是做啥的?
每次登入線上的機器都要ssh xxxxip 到堡壘機上,然後再到堡壘機上輸入線上機器IP連線,著實麻煩。於是大佬們就會寫自動登入堡壘機,直接輸入IP到線上的指令碼
於是乎,我們就登入到堡壘機上,然後再連上線上機器就去檢視日誌了。檢視日誌怎麼看?
- 直接
cat console.log
嗎,那得找到什麼時候啊? vim console.log
嗎,我想根據某個關鍵字來查怎麼在vim上操作啊?如果log
檔案太大了,vim開啟太卡了怎麼搞啊...- 所以,常用inux命令還是得學學的呀
還有一點就是,在公司開發都要申請許可權才能對資料庫/機器/各種資源進行操作。而不像我們個人開發各種root許可權,資料庫各種DDL/DML隨便玩。
DML/DDL資料庫操作都要申請許可權,釋出程式碼到線上也要申請許可權,想要去線上的機器上檢視日誌也要許可權.....
最後
總結:
- 版本控制工具
- 遠端連線Debug除錯
- 不再使用
e.printStackTrace();
,而是log.error()
來替代 - 各種許可權都需要申請和審批
樂於輸出乾貨的Java技術公眾號:Java3y。公眾號內有200多篇原創技術文章、海量視訊資源、精美腦圖,關注即可獲取!
覺得我的文章寫得不錯,點贊!