五萬字長文C C++ 面試知識總結(上) | IT人

文章推薦指數: 80 %
投票人數:10人

C/C++ 面試知識總結這是一篇五萬字的C/C++面試知識點總結,包括答案:這是上篇,下篇今天也推送了,需要的同學記得去看看。

本文花費了博主大量的時間 ... Togglenavigation IT人 IT人 五萬字長文CC++面試知識總結(上) 列文發表於 2019-04-24 面試 C++ C/C++面試知識總結 這是一篇五萬字的C/C++面試知識點總結,包括答案:這是上篇,下篇今天也推送了,需要的同學記得去看看。

本文花費了博主大量的時間進行收集、排版:如果你覺得文章對你有幫助,幫忙點贊給博主一點鼓勵~~ 目錄 C/C++ STL 資料結構 演算法 Problems 作業系統 計算機網路 網路程式設計 資料庫 設計模式 連結裝載庫 海量資料處理 音視訊 其他 書籍 複習刷題網站 招聘時間崗位 面試題目經驗 C/C++ const 作用 修飾變數,說明該變數不可以被改變; 修飾指標,分為指向常量的指標和指標常量; 常量引用,經常用於形參型別,即避免了拷貝,又避免了函式對值的修改; 修飾成員函式,說明該成員函式內不能修改成員變數。

使用 //類 classA { private: constinta;//常物件成員,只能在初始化列表賦值 public: //建構函式 A(){}; A(intx):a(x){};//初始化列表 //const可用於對過載函式的區分 intgetValue();//普通成員函式 intgetValue()const;//常成員函式,不得修改類中的任何資料成員的值 }; voidfunction() { //物件 Ab;//普通物件,可以呼叫全部成員函式 constAa;//常物件,只能呼叫常成員函式、更新常成員變數 constA*p=&a;//常指標 constA&q=a;//常引用 //指標 chargreeting[]="Hello"; char*p1=greeting;//指標變數,指向字元陣列變數 constchar*p2=greeting;//指標變數,指向字元陣列常量 char*constp3=greeting;//常指標,指向字元陣列變數 constchar*constp4=greeting;//常指標,指向字元陣列常量 } //函式 voidfunction1(constintVar);//傳遞過來的引數在函式內不可變 voidfunction2(constchar*Var);//引數指標所指內容為常量 voidfunction3(char*constVar);//引數指標為常指標 voidfunction4(constint&Var);//引用引數在函式內為常量 //函式返回值 constintfunction5();//返回一個常數 constint*function6();//返回一個指向常量的指標變數,使用:constint*p=function6(); int*constfunction7();//返回一個指向變數的常指標,使用:int*constp=function7(); 複製程式碼static 作用 修飾普通變數,修改變數的儲存區域和生命週期,使變數儲存在靜態區,在main函式執行前就分配了空間,如果有初始值就用初始值初始化它,如果沒有初始值系統用預設值初始化它。

修飾普通函式,表明函式的作用範圍,僅在定義該函式的檔案內才能使用。

在多人開發專案時,為了防止與他人命令函式重名,可以將函式定位為static。

修飾成員變數,修飾成員變數使所有的物件只儲存一個該變數,而且不需要生成物件就可以訪問該成員。

修飾成員函式,修飾成員函式使得不需要生成物件就可以訪問該函式,但是在static函式內不能訪問非靜態成員。

this指標 this 指標是一個隱含於每一個非靜態成員函式中的特殊指標。

它指向正在被該成員函式操作的那個物件。

當對一個物件呼叫成員函式時,編譯程式先將物件的地址賦給 this 指標,然後呼叫成員函式,每次成員函式存取資料成員時,由隱含使用 this 指標。

當一個成員函式被呼叫時,自動向它傳遞一個隱含的引數,該引數是一個指向這個成員函式所在的物件的指標。

this 指標被隱含地宣告為: ClassName *constthis,這意味著不能給this指標賦值;在ClassName類的const成員函式中,this指標的型別為:constClassName* const,這說明不能對 this 指標所指向的這種物件是不可修改的(即不能對這種物件的資料成員進行賦值操作); this 並不是一個常規變數,而是個右值,所以不能取得 this 的地址(不能 &this)。

在以下場景中,經常需要顯式引用 this 指標: 為實現物件的鏈式引用; 為避免對同一物件進行賦值操作; 在實現一些資料結構時,如list。

inline行內函數 特徵 相當於把行內函數裡面的內容寫在呼叫行內函數處; 相當於不用執行進入函式的步驟,直接執行函式體; 相當於巨集,卻比巨集多了型別檢查,真正具有函式特性; 不能包含迴圈、遞迴、switch等複雜操作; 在類宣告中定義的函式,除了虛擬函式的其他函式都會自動隱式地當成行內函數。

使用 //宣告1(加inline,建議使用) inlineintfunctionName(intfirst,intsecend,...); //宣告2(不加inline) intfunctionName(intfirst,intsecend,...); //定義 inlineintfunctionName(intfirst,intsecend,...){/****/}; //類內定義,隱式內聯 classA{ intdoA(){return0;}//隱式內聯 } //類外定義,需要顯式內聯 classA{ intdoA(); } inlineintA::doA(){return0;}//需要顯式內聯 複製程式碼編譯器對inline函式的處理步驟 將inline函式體複製到inline函式呼叫點處; 為所用inline函式中的區域性變數分配記憶體空間; 將inline函式的的輸入引數和返回值對映到呼叫方法的區域性變數空間中; 如果inline函式有多個返回點,將其轉變為inline函式程式碼塊末尾的分支(使用GOTO)。

優缺點 優點 行內函數同巨集函式一樣將在被呼叫處進行程式碼展開,省去了引數壓棧、棧幀開闢與回收,結果返回等,從而提高程式執行速度。

行內函數相比巨集函式來說,在程式碼展開時,會做安全檢查或自動型別轉換(同普通函式),而巨集定義則不會。

在類中宣告同時定義的成員函式,自動轉化為行內函數,因此行內函數可以訪問類的成員變數,巨集定義則不能。

行內函數在執行時可除錯,而巨集定義不可以。

缺點 程式碼膨脹。

內聯是以程式碼膨脹(複製)為代價,消除函式呼叫帶來的開銷。

如果執行函式體內程式碼的時間,相比於函式呼叫的開銷較大,那麼效率的收穫會很少。

另一方面,每一處行內函數的呼叫都要複製程式碼,將使程式的總程式碼量增大,消耗更多的記憶體空間。

inline函式無法隨著函式庫升級而升級。

inline函式的改變需要重新編譯,不像non-inline可以直接連結。

是否內聯,程式設計師不可控。

行內函數只是對編譯器的建議,是否對函式內聯,決定權在於編譯器。

虛擬函式(virtual)可以是行內函數(inline)嗎? Are"inlinevirtual"memberfunctionseveractually"inlined"? 答案:www.cs.technion.ac.il/users/yechi… 虛擬函式可以是行內函數,內聯是可以修飾虛擬函式的,但是當虛擬函式表現多型性的時候不能內聯。

內聯是在編譯器建議編譯器內聯,而虛擬函式的多型性在執行期,編譯器無法知道執行期呼叫哪個程式碼,因此虛擬函式表現為多型性時(執行期)不可以內聯。

inlinevirtual 唯一可以內聯的時候是:編譯器知道所呼叫的物件是哪個類(如 Base::who()),這隻有在編譯器具有實際物件而不是物件的指標或引用時才會發生。

虛擬函式內聯使用 #include usingnamespacestd; classBase { public: inlinevirtualvoidwho() { cout<who(); //因為Base有虛解構函式(virtual~Base(){}),所以delete時,會先呼叫派生類(Derived)解構函式,再呼叫基類(Base)解構函式,防止記憶體洩漏。

deleteptr; ptr=nullptr; system("pause"); return0; } 複製程式碼assert() 斷言,是巨集,而非函式。

assert巨集的原型定義在 (C)、(C++)中,其作用是如果它的條件返回錯誤,則終止程式執行。

可以通過定義 NDEBUG 來關閉assert,但是需要在原始碼的開頭,include 之前。

使用 #defineNDEBUG//加上這行,則assert不可用 #include assert(p!=NULL);//assert不可用 複製程式碼sizeof() sizeof對陣列,得到整個陣列所佔空間大小。

sizeof對指標,得到指標本身所佔空間大小。

#pragmapack(n) 設定結構體、聯合以及類成員變數以n位元組方式對齊 使用 #pragmapack(push)//儲存對齊狀態 #pragmapack(4)//設定為4位元組對齊 structtest { charm1; doublem4; intm3; }; #pragmapack(pop)//恢復對齊狀態 複製程式碼位域 Bit mode: 2;    // mode 佔 2 位 複製程式碼類可以將其(非靜態)資料成員定義為位域(bit-field),在一個位域中含有一定數量的二進位制位。

當一個程式需要向其他程式或硬體裝置傳遞二進位制資料時,通常會用到位域。

位域在記憶體中的佈局是與機器有關的 位域的型別必須是整型或列舉型別,帶符號型別中的位域的行為將因具體實現而定 取地址運算子(&)不能作用於位域,任何指標都無法指向類的位域 volatile volatile int i = 10;  複製程式碼 volatile關鍵字是一種型別修飾符,用它宣告的型別變數表示可以被某些編譯器未知的因素(作業系統、硬體、其它執行緒等)更改。

所以使用volatile告訴編譯器不應對這樣的物件進行優化。

volatile關鍵字宣告的變數,每次訪問時都必須從記憶體中取出值(沒有被volatile修飾的變數,可能由於編譯器的優化,從CPU暫存器中取值) const可以是volatile(如只讀的狀態暫存器) 指標可以是volatile extern"C" 被extern限定的函式或變數是extern型別的 被 extern"C" 修飾的變數和函式是按照C語言方式編譯和連線的 extern"C" 的作用是讓C++編譯器將 extern"C" 宣告的程式碼當作C語言程式碼處理,可以避免C++因符號修飾導致程式碼不能和C語言庫中的符號進行連結的問題。

"C"使用 #ifdef__cplusplus extern"C"{ #endif void*memset(void*,int,size_t); #ifdef__cplusplus } #endif 複製程式碼struct和typedefstruct C中 //c typedefstructStudent{ intage; }S; 複製程式碼等價於 //c structStudent{ intage; }; typedefstructStudentS; 複製程式碼此時 S 等價於 structStudent,但兩個識別符號名稱空間不相同。

另外還可以定義與 structStudent 不衝突的 voidStudent(){}。

C++中 由於編譯器定位符號的規則(搜尋規則)改變,導致不同於C語言。

一、如果在類識別符號空間定義了 structStudent{...};,使用 Studentme; 時,編譯器將搜尋全域性識別符號表,Student 未找到,則在類識別符號內搜尋。

即表現為可以使用 Student 也可以使用 structStudent,如下: //cpp structStudent{ intage; }; voidf(Studentme);//正確,"struct"關鍵字可省略 複製程式碼二、若定義了與 Student 同名函式之後,則 Student 只代表函式,不代表結構體,如下: typedefstructStudent{ intage; }S; voidStudent(){}//正確,定義後"Student"只代表此函式 //voidS(){}//錯誤,符號"S"已經被定義為一個"structStudent"的別名 intmain(){ Student(); structStudentme;//或者"Sme"; return0; } 複製程式碼C++中struct和class 總的來說,struct更適合看成是一個資料結構的實現體,class更適合看成是一個物件的實現體。

區別 最本質的一個區別就是預設的訪問控制 預設的繼承訪問許可權。

struct是public的,class是private的。

struct作為資料結構的實現體,它預設的資料訪問控制是public的,而class作為物件的實現體,它預設的成員變數訪問控制是private的。

union聯合 聯合(union)是一種節省空間的特殊的類,一個union可以有多個資料成員,但是在任意時刻只有一個資料成員可以有值。

當某個成員被賦值後其他成員變為未定義狀態。

聯合有如下特點: 預設訪問控制符為public 可以含有建構函式、解構函式 不能含有引用型別的成員 不能繼承自其他類,不能作為基類 不能含有虛擬函式 匿名union在定義所在作用域可直接訪問union成員 匿名union不能包含protected成員或private成員 全域性匿名聯合必須是靜態(static)的 使用 #include unionUnionTest{ UnionTest():i(10){}; inti; doubled; }; staticunion{ inti; doubled; }; intmain(){ UnionTestu; union{ inti; doubled; }; std::cout<>x; std::cout<>x; cout< autofcn(Itbeg,Itend)->decltype(*beg) { //處理序列 return*beg;//返回序列中一個元素的引用 } //為了使用模板引數成員,必須用typename template autofcn2(Itbeg,Itend)->typenameremove_reference::type { //處理序列 return*beg;//返回序列中一個元素的拷貝 } 複製程式碼引用 左值引用 常規引用,一般表示物件的身份。

右值引用 右值引用就是必須繫結到右值(一個臨時物件、將要銷燬的物件)的引用,一般表示物件的值。

右值引用可實現轉移語義(MoveSementics)和精確傳遞(PerfectForwarding),它的主要目的有兩個方面: 消除兩個物件互動時不必要的物件拷貝,節省運算儲存資源,提高效率。

能夠更簡潔明確地定義泛型函式。

引用摺疊 X&&、X&&&、X&&&可摺疊成X& X&&&&可摺疊成X&& 巨集 巨集定義可以實現類似於函式的功能,但是它終歸不是函式,而巨集定義中括弧中的“引數”也不是真的引數,在巨集展開的時候對“引數”進行的是一對一的替換。

成員初始化列表 好處 更高效:少了一次呼叫預設建構函式的過程。

有些場合必須要用初始化列表: 常量成員,因為常量只能初始化不能賦值,所以必須放在初始化列表裡面 引用型別,引用必須在定義的時候初始化,並且不能重新賦值,所以也要寫在初始化列表裡面 沒有預設建構函式的類型別,因為使用初始化列表可以不必呼叫預設建構函式來初始化,而是直接呼叫拷貝建構函式初始化。

initializer_list列表初始化【C++11】 用花括號初始化器列表列表初始化一個物件,其中對應建構函式接受一個 std::initializer_list 引數. initializer_list使用 #include #include #include template structS{ std::vectorv; S(std::initializer_listl):v(l){ std::cout<l){ v.insert(v.end(),l.begin(),l.end()); } std::pairc_arr()const{ return{&v[0],v.size()};//在return語句中複製列表初始化 //這不使用std::initializer_list } }; template voidtemplated_fn(T){} intmain() { Ss={1,2,3,4,5};//複製初始化 s.append({6,7,8});//函式呼叫中的列表初始化 std::cout<>({1,2,3});//OK templated_fn<:vector>>({1,2,3});//也OK } 複製程式碼物件導向 物件導向程式設計(Object-orientedprogramming,OOP)是種具有物件概念的程式程式設計典範,同時也是一種程式開發的抽象方針。

物件導向特徵 物件導向三大特徵——封裝、繼承、多型 封裝 把客觀事物封裝成抽象的類,並且類可以把自己的資料和方法只讓可信的類或者物件操作,對不可信的進行資訊隱藏。

關鍵字:public,protected,friendly,private。

不寫預設為friendly。

關鍵字 當前類 包內 子孫類 包外 public √ √ √ √ protected √ √ √ × friendly √ √ × × private √ × × × 繼承 基類(父類)——>派生類(子類) 多型 多型,即多種狀態,在面嚮物件語言中,介面的多種不同的實現方式即為多型。

C++多型有兩種:靜態多型(早繫結)、動態多型(晚繫結)。

靜態多型是通過函式過載實現的;動態多型是通過虛擬函式實現的。

多型是以封裝和繼承為基礎的。

靜態多型(早繫結) 函式過載 classA { public: voiddo(inta); voiddo(inta,intb); }; 複製程式碼動態多型(晚繫結) 虛擬函式:用virtual修飾成員函式,使其成為虛擬函式 注意: 普通函式(非類成員函式)不能是虛擬函式 靜態函式(static)不能是虛擬函式 建構函式不能是虛擬函式(因為在呼叫建構函式時,虛表指標並沒有在物件的記憶體空間中,必須要建構函式呼叫完成後才會形成虛表指標) 行內函數不能是表現多型性時的虛擬函式,解釋見:虛擬函式(virtual)可以是行內函數(inline)嗎?:t.cn/E4WVXSP 動態多型使用 classShape//形狀類 { public: virtualdoublecalcArea() { ... } virtual~Shape(); }; classCircle:publicShape//圓形類 { public: virtualdoublecalcArea(); ... }; classRect:publicShape//矩形類 { public: virtualdoublecalcArea(); ... }; intmain() { Shape*shape1=newCircle(4.0); Shape*shape2=newRect(5.0,6.0); shape1->calcArea();//呼叫圓形類裡面的方法 shape2->calcArea();//呼叫矩形類裡面的方法 deleteshape1; shape1=nullptr; deleteshape2; shape2=nullptr; return0; } 複製程式碼虛解構函式 虛解構函式是為了解決基類的指標指向派生類物件,並用基類的指標刪除派生類物件。

虛解構函式使用 classShape { public: Shape();//建構函式不能是虛擬函式 virtualdoublecalcArea(); virtual~Shape();//虛解構函式 }; classCircle:publicShape//圓形類 { public: virtualdoublecalcArea(); ... }; intmain() { Shape*shape1=newCircle(4.0); shape1->calcArea(); deleteshape1;//因為Shape有虛解構函式,所以delete釋放記憶體時,先呼叫子類解構函式,再呼叫基類解構函式,防止記憶體洩漏。

shape1=NULL; return0; } 複製程式碼純虛擬函式 純虛擬函式是一種特殊的虛擬函式,在基類中不能對虛擬函式給出有意義的實現,而把它宣告為純虛擬函式,它的實現留給該基類的派生類去做。

virtual int A() = 0; 複製程式碼虛擬函式、純虛擬函式 CSDN.C++中的虛擬函式、純虛擬函式區別和聯絡:t.cn/E4WVQBI 類裡如果宣告瞭虛擬函式,這個函式是實現的,哪怕是空實現,它的作用就是為了能讓這個函式在它的子類裡面可以被覆蓋,這樣的話,這樣編譯器就可以使用後期繫結來達到多型了。

純虛擬函式只是一個介面,是個函式的宣告而已,它要留到子類裡去實現。

虛擬函式在子類裡面也可以不過載的;但純虛擬函式必須在子類去實現。

虛擬函式的類用於“實作繼承”,繼承介面的同時也繼承了父類的實現。

當然大家也可以完成自己的實現。

純虛擬函式關注的是介面的統一性,實現由子類完成。

帶純虛擬函式的類叫抽象類,這種類不能直接生成物件,而只有被繼承,並重寫其虛擬函式後,才能使用。

抽象類和大家口頭常說的虛基類還是有區別的,在C#中用abstract定義抽象類,而在C++中有抽象類的概念,但是沒有這個關鍵字。

抽象類被繼承後,子類可以繼續是抽象類,也可以是普通類,而虛基類,是含有純虛擬函式的類,它如果被繼承,那麼子類就必須實現虛基類裡面的所有純虛擬函式,其子類不能是抽象類。

虛擬函式指標、虛擬函式表 虛擬函式指標:在含有虛擬函式類的物件中,指向虛擬函式表,在執行時確定。

虛擬函式表:在程式只讀資料段(.rodatasection,見:目標檔案儲存結構:t.cn/E4WVBeF),存放… 虛繼承 虛繼承用於解決多繼承條件下的菱形繼承問題(浪費儲存空間、存在二義性)。

底層實現原理與編譯器相關,一般通過虛基類指標和虛基類表實現,每個虛繼承的子類都有一個虛基類指標(佔用一個指標的儲存空間,4位元組)和虛基類表(不佔用類物件的儲存空間)(需要強調的是,虛基類依舊會在子類裡面存在拷貝,只是僅僅最多存在一份而已,並不是不在子類裡面了);當虛繼承的子類被當做父類繼承時,虛基類指標也會被繼承。

實際上,vbptr指的是虛基類表指標(virtualbasetablepointer),該指標指向了一個虛基類表(virtualtable),虛表中記錄了虛基類與本類的偏移地址;通過偏移地址,這樣就找到了虛基類成員,而虛繼承也不用像普通多繼承那樣維持著公共基類(虛基類)的兩份同樣的拷貝,節省了儲存空間。

虛繼承、虛擬函式 相同之處:都利用了虛指標(均佔用類的儲存空間)和虛表(均不佔用類的儲存空間) 不同之處: 虛擬函式不佔用儲存空間 虛擬函式表儲存的是虛擬函式地址 虛基類依舊存在繼承類中,只佔用儲存空間 虛基類表儲存的是虛基類相對直接繼承類的偏移 虛繼承 虛擬函式 模板類、成員模板、虛擬函式 模板類中可以使用虛擬函式 一個類(無論是普通類還是類别範本)的成員模板(本身是模板的成員函式)不能是虛擬函式 抽象類、介面類、聚合類 抽象類:含有純虛擬函式的類 介面類:僅含有純虛擬函式的抽象類 聚合類:使用者可以直接訪問其成員,並且具有特殊的初始化語法形式。

滿足如下特點: 所有成員都是public 沒有有定於任何建構函式 沒有類內初始化 沒有基類,也沒有virtual函式 記憶體分配和管理 malloc、calloc、realloc、alloca malloc:申請指定位元組數的記憶體。

申請到的記憶體中的初始值不確定。

calloc:為指定長度的物件,分配能容納其指定個數的記憶體。

申請到的記憶體的每一位(bit)都初始化為0。

realloc:更改以前分配的記憶體長度(增加或減少)。

當增加長度時,可能需將以前分配區的內容移到另一個足夠大的區域,而新增區域內的初始值則不確定。

alloca:在棧上申請記憶體。

程式在出棧的時候,會自動釋放記憶體。

但是需要注意的是,alloca不具可移植性,而且在沒有傳統堆疊的機器上很難實現。

alloca不宜使用在必須廣泛移植的程式中。

C99中支援變長陣列(VLA),可以用來替代alloca。

malloc、free 用於分配、釋放記憶體 malloc、free使用 申請記憶體,確認是否申請成功 char *str = (char*) malloc(100); assert(str != nullptr); 複製程式碼釋放記憶體後指標置空 free(p);  p = nullptr; 複製程式碼new、delete new/new[]:完成兩件事,先底層呼叫malloc分了配記憶體,然後呼叫建構函式(建立物件)。

delete/delete[]:也完成兩件事,先呼叫解構函式(清理資源),然後底層呼叫free釋放空間。

new在申請記憶體時會自動計算所需位元組數,而malloc則需我們自己輸入申請記憶體空間的位元組數。

new、delete使用 申請記憶體,確認是否申請成功 intmain() { T*t=newT();//先記憶體分配,再建構函式 deletet;//先解構函式,再記憶體釋放 return0; } 複製程式碼定位new 定位new(placementnew)允許我們向new傳遞額外的引數。

new(palce_address)type new(palce_address)type(initializers) new(palce_address)type[size] new(palce_address)type[size]{bracedinitializerlist} 複製程式碼 palce_address 是個指標 initializers 提供一個(可能為空的)以逗號分隔的初始值列表 deletethis合法嗎? Isitlegal(andmoral)foramemberfunctiontosaydeletethis? 答案:t.cn/E4Wfcfl 合法,但: 必須保證this物件是通過 new(不是 new[]、不是placementnew、不是棧上、不是全域性、不是其他物件成員)分配的 必須保證呼叫 deletethis 的成員函式是最後一個呼叫this的成員函式 必須保證成員函式的 deletethis 後面沒有呼叫this了 必須保證 deletethis 後沒有人使用了 如何定義一個只能在堆上(棧上)生成物件的類? 如何定義一個只能在堆上(棧上)生成物件的類? 答案:t.cn/E4WfDhP 只能在堆上 方法:將解構函式設定為私有 原因:C++是靜態繫結語言,編譯器管理棧上物件的生命週期,編譯器在為類物件分配棧空間時,會先檢查類的解構函式的訪問性。

若解構函式不可訪問,則不能在棧上建立物件。

只能在棧上 方法:將new和delete過載為私有 原因:在堆上生成物件,使用new關鍵詞操作,其過程分為兩階段:第一階段,使用new在堆上尋找可用記憶體,分配給物件;第二階段,呼叫建構函式生成物件。

將new操作設定為私有,那麼第一階段就無法完成,就不能夠在堆上生成物件。

智慧指標 C++標準庫(STL)中 標頭檔案:#include C++98 std::auto_ptr<:string> ps (new std::string(str)); 複製程式碼 受限於文章字數限制,後續部分請看【中篇】。

掃描下方二維碼,及時獲取更多網際網路求職面經、java、python、爬蟲、大資料等技術,和海量資料分享:公眾號後臺回覆“csdn”即可免費領取【csdn】和【百度文庫】下載服務;公眾號後臺回覆“資料”:即可領取5T精品學習資料、java面試考點和java面經總結,以及幾十個java、大資料專案,資料很全,你想找的幾乎都有 推薦閱讀 【微信事業群】二面面經 相關文章 C++檔案說明及使用方法 2020-11-19 C++ 希爾排序使用直接插入排序、二分插入排序的C++程式碼實現演算法 2020-11-19 演算法C++ 歸併排序(C++_分治遞迴) 2020-11-20 C++ TSP問題(換位表達,啟發式交叉,啟發式變異)C++實現 2020-11-20 C++ 《演算法筆記》2.4小節——C/C++快速入門->迴圈結構例題5-1-1連續自然數求和 2020-11-20 演算法C++ 【面試攻略】C++面試-銀漢 2020-11-21 面試C++ c++11-17模板核心知識(五)——理解模板引數推導規則 2020-11-21 C++ 初學計算機語言者(C語言,C++,java,pytion,C#) 2020-11-21 JavaC++C# 【面試攻略】C++面試-4399 2020-11-21 面試C++ 兩圓相交求面積c++ 2020-11-21 C++ C++中使用巨集定義來註釋掉所有的cout輸出 2020-11-21 C++ 【c++】結構體sort排序 2020-11-21 C++ 2020最新全面Java學習路線及視訊(萬字長文) 2020-11-21 Java C++知識點49——類繼承與類的構造、拷貝、operator=和解構函式 2020-11-21 C++ 淺析氣泡排序-c++ 2020-11-21 C++ C++純虛數的使用 2020-11-22 C++ 【PAT甲級A1084】BrokenKeyboard(20分)(c++) 2020-11-22 C++ C++L1-7谷歌的招聘 2020-11-22 C++ 一文讓你學完C++,乾貨收藏!!! 2020-11-22 C++ 最新文章 論文閱讀ExploringTemporalInformationforDynamicNetworkEmbedding vue的常用事件 一文掌握GitHubActions基本概念與配置 ElasticSearch7.3學習(三十二)----logstash三大外掛(input、filter、output)及其綜合示例 SpringDataJPA系列4——Spring宣告式數事務處理與多資料來源支援 Flex&Bison開始 生態+人才雙豐收,昇騰AI助力成都人工智慧產業雄起 社交軟體紅包技術解密(十二):解密抖音春節紅包背後的技術設計與實踐 【WPF】CAD工程圖紙轉WPF可直接使用的xaml程式碼技巧 Obsidian基礎教程 微軟智慧雲在華髮布多項混合雲服務及功能更新 一文詳解|Go分散式鏈路追蹤實現原理



請為這篇文章評分?