C++面試題

C++音視頻開發(fā) 面試1

技能要求:Socket,MFC,Windows

崗位職責(zé):
1、參與需求分析、模塊開發(fā)等相關(guān)工作;
2、在windows平臺下進行C/C++應(yīng)用程序設(shè)計、開發(fā)、測試;
3、參與軟件系統(tǒng)或模塊的聯(lián)調(diào),協(xié)助測試人員進行軟件測試,修復(fù)BUG;
4、參與編寫相關(guān)技術(shù)文檔。
任職要求:
(1)統(tǒng)招本科及以上畢業(yè),計算機相關(guān)專業(yè)畢業(yè),3年以上C++研發(fā)工作經(jīng)驗;
(2)熟悉Windows操作系統(tǒng),精通C/C++、面向?qū)ο筌浖O(shè)計,熟悉多線程控制及MFC界面編程等;
(3)有大型C/C++服務(wù)器研發(fā)經(jīng)驗優(yōu)先,熟悉TCP/IP協(xié)議;
(4)具備通信基礎(chǔ)知識、有音視頻系統(tǒng)相關(guān)開發(fā)經(jīng)驗優(yōu)先;
(5)具有良好的編程習(xí)慣,積極溝通反饋,善于團隊協(xié)作。

C++ 筆試題

1、MFC指的什么?

2、SendMessage和PostMessage區(qū)別?

3、MFC的對話框的種類,各自怎么使用?及相關(guān)函數(shù)

4、自定義一個Windows消息的發(fā)送與響應(yīng),有哪些步驟?

5、在MFC窗口中制作一個逃跑按鈕(鼠標(biāo)永遠(yuǎn)捕捉不到),該如何實現(xiàn)?

6、MFC中文檔視圖結(jié)構(gòu)中都需要哪些類?

7、音頻信號壓縮標(biāo)準(zhǔn)的編碼主要有哪些?

aac MP3 ape flac

8、經(jīng)采樣、編碼但未壓縮的語音信號(對應(yīng)G.711編碼)是什么數(shù)據(jù)?

9、常見的數(shù)字音頻編碼文件格式有哪些,并簡述其特點。

10、如何從H264碼流中獲取視頻的分辨率大小?

11、H264碼流中I幀,P幀,B幀的區(qū)別是什么?

12、回答下面的問題。

(1)、引用與指針的區(qū)別是什么?

(2)、構(gòu)造函數(shù)和析構(gòu)函數(shù)是否可以被重載,為什么?

13、以下為 WindowsNT下的32位C++程序,請計算 sizeof的值
vold Func( char str[1001)
SIzeof( str)=?
dkp= malloc( 100)
sizeof( p)=?

14、編寫 strcat函數(shù)
已知 strcat函數(shù)的原型是char* strcat(char* strDest,const char* strSrc)
其中 strDest是目的字符串, strss是源字符串。
不調(diào)用C++/C的字符串庫函數(shù),請編寫函數(shù) strcat

15、寫一個函數(shù)找出一個整數(shù)數(shù)組中,第二大的數(shù)。

面試

1、對MFC熟悉么?寫過復(fù)雜的界面沒有?還有文檔視圖使用的多不?

2、使用過哪些VC++中的線程同步?

3、VC++中網(wǎng)絡(luò)模型熟悉不?比如說完成端口、重疊IO

C++ 技術(shù)面試2

1、模板的主要用途和實現(xiàn)機理是什么?

2、STL vector是怎么實現(xiàn)的,內(nèi)部原理是什么?

3、你覺得你是一個什么樣的人?

(1)、對技術(shù)鉆研比較深入,不太在于工資,對技術(shù)很狂熱。

(2)、做工資就是看工資,不在乎使用什么技術(shù),只要賺錢就行。

4、你的未來職業(yè)規(guī)劃是什么?

5、Modbus協(xié)議的原理和內(nèi)部機制、分類等

6、TCP和UDP的區(qū)別?

7、Boost庫熟悉哪些?

8、C++11熟悉么?

auto、lambda表達式,

右值引用熟悉么?完美轉(zhuǎn)發(fā)熟悉么?

9、STL標(biāo)準(zhǔn)庫熟悉么?熟悉哪些容器和算法?

10、多線程熟悉么?多線程一般需要注意哪些問題?你使用到哪些鎖?mutex、讀寫鎖,unique_lock用過沒?

11、進程間通信使用過哪一些?

信號量、共享內(nèi)存、油槽

12、對QT、MFC熟悉么?

C++面試3

1、WebSocket和Socket有什么區(qū)別?

2、對高并發(fā)熟悉么?你們做的TCP Server并發(fā)量高么?

3、你最近的一份工作中遇到的一個難點和問題是什么?你是怎么解決的?

4、你在你們項目中負(fù)責(zé)什么?擔(dān)任什么角色?

5、Boost庫中為什么大量使用hpp文件?基于什么考慮?

Boost庫的頭文件與我們平常所用的頭文件(*.h)或者C++標(biāo)準(zhǔn)庫頭文件(沒有后綴名)不同,它是把C++類的聲明和實現(xiàn)放在了一個叫做.hpp文件中。之所以這么做,一是與普通C頭文件區(qū)分開,還有一個重要的原因是使Boost庫不需要預(yù)先編譯,可以直接引入程序員的工程即可編譯鏈接,方便庫的使用。最后有一個原因就是C++編譯器的限制,許多編譯器還不支持C++標(biāo)準(zhǔn)提出的模板分離編譯模式(export關(guān)鍵字),而Boost庫大量使用了模板,為了保持與各個編譯器的兼容,也不得不采用這種.hpp的頭文件形式。

6、模板的實現(xiàn)可以寫在.h文件中嗎?

7、C++模板類代碼只能寫在頭文件?

這個問題,實際上我?guī)啄昵熬陀龅搅?。最近寫個模板類玩的時候,再次遇到。

當(dāng)我非常仔細(xì)的將定義和實現(xiàn)分開,在頭文件中保留了最少的依賴后,一切就緒.cpp單獨編過。但是當(dāng)使用的時候,就會報告所有的函數(shù)調(diào)用都沒有實現(xiàn)。按常規(guī).h/.cpp而言這是不可能的。但是模板類就是這么獨特。簡單說說他的原因,也備自己將來遺忘:

從語法角度而言,是沒有強制要求說模板代碼的聲明和實現(xiàn)不可以分開。那么當(dāng)分離的聲明和實現(xiàn)寫好后,單獨編譯.cpp是可以通過的,但是生成的.o文件卻非常小,只有一個原因:確實沒有任何實現(xiàn)代碼!————不知道用什么類型參數(shù)套用模板。

因為模板類需要在使用到的地方利用聲明模板的typename或者class參數(shù)的時候,才會即時生成代碼。那么當(dāng)我把模板聲明和實現(xiàn)分開的時候,這個即時過程因為編譯器只能通過代碼include“看到”頭文件而找不到模板實現(xiàn)代碼,所以會產(chǎn)生鏈接問題。這也是為什么幾乎都會建議模板類和聲明和實現(xiàn)都寫在頭文件。

如果剛接觸c/c++編寫的朋友可能還不是很明白。編譯器面對巨量代碼的時候,也是以一個一個的.cpp/.c文件作為基本單元,根據(jù)代碼的include包含找到聲明,翻譯代碼產(chǎn)生.o文件。注意他們每個cpp/c文件都是相互獨立完成自己工作的,對于缺少的部分,如果妥善聲明,會留待鏈接過程的時候產(chǎn)生引用關(guān)系。 那么剛才說的模板類實現(xiàn)代碼,編譯它的時候因為不知道套用什么參數(shù),實際上沒有任何有用的內(nèi)容存在于.o文件當(dāng)中。而在使用模板類的地方指定了類型參數(shù),編譯器這才開始根據(jù)模板代碼產(chǎn)生有用的.o編碼,可是這些內(nèi)容放在了使用模板的代碼產(chǎn)生的.o文件當(dāng)中。如果編使用模板代碼的時候,通過include包含“看不到”模板的實現(xiàn)代碼,這些所有的缺失,到鏈接階段就無法完成。

所以最后的結(jié)論是:請老老實實把模板的實現(xiàn)和聲明都寫在頭文件吧。如果你很有想法有個性,可以堅持,然后試試#include “xxxx.cpp” 這樣屌炸的代碼。

Qt C++面試4

1、談?wù)凲t的信號-槽的實現(xiàn)機理

信號-槽是一種對象之間的通信機制,是Qt在標(biāo)準(zhǔn)C++之外,使用元對象編譯器(MOC)實現(xiàn)的語法糖

2、對23種常見的設(shè)計模式熟悉哪些?

觀察者模式、單例模式、工廠模式、狀態(tài)模式

3、Boost庫中的Singal2信號-槽和Qt中的信號-槽有什么區(qū)別?

4、Qt中多線程中槽函數(shù)是怎么調(diào)用的,調(diào)用的時機是什么?

Qt中 QThread 實現(xiàn)線程有幾種方式?

5、在信號-槽中是怎么傳遞自定義結(jié)構(gòu)體的?

QT信號槽收發(fā)自定義類/自定義結(jié)構(gòu)體的2種方法

想要發(fā)射信號時,攜帶自定義的class或者struct,必須要做一下處理,否則編譯時不會報錯,但運行時會出錯。

假設(shè)我們自定義了一個結(jié)構(gòu)體:

typedef struct
{
...//
...//
}Frame7E;
如果想要這么用:

Frame7E frame;
...//填充frame
emit sendFrame(frame);
那么必須使用以下兩種方法之一。

方法1:使用宏:Q_DECLARE_METATYPE

該方法的原理是使得QVariant類支持我們自定義的類型,而QT的信號槽是支持發(fā)射QVariant類型數(shù)據(jù)的,然后我們可以用QVariant封裝這個自定義類/結(jié)構(gòu),然后emit 出去QVariant類型的變量。

include <qmetatype.h>

//發(fā)射端
Frame7E frame;
...//填充frame
QVariant var;
var.setValue(frame); // copy s into the variant
emit sendFrame(var);//發(fā)QVariant類型的信號

接收端
// retrieve the value
Frame7E s2 = var.value<Frame7E>();//QVariant 轉(zhuǎn)換為 Frame7E
方法2:使用qRegisterMetaType函數(shù)使得QT的信號槽支持自定義類型

參考:https://blog.csdn.net/xbnlkdbxl/article/details/56842565

include <QMetaType>

//注冊自定義類型,使QT的信號槽支持我們的類型
qRegisterMetaType<Frame7E>("Frame7E");//參數(shù)無所謂,建議帶上同名字符串參數(shù)
注冊完之后,就可以正常使用信號槽了。

需要注意以下幾點:

1、注冊位置:在第一次使用此類鏈接跨線程的signal/slot之前,一般在當(dāng)前類的構(gòu)造函數(shù)中進行注冊;
2、注冊方法:在當(dāng)前類的頂部包含:#include <QMetaType>,構(gòu)造函數(shù)中加入代碼:qRegisterMetaType<MyClass>("Myclass");
3、Myclass的引用類型需單獨注冊:qRegisterMetaType<MyClass>("Myclass&");

8、Windows進程間通信的方式有哪些?

9、WebSocket和Socket有什么區(qū)別?

10、談?wù)凲t的DBus

C++面試5

1、STL vector做大量push_back操作時會出現(xiàn)什么問題?

2、boost庫 指針的原理,怎么做到動態(tài)分配內(nèi)存不delete?

3、模板你在項目中使用的多嗎?

C++面試6

1、派生類怎么調(diào)用基類的虛函數(shù)版本?

C++ primer 這本書上有這么兩句話“派生類虛函數(shù)調(diào)用基類版本時,必須顯式使用作用域操作符。如果派生類函數(shù)忽略了這樣做,則函數(shù)調(diào)用會在運行時確定并且將是一個自身調(diào)用,從而導(dǎo)致無窮遞歸。”

也就是說:

當(dāng)你實現(xiàn)派生類B的虛函數(shù)B::foo()時,如果函數(shù)體內(nèi)需要調(diào)用基類的虛函數(shù)版本時,需要顯示使用基類A的作用域操作符A::foo(),否則foo()就會在派生類作用域調(diào)用派生類版本的虛函數(shù),這樣會導(dǎo)致無窮遞歸。

就是自己在調(diào)用自己,沒有指明調(diào)用的是基類的虛函數(shù),自動認(rèn)為是調(diào)用派生類的虛函數(shù),然后就再次調(diào)用了,一直進行下去了。

struct A
{
virtual void foo(void) { }
}
struct B: public A
{
void foo(void)
{
    foo(); // 遞歸調(diào)用自己,即 B::foo()
    A::foo(); // 明確告訴編譯器,調(diào)用的是 A::foo(), 而不是自己
}
}

2、STL map:erase刪除元素之后迭代器失效的問題

當(dāng)刪除map迭代器中的某個元素時,會出現(xiàn)迭代器失效,該如何安全的解決處理?

3、智能指針了解么?

shared_ptr、unique_ptr、weak_ptr、scope_ptr有什么區(qū)別

4、面向?qū)ο螅禾摵瘮?shù)和純虛函數(shù)有什么區(qū)別?

5、如何保證訪問STL容器比如vector、map、set線程安全?讀寫前后加鎖處理

6、單例模式

指針: 會出現(xiàn)多線程訪問的new多個對象的問題

static 成員變量:所有類都使用同一個對象

7、你目前這份工作解決的最大難題是什么,談?wù)勀闶窃趺唇鉀Q的?

C++面試7

1、二級指針 指針的指針一般用來做什么?

2、動態(tài)數(shù)組使用C語言怎么實現(xiàn)?

3、對Linux熟悉嗎,比如常見的命令、發(fā)行版?chmod命令是用來干什么的?

4、進程和線程有什么區(qū)別?線程間的數(shù)據(jù)可以共享么?

5、TCP和UDP的有什么區(qū)別?

TCP服務(wù)端、客戶端的實現(xiàn)流程一般是什么樣的?

UDP需要建立連接么?

6、信號量一般怎么使用,熟悉么?

7、C語言或者C++中static關(guān)鍵字的作用?

1. 修飾普通變量,修改變量的存儲區(qū)域和生命周期,使變量存儲在靜態(tài)區(qū),在 main 函數(shù)運行前就分配了空間,如果有初始值就用初始值初始化它,如果沒有初始值系統(tǒng)用默認(rèn)值初始化它。
2. 修飾普通函數(shù),表明函數(shù)的作用范圍,僅在定義該函數(shù)的文件內(nèi)才能使用。在多人開發(fā)項目時,為了防止與他人命名空間里的函數(shù)重名,可以將函數(shù)定位為 static。
3. 修飾成員變量,修飾成員變量使所有的對象只保存一個該變量,而且不需要生成對象就可以訪問該成員。
4. 修飾成員函數(shù),修飾成員函數(shù)使得不需要生成對象就可以訪問該函數(shù),但是在 static 函數(shù)內(nèi)不能訪問非靜態(tài)成員。

8、protobuf協(xié)議有使用過么?

9、xml熟悉么?xpath是什么?

10、怎么讓一個類只有一個唯一對象?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容