B程序員:講述三年計算機學習辛酸史

      網友投稿 936 2025-03-31

      來源:一位讀者的投稿

      01

      近年來,有些讀者會問我一些形形***的問題,讓我很難去回答,甚至給不出建設性的意見。

      舉個例子:

      1.我學習什么能進入優秀的互聯網公司工作?2.我想做研發我應該學習什么?

      眾所周知,這問題就像你問學霸說:你為何如此厲害一樣讓人難以回答。我作為一個雙非軟工本科學生,經過大學自己摸索和不斷試錯,畢業開始在百度從事研發工作。其實,我當時也有很多的疑惑,在這里給大家講講我的踩坑歷程。

      記憶中,我當年逛知乎、求助高人、甚至我的導師,都無法給出一個可操作的建議。除此之外,在我那種二本學校,知名企業都不會去咱學校校招,我和學長們對春秋招的概念微乎其微,進大廠是件很困難的事情,概率與踩狗屎不相上下。

      作為探路者,求助知乎和論壇,給出的結論幾乎都是好好學習數據結構/算法、現在大數據很火你應該學學Hadoop/Spark、你要是會微服務、docker、k8s一定會很加分。

      讓我想起了我當年問學霸題目如何解?學霸說:這個題目是來源于第X章第X例題,你這樣解,答案就出來了,很容易的。至于為什么他能想到,鬼也不知道。

      當時,我真的是花里胡哨的啥都學,啥都去倒騰,不知道是不是梁靜茹給我的勇氣。前端、后端技術棧、Hadoop/Spark、docker/k8s這些幾乎都實操過,只是很多只是入門并沒有深入研究,效果自然也十分有限。

      這些概念,對于小白或者在校生來說,這仿佛在對說你不用學了,除非你天生技術欲望特別強烈。這對于大多數普通人來說,明顯是勸退的節奏,可操性十分有限,幾乎沒有參考價值,不知道從何下手。

      其實,道理是沒有錯的,多研究底層和熱門技術棧是有益的。但是,脫離實際情況談技術就是扯犢子,就像讓中國男足拿世界杯冠軍顯然不符合實際,更應該是根據實際情況,做產出最大的事情,否則會信心全無。

      接下來,我系統性拆分問題,在不同階段應該「學什么」、「如何學」、「學到什么程度」,重點講我當時遇到的問題,還有我是如何去思考的,最終如何解決的,思路比結論重要。

      02

      根據問題歸類來看,主要在我自己的角度談談普通本科如何實現進入Top級互聯網工作?

      首先,說說在大廠工作都是些什么樣的人,他們當年都是背著什么光環混進去的?

      經過我的調研和分析,重點說一下在校招中面試官看中和考察的東西。

      1.學歷/專業、扎實專業基本功2.有成果的科研經歷3.省/國家級軟件設計大賽4.豐富互聯網公司實習經歷5.小有名氣的開源項目經歷

      大概思路就是,要么你證明你令人信服的天賦如邏輯系統思維、聰明,讓人覺得你可以被快速培養;要么你有豐富的工程實戰經驗,證明你具備優秀工程師的潛質。

      當然,你可能會說這么多要求,恐怕神仙也做不到啊,簡直太苛刻了。在這里,并不是上述要點全部滿足,只是滿足其中兩項證明你的實力即可,畢竟面試時間十分有限,要有點讓人信服的東西,否則誰愿意花時間跟你逼逼沒用的。

      舉個例子:

      1、假設你是上海交大、華中科大大學畢業的學生,你可能只需要重點復習數據結構/算法等專業知識,輔之把學校的科研經歷說一下。可能進入什么阿里華為百度問題都不是很大,專業知識對于你們來說自然不在話下,畢竟考理論是你們的特長。

      2、假如你是雙非大學畢業的學生,那么你必須用國家級大賽、開源項目、互聯網公司經歷證明自己。總之,多做項目,專注于技術本身,讓自己更早具備職業軟件工程師的實戰技能。

      簡而言之,你沒有光環,那就比別人多努力點,提前做好職業規劃,把時間投入技術本身不要投機取巧。

      03

      鑒于上述分析,知道需求是什么?對于我們來說,主要把精力投入在技術本身。

      接下來,我們將面臨一系列問題。

      1.我應該做什么方向?(方向)2.我應該學習什么內容?(規劃)3.我如何學這些內容?(方法/策略)4.我應該學到什么程度?(量化)5.如何把理論用到實際項目/產品中?(產出)

      不同方向,意味著不同領域不同,學習的知識和實戰項目有共性也有差異。在這里,我主要講一下通用的思路。重點拿我擅長方向舉例,其他方向可按照同樣思路舉一反三。

      根據我的經驗,可將內容分為原理、應用、擅長方向三個緯度。原理和應用緯度必須學習,方向緯度根據自己擅長方向深入學習。

      原理:計算機網絡、操作系統、數據結構/算法,這些東西都是專業課好好學即可,數據結構/算法可以偶爾刷題。校招的時候再重點復習,初級階段不必花太多時間深究。

      應用:它是最基礎的內容,不管你從事什么領域都將離不開它們。這也是小白入門重點花費時間的地方,你將在這里不斷與程序斗爭如調試、驗證、異常、解決。

      方向:不同方向本質上就是在基礎應用上擴充,發揮它們擅長領域和特性去解決特定問題。在這里,簡單列一下涉及的技術棧。

      1.后端開發:消息隊列、緩存、rpc、微服務。2.大數據開發:Hadoop、Spark、Storm、Flink3.自動化運維:elk、ansible、zabbix、docker、k8s

      04

      基于上述分析,主要講了整體思路,大家可能會覺得有點不太好理解。接下來,拿我當時遭遇的處境進行舉例闡述,這樣讓不同水平或時期的同學有不一樣的體會。

      假如有時光機讓時間往后倒退3年,時間來到我剛上大二的時候,作為一枚小萌新開始學習JAVA走上后端開發之路。

      對于我來說,操作系統原理、計算機網絡先戰略性放棄,畢竟剛接觸編程,看高大上的原理,每次上課都想睡覺。當然,數據結構/算法我還能好好聽聽,畢竟我數學功底還行讓我不排斥。

      為什么不先學習基礎性原理?

      舉例:假設你學騎自行車,你是直接上去就蹬?還是先把輪子拆下來研究清楚原理再去學習怎么蹬?

      重點:根據我的經歷,在新手階段不管是接觸新的語言,還是新的方向。最快的方式就是先把自行車蹬起來,等你蹬熟練了再去研究輪子是怎么造出來的。

      根據上述策略,刨除我踩的一些坑,我把學習征途劃分四個階段,實現學習效率的最優解。

      B程序員:講述三年計算機學習辛酸史

      第一階段:新手入門

      在我入門的時候,我遇到的最大困難是代碼不會寫,DEBUG不會做,程序報錯不會看毫無頭緒,甚至大家常說的百度一下的關鍵字我也不知道搜。

      這時候,最大的目標就是根據百度/查文檔/看視頻,把程序調試出預期結果,甚至你抄代碼都行,很多時候抄代碼你都不一定能DEBUG出預期結果。這就是現實,主要就是要把對編程的排斥消磨殆盡。

      這個階段,不需要太關注底層實現原理,最重要的工作就是把應用層面的技術,不斷練習直到熟練掌握上面提到的應用「 編程語言、Linux、數據庫、HTTP網絡協議 」。

      ?時間:3-6月?目標:會調試、會查文檔、會用搜索引擎?內容:JAVA基礎語法、MySql數據庫、Linux操作系統、HTTP通信協議?方法:只關注如何使用技術,難以理解的背下來,不關注底層原理。?成果:實現常見的管理系統模塊,能部署在服務器上,供他人訪問。

      對于現已從事計算機行業的同學,其實這部分內容非常簡單,可能按照正常水平少則幾天,多則不超過一周就能開發出簡單模塊。簡單說,它頂多是普通本科畢設設計水準,主要是讓新手在感官上體驗軟件產品。本質上,在計算機世界里,抽象來看就是數據的計算、傳輸、存儲。隨著你的經驗增多,你會發現很多技術的誕生或優化性能都是在解決計算、存儲、傳輸的問題。?在這里,主要讓大家在系統的角度感受最簡單、最初級的技術模型。

      1.Linux操作系統:承載應用程序、數據庫的運行,提供CPU供應用程序計算。2.應用程序(Java/Python/Php):JAVA主要采用Servlet、JDBC承載網絡的傳輸、數據庫連接管理。3.數據庫(MYSQL):主要理解關系類數據庫的存儲,對數據進行操作。4.HTTP/TCP:熟悉重點網絡協議,它分為包頭/包體進行傳輸,包體格式可能分為form、json、pb、二進制。

      第二階段:項目練習

      通過第一個階段學習,你對編程從一無所知到有所斬獲,對計算機世界充滿了好奇,甚至有所開心。這時候,你最應該做的就是去滿足你裝逼的夢想。

      假設你是爬蟲方向,你應該去爬表情包、爬知乎數據、自動搶票,去滿足你無數個裝逼夢想。

      假設你是算法方向,你可以去研究推薦算法、圖像識別模型,去做個商品推薦、人臉識秀一秀。

      假設你是后端方向,你可以去研究下網絡編程/網站開發開發個仿微信聊天應用,體驗下lowB版微信。

      畫外音:多做項目,坑是一步一步踩出來的。

      作為大學生,實驗室、軟件設計比賽、開源社區都是你發揮想象力的天堂,這些倒騰的經歷將是你畢業時最寶貴的經歷。

      第三階段:強化理論

      經過前兩個階段實踐,時間來到大三,這時候基本的軟件開發已入門差不多達到普通培訓班畢業水平。同時,專業課如數據結構/操作系統/計算機網絡也上的差不多了,對概念多多少少有初步了解。

      這時候,你會發現很多原理你不懂,將很難更上一層樓。

      ?你不知道使用ArrayList還是LinkedList??你不知道為什么要使用線程池??你不知道為什么分層設計使用分布式場景?

      你將處于寫代碼一時爽,一直寫一直爽,遇到性能問題直接土崩瓦解。所以,你不得不去學習理論知識讓你走得更遠。

      問題:為什么在這個階段強化理論知識?

      在新手階段去強化理論知識,會讓你興趣驟減且產生學了有何用的錯覺。同時,這是最好的時機,學校專業課學完你有基礎概念,你有實際軟件應用場景,這些東西讓你深挖理論的時候會快速給你構建起基礎圖譜,讓你興趣激增不斷體驗學會的東西,將戳痛你最痛的神經,瞬間把你以前遇到的問題有新的認知,這就是答案。簡單說,面向問題,解決問題,讓你實實在在感受到成長,這就是成就感的力量。

      問題:如何高效的學習理論?

      其實,編程語言和計算機基礎都是相通的,只要你學透一門編程語言剩下的就大同小異。當然,計算機基礎畢竟是枯燥無味的,學習畢竟是有方法的。

      舉個例子:

      站在編程語言的角度,你用心去總結,你會發現不管什么編程語言,變來變去都是換了個花樣在談以下內容。

      ?程序結構(數據類型、控制語句、面對對象、異常處理)?集合(list、set、map)?文件操作、網絡通信(io、bio、nio)?線程、線程池

      不管在面試還是技術探討,重點考察的都是集合、網絡通信、線程/線程池。源自于它跟計算機基礎有緊密結合,你要優化它們你必須具備扎實基本功。

      基于我的研究經驗,我建議大家在學習計算機基礎的時候,不要因為理論而理論。你應該去通過編程語言源碼去學習計算機基礎,只學你當前認為最重要的。

      舉個例子:

      當我去學習數據結構/算法的時候,我會一邊學習源碼一邊思考數據結構,這樣就讓我有實際應用場景不會因為理論而理論。我學習list、set源碼的時候,我就學會鏈表、棧。我學習map的時候,我就學會了紅黑樹、散列表。

      當我去學習計算機網絡的時候,我會一邊學習socket的用法,學習Linux網絡通信模型epoll,這樣就重點把網絡協議學會了。同時,很多應用場景極少的理論知識,我就粗略記憶或者跳過,這樣就節約了很多時間。

      當我去學習線程/線程池的時候,我會學習鎖機制、生產者/消費者模型這些操作系統原理的重要知識,跟編程語言中關聯不大的我就粗略記憶。

      第四階段:深究專長

      經過前面三個階段的學習,你已經具備扎實基本功和項目實戰經驗。接下來,你需要做的就是更加的專業化,研究一些有生產意義的東西。如果你一直寫學生管理系統,這些沒有價值沒有意義的東西,那么毫無意義。

      這時候,你應該去互聯網公司驗證你學習的技能。除此之外,你可以去學習額外的成熟先進技術棧。這樣,你就有實際業務經驗,就有技術的寬度,同時又有深度,這就是你核心優勢,畢竟算法/數據結構這些東西在競爭的時候大家都會。

      畫外音:去實習,最好去大廠實習,接受互聯網軟件開發的挑戰。要是不能,那么去研究實際企業技術棧的應用與底層實現。

      舉個例子:

      假設你是后端開發,你就可以去學習微服務的技術棧,springboot、dubbo、docker、hadoop都可以去學習。除此之外,設計模式,redis原理都可以去學習研究,只有這樣當你去面試的時候,你有很多話題和故事講給別人聽,你的專長研究既可以讓你說業務場景,你又可以講底層原理,對答如流。

      05

      經過上面的訓練,已經具備了解決問題、快速學習、編寫代碼能力,也就是具備軟件工程師的職業素養和扎實基本功。

      這時候,進入互聯網公司開啟職業道路,你將會很快有產出,不會陷入徘徊自閉的狀態。更何況,你的職業素養已經能夠讓你遇到問題,能快速的學習克服困難。但是,要是讓你去參加面試可不一定能獨善其身,畢竟工作擰螺絲,面試造火箭可不能疏忽大意。

      接下來,重點講一下如何應對面試?

      面試也就是把自己賣出去,讓別人覺得你值。簡歷是至關重要的環節,所有的知識和技能全都是圍繞它展開,否則毫無意義。因為在面試中,面試官關心你有什么,也就是面試完全圍繞著你會的東西展開提問,所以你就把你的優勢發揮到極致就行。

      環節一:準備簡歷

      簡歷一定要認真對待,一定要簡介精煉,盡可能把內容壓縮到一頁,畢竟簡歷篩選就30秒不到。這時候,簡歷排版、簡歷字體、簡歷模板都有講究,細節決定成敗。

      在寫簡歷的時候,主要分為個人資料、實習經歷、項目經歷、專業技能。其實,沒什么技巧,參考STAR原則,重點體現你在項目中的價值和思考。

      1.要體現做了什么事情?2.遇到什么困難?3.怎么解決的?4.產出是什么?

      假設有讀者需要簡歷模板,可關注提供給大家。

      環節二:梳理知識體系和刷面經

      以前,學習知識是零散的,學習策略更多是面向解決問題,以至于知識不系統,表達邏輯層次有限。面試官邏輯思維強,所以你必須做好充足準備才能脫穎而出。

      最好的策略就是梳理知識體系和準備面經,我們都知道要是你面試官問的問題是你剛好熟悉的問題,你豈不是輕松闖關成功?所以,準備考綱、梳理知識體系、瘋狂刷題這就是最好的策略。

      按照互聯網面試流程大多數分為三輪面。

      一輪面試:主要是考察計算機基礎知識和擅長語言基礎知識,重點考察數據結構/算法、網絡編程、擅長語言基礎。但是,絕對不是死記硬背的東西,一定是深度和廣度緊密結合,環環相扣直到把你肚子里的東西全部挖出來。

      舉個例子:

      1.獲取鏈表倒數第N個節點的值,只遍歷一次。2.有一個1G大小的一個文件,里面每一行是一個詞,詞的大小不超過16字節,內存限制大小是1M,返回頻數最高的100個詞。3.談談HashMap,說下它們的數據結構?4.Key在HashCode取余以后,它可能全部堆積在某幾個Key對應的鏈表上,這樣就會造成該數據結構存儲或者查詢低效,那怎么解決呢?5.為什么會鏈表要變成紅黑樹,什么時候從鏈表變成紅黑樹,什么時候從紅黑樹變回鏈表?6.假設多個線程并發訪問,那可能造成容器更新或者操作出現問題?7.除了使用synchronized加同步鎖,還有沒有其他辦法解決呢?8.為什么采用CAS,能說一下ConcurrentHashMap的具體實現嗎?

      你會發現每個問題都是環環相扣,從簡單到難,目的就是挖掘出你的極限。大多數情況都是,從數據結構/算法入手,擴展到編程語言特性,再擴展到并發/網絡編程不斷進行深挖。當直接問實際用法應試者答不出來的時候,就會再次引入到計算機基礎知識,這樣不斷反復調度試探應試者的是深度和廣度。

      二輪面試:這輪考察實習/項目經歷,重點考察你的面試儲備。眾所周知,大部分應屆生項目經驗十分有限,大多數是圖書館管理系統、電商系統這樣。重點說一下應對策略,可以去網上找你做的項目可能遇到的領域難題,去找解決辦法,最終擴展補充到你的項目中。

      三輪面試:這輪面試更多是小組經理考察應試者的邏輯思維、抗壓、時間管理等基礎能力,看是否能融入團隊,畢竟適合團隊的才是最好的。

      這里主要講了思路和應對策略,至于篇幅有限,面試題只能讀者自己梳理,假設有需要后續再聊。大體的思路:

      1.梳理知識體系看面試可能考哪些東西?2.去網上搜尋和整理面試題?3.把數據結構/算法、并發/網絡編程、項目實戰串聯起來,還要學會理論知識和實戰中來回串聯。

      總之,作為普通學校的同學,你只有花更加多的時間在項目實戰中,實習/打比賽/逛開源社區,這些時間讓你更快接近成為職業軟件工程師。當機會來臨的時候,你抓住機會就踏入大廠的大門了,幸運永遠不會無緣無故眷顧你。

      【原創】關于Spring中的參數校驗的一點思考

      Spring常見問題總結(補充版)

      分布式ID生成方案總結

      團隊開發中的 Git 實踐

      IDEA中的Git操作,看這一篇就夠了!

      入職一個月的職場小白,談談自己這段時間的感受

      Code Review最佳實踐

      后端開發必備的 RestFul API 知識

      技術面試復習大綱

      如何給老婆解釋什么是RPC

      干貨 | Java程序員必備的一些流程圖

      十分鐘搞懂Java效率工具Lombok使用與原理

      看完這篇文章,別說自己不會用Lambda表達式了!

      一些有助于你拿Offer的文章

      面試官:“談談Spring中都用到了那些設計模式?”。

      盤點阿里巴巴 15 款開發者工具

      SpringBoot 處理異常的幾種常見姿勢

      5分鐘搞懂如何在Spring Boot中Schedule Tasks

      本文轉載自微信公眾號JavaGuide

      計算 開發者

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

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

      上一篇:ai無代碼開發平臺(ai無代碼開發平臺有哪些)
      下一篇:excel表格如何設置文本倒序(Excel文本倒序)
      相關文章
      国产综合成人亚洲区| 日本亚洲色大成网站www久久| 亚洲欧美日韩中文高清www777 | 亚洲国产精品久久丫| 久久久久久久尹人综合网亚洲 | 亚洲狠狠爱综合影院婷婷| 久久亚洲中文字幕无码| 亚洲精品国产精品| 亚洲s码欧洲m码吹潮| 亚洲色少妇熟女11p| 亚洲精品日韩一区二区小说| 亚洲精品无码永久在线观看男男| 亚洲综合激情五月色一区| 亚洲最大的成人网站| 亚洲欧美日韩综合久久久| 国产亚洲人成在线播放| 国产亚洲一卡2卡3卡4卡新区| 国产亚洲成在线播放va| 亚洲人成国产精品无码| 久久久久亚洲av成人无码电影| 最新国产AV无码专区亚洲| 亚洲中文字幕无码久久综合网| 亚洲人成网77777色在线播放| 亚洲av无码潮喷在线观看| 亚洲高清在线播放| 久久久婷婷五月亚洲97号色| 亚洲高清无在码在线无弹窗 | 亚洲精品国产高清嫩草影院| 亚洲一区二区三区在线视频| 国产自偷亚洲精品页65页| 久久精品国产精品亚洲艾草网| 久久亚洲精品成人av无码网站| 7777久久亚洲中文字幕蜜桃| 91亚洲视频在线观看| 亚洲午夜一区二区三区| 爱爱帝国亚洲一区二区三区| 亚洲人成色7777在线观看不卡| 亚洲人成网7777777国产| 67pao强力打造67194在线午夜亚洲 | 亚洲AV成人片无码网站| 亚洲AV无码专区日韩|