小米麪試總結

小米麪試總結

       總結一下前段時間小米麪試的題目吧,考察了很多C11的新特性,由於自己也沒怎麼準備,而且公司只准使用C99開發,所以很多都忘記了,答的並不是很好在這上面,所以自己也需要重新回顧下C11的知識點了。
       有時間也會將C++重新回顧的知識重點寫成博客,供大家一起學習,有錯誤的地方希望指正,共同進步,因爲有些問題是我自己總結的,所以難免會有錯!!!
1.STL中的容器vector,size和capacity的區別?
解釋:size是已存在vector中的元素數目,而capacity則是在不分配新的內存空間的前提下最多可以保存的元素數目,如果從重新分配了內存一般是以原內存的2倍方式增長。
2.如何避免C++中的隱式轉換?
解釋:在構造函數中可以通過explicit聲明爲顯示轉換,函數中可以參考http://blog.csdn.net/LaineGates/article/details/50599218
3.瞭解MVC框架麼?和你的ESP框架有什麼不同麼?
解釋:其實ESP採用的就是MVC框架,也就是模型(model)-視圖(view)-控制器(controller)。百度解釋如下:
Model(模型)是應用程序中用於處理應用程序數據邏輯的部分。通常模型對象負責在數據庫中存取數據。View(視圖)是應用程序中處理數據顯示的部分。通常視圖是依據模型數據創建的。
Controller(控制器)是應用程序中處理用戶交互的部分。通常控制器負責從視圖讀取數據,控制用戶輸入,並向模型發送數據。
          其實用我個人編程角度解釋就是,模型相當於一個對象或者說我們需要實現的具體邏輯業務,而視圖可以理解爲界面,也就是說我們需要處理的邏輯業務通過Html界面顯示即視圖,而控制器可以理解爲通過Html界面傳過來的路由即action,後臺處理界面傳過來的數據處理部分即可以理解爲控制器。
4.你瞭解vector的內部實現麼?
解釋:vector是動態增加內存大小的,所謂動態增加並不是指在原空間之後持續新空間(因爲無法保證原空間之後尚有可配置的空間),而是以原大小的2倍另外配置一塊新的空間,然後將原內容拷貝過來。然後纔在原內容之後構造新數據,並釋放原空間。因此一旦內存被重新分配,則指向容器的迭代器,指針和引用都會失效。
5.2選1編程題不查網絡,實現scope_ptr內部實現②關於視頻方面的,矩陣變換方面的題(用代碼實現)
6.往verctor中添加一個元素,size會變大,capacity也會變大麼?如何實現的?
解釋:size是肯定會變大的,而capacity要看情況,如果已經滿載的情況,那麼capacity會變大,並且爲2倍擴容,如果內存空間足夠,那麼capacity不會變大,總之capacity大於或等於size。
7.刪除一個迭代器,還能使用麼?
解釋:對於序列式容器(如vector、queue)刪除迭代器,會使後面所有元素的迭代器都失效,對於關聯容器(如map、set等)刪除迭代器,只會使當前迭代器失效(和內部實現有關係,關聯容器紅黑樹存儲)
8.Apache和ESP有什麼區別?Appweb和Httpd有啥區別?

解釋:因爲apache沒使用過,所以沒總結。

9.調用一個普通函數和調用系統函數有啥區別?
解釋:簡單解釋爲普通函數調用發生在用戶態,而系統調用發生在內核態,系統調用都會爲用戶提供系統接口(API),來維護內核的穩定和安全性。比如:我們開啓一個進程那麼會調用系統函數fork(),又比如printf底層調用的是write函數。
函數庫調用
系統調用
在所有的ANSI C編譯器版本中,C庫函數是相同
各個操作系統的系統調用是不同
它調用函數庫中的一段程序(或函數)
它調用系統內核的服務
用戶程序相聯繫
操作系統的一個入口點
在用戶地址空間執行
在內核地址空間執行
它的運行時間屬於“用戶時間
它的運行時間屬於“系統時間
屬於過程調用,調用開銷較小
需要在用戶空間和內核上下文環境間切換,開銷較大
在C函數庫libc中有大約300個函數
在UNIX中大約有90個系統調用
典型的C函數庫調用:system fprintf malloc
典型的系統調用:chdir fork write brk;
10.爲什麼要使用虛函數?
解釋:降低了耦合度,使代碼模塊實現分層,增加模塊之間可擴展性和可維護性
11.說說靜態庫和動態庫的區別
解釋:靜態庫發生在編譯和鏈接時期,也就是在鏈接過程中將目標文件(.o文件)一起打包到可執行文件中,所以靜態庫的體積會比較大,所以靜態庫比較浪費空間和資源,而動態庫是在程序運行時動態載入的,靈活性更大,有利於程序更新、以及代碼改動,因爲如果是靜態庫需要重新全部編譯。
12.還是靜態庫和動態庫,假如一個程序調用了A和B兩個靜態庫,A和B再調用C靜態庫,請問能編譯通過麼?爲什麼?
解釋:不能,因爲會出現重複定義,這也就是爲什麼會有動態庫了
13.瞭解C++11的nullptr和C99裏面的指針NULL賦初始值爲0的區別麼?
解釋:nullptr就代表一個空指針常量,而C99裏面的NULL指針在C99中是被定義爲0的,爲什麼引入nullptr主要是解決C++中重載帶來的二義性。具體參考博客https://www.cnblogs.com/nothx/p/8523191.html
14.你們爲什麼要選擇Appweb而不是Apache
解釋:因爲我們是嵌入式開發,而Apache太大我們並不需要,Appweb的功能能滿足我們的需求。
15.你瞭解map麼,請問內部實現是什麼?(紅黑樹存儲的,問關於紅黑樹的實現)
解釋:這個網上很多,不在博客中說了。
16.SPS是什麼?PPS是什麼?SPS和PPS的區別?
解釋:SPS爲序列參數集,PPS爲圖像參數集。SPS包含的是針對一連續編碼視頻序列的參數,如標識符seq_parameter_set_id、幀數及POC的約束、參考幀數目、解碼圖像尺寸和幀場編碼模式選擇標識等。PPS對應的是一個序列中某一副圖像或者某幾幅圖像,參數如標識符pic_parameter_set_id、可選的seq_parameter_set_id、熵編碼模式選擇標識、片組數目、初始量化參數和去方塊濾波係數調整標識等。
17.AVC和SVC的區別?
解釋: H.264SVC (Scalable Video Coding)是以H.264爲基礎,在語法和工具集上進行了擴展,支持具有分級特性的碼流,H.264SVC是H.264標準的附錄G,同時作爲H.264新的profile。H.264SVC在2007年10月成爲正式標準(具體見這篇博客https://www.cnblogs.com/huxiaopeng/p/5653310.html
18.講一下對於AAC的瞭解
解釋:這個百度下
19.講一下H264中的VCL和NAL
解釋:VCL爲 視頻編碼層,NAL爲網絡提取層
20.你知道普遍的音頻採樣率爲多少麼?爲什麼?
解釋:常用的音頻採樣頻率有8kHz、11.025kHz、22.05kHz、16kHz、37.8kHz、44.1kHz、48kHz等,因爲人耳所能正常人聽覺的頻率範圍大約在20Hz~20kHz之間,根據奈奎斯特採樣理論,爲了保證聲音不失真,採樣頻率應該是正常人聽覺的2倍。
21.你瞭解可視電話麼,一般採樣率是多少?
解釋:8khz
22.PTS和DTS是什麼?
解釋:PTS爲顯示時間戳,DTS爲解碼時間戳
23.音頻(AAC)和視頻(H264)的time_base是多少?
解釋: h264隨着幀率變化例如1:25 aac根據採樣率變化例如1:44100
24.給一個視頻分辨率(720x576),你知道大概帶寬和碼率麼?


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