前言
只有光頭才能變強。
文本已收錄至我的GitHub倉庫,歡迎Star:https://github.com/ZhongFuCheng3y/3y
不知道大家還是學生的時候有沒有這個問題:公司做的項目和自己在學校練手的項目有多大的區別。我以前在學校跟着視頻做一些項目練手,總感覺公司做的東西會要難很多,不知道跟公司的真實項目區別在哪。
總的來說,我實習的總時間也快半年了,談談我覺得公司項目和自己練手的項目有啥區別,歡迎補充。
一、區別
在視頻練的項目大多數都是由講師在本地編碼來講解整一個項目的開發過程,而我們去到公司做的第一件事是啥?把項目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多篇原創技術文章、海量視頻資源、精美腦圖,關注即可獲取!
覺得我的文章寫得不錯,點贊!