天天看點

已拿騰訊背景開發崗offer,簡單說下自己的面試經曆和學習路線

面前準備

敲定了方向和目标後就開始系統準備,主要分為以下幾個方面來準備。

算法題

事先已經看過别人的社招面經知道頭條每輪技術面都有算法題,而這一塊平時練習的比較少,校招時刷的題也忘記了很多。是以系統複習的時候算法題還是花了比較多時間的。先是快速刷完了劍指 offer,這個校招時已經刷過兩邊了,是以現在刷起來會相對快一些。然後就是啃 LeetCode 的題了,LeetCode 的題比較多,想在短短幾周内刷完基本是不可能的,是以我主要按照類型去刷,每個類型刷幾道就會比較有感覺了。比如連結清單的題優先考慮遞歸和雙指針來解決,棧和隊列的題優先考慮用兩個棧或隊列來解決,樹的題基本都是遞歸等。不過數組和字元串的題一般比較靈活,這種題隻能盡量多刷了。平時要上班刷題也不友善,我采用的方法就是看題,用手機打開 LeetCode 的網站,看完題目後直接想解決方案,腦子裡大概捋一下代碼怎麼寫,能想到的就過,想不出的就看看别人的解法,用這個方法刷起來就很快。用這種方法你可能會擔心面試時題寫不完整,其實不用太擔心,因為面試的時候面試官看你寫的核心思路是正确的,邊界處理是對的基本就過了,面試時間比較有限。

理論基礎

基礎這一塊主要以快速複習為主,主要是語言(我主要用C++,是以複習C++)、作業系統和網絡程式設計。校招這一塊會問題的比較多,社招這一塊問的比較少,但是如果這一塊打不上來就比較尴尬了。語言就不說了,這一塊大家應該都知道會考些什麼,校招的時候畢竟都瘋狂準備過。作業系統就看記憶體管理、程序管理和檔案系統,一般虛拟記憶體問的多。網絡程式設計這塊就包括 TCP/IP 協定,HTTP協定,網絡安全三個方面。TCP/IP主要就是三次握手,四次揮手,TIME_WAIT 的作用等這些常考的題了。HTTP 協定考察 HTTP 協定的傳回碼、HTTP 的方法等。需要特别指出的是 HTTPS 加密的詳細過程要非常透徹,不然容易産生一種感覺好像都清楚了,但是一問就有點說不清楚。最後就是網絡安全,主要考察也是 WEB 安全,包括XSS,CSRF,SQL注入等。

後端技術

這裡的後端技術主要指工作中要用到的一些基礎元件,一些常見的後端架構設計。主要準備了MySQL、Redis、消息隊列、zookeeper、分布式系統架構設計和docker。MySQL 主要看了 《高性能MySQL 第三版》,關于事務、索引、鎖以及 binlog 和 redolog 都講的非常好,也是面試最愛考的,除此之外對資料庫的讀寫分離、分庫分表也要掌握。Redis 主要看了《Redis 的設計與實作》,然後自己再總結了一下 Redis 的使用場景,以及 Redis 實作分布式鎖基本 Redis 就沒有問題了。分布式系統的就準備CAP理論、BASE理論、限流、熔斷、一緻性***算法、主從架構、叢集架構、異地多活、負載均衡、分層架構、微服務等。

深挖項目

沒有參與開源項目的經驗,工作中做的項目也很一般,項目這塊我實在沒什麼太多拿的出手的,不過還是要挖掘一下,畢竟這一塊是逃不掉。我說幾個我思考的點吧:

找項目中相對而言具有亮點的地方。比如我用 redis 實作了一個延時隊列,然後對這個延時隊列我通過分片來解決瓶頸,通過分發來加快處理速度。

找項目中複雜的地方。如果你做的項目中有複雜的地方,即使不是你做的,也可以拿來說,前提是你要搞得非常清楚來。

量化名額。一個接口原來有性能問題,比如你做了一個小的優化,将其 TP99 的耗時從原來的 500ms 優化至多少 200ms。

賦能整個團隊。在開發業務的過程中肯定會遇到一些重複的工作,或者可以複用的服務。你可以開發了某個工具或者服務化了某個功能推廣到了全組使用,給公司創造了價值。

騰訊面試

騰訊面試提前1天和提前一個小時都會發短信提示。去的騰訊濱海大廈面試,大樓的現代化程度很高,不過需要提醒一下的是,騰訊的濱海大廈分為南塔和北塔。我去的時候就上錯樓了,需要下到4樓重新換成電梯。

筆試

微服務的特點,如何實作服務發現和負載均衡

c++記憶體管理

time_wait在哪一端産生,作用是什麼

程式crash如何定位

服務性能問題如何定位

兩個排序數組找中位數

就數字n的平方根

設計一個算法,抽獎次數越多中獎機率就越高

MySQL 如何分析一條語句的執行過程。delete from t1 limit 3和delete from t1的差別?

一面

問項目

跳台階

數組中奇數個元素

一棟樓有n層,不知道雞蛋從第幾層扔下去會碎,用最少的次數找出剛好會碎的樓層

動态規劃與貪心有什麼差別

redis資料結構的底層實作

redis如何實作高可用

負載均衡算法有哪些

服務發現是怎麼實作的

熔斷是怎麼實作的

id生成器怎麼實作的,如何實作全局遞增

協程和線程的差別

程序間通訊方法

平時逛哪些論壇,研究哪些算法

paxos算法,這個算法我說不清楚,然後說了raft算法

gdb怎麼切換線程

如何判斷一個圖是否有環

介紹一下緩存

檢視 CPU 的指令和磁盤 IO 的指令

二面

項目的系統架構畫一下

如果使用者量上漲怎麼優化

負載均衡的權重輪詢算法怎麼實作

背包問題

貝葉斯的機率學原理

分詞算法

連續整數求和(leetcode 第 829 題),要求時間複雜度小于O(N)

HR面

1.詢問了除騰訊以外,還在看其他工作機會麼?分别是什麼

2.騰訊、XXX公司、XXX公司,你的優先級是什麼,為什麼?

3.之前薪資待遇是多少?你期望的薪資是多少?

4.平時有什麼愛好?

5.了解職位需求嗎?

6.有沒有想問的?

騰訊二面最後一道算法題隻能想出 O(N) 複雜度的,面試官一定要小于 O(N) 的,答不上來。這道題是 leetcode hard 級别的難度,是以沒有刷。後來又跟面試官探讨了一下自己比較擅長的方面,比如協程與TCP方面的,因為自己也比較喜歡在GitHub上面鑽研這些東西,

協程

TCP

我個人在這裡學到的東西比較多(/狗頭)

技術知識學習路線

【文章福利】小編推薦自己的linuxC/C++語言交流群:832218493!整理了一些個人覺得比較好的學習書籍、視訊資料共享在裡面,有需要的可以自行添加哦!~

已拿騰訊背景開發崗offer,簡單說下自己的面試經曆和學習路線
已拿騰訊背景開發崗offer,簡單說下自己的面試經曆和學習路線

一、 資料結構與算法、設計模式、工程管理

排序 (11種排序) 與 KMP

紅黑樹 證明

B樹與B+樹

Hash與布隆過濾器

責任鍊模式

過濾器模式

釋出訂閱模式

工廠模式

Makefile/cmake/configure

git /svn與持續內建

Linux系統運作時指令

二、代碼實作、方案分析

網絡io與select/poll/epoll

reactor的原理與實作

http/https web伺服器的實作

websocket協定與伺服器實作

伺服器百萬并發的實作(c10K,c1000k, C10M)

redis/memcached/Nginx網絡元件

Posix API與網絡協定棧

UDP可靠協定 QUIC/KCP

三、池式結構、高性能元件、開源元件

線程池(手寫)

記憶體池 ringbuffer

異步請求池 性能優化,異步mysql 異步dns 異步redis

mysql連接配接池

redis連接配接池

原子操作 CAS

消息隊列與無鎖隊列

定時器的方案 紅黑樹 時間輪 最小堆

鎖的實作原理 互斥鎖,自旋鎖 ,樂觀鎖,悲觀鎖,分布式鎖

伺服器連接配接保活 keepalived

try/catch的實作

libevent/libev架構

異步日志方案 log4cpp

應用層協定 protobuf/thrift

openssl加密

json與xml解析器

字元編碼unicode/gbk/utf-

四、協程架構的實作、使用者态協定棧 NtyTCP (tcp/ip)

協程的原理與工程案例

協程的排程器實作

滑動視窗 擁塞控制 滿啟動

tcp定時器的實作

epoll的源碼實作

五、Skynet、ZeroMQ、DPDK

skynet高性能網關

actor實作與cluster/負載均衡

skynet網絡與熱更新 資料共享

ZeroMQ Router-Dealter模式

源碼分析:消息模型與工程案例

源碼分析:網絡機制

dpdk PCI原理與 testpmd/l3fwd/skeletion

kni資料流程

dpdk實作dns

dpdk的高性能網關的實作

半虛拟化 virtio/vhost的加速

六、 MySQL、Redis、Nginx、mongodb、dfs

SQL語句 索引 存儲過程 觸發器

2.資料庫連接配接池與sql解析剖析

存儲引擎原理 MyISAM與Innodb 事務隔離

自己實作一個存儲引擎 MySQL源碼

MySQL叢集與分布式 高可用高并發

Redis相關指令與持久化

Redis連接配接池與異步操作

源碼分析:存儲原理與資料模型

源碼分析:主從 原子模型

redis的叢集方案

Nginx使用conf配置

nginx子產品開發 過濾器子產品

Nginx子產品開發 handler子產品

源碼分析: Nginx Http狀态機

源碼分析:程序間通信與Slab共享機制

Mongo接口程式設計與MongoDB指令使用

MongoDB的叢集方案

ceph

fastdfs

七、Linux核心程序管理、記憶體管理、檔案系統

程序管理與排程

鎖與程序間通信

系統調用 如何自己實作一個syscall

實體記憶體 夥伴算法

2.程序虛拟記憶體 mm_struct

頁的回收與頁交換

虛拟檔案系統

Ext2/3/4 檔案系統

無持久的存儲

八、性能分析

工具 wrk/ webbench/ loadbalance/valgrind

Google gTest/Memtrack

火焰圖/熱圖

九、分布式架構篇

騰訊的Tars

虛拟化的docker

分布式注冊中心etcd

P2P 網絡穿透 打洞 去中心化的網絡

已拿騰訊背景開發崗offer,簡單說下自己的面試經曆和學習路線

日積月累,終有所成!!!

繼續閱讀