面試 雜記(一)

2021-09-25 02:19:04 字數 1866 閱讀 4247

這裡主要記錄一些面試中被問過的問題。

工作用的主要是c++,所以只是對malloc了解一些。

1) void *malloc ( size_t size )

最常用的乙個了,就是申請size個位元組大小的空間了,這裡不會對分配空間進行初始化操作。

2) void *calloc ( size_t num_elements, size_t element_size )

申請num_elements * element_size個位元組大小的空間,即兩個引數分別是元素個數即元素大小,element_size一般使用sizeof求出來的。除了引數外,calloc與malloc不同的還有它會將分配空間的每個位都初始化為0。

3) void *realloc (void *ptr, size_t new_size )

用於對已有空間進行調整,ptr為舊空間的位址,而new_size則會調整後的大小。對於ptr和new_size,有以下幾種情況(假設舊空間的大小為old_size)。

ptr != null 而 new_size == 0:此時相當於free函式,會釋放ptr所指向的空間,並且返回null。

ptr != null 而 new_size > old_size:擴大空間,先判斷當前的指標是否有足夠的連續空間,如果有,擴大ptr指向的位址,並且將ptr返回,如果空間不夠,先按照new_size指定的大小分配空間,將原有資料從頭到尾拷貝到新分配的記憶體區域,而後釋放原來ptr所指記憶體區域(注意:原來指標是自動釋放,不需要使用free),同時返回新分配的記憶體區域的首位址。即重新分配儲存器塊的位址。注意擴大部分的空間內容是不會被初始化的。

ptr != null 而 new_size < old_size:縮小空間,會將超出new_size的空間釋放。

ptr == null時,相當於呼叫malloc函式。

當沒有足夠的空間用於擴大時,返回null而原來的記憶體塊不變,所以這裡不能直接用ptr = realloc(ptr, 100)這種方式,而需要先對返回值進行判斷。

一棟100層高的大樓,給你兩個完全相同的玻璃球。假設從某一層開始,丟下玻璃球會摔碎。那麼怎麼利用手中的兩個球,用什麼最優策略知道這個臨界的層是第幾層??

基本上都可以想到用分段的方法來解決。當時我給出的思路是分十段,找到臨界點在第幾段後再一層層嘗試。但是這種方法,如果是在第1段最差次數是10次(1~10),在第2段則最差是11次(10~20),在第k段則最差是9+k次。很顯然這是不平均的,層數越高,我們所需要測試的最差次數就越多。

所以我們每乙個分段的最差測試次數要盡量是一樣的,這也是這個問題的考察點所在。通過上面的分析,我們可以發現平均分段時第一段比第二段少一次,第二段又比第三段少一次。那麼,我們只需要讓第一段層數比第二段層數少一層,第二段層數比第三段層數少一層就可以讓每個分段的測試次數一樣了。我們可以假設第一段層數為k,則有如下公式:

通過上面的算式我們可以得到k=14,即第一段的層數為k,也就是說我們的最差次數為14次。第一次在14層扔,沒碎則在27層扔,以此類推。

即判斷乙個數是否是2^n次方。很簡單,如果數x是2的n次方,則其二進位制必定為000010000這樣子的格式,即只有乙個位為1而其餘位為0(不考慮符號位),則x-1為000001111,即原來為1的位變為0,該位後面的所有位全部都變為1。顯然後000010000 & 000001111 == 0。

所以,我們只需要判斷x & (x-1)是否為0,為0則說明x是2的n次方,否則不是。

清晰理解紅黑樹的演變---紅黑的含義

才知道紅黑樹的節點是由2-3樹演變而來的。而2-3樹是能夠保持整個樹的完美平衡的,但是由於2-3樹實現複雜,所以才將3-節點中的最左邊節點變成紅節點而其他節點變成黑節點從而構造出了紅黑樹。假如可以是連續紅節點,那回歸到2-3樹將出現某個節點是4-節點,會破壞掉2-3樹的完美平衡。這便是我看完部落格後覺得要限制不能是連續兩個紅節點的另乙個原因了。

java面試題雜記

1 jsp與servlet區別 2 arralist,linklist,list,vector的區別,hashmap,hashtable,hashset區別,heap,stack區別 屢試不爽的筆試題。3 spring的事務管理,事務隔離級別 4 oracle sql的優化方法 5 j2ee設計模式...

Java面試題雜記

一 spring事務 1.工作在service層 2.註解 transactional,載入類上或方法上,加在類上表示類中所有public方法都有事務。springboot在啟動類上加上 enabletransactionmanagement就可以執行了3.通過註解方式新增的事務稱為 宣告式事務,在...

常用雜記 一

開啟web syetem.diagnostics.process.stat http 開啟乙個程序 獲取所在程序id thread.currentthed.managedthreadld遞迴 重複呼叫函式自身實現迴圈。迭代函式內部某某段 實現迴圈,參與迴圈的變數同時參與運算。準確測量時間stopwa...