1、c/c++記憶體洩漏
(1)基類的析構函式沒有定義為虛函式;
(2)缺少拷貝建構函式或過載賦值運算子;
兩次釋放相同的記憶體是一種錯誤的做法,同時可能會造成堆的崩潰。按值傳遞會呼叫(拷貝)建構函式,引用傳遞不會呼叫。
所以乙個類中有指標變數時,要麼顯示的寫拷貝建構函式和過載操作符函式,要麼禁用拷貝建構函式和過載操作符。
(3)在釋放物件陣列時,在delete中沒有方括號。
(4)沒有正確清楚巢狀的物件指標;
(5)指向物件的指標陣列不等同於物件陣列。
物件陣列是指每個陣列存放的是物件,只需要delete p.即可呼叫物件陣列中每個物件的析構函式釋放空間。
指向物件的指標陣列只是陣列中存放的是指向物件的指標,不僅要釋放每個物件的空間,還要釋放每個指標的空間。即 delete p只是釋放了每個指標,但是並沒有釋放物件的空間。正確做法是,迴圈釋放每個物件,然後再把指標釋放掉。
(6)在類的拷貝建構函式和析構函式中沒有匹配的呼叫new 和delete 函式。
2、什麼是野指標?
野指標是指指向被釋放的或者訪問受限記憶體的指標。
造成野指標的原因有哪些?
(1)指標變數沒有被初始化。
(2)指標p被free掉或者delete後,沒有置為null。
(3)指標越界訪問記憶體;
3、多執行緒與多程序有哪些區別?多執行緒有哪些優勢?
(1)程序是系統資源分配的基本單元,執行緒是cpu排程的基本單元。
(2)不同的程序有自己的位址空間,乙個程序至少包含乙個執行緒,多個執行緒可以共享乙個程序中位址空間。執行緒沒有自己的位址空間,但是執行緒也可以有自己少量的記憶體空間,如暫存器和棧等。
(3)程序相對來說,系統開銷大;執行緒開銷相對小。
執行緒優勢:
(1)在做讓兩件事同時在做在執行時,用執行緒來實現比程序相對來說簡單容易些。因為不同的程序間需要緊密合作才能滿足加鎖和資料一致性方面的需求。
(2)乙個程序裡可以包含多個執行緒,這樣可以提高程式的執行效率。如果乙個程序在任意時刻只能做一件事的話,執行緒可以讓它在等待連線之類的事情的同時還可以做其它事情。
(3)執行緒之間的切換快。
缺點:(1)程序間程式是實現起來簡單,但是多執行緒程式設計需要非常仔細的設計,尤其是變數共享引發的錯誤。
(2)對多執行緒程式之間的除錯相對來說比較困難。
3、執行緒之間用於同步的方式有哪些?
(1)訊號量
訊號量分為二進位制訊號量和計數訊號量。訊號量常用來保護一段**,如果每次只能被乙個執行執行緒執行,完成它,就需要使用二進位制訊號量;如果希望允許多個執行緒執行一段**,就需要使用計數訊號量。
(2)互斥量
它允許程式設計師鎖住某個物件,使得每次只能有乙個執行緒訪問它。
4、程式中如何設計防止死鎖?
死鎖是多個程序因競爭資源而造成的一種僵局互相無休止的等待下去。導致兩個程序陷入死鎖的狀態。
產生死鎖的原因:
(1)互斥條件。乙個資源每次只能被乙個程序占用。若其它程序想獲得這個資源,只能等待。
(2)請求與保持條件。乙個程序已經保持了至少乙個資源,但又提出了新的資源請求,但是該資源已經被其它程序占有u,此時的請求就會阻塞,但是對自己已經獲得的資源還保持不放。
(3)不可剝奪條件。程序已獲得的資源在未使用完之前不能被搶占,只能在程序中使用完事時自己釋放。
(4)迴圈等待條件。在發生死鎖時,必然存在乙個程序一資源的迴圈鏈,即程序集合p0等待p1的占用的資源,。。。。
處理死鎖的方法:
(1)預防死鎖。通過設定某些限制條件,去破壞產生死鎖的四個必要條件之一或者幾個來預防死鎖。
(2)避免死鎖。它不是事先採取各種限制條件去破壞四個條件之一,而是在資源動態分配活動中,用某種方法防止系統進入死鎖狀態。
(3)檢查死鎖。
(4)解除死鎖。常用的方法是撤銷一些程序,**資源。
如何預防死鎖的產生?
合理的分配系統資源;破壞死鎖產生的四個必要條件之一;合理的安排程序的推進順序。
5、tcp與udp的區別?
6、helper程序給proxy程序發hello包,怎樣確認對方已經收到?
解析報文,檢視傳送的報文的型別。
面試總結 2
hashmap的實現 hashmap底層由陣列 鍊錶構成,jdk 1.8之後,當鍊表長度超過8之後轉成紅黑樹 integer緩衝區 integer的緩衝區範圍是 128,127 形成緩衝區的原因是區間內的數字是最常用的,多次使用相同的底層物件有利於記憶體的優化 double有沒有緩衝區為什麼沒有 緩...
面試及總結2
今天上完課回實驗室後,把昨天面試的三道演算法題,完完整整的全部自己重做實現了一遍 多種方法 以下 原則上,力爭全部都是用c語言實現,但考慮到擴充套件性和相容性,演算法1使用了模板 測試環境 vs2008 測試結果 測試通過 時 間 2010.6.28 include stdafx.h include...
c c 面試總結(2)
4.深拷貝和淺拷貝 1 什麼時候會用到拷貝函式 乙個物件以值傳遞的方式傳入函式 就是作為入參 乙個物件以值傳遞的方式從函式返回 就是作為返回值 乙個物件需要通過另外乙個物件進行初始化 2 是否應該自定義拷貝函式 如果不自己定義拷貝函式,那麼編譯器會自動生成乙個預設的拷貝函式,這個拷貝函式就會完成物件...