• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            麒麟子

            ~~

            導(dǎo)航

            <2010年12月>
            2829301234
            567891011
            12131415161718
            19202122232425
            2627282930311
            2345678

            統(tǒng)計(jì)

            常用鏈接

            留言簿(12)

            隨筆分類

            隨筆檔案

            Friends

            WebSites

            積分與排名

            最新隨筆

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            [導(dǎo)入]各大公司面試題(程序)

            有些題寫得不完整,答案也不完整.我也不知道原理是什么樣子,所以無法改.要看的同學(xué)就跳過去吧.如果有好的建議,可以回帖說明.謝謝!

            雖然都是基礎(chǔ),卻是比較重要的部分.

            一:?jiǎn)柎痤}:
            1.-1,2,7,28,,126請(qǐng)問28和126中間那個(gè)數(shù)是什么?為什么?
            第一題的答案應(yīng)該是4^3-1=63
            規(guī)律是n^3-1(當(dāng)n為偶數(shù)0,2,4)
                  n^3+1(當(dāng)n為奇數(shù)1,3,5)
            答案:63
            2.用兩個(gè)棧實(shí)現(xiàn)一個(gè)隊(duì)列的功能?要求給出算法和思路!
            設(shè)2個(gè)棧為A,B, 一開始均為空.

            入隊(duì):
            將新元素push入棧A;

            出隊(duì):
            (1)判斷棧B是否為空;
            (2)如果不為空,則將棧A中所有元素依次pop出并push到棧B;
            (3)將棧B的棧頂元素pop出;

            這樣實(shí)現(xiàn)的隊(duì)列入隊(duì)和出隊(duì)的平攤復(fù)雜度都還是O(1), 比上面的幾種方法要好。

            3.在c語言
            庫函數(shù)中將一個(gè)字符轉(zhuǎn)換成整型的函數(shù)是atool()嗎,這個(gè)函數(shù)的原型是什么?
            函數(shù)名: atol
            功 能: 把字符串轉(zhuǎn)換成長(zhǎng)整型數(shù)
            用 法: long atol(const char *nptr);
            程序例:
            #include <stdlib.h>
            #include <stdio.h>
            int main(void)
            {
            long l;
            char *str = "98765432";

            l = atol(lstr);
            printf("string = %s integer = %ld\n", str, l);
            return(0);
            }
            二;簡(jiǎn)答題
            1.對(duì)于一個(gè)頻繁使用的短小函數(shù),在C語言中應(yīng)用什么實(shí)現(xiàn),在C++中應(yīng)用什么實(shí)現(xiàn)?
            c用宏定義,c++用inline

            2.直接鏈接兩個(gè)信令點(diǎn)的一組鏈路稱作什么?
            PPP點(diǎn)到點(diǎn)連接
             
            3.接入網(wǎng)用的是什么接口?
             
            4.voip都用了那些協(xié)議?
             
            5.軟件測(cè)試都有那些種類?
            黑盒:針對(duì)系統(tǒng)功能的測(cè)試    白合:測(cè)試函數(shù)功能,各函數(shù)接口
             
            6.確定模塊的功能和模塊的接口是在軟件設(shè)計(jì)的那個(gè)隊(duì)段完成的?
            概要設(shè)計(jì)階段
             
            7.enum string
                {
                x1,
                x2,
                x3=10,
                x4,
                x5,
                }x;
               問x= 0x801005,0x8010f4  ;
             
            8.unsigned char *p1;
                unsigned long *p2;
                p1=(unsigned char *)0x801000;
                p2=(unsigned long *)0x810000;
                請(qǐng)問p1+5=  ;
                    p2+5=  ;

            三.選擇題:
              1.Ethternet鏈接到Internet用到以下那個(gè)協(xié)議?
              A.HDLC;B.ARP;C.UDP;D.TCP;E.ID
              2.屬于網(wǎng)絡(luò)層協(xié)議的是:
              A.TCP;B.IP;C.ICMP;D.X.25
              3.Windows消息調(diào)度機(jī)制是:
              A.指令隊(duì)列;B.指令堆棧;C.消息隊(duì)列;D.消息堆棧;
              4.unsigned short hash(unsigned short key)
                {
                  return (key>>)%256
                }
               請(qǐng)問hash(16),hash(256)的值分別是:
              A.1.16;B.8.32;C.4.16;D.1.32


            四.找錯(cuò)題:
              1.請(qǐng)問下面程序有什么錯(cuò)誤?
               int a[60][250][1000],i,j,k;
               for(k=0;k<=1000;k++)
                for(j=0;j<250;j++)
                 for(i=0;i<60;i++)
                  a[i][j][k]=0;
            把循環(huán)語句內(nèi)外換一下
              2.#define Max_CB 500
                void LmiQueryCSmd(Struct MSgCB * pmsg)
                 {
                 unsigned char ucCmdNum;
                 ......
               
                 for(ucCmdNum=0;ucCmdNum<Max_CB;ucCmdNum++)
                  {
                  ......;
                  }
            死循環(huán)
               3.以下是求一個(gè)數(shù)的平方的程序,請(qǐng)找出錯(cuò)誤:
                #define SQUARE(a)((a)*(a))
                int a=5;
                int b;
                b=SQUARE(a++);
               4.typedef unsigned char BYTE
                 int examply_fun(BYTE gt_len; BYTE *gt_code)
                  { 
                  BYTE *gt_buf;
                  gt_buf=(BYTE *)MALLOC(Max_GT_Length);
                  ......
                  if(gt_len>Max_GT_Length)
                    {
                    return GT_Length_ERROR; 
                    }
                    .......
                  }
            五.問答題:
               1.IP Phone的原理是什么?
            IPV6
               2.TCP/IP通信建立的過程怎樣,端口有什么作用?
            三次握手,確定是哪個(gè)應(yīng)用程序使用該協(xié)議
               3.1號(hào)信令和7號(hào)信令有什么區(qū)別,我國某前廣泛使用的是那一種?
               4.列舉5種以上的電話新業(yè)務(wù)?


                       下面是微軟亞洲面試題

            1.進(jìn)程和線程的差別。
            線程是指進(jìn)程內(nèi)的一個(gè)執(zhí)行單元,也是進(jìn)程內(nèi)的可調(diào)度實(shí)體.
            與進(jìn)程的區(qū)別:
            (1)調(diào)度:線程作為調(diào)度和分配的基本單位,進(jìn)程作為擁有資源的基本單位
            (2)并發(fā)性:不僅進(jìn)程之間可以并發(fā)執(zhí)行,同一個(gè)進(jìn)程的多個(gè)線程之間也可并發(fā)執(zhí)行
            (3)擁有資源:進(jìn)程是擁有資源的一個(gè)獨(dú)立單位,線程不擁有系統(tǒng)資源,但可以訪問隸屬于
            進(jìn)程的資源.
            (4)系統(tǒng)開銷:在創(chuàng)建或撤消進(jìn)程時(shí),由于系統(tǒng)都要為之分配和回收資源,導(dǎo)致系統(tǒng)的開銷
            明顯大于創(chuàng)建或撤消線程時(shí)的開銷。
            2.測(cè)試方法
            人工測(cè)試:個(gè)人復(fù)查、抽查和會(huì)審
            機(jī)器測(cè)試:黑盒測(cè)試和白盒測(cè)試

            2.Heap與stack的差別。
            Heap是堆,stack是棧。
            Stack的空間由操作系統(tǒng)自動(dòng)分配/釋放,Heap上的空間手動(dòng)分配/釋放。
            Stack空間有限,Heap是很大的自由存儲(chǔ)區(qū)
            C中的malloc函數(shù)分配的內(nèi)存空間即在堆上,C++中對(duì)應(yīng)的是new操作符。
            程序在編譯期對(duì)變量和函數(shù)分配內(nèi)存都在棧上進(jìn)行,且程序運(yùn)行過程中函數(shù)調(diào)用時(shí)參數(shù)的傳
            遞也在棧上進(jìn)行
            3.Windows下的內(nèi)存是如何管理的?
            4.介紹.Net和.Net的安全性。
            5.客戶端如何訪問.Net組件實(shí)現(xiàn)Web Service?
            6.C/C++編譯器中虛表是如何完成的?
            7.談?wù)凜OM的線程模型。然后討論進(jìn)程內(nèi)/外組件的差別。
            8.談?wù)処A32下的分頁機(jī)制
            小頁(4K)兩級(jí)分頁模式,大頁(4M)一級(jí)
            9.給兩個(gè)變量,如何找出一個(gè)帶環(huán)單鏈表中是什么地方出現(xiàn)環(huán)的?
            一個(gè)遞增一,一個(gè)遞增二,他們指向同一個(gè)接點(diǎn)時(shí)就是環(huán)出現(xiàn)的地方
            10.在IA32中一共有多少種辦法從用戶態(tài)跳到內(nèi)核態(tài)?
            通過調(diào)用門,從ring3到ring0,中斷從ring3到ring0,進(jìn)入vm86等等
            11.如果只想讓程序有一個(gè)實(shí)例運(yùn)行,不能運(yùn)行兩個(gè)。像winamp一樣,只能開一個(gè)窗口,
            怎樣實(shí)現(xiàn)?
            用內(nèi)存映射或全局原子(互斥變量)、查找窗口句柄..
            FindWindow,互斥,寫標(biāo)志到文件或注冊(cè)表,共享內(nèi)存。.  
            12.如何截取鍵盤的響應(yīng),讓所有的‘a(chǎn)’變成‘b’?
            鍵盤鉤子SetWindowsHookEx
             13.Apartment在COM中有什么用?為什么要引入?
             14.存儲(chǔ)過程是什么?有什么用?有什么優(yōu)點(diǎn)?
            我的理解就是一堆sql的集合,可以建立非常復(fù)雜的查詢,編譯運(yùn)行,所以運(yùn)行一次后,以
            后再運(yùn)行速度比單獨(dú)執(zhí)行SQL快很多
             15.Template有什么特點(diǎn)?什么時(shí)候用?
            16.談?wù)刉indows DNA結(jié)構(gòu)的特點(diǎn)和優(yōu)點(diǎn)。



                       網(wǎng)絡(luò)編程中設(shè)計(jì)并發(fā)服務(wù)器的問題




            網(wǎng)絡(luò)編程中設(shè)計(jì)并發(fā)服務(wù)器,使用多進(jìn)程 與 多線程 ,請(qǐng)問有什么區(qū)別?
            1,進(jìn)程:子進(jìn)程是父進(jìn)程的復(fù)制品。子進(jìn)程獲得父進(jìn)程數(shù)據(jù)空間、堆和棧的復(fù)制品。
            2,線程:相對(duì)與進(jìn)程而言,線程是一個(gè)更加接近與執(zhí)行體的概念,它可以與同進(jìn)程的其他
            線程共享數(shù)據(jù),但擁有自己的棧空間,擁有獨(dú)立的執(zhí)行序列。
            兩者都可以提高程序的并發(fā)度,提高程序運(yùn)行效率和響應(yīng)時(shí)間。
            線程和進(jìn)程在使用上各有優(yōu)缺點(diǎn):線程執(zhí)行開銷小,但不利于資源管理和保護(hù);而進(jìn)程正
            相反。同時(shí),線程適合于在SMP機(jī)器上運(yùn)行,而進(jìn)程則可以跨機(jī)器遷移。



                               思科面試題目
            1. 用宏定義寫出swap(x,y)
            #define swap(x, y)\
            x = x + y;\
            y = x - y;\
            x = x - y;
            2.數(shù)組a[N],存放了1至N-1個(gè)數(shù),其中某個(gè)數(shù)重復(fù)一次。寫一個(gè)函數(shù),找出被重復(fù)的數(shù)字
            .時(shí)間復(fù)雜度必須為o(N)函數(shù)原型:
            int do_dup(int a[],int N)
            3 一語句實(shí)現(xiàn)x是否為2的若干次冪的判斷
            int i = 512;
            cout << boolalpha << ((i & (i - 1)) ? false : true) << endl;
            4.unsigned int intvert(unsigned int x,int p,int n)實(shí)現(xiàn)對(duì)x的進(jìn)行轉(zhuǎn)換,p為起始轉(zhuǎn)化
            位,n為需要轉(zhuǎn)換的長(zhǎng)度,假設(shè)起始點(diǎn)在右邊.如x=0b0001 0001,p=4,n=3轉(zhuǎn)換后x=0b0110 00
            01
            unsigned int intvert(unsigned int x,int p,int n){
            unsigned int _t = 0;
            unsigned int _a = 1;
            for(int i = 0; i < n; ++i){
            _t |= _a;
            _a = _a << 1;
            }
            _t = _t << p;
            x ^= _t;
            return x;
            }


                          慧通面試題目:



            什么是預(yù)編譯,何時(shí)需要預(yù)編譯:
            1、總是使用不經(jīng)常改動(dòng)的大型代碼體。
            2、程序由多個(gè)模塊組成,所有模塊都使用一組標(biāo)準(zhǔn)的包含文件和相同的編譯選項(xiàng)。在這
            種情況下,可以將所有包含文件預(yù)編譯為一個(gè)預(yù)編譯頭。
            char * const p;
            char const * p
            const char *p

            上述三個(gè)有什么區(qū)別?
            char * const p; //常量指針,p的值不可以修改
            char const * p;//指向常量的指針,指向的常量值不可以改
            const char *p; //和char const *p

            char str1[] = "abc";
            char str2[] = "abc";

            const char str3[] = "abc";
            const char str4[] = "abc";

            const char *str5 = "abc";
            const char *str6 = "abc";

            char *str7 = "abc";
            char *str8 = "abc";


            cout << ( str1 == str2 ) << endl;
            cout << ( str3 == str4 ) << endl;
            cout << ( str5 == str6 ) << endl;
            cout << ( str7 == str8 ) << endl;

            結(jié)果是:0 0 1 1
            解答:str1,str2,str3,str4是數(shù)組變量,它們有各自的內(nèi)存空間;
            而str5,str6,str7,str8是指針,它們指向相同的常量區(qū)域。


            3. 以下代碼中的兩個(gè)sizeof用法有問題嗎?[C易]
            void UpperCase( char str[] ) // 將 str 中的小寫字母轉(zhuǎn)換成大寫字母
            {
                for( size_t i=0; i<sizeof(str)/sizeof(str[0]); ++i )
                    if( 'a'<=str[i] && str[i]<='z' )
                        str[i] -= ('a'-'A' );
            }
            char str[] = "aBcDe";
            cout << "str字符長(zhǎng)度為: " << sizeof(str)/sizeof(str[0]) << endl;
            UpperCase( str );
            cout << str << endl;

            答:函數(shù)內(nèi)的sizeof有問題。根據(jù)語法,sizeof如用于數(shù)組,只能測(cè)出靜態(tài)數(shù)組的大小,
            無法檢測(cè)動(dòng)態(tài)分配的或外部數(shù)組大小。函數(shù)外的str是一個(gè)靜態(tài)定義的數(shù)組,因此其大小為
            4.函數(shù)內(nèi)的str實(shí)際只是一個(gè)指向字符串的指針,沒有任何額外的與數(shù)組相關(guān)的信息,因
            此sizeof作用于上只將其當(dāng)指針看,一個(gè)指針為4個(gè)字節(jié),因此返回4。

            一個(gè)32位的機(jī)器,該機(jī)器的指針是多少位
            指針是多少位只要看地址總線的位數(shù)就行了。80386以后的機(jī)子都是32的數(shù)據(jù)總線。所以指
            針的位數(shù)就是4個(gè)字節(jié)了。

            main()
            {
              int a[5]={1,2,3,4,5};
               int *ptr=(int *)(&a+1);

               printf("%d,%d",*(a+1),*(ptr-1));
            }
            輸出:2,5
            *(a+1)就是a[1],*(ptr-1)就是a[4],執(zhí)行結(jié)果是2,5
            &a+1不是首地址+1,系統(tǒng)會(huì)認(rèn)為加一個(gè)a數(shù)組的偏移,是偏移了一個(gè)數(shù)組的大小(本例是5
            個(gè)int)
            int *ptr=(int *)(&a+1);
            則ptr實(shí)際是&(a[5]),也就是a+5
            原因如下:
            &a是數(shù)組指針,其類型為 int (*)[5];
            而指針加1要根據(jù)指針類型加上一定的值,
            不同類型的指針+1之后增加的大小不同
            a是長(zhǎng)度為5的int數(shù)組指針,所以要加 5*sizeof(int)
            所以ptr實(shí)際是a[5]
            但是prt與(&a+1)類型是不一樣的(這點(diǎn)很重要)
            所以prt-1只會(huì)減去sizeof(int*)
            a,&a的地址是一樣的,但意思不一樣,a是數(shù)組首地址,也就是a[0]的地址,&a是對(duì)象(數(shù)
            組)首地址,a+1是數(shù)組下一元素的地址,即a[1],&a+1是下一個(gè)對(duì)象的地址,即a[5].


            5.請(qǐng)問以下代碼有什么問題:
            int  main()
            {
            char a;
            char *str=&a;
            strcpy(str,"hello");
            printf(str);
            return 0;
            }
            沒有為str分配內(nèi)存空間,將會(huì)發(fā)生異常
            問題出在將一個(gè)字符串復(fù)制進(jìn)一個(gè)字符變量指針?biāo)傅刂贰km然可以正確輸出結(jié)果,但因
            為越界進(jìn)行內(nèi)在讀寫而導(dǎo)致程序崩潰。

            char* s="AAA";
            printf("%s",s);
            s[0]='B';
            printf("%s",s);
            有什么錯(cuò)?
            "AAA"是字符串常量。s是指針,指向這個(gè)字符串常量,所以聲明s的時(shí)候就有問題。
            cosnt char* s="AAA";
            然后又因?yàn)槭浅A浚詫?duì)是s[0]的賦值操作是不合法的。
            6、寫一個(gè)“標(biāo)準(zhǔn)”宏,這個(gè)宏輸入兩個(gè)參數(shù)并返回較小的一個(gè)。
            .#define Min(X, Y) ((X)>(Y)?(Y):(X))//結(jié)尾沒有;
            7、嵌入式系統(tǒng)中經(jīng)常要用到無限循環(huán),你怎么用C編寫死循環(huán)。
            while(1){}或者for(;;)
            8、關(guān)鍵字static的作用是什么?
            定義靜態(tài)變量
            9、關(guān)鍵字const有什么含意?
            表示常量不可以修改的變量。
            10、關(guān)鍵字volatile有什么含意?并舉出三個(gè)不同的例子?
            提示編譯器對(duì)象的值可能在編譯器未監(jiān)測(cè)到的情況下改變。


            int (*s[10])(int) 表示的是什么啊
            int (*s[10])(int) 函數(shù)指針數(shù)組,每個(gè)指針指向一個(gè)int func(int param)的函數(shù)。


            11.有以下表達(dá)式:
            int a=248; b=4;int const c=21;const int *d=&a;
            int *const e=&b;int const *f const =&a;
            請(qǐng)問下列表達(dá)式哪些會(huì)被編譯器禁止?為什么?
            *c=32;d=&b;*d=43;e=34;e=&a;f=0x321f;
            *c 這是個(gè)什么東東,禁止
            *d 說了是const, 禁止
            e = &a 說了是const 禁止
            const *f const =&a; 禁止
            12.交換兩個(gè)變量的值,不使用第三個(gè)變量。即a=3,b=5,交換之后a=5,b=3;
            有兩種解法, 一種用算術(shù)算法, 一種用^(異或)
            a = a + b;
            b = a - b;
            a = a - b;
            or
            a = a^b;// 只能對(duì)int,char..
            b = a^b;
            a = a^b;
            or
            a ^= b ^= a;
            13.c和c++中的struct有什么不同?
            c和c++中struct的主要區(qū)別是c中的struct不可以含有成員函數(shù),而c++中的struct可以。
            c++中struct和class的主要區(qū)別在于默認(rèn)的存取權(quán)限不同,struct默認(rèn)為public,而clas
            s默認(rèn)為private
            14.#include <stdio.h>
              #include <stdlib.h>
              void getmemory(char *p)
              {
                p=(char *) malloc(100);
                strcpy(p,"hello world");
              }
              int main( )
              {
                char *str=NULL;
                getmemory(str);
                printf("%s/n",str);
                free(str);
                return 0;
               }
            程序崩潰,getmemory中的malloc 不能返回動(dòng)態(tài)內(nèi)存, free()對(duì)str操作很危險(xiǎn)
            15.char szstr[10];
              strcpy(szstr,"0123456789");
              產(chǎn)生什么結(jié)果?為什么?
              長(zhǎng)度不一樣,會(huì)造成非法的OS
            16.列舉幾種進(jìn)程的同步機(jī)制,并比較其優(yōu)缺點(diǎn)。
               原子操作
            信號(hào)量機(jī)制
               自旋鎖
               管程,會(huì)合,分布式系統(tǒng)

            17.進(jìn)程之間通信的途徑
            共享存儲(chǔ)系統(tǒng)
            消息傳遞系統(tǒng)
            管道:以文件系統(tǒng)為基礎(chǔ)
            18.進(jìn)程死鎖的原因
            資源競(jìng)爭(zhēng)及進(jìn)程推進(jìn)順序非法
            19.死鎖的4個(gè)必要條件
            互斥、請(qǐng)求保持、不可剝奪、環(huán)路
            20.死鎖的處理
            鴕鳥策略、預(yù)防策略、避免策略、檢測(cè)與解除死鎖
            21.   操作系統(tǒng)中進(jìn)程調(diào)度策略有哪幾種?
            FCFS(先來先服務(wù)),優(yōu)先級(jí),時(shí)間片輪轉(zhuǎn),多級(jí)反饋
            22.類的靜態(tài)成員和非靜態(tài)成員有何區(qū)別?
            類的靜態(tài)成員每個(gè)類只有一個(gè),非靜態(tài)成員每個(gè)對(duì)象一個(gè)
            23.純虛函數(shù)如何定義?使用時(shí)應(yīng)注意什么?
            virtual void f()=0;
            是接口,子類必須要實(shí)現(xiàn)
            24.數(shù)組和鏈表的區(qū)別
            數(shù)組:數(shù)據(jù)順序存儲(chǔ),固定大小
            連表:數(shù)據(jù)可以隨機(jī)存儲(chǔ),大小可動(dòng)態(tài)改變

            25.ISO的七層模型是什么?tcp/udp是屬于哪一層?tcp/udp有何優(yōu)缺點(diǎn)?
            應(yīng)用層
            表示層
            會(huì)話層
            運(yùn)輸層
            網(wǎng)絡(luò)層
            物理鏈路層
            物理層
            tcp /udp屬于運(yùn)輸層
            TCP 服務(wù)提供了數(shù)據(jù)流傳輸、可靠性、有效流控制、全雙工操作和多路復(fù)用技術(shù)等。
            與 TCP 不同, UDP 并不提供對(duì) IP 協(xié)議的可靠機(jī)制、流控制以及錯(cuò)誤恢復(fù)功能等。由于
            UDP 比較簡(jiǎn)單, UDP 頭包含很少的字節(jié),比 TCP 負(fù)載消耗少。
            tcp: 提供穩(wěn)定的傳輸服務(wù),有流量控制,缺點(diǎn)是包頭大,冗余性不好
            udp: 不提供穩(wěn)定的服務(wù),包頭小,開銷小  


            26.(void *)ptr 和 (*(void**))ptr的結(jié)果是否相同?其中ptr為同一個(gè)指針
            .(void *)ptr 和 (*(void**))ptr值是相同的
            27.int main()
               {
                int x=3;
                printf("%d",x);
                return 1;
              
               }
            問函數(shù)既然不會(huì)被其它函數(shù)調(diào)用,為什么要返回1?
            mian中,c標(biāo)準(zhǔn)認(rèn)為0表示成功,非0表示錯(cuò)誤。具體的值是某中具體出錯(cuò)信息


            28,要對(duì)絕對(duì)地址0x100000賦值,我們可以用
            (unsigned int*)0x100000 = 1234;
            那么要是想讓程序跳轉(zhuǎn)到絕對(duì)地址是0x100000去執(zhí)行,應(yīng)該怎么做?
            *((void (*)( ))0x100000 ) ( );
            首先要將0x100000強(qiáng)制轉(zhuǎn)換成函數(shù)指針,即:
            (void (*)())0x100000
            然后再調(diào)用它:
            *((void (*)())0x100000)();
            用typedef可以看得更直觀些:
            typedef void(*)() voidFuncPtr;
            *((voidFuncPtr)0x100000)();
            29,已知一個(gè)數(shù)組table,用一個(gè)宏定義,求出數(shù)據(jù)的元素個(gè)數(shù)
            #define NTBL
            #define NTBL (sizeof(table)/sizeof(table[0]))

            面試題: 線程與進(jìn)程的區(qū)別和聯(lián)系? 線程是否具有相同的堆棧? dll是否有獨(dú)立的堆棧?

            進(jìn)程是死的,只是一些資源的集合,真正的程序執(zhí)行都是線程來完成的,程序啟動(dòng)的時(shí)候
            操作系統(tǒng)就幫你創(chuàng)建了一個(gè)主線程。

            每個(gè)線程有自己的堆棧。
            DLL中有沒有獨(dú)立的堆棧,這個(gè)問題不好回答,或者說這個(gè)問題本身是否有問題。因?yàn)镈LL
            中的代碼是被某些線程所執(zhí)行,只有線程擁有堆棧,如果DLL中的代碼是EXE中的線程所調(diào)
            用,那么這個(gè)時(shí)候是不是說這個(gè)DLL沒有自己獨(dú)立的堆棧?如果DLL中的代碼是由DLL自己創(chuàng)
            建的線程所執(zhí)行,那么是不是說DLL有獨(dú)立的堆棧?

            以上講的是堆棧,如果對(duì)于堆來說,每個(gè)DLL有自己的堆,所以如果是從DLL中動(dòng)態(tài)分配的
            內(nèi)存,最好是從DLL中刪除,如果你從DLL中分配內(nèi)存,然后在EXE中,或者另外一個(gè)DLL中
            刪除,很有可能導(dǎo)致程序崩潰


            unsigned short A = 10;
            printf("~A = %u\n", ~A);

            char c=128;
            printf("c=%d\n",c);

            輸出多少?并分析過程
            第一題,~A =0xfffffff5,int值 為-11,但輸出的是uint。所以輸出4294967285
            第二題,c=0x10,輸出的是int,最高位為1,是負(fù)數(shù),所以它的值就是0x00的補(bǔ)碼就是12
            30,所以輸出-128。
            這兩道題都是在考察二進(jìn)制向int或uint轉(zhuǎn)換時(shí)的最高位處理。

            分析下面的程序:
            void GetMemory(char **p,int num)
            {
                *p=(char *)malloc(num);
               
            }       
            int main()
            {
                char *str=NULL;
               
                GetMemory(&str,100);
               
                strcpy(str,"hello");
               
                free(str);
               
                if(str!=NULL)
                {
                    strcpy(str,"world");
                }   
                   
                printf("\n str is %s",str);
                getchar();
            }   
            問輸出結(jié)果是什么?希望大家能說說原因,先謝謝了
            輸出str is world。
            free 只是釋放的str指向的內(nèi)存空間,它本身的值還是存在的.
            所以free之后,有一個(gè)好的習(xí)慣就是將str=NULL.
            此時(shí)str指向空間的內(nèi)存已被回收,如果輸出語句之前還存在分配空間的操作的話,這段存儲(chǔ)
            空間是可能被重新分配給其他變量的,
            盡管這段程序確實(shí)是存在大大的問題(上面各位已經(jīng)說得很清楚了),但是通常會(huì)打印出
            world來。
            這是因?yàn)椋M(jìn)程中的內(nèi)存管理一般不是由操作系統(tǒng)完成的,而是由庫函數(shù)自己完成的。

            當(dāng)你malloc一塊內(nèi)存的時(shí)候,管理庫向操作系統(tǒng)申請(qǐng)一塊空間(可能會(huì)比你申請(qǐng)的大一些
            ),然后在這塊空間中記錄一些管理信息(一般是在你申請(qǐng)的內(nèi)存前面一點(diǎn)),并將可用
            內(nèi)存的地址返回。但是釋放內(nèi)存的時(shí)候,管理庫通常都不會(huì)將內(nèi)存還給操作系統(tǒng),因此你
            是可以繼續(xù)訪問這塊地址的。

            char a[10],strlen(a)為什么等于15?運(yùn)行的結(jié)果

            #include "stdio.h"
            #include "string.h"

            void main()
            {

            char aa[10];
            printf("%d",strlen(aa));
            }

            sizeof()和初不初始化,沒有關(guān)系;
            strlen()和初始化有關(guān)。


            char (*str)[20];/*str是一個(gè)數(shù)組指針,即指向數(shù)組的指針.*/
            char *str[20];/*str是一個(gè)指針數(shù)組,其元素為指針型數(shù)據(jù).*/

            long a=0x801010;
            a+5=?
            0x801010用二進(jìn)制表示為:“1000 0000 0001 0000 0001 0000”,十進(jìn)制的值為8392720
            ,再加上5就是8392725.


            文章來源:http://ly-weiwei.blog.163.com/blog/static/7297528320081129389103

            posted on 2008-12-29 15:08 麒麟子 閱讀(473) 評(píng)論(0)  編輯 收藏 引用


            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            久久精品国产亚洲麻豆| 99精品久久精品一区二区| 精品久久久久中文字幕一区| 一级做a爱片久久毛片| 久久无码人妻精品一区二区三区| 久久久久这里只有精品| 色婷婷综合久久久久中文 | 污污内射久久一区二区欧美日韩| 精品久久久久中文字| 亚洲欧美日韩久久精品| 久久久久亚洲AV无码专区体验| 狠狠色丁香婷婷久久综合不卡| 精品国产日韩久久亚洲| 97久久精品无码一区二区天美| 欧美午夜A∨大片久久| 9久久9久久精品| 久久婷婷国产剧情内射白浆| 伊人久久精品线影院| 久久久av波多野一区二区| 久久受www免费人成_看片中文| 青草影院天堂男人久久| 2020国产成人久久精品| 青青草国产97免久久费观看| 岛国搬运www久久| 91精品国产9l久久久久| 久久久久久亚洲AV无码专区| 日本五月天婷久久网站| 久久人人爽人爽人人爽av| 国产精品99久久久久久www| 97久久超碰国产精品2021| 久久精品无码午夜福利理论片| 欧美成人免费观看久久| 一本久久免费视频| 亚洲国产精品无码久久久久久曰 | 久久99热这里只有精品国产| 欧美午夜A∨大片久久| 久久久无码精品亚洲日韩软件| 久久se这里只有精品| 久久av免费天堂小草播放| 久久久久这里只有精品| 久久精品国产国产精品四凭|