[c/c++後臺開發面經系列]4 Zoom面經(含答案)

嘻嘻,祝小仙女們女神節快樂!

看完別忘點個在看

此係列內容以及觀點僅個人感受,不妥之處直接私我!目的爲了大家能更好的知道面試題難度以及如何準備,希望能讓大家少浪費時間尋找資料,多點時間學點乾貨!因爲篇幅原因,大部分題目題解簡潔,但有相關資料推薦進階閱讀,學會使用搜索引擎是一門藝術!望諒解!

公司崗位都是後臺開發工程師,這段時間很多公司遠程辦公(疫情),可能不少也選擇了他們產品吧(並不是打廣告),據瞭解工作+生活比較好平衡

一 Zoom面試

一面,二面,三面時間間隔比較快,參加完筆試(1個小時),如果通過就面試!而且面試過程中基本上沒有涉及語言語法知識。

1 一面(視頻面40分鐘)

  • 自我介紹

主要表明自己姓名,學校,爲什麼面這個崗位或者公司,具有XX技術,想嘗試貴公司等。

  • 說說線程和進程

在 Linux 下,程序或可執行的文件是一個靜態的實體,也就是一組指令的集合。進程是一個動態的實體,有自己的生命週期,既然有生命週期,那麼生死需要保障,如何調度就成爲很重要的一個環節。恰巧線程就成爲了操作系統進程調度器的最小執行單元。畫個圖。

進程和線程

從這個圖(靈魂畫手)我們可以得出一個進程包含多個線程。那麼機智的面試官就會問。

  • 爲什麼需要多個線程?

回答:各個線程(我們可以稱作爲工作線程)各自去處理自己的任務。同時在單核時代,多線程主要是爲了提高 CPU IO 設備的綜合利用率。

舉個例子:當只有一個線程工作的時候,會導致CPU計算時,IO設備空閒;進行IO操作時,CPU 空閒。可以簡單地理解成,這兩者的利用率最高都是 50%左右。但是當有兩個線程的時候就不一樣了,一個線程執行 CPU 計算時,另外一個線程就可以進行 IO 操作,這樣 CPU IO 設備兩個的利用率就可以在理想情況下達到 100%;

多核時代: 多核時代多線程主要是爲了提高 CPU 利用率。舉個例子:假如我們要計算一個複雜的任務,我們只用一個線程的話,CPU 只有一個 CPU 核心被利用到,而創建多個線程,就可以讓多個 CPU 核心被利用到,這樣就提高了 CPU 的利用率。

面試官:多個進程也可以的呀。

回答:不同進程地址空間獨立,線程共享內存如下圖。同一進程的多個線程共享一份全局內存區域包括初始化數據段、未初始化數據段和動態分配的堆

進程線程資源情況
  • 死鎖解釋一下

我們先看看下圖瞭解下什麼是死鎖

死鎖

線程A 已經成功拿到了互斥量 A,正在申請互斥量 B ,而同時在另一個 CPU 上,線程 B 已經拿到了互斥量B ,正在申請互斥量 A 。彼此佔有對方正在申請的互斥量,結局就是誰也沒辦法拿到想要的互斥量,於是死鎖就發生了。

知道了什麼是死鎖以後,瞭解死鎖四大必要條件以及如何避免。

四大必要條件

互斥條件:一個資源每次只能被一個進程使用,即在一段時間內某 資源僅爲一個進程所佔有。此時若有其他進程請求該資源,則請求進程只能等待。

請求與保持條件:進程已經保持了至少一個資源,但又提出了新的資源請求,而該資源 已被其他進程佔有,此時請求進程被阻塞,但對自己已獲得的資源保持不放。

不可剝奪條件:進程所獲得的資源在未使用完畢之前,不能被其他進程強行奪走,即只能 由獲得該資源的進程自己來釋放(只能是主動釋放)。

循環等待條件: 若干進程間形成首尾相接循環等待資源的關係

1 避免死鎖最簡單的方法就是總是按照一定的先後順序申請這些互斥

2 用鎖來嘗試,得不到鎖則返回

  • 瞭解音視頻處理相關知識嗎

因爲不是這個方向,但是公司業務很多是這一塊,所以面試之前需要了解一下,比如音頻格式,視頻格式,視頻編碼等。所以,如果決定了面試,還是瞭解瞭解公司的主打產品吧

  • 介紹一下http與https及區別(第三次出現)

HTTPS和HTTP的區別

超文本傳輸協議HTTP協議被用於在Web瀏覽器和網站服務器之間傳遞信息。HTTP協議以明文方式發送內容,不提供任何方式的數據加密,如果攻擊者截取了Web瀏覽器和網站服務器之間的傳輸報文,就可以直接讀懂其中的信息,因此HTTP協議不適合傳輸一些敏感信息,比如信用卡號、密碼等。

爲了解決HTTP協議的這一缺陷,需要使用另一種協議:安全套接字層超文本傳輸協議HTTPS。爲了數據傳輸的安全,HTTPS在HTTP的基礎上加入了SSL協議,SSL依靠證書來驗證服務器的身份,併爲瀏覽器和服務器之間的通信加密。

HTTPS和HTTP的區別主要爲以下四點:

一、https協議需要到ca申請證書,一般免費證書很少,需要交費。

二、http是超文本傳輸協議,信息是明文傳輸,https 則是具有安全性的ssl加密傳輸協議。

三、http和https使用的是完全不同的連接方式,用的端口也不一樣,前者是80,後者是443。

四、http的連接很簡單,是無狀態的;HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,比http協議安全。

  • 項目中用過kafka,redis瞭解嗎,簡單介紹下redis和kafka

redis

1 提供高性能、原子操作內存鍵值對,具有高速訪問能力,可用做消隊列的存儲,但是需要自己在上層應用實現

kafka

1 巨型存儲量,支持TB甚至PB級別數據

2 高吞吐、高IO:一般配置的服務器能實現單機每秒100k條以上消息的傳輸

3 消息分區、分佈式消費:保證消息順序傳輸。支持離線和實時數據處理

  • mysql優化

主要從以下幾個方面考慮

1 表的設計合理化

2 分表技術(水平分割,垂直分割)

3 讀寫分離

4 mysql服務器引擎升級

5 定時清除不需要的數據,進行碎片整理

6 存儲過程

7 可以通過show stats瞭解sql執行頻率,explain分析sql語句執行情況等

  • 編程題1 合併有序鏈表(不知道大家看了幾篇,有沒有發現這類型的公司題目總是這幾道?)

[leetcode鏈表系列]4 合併有序鏈表

  • 還有什麼可以問我的嗎?

這個問題一般來說會有下文,只要不問一些敏感話題就行了,比如可以問問對於應屆生的培養等。

2 二面(視頻面35分鐘)

忘記相隔了多少天,某一天晚上一個小姐姐打電話約時間面試。。

  • 自我介紹

  • 看你一面說過中間人攻擊,你介紹一下

    中間人攻擊

首先它是指攻擊者與通信兩端分別建立聯繫,使得通信雙方認爲在和私密的連接與對方通信,但事實上整個會話都被攻擊者控制。其詳細過程。

1) 客戶端發送請求到服務端,請求被中間人截獲。

2) 服務器向客戶端發送公鑰

3) 中間人截獲公鑰,保留在自己手上。然後自己生成一個【僞造的】公鑰,發給客戶端。

4) 客戶端收到僞造的公鑰後,生成加密hash值發給服務器。

5) 中間人獲得加密hash值,用自己的私鑰解密獲得真祕鑰。同時生成假的加密hash值,發給服務器。

6 ) 服務器用私鑰解密獲得假密鑰。然後加密數據傳輸給客戶端。

  • 內存泄漏怎麼處理的

這裏介紹一個工具Valgrind。它是Linux下仿真調試工具的集合。其內核模擬了cpu環境並提供服務給其他工具。這些工具類似插件,輔助完成特定的內存調試任務(自己去裝了嘗試用用更深刻)。

  1. Valgrind體系結構

Valgrind工具集
  1. 結構詳述

插件名稱功能
Memcheck檢測開發中絕大數內存錯誤使用情況。比如未初始化的內存或者使用已經釋放的內存
Callgrind收集程序運行時數據,簡歷函數調用關係圖
Cachegrind檢查程序中緩存出現的問題,可以給用戶提供Cache丟失次數等來方便優化程序
Helgrind檢查多線程程序中的競爭問題
Massif堆棧分析器。測量程序在堆棧使用了多少內存。
Extension利用core提供的功能,自己編寫特定內存調試工具。
  • Makefile簡單介紹下

我們一切的努力都是爲了更快的完成工作,出現了Makefile是一樣的道理。Makefile關係到了整個工程的編譯規則。一個工程中的源文件不計其數,其按*類型、功能、模塊*分別放在若干個目錄中,Makefile定義了一系列的規則來指定,哪些文件需要先編譯,哪些文件需要後編譯,哪些文件需要重新編譯,甚至於進行更復雜的功能操作,因爲makefile就像一個Shell腳本一樣,其中也可以執行操作系統的命令。後續會說dockerdockerfile也是同樣的道理。

(後臺回覆makefile獲取實踐手冊)

  • gdb調試使用過嗎,多線程調試怎麼弄

(後臺回覆gdb領取gdb調試手冊)

  • 看你用過大數據框架,介紹介紹(這裏推薦一下http://dblab.xmu.edu.cn/)


Apache SparkApache Flink
核心實現Scalajava
編程接口Java,Python,R語言,ScalaDataSet API支持java、scala和python。DataStream API支持Java和Scala
計算模型基於數據片集合的微批量處理模型基於操作符的連續流模型
優缺點流式處理有延時 支持秒級計算,實時性不好流式計算與Storm性能相當,支持毫秒級計算 實時性非常好
  • 進程間的通信(第三次遇見)

答出一共有哪幾種,優點/缺點是什麼,最快又是什麼,也可以從一中方式爲突破點,從內核角度闡述更爲與衆不同了!

進程間通信方式描述
管道pipe半雙工通信方式,數據單向流動,只能在父子進程中使用。
命名管道FIFO半雙工方式,但是允許非父子關係通信
消息隊列大小有限,存放在內核中的鏈表,建立好好用用ipcs命令。消息隊列克服了信號傳遞信息少、管道只能承載無格式字節流等缺點
共享存儲一塊內存,多個進程可以訪問,共享內存爲最快IPC方式。通過和信號量等來解決進程間的同步問題。
信號量計數器,控制多個進程對共享資源的訪問,不錯的同步手段。
信號通知機制的完美實現,某個進程有事件發生時通知處理。
  • 介紹幾個常用的網絡程序分析工具(Linux命令)

    網絡程序分析工具
命令名稱命令功能示例
vmstat實時輸出系統各種資源使用情況比如進程信息內存使用vmstat 5 2(每隔5s輸出一次結果,一共輸出2次)
netstat網絡信息統計工具netstat -nat| grep ip:port(查看連接狀態)
mpstat實時監測多處理器系統每個cpu使用情況mpstat -P ALL 5  3(每隔5s輸出一次結果,輸出三次)
lsof列出當前系統打開的文件描述符工具lsof -c httpd(查看httpd使用了哪些描述符)
tcpdump網絡抓包工具(參考界面的wireshark)tcpdump dst port 12345(抓取進入端口13579的數據包)
nc快速構建網絡連接nc -C ip+port(連接服務器併發送信息)

4 總結

這次面試同樣基本上從簡歷出發+公司業務特點出發。所以面之前瞭解瞭解公司相關業務(一點點也行,說明你是用心的),對自己簡歷上的東西一定不能弄虛作假。另外請記下以下幾點:

  • 公司招你去是幹活了,不會因爲你怎麼怎麼的而降低對你的要求標準。

  • 工具上面寫代碼和手撕代碼完全不一樣。

  • 珍惜每一次面試機會並學會覆盤.

  • 對於應屆生主要考察的還是計算機基礎知識的掌握,項目要求沒有那麼高,是自己做的就使勁摳細節,做測試,這樣你就知道會遇到什麼問題,遇到什麼難點,如何解決的。當被問到的時候就可以侃侃而談了。

  • 非科班也不要怕,怕了你就輸了!一定要多嘗試。

參考鏈接:

http://www.redis.cn/

http://kafka.apache.org/

https://www.nowcoder.com/discuss/150059?type=0&order=0&pos=8&page=0

https://zhuanlan.zhihu.com/p/62025258 

暖男告知

跟小藍每天進步一點點,生活就會美一點!

進入高手如雲學習交流羣,一起成長!

[c/c++後臺開發面經系列]1 深信服面經

[c/c++後臺開發面經系列]2 京東面經(含答案)

寫簡歷這幾點一定要注意!

Linux後臺開發必看!

[c/c++後臺開發面經系列]3 bigo/映客面經(含答案)

點下面“在看”的永遠18歲喲~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章