面試官,你考我那麼多基礎知識幹什麼?

2021-09-24 20:37:04 字數 2922 閱讀 2103

經常有同學跟我說,很多的基礎知識學過就忘, 比如作業系統、資料庫、網路協議等方面的底層原理。而這些往往都是技術面試必考的內容。

每次被問到這個,我都不知怎麼回答,跟他說多看幾次,就記起來了? --- 這似乎是一句廢話,但好像又對,細細想來,這後面還是有不少思考的。

我覺得很多同學在基礎知識上的問題,不是技巧的問題,而是對基礎知識的態度和理解的問題。

所以,這不是一篇教你怎麼學基礎知識的文章,而是告訴你基礎知識的價值和基礎知識在程式設計師腦海中的演進過程。

對於作業系統,資料庫,網路等基礎知識的學習,看書,做筆記是必要的。不過我在這裡不教大家怎麼看書,怎麼做筆記,我估計讀過大學的同學,這應該不是大問題。

很多人糾結的問題在於基礎知識老是看了又忘,然後發現工作上好像也用不到,就開始質疑基礎知識的價值,質疑到底該不該花時間去學。

所以先要認可基礎知識的價值,意識到了基礎知識的價值後,你才會願意花時間去學習。

基礎知識的價值,我覺得有兩個部分。

乙個是技巧層面的價值。

拿作業系統裡面的執行緒和程序來說,執行緒和程序是cpu排程的基本單位,是**的一種動態呈現,只要你寫**,就一定會涉及到執行緒或者程序。當然在實際使用中可能被框架包裝了起來,給人的感知很弱,但一旦你的程式有問題,你總是要用些工具來檢視的:檢視是那個程序出了問題,要從記憶體占用,cpu 占用,磁碟讀寫等來初步分析問題。

以上這個過程,是稍微有點技術含量的工程工作都會涉及的。上面例舉的例子,你可以擴充套件到 作業系統鎖,資料庫表,資料庫索引,資料庫鎖,資料庫事務,tcp/ip , http,websocket 等等。

就工程方向來說,幾乎每個方向都要掌握相應的基礎知識,只是每個具體方向對每種具體基礎知識掌握的深入程度不一樣。

像做分布式儲存的同學,對資料庫表,資料庫鎖,資料庫事務這些的理解肯定是要很深入的;前端的同學對資料庫相關概念的理解可以要求低些,但對網路,tcp/ip,  http , https 這些的要求就要高很多。

乙個是思維層面的價值。

除了技巧層面的價值,還有思維層面的價值。

怎麼來理解這個事情呢?軟體設計,有很多核心的設計思想,其實是相同的,這些基礎概念,其實也是前人設計和總結出來的。

比如說執行緒和程序,這些概念不是自然原理,而是一種工程實踐後的軟體抽象,是前人抽象出來的乙個結果。它的設計背後,蘊含很多優秀的設計思想和設計原則。

一開始的時候,你只知道這個概念,可能理解起來都覺得很困難,只能死記硬背,但就像我們小時候學習古詩詞,它會給你帶來潛移默化的影響。你腦子裡一直裝著這些概念,實際工作和學習的時候,遇到相關的問題,你可能就會有點小思考,日積月累,你對它的理解會越來越深。這種理解,我覺得就在不斷塑造著你的技術思維。

說完了價值,我來分享下,基礎知識在程式設計師腦海中的演進過程。

我覺得對於作業系統和資料庫,光看書幾乎是學不好的,因為能做的就是背概念,但背完很快就忘記了。

我上作業系統課程之前,看過 linux 的源**。對於作業系統,因為我花了很多時間在 linux 核心上,所以上作業系統課的時候,很多概念對我來說反而是乙個彙總,把我很多離散的知識給彙總起來了。

所以我看程序,執行緒這些概念的時候,不是抽象的而且具象的,腦子裡甚至可以具體到**層面。

但很多人沒有我這麼乙個經歷,所以看起來一臉懵逼也正常。就像我在大學看資料庫的時候,我也覺得很抽象,看了就忘,直到我後面自己去做儲存,對很多的概念才慢慢地理解深入,開始有感覺。

但這裡不是說就不去看了,不看,你就一直都不會知道,甚至連基本的思考都沒有。

對於基礎知識的學習,其實是迴圈往復的過程,不是一次性就能掌握的。對於這類知識的掌握會經歷這麼乙個過程:

概念 -> 理解 -> 實踐中的思考 -> 概念 -> 理解 -> 實踐中的思考 ...

這是乙個迴圈往復的過程,但不是重複,而是螺旋式地深入,每一次迴圈都能夠帶來更深入的理解。

我們說乙個人技術很牛,有很大部分是因為他對很多的知識點經過了很多次這種迴圈,他對基礎知識理解的深度要高過很多人。

軟體技術有兩個關鍵,乙個是抽象,乙個是分層。

其實你會發現很多的概念,知識點,都是乙個具體軟體實現的抽象,裡面也有分層。

舉個例子,我們說程序,你看書上就給了乙個概念,你覺得很抽象,覺得這是作業系統裡面的乙個概念,有點像是原理性的東西。

但你往下乙個層次看,到作業系統設計這個層面來看,程序是乙個很具象的東西,有具體的**,具體的設計,具體的細節,甚至有時候你會覺得有些**寫得也不咋地,就像是乙個業務邏輯。

從這個層面,這個角度來理解,來看待程序的時候,怎麼可能會懵逼,簡直具象到不行了,甚至還會覺得這不就是乙個業務邏輯嘛。

但深度是不是到這裡就停止了,也不是。

你會開始去思考,為什麼要有這個設計,為什麼要有這種抽象,你可能會去找相關的**來看。計算機技術不是自然科學,程序也不是定理性的東西,不是 1+1 等於 2 這種自然存在的,所有一切都是設計出來的。

有設計就會有討論的過程,這些討論的過程或結果很多都還保留在網際網路上。

比如,有一次我們想為自己做的分布式儲存,設計事物系統,後來就順藤摸瓜地找到了資料庫大師 jim gray 關於事務設計的經典文獻和資料,裡面有他的很多思考和權衡。

到這個時候,事務在你腦海裡已經不是概念,而且乙個龐大的東西,很多細節,設計的權衡,你想忘都忘不了了。

甚至你還會思考這種設計是不是最好的,時間過了這麼久,會不會不適應現有的場景了,反正你會思考很多。

我們說有人很牛,我覺得這個就是很關鍵的區別了。

這個過程很艱難,也很緩慢的,要十年甚至二十年的時間,有人可以不斷地深入;也有人只停留在很淺的層面。如果你能不斷深入,你就能不斷地超越很多人,朝著技術大牛的目標邁進。

基礎知識的學習和理解是緩慢且不斷深入的過程,甚至是貫穿整個程式生涯的,不斷深入理解的過程,也是不斷塑造自身技術思維的過程。

當然,首先你得知道並認可基礎知識的價值,你才會願意花費時間和精力去不斷去學習和深入理解它們。

面試你的面試官

大多數面試都是面試官從簡歷,學歷,經歷,技術,為人上對你 乙個求職者 一番拷問,以確定是否是他們想要的人。而這些對找到適合你的工作的確沒什麼用。某公司某職位需要你,而某公司某職位不一定是你想要的!如果你想找到適合你的公司 如果你想找到適合你的職位 記得面試你的面試官,沒錯!做出很重要的職業決定前,面...

我碰到的面試官

1 奇葩找踹型 這種型別呢會有一種高高在上的感覺,總喜歡用問題把你擊倒,有時候問題描述的也不是很清晰,在交談的過程中一股無名火總會湧上心頭,總想下去踹他兩腳。2 豪爽奔放型 一般這種人呢會跟你有良好的互動,跟你聊的比較high,聊的過程中會頻頻點頭示意,討論氣氛也是熱烈融洽,但是呢,這樣的人往往都是...

面試官,我有問題要問

面對面試主管咄咄逼人的提問,你已經感到緊張萬分,只盼能早點結束,根本無暇去提 什麼問題,要問也只是泛泛地提一些類似醫療 保險 上下班時間的問題,然後就是一 句話 我沒有什麼要問的了。事實上,接受面試者想對面試單位提的問題應該有很多,而在面試時不提則會給有經驗 的面試者留下你太欠缺職業素養的印象,同時...