人們都說,這個世界上有兩種人注定單身,一種是太優秀的,另一種是太平凡的。
我一聽呀?那我這豈不是就不優秀了嗎,于是毅然決然和女朋友分了手。
人們都說,互聯網寒冬來了,這個時候還在大面積招人的公司,必然是牛逼的公司。而這個時候勇敢跳槽的人,必然是牛逼的人。
于是2019年1月25日下午14:00,我開始了字節跳動的社招面試。
為了這天,我前一天排老長的隊理了個利落的發型,胡子刮得一干二凈。穿上嶄新的新百倫999,連襪子都是嶄新的NB,墨綠色工裝褲配酒紅色衛衣,外面再搭一件精致的黑色羽絨小坎肩,準時準點出現在電腦屏幕前,準備開始視頻面試。
去面試今日頭條,你最好有點心理準備。我面試過頭條的好兄弟給了我一句忠告。不過郵件對考查內容寫的一清二楚,所以一面,我并沒有做太強的心理建設,事實證明我可能對通用型業務和軟性技能的理解還不夠透徹。
時間到了,畫面里出現一個面積很小的房間,面試官坐在里面調節姿勢和座椅靠背。
這不是我第一次,但我卻比第一次還緊張。面試官跟我的一位悶騷朋友很像,長相、氣質、說話聲音如出一轍......
確認過眼神,我們在初次見面的緊張和局促中正式開始,前戲的部分大同小異,自我介紹,公司職能,項目簡介。
小作坊走出來的小猿,項目經驗并不出彩,沒有高并發,沒有分布式,前端后臺服務器和數據庫部署在同一臺機器上。為了不顯的太low又假裝不經意提了提自己在GitHub上有自己的開源框架,但是他并不care。我的花樣耍完了,就到了他肆意揮舞小皮鞭的環節。
“我看你項目上都是偏獨立開發,或者你一個人在項目中承擔了很大的比重。那你能不能說說你們的項目在部署的時候用的是怎樣的架構?”
“主要就是Django部署那一套,nginx+uwsgi+Django+MySQL。”
“那你詳細說一下nginx在部署的時候有哪些必要的配置?”
“這個我在nginx里配置了端口的轉發,對外監聽80或443,然后轉發到內部uwsgi的端口,由uwsgi來處理業務請求,部署Django項目。”顯然我對Nginx的認知僅僅局限在配置個端口反向代理,偷換概念企圖蒙混過關。
“不是,我的意思是Nginx當中不是有很多參數配置嘛,你在項目部署的時候那些參數是必要的配置,有哪些可以調優”
對方識破了我的小伎倆,并不給我蒙混過關的機會,無奈我只得低頭認慫,表示并沒有用過其他配置,出師未捷就挨了當頭一棒。
“那你再說說uwsgi它的工作原理吧,它的底層是怎么工作的。”
因為緊張的緣故,原本不會的知識,一下子變得還是不會,囫圇吞棗地講它代理一個服務端口,分配不同的線程處理客戶端瀏覽器的請求。
“那他的底層是怎么實現的?看來我如果還沒求饒,他就不打算放過我。
......(這里省略一些不清楚、不知道、忘記了之類的詞藻,保留一絲尊嚴。)
接下來是關于redis哲學三連“是什么?為什么?怎么用?”
我把肚子里僅有的關于Redis的一滴墨水擠成了三滴,仍然沒有給出他想要的。繼續追問Redis的數據存儲方式,操作方法,讀寫操作在底層都是如何實現。
啊~,好深。
除了低頭委屈說不會,內心的我已經意識到了問題的嚴重性,平常面試你只要一喊不行,對方就會體貼地換一個方向繼續深入,這次我都快被搞哭了,他居然換了個姿勢繼續往深懟,這誰頂得住啊……
到了這一步我的心理防線基本宣布告罄。往后又問了關系型數據庫表的存儲結構,我隱約記得是畢加索還是畢加樹來著,完后又追問到索引的實現原理,創建一個索引怎么它就能加快查詢效率。
其實面試官的套路大多如此,每個技術都盡可能的深入,深到你不會為止,并不是非得要把你折磨的不能自理,而是為了考察你的技術水平到底如何。但是事到如今我的大腦已經無法給自己完成心理建設了,摧枯拉朽般智商、情商、性商、逆商全線崩盤。
當然這也不能全怪我,上來就是三個大悶棍,就是李云龍來也讓旅長打成懵逼了,哪里還能騰出精力開意大利炮。
下一個節目到了數據結構,面試官穩準狠一步到位點到了我的敏感地帶:堆。什么是最小堆?什么是最大堆?在堆中怎么插入一個元素?
這個問題上值得慶幸的是,我居然急中生智,鬼使神差地用了四種不同的方式表達我不會,每種方式都尷尬而不委婉,并且還不重樣。好歹面試一波兒不能讓人家覺得我一無是處,多少還算有點文筆....
其實我平時稍微多看哪怕一眼,知道堆的實現方式是平衡二叉樹,這一連串的問題不至于答的這么慘,面試的時候腦子里記得看過棧和隊列,完全不知道堆是怎么實現,下來才知道就是個平衡二叉樹。
這個時候的我已經被折磨的身心俱疲了,面試已經持續了將近四十分鐘,嘴開始打漂,情緒緊張思維也難以集中,回答中開始大量出現我感覺、我猜、可能、應該是等高危詞匯。
死亡轟炸還沒有結束,接著是MQ,我所使用的MQ的技術選型,為什么選它,項目中如何應用,最后無一例外,它底層是如何實現?怎么保證的穩定的消費者生產者隊列?回答的中間穿插著我不自信的連接詞“嗯~啊~哼~哦~”。每次我招架不住求饒喊著不要不要的時候,我都能看到面試官嘴角狡黠的微笑,由內而外的快感浮現在臉上憋都憋不住。心里暗暗發誓遲早有一天,我也要在上面。
最后以一道算法編程題結束,如何給一個雙向鏈表排序?我失去控制的舌頭自作主張地把話鋒導向了快速排序,那,你來寫一個雙向鏈表的快速排序吧,這個視頻頁面上旁邊有一個編輯器,語言你隨便,用c++或python都可以,大概10分鐘的時間,可以吧。
“那,我用C++試一下吧”
我隨即在編輯器里自信的def了一個quickSort函數,參數是一個int數組,還有兩個int值代表low和high兩個檔位,函數末尾加上冒號,下一行開始縮進四個空格以示尊敬,當然代碼段的區分花括號必須得有。
寫完這幾句,雙手這才收到了大腦已經在十分鐘前宕機的消息,于是兩手一攤表示無能為力。時間才過去一分鐘,剩下時間我開始拿紙筆低頭寫字,沉默的面試官抬頭看到還以為我在紙上排演算法,可實際上我是在拼盡最后一絲腦力回顧剛才他問我的問題,倒不是為了面試后好好復習,主要是我一會兒要寫知乎,哈哈,我可真是個小機靈鬼。
期間面試官也用自己的代碼快速的敲擊鍵盤,聽聲音猜大概是在吐槽HR,篩選簡歷的時候長點心,找來面試的這都什么玩意兒。
時間差不多了,再一次厚著臉皮主動承認自己寫不出來。實際上,我哪怕正經用C++寫一個數組的快速排序也算話,然而當時的我滿身只剩下疲憊,痛苦和羞辱。
面試官終于放我走人,長達一個小時的視頻聊天終于結束,關掉視頻的一剎那,隨著渾身一陣抽搐,整個人癱軟在椅子上。我是誰?我在哪兒?剛才發生了什么?
哦,剛才發生了那種事情。我之前對那種事情還挺向往的,內心對此充滿了激情和憧憬,怎么現在,對這件事情一點興趣也沒了?現在只想這么癱著什么也不想做。要不要點根煙抽抽?哦對了我不抽煙。原來賢者時間腦子里這么多想法……
飄飄忽忽渾渾噩噩,腦海里一直回蕩著周董的音樂:這感覺已經不對我最后才了解,一頁頁不忍翻閱的情節我好累,你沉默看我掉過幾次淚多憔悴,而我心碎你受罪你的offer,我不配~~~!
面試過程和提到的問題大致如此,為了閱讀體驗有部分藝術修飾,但是內容全部都是真實的。接下來咱們說點正經的。
講真的現在的我只想把頭插到土里再也不出來,之前寫過超級濃的雞湯,講學習方法,被技術號拿去直接頂置到現在;寫過高贊,講連連看的外掛,到現在還有人私信問我能不能做外掛的私活兒,一天上千的利潤;作為培訓講師講培訓機構內幕,有上海北京的培訓機構給到一小時1k了我不想去,想趁年輕進大廠做技術。在大家一頓商業吹捧之下就真的以為自己是個大佬了。
最后小編為了再戰字節特地整理了這份【Java Github 超硬核面試 “備戰” 手冊】!除了Java各種技術專題知識、大廠面試真題,我也會分享一些近些年自己開發和工作過程中的一些感悟、心得和無奈。
本倉庫大部分內容來自我近幾年的收集和整理,整體文章思路也是圍繞著【面試備戰計劃】來進行整理的,主體內容包含:職業規劃篇,跳槽篇,實操篇,一線大廠面試題篇,以及高頻面試必備綜合篇等知識內容。>關注公眾號:“程序員白楠楠”免費獲取!
一線大廠面試題篇(350+題)
JVM面試題匯總(100+題)
Mysql面試題匯總(一)
Java高頻核心面試題庫(1000+題)
關注公眾號:“程序員白楠楠”免費獲取!