騰訊模擬面試題一

1. 野指針是什麼?會引發什麼問題?該如何避免?

野指針是指向一個“垃圾內存”的指針,它的指向是隨機的。而且它並不是空指針。引發的最大問題就是**內存泄漏。**內存泄漏不是物理上的內存的消失不見,而是由於操作失誤對該段內存失去了控制權,從而造成內存的浪費。

那我們該如何避免呢?

  1. 首先,我們必須養成良好的編程習慣,尤其是在對指針進行操作時更應該注意。
  2. 其次,我們在定義一個指針時,可以直接初始化讓其指向空。因爲NULL的宏定義是 #define NULL(void *) 0,代表的是零地址,而零地址是無法進行讀寫的。
  3. 再次,我們在進行動態內存申請時,最好在申請完一片區域後檢查一下是否分配成功。
  4. 最後,在使用完空間後,一定要用free()或delete來釋放它,釋放之後再讓指針指向空。
    只有養成了上述的好習慣,我們在編程時才能儘可能地減少因爲對野指針的操作而引起的程序錯誤。

2.C++多態是什麼?其原理是什麼呢?

通俗點來說,多態就是多種形態。具體說來就是爲了完成某個行爲,當不同對象去完成時會產生不同的狀態。多態是根據虛函數來實現的,編譯器在編譯時遇到虛函數,就會採取晚綁定的技術,也就是說在編譯時並不確定該調用哪個函數,而是在運行時依據對象的類型來確定該調用哪個函數,這就是C++的多態(可以舉個例子:我們在買票時,普通人買票就是全票,學生買票就是學生票。這個就可以簡單地理解爲多態。)

當我們在類中聲明一個虛函數時,編譯器會在類中生成一個虛函數表,它由編譯器自動生成和維護,可以用來存儲一個類的成員函數指針。虛函數會被編譯器放進虛函數表中。當存在虛函數時,每個對象都會有一個指向虛函數表的指針。在不涉及虛函數的情況下,當我們用一個指針/引用調用一個函數時,該調用哪一個函數是根據這個指針/引用的類型而確定的。當涉及到多態性時,採用了晚綁定技術,就不再單單地考慮指針/引用的類型,而是根據這個指針/引用指向的對象的類型確定調用哪個函數,也就是說根據這個對象的虛函數表的指針指向的虛函數表中的函數地址來確定該調用哪個函數。

3.快速排序的思想是什麼?時間複雜度是多少?什麼情況下最差?

快速排序採用的“分治思想”。即在一組數據裏挑選一個元素作爲基準值,然後把比基準值小的元素放在基準值左邊,比基準值大的元素放在基準值右邊。然後以該基準值爲界,又可以把左右兩邊的看成爲兩個數組,重複以上的操作。

快速排序在最優的情況下時間複雜是O(nlog(n)).

快速排序的最差情況還得參考基準值的選擇。我們一般選擇最多端或最右端的元素作爲基準值,這時,當數組是正序、倒序或者數組裏的元素大小都一樣時,就會出現最壞的情況。

4.http安全嗎?https與http的區別是什麼?

http不安全。
區別:

  1. http是超文本傳輸協議,信息是明文傳輸。而https(超文本傳輸安全協議)是具有安全性的加密傳輸協議,它可以說是http的安全版本。
  2. 兩者是完全不同的連接方式,用的端口也不一樣。http是80端口,而https是443端口。
  3. http的連接是無狀態的,即對於事務處理是沒有記憶能力的。缺少狀態就意味着要是後續處理需要前面的信息,則必須重傳,這樣就會導致每次連接傳輸的數據量增大。

5.TCP三次握手過程,第三條丟了會怎麼樣,會出現什麼現象

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