騰訊暑期實習一面面經
面的是騰訊音樂部門,全民K歌下面做 linux C++開發的,全程大概45min左右,過程記錄如下:
1. linux 指令有用過嗎?
常用的查看文件指令:
cat 、 tac 、more 、less 、 head 、 tail
查看空閒和已用內存大小的指令:
free 不帶選項默認是以KB爲單位
free -m 以MB爲單位,同樣適用於 -b(B爲單位) 、 -g(GB爲單位) 、 -tera(TB爲單位)
查看系統中進程及資源的使用情況:
top top是動態監視系統任務的工具,top輸出的結果是連續的
殺死進程指令:
1. 先用監視進程的指令 查看進程 pid :
ps -ef 顯示所有進程
ps -ef | grep 進程名 根據程序名稱查詢相關進程狀態
2. 再用 kill pid 殺死進程:
kill 933 默認是選項是 -15,代表 SIGTERM,系統會發送一個SIGTERM的信號給對應的程序。當程序接收到該signal後,將會發生以下情況之一:程序立刻停止;當程序釋放相應資源後再停止;程序可能仍然繼續運行。
kill -9 933 -9 代表 SIGKILL, 強制殺死進程
kill all 程序名 可以通過程序名字直接殺死所有相關進程
設定進程優先級**:
Linux操作系統中,進程之間是競爭資源(CPU和內存)的關係,競爭的優劣度(謙讓度)是通過一個數值來實現的,-20——19,其中,負值或者0表示最高優先級。而nice可以爲進程指定謙讓度的值,所以進程的優先級就是:父進程的優先級的值+所指定的謙讓度的值相加。
nice -n 謙讓度的增量值 程序 運行指定的程序,併爲它指定謙讓度增量
renice 謙讓度 pid 通過進程 pid 來改變謙讓度,進而達到更改進程優先級的目的
其餘常見的:
ls 列出目錄下的文件
sudo 以系統管理者執行
chmod 改變一個或多個文件的權限(存取模式)
2. 講一下C++中const和define的區別
從編譯處理的階段、類型和安全檢查、存儲方式三個方面簡單介紹
3. C++中多態有幾種?
重載和重寫:
- 重載主要是指函數重載,屬於靜態多態,在編譯的時候就已經確定;
- 重寫是指虛函數機制實現的動態多態,在運行期間動態綁定:
對於含有虛函數的類,在創建父類的對象的時候,會同時創建一個虛表指針,虛表指針會指向虛函數表,虛函數表中存放了各個虛函數的入口地址;在創建子類對象的時候,子類會繼承其父類的虛函數表,當子類重寫虛函數時,會將其繼承的虛函數表中的函數入口地址替換爲重寫的函數地址。使用虛函數,會增加訪問的內存開銷,降低效率。
4. 數據庫索引使用的數據結構是什麼?
B+樹,怎麼個實現方法
5. 數據庫中找出最近被搜索次數最多的十個關鍵詞
實現語句大概是這樣:
select world from table group by world order by count(*) desc limit 10;
6. join 和 left join的區別
主要就是內連接和外連接的區別:
- 內連接不區分主副表,只查找兩張表匹配上的記錄。
- 外連接分爲主表和副表,left join 左邊的是主表,右邊的是副表,主要查詢主表的數據,當副表中的數據沒有和主表中的數據匹配上時,副表會自動模擬出 NULL 與之匹配。
7. 說說數據庫的兩種存儲引擎
MyISAM 和 InnoDB:
- MyISAM 是 mysql 常用的存儲引擎之一,但這種引擎不是默認的。MyISAM採用三個文件組織一張表:xxx.frm(存儲格式的文件)、xxx.MYD(存儲表中數據的文件)、xxx.MYI(存儲表中索引的文件)。
優點:可被壓縮,節省存儲空間。並且可以轉換爲只讀表,提高檢索效率。
缺點:不支持事務。- InnoDB 表的結構存儲在 xxx.frm 文件中,數據存儲在 tablespace 這樣的表空間中(邏輯概念),無法被壓縮,無法轉換成只讀。
優點:支持事務、行級鎖、外鍵等,數據的安全可以得到保障;在MySQL數據庫崩潰之後提供自動恢復機制;支持級聯刪除和級聯更新。
缺點:無法被壓縮,無法轉換成只讀。
8. C++的STL使用過哪幾種
- 序列式容器:
vector、deque(包含queue和stack)、list(單向和雙向)、array- 關聯式容器:
底層紅黑樹實現:set、map、multiset、multimap
底層哈希實現:unordered_set、unordered_multiset、unordered_map、unordered_multimap
9. 講一下你瞭解的HTTP協議
從HTTP協議的作用、特點以及請求/響應的過程等方面簡單介紹。
10. TCP 和 UDP 的區別
主要從交付的可靠性、有無連接、適用場景區分,另外在首部開銷、報文長度、服務對象等方面還有些小的區別
11. select() 和 epoll()的區別
沒了解過網絡編程。。。
12. 還是剛纔查詢關鍵詞的場景,你自己用C++實現的話怎麼實現?
使用 map 存儲, key是關鍵詞, value是關鍵詞出現的次數, 然後自己實現一個排序函數或者仿函數,根據 map 的 second 大小排序,複雜度是 ;
有沒有複雜度更低的方法?
使用哈希表 + 最小堆,複雜度是 ,想不出來 O(n) 的方法了。。。