天天看點

筆試面試準備

班裡一同學總結的,呵呵。雖然還是不夠全面,但是還是可以用來對付一些筆試面試的。

一.基本資料類型(WINDOWS32位機下)

Char 1個位元組

Short 2

Int   4

Long 4

Float 4

Double 8

Long double 10

指針: 32位機. 4個位元組.

浮點數雙精度的比較;

   Float f;

   判斷F是否為0

      If( f>=-0.00001&&f<=0.00001){ =0} else {!=0};

------------------------------------------------------------------------------

-----------------------------------

二.修飾保留字.

Const:

Const char*p//p 指向的内容不能被修改

Char const *p; // p指針不能修改

Const type fun(); // 傳回值類型為一個const type類型,不能修改

Fun( const char *p); fun( const A &a) //保護指針,引用傳遞的值不被修改.

類成員函數:中 fun() const; //表明FUN不能修改成員變量,不調用非const 成員函數.

Volatile:

修飾變量時,確定變修改後儲存在記憶體中,每次取數從記憶體中取.

Static:

靜态變量: 儲存于資料段中., 隻初始化一次.

全局變量(外部變量)的說明之前再冠以static 就構成了靜态的全局變量。全局變量本身就

是靜态存儲方式, 靜态全局變量當然也是靜态存儲方式。 這兩者在存儲方式上并無不同

。這兩者的差別雖在于非靜态全局變量的作用域是整個源程式, 當一個源程式由多個源文

件組成時,非靜态的全局變量在各個源檔案中都是有效的。 而靜态全局變量則限制了其作

用域, 即隻在定義該

變量的源檔案内有效, 在同一源程式的其它源檔案中不能使用它。由于靜态全局變量的作

用域局限于一個源檔案内,隻能為該源檔案内的函數公用, 是以可以避免在其它源檔案中

引起錯誤。

  從以上分析可以看出, 把局部變量改變為靜态變量後是改變了它的存儲方式即改變了

它的生存期。把全局變量改變為靜态變量後是改變了它的作用域, 限制了它的使用範圍。

  static函數與普通函數作用域不同,僅在本檔案。隻在目前源檔案中使用的函數應該

說明為内部函數(static),内部函數應該在目前源檔案中說明和定義。對于可在目前源文

件以外使用的函數,應該在一個頭檔案中說明,要使用這些函數的源檔案要包含這個頭文

件。

static全局變量與普通的全局變量有什麼差別:static全局變量隻初使化一次,防止在其

他檔案單元中被引用;作用域限于本檔案!

  static局部變量和普通局部變量有什麼差別:static局部變量隻被初始化一次,下一

次調用函數時依據上一次結果值進行改變;

如: fun()

{

Static int m=0;

M++;

Cout<<m<<endl;

}

     調用:

Fun();

Fun();

輸出: 1

       2

  static函數與普通函數有什麼差別:static函數在記憶體中隻有一份,普通函數在每個

被調用中維持一份拷貝。作用域限于本檔案

------------------------------------------------------------------------------

---------------------------------------

三.記憶體使用:

程式的局部變量存在于(堆棧)中,全局變量存在于(靜态區 即資料段)中,動态申請數

據存在于( 堆)中。

   配置設定方式有三種,請記住:

-1- 靜态存儲區,是在程式編譯時就已經配置設定好的,在整個運作期間都存在,如全局

變量、常量,靜态變量.

-2- 棧上配置設定,函數内的局部變量就是從這配置設定的,但配置設定的記憶體容易有限。

-3- 堆上配置設定,也稱動态配置設定,如我們用new,malloc配置設定記憶體,用delete,free來釋放的

記憶體。

--------動态申請記憶體:---------------

Malloc/free 與 new/delete 的差別;

前者: 是C的庫函數. 在C++中建立對像時,不會調用構造函數,FREE時也不會調用析構函數

.

後者: 是C++中運算符, 建立析構對象都會調用構造函數,與析構函數.

注意:

      Free(p)或delete p後, P成為野指針, 并非為空, (P所指位址不變,隻是所指記憶體已

釋放)

      兩次釋放P會出錯.

      最好,釋放後加個P=NULL. 空指針多次釋放不會出錯.

------------------------------------------------------------------------------

---------------------------------------

四.運算符:

++,--操作:

      A++ :   A加一後, 表達式傳回A加一前的附本,(非左值)

      ++A:    A加一後,表達式傳回加一後的A.(左值)

位運算.

     使用異或交換資料: 交換A與B的值

                       A^=B;        即: A=A^B;

                       B^=A;           B=B^A;

                       A^=B;           A=A^B;

------------------------------------------------------------------------------

---------------------------------------

五.語句:

       For(A;B;C)   C語句是在每次循環後才執行.

       如: y=10;

for( i=0;i<10;y=++i)

{

   Cout<<y<<endl;// 第一次輸出是10.

}

     循環語句設計:

             盡量小循環放外面,大循環放裡面.-----原因減少循環之間的切換.

------------------------------------------------------------------------------

---------------------------------------

六.函數設計:

參數傳遞選擇--------

   作為輸入參數的,應該用CONST作保護 如:strcpy(char*str1,const char*str2)

      要修改函數外面的變量時可用 :

              1, 指針傳遞: 即把變量位址傳入函數; 如: FUN( int**m);

                  調用時: int m=0;

                           FUN(&m);

              2. 引用傳遞: FUN(int &m),調用時:int m=0; fun(m);

              3. 如果隻要修改一個外面的變量,也可以用傳回值解決,但是多個的話就要

用上面兩種方法中的一種.

内部變量:

       Static 變量;(注意);

        FUN()

         {

            Static int m=0;

               ……..

         }

     其中M 隻初始化一次. 每次調用FUN()後,都會在前一次調用的基礎上進行修改M 值

函數指針:

     如: void (*pFun)(int); 則pFun 為一個函數指,函數參數必須為一個INT參數.

                     調用:

                            pFun=FUN;

                            pFun(b); 或 (*pFun)(b); //一定要加個括号;

              (主要用于回調函數設計)

              另一種定義:

                 Typedef void (*pFun)(int a);

                 則pFun成為一個函數參數為一個INT的函數指針類型.

                 定義: pFun p=FUN;

   函數傳回:

           不要傳回棧記憶體指針;

            如: char* fun()

                  {

                       Char a[]=”kdkdk”;///棧中的一塊記憶體

                       Return a;///傳回棧中記憶體位址。

                  }

(面向對象的函數設在後面);

------------------------------------------------------------------------------

----------------------------------------

七.指針與數組;

     指針++,--;

            Int *p;

             如果p++後,則P的值應該是增加4

             指針的累加與它自己的類型有關.

     Char str[]=”akakak”;

Strlen(str) 是求串的長度, 是以一定要小心那個’\0’結束符;

Strcpy(str1,str2);, ///一定要小心’\0’

------------------------------------------------------------------------------

----------------------------------------

                     面向對象:

一. 類

預設四個函數: 無參數構造函數, 拷貝構造函數(淺拷貝), 指派函數(淺), 析構函數.

重寫指派函數時,注意要避免自指派.(參考高品質C++,string類的編寫)

--------------------------------------------------------------------------

函數重載: 同一區域内,函數名相同,參數清單不同.(略)---實作編譯時多态

函數覆寫: 在子類與父類之間. 由虛函數産生.--------------運作時多态

            Class A

            {

               Virtual void fun(){}

             };

             Class B: public A

             {

                  Void fun(){}

             }

          則子類中的fun()覆寫了父類中的fun();

函數隐藏: 在子類與父類之間, 不是虛函數,但是函數名相同,參數清單不一定相同.

           子類函數會隐藏父類的同名函數.

          Class A

          {

               Void Fun 1();

               Void Fun2();

           }

           Class b : pubic A

           {

               Void Fun1();

               Void Fun2(int);

           }

           則fun1,fun2都隐藏了父類的同名函數.

基類指針與子類指針的使用:

       假設A為父類,B為子類;

定義: B b;

       A*pA=&b;/// pA隻能調用A類中的函數,和B中繼承了A中的虛函數.

                /// 但是不能調用,A中被覆寫的函數與B類中的其它函數.

       B*pB=&b; pB隻能調用B類中的所有可通路函數,和A中繼承下來的所有

/// 公有函數. 但是不能調用A中被B隐藏或覆寫的函數.

--------------------------------------------------------

帶virtual 的析構函數:

      Class A

      {

           Virtual ~A(){   cout<<”in A”<<endl; }

      }

      Class B: public A

      {

           Virtual ~B(){ cout<<”in B”<<endl;}

      }

定義:

     A*Pa=new B;

     Delete pa;

   輸出:in A

         In B

但是如果,A中的析構函數沒有virtual, 則結果隻是:in A

原因: 不明!

類中回調函數設計:

        使用友元函數,或 static 函數。

        原因:兩者不存在this指針。

        如果要修改對象成員,則可以把對象指針或引用傳入函數。

        如: static void fun(A*Pa),,,or   static void fun(A&a);

面向對象函數設計:

      Void fun(A a) -----------------//出現臨時對象

       {

           -----------其它代碼;

           A aa;

           Return (aa);--------------//出現臨時對象;

       }

優化後:

      Void fun(A&a)

      {

           ---------其它代碼

           RETURN (A());

      }

類大小計算:

空類,大小不為0;

static成員變量,當sizeof()求類對象大小時,static變量不會計入其中。

其它參考sizeof()專題

解決頭檔案重複包含:

1.#pragma once.

2. ifndef/define/endif

------------------------------------------------------------------------------

----------------------------------------

二.運算符重載。

       指派: A& operator=(A&other) //傳回引用。

              {

                  避免自指派;

                   ---------其它代碼---------

                  Return *this;

               }

        前++:A& operator++()///自加後傳回本身。傳回值為引用。

              {

                 This->value+=1;

                 Return *this;

               }

         後++:A operator++(int)/int 用于區另前加加,還是後加加。//值傳回

               {

                  A temp(*this);          /自加後,傳回一個自加前的附本。

                  *this->value+=1;

                  Return temp;

                }

非類成員函數++,定義(友元)

       A& operator++(A&a)//前加加

       A operator++(A&a,int)//後加加。

       函數實作同上。

(其中減減的與++類似)

多繼承有待補充;?/???????

模闆

------------------------------------------------------------------------------

----------------------------------------

                                 資料結構與算法

(最好這裡能做到于老師的标準:看到題目就能寫出算法)

---------------------------------------------------------------------

連結清單操作:(不帶頭結點,書上的都是帶頭結點的)

主要是不帶頭結點的操作,記住可能要修改頭指針,是以注意函數參數與傳回值設計。(

細心);(華為面試)

靜态連結清單

棧隊列的使用:

          二叉樹周遊,圖周遊,非遞歸實作。(華為,三G門戶面試);

串操作:

          KMP算法(模式比對) (深信服筆試);

二叉樹:

          三種周遊—遞歸與非遞歸。(華為面試);

          計算葉子數,計算結點數。(華為筆試,迅雷筆試);

          哈夫曼樹--------(不知什麼公司的面試題了);

圖:

       十字連結清單結構

       兩種周遊---深度(非遞歸與遞歸),廣度-----隊列。

查找:

       二分查找-----遞歸與非遞歸。(普信筆試)

        二叉排序樹

       紅黑樹(了解,深信服面試)set ,map内部使用。

       B-,B+樹,了解。

       鍵樹-----用二叉對表示,鍵的比對。

       哈希表------哈希函數編寫,解決沖突的方法4個(深信服面試);

内部排序:

        插入排序

        快排

        堆排序,堆操作。

        歸并排序------------各種形式的歸并(QQ筆試);

        基數排序。

        (記住各種排序的複雜度,最好會自己計算.)

其它算法:

       Strcpy, strcmp, strcat, memcpy, string類的編寫。

最大公約數,最小公倍數,素數,PI計算。

       連結清單環判斷,連結清單交點判斷。找連結清單中間結點,連結清單反序。(華為面試)

       八皇後------深信服筆試,(一個朋友的QQ面試)

STL:

      Vertor List set map, 使用與内部實作。

------------------------------------------------------------------------------

----------------------------------------

--------------------系統程式設計(windows or unix)------------------------------

(可以在windows 與UNIX中選擇一個,如果兩個都行就更好)

多程序

多線程

程序/線程間同步與通信.-------這個也很重要.

       CriticalSection, mutex, event, semaphore.差別與使用

       Unix下不懂.

網絡程式設計-------select()與setsockopt(),多點傳播,廣播.問得最多.

         最好能寫出所有常的SOCKET函數,和基本流程.

TCP/IP協定, TCP, IP ,UDP 頭的組成.各個控制位的作用.

位址分類,子網,子網路遮罩,多點傳播位址,廣播位址,網絡号,主機号.

MFC下的 SendMessage()與PostMessage()差別.

-----------------------------------------------------------------

資料庫:

        多個關系表設計,

        基本SQL語句的編寫,嵌套查詢,多表查詢

作業系統:

        P---V操作。生産者與消費者。用代碼實作。(華為面試);

         (A一天生産3個餅,B一天生産4個餅,C一天吃10個,現有100個餅,用PV操作

             程式設計,問多少天可以吃完)

    ------------------------項目----------------------------

如果你沒有項目,那你就把自己的課程設計也搬出來,不要怕别人笑你.千萬不要說大話,什

麼東西我很牛B,面試官幾句話可以試出你來.自己有料的地方一定要突出給他看.

項目分析:

系統功能-》整體架構-》自己負責的子產品-》遇到的困難-》有待改進的地方-》存在的瓶頸

,與解決方案。

     (個人認為按上面的順序分析項目,面試前一定要先自己對自己介紹下項目)

------------------------------面試細節-----------------------------------

1---面試進門後,一定要向面試官問好,等面試官示意坐下時才坐下. 面試完後, 要道謝,

如果對方和你握手,一定要站起來

   握手要有力,表達自己的誠意.(可以說:希望我有機會為公司效力…等等之類的話);

2---當問及工資問題時,(書面形式寫期望工資) 一定要說按公司薪水制度.

    原因: 剛從學校出對公司沒有貢獻,工資應該和貢獻成正比,按公司的薪水制度比較合

理.

3-----描術自己的強項??弱點???職業目标??,性格??自我介紹??為什麼要選擇做這個職位

/公司?? 用英語描術學校,家鄉(華為面試)

   (最好中英文都會表達,一定要作好這些準備)

4---你有什麼問題要問嗎????不要關涉工資和教育訓練.,要表明自己加入公司的決心.

(中大一學生的回答:是否進入公司就可以接手項目,個人覺得不錯)

6---越簡單的題目越是考你的細心.是以要注意細節,小心再小心.

7---說話要表現自我,千萬不能說自己

什麼很了不起….絕不可說大話,錯了就是錯了,要承認.

   不會的,也要直接說不會(也可請教),會的就直接說出來.,不要吞吞吐吐,不要不懂裝懂

.

   如果面試官說自己錯了,但自己發現不了,可以請教下面試官(能不能指點下我哪裡錯了

,我真看不出來),慮心學習,并改正.即使BS了,也要抵住壓力,不要就起身走人,要請教面試

官,錯在哪,應該怎麼做.??要順着面試官的意思,不要與其争執.一定要抗壓力,抵住.

8—成績問題:

       主要是針對和我一樣成績很差的同學。當面試官問到怎麼你的成績那麼差。你一定

要想到好的解圍方法。他不是看不起你而是給你施加壓力,看你在壓力面前怎麼樣解決問

題,能不能抵住壓力。

9---自信,一定要自信,但不是自認清高。

    當問到你是哪個學校的,“汕頭大學”這四個字要說響亮點。

    不要怕周圍的人是什麼大的,而我們是汕大的,再不說扇死你。

--

    有一個目标,我要在畢業後兩年内完成

    無論結果怎麼樣,我都會一直堅持下去

繼續閱讀