2020年度西山居筆試題_第1頁(yè)
2020年度西山居筆試題_第2頁(yè)
2020年度西山居筆試題_第3頁(yè)
已閱讀5頁(yè),還剩12頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、西山居筆試題西山居筆試題1、char szTest= " 12345tnOabcdO ” ,求 strle nszText = 7, sizeofszTest = 14.strlen是函數(shù),運(yùn)行時(shí)才能確定,因此它只計(jì)算 了12345tn而sizeof是操作符,它包括所有 的字符 12345tn0abcd0,還要加一個(gè)結(jié)束字符,因此為 13=1 =142、Intan Test510; i ntnl=&an Test4-&an Test0,n2=&an Test3l-&an Testl3;貝 Unl=4, n2=18;注意計(jì)算第一個(gè)的時(shí)候能夠想一下指向數(shù)組

2、的指針,當(dāng)指針+1的時(shí)候?qū)嶋H上是加了一個(gè)數(shù)組長(zhǎng)度,這個(gè)題反過來(lái)想比較好做3、Char szNum= "" , int n=* ( short* )(szNum+4) - * (short* ) (szNum);貝! J n=1028;這里(short*) (szNum)是指向12為內(nèi)存單元 為00000001 0000 0010即兩個(gè)內(nèi)存單元存儲(chǔ)一個(gè)數(shù),(short*) (szNum+4)是指向 56,內(nèi)存 中存放為 00000101 0000 0110即兩個(gè)內(nèi)存單元 存儲(chǔ)一個(gè)數(shù)4、Stl中二分查找法的函數(shù)名,穩(wěn)定排序的函 數(shù)名,部分排序的函數(shù)名各是什么5、Stl中的map

3、常見數(shù)據(jù)結(jié)構(gòu)中的紅黑樹實(shí)現(xiàn)。6、比較兩數(shù)大小,返回較大值Int cmp(i nt x,i nt y)(Retur na>b?a:b;7、#include<iostream>Int cc(int i)For(;i<4;)Std: cout? cc(+i);Retur n i;Int mai n()Cc(l);Retur n 0;請(qǐng)輸出結(jié)果:4444444&要增加一個(gè)類到某種類型的隱式轉(zhuǎn)換可經(jīng)過重載賦值操作符實(shí)現(xiàn)9、C+64位編譯環(huán)境下,sizeof(i nt)=4,sizeofi nt *=8自己對(duì)于64位平臺(tái)上各種數(shù)據(jù)類型分別占用多 少 字節(jié),存在一些疑問,因此

4、用 C/C+中的sizeof分 別在這兩種平臺(tái)上進(jìn)行了測(cè)試。運(yùn)行結(jié)果如下:(分別用藍(lán)色和紅色標(biāo)記了兩者的差異)機(jī)器平臺(tái):X86_64處理器操作系統(tǒng):編譯0626Size1Size1ofcharis:ofun sig nedcharis:Size of sig ned char is:int1is:Sizeof4Sizeofshortis:Sizeoflong i8s:Sizeoflonginti s:8Sizeofsig nedinti s:4Sizeofint i4un sig neds:Size of un sig ned long int is:8Sizeoflonglongint is

5、:8Size of un sig ned long long is:8Size of float is:4Size of double is:8Size of long double is:16Size of (void *) is:8Size of (char *) is:8Size of (int *) is:8Size of (long *) is:8Size of (long long *) is: 8Size of (float *) is:8Size of (double * is:機(jī)器平臺(tái):X86_32處理器操作系統(tǒng):Win dows XP SP2編譯器:VS自帶的C+編譯器Si

6、zeof1Size of un sig ned char is:Size of sig ned char is:Size of int is:Size of short is:Size of long is:Size of long int is:Size of sig ned int is:Size of un sig ned int is:Size of un sig ned long int is:Size of long long int is:Size of un sig ned long long is:Size of float is:Size of double is:char

7、is:1142444448848Size of long double is:Size of (void *) is:4Size of (char *) is:4Size of (int *) is:4Size of (long *) is:4Size of (long long *) is: 4Size of (float *) is:4Size of (double *) is:4其實(shí)就是所有的指針擴(kuò)充為 8位,Io ng變?yōu)?位, long doulbe 變?yōu)?16 位,注意 double 是沒 有變化的10、列舉 c+0x 的任意三個(gè)新特性11、unsigned int strilen

8、(const charApstr)_asmMov eax,pstrCmp byte ptreax,0Jz zreturnZloop: Cmp byte prteax,0 JnzzloopZreturn:Sub eax,pstr 二、診斷題。若錯(cuò)誤,請(qǐng)寫出錯(cuò)在哪里1、 全局變量與靜態(tài)變量在內(nèi)在中的存儲(chǔ)位置是相同的。正確。lo 全局變量中 static 全局變量和普通全局變量 的區(qū) 別:相同點(diǎn): 1) 共存于同一塊內(nèi)存(靜 態(tài)存儲(chǔ)區(qū))中;2)生命期相同, 都是到整個(gè)程序的生命期;不同點(diǎn): 1) 前者是內(nèi)部連接,后者 是外部連接;2)作用域不同:前者的作用域是局部于它所在的文件的,也就是說(shuō)在當(dāng)前程序

9、中其它文件中是不能 使用它的,如果想在想其它文件中聲明它為 extern 的來(lái)訪問它,編譯器就會(huì)報(bào)錯(cuò),當(dāng)然在其 它文件 中即使有同名的變量也不會(huì)有名字沖突 的問題;后者的作用域是整個(gè)程序中的所有 文件,能夠在其它文件中聲明它為 extern 來(lái)訪 問 它,當(dāng)然在整個(gè)程序中不論是否是同一個(gè)文件 都 不能有同名的普通全局變量,否則會(huì)有名字沖突,(如果在一個(gè)函數(shù)體內(nèi)有與全局變量同名的 局部變量,那么局部變量會(huì)屏蔽全局變量,除非 使用作用域運(yùn)算符 : :);2o 局部變量中的 static 變量和普通變更 的 區(qū)別:相同點(diǎn):作用域相同,都是局部于 當(dāng)前所在的函數(shù)體內(nèi)。不同點(diǎn): 1) 前者是內(nèi)部連接,后

10、者 沒有連接,因?yàn)槠胀ň植孔兞渴俏挥诙褩V?,連 接器不知道它們;2)存儲(chǔ)區(qū)域不同:前 者存放于靜態(tài)存儲(chǔ)區(qū),后者存放于棧中;3)生命期不同:前者 是整個(gè)程序的生命期,后者是所在函數(shù)的生命期 (即隨它所在的函數(shù)調(diào)用的結(jié)束而結(jié)束;4)初始化:前者只在函數(shù)第一 次被調(diào)用時(shí)初始化,當(dāng)次調(diào)用時(shí)的變量值會(huì)保存 到下次調(diào)用時(shí)使用,也就只初始化一次;后者則 是在每次調(diào)用函數(shù)時(shí)都要重新創(chuàng)立它的存儲(chǔ)空 間,重新初始化一次,即調(diào)用一次函數(shù)初始化一 次。2、Windows 操作系統(tǒng)中進(jìn)程是基本執(zhí)行單位。 答:錯(cuò),在 Windows 中,線程是基本執(zhí)行單位 , 進(jìn)程是一個(gè)容納線程的容器。進(jìn)程是線程的資源 分配單元3、在棧

11、上分配內(nèi)存和在堆上分配內(nèi)存,效率 是一樣的 答:堆的效率要低,堆是應(yīng)用程序在運(yùn)行的時(shí)候 請(qǐng)求操作系統(tǒng)分配給自己內(nèi)存,由于從操作系統(tǒng) 管理的內(nèi)存分配,因此在分配和銷毀時(shí)都要占用 時(shí)間,因此用堆的效率非常低 . 可是堆的優(yōu)點(diǎn)在 于,編譯器不必知道要從堆里分配多少存儲(chǔ)空 不必知道存儲(chǔ)的數(shù)據(jù)要在堆里停留多長(zhǎng)的 因此,用堆保存數(shù)據(jù)時(shí)會(huì)得到更大的靈活 4、 Sizeof 屬于 C+ 內(nèi)置函數(shù)間,也 時(shí)間, 性。答:錯(cuò)誤 sizeof ()是一個(gè)操作符,不是函數(shù), 在第一題中 sizeof 的值是 14,因?yàn)樗皇沁\(yùn) 定因此 行時(shí)確5、 構(gòu)造函數(shù)只能定義為 public, 不能為protected 或 pr

12、ivate. 答:錯(cuò)誤,如果你不想讓外面的用戶直接構(gòu)造個(gè)類(假設(shè)這個(gè)類的名字為A)的對(duì)象,而希望用戶只能構(gòu)造這個(gè)類 A 的 子類,那你就能夠 將類 A 的構(gòu)造函數(shù) / 析構(gòu)函數(shù)聲明為 protected, 而 將類 A 的子類的構(gòu)造函數(shù) / 析構(gòu)函數(shù)聲明為 public o如果將構(gòu)造函數(shù) / 析構(gòu)函數(shù)聲明為 private, 那只 能 這個(gè)類的“內(nèi)部”的函數(shù)才能構(gòu)造這個(gè)類的對(duì)象了。這里所說(shuō)的“內(nèi)部”是指類的成員函數(shù)。因?yàn)樵谕獠坎荒芏x對(duì)象,因此不能經(jīng)過對(duì)象調(diào)用成員函數(shù),如果想要調(diào)用成員函數(shù)的話,能夠?qū)⒊蓡T函數(shù)定義為靜態(tài),然后經(jīng)過類的:操作符調(diào)用, A& ra = A:Instance(

13、);ra.Print(); 即可6、C的qsort與C+的std:sort均采用快速 排 序,但 C效率高于 C+,故qsort的效率高 答: 錯(cuò),與編譯系統(tǒng)有關(guān)7、用new 份配的內(nèi)存如果用delete釋放,結(jié)果是一定會(huì)內(nèi)存泄露。答:錯(cuò)誤,在林銳的C+高質(zhì)量編程中提到 如果用new創(chuàng)立對(duì)象數(shù)組,那么只能使用對(duì)象的無(wú)參數(shù)構(gòu)造函數(shù)。例如Obj objects = new Obj100; / 創(chuàng)立 100 個(gè)動(dòng) 態(tài) 對(duì)象不能寫成 Obj 八objects = new Obj100(l);倉(cāng)J立 1 00個(gè)動(dòng)態(tài)對(duì)象的同時(shí)賦初值 1在用 delete 釋放對(duì)象數(shù)組時(shí),留意不要 丟 了符號(hào) '

14、。例如delete objects; / 正確的用法delete objects; / 錯(cuò)誤的用法后者相當(dāng)于 delete objects0, 漏掉了另 外99個(gè)對(duì)象。而如果我們只是 int *p = new intl;則用 deledte 刪除的時(shí)候就能夠釋放 p 指向的內(nèi) 存,不會(huì)造成內(nèi)存泄露8、全局對(duì)象及靜態(tài)對(duì)象均在main 函數(shù)執(zhí)行之 前構(gòu)造。對(duì)三、 1 > unresolved extrenal Symbol 是什么錯(cuò)誤? 原因是什么?不確定的外部“符號(hào)”,產(chǎn)生這個(gè)錯(cuò)誤的原因 :如果連接程序不能在所有的庫(kù)和目標(biāo)文件內(nèi)找到所引用的函數(shù)、變量或標(biāo)簽,將產(chǎn)生此錯(cuò)誤消 息。一般來(lái)說(shuō),發(fā)

15、生錯(cuò)誤的原因有兩個(gè):一是所引用的函數(shù)、變量不存在、拼寫不正確或者使用 錯(cuò)誤;其次可能使用了不同版本的連接庫(kù)。2、線程死鎖發(fā)生的原因?要防止死鎖在 多線程編程中我們要注意什么?3、什么叫哈希算法?有什么應(yīng)用?為 進(jìn) 據(jù) 空4、列 舉 Windows 中進(jìn)程注入的方式。 了對(duì)內(nèi)存中的某個(gè)進(jìn)程進(jìn)行操作,而且獲得該 程地址空間里的數(shù)據(jù),或者修改進(jìn)程的私有數(shù) 結(jié)構(gòu),必須將自己的代碼放在目標(biāo)進(jìn)程的地址 間里運(yùn)行,這時(shí)就避免不了使用進(jìn)程注入方法 了。進(jìn)程注入的方法分類如下:帶 DLL 的注入利用注冊(cè)表注入 利用 Windows Hooks 注入 利用遠(yuǎn)程線程注入 利用特洛伊 DLL 注入 不帶 DLL 的注

16、入直接將代碼寫入目標(biāo)進(jìn)程,并啟動(dòng)遠(yuǎn)程線程5、請(qǐng)從程序機(jī)制上解釋緩沖區(qū)溢出攻擊原理。當(dāng)一個(gè)超長(zhǎng)的數(shù)據(jù)進(jìn)入到緩沖區(qū)時(shí),超出部分就 會(huì)被寫入其它緩沖區(qū),其它緩沖區(qū)存放的可能是 數(shù)據(jù)、下一條指令的指針,或者是其它程序的輸 出內(nèi)容,這些內(nèi)容都被覆蓋或者破壞掉??梢娨?小部分?jǐn)?shù)據(jù)或者一套指令的溢出就可能導(dǎo)致一 個(gè) 程序或者 * 作系統(tǒng)崩潰。緩沖區(qū)溢出是當(dāng)前導(dǎo)致“黑客”型病毒橫行的主 要原因。從紅色代碼到 Slammer, 再到日前爆發(fā) 的 “沖擊波 " ,都是利用緩沖區(qū)溢出漏洞的典型。 緩 沖區(qū)溢出是一個(gè)編程問題,防止利用緩沖區(qū)溢 出 發(fā)起的攻擊,關(guān)鍵在于程序開發(fā)者在開發(fā)程序 時(shí) 仔細(xì)檢查溢出情

17、況,不允許數(shù)據(jù)溢出緩沖區(qū)。 另 外,用戶需要經(jīng)常登錄 * 作系統(tǒng)和應(yīng)用程序提 供商 的網(wǎng)站,跟蹤公布的系統(tǒng)漏洞,及時(shí)下載補(bǔ) 丁程 序,彌補(bǔ)系統(tǒng)漏洞6、簡(jiǎn)述 copy-on-write 機(jī)制及應(yīng)用。 簡(jiǎn)單來(lái)說(shuō),在復(fù)制一個(gè)對(duì)象時(shí)并不是真的在內(nèi)存 中把原來(lái)對(duì)象的數(shù)據(jù)復(fù)制一份到另外一個(gè)地址, 而是在新對(duì)象的內(nèi)存映射表中指向同原對(duì)象相 同 的位置,而且把那塊內(nèi)存的 Copy-On-Write 位設(shè)為 lo 在對(duì)這個(gè)對(duì)象執(zhí)行讀操作的時(shí)候,內(nèi) 存數(shù)據(jù)沒 有變動(dòng),直接執(zhí)行就能夠。在寫的時(shí)候 , 才真正將 原始對(duì)象復(fù)制一份到新的地址,修改新 對(duì)象的內(nèi) 存映射表到這個(gè)新的位置,然后往這里 寫。 這個(gè)技術(shù)需要跟虛擬

18、內(nèi)存和分頁(yè)同時(shí)使用,其好 處是在復(fù)制對(duì)象的時(shí)候因?yàn)椴⒉皇钦娴膹?fù)制,而 只是建了一個(gè)“指針”,因而大大提高性能。但 這并不是一直成立的,前提是在復(fù)制新對(duì)象之 后,進(jìn)行的寫操作只是在一小部分的內(nèi)存分頁(yè) 上,大部分分頁(yè)不會(huì)用到或者只是讀取。不然會(huì) 產(chǎn)生大量的分頁(yè)錯(cuò)誤,得不償失。作用是提高內(nèi)存的使用率和共享率,在線程同 步,遲緩寫入等方面都有應(yīng)用7、解釋函數(shù)聲明中三個(gè) const 作用。Template<class T>void Fun(const T* const &p)const;四、編程題1、以下函數(shù)把傳入的兩個(gè)整數(shù)值存到一個(gè) Buffer 里,完成函數(shù)實(shí)現(xiàn)。Bool StroredDataToBuffer(int a,int b,char *pBuffer,unsigned int

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論