<em id="0a85b"><option id="0a85b"></option></em>

<abbr id="0a85b"></abbr>

      <nobr id="0a85b"></nobr>
        <tr id="0a85b"></tr>
        9久久伊人精品综合,亚洲一区精品视频在线,成 人免费va视频,国产一区二区三区黄网,99国产精品永久免费视频,亚洲毛片多多影院,精品久久久无码人妻中文字幕,无码国产欧美一区二区三区不卡
        學習啦>創業指南>職場>筆試題>

        程序員面試筆試寶典

        時間: 護托1061 分享

          程序員(英文Programmer)是從事程序開發、維護的專業人員。一般將程序員分為程序設計人員和程序編碼人員,但兩者的界限并不非常清楚,特別是在中國。下面就由學習啦小編為大家介紹一下程序員面試筆試寶典的文章,歡迎閱讀。

          程序員面試筆試寶典篇1

          1.extern的作用

          自己理解:應該需要區分extern在C語言中和C++語言中的作用,C語言中extern聲明的函數和變量可以被該文件外部模塊引用,C++語言中除了該作用還可以聲明extern “C”聲明一段代碼編譯連接的方法為C語言的方法。

          參考:其實extern的百度詞條解釋的很清楚,具體的也是跟我上面自己理解差別不是很大。

          (a) extern是C/C++語言中聲明函數和全局變量作用范圍(可見性)的關鍵字,該關鍵字告訴編譯器,其聲明的函數和變量在本模塊或其他模塊中使用(通常,在模塊的頭文件中對本模塊提供給其它模塊引用的函數和全局變量以關鍵字extern聲明。)

          (b) 被extern “C”修飾的變量和函數是按照C語言的方式編譯和鏈接的。(C語言不支持函數重載,所以函數的C++和C的編譯方式不同,這一句的作用就是實現C++和C及其他語言混合編程)

          2.strstr()函數的作用

          strstr()函數的原型一般為extern char * strstr(const char *src , const char *dest) , 其作用就是尋找目標字符串在源字符串中第一次出現的位置。

          3.windows線程優先級問題( 進程和線程的區別和聯系 )

          我覺得這個概念可能面試、筆試的時候不是很適合,畢竟平臺相關,大多數公司可能更多的傾向于linux開發,這個問題更換為進程和線程的區別更好,這個是筆試,面試常見的知識考查。

          (a) 通常一個進程可以包含若干個線程,它們可以利用進程所擁有的資源。進程是系統進行資源分配和調度的一個獨立單位,線程是進程的一個實體,是CPU調度和分派的基本單位,它是比進程更小的能獨立運行的基本單位。線程自己基本不擁有系統資源,只擁有一些在運行中必不可少的資源(如程序計數器,一組寄存器和棧),線程可與同屬于一個進程的其他線程共享進程所擁有的全部資源。

          線程和進程區別歸納:

          地址空間和其他資源:進程間互相獨立,同一個進程的各線程共享。

          通信:進程間通信IPC,線程間可以直接讀寫進程序數據段(如全局變量)來進行通信-需要進行同步和互斥的輔助。

          調度和切換:線程上下文切換比進程上下文切換快速,高效。

          多線程的OS中,進程不是一個可執行的實體。

          4.多方法交換x與y的值

          5.指針的自加與引用

          6.前置++與后置++

          前置++和后置++我覺得一個比較重要的問題是C++中重載兩個操作符的時候如何區別:區分前置和后置 函數的參數有一個 (函數重載),后置++有一個(int)參數。

          7.inline的作用

          inline函數不像正常函數在調用時存在壓棧和call的操作,它會把程序代碼直接嵌入到調用代碼段中,也就是說使用inline函數會增大二進制程序的體積,但是會使執行速度加快。

          同時,編譯期間可以對參數進行強類型的檢查,這是inline優于宏的一個方面。

          8.二維數組的表示

          9.ifndef的作用

          條件編譯的語法,一般情況下,源程序中所有的行都參加編譯。但是有時希望對其中一部分內容只在滿足一定條件才進行編譯,也就是對一部分內容指定編譯的條件,這就是“條件編譯”。有時,希望當滿足某條件時對一組語句進行編譯,而當條件不滿足時則編譯另一組語句。

          10.KMP算法

          字符串匹配的高級算法

          程序員面試筆試寶典篇2

          1.函數調用方式

          __cdecl 堆棧由調用者清除 參數從右至左的順序壓入堆棧內

          __stdcall 堆棧由被調用者清除 參數從右至左的順序壓入堆棧內

          __fastcall 堆棧由被調用者清除 部分參數保存在寄存器中,然后其他的壓入堆棧內

          thiscall(非關鍵字) 堆棧由被調用者清除 參數壓入堆棧內,this指針保存在ECX寄存器內

          2.重載函數

          函數重載是指在同一作用域內,可以有一組具有相同函數名,不同參數列表的函數,這組函數被稱為重載函數。不能利用返回類型進行重載!類中函數const和非const可以進行重載,其實原理是利用this指針的類型是const和非const進行重載,其實原理就是參數類型不同,const指針orconst引用調用的為const版本的函數~更多函數重載的知識。

          3.構造函數和析構函數

          虛擬析構函數的使用場景是指向父類的指針實則為子類指針,調用delete的時候使用虛擬析構函數,防止部分內存泄露。

          構造函數不能聲明為虛擬函數,因為對象的虛擬函數表的指針其實是在構造函數內編譯器添加完成的代碼,所以在構造函數執行之前無法訪問到虛擬函數表的。

          4.合并兩個有序鏈表

          類似歸并排序,兩個指針歸并即可。

          5.100億條記錄的文本文件,取出重復數最多的前10條

          類似top k算法,無法全部讀入內存的top k算法是利用容量為k的最大堆,達到線性時間的top k算法。

          首先利用hash table預處理每個元素出現的次數,然后利用次數執行top k算法。

          6.設計一個雙向鏈表,并且提供一個可根據值刪除元素的函數

          STL中的list底層及為雙鏈表實現。

          7.二叉樹的多種遍歷算法實現

          8.有讀和寫的兩個線程和一個隊列,讀線程從隊列中讀數據,寫線程往隊列中寫數據

          生產者和消費者模型:

          使用信號燈和互斥量。

        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        16
        17
        18
        19
        20
        21
        22
        23
        24
        semaphore mutex = 1;
        semaphore fillCount = 0;
        semaphore emptyCount = BUFFER_SIZE;
         
        procedure producer() {
            while(true) {
                item = produceItem();
                down(emptyCount);
                    down(mutex);
                        putItemIntoBuffer(item);
                    up(mutex);
                up(fillCount);
            }
        }
        procedure consumer() {
            while(true) {
                down(fillCount);
                    down(mutex);
                        item = removeItemFromBuffer();
                    up(mutex);
                up(emptyCount);
                consumeItem(item);
            }
        }

          不使用信號燈和互斥量。

        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        16
        17
        18
        19
        20
        21
        22
        volatile unsigned int produceCount, consumeCount;
        TokenType buffer[BUFFER_SIZE];
         
        void producer(void) {
            while (1) {
                while (produceCount - consumeCount == BUFFER_SIZE)
                    sched_yield(); // 緩沖區滿
         
                buffer[produceCount % BUFFER_SIZE] = produceToken();
                produceCount += 1;
            }
        }
         
        void consumer(void) {
            while (1) {
                while (produceCount - consumeCount == 0)
                   sched_yield(); // 緩沖區空
         
                consumeToken( buffer[consumeCount % BUFFER_SIZE]);
                consumeCount += 1;
            }
        }

          9.stack,heap,memory-pool

          10.TCP的流量控制和擁塞控制機制

          TCP的流量控制就是讓發送方的發送速率不要太快,讓接收方來得及接收。利用滑動窗口機制可以很方便的在TCP連接上實現對發送方的流量控制。TCP的窗口單位是字節,不是報文段,發送方的發送窗口不能超過接收方給出的接收窗口的數值。

          所謂的擁塞控制為防止過多的數據注入到網絡中,這樣可以使網絡中的路由器或鏈路不致過載。擁塞控制索要做的都有一個前提,就是網絡能承受現有的網絡負荷。流量控制往往指點對點通信量的控制,是一個端到端的問題。因特網建議標準RFC2581定義了進行擁塞控制的四種算法,即慢開始(Slow-start),擁塞避免(Congestion Avoidance)快重傳(Fast Restrangsmit)和快回復(Fast Recovery)。

          程序員面試筆試寶典篇3

          1.寫一個函數,返回一個字符串中只出現一次的第一個字符

          目前想到的方法就是利用hash表記錄每個字符出現的次數,然后兩次遍歷即可找到只出現一次的第一個字符。

          2.求一個數組中第k大的數的位置

          3.面向對象繼承,多態問題,如多態的實現機制

          虛擬函數,指針and引用

          4.內聯函數什么時候不展開

          在內聯函數內不允許用循環語句和開關語句。 如果內聯函數有這些語句,則編譯將該函數視同普通函數那樣產生函數調用代碼,遞歸函數(自己調用自己的函數)是不能被用來做內聯函數的。內聯函數只適合于只有1~5行的小函數。對一個含有許多語句的大函數,函數調用和返回的開銷相對來說微不足道,所以也沒有必要用內聯函數實現。

          5.成員函數初始化列表有什么作用?什么必須在成員初始化列表中進行初始化?

          類的static變量在類的構造函數前已進行初始化!

          類對象的構造順序:

          (a)分配內存,調用構造函數時,隱式/顯式的初始化各數據成員(順序和類中聲明對象一致)。如果無成員初始化列表。隱式初始化階段按照聲明的順序依次調用所有基類的缺省構造函數,然后所有成員類對象的缺省構造函數。

          (b)進入構造函數執行函數體內語句,函數體內的數據成員的設置被認為賦值,而不是初始化。

          所以,使用初始化列表的兩個情況:

          1)必須使用初始化列表進行初始化![1]數據成員為類對象并且該類對象僅提供帶參數的構造函數[2]const修飾的數據成員[3]引用數據成員;

          2)考慮效率的時候!因為未利用初始化列表而是在構造函數體內進行賦值,則調用了缺省構造函數和賦值運算符操作。如果數據成員為自定義的類對象,則效率比直接利用構造函數初始化低很多。

          6.指針與引用的區別

          相同點:

          都是地址的概念;指針指向一塊內存,它的內容是所指內存的地址;而引用則是某塊內存的別名。

          不同點:

          指針是一個實體,而引用僅是個別名

          引用只能并且必須在定義時被初始化一次,之后不可變(類似常量指針,引用自帶常量指針屬性);指針可變;

          引用沒有const,指針有const,const的指針不能夠改變;(int & const refer 不存在,因為引用本身就初始化一次不可變,但是const int &refer是存在的,指引用所指向的值不可改變)

          引用不能為空,指針可以為空

          sizeof針對指針得到的是指針的大小,針對引用得到的是指向對象的大小;

          指針的++操作和引用的++操作完全不同,指針為移動指針地址,引用++操作作用于指向的對象;

          引用是類型安全的,而指針不是類型安全的。

          7.創建空類時,哪些成員函數是系統默認的?

          構造函數,拷貝構造,賦值函數,析構函數,取址運算符,const取址運算符

          8.有10W個IP段,這些IP段之間都不重合,隨便給定一個IP,求出屬于哪個IP段

          9.網絡編程(網絡編程范式,非阻塞connect)

          常見的IO模型有阻塞、非阻塞、IO多路復用、異步。

        3172086 主站蜘蛛池模板: 日韩精品一区二区三区激| 国产精品福利视频导航| 风韵丰满熟妇啪啪区老老熟妇| 成人无号精品一区二区三区| 亚洲国产精品成人综合色| 久久久久久一区国产精品| 一 级做人爱全视频在线看| 亚洲精品天堂成人片AV在线播放| 九九热爱视频精品视频| 蜜臀久久精品亚洲一区| 国产亚洲真人做受在线观看| 成人自拍短视频午夜福利| 无码人妻斩一区二区三区| 好爽好紧好大的免费视频| 日日爽日日操| 中文字幕在线国产有码| 长腿校花无力呻吟娇喘的视频| 国产视色精品亚洲一区二区 | 人人妻人人玩人人澡人人爽| h无码精品3d动漫在线观看| 爆乳熟妇一区二区三区| 国产午夜福利精品片久久| 欧美交A欧美精品喷水| 欧洲码亚洲码的区别入口| 丁香婷婷激情俺也去俺来也| 亚洲精品一区二区三区大| 欧美熟妇另类久久久久久多毛| 国产精品久久久久aaaa| 人人妻人人玩人人澡人人爽| 人妻无码av中文系列久| 国产在线高清视频无码| 色妞永久免费视频| 天堂在线最新版av观看| 国产精品视频一区二区三区无码 | 亚洲日韩精品欧美一区二区| 亚洲国产精品日韩在线| 毛片无遮挡高清免费| 成人精品区| 亚洲欧美综合在线天堂| 又爽又黄又无遮挡的激情视频| 午夜成人无码免费看网站|