七月份投了CVTE內推進行了電話面試,由於準備得不是很充分,答得不是很好。面試內容主要包括:c++基礎、數據庫、網絡編程、Linux基礎等。題目如下:
1、介紹一下 C++中的引用?
答案網上都有就不重複了。
2、 數組可以引用嗎?(當時好像答錯了)
答:不能建立數組的引用是說,數組的元素不能是引用。而int (&b)[3] = a;b本身是一個引用,b不是數組。b的引用是數組名a.如果建立數組的元素的引用,則爲:int& b[3];但是int& b[3];C++不支持,因爲引用不可以作數組中的元素。
原因是它不支持傳統意義的複製,傳統意義的複製:int a = b;a和b在內存中分別佔用,內容一致。如果int &a = b;因此這種複製,內存中a並不分配新的內存,自然會錯誤。
一句話,你可以創建對數組的引用,但你不能創建一個元素都是引用的數組。
3、 多態和引用關係?
答案網上都有就不重複了。
4、 New和malloc區別?爲什麼在c++中使用new?他們的返回類型是否相同?
答:(1)malloc與free是C++/C語言的標準庫函數,new/delete是C++的運算符。它們都可用於申請動態內存和釋放內存。
(2)對於非內部數據類型的對象而言,光用malloc/free無法滿足動態對象的要求。對象在創建的同時要自動執行構造函數,對象在消亡之前要自動執行析構函數。由於malloc/free是庫函數而不是運算符,不在編譯器控制權限之內,不能夠把執行構造函數和析構函數的任務強加於malloc /free.
(3)因此C++語言需要一個能完成動態內存分配和初始化工作的運算符new,以一個能完成清理與釋放內存工作的運算符delete.注意new/delete不是庫函數。
new 建立的是一個對象,malloc分配的是一塊內存
返回類型不同:malloc 函數返回的是 void * 類型,void* 表示未確定類型的指針。malloc 向系統申請分配指定size個字節的內存空間new 返回指定類型的指針,並且可以自動計算所需要大小
5、 怎麼確認一個類中對象的個數?(推薦Effective c++系列裏面講得很全面)
class AllMembers{
public:
AllMembers() // 構造函數
{
++num;
}
AllMembers(const AllMembers&) // 拷貝構造函數
{
++num;
}
~AllMembers() // 析構函數
{
--num;
}
static size_t number()
// 返回實例化對象個數
{
return num;
}
private:
static size_t num; // 對象計數器
};
6、 講講智能指針?(可以看看Boost庫)
7、 Tcp爲什麼採用四次揮手?
8、 點播視頻採用tcp還是udp?
答:udp速度快
9、 Shell 查找當前目錄和子目錄下的.c文件?
答:find
. -name *.c
10、數據庫中查找兩個表中相同的數據(NAME)?
答:select A.* from A,B where A.ID = B.ID and A.NAME = B.NAME
11、說一說C++11的新特性
12、static和const有什麼區別?
13、http和tcp的區別
答:TPC/IP協議是傳輸層協議,主要解決數據如何在網絡中傳輸,而HTTP是應用層協議,主要解決如何包裝數據
14、linux下文件系統刪除一個文件
15、CLOSE_WAIT和TIME_WAIT的區別
TIME_WAIT 是主動關閉鏈接時形成的,等待2MSL時間,約4分鐘。主要是防止最後一個ACK丟失。由於TIME_WAIT的時間會非常長,因此server端應儘量減少主動關閉連接。
CLOSE_WAIT是被動關閉連接是形成的。根據TCP狀態機,服務器端收到客戶端發送的FIN,則按照TCP實現發送ACK,因此進入CLOSE_WAIT狀態。但如果服務器端不執行close(),就不能由CLOSE_WAIT遷移到LAST_ACK,則系統中會存在很多CLOSE_WAIT狀態的連接。此時,可能是系統忙於處理讀、寫操作,而未將已收到FIN的連接,進行close。此時,recv/read已收到FIN的連接socket,會返回0。
16、數據庫3範式
1、第一範式(1NF)
在任何一個關係數據庫中,第一範式(1NF)是對關係模式的基本要求,不滿足第一範式(1NF)的數據庫就不是關係數據庫。所謂第一範式(1NF)是指數據庫表的每一列都是不可分割的基本數據項,同一列中不能有多個值,即實體中的某個屬性不能有多個值或者不能有重複的屬性。如果出現重複的屬性,就可能需要定義一個新的實體,新的實體由重複的屬性構成,新實體與原實體之間爲一對多關係。在第一範式(1NF)中表的每一行只包含一個實例的信息。簡而言之,第一範式就是無重複的列
2、第二範式(2NF)
第二範式(2NF)是在第一範式(1NF)的基礎上建立起來的,即滿足第二範式(2NF)必須先滿足第一範式(1NF)。第二範式(2NF)要求數據庫表中的每個實例或行必須可以被唯一地區分。爲實現區分通常需要爲表加上一個列,以存儲各個實例的唯一標識。第二範式(2NF)要求實體的屬性完全依賴於主關鍵字。所謂完全依賴是指不能存在僅依賴主關鍵字一部分的屬性,如果存在,那麼這個屬性和主關鍵字的這一部分應該分離出來形成一個新的實體,新實體與原實體之間是一對多的關係。爲實現區分通常需要爲表加上一個列,以存儲各個實例的唯一標識。
第二範式就是非主屬性非部分依賴於主關鍵字。
3、第三範式(3NF)
滿足第三範式(3NF)必須先滿足第二範式(2NF)。簡而言之,第三範式(3NF)要求一個數據庫表中不包含已在其它表中已包含的非主關鍵字信息。例如,存在一個部門信息表,其中每個部門有部門編號(dept_id)、部門名稱、部門簡介等信息。那麼在圖3-2的員工信息表中列出部門編號後就不能再將部門名稱、部門簡介等與部門有關的信息再加入員工信息表中。如果不存在部門信息表,則根據第三範式(3NF)也應該構建它,否則就會有大量的數據冗餘。簡而言之,第三範式就是屬性不依賴於其它非主屬性。