1. 程式人生 > >C++面試題目及面試經驗

C++面試題目及面試經驗

秋招歷程

  • 終於,在跑了這麼多場宣講會之後,總算拿到了一個心儀的offer,故此寫一篇經驗分享,紀念一下秋招歷程:

  • lz 方向是C++開發,雙非本科生,靠著隊友,水了一個CCPC的銅,省賽什麼的就不說了,到手的offer五六個的樣子,但是都不是些什麼大公司,福利待遇也一般,前期也是各種被大公司打擊,面試體驗賊差,不是說面試官不好,是面試所遇到的問題,真的是感覺大學白讀了,不過好在,慢慢積累下來的經驗,讓自己在後面的筆面試中少走了一些彎路。

  • 廢話說了那麼多,現在呈上乾貨,題目太多有些問題我就沒有寫答案了,網上一般都能搜到,技術大佬請忽視:

C++ 基礎篇:

  1. 宣告與定義的區別。
  2. extern 和 static 的區別,什麼情況用前者什麼情況用後者
  3. x=x+1,x+=1,x++哪個效率高
  4. const 和#define 的優缺點
  5. strcpy和memcpy的區別,現場要求手撕程式碼
  6. new 和malloc 的區別
  7. C++的記憶體分配
  8. 建構函式和解構函式可不可以為虛擬函式,為什麼?
  9. 如何限制一個類物件只能在堆(棧)上分配空間
  10. strcpy 有什麼危險?
  11. 拷貝建構函式如果用值傳遞會有什麼影響?
  12. DLLHELL 聽說過嗎?(lz 還沒去補)
  13. 夥伴記憶體管理?(一臉懵逼)
  14. struct的位元組對齊
  15. 智慧指標,共享指標(短板。。。)
  16. 繼承和多型區別與聯絡?(0.0 剛剛想到的)
  17. strcpy為什麼需要返回值char *?
  18. struct 和 class 區別

資料結構與演算法篇:

  1. stl 相關容器,底層用什麼實現的?
  2. map 和 vector 的迭代器有什麼區別?(不懂。。)
  3. 1億個數取前k大的數。
  4. 堆排序,快速排序的原理與時間複雜度
  5. 一次可以跳一個或者兩個樓梯,跳到第n 層的走法有多少種?
  6. 一次可以跳任意個樓梯,跳到第n 層的走法有多少種?
  7. 八皇后問題
  8. A*演算法
  9. 影象畫素#RGBV 如何取到固定位的值
  10. 棧和佇列
  11. 平衡樹,紅黑樹,B樹,B+樹
  12. 兩個非降序的有序陣列,找出他們相同的元素

計網與作業系統篇 :

  1. TCP 三次握手與四次揮手,各狀態解釋,time_wait原因
  2. OSI七層模型以及各層的協議
  3. IP地址的正則表示式
  4. 擁塞控制的方法
  5. 程序間的通訊方式
  6. 如何實現虛擬地址到實體地址的轉換
  7. TCP 與UDP 的區別
  8. 程序與執行緒的區別,多程序與多執行緒的區別
  9. epoll poll select 的區別
  10. recv 的錯誤處理
  11. linux 的基本指令

遊戲技術篇:

  1. cocos 2d (lz沒玩過遊戲引擎)
  2. unity 3d (同上)
  3. Lua 與C++ 的互動原理

邏輯思維篇:

1.老鼠喝藥的問題:

  • 就是告訴你,有n瓶藥,裡面有一瓶是毒藥,老鼠喝了就會死,讓你用最少的老鼠測出來,到底哪一瓶是毒藥。

  • 答:利用二進位制的思想,將所有的藥水按照1-n的編號,對應的老鼠喝下二進位制上對應位為1 的藥水,觀察老鼠死的狀態,得到答案,比如說 3瓶藥水,1號藥水 01 2號藥水 10 三號藥水 11,那麼最少需要2^2=4>3 ,兩隻老鼠就可以了,一號老鼠喝下2和3 號藥水,二號老鼠喝下 1 和 3 號藥水,要是一號老鼠掛掉了,二號老鼠沒掛,證明毒藥水是 10=2 號藥水,以此類推。

2.100大小的陣列放了1-99 100個數,只有一個數重複了,找出重複的那個數。

  • 答:解法很簡單,把這100個數加起來,然後逐一剪掉1-99 剩下的那個數就是重複的數。

3.單向連結串列如何判斷是否成環?

  • 答:兩個指標p1,p2 , 其中p1 每次指向下一個節點,p2每次指向下兩個節點(p2=p2->next->next),這樣若連結串列有環,那麼p1p2必定在某一點指向同一個節點。

3.1 擴充套件:並指出成環的點在哪裡?

  • 答:這個lz 也是在網上看了人家的部落格才知道的,當p1p2 指向同一個節點的時候,讓p1 指向第一個節點,p2 不動,然後讓兩個節點以同樣的速度指向下一個節點,最後p1p2相遇的地方就是成環的點。

3.2 再擴充套件: 這個連結串列的長度是多少?

  • 答:上一個問題我們自然可以得到起點到成環點的距離,那麼再回到第一個問題的情況,p1p2相遇了,那麼再讓他們繼續走下去,再次相遇所經過的運算元就是這個環的長度了,這兩者相加就得到了整個連結串列的長度。

4.單向連結串列怎麼取到倒數第k個元素?

  • 答:設定兩個指標p1p2,讓p2 先走k步,然後再讓p1p2同時走,最後若p2 指向的節點的下一個節點是NULL ,那麼輸出p1即可。(畫個圖就明白了)

5.怎麼判斷兩個連結串列是否有交點?

  • 答:假設一個連結串列長為n,另一個連結串列長為m,讓長的連結串列的指標先走|n-m|個長度,再讓兩個連結串列的指標一起走,最後兩個指標相遇的地方就是交點了(畫圖!畫圖!)

面試經驗:

  • LZ 本人比較外向,所以一般還是能跟面試官對上話的,但是對話的前提就是技術要達標,一旦面試官問到你不會的題目了,就有點尬聊了,儘量往自己熟悉的方向走,不會的就說不會,或者引導到自己會的方向上去。

  • 還有一點。。。。hr 面還是會刷人的,所以記住一點,沒有收到電話offer或者郵件offer 前,一切都是假的,樂極生悲!技術宅們也要多開口,冷場的時候適當的說點話,個人感覺,如果面試過程中經常性的冷場就有點涼了。。。。所以,儘量和麵試官對上話,但是不要不懂裝懂,畢竟面試官也知道你才是個畢業生,很多東西不知道是肯定的,主要是看你的個人基本能力。

  • 最後,不管結果是什麼,如果公司給你任何回覆,你都還是要禮貌的回覆一下過去。。LZ 收到好多拒信,都一一回復了。。有些公司可能拒信都給你發幾份。

  • 自信!自信!自信! 不管咋樣,想去的公司就投,不要擔心這擔心那的,投了才有機會,不然連個筆面試機會都沒有,面試筆試過程中遇到的題,儘量記下來,但是千萬別作弊!,筆試不允許截圖就別截圖,筆試完就自己回想,沒做出來的題上網搜一下題解,問大佬,後續可能還會問到的,所以就算你作弊沒被抓,面試問到的時候打不出來,基本就是黑名單了,面試的時候也是,面試完立馬把面試遇到的題目記下來,回去補,一面的題目,可能二面還會問。

  • 面試的時候多笑笑