<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          字節(jié)三面過啦!

          共 5217字,需瀏覽 11分鐘

           ·

          2021-08-29 23:44

          大家好,我是小林。
          上周我發(fā)了個讀者字節(jié)三面的面經,結果評論區(qū)很多人不相信這是校招的面經,覺得難度有點高。
          首先這個確實是讀者真實的校招面經,再來因為他之前實習過,他的實習項目里涉及到了不少中間件,所以面試官對于高并發(fā)問題考察比較多,也算是按簡歷來問的了。
          正好他自己在學習的時候,有看源碼的習慣,所以面試的問題,他都能應對,甚至能說到面試官眼前一亮,然后在幾天拿到了字節(jié) Java 后端的意向。
          我也邀請了這位讀者分享他的學習路線和心得,他最后的心得討論八股文的事情,說的很好,值得一讀!

          我的情況

          我先說說我的基本情況。
          雙非一本,科班,大學 0 基礎,隨著學校課程,選擇后端開發(fā),大三寒假在某獨角獸企業(yè)Java 實習到提前批,字節(jié)已 oc。
          我這次的分享更多的適合準備校招或者是大學已經決定選擇后端方向的同學,社招大佬見笑~
          首先這里要說明一下哈,下面的路線可能對于很多人是「填鴨式教學」,就是基本會是面向面試準備的,關于面試工作實際開發(fā)以及程序員自我修養(yǎng)的這部分會放在最后心得部分,感興趣的可以選擇性觀看。
          我的觀點始終是由點到線,由線再到面。
          很多東西肯定是經典的書籍會更加權威和全面,但是說實話,不是每個人都能抱著本書看的進去,并且理解透徹,比如我一開始看書的時候就是很迷。
          所以我的建議一直都是,從弱智的,易懂的,有實際案例的博客或者是視頻看起,了解大概,動動手撞撞坑之后,再去系統(tǒng)性的看書,這樣會比較好理解。
          起碼我是這樣經歷過來的,因為實在沒有其他辦法。

          學習路線

          首先推薦幾個后端學習的倉庫吧:
          Github上很出名的:
          • javaguide

          • cs-note

          • JavaFamily

          當然我也很期待小林大佬能早日推出自己的倉庫啦~
          首先要搞清楚,作為后端開發(fā),我們需要掌握一下什么知識點,其實無外乎就是如下內容。

          編程語言

          以 Java 為例子。
          Java語法基礎
          這個沒啥好說的,科班的話有教材,非科班的話建議看一下入門教程,菜鳥教程之類的(別嫌弱智、簡單)。
          看完之后可以全面的看一下進階書籍(這是面向科班&非科班),例如著名的:Java核心卷等(說實話,一開始讓我看,真心看不下去,可能是我菜…)。
          集合框架源碼
          必須是源碼,現在這種爛八股應該不會有人不會源碼吧?而且源碼里面很多設計思想可以學到很多,例如hash的泊松分布推導等。
          上面那部分基礎看完應該都知道這是什么了吧…有能力有自信的可以根據面經題目自己去分析源碼,小白同學建議網上找一些源碼分析(這里一定要注意,我是很建議經常百度的,但是不要無腦百度,一個源碼可以看多一些博客對比一下,然后自己實際去看一下分析一下是不是如此,切忌人云亦云),有一些能力之后自己去總結。
          并發(fā)編程
          并發(fā)編程是現在后端語言很重要的一塊基礎(當然工作中可能比較少機會可以用到),但是并發(fā)編程扎不扎實,運用的熟不熟練可以很好的體現一個程序員的編程素養(yǎng)和基本功。
          這里肯定有大佬會吐槽說面試造航母,進門擰螺絲哈,hhh確實并發(fā)編程其實一般場景運用不多,但是在項目里,很多可以優(yōu)化的細節(jié),別人做不到你能做到的,往往就是在這些點,包括下文JVM。
          • 基礎:上述的教程,自己打一下練練手。

          • 進階:書籍《并發(fā)編程的藝術》、《并發(fā)編程實戰(zhàn)》。

          JVM虛擬機
          這里可能很多人有些疑問了哈,實際開發(fā)中你寫項目需要了解虛擬機嗎?真正調優(yōu)輪得到你嗎?
          emmm,這塊的話只能說見仁見智了,個人認為開發(fā)里的虛擬機小調試以及一些常見溢出的分析還是很有必要的。
          退一萬步說,學Java的,總不能連虛擬機都不知道吧。我個人認為啊,任何東西都是知其然、知其所以然、知其所以必然,了解清楚了,知道原理,你寫代碼的時候會有一種看透的感覺以及會有前所未有的安全感。
          • 基礎:虛擬機有很多原理分析的整套文章,我這里就不推薦了,都可以搜的到。

          • 全面進階:推薦周志明大佬的《深入Java虛擬機》,現在應該有第三版了。

          Java相關框架使用以及源碼了解
          從常見的ssm到spring全家桶,這一塊真心不好學,資料很雜,入門的話我建議去看一下黑馬程序員,尚硅谷相關教程,或者是how2j這個網站,上面也有詳細的路線和簡要入門教程(各位大佬別吐槽哈,不是宣傳培訓班,但是確實作為小白入門很香)。
          上面是簡單入門,無腦運用,實際進階的話還是看看源碼看看書哈,一定要找些項目來做做。
          • 推薦書籍:《spring源碼分析》。

          • 面試重點:這塊多去看面經和源碼吧,實際開發(fā)里需要關注的點還是有的,例如異步注解的循環(huán)依賴報錯,我在實習的時候就遇到了,不懂原理真心不好解決。

          數據庫

          以 Mysql 為例子。
          科班基礎有教材,非科班基礎推薦小林大佬的《圖解mysql》。
          進階的話,極客時間的《mysql45講》,書籍主要兩本,分別是《高性能mysql》和《mysql技術內幕》,書籍建議有一定基礎再看。
          面試重點:小林&帥地的文章里都有很多,不再贅述。

          中間件

          Redis
          這個入門也是看一下教程會快一些,科班應該也沒有專門的課程吧?
          入門可以考慮尚硅谷之類的視頻,進階的話可以看看書和一些源碼分析:《redis的設計與實現》,老經典了吧。
          不過 redis 個人認為難點在于運用,這點就不多說了,學完基礎大家應該都會知道后續(xù)的學習路線了,可以期待一下小林大佬的《圖解redis》
          mq、kafka
          這個有余力可以學一下,面向面試的話兩者都行,實際運用看業(yè)務場景,這里不再贅述。
          入門還是推薦看視頻,b站很多,隨便搜,沒有什么特別推薦。
          進階的話,推薦書籍《rocketmq的技術內幕》,不過說實話,我自己也在看mq源碼,感覺這本書寫的一般,不夠細節(jié),目前沒發(fā)現什么特別全面的書籍。

          計算機基礎

          算法與數據結構
          這一塊的重要性不再多說啦,當然也有很多人吐槽這個沒用的,確實我也很煩應試刷題,可以沒辦法,確實是面試硬性要求,尤其是外企入門推薦左程云大神視頻&帥地玩編程的相關文章。
          設計模式
          科班有教材,非科班建議《大話設計模式》這類書籍入門
          這一塊偏抽象與實踐,主要還是業(yè)務場景,需要自己多找找實際案例看看多理解。
          計算機網絡
          科班有教材,非科班直接無腦小林大佬的《圖解網絡》。
          看完之后進階可以考慮詳細的看一下《計算機自頂向下》,源碼分析等,例如:開發(fā)者內功修煉公眾號。
          面試重點,后面心得會提到。
          操作系統(tǒng)
          科班有教材,非科班直接入手小林《圖解系統(tǒng)》。
          進階可以考慮看一下《操作系統(tǒng)導論》,國外的課程CSAPP,MIT相關課程等等(動手會比較多)。
          面試重點,后面心得會提到
          匯編、計組
          這一塊科班應該很熟悉,噩夢,非科班的話建議找一些視頻入手,b站很多大學的計算機相關課程,播放量高的都挺不錯。
          分布式rpc
          這里不再贅述了,校招生估計大都是了解基本概念,相信學完上述內容,自己應該清楚該怎么學了~
          云原生云計算
          docker、k8s這些這里不贅述了哈,相信需要學這個的大佬自己知道如何學了~

          一些心得

          說實在的,剛剛那個路線其實稍微學過點后端的估計都知道,而且現在開源倉庫太多啦,我想可能對大家?guī)椭蟮倪€是自己的學習感悟吧。
          其實說到這里相信大家肯定很清楚了,太多資料,太多八股了…
          這里聊一下我對八股的一些看法吧(因為我看到上次小林大佬發(fā)的面經下面評論有同學提到八股的問題)。
          首先得搞清楚八股是什么,一個知識點,你能把使用以及原理說出來,我稱之為八股,但是你能把底層關聯(lián)以及業(yè)務使用,優(yōu)化歷程也能搞清楚,我稱之為能力。
          固然,現在的 CS 基本已經形成了套路,一套一套的面試題,很多人無腦跟著背就行,甚至現在還有分公司,分部門,對應的面經和知識點都有人總結,可見八股影響之深。
          但是退一步說,八股真的沒用嗎?八股不能體現你的能力嗎?八股對于你的工作真的沒有提升嗎?
          以我自己為例吧,這里不以偏概全哈,單純就是分享一下自己的經歷和看法。
          例子一
          剛剛上文學習路線有說到虛擬機的學習,很多人吐槽是不是這玩意沒必要學?
          但其實呢,我在實習的時候就遇到了自己的一個模塊線上oom了,排查了很久通過動態(tài)數據定位到是新生代與老年代比例的一個問題。
          當然了,對于很多大佬來說,這不算什么。但是對于我來說,假設我連這一塊的基本知識都沒掌握的話,我即便百度到了解決辦法(例如無腦把比例調大,把內存調大),還是沒法從根本上解決問題,所以我還是挺慶幸的,不然那天就背鍋了…
          例子二
          再者說吧,還是八股的問題,面試的時候這可以作為你的一個優(yōu)勢,別人回答 CMS 就是簡單的說下基本過程(我稱之為八股),但是你回答可以把三色標記出現的問題以及 CMS 短暫的 STW 的問題引出G1,并且還能舉出例子,你在實習或者業(yè)務中使用的是什么收集器,為什么,怎么切換的(我稱之為能力)。
          例子三
          再舉個例子吧,一個很八股的問題,三次握手,老八股了。如果是簡單的說出過程甚至需要說出中間的標志位,我都認為這是基礎(八股),但是如果你能說出為什么前兩次握手不能帶數據,怎么避免攻擊的,實際企業(yè)應用是怎么做的(開發(fā)者內功修煉里有相關文章),我稱之為能力,我到現在還記得面試的時候把相關過程分析以及這一塊內核的源碼說出來的時候面試官驚訝的表情,這就不是八股了,這是你的優(yōu)勢。
          同樣的,工作中也是一樣,我實習的部門是做底層開發(fā)的,網絡嗅探,內核參數監(jiān)控是常事,所以我會認為,作為一名程序員,不管說是不是真正用到了,但是實際上經常接觸的東西,這些東西,還是值得多去了解的。
          例如之前面經提到的QUIC,實際上很多廠內部已經有類似協(xié)議開發(fā)的應用了,所以個人認為還算是一個很常見的東西。
          例子四
          多給一個例子吧,也是面試的小技巧,可以多說一點內容體現你的基本素養(yǎng)。
          例如Java很熟悉的volatile關鍵字,假設說我是面試官,我的面試者只說到原子性有序性,JMM內存模型這些,我會認為這是八股。
          但是如果能說到匯編文件的lock前綴,內存屏障,MESI設計,MESI與volatile的關系,MESI優(yōu)化隊列,總線鎖與緩存鎖,總線風暴,那么我認為這是能力。
          至于這對工作有沒有用,我個人認為,見仁見智吧(總線風暴就是一個點)。
          例子四
          上次面經文章分享的是我的實習項目,具體就不方便透露了,但是還是說一個點吧。
          實習項目里使用了mq,我在開發(fā)的時候會注意去看其他企業(yè)的相關實施方案,會去整理源碼,然后開發(fā)過程中會進行壓測,無意間我發(fā)現,我的mq使用的比隔壁一位高級開發(fā)還要溜,當然我就是隨眼一瞟覺得他寫的不怎么樣。
          那么我在面試的過程中,面試官同樣的一個mq怎么保證消費可靠這種問題,我與別人回答的差距就出來了。
          這里面我就不強調os和網絡,數據庫這些基礎知識的重要性啦,我個人不是很建議出了什么新技術就莽著去學習,因為萬物離不開底層,吃透底層,再搞清楚業(yè)務,那么現在的很多中間件啊,分布式相關的知識啊,個人認為只是新瓶裝舊酒。
          舉上述例子我不是想秀自己的知識儲備,這些在各位大佬面前真的是不值一提,羞愧萬分,只是想通過個人在校招準備過程中說明一點。
          就是八股 ≠無用,面試通過 ≠ 背八股。
          很多時候你以為你問題都回答上來了,面試卻掛了,面試官是在刷你KPI(當然確實也有可能是)。
          但是我更多的認為要多反思自己,是不是說到位了,是單純的在背,還是說自己的理解,結合業(yè)務場景來說,并且說出優(yōu)化的點,說出這種方法存在的問題,我個人覺得這是會讓面試官眼前一亮的點。
          同時,也是我在“八股”過程中的一點感悟吧,其實校招只是人生的一個階段,欲速則不達,要珍惜現在能靜下心來沉淀知識的時間。
          程序員的內功修養(yǎng)與素養(yǎng)真的很重要,所以在“八股”之余會多去看看一些知識的源碼以及企業(yè)里面的應用,會去看看《代碼整潔之道》、《程序員的基本素養(yǎng)》等,總結成自己的筆記,未來希望能開源。
          關于有人問到如何學的問題?
          其實很簡單,還是那句話,知識點都是那么多,深度和延伸得靠你自己了,一個大方向就是,從語言的實現到操作系統(tǒng)(網絡)的實現,按照這個方向去搜集資料,去看源碼,相信會很有收獲的。
          肯定有人提到,學這么多,進去還不是擰螺絲?
          這個經典問題,只能說見仁見智了,我始終認為,有擰螺絲的時候,當然也有造航母的機會,這得看你的選擇與把握機會的能力。
          當然這里也要大廠小廠的爭論,這里就不說了。不管在哪里,肯定會有擰螺絲的時候,但這不妨礙你有一顆自我學習,自己提升的心,與君共勉,這可能是我年輕氣盛的想法。
          最后再次說明一下,我是小林大佬的忠誠讀者,他的圖解系列給了我很多靈感和幫助,應他邀請寫分享,第一次寫這些類型的內容,如果有任何語言斟酌的不到位的話,望各位海涵!
          最后如果大家能夠從中有一點點的收獲或者是認同,借小林大佬的光,萬分榮幸,希望大家也能找到自己滿意的工作。
          瀏覽 91
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美三级台湾三级少妇 | 天天干夜夜夜夜 | 狼人永久地址在线观看高清无码 | 亚洲欧美日韩豆花 | 黄色视频在线观看www |