基礎知識漫談(1): 想到哪兒寫到哪兒

      網友投稿 641 2022-05-30

      一、想到哪兒寫到哪兒

      給公司新員工培訓,和網上的新手做交流,我最先強調的都是基礎。

      基礎有什么用?

      1、節省溝通成本

      有天,java群里來了個新人,上來就提了一個問題:

      “我代碼跑不起來,怎么辦?”

      這一看就是還沒入門,沒辦法提供具體的信息。

      于是有個有耐心的老鳥出來了,開始了一連串提問:異常棧看一下?有編譯期異常嗎?貼出你的main函數看看?

      新人收到了問題并且拋出了你都在說什么異常。

      “你還是截圖吧。”老鳥說。

      這里涉及到了異常棧,編譯期,main函數等等再基礎不過的知識,有那么部分毫不客氣的新人就說了,為什么你不講得通俗易懂點兒呢?

      通俗易懂,是需要成本的。

      異常即是程序不期望的異常情況,它處理不了交給程序員自己來處理了。棧是個再基礎不過的數據結構,出現它就說明棧頂的元素,是最后入棧的。那么,看到你出錯后控制臺拋出的那堆文字沒有?貼出來,距離XXXException最近的通常就是最關鍵的信息。

      你看,就算精簡為“控制臺拋出的那堆文字”,比較起來,是不是“異常棧”更加節約雙方的時間,畢竟以當前IT業界的薪資水準,老鳥可能已經浪費了公司好幾十塊。

      更何況,可能有人是連“控制臺”都無法理解的,這就涉及到了作用2。

      2、方便他人界定你的水準

      我見過一份簡歷,quartz、POI、easyUI、jquery等等,寫了一堆。這人自己可能覺著,這些名詞高端,厲害,可是呢,看看這份技能表:

      就暴露出了他的問題,此人并不懂他所說的這些名詞是什么。

      至少,一個有基礎的程序員就不會寫上熟悉xml、json、dom4j技術,也不會把“在線支付”和servlet\jsp放在同一欄下面。他無需長篇累述自己的技能樹多么豐滿,合適的內容,合理的排版,本身就代表了他的水準。

      3、解決未知的問題

      “有沒有例子可以參考?”

      “有沒有視頻教程可以看?”

      “能不能幫我遠程一下?”

      一般來說,挨了這三連懟的老鳥無不火從心起,但凡有例外,要么脾氣太好要么姑娘太好看。

      合適的解決方案:搜索關鍵字->查看文檔->閱讀源碼->詢問老鳥關鍵字->*。

      從來沒到過的問題如何解決呢?或者擴展一下,我寫的功能,如何適應未來千奇百怪的需求呢?當然,這其實本質還是個碼量和閱讀量的問題,篇幅和精力都不足夠支撐我講好這個問題,但凡我說好了,那等同我也寫完了一本《Effective Java》。

      我把學習分為幾個階段:

      基礎理解階段,你看到一個基礎知識點,開始理解它的含義,看到具體的實例能反應出它所對應的基礎知識。比如看到Animal cat=new Cat()能反應出它體現了如下知識點:聲明、實例化、引用、多態。

      串聯階段,把知識點串聯起來,構建出它本源的樣子,比如上面的例子,結合JVM相關知識,腦海里出現一張粗略的堆棧圖,就像這幅圖:

      這樣的能力不光可以用于向本源推測,也可以主動的把知識點組合,玩味出新的結構,比如,新需求是“根據配置來產生動物”。

      那么,我們分析會有一個根據配置項來產生動物實例的構建工具。代碼可能長下面的樣子:

      Animal animal=AnimalFactory.createAnimal(“貓”);

      在createAnimal里,我們對字符串進行if判斷,決定到底是new Cat還是new Dog

      基礎知識漫談(1): 想到哪兒寫到哪兒

      事實上,這樣的結構已經有人總結在了GoF里。誒,GoF是什么?忘了本段是說什么的嗎?

      進階階段,具備串聯知識點的能力之后,就應當有看到未知技術逆推具體實現的能力。比如hibernate,它的功能是什么?核心在于“實現持久層和數據層的同步”,也就是說,數據表和JavaBean\POJO的映射。那么,我們來思考,假如從來不存在hibernate類似的ORM框架,要如何實現這個功能呢?

      首先,我們要有和數據庫溝通的工具和配置,java可以選用jdbc,數據庫相關配置可以使用xml、json、bean任意方式。我們也可以看到,hibernate底層就是jdbc,也有Configuration這個配置入口。

      然后要有種配置方式讓數據表和Bean達成統一。為什么?因為它們的信息量不一致,包含的信息是相交的關系,比如,它們都有類似的數據類型(varchar->String),又有互不相融的內容(索引和約束),得出結論,我們需要一個映射工具,來使相交的部分匹配,并且補充缺失的內容。于是,我們可以推論出,hibernate一定有個映射工具(xml和annotation)。

      再后,為了適應多種不同的數據庫,每一條語句可能都有不同的表達,比如Oracle有Number(*,*)這個類型,對于mysql就不適用,我們需要設計一個數據庫的適配器。在hibernate里,這個部分叫做方言,Dialect。

      經過這樣的分析過程,不管是實現新的需求,還是分析未知的框架,都具備了理論上的基礎。

      就我個人的見解,達到這個階段的程序員,才能稱之為合格。

      小結

      道理說多了,來嘗嘗雞湯。

      沒有人有義務幫助你。

      樂于助人的老鳥只會幫助有價值的新手,不求反哺,至少要有成就感,是吧?

      本就該在大學搞定的內容,為什么要別人花費自己的青春和公司的人工來為你補習?

      基礎是看上去艱澀玄乎,卻是能應用在工作里的東西,切勿忽視。我有個高中老師常把一句話掛在嘴邊“現在你記住就好,以后你會懂。”有時候我想,要是那時候聽了這話,該多好。

      特此聲明:因此文章個人認為總結的很到位,很有價值,特此轉載!轉載地址:http://www.cnblogs.com/anrainie/p/5606570.html

      Java 數據庫

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:HBase 讀寫過程中的線程池模型原理實現
      下一篇:Flink的sink實戰之二:kafka
      相關文章
      久久亚洲AV永久无码精品| 理论亚洲区美一区二区三区| 亚洲色偷偷狠狠综合网| 18禁亚洲深夜福利人口| 亚洲欧洲av综合色无码| 中日韩亚洲人成无码网站| 自拍日韩亚洲一区在线| 久久精品国产亚洲av麻豆蜜芽 | 久久精品7亚洲午夜a| 亚洲色成人中文字幕网站 | 亚洲国产精品成人精品小说| 久久亚洲AV成人无码| 亚洲精品国产肉丝袜久久| 亚洲另类激情综合偷自拍| 亚洲人成电影亚洲人成9999网| 亚洲av日韩av无码黑人| 亚洲国产一区二区三区青草影视| 亚洲av日韩综合一区在线观看| 亚洲a在线视频视频| 亚洲国产日韩一区高清在线| 久久久无码精品亚洲日韩京东传媒| 亚洲综合区图片小说区| 亚洲小视频在线播放| 亚洲国产区男人本色在线观看| 国产午夜亚洲精品| 亚洲AV无码之国产精品| 一本久久综合亚洲鲁鲁五月天| 亚洲国产精品狼友中文久久久 | 亚洲国产成人久久一区久久| 亚洲一区日韩高清中文字幕亚洲 | 国产精品亚洲va在线观看| 亚洲另类激情专区小说图片| 自拍偷自拍亚洲精品第1页| 久久精品九九亚洲精品天堂| 亚洲AV无码欧洲AV无码网站| 亚洲永久永久永久永久永久精品| 亚洲高清资源在线观看| 亚洲自国产拍揄拍| 色婷婷六月亚洲综合香蕉| 亚洲美日韩Av中文字幕无码久久久妻妇| 一本色道久久综合亚洲精品高清 |