面前準(zhǔn)備
敲定了方向和目標(biāo)后就開始系統(tǒng)準(zhǔn)備失息,主要分為以下幾個(gè)方面來準(zhǔn)備譬淳。
算法題
事先已經(jīng)看過別人的社招面經(jīng)知道頭條每輪技術(shù)面都有算法題档址,而這一塊平時(shí)練習(xí)的比較少,校招時(shí)刷的題也忘記了很多邻梆。因此系統(tǒng)復(fù)習(xí)的時(shí)候算法題還是花了比較多時(shí)間的守伸。先是快速刷完了劍指 offer,這個(gè)校招時(shí)已經(jīng)刷過兩邊了浦妄,因此現(xiàn)在刷起來會相對快一些尼摹。然后就是啃 LeetCode 的題了,LeetCode 的題比較多剂娄,想在短短幾周內(nèi)刷完基本是不可能的蠢涝,因此我主要按照類型去刷,每個(gè)類型刷幾道就會比較有感覺了宜咒。比如鏈表的題優(yōu)先考慮遞歸和雙指針來解決惠赫,棧和隊(duì)列的題優(yōu)先考慮用兩個(gè)棧或隊(duì)列來解決故黑,樹的題基本都是遞歸等儿咱。不過數(shù)組和字符串的題一般比較靈活,這種題只能盡量多刷了场晶。平時(shí)要上班刷題也不方便混埠,我采用的方法就是看題,用手機(jī)打開 LeetCode 的網(wǎng)站诗轻,看完題目后直接想解決方案钳宪,腦子里大概捋一下代碼怎么寫,能想到的就過扳炬,想不出的就看看別人的解法吏颖,用這個(gè)方法刷起來就很快。用這種方法你可能會擔(dān)心面試時(shí)題寫不完整恨樟,其實(shí)不用太擔(dān)心半醉,因?yàn)槊嬖嚨臅r(shí)候面試官看你寫的核心思路是正確的,邊界處理是對的基本就過了劝术,面試時(shí)間比較有限缩多。
理論基礎(chǔ)
基礎(chǔ)這一塊主要以快速復(fù)習(xí)為主,主要是語言(我主要用C++养晋,所以復(fù)習(xí)C++)衬吆、操作系統(tǒng)和網(wǎng)絡(luò)編程。校招這一塊會問題的比較多绳泉,社招這一塊問的比較少逊抡,但是如果這一塊打不上來就比較尷尬了。語言就不說了零酪,這一塊大家應(yīng)該都知道會考些什么秦忿,校招的時(shí)候畢竟都瘋狂準(zhǔn)備過麦射。操作系統(tǒng)就看內(nèi)存管理、進(jìn)程管理和文件系統(tǒng)灯谣,一般虛擬內(nèi)存問的多。網(wǎng)絡(luò)編程這塊就包括 TCP/IP 協(xié)議蛔琅,HTTP協(xié)議胎许,網(wǎng)絡(luò)安全三個(gè)方面。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 第三版》丹擎,關(guān)于事務(wù)尾抑、索引、鎖以及 binlog 和 redolog 都講的非常好蒂培,也是面試最愛考的再愈,除此之外對數(shù)據(jù)庫的讀寫分離、分庫分表也要掌握护戳。Redis 主要看了《Redis 的設(shè)計(jì)與實(shí)現(xiàn)》翎冲,然后自己再總結(jié)了一下 Redis 的使用場景,以及 Redis 實(shí)現(xiàn)分布式鎖基本 Redis 就沒有問題了媳荒。分布式系統(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í)在沒什么太多拿的出手的稍坯,不過還是要挖掘一下,畢竟這一塊是逃不掉搓劫。我說幾個(gè)我思考的點(diǎn)吧:
找項(xiàng)目中相對而言具有亮點(diǎn)的地方瞧哟。比如我用 redis 實(shí)現(xiàn)了一個(gè)延時(shí)隊(duì)列,然后對這個(gè)延時(shí)隊(duì)列我通過分片來解決瓶頸糟把,通過分發(fā)來加快處理速度绢涡。
找項(xiàng)目中復(fù)雜的地方。如果你做的項(xiàng)目中有復(fù)雜的地方遣疯,即使不是你做的雄可,也可以拿來說,前提是你要搞得非常清楚來缠犀。
量化指標(biāo)数苫。一個(gè)接口原來有性能問題,比如你做了一個(gè)小的優(yōu)化辨液,將其 TP99 的耗時(shí)從原來的 500ms 優(yōu)化至多少 200ms虐急。
賦能整個(gè)團(tuán)隊(duì)。在開發(fā)業(yè)務(wù)的過程中肯定會遇到一些重復(fù)的工作滔迈,或者可以復(fù)用的服務(wù)止吁。你可以開發(fā)了某個(gè)工具或者服務(wù)化了某個(gè)功能推廣到了全組使用,給公司創(chuàng)造了價(jià)值燎悍。
騰訊面試
騰訊面試提前1天和提前一個(gè)小時(shí)都會發(fā)短信提示敬惦。去的騰訊濱海大廈面試,大樓的現(xiàn)代化程度很高谈山,不過需要提醒一下的是俄删,騰訊的濱海大廈分為南塔和北塔。我去的時(shí)候就上錯(cuò)樓了,需要下到4樓重新?lián)Q成電梯畴椰。
筆試
微服務(wù)的特點(diǎn)臊诊,如何實(shí)現(xiàn)服務(wù)發(fā)現(xiàn)和負(fù)載均衡
c++內(nèi)存管理
time_wait在哪一端產(chǎn)生,作用是什么
程序crash如何定位
服務(wù)性能問題如何定位
兩個(gè)排序數(shù)組找中位數(shù)
就數(shù)字n的平方根
設(shè)計(jì)一個(gè)算法斜脂,抽獎次數(shù)越多中獎概率就越高
MySQL 如何分析一條語句的執(zhí)行過程抓艳。delete from t1 limit 3和delete from t1的區(qū)別?
一面
問項(xiàng)目
跳臺階
數(shù)組中奇數(shù)個(gè)元素
一棟樓有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)程間通訊方法
平時(shí)逛哪些論壇销斟,研究哪些算法
paxos算法,這個(gè)算法我說不清楚椒舵,然后說了raft算法
gdb怎么切換線程
如何判斷一個(gè)圖是否有環(huán)
介紹一下緩存
查看 CPU 的命令和磁盤 IO 的命令
二面
項(xiàng)目的系統(tǒng)架構(gòu)畫一下
如果用戶量上漲怎么優(yōu)化
負(fù)載均衡的加權(quán)輪詢算法怎么實(shí)現(xiàn)
背包問題
貝葉斯的概率學(xué)原理
分詞算法
連續(xù)整數(shù)求和(leetcode 第 829 題)蚂踊,要求時(shí)間復(fù)雜度小于O(N)
HR面
1.詢問了除騰訊以外,還在看其他工作機(jī)會么笔宿?分別是什么
2.騰訊犁钟、XXX公司、XXX公司泼橘,你的優(yōu)先級是什么涝动,為什么?
3.之前薪資待遇是多少炬灭?你期望的薪資是多少醋粟?
4.平時(shí)有什么愛好?
5.了解職位需求嗎重归?
6.有沒有想問的米愿?
騰訊二面最后一道算法題只能想出 O(N) 復(fù)雜度的,面試官一定要小于 O(N) 的鼻吮,答不上來育苟。這道題是 leetcode hard 級別的難度,所以沒有刷椎木。后來又跟面試官探討了一下自己比較擅長的方面违柏,比如協(xié)程與TCP方面的,因?yàn)樽约阂脖容^喜歡在GitHub上面鉆研這些東西香椎,
wangbojing/NtyCo?github.com
wangbojing/NtyTcp?github.com
我個(gè)人在這里學(xué)到的東西比較多(/狗頭)
技術(shù)知識學(xué)習(xí)路線
【文章福利】小編推薦自己的linuxC/C++語言交流群:832218493漱竖!整理了一些個(gè)人覺得比較好的學(xué)習(xí)書籍、視頻資料共享在里面士鸥,有需要的可以自行添加哦闲孤!~
一、 數(shù)據(jù)結(jié)構(gòu)與算法、設(shè)計(jì)模式讼积、工程管理
排序 (11種排序) 與 KMP
紅黑樹 證明
B樹與B+樹
Hash與布隆過濾器
責(zé)任鏈模式
過濾器模式
發(fā)布訂閱模式
工廠模式
Makefile/cmake/configure
git /svn與持續(xù)集成
Linux系統(tǒng)運(yùn)行時(shí)命令
二肥照、代碼實(shí)現(xiàn)、方案分析
網(wǎng)絡(luò)io與select/poll/epoll
reactor的原理與實(shí)現(xiàn)
http/https web服務(wù)器的實(shí)現(xiàn)
websocket協(xié)議與服務(wù)器實(shí)現(xiàn)
服務(wù)器百萬并發(fā)的實(shí)現(xiàn)(c10K勤众,c1000k舆绎, C10M)
redis/memcached/Nginx網(wǎng)絡(luò)組件
Posix API與網(wǎng)絡(luò)協(xié)議棧
UDP可靠協(xié)議 QUIC/KCP
三、池式結(jié)構(gòu)们颜、高性能組件吕朵、開源組件
線程池(手寫)
內(nèi)存池 ringbuffer
異步請求池 性能優(yōu)化,異步mysql 異步dns 異步redis
mysql連接池
redis連接池
原子操作 CAS
消息隊(duì)列與無鎖隊(duì)列
定時(shí)器的方案 紅黑樹 時(shí)間輪 最小堆
鎖的實(shí)現(xiàn)原理 互斥鎖窥突,自旋鎖 努溃,樂觀鎖,悲觀鎖阻问,分布式鎖
服務(wù)器連接蔽嗨埃活 keepalived
try/catch的實(shí)現(xiàn)
libevent/libev框架
異步日志方案 log4cpp
應(yīng)用層協(xié)議 protobuf/thrift
openssl加密
json與xml解析器
字符編碼unicode/gbk/utf-
四、協(xié)程框架的實(shí)現(xiàn)称近、用戶態(tài)協(xié)議棧 NtyTCP (tcp/ip)
協(xié)程的原理與工程案例
協(xié)程的調(diào)度器實(shí)現(xiàn)
滑動窗口 擁塞控制 滿啟動
tcp定時(shí)器的實(shí)現(xiàn)
epoll的源碼實(shí)現(xiàn)
五第队、Skynet、ZeroMQ刨秆、DPDK
skynet高性能網(wǎng)關(guān)
actor實(shí)現(xiàn)與cluster/負(fù)載均衡
skynet網(wǎng)絡(luò)與熱更新 數(shù)據(jù)共享
ZeroMQ Router-Dealter模式
源碼分析:消息模型與工程案例
源碼分析:網(wǎng)絡(luò)機(jī)制
dpdk PCI原理與 testpmd/l3fwd/skeletion
kni數(shù)據(jù)流程
dpdk實(shí)現(xiàn)dns
dpdk的高性能網(wǎng)關(guān)的實(shí)現(xiàn)
半虛擬化 virtio/vhost的加速
六凳谦、 MySQL、Redis衡未、Nginx尸执、mongodb、dfs
SQL語句 索引 存儲過程 觸發(fā)器
2.數(shù)據(jù)庫連接池與sql解析剖析
存儲引擎原理 MyISAM與Innodb 事務(wù)隔離
自己實(shí)現(xiàn)一個(gè)存儲引擎 MySQL源碼
MySQL集群與分布式 高可用高并發(fā)
Redis相關(guān)命令與持久化
Redis連接池與異步操作
源碼分析:存儲原理與數(shù)據(jù)模型
源碼分析:主從 原子模型
redis的集群方案
Nginx使用conf配置
nginx模塊開發(fā) 過濾器模塊
Nginx模塊開發(fā) handler模塊
源碼分析: Nginx Http狀態(tài)機(jī)
源碼分析:進(jìn)程間通信與Slab共享機(jī)制
Mongo接口編程與MongoDB命令使用
MongoDB的集群方案
ceph
fastdfs
七眠屎、Linux內(nèi)核進(jìn)程管理剔交、內(nèi)存管理、文件系統(tǒng)
進(jìn)程管理與調(diào)度
鎖與進(jìn)程間通信
系統(tǒng)調(diào)用 如何自己實(shí)現(xiàn)一個(gè)syscall
物理內(nèi)存 伙伴算法
2.進(jìn)程虛擬內(nèi)存 mm_struct
頁的回收與頁交換
虛擬文件系統(tǒng)
Ext2/3/4 文件系統(tǒng)
無持久的存儲
八改衩、性能分析
工具 wrk/ webbench/ loadbalance/valgrind
Google gTest/Memtrack
火焰圖/熱圖
九岖常、分布式架構(gòu)篇
騰訊的Tars
虛擬化的docker
分布式注冊中心etcd
P2P 網(wǎng)絡(luò)穿透 打洞 去中心化的網(wǎng)絡(luò)