日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

2012年面试题集

發(fā)布時(shí)間:2025/7/14 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 2012年面试题集 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

2012年5月份百度實(shí)習(xí)生招聘筆試題

1、C和C++動(dòng)態(tài)內(nèi)存分配與釋放的區(qū)別?


?

5月6號(hào)去百度暑期實(shí)習(xí)招聘現(xiàn)場(chǎng)打了滿(mǎn)滿(mǎn)一瓶醬油,盡管進(jìn)行了網(wǎng)申,但是沒(méi)有收到百度的筆試通知,只好和幾名同時(shí)沒(méi)有收到通知的好友一同去復(fù)旦霸筆 了,復(fù)旦五角場(chǎng)校區(qū)算是一個(gè)故地,因?yàn)橹膀v訊實(shí)習(xí)招聘筆試也是在這里進(jìn)行的,幸運(yùn)的是騰訊出的考題都比較基礎(chǔ),有幸通過(guò)了筆試篩選進(jìn)入了一輪面試,本人 水平有限也就這能止步一輪面了,已經(jīng)很高興了,并不奢望收到騰訊或百度的橄欖枝,只是希望在參加這樣的筆試面試的過(guò)程中不斷查漏補(bǔ)缺,增加經(jīng)驗(yàn),不斷提高 自己,希望正式找工作的時(shí)候能夠滿(mǎn)足名企的要求。

言歸正傳,回到百度筆試題目上面,百度筆試題目明顯和騰訊有著截然不同的風(fēng)格,騰訊比較注重基礎(chǔ)能力,而百度更注重解決實(shí)際問(wèn)題的能力,只給出六道 大題,基本上是與實(shí)際問(wèn)題相結(jié)合的,很重視應(yīng)試人對(duì)程序算法、數(shù)據(jù)結(jié)構(gòu)的理解,這里不談那些發(fā)散性的問(wèn)題,這里只談?wù)摶A(chǔ)問(wèn)題,因?yàn)槲矣X(jué)得一切偉大的建筑 都是基于牢固基石的,掌握好基礎(chǔ)才能掌握更高深的技術(shù)。

其中一道很基礎(chǔ)的問(wèn)題是問(wèn)C和C++在動(dòng)態(tài)內(nèi)存分配,釋放方面的區(qū)別。作為一個(gè)勵(lì)志成為C和C++軟件開(kāi)發(fā)人員,居然連這個(gè)問(wèn)題都解答的含糊不清,深感慚愧,這才認(rèn)真總結(jié)一番。

一、先來(lái)談?wù)勗贑語(yǔ)言下,動(dòng)態(tài)內(nèi)存分配和釋放的特點(diǎn)。

動(dòng)態(tài)分配內(nèi)存的定義是這樣的,指在程序運(yùn)行過(guò)程中,要申請(qǐng)內(nèi)存,系統(tǒng)會(huì)根據(jù)程序的實(shí)際情況來(lái)分配,分配空間的大小是由程序的需求來(lái)決定的。在C語(yǔ)言 下面,舉個(gè)例子,定義一個(gè)指針,int *p;此時(shí)指針i是一個(gè)野指針,是一個(gè)指向不確定位置的指針,對(duì)它進(jìn)行操作是很危險(xiǎn)的,此時(shí)我們需要?jiǎng)討B(tài)分配內(nèi)存空間,讓i指向它。而有一種形式是這樣 的,int *p=&b;這并非是一種動(dòng)態(tài)內(nèi)存分配方式,而是一種指針的初始化,把變量b的首地址給了指針p。在C語(yǔ)言下究竟如何實(shí)現(xiàn)動(dòng)態(tài)內(nèi)存分配的呢?這里 提供了幾個(gè)函數(shù)來(lái)實(shí)現(xiàn),分別是malloc(),calloc(),realloc(),而釋放內(nèi)存的函數(shù)為free(),分別探討他們的異同。

1.malloc函數(shù)

  函數(shù)原型為void *malloc(unsigned int size);在內(nèi)存的動(dòng)態(tài)存儲(chǔ)區(qū)中分配一塊長(zhǎng)度為"size" 字節(jié)的連續(xù)區(qū)域。函數(shù)的返回值為該區(qū)域的首地址。 “類(lèi)型說(shuō)明符”表示把該區(qū)域用于何種數(shù)據(jù)類(lèi)型。(類(lèi)型說(shuō)明符*)表示把返回值強(qiáng)制轉(zhuǎn)換為該類(lèi)型指針?!皊ize”是一個(gè)無(wú)符號(hào)數(shù)。例如: pc=(char *) malloc (100); 表示分配100個(gè)字節(jié)的內(nèi)存空間,并強(qiáng)制轉(zhuǎn)換為字符數(shù)組類(lèi)型,函數(shù)的返回值為指向該字符數(shù)組的指針,把該指針賦予指針變量pc。若size超出可用空間, 則返回空指針值NULL。

2.calloc 函數(shù)

函數(shù)原型為void *calloc(unsigned int num, unsigned int size)

  按所給數(shù)據(jù)個(gè)數(shù)和每個(gè)數(shù)據(jù)所占字節(jié)數(shù)開(kāi)辟存儲(chǔ)空間。其中num為數(shù)據(jù)個(gè)數(shù),size為每個(gè)數(shù)據(jù)所占字節(jié)數(shù),故開(kāi)辟的總字節(jié)數(shù)為 num*size。函數(shù)返回該存儲(chǔ)區(qū)的起始地址。calloc函數(shù)與malloc 函數(shù)的區(qū)別僅在于一次可以分配n塊區(qū)域。例如: ps=(struct stu*) calloc(2,sizeof (struct stu)); 其中的sizeof(struct stu)是求stu的結(jié)構(gòu)長(zhǎng)度。因此該語(yǔ)句的意思是:按stu的長(zhǎng)度分配2塊連續(xù)區(qū)域,強(qiáng)制轉(zhuǎn)換為stu類(lèi)型,并把其首地址賦予指針變量ps。

3. realloc函數(shù):

  函數(shù)原型為void *realloc(void *ptr, unsigned int size)

重新定義所開(kāi)辟內(nèi)存空間的大小。其中ptr所指的內(nèi)存空間是用前述函數(shù)已開(kāi)辟的,size為新的空間大小,其值可比原來(lái)大或小。函數(shù)返回新存儲(chǔ)區(qū)的 起始地址(該地址可能與以前的地址不同)。例如p1=(float *)realloc(p1,16);將原先開(kāi)辟的8個(gè)字節(jié)調(diào)整為16個(gè)字節(jié)。

**動(dòng)態(tài)申請(qǐng)的內(nèi)存空間要進(jìn)行手動(dòng)用free()函數(shù)釋放

4. free函數(shù):

  函數(shù)原型為void free(void *ptr)

  將以前開(kāi)辟的某內(nèi)存空間釋放。函數(shù)原型為 void free(void *ptr)其中ptr為存放待釋放空間起始地址的指針變量,函數(shù)無(wú)返回值。應(yīng)注意:ptr所指向的空間必須是前述函數(shù)所開(kāi)辟的。例如free((void *)p1);將上例開(kāi)辟的16個(gè)字節(jié)釋放。可簡(jiǎn)寫(xiě)為free(p1);由系統(tǒng)自動(dòng)進(jìn)行類(lèi)型轉(zhuǎn)換。

二、C++語(yǔ)言動(dòng)態(tài)內(nèi)存分配

C++語(yǔ)言中用new和delete來(lái)動(dòng)態(tài)申請(qǐng)和釋放內(nèi)存。

1. 申請(qǐng)單個(gè)對(duì)象

  int *p;

  p=new int;或者 p=new int(value);

  2. 動(dòng)態(tài)申請(qǐng)數(shù)組

  int *p;

  p=new int [100];

  這樣可以申請(qǐng)長(zhǎng)度為100的數(shù)組,但是不能進(jìn)行初始化。

 3. delete

  int *p, *q;

  p=new int;

  q=new int[10];

  delete p;

  delete [ ]q;

分享來(lái)源:http://www.cnblogs.com/zhj202190/archive/2011/05/11/2043620.html

http://apps.hi.baidu.com/share/detail/57234849


2012年10月18號(hào)百度PC客戶(hù)端崗位一面電話面試面試題:

前奏:因?yàn)榘⒗锇桶偷拿?試不能由大連調(diào)北京,我就風(fēng)塵撲撲的從北京回到大連去面阿里巴巴,盡管知道在就業(yè)形勢(shì)很不好的今年進(jìn)阿里巴巴的機(jī)會(huì)很渺茫,但是還是想試一把,所以就回去 了,正好在回去的時(shí)候收到的百度的面試,由于不在北京,就電話面了,其實(shí)在會(huì)大連之前筆試百度過(guò)之后,就知道肯定會(huì)有面試

2012年10月22號(hào)百度客戶(hù)端二面面試題:

1、select函數(shù)的介紹

(1)一些小的知識(shí)點(diǎn)比如 select() 函數(shù)中第一個(gè)參數(shù) int maxfdp 為什么要是最大的文件描述符的值 +1 ,當(dāng)時(shí)臨陣磨槍的看了下select函數(shù),細(xì)致的知識(shí)點(diǎn)答不上來(lái),參考http://blog.csdn.net/leo115/article/details/8097143

2、C++中一個(gè)類(lèi)的大小如何確定?

這個(gè)以前沒(méi)看過(guò),就是分析了一下,結(jié)果露出了自己對(duì)虛函數(shù)理解的嚴(yán)重錯(cuò)誤的馬腳,接下來(lái)分析一下C++中類(lèi)的大小:

(1)在一個(gè)C++類(lèi)中,如果什么都沒(méi)有,則這個(gè)類(lèi)只占有1個(gè)字節(jié);說(shuō)明:如果一個(gè)類(lèi)中沒(méi)有任何數(shù)據(jù)成員,則這個(gè)類(lèi)實(shí)際上是不占用存儲(chǔ)空間的,size = 0;但是0不好在內(nèi)存中定義一個(gè)地址,所以我們就人為的規(guī)定了大小為0的一個(gè)對(duì)象所占的存儲(chǔ)空間的大小為1。

(2)一旦這個(gè)類(lèi)中有其他的一些數(shù)據(jù)成員,比如說(shuō)一個(gè) int data ;那么這個(gè)類(lèi)的大小就為 4 個(gè)字節(jié),而不是5個(gè)字節(jié),上述的一個(gè)字節(jié)不計(jì)算在內(nèi);

(3)普通的成員函數(shù)是不占用空間的,所以一個(gè)只用普通函數(shù)的類(lèi)的大小只占有 1 個(gè)字節(jié)。說(shuō)明:普通成員函數(shù)是類(lèi)的所有對(duì)象所通用的方法,不算做對(duì)象的成員,所以不能算在對(duì)象的存儲(chǔ)空間內(nèi)。

(4)對(duì)于有虛函數(shù)的類(lèi),因?yàn)橐嬖谝粋€(gè)虛函數(shù)表,需要4個(gè)字節(jié),(是一個(gè)數(shù)組指針vptr,數(shù)組中存儲(chǔ)的是虛函數(shù)的函數(shù)指針的地址),這個(gè)指向虛函數(shù)表的指針占用4個(gè)字節(jié)的存儲(chǔ)空間。

(5)注意將數(shù)據(jù)對(duì)齊考慮進(jìn)去,如一個(gè)類(lèi)中含有 虛函數(shù) 和 ?一個(gè)char型數(shù)據(jù),sizeof(class) = 8 ;默認(rèn)對(duì)齊是 4字節(jié)對(duì)齊。

理解參考這個(gè):http://blog.163.com/xping_lsr/blog/static/19654034520119804131721/

3、聊了一下虛函數(shù)機(jī)制,虛函數(shù)表這一塊理解的粗枝大葉,答得很狼狽:

(1)竟然理解成了 虛函數(shù)表中可以存儲(chǔ)普通函數(shù)的函數(shù)指針地址,參考http://blog.csdn.net/leo115/article/details/8035078

(2)這個(gè)虛函數(shù)表是所有的類(lèi)的實(shí)例都共用這個(gè)虛函數(shù)表呢?還是每個(gè)實(shí)例都會(huì)有一個(gè)虛函數(shù)表的copy版本?

4、Linux下的一個(gè)文件 /proc 這個(gè)目錄是存放什么的?如何查看當(dāng)前跑的進(jìn)程的最大數(shù)量?如果查看當(dāng)前所打開(kāi)的文件的數(shù)量?如何查看當(dāng)前所建立的連接?統(tǒng)計(jì)當(dāng)前建立的連接的數(shù)量?

我在Linux環(huán)境下周游了一年多的時(shí)間,感覺(jué)對(duì)這個(gè)平臺(tái)還算很熟悉吧,但是對(duì)于面試 官提出的幾個(gè)命令,表示都沒(méi)有接觸過(guò),再者就是忘了, 再者就是完全沒(méi)用到,對(duì)于第一個(gè)命令,這個(gè)目錄是是linux下的一個(gè)偽文件系統(tǒng),里邊存儲(chǔ)一些與 進(jìn)程相關(guān)的,系統(tǒng)相關(guān)的,以及系統(tǒng)子系統(tǒng)部分,可以直接通過(guò)cat / echo 直接輸出一些用戶(hù)需要的內(nèi)核信息。平時(shí)在做多線程編程的時(shí)候更多的調(diào)用繼承開(kāi)發(fā)環(huán)境自帶的庫(kù)函數(shù),可能是自己所操作的線程比較少 或者是 平時(shí)做的項(xiàng)目的深度確實(shí)沒(méi)達(dá)到,都是一些淺層面的操作,導(dǎo)致自己根本沒(méi)有掌握這么多知識(shí),只的表示不會(huì)。

5、進(jìn)程和線程之間的區(qū)別?什么是“線程安全”?

簡(jiǎn)單的介紹:進(jìn)程是動(dòng)態(tài)運(yùn)行的程序的實(shí)例,是操作系統(tǒng)分配資源的基本單位,每一個(gè)進(jìn)程都是一個(gè)實(shí)體,都有自己的地址空間,(包括:文本區(qū)域,數(shù)據(jù)區(qū)域,堆棧),進(jìn)程是運(yùn)行中的程序。線程是 進(jìn)程中某單一順序的控制流,也被稱(chēng)為輕量級(jí)進(jìn)程,是運(yùn)行中的程序的調(diào)度的基本單位,說(shuō)明:單一順序的控制流,每個(gè)獨(dú)立的線程都有一個(gè)程序的入口、運(yùn)行隊(duì)列和程序的出口。但是線程不能獨(dú)立的執(zhí)行,必須存在應(yīng)用程序中,由應(yīng)用程序提供多個(gè)線程執(zhí)行控制。

(0)一個(gè)程序至少擁有一個(gè)進(jìn)程(通過(guò)fork創(chuàng)建進(jìn)程),一個(gè)進(jìn)程至少擁有一個(gè)線程(必有一個(gè)主線程)。

(1) 從調(diào)度方面考慮,線程是作為調(diào)度和分配的基本單位,進(jìn)程是作為擁有資源的基本單位,線程是CPU和內(nèi)存的真正的使用者

(2)并發(fā)性方面考慮:不僅相同進(jìn)程中的線程可以并發(fā),不同進(jìn)程中線程之間也是可以并發(fā)的;同時(shí)進(jìn)程與進(jìn)程之間也是可以并發(fā)的

(3)擁有資源:進(jìn)程擁有自己獨(dú)立的地址空間,而線程不擁有系統(tǒng)資源,但是可以訪問(wèn)所在的進(jìn)程的資源。

(4)系統(tǒng)開(kāi)銷(xiāo)方面:在創(chuàng)建和撤銷(xiāo)進(jìn)程時(shí),由于系統(tǒng)都要為之分配和回收資源,導(dǎo)致系統(tǒng)的開(kāi)銷(xiāo)明顯大于創(chuàng)建和撤銷(xiāo)線程時(shí)的開(kāi)銷(xiāo)。

接著解釋第二個(gè)問(wèn)題 什么是“線程安全”?

(1)如果程序代碼所在的進(jìn)程中有多個(gè)線程在同時(shí)運(yùn)行,這些線程可能會(huì)同時(shí)運(yùn)行這段代碼,如果每次運(yùn)行的結(jié)果和單線程運(yùn)行的結(jié)果是一樣的,而且其他的變量的值也和預(yù)期的一樣,就是線程安全的。

(2)或者說(shuō):一個(gè)類(lèi)或者程序所提供的接口對(duì)于線程來(lái)說(shuō)是原子操作或者多個(gè)線程之間的切換不會(huì)導(dǎo)致該接口執(zhí)行的結(jié)果產(chǎn)生二義性,也就是說(shuō)我們不用考慮同步問(wèn)題,這個(gè)時(shí)候線程是安全的。

(3)線程安全問(wèn)題往往是由全局變量及靜態(tài)變量引起的。

(4)一般來(lái)說(shuō)若每個(gè)線程中對(duì)全局變量、靜態(tài)變量只有讀操作,而無(wú)寫(xiě)操作,一般來(lái)說(shuō),這個(gè)全局變量的線程是安全的;若有多個(gè)線程同時(shí)執(zhí)行寫(xiě)操作,一般要考慮線程同步問(wèn)題,線程同步的解決辦法一般是:臨界區(qū)、信號(hào)量、互斥鎖等


6、最后問(wèn)了一道算法題:

有兩個(gè)字符串?dāng)?shù)組: string src[] ?和 string des[] ,每個(gè)字符串?dāng)?shù)組的長(zhǎng)度都是10W跳左右,每個(gè)字符的 size<1KB ,設(shè)計(jì)一個(gè)算法 查找 兩個(gè)字符串?dāng)?shù)組中想交的字符串。

解析方法:

分析 10W = 2^20 ?1KB*10W*2 = 2GB ,當(dāng)今的內(nèi)存中正好可以容下這么多數(shù)據(jù),算法設(shè)計(jì)

(1)遍歷字符串?dāng)?shù)組src,構(gòu)造一個(gè) tire tree(字典數(shù)),然后遍歷字符串?dāng)?shù)組des遇到已經(jīng)存儲(chǔ)過(guò)的相同的結(jié)構(gòu)則輸出。

(2)設(shè)計(jì)一個(gè)hash,關(guān)鍵是哈希算法的設(shè)計(jì),因?yàn)檫@是一個(gè)字符串?dāng)?shù)組,每個(gè)字符都 是有范圍的(0~25),我們可以字符串?dāng)?shù)組中的每個(gè)字符串看成一個(gè)26進(jìn)制的數(shù),將其轉(zhuǎn)化為10進(jìn)制,這樣就可以得到一個(gè)唯一的key值,對(duì)于字符串太 長(zhǎng)的情況下,我們可以將這個(gè)字符串對(duì)10萬(wàn)取模,對(duì)10萬(wàn)取模后,我們并不能保證這個(gè)key唯一,這樣我們就需要key值沖突處理,參考以下四種處理方 式:http://blog.csdn.net/leo115/article/details/8052353


11月3號(hào)青牛軟件面試

青牛軟件的一面就是聊項(xiàng)目,沒(méi)有做題,然后遇到下面的一個(gè)問(wèn)題:

1、操作系統(tǒng)中 什么是臨界區(qū)?什么是臨界資源? 舉例說(shuō)明!

答:操作系統(tǒng)中對(duì)臨界區(qū)的定義是這樣的:每個(gè)進(jìn)程中訪問(wèn)臨界資源的那段程序稱(chēng)為臨界區(qū)。臨界資源的定義是:臨界資源可以由多個(gè)進(jìn)程所共享,但是一次僅能由一個(gè)進(jìn)程訪問(wèn)的共享資源。 ?臨界區(qū)要求每次只準(zhǔn)許一個(gè)進(jìn)程進(jìn)入臨界區(qū),占時(shí)擁有臨界資源;

臨界資源的舉例:打印機(jī),磁盤(pán)等, 一個(gè)全局變量可以允許多個(gè)進(jìn)程訪問(wèn),所以全局變量不是臨界資源。

?

轉(zhuǎn)自:http://blog.csdn.net/leo115/article/details/8111926

轉(zhuǎn)載于:https://www.cnblogs.com/heyonggang/archive/2012/12/13/2817095.html

總結(jié)

以上是生活随笔為你收集整理的2012年面试题集的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。