2012 百度實習生筆試(1)
1. 單詞a中任意字母交換位置變為單詞b,我們就稱單詞a,b為兄弟單詞,如 army 與 mary為兄弟單詞。現給一個單詞字典,使用者輸入一個單詞,找出字典中所有的兄弟單詞,請寫出你的解題思路和演算法。
答案:
(思路一)計算ASCII碼,如果值與輸入詞的ASCII碼相等,再判斷;
(思路二)是對輸入的單詞進行全排列,對每一種排列在字典裡查詢,統計查到的兄弟單詞個數。(但是這個思路有個問題,就是單詞的字母太多的時候,排列情況非常多,查詢時間複雜度很大)
(思路三)將字典裡的所有單詞按字母順序重新組成單詞,如army和mary都變成amry,那麼所有兄弟單詞都變成同樣的單詞。再對這些變化過後的單詞做hash對映,再對輸入的單詞做同樣的對映,就可以很快查詢出所有兄弟單詞,查詢的時間複雜度為O(1)
2. 執行緒和程式有什麼區別,“執行緒安全”怎麼理解?
答案:
執行緒是指程式內的一個執行單元,也是程式內可排程的實體。
與程式的區別:
1)地址空間:程式內的一個執行單元;
程式至少有一個執行緒;
它們共享程式的地址空間;
而程式有自己獨立的地址空間;
2)執行緒是處理器排程的基本單位,但程式不是;
3)執行緒是處理器排程的基本單位,但程式不是;
4)二者均可併發執行。
程式是具有一定獨立功能的程式關於某個資料集合上的一次執行活動,程式是系統進行資源分配和排程的一個獨立單位。
執行緒是程式的一個實體,是CPU排程和分派的基本單位,它是比程式更小的能獨立執行的基本單位.執行緒自己基本上不擁有系統資源,只擁有一點在執行中必不可少的資源(如程式計數器,一組暫存器和棧),但是它可與同屬一個程式的其他的執行緒共享程式所擁有的全部資源。一個執行緒可以建立和撤銷另一個執行緒;同一個程式中的多個執行緒之間可以併發執行。
如果你的程式碼所在的程式中有多個執行緒在同時執行,而這些執行緒可能會同時執行這段程式碼。如果每次執行結果和單執行緒執行的結果是一樣的,而且其他的變數的值也和預期的是一樣的,就是執行緒安全的。
或者說:一個類或者程式所提供的介面對於執行緒來說是原子操作或者多個執行緒之間的切換不會導致該介面的執行結果存在二義性,也就是說我們不用考慮同步的問題。
執行緒安全問題都是由全域性變數及靜態變數引起的。
若每個執行緒中對全域性變數、靜態變數只有讀操作,而無寫操作,一般來說,這個全域性變數是執行緒安全的;若有多個執行緒同時執行寫操作,一般都需要考慮執行緒同步,否則就可能影響執行緒安全。
3. c與c++分別是怎樣動態分配和釋放記憶體的,有什麼區別?
答案:
c語言提供記憶體動態分配的函式有:malloc、calloc、realloc,在使用這些函式時必須包含其標頭檔案,分別為:<malloc.h>、<stdlib.h>、<alloc.h>
1) malloc 函式: void *malloc(unsigned int size)
在記憶體的動態分配區域中分配一個長度為size的連續空間,如果分配成功,則返回所分配記憶體空間的首地址,否則返回NULL,申請的記憶體不會進行初始化。
2)calloc 函式: void *calloc(unsigned int num, unsigned int size)
按照所給的資料個數和資料型別所佔位元組數,分配一個 num * size 連續的空間。
calloc申請記憶體空間後,會自動初始化記憶體空間為 0,但是malloc不會進行初始化,其記憶體空間儲存的是一些隨機資料。
3)realloc 函式: void *realloc(void *ptr, unsigned int size)
動態分配一個長度為size的記憶體空間,並把記憶體空間的首地址賦值給ptr,把ptr記憶體空間調整為size。
申請的記憶體空間不會進行初始化。
用c語言提供的這些動態記憶體分配函式後,對於這些已經申請的記憶體空間需要你自己進行釋放。如果你沒有釋放,並且你只是隨便執行一下自己的一個很小的程式,可能不會產生什麼很大的影響。但是,如果這樣一個大型程式或軟體執行中呼叫了這些語句,而沒有對申請的記憶體進行釋放,那麼後果是很嚴重的。
因此,在我們平時寫程式的過程中,應該養成好的變成習慣。在使用了這些函式動態分配了一段記憶體後,要記得對其進行釋放。
釋放的函式為free函式:
free函式原型為:void free(void *ptr)
作用:釋放由上面3種函式所申請的記憶體空間。
引數:ptr:指向需要釋放的記憶體空間的首地址。
在C++中,記憶體分成5個區,他們分別是堆、棧、自由儲存區、全域性/靜態儲存區和常量儲存區。
申請和釋放堆中分配的儲存空間,分別使用new 和 delete 的兩個運算子來完成:
指標變數名 = new 型別名(初始化式);
delete 指標名;
例如:
int *pi = new int(0)
答案:
(思路一)計算ASCII碼,如果值與輸入詞的ASCII碼相等,再判斷;
(思路二)是對輸入的單詞進行全排列,對每一種排列在字典裡查詢,統計查到的兄弟單詞個數。(但是這個思路有個問題,就是單詞的字母太多的時候,排列情況非常多,查詢時間複雜度很大)
(思路三)將字典裡的所有單詞按字母順序重新組成單詞,如army和mary都變成amry,那麼所有兄弟單詞都變成同樣的單詞。再對這些變化過後的單詞做hash對映,再對輸入的單詞做同樣的對映,就可以很快查詢出所有兄弟單詞,查詢的時間複雜度為O(1)
2. 執行緒和程式有什麼區別,“執行緒安全”怎麼理解?
答案:
執行緒是指程式內的一個執行單元,也是程式內可排程的實體。
與程式的區別:
1)地址空間:程式內的一個執行單元;
程式至少有一個執行緒;
它們共享程式的地址空間;
而程式有自己獨立的地址空間;
2)執行緒是處理器排程的基本單位,但程式不是;
3)執行緒是處理器排程的基本單位,但程式不是;
4)二者均可併發執行。
程式是具有一定獨立功能的程式關於某個資料集合上的一次執行活動,程式是系統進行資源分配和排程的一個獨立單位。
執行緒是程式的一個實體,是CPU排程和分派的基本單位,它是比程式更小的能獨立執行的基本單位.執行緒自己基本上不擁有系統資源,只擁有一點在執行中必不可少的資源(如程式計數器,一組暫存器和棧),但是它可與同屬一個程式的其他的執行緒共享程式所擁有的全部資源。一個執行緒可以建立和撤銷另一個執行緒;同一個程式中的多個執行緒之間可以併發執行。
如果你的程式碼所在的程式中有多個執行緒在同時執行,而這些執行緒可能會同時執行這段程式碼。如果每次執行結果和單執行緒執行的結果是一樣的,而且其他的變數的值也和預期的是一樣的,就是執行緒安全的。
或者說:一個類或者程式所提供的介面對於執行緒來說是原子操作或者多個執行緒之間的切換不會導致該介面的執行結果存在二義性,也就是說我們不用考慮同步的問題。
執行緒安全問題都是由全域性變數及靜態變數引起的。
若每個執行緒中對全域性變數、靜態變數只有讀操作,而無寫操作,一般來說,這個全域性變數是執行緒安全的;若有多個執行緒同時執行寫操作,一般都需要考慮執行緒同步,否則就可能影響執行緒安全。
3. c與c++分別是怎樣動態分配和釋放記憶體的,有什麼區別?
答案:
c語言提供記憶體動態分配的函式有:malloc、calloc、realloc,在使用這些函式時必須包含其標頭檔案,分別為:<malloc.h>、<stdlib.h>、<alloc.h>
1) malloc 函式: void *malloc(unsigned int size)
在記憶體的動態分配區域中分配一個長度為size的連續空間,如果分配成功,則返回所分配記憶體空間的首地址,否則返回NULL,申請的記憶體不會進行初始化。
2)calloc 函式: void *calloc(unsigned int num, unsigned int size)
按照所給的資料個數和資料型別所佔位元組數,分配一個 num * size 連續的空間。
calloc申請記憶體空間後,會自動初始化記憶體空間為 0,但是malloc不會進行初始化,其記憶體空間儲存的是一些隨機資料。
3)realloc 函式: void *realloc(void *ptr, unsigned int size)
動態分配一個長度為size的記憶體空間,並把記憶體空間的首地址賦值給ptr,把ptr記憶體空間調整為size。
申請的記憶體空間不會進行初始化。
用c語言提供的這些動態記憶體分配函式後,對於這些已經申請的記憶體空間需要你自己進行釋放。如果你沒有釋放,並且你只是隨便執行一下自己的一個很小的程式,可能不會產生什麼很大的影響。但是,如果這樣一個大型程式或軟體執行中呼叫了這些語句,而沒有對申請的記憶體進行釋放,那麼後果是很嚴重的。
因此,在我們平時寫程式的過程中,應該養成好的變成習慣。在使用了這些函式動態分配了一段記憶體後,要記得對其進行釋放。
釋放的函式為free函式:
free函式原型為:void free(void *ptr)
作用:釋放由上面3種函式所申請的記憶體空間。
引數:ptr:指向需要釋放的記憶體空間的首地址。
在C++中,記憶體分成5個區,他們分別是堆、棧、自由儲存區、全域性/靜態儲存區和常量儲存區。
申請和釋放堆中分配的儲存空間,分別使用new 和 delete 的兩個運算子來完成:
指標變數名 = new 型別名(初始化式);
delete 指標名;
例如:
int *pi = new int(0)
相關文章
- 百度實習生筆試題求教筆試
- 騰訊PHP實習生筆試題目及答案解析PHP筆試
- 2017騰訊Web前端實習生招聘筆試題總結Web前端筆試
- 找工作學習筆記2------阿里巴巴實習生筆試題(含答案)筆記阿里筆試
- 2014.03.16 網易遊戲TTT計劃實習生筆試題遊戲筆試
- 落魄實習生的iOS位元組百度面經iOS
- 百度招聘技術實習生(2014.03)
- 常見Java問題及筆試題(十七)——阿里2017實習生研發題Java筆試阿里
- 阿里巴巴集團2013實習生招聘技術類筆試卷(B)阿里筆試
- .net 筆試面試總結(1)筆試面試
- C語言50題之百度筆試題C語言筆試
- 百度筆試題:找最小的不重複數筆試
- 如何拿到阿里巴巴,百度,騰訊的前端實習生offer?阿里前端
- 各大IT公司2012校園招聘筆試面試整理筆試面試
- 有自驅力的測試開發實習生
- 百度測試1,陣列單詞首位相同測試(php)陣列PHP
- 百度筆試2016,罪犯轉移(php)筆試PHP
- 百度2015校招機器學習筆試題機器學習筆試
- 百度筆試題:繩子最多覆蓋多少個點筆試
- 百度:2012Q1國內瀏覽器市場分析報告瀏覽器
- kafka學習筆記1:測試環境搭建Kafka筆記
- 最長迴文子串(百度筆試題和hdu 3068)筆試
- 百度2011.10.16校園招聘會筆試題筆試
- AI筆試面試題庫-Python題目解析1AI筆試面試題Python
- 百度2013校園招聘筆試題[軟體研發]及答案筆試
- 面試總結-百度(1)面試
- 計算機視覺(CV)最新筆試常見題「1」計算機視覺筆試
- MogDB/openGauss 壞塊測試-對啟動的影響-測試筆記1筆記
- java實習生學習心得Java
- 積夢智慧招實習生
- 百度統計:2012年Q1中國作業系統市場分析報告作業系統
- 百度資料中心:2012年Q1化妝品行業搜尋概覽及趨勢行業
- 百度:2012年4月百度移動平臺手遊已超13萬款
- 嘗試1
- 測試1
- 百度文心大模型API測試大模型API
- 前端實習生,快到碗裡來~前端
- 百度實習生,以修仙者的角度聊聊怎麼學MySQL,不來看看你的修為如何嗎?MySql