1.const在C/C++中的作用是什么?
創(chuàng)新互聯(lián)專注于企業(yè)營(yíng)銷型網(wǎng)站建設(shè)、網(wǎng)站重做改版、永州網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、H5網(wǎng)站設(shè)計(jì)、商城網(wǎng)站建設(shè)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為永州等各大城市提供網(wǎng)站開(kāi)發(fā)制作服務(wù)。2.malloc/free? new/delete 的區(qū)別是什么?
3.內(nèi)聯(lián)函數(shù)和宏定義不同
4.多態(tài)的實(shí)現(xiàn)
5.shell是用來(lái)干嘛的?
6.linux:給你一個(gè)名叫ABC的文件夾,如何對(duì)其進(jìn)行壓縮
7.linux:怎么查看當(dāng)前線程信息
8.翻轉(zhuǎn)鏈表
解答問(wèn)題:1.const在C/C++中的作用是什么?在C語(yǔ)言中被const修飾的值是不可以進(jìn)行改變的,因?yàn)閏onst修飾的變量會(huì)存放在常量區(qū),所以
在使用const變量之前必須先初始化。
如果const修飾的是指針,可以修飾指針指向的數(shù)據(jù)為const,或者指針本身為const,同時(shí)兩者也可以同時(shí)聲明。
在C++中,const修飾的類成員函數(shù)只能進(jìn)行只讀操作。在對(duì)函數(shù)聲明時(shí)使用const進(jìn)行聲明,可以防止函數(shù)內(nèi)部進(jìn)行修改。
對(duì)于類的成員函數(shù),有時(shí)候必須指定其返回值為const類型,以使得其返回值不為“左值”。
2.malloc/free? new/delete 的區(qū)別是什么?相同點(diǎn):
都是在堆上申請(qǐng)內(nèi)存,且需要用戶手動(dòng)釋放。
不同點(diǎn):
malloc/free是函數(shù)。申請(qǐng)的空間不會(huì)初始化,且需要手動(dòng)計(jì)算空間的大小并進(jìn)行傳遞,當(dāng)malloc返回的是void*需要進(jìn)行強(qiáng)制轉(zhuǎn)換。
內(nèi)存申請(qǐng)失敗是會(huì)返回NULL,需要進(jìn)行判定是否為空。申請(qǐng)自定義類型對(duì)象時(shí),malloc/free只會(huì)開(kāi)辟空間,不會(huì)調(diào)用構(gòu)造函數(shù)與析構(gòu)函數(shù)。
new/delete是操作符。?申請(qǐng)的空間會(huì)自動(dòng)初始化,不用計(jì)算空間大小,只需要在其后跟上空間的類型即可,new在內(nèi)存申請(qǐng)失敗時(shí)只需要進(jìn)行異常捕獲,而new在申請(qǐng)空間后會(huì)調(diào)用構(gòu)造函數(shù)完成對(duì)象的初始化,delete在釋放空間前會(huì)調(diào)用析構(gòu)函數(shù)完成空間中資源的清理。
3.內(nèi)聯(lián)函數(shù)和宏定義不同?內(nèi)聯(lián)函數(shù)(inline)在編譯后展開(kāi),直接被嵌入到目標(biāo)代碼中去,可以進(jìn)行諸如類型安全檢查、語(yǔ)句是否正確等編譯功能,不用擔(dān)心因括號(hào)產(chǎn)生的二義性問(wèn)題。inline函數(shù)一般用于比較小的,頻繁調(diào)用的函數(shù),這樣可以減少函數(shù)調(diào)用帶來(lái)的開(kāi)銷。
宏在預(yù)編譯時(shí)展開(kāi),只是一個(gè)簡(jiǎn)單的文本替換,不可以進(jìn)行諸如類型安全檢查、語(yǔ)句是否正確等編譯功能,需要注意因括號(hào)產(chǎn)生的二義性的問(wèn)題。
引入inline的意義:inline有點(diǎn)類似于宏定義,但是它和宏定義不同的是,宏定義只是簡(jiǎn)單的文本替換,是在預(yù)編譯階段進(jìn)行的。而inline的引入正是為了取消這種復(fù)雜的宏定義的。
4.多態(tài)的實(shí)現(xiàn)靜態(tài)多態(tài):通過(guò)函數(shù)重載實(shí)現(xiàn)。
動(dòng)態(tài)多態(tài):通過(guò)繼承重寫(xiě)基類的虛函數(shù)。?
5.shell是用來(lái)干嘛的?shell是操作系統(tǒng)的最外層,shell可以合并編程語(yǔ)言以控制進(jìn)程和文件,以及啟動(dòng)和控制其他程序。
簡(jiǎn)單來(lái)說(shuō):shell就是一個(gè)用戶跟操作系統(tǒng)之間交互的命令解釋器。
shell獨(dú)立于內(nèi)核,它是鏈接內(nèi)核和應(yīng)用程序的橋梁
6.linux:給你一個(gè)名叫ABC的文件夾,如何對(duì)其進(jìn)行壓縮?tar -zcvf ABC.file
tar -zcvf 打包壓縮后的文件名 要打包的文件 參數(shù)說(shuō)明:z:調(diào)用gzip壓縮命令進(jìn)行壓縮; c:打包文件; v:顯示運(yùn)行過(guò)程; f:指定文件名;
7.linux:怎么查看當(dāng)前線程信息其實(shí)linux沒(méi)有線程,都是用進(jìn)程模仿的
1. ps -ef f
用樹(shù)形顯示進(jìn)程和線程,比如說(shuō)我想找到proftp現(xiàn)在有多少個(gè)進(jìn)程/線程,可以用
$ ps -ef f | grep proftpd
nobody 23117 1 0 Dec23 ? S 0:00 proftpd:? (accepting? connections)?
jack 23121 23117 0 Dec23 ? S 7:57 \_ proftpd: jack - ftpsrv:? IDLE
jack 28944 23117 0 Dec23 ? S 4:56 \_ proftpd: jack - ftpsrv:? IDLE
這樣就可以看到proftpd這個(gè)進(jìn)程下面掛了兩個(gè)線程。
在Linux下面好像因?yàn)闆](méi)有真正的線程,是用進(jìn)程模擬的,有一個(gè)是輔助線程,所以真正程序開(kāi)的線程應(yīng)該只有一個(gè)。
2. pstree -c也可以達(dá)到相同的效果
$ pstree -c | grep proftpd
|-proftpd-+-proftpd
| `-proftpd
3. cat /proc/${pid}/status
可以查看大致的情況
4.? pstack
有些系統(tǒng)可以用這個(gè)東東,可以查看所有線程的堆棧
如何查看進(jìn)程中各線程的內(nèi)存占用情況?
用ps aux只能查看到進(jìn)程,如果進(jìn)程里面使用了pthread編程,用什么命令才能查詢到進(jìn)程里的線程資源占用?
ps aux | grep不就是了
給定一個(gè)單鏈表的頭結(jié)點(diǎn)pHead(該頭節(jié)點(diǎn)是有值的,比如在下圖,它的val是1),長(zhǎng)度為n,反轉(zhuǎn)該鏈表后,返回新鏈表的表頭。
數(shù)據(jù)范圍:?0\leq n\leq10000≤n≤1000
要求:空間復(fù)雜度?O(1)O(1)?,時(shí)間復(fù)雜度?O(n)O(n)?。
struct ListNode* ReverseList(struct ListNode* pHead ) { struct ListNode* newhead = NULL; struct ListNode* cur = pHead; while(cur) { //1 保存需要頭插節(jié)點(diǎn)的下一個(gè)節(jié)點(diǎn) struct ListNode* next = cur->next; //2 將頭插節(jié)點(diǎn)插到新鏈表 cur->next = newhead; newhead = cur; cur = next; } return newhead; // write code here }
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧