準(zhǔn)備
敲定了方向和目標(biāo)后就開始系統(tǒng)準(zhǔn)備,主要分為以下幾個方面來準(zhǔn)備。
算法題
事先已經(jīng)看過別人的社招面經(jīng)知道頭條每輪技術(shù)面都有算法題枉圃,而這一塊平時練習(xí)的比較少功茴,校招時刷的題也忘記了很多。因此系統(tǒng)復(fù)習(xí)的時候算法題還是花了比較多時間的孽亲。先是快速刷完了劍指 offer坎穿,這個校招時已經(jīng)刷過兩邊了,因此現(xiàn)在刷起來會相對快一些返劲。然后就是啃 LeetCode 的題了玲昧,LeetCode 的題比較多,想在短短幾周內(nèi)刷完基本是不可能的篮绿,因此我主要按照類型去刷孵延,每個類型刷幾道就會比較有感覺了。比如鏈表的題優(yōu)先考慮遞歸和雙指針來解決搔耕,棧和隊(duì)列的題優(yōu)先考慮用兩個椣对或隊(duì)列來解決,樹的題基本都是遞歸等弃榨。不過數(shù)組和字符串的題一般比較靈活,這種題只能盡量多刷了梨睁。平時要上班刷題也不方便鲸睛,我采用的方法就是看題,用手機(jī)打開 LeetCode 的網(wǎng)站坡贺,看完題目后直接想解決方案官辈,腦子里大概捋一下代碼怎么寫,能想到的就過遍坟,想不出的就看看別人的解法拳亿,用這個方法刷起來就很快。用這種方法你可能會擔(dān)心面試時題寫不完整愿伴,其實(shí)不用太擔(dān)心肺魁,因?yàn)槊嬖嚨臅r候面試官看你寫的核心思路是正確的,邊界處理是對的基本就過了隔节,面試時間比較有限鹅经。
理論基礎(chǔ)
基礎(chǔ)這一塊主要以快速復(fù)習(xí)為主,主要是語言(我主要用C++怎诫,所以復(fù)習(xí)C++)瘾晃、操作系統(tǒng)和網(wǎng)絡(luò)編程。校招這一塊會問題的比較多幻妓,社招這一塊問的比較少蹦误,但是如果這一塊打不上來就比較尷尬了。語言就不說了,這一塊大家應(yīng)該都知道會考些什么强胰,校招的時候畢竟都瘋狂準(zhǔn)備過舱沧。操作系統(tǒng)就看內(nèi)存管理、進(jìn)程管理和文件系統(tǒng)哪廓,一般虛擬內(nèi)存問的多狗唉。網(wǎng)絡(luò)編程這塊就包括 TCP/IP 協(xié)議,HTTP協(xié)議涡真,網(wǎng)絡(luò)安全三個方面分俯。TCP/IP主要就是三次握手,四次揮手哆料,TIME_WAIT 的作用等這些掣准簦考的題了。HTTP 協(xié)議考察 HTTP 協(xié)議的返回碼东亦、HTTP 的方法等杏节。需要特別指出的是 HTTPS 加密的詳細(xì)過程要非常透徹,不然容易產(chǎn)生一種感覺好像都清楚了典阵,但是一問就有點(diǎn)說不清楚奋渔。最后就是網(wǎng)絡(luò)安全,主要考察也是 WEB 安全壮啊,包括XSS嫉鲸,CSRF,SQL注入等歹啼。
后端技術(shù)
這里的后端技術(shù)主要指工作中要用到的一些基礎(chǔ)組件玄渗,一些常見的后端架構(gòu)設(shè)計(jì)。主要準(zhǔn)備了MySQL狸眼、Redis藤树、消息隊(duì)列、zookeeper拓萌、分布式系統(tǒng)架構(gòu)設(shè)計(jì)和docker岁钓。MySQL 主要看了極客時間的 《MySQL 45講》,關(guān)于事務(wù)司志、索引甜紫、鎖以及 binlog 和 redolog 都講的非常好,也是面試最愛考的骂远,除此之外對數(shù)據(jù)庫的讀寫分離囚霸、分庫分表也要掌握。沒有任何利益相關(guān)激才,決不是打廣告拓型。Redis 主要看了《Redis 的設(shè)計(jì)與實(shí)現(xiàn)》额嘿,然后自己再總結(jié)了一下 Redis 的使用場景,以及 Redis 實(shí)現(xiàn)分布式鎖基本 Redis 就沒有問題了劣挫。消息隊(duì)列的開源軟件比較多册养,我主要選擇 Kafka 來學(xué)習(xí),主要看官網(wǎng)文檔压固,極客時間的《Kafka 核心技術(shù)與實(shí)戰(zhàn)》球拦,和一些技術(shù)文章等。不過極客時間的《Kafka 核心技術(shù)與實(shí)戰(zhàn)》帐我,我覺得講的比較一般坎炼,不是很建議。分布式系統(tǒng)的就準(zhǔn)備CAP理論拦键、BASE理論谣光、限流、熔斷芬为、一致性***算法萄金、主從架構(gòu)、集群架構(gòu)媚朦、異地多活氧敢、負(fù)載均衡、分層架構(gòu)询张、微服務(wù)等福稳。
深挖項(xiàng)目
沒有參與開源項(xiàng)目的經(jīng)驗(yàn),工作中做的項(xiàng)目也很一般瑞侮,項(xiàng)目這塊我實(shí)在沒什么太多拿的出手的,不過還是要挖掘一下鼓拧,畢竟這一塊是逃不掉半火。我說幾個我思考的點(diǎn)吧:
- 找項(xiàng)目中相對而言具有亮點(diǎn)的地方。比如我用 redis 實(shí)現(xiàn)了一個延時隊(duì)列季俩,然后對這個延時隊(duì)列我通過分片來解決瓶頸钮糖,通過分發(fā)來加快處理速度。
- 找項(xiàng)目中復(fù)雜的地方酌住。如果你做的項(xiàng)目中有復(fù)雜的地方店归,即使不是你做的,也可以拿來說酪我,前提是你要搞得非常清楚來消痛。
- 量化指標(biāo)。一個接口原來有性能問題都哭,比如你做了一個小的優(yōu)化秩伞,將其 TP99 的耗時從原來的 500ms 優(yōu)化至多少 200ms逞带。
- 賦能整個團(tuán)隊(duì)。在開發(fā)業(yè)務(wù)的過程中肯定會遇到一些重復(fù)的工作纱新,或者可以復(fù)用的服務(wù)展氓。你可以開發(fā)了某個工具或者服務(wù)化了某個功能推廣到了全組使用,給公司創(chuàng)造了價值脸爱。
Shopee
一面
- mysql 有那些存儲引擎遇汞,有哪些區(qū)別
- mysql 索引在什么情況下會失效
- innodb 與myisam 的區(qū)別?
- mysql 的索引模型
- mysql 主從同步怎么搞的簿废?分哪幾個過程空入?如果有一臺新機(jī)器要加到從機(jī)里,怎么個過程捏鱼。
- 樂觀鎖與悲觀鎖的區(qū)別执庐?
- binlog 日志是 master 推的還是 salve 來拉的?
- redis 持久化有哪幾種方式导梆,怎么選轨淌?
- redis 主從同步是怎樣的過程?
- redis 的 zset 怎么實(shí)現(xiàn)的看尼?
- redis key 的過期策略
- hashmap 是怎樣實(shí)現(xiàn)的递鹉?
- tcp 的握手與揮手
- select 和 epoll的區(qū)別
- http與https的區(qū)別,加密怎么加的藏斩?
- raft算法和zk選主算法
- Kafka 選主怎么做的躏结?
- kafka 與 rabbitmq區(qū)別
- kafka 分區(qū)怎么同步的
- kafka 怎么保證不丟消息的
- kafka 為什么可以扛住這么高的qps
- http各種返回碼,401和406啥區(qū)別狰域?
- redis 哨兵和集群
- kafka partition broker consumer consumer group topic 等都是啥關(guān)系媳拴?
- 兩個單向鏈表,返回求和后的鏈表結(jié)構(gòu)兆览,例如2->3->1->5屈溉,和3->6,結(jié)果返回2->3->5->1
二面
二面沒什么好說的抬探,和面試聊人生去了子巾,我以為是要涼的節(jié)奏,但是卻拿到了offer小压。
三面
HR 面
騰訊
騰訊面試提前1天和提前一個小時都會發(fā)短信提示线梗。去的騰訊濱海大廈面試,大樓的現(xiàn)代化程度很高怠益,不過需要提醒一下的是仪搔,騰訊的濱海大廈分為南塔和北塔。我去的時候就上錯樓了溉痢,需要下到4樓重新?lián)Q成電梯僻造。
一面
筆試
- 微服務(wù)的特點(diǎn)憋他,如何實(shí)現(xiàn)服務(wù)發(fā)現(xiàn)和負(fù)載均衡
- c++內(nèi)存管理
- time_wait在哪一端產(chǎn)生,作用是什么
- 程序crash如何定位
- 服務(wù)性能問題如何定位
- 兩個排序數(shù)組找中位數(shù)
- 就數(shù)字n的平方根
- 設(shè)計(jì)一個算法髓削,抽獎次數(shù)越多中獎概率就越高
- MySQL 如何分析一條語句的執(zhí)行過程竹挡。delete from t1 limit 3和delete from t1的區(qū)別?
面試
- 問項(xiàng)目
- 跳臺階
- 數(shù)組中奇數(shù)個元素
- 一棟樓有n層立膛,不知道雞蛋從第幾層扔下去會碎揪罕,用最少的次數(shù)找出剛好會碎的樓層
- 動態(tài)規(guī)劃與貪心有什么區(qū)別
- redis數(shù)據(jù)結(jié)構(gòu)的底層實(shí)現(xiàn)
- redis如何實(shí)現(xiàn)高可用
- 負(fù)載均衡算法有哪些
- 服務(wù)發(fā)現(xiàn)是怎么實(shí)現(xiàn)的
- 熔斷是怎么實(shí)現(xiàn)的
- id生成器怎么實(shí)現(xiàn)的,如何實(shí)現(xiàn)全局遞增
- 協(xié)程和線程的區(qū)別
- 進(jìn)程間通訊方法
- 平時逛哪些論壇宝泵,研究哪些算法
- paxos算法好啰,這個算法我說不清楚,然后說了raft算法
- gdb怎么切換線程
- 如何判斷一個圖是否有環(huán)
- 介紹一下緩存
- 查看 CPU 的命令和磁盤 IO 的命令
二面
- 項(xiàng)目的系統(tǒng)架構(gòu)畫一下
- 如果用戶量上漲怎么優(yōu)化
- 負(fù)載均衡的加權(quán)輪詢算法怎么實(shí)現(xiàn)
- 背包問題
- 貝葉斯的概率學(xué)原理
- 分詞算法
- 連續(xù)整數(shù)求和(leetcode 第 829 題)儿奶,要求時間復(fù)雜度小于O(N)
總結(jié)
騰訊二面面完我就知道涼了框往。動態(tài)規(guī)劃非要寫出遞推公式,因?yàn)槲乙恢倍际怯脛討B(tài)規(guī)劃表的思路來解題闯捎,所以這個地方?jīng)]有答好椰弊。后面又問貝葉斯和分詞算法,一點(diǎn)都不會(我的內(nèi)心:我是來面后臺的瓤鼻,又不是面算法的)秉版。最后一道算法題只能想出 O(N) 復(fù)雜度的,面試官一定要小于 O(N) 的茬祷,答不上來清焕。這道題是 leetcode hard 級別的難度,所以沒有刷祭犯。不過后面去看可能也沒有那么難秸妥,只是這種通過數(shù)學(xué)公式的特點(diǎn)來解題往往容易被忽略了∥执郑總之筛峭,騰訊的一面算是中規(guī)中矩,二面確實(shí)讓我有點(diǎn)手足無措陪每。之前看網(wǎng)上的說法是騰訊算法題考的比較少,可能還是要分部門吧镰吵,我這次面試的是騰訊視頻檩禾,二面基本上全是考算法。還有大部分面經(jīng)都說疤祭,算法題很少考 leetcode hard 級別盼产,這個我也要表示懷疑了,因?yàn)轵v訊和后面的頭條都考了 hard 級別的勺馆。所以刷題時不能完全跳過 hard 級別的題戏售。那有什么題不會考呢侨核?我認(rèn)為是描述起來很復(fù)雜的題面試時不會考,因?yàn)槊嬖嚂r間比較緊灌灾,如果光時把題看懂都要解釋半天的搓译,這種是不太會考的,比如那個 LeetCode 上買股票的題锋喜。
字節(jié)跳動
一面
- 問項(xiàng)目
- 任務(wù)系統(tǒng)怎么保證任務(wù)完成后發(fā)獎一定成功
- zset 延時隊(duì)列怎么實(shí)現(xiàn)的
- redis 數(shù)據(jù)結(jié)構(gòu)有哪些些己?分別怎么實(shí)現(xiàn)的?
- redis 的持久化
- mysql 的索引
- 一個無序數(shù)組找其子序列構(gòu)成的和最大嘿般,要求子序列中的元素在原數(shù)組中兩兩都不相鄰
二面
- Redis 的 ZSET 怎么實(shí)現(xiàn)的段标? 盡量介紹的全一點(diǎn),跳躍表加哈希表以及壓縮鏈表
- Redis 的 ZSET 做排行榜時炉奴,如果要實(shí)現(xiàn)分?jǐn)?shù)相同時按時間順序排序怎么實(shí)現(xiàn)逼庞? 說了一個將 score 拆成高 32 位和低 32 位,高 32 位存分?jǐn)?shù)瞻赶,低 32 位存時間的方法赛糟。問還有沒有其他方法,想不出了
- MySQL 事務(wù)的四個隔離級別共耍? 先說了四個級別的區(qū)別虑灰,然后說了每個級別可能產(chǎn)生的問題
- binlog 日志和 redolog 日志清楚嗎? 說了兩個日志的作用以及兩階段提交
- C++ 的動態(tài)多態(tài)怎么實(shí)現(xiàn)的痹兜?
- C++ 的構(gòu)造函數(shù)可以是虛函數(shù)嗎穆咐?
- 缺失的第一個正數(shù)(leetcode第41題)
- linux 系統(tǒng)里,一個被打開的文件可以被另一個進(jìn)程刪除嗎字旭?
- 一個 10M 大小的 buffer 里存滿了數(shù)據(jù)对湃,現(xiàn)在要把這個 buffer 里的數(shù)據(jù)盡量發(fā)出去,可以允許部分丟包遗淳,問是用TCP好還是UDP好拍柒?為什么?
- 一個完整的 HTTP 請求會涉及到哪些協(xié)議屈暗?
三面
- 問項(xiàng)目
- redis 的 ZSET 是怎么實(shí)現(xiàn)的拆讯?
- 讓你設(shè)計(jì)一個限流的系統(tǒng)怎么做? 令牌桶
- 讓你設(shè)計(jì)一個延時任務(wù)系統(tǒng)怎么做 說了兩個方案养叛,一個是使用 redis 的 ZSET 來實(shí)現(xiàn)种呐,考慮分片來抗高并發(fā),使用 redis 的持久化來實(shí)現(xiàn)落地弃甥,使用 redis 的哨兵實(shí)現(xiàn)故障轉(zhuǎn)移爽室。 一個是使用時間輪的方法。
- 現(xiàn)有一個隨機(jī)數(shù)生成器可以生成0到4的數(shù)淆攻,現(xiàn)在要讓你用這個隨機(jī)數(shù)生成器生成0到6的隨機(jī)數(shù)阔墩,要保證生成的數(shù)概率均勻嘿架。
- 有 N 枚棋子,每個人一次可以拿1到 M 個啸箫,誰拿完后棋子的數(shù)量為0誰就獲勝∷时耄現(xiàn)在有1000顆棋子,每次最多拿8個筐高,A 先拿搜囱,那么 A 有必勝的拿法嗎?第一個人拿完后剩余棋子的數(shù)量是8的倍數(shù)就必勝柑土,否則就必輸蜀肘。
- 給出一棵二叉樹的根節(jié)點(diǎn),現(xiàn)在有這個二叉樹的部分節(jié)點(diǎn)稽屏,要求這些節(jié)點(diǎn)最近的公共祖先扮宠。
四面
HR 面
總結(jié)
頭條4輪面試都是視頻面的,視頻面試體驗(yàn)其實(shí)還是挺好的狐榔,坐在家里面試我會更加放松一些坛增,這樣腦子也靈活一些。人一緊張腦子就轉(zhuǎn)不動了薄腻。頭條的3輪技術(shù)面都問了zset的實(shí)現(xiàn)收捣,ZSET的實(shí)現(xiàn)可以好好看看源碼怎么實(shí)現(xiàn),這樣說的時候有更多東西可以說庵楷,不是說一個跳躍表就完事了罢艾。還有一點(diǎn)就是遇到不會的邏輯題或者算法題不要放棄,問問面試官可不可以提示一下尽纽。如果能在面試官的慢慢提示下能完成這道題咐蚯,也是會被認(rèn)可的。