程式設計師筆試題

2022-09-04 11:39:09 字數 3213 閱讀 9103

signed char a=0xe0;

unsigned int b=a;

unsigned char c=a;

下面說法正確的是:

a (a>0 )&&(b>0)為真 b c==a 為真 c b的16進製為0xffffffe0 d 都不對

答案:c

整形比較小於int的會擴寬的int再比較, 而有符號數擴寬填充符號位, 無符號數填充0, 導致擴寬後兩個整形的二進位制不再相等, 選擇c.

int main()

輸出結果是什麼?(32位環境,cpu為小端模式,所有引數用棧傳遞)

答案:1 0 2

1)無論32/64, long long都是8位元組整形, %d會將引數棧上的記憶體解釋為4位元組int, 所以會造成列印結果異常.

2)由於任何多位元組變數都要做記憶體對齊, 原則是自身長度與sizeof(int)間較小值, 所以3個long long在棧上是可以緊密排列的, 並且第乙個long long對齊在sizeof(int)對// 齊記憶體位址.

3)棧位址向低增長, 函式引數入棧從右向左, 所以第乙個long long是引數棧上最低位址的引數, 總共只需要1.5個long long就足以列印完3個%d.

4)小端情況下, 第乙個%d解釋了第乙個long long的低4位元組, 列印1. 第二個%d解釋了第乙個long long的高4位元組, 列印0. 第三個%d解釋了第二個long long的低4位元組, 列印2.

unsigned int a= 0x1234;

unsigned char b=*(unsigned char *)&a;

在32位大端模式處理器上變數b= ?

答案:0

unsigned int a= 0x1234; 其中int是4位元組, 補齊16進製表示為: 0x00 00 12 34

unsigned char b=*(unsigned char *)&a; 由於大端儲存, 所以上述int a變數的最低位址儲存的是

十六進製制表示中最左邊的1位元組, 為0x00.

4.某網際網路公司面試題:

雜湊表查詢不成功的平均查詢長度  雜湊表查詢不成功的平均查詢長度怎麼計算?

解答:先建好錶,然後可以算出每個位置不成功時的比較次數之和,再除以表空間個數! 

例如:雜湊函式為hash(x)=x mod 11,用線性探測,建立了雜湊表之後,如何求查詢不成功時的平均查詢長度!?

資料:33    1   13  12  34   38  27  22   -   -   -

成功次數:1     1    1    3    4    1    2    8

不成功次數:9     8    7    6    5    4    3    2    1    1    1

查詢成功時的平均查詢長度:asl=(1+1+1+3+4+1+2+8)/8 =47/8

查詢不成功時的平均查詢長度:asl=(9+8+7+6+5+4+3+2+1+1+1)/11

(注:求查詢不成功時的平均查詢長度,一般情況下分母為表長,但精確地講是表長的有效位個數。

例如對於字串來說,雜湊函式為hash(x)=x/2,x為字元的第乙個字母在字母表的序號,表長即使為16,該分母也應取14,因為最大的hash(z)=26/2=13,即只有0~13的14個有效位置有效。)

說明:第n個位置不成功時的比較次數為,第n個位置到第1個沒有資料位置的距離。

如:第0個位置到第1個沒有資料位置(8)的距離為9.

5.windows記憶體管理的機制以及優缺點

分頁儲存管理基本思想:

使用者程式的位址空間被劃分成若干固定大小的區域,稱為「頁」,相應地,記憶體空間分成若干個物理塊,頁和塊的大小相等。可將使用者程式的任一頁放在記憶體的任一塊中,實現了離散分配。

分段儲存管理基本思想:

將使用者程式位址空間分成若干個大小不等的段,每段可以定義一組相對完整的邏輯資訊。儲存分配時,以段為單位,段與段在記憶體中可以不相鄰接,也實現了離散分配。

段頁式儲存管理基本思想:

分頁系統能有效地提高記憶體的利用率,而分段系統能反映程式的邏輯結構,便於段的共享與保護,將分頁與分段兩種儲存方式結合起來,就形成了段頁式儲存管理方式。

在段頁式儲存管理系統中,作業的位址空間首先被分成若干個邏輯分段,每段都有自己的段號,然後再將每段分成若干個大小相等的頁。對於主存空間也分成大小相等的頁,主存的分配以頁為單位。

程式設計師按照分段系統的位址結構將位址分為段號與段內位移量,位址變換機構將段內位移量分解為頁號和頁內位移量。

為實現段頁式儲存管理,系統應為每個程序設定乙個段表,包括每段的段號,該段的頁表始址和頁表長度。每個段有自己的頁表,記錄段中的每一頁的頁號和存放在主存中的物理塊號

6.winsock建立連線的主要實現步驟?

伺服器端:socker()建立套接字,繫結(bind)並監聽(listen),用accept()

等待客戶端連線。

客戶端:socker()建立套接字,連線(connect)伺服器,連線上後使用send()和recv(

),在套接字上寫讀資料,直至資料交換完畢,closesocket()關閉套接字。

伺服器端:accept()發現有客戶端連線,建立乙個新的套接字,自身重新開始等待連

接。該新產生的套接字使用send()和recv()寫讀資料,直至資料交換完畢,closesock

et()關閉套接字。

7.ip組播有那些好處?

internet上產生的許多新的應用,特別是高頻寬的多**應用,帶來了頻寬的急劇

消耗和網路擁擠問題。組播是一種允許乙個或多個傳送者(組播源)傳送單一的資料報

到多個接收者(一次的,同時的)的網路技術。組播可以大大的節省網路頻寬,因為無

論有多少個目標位址,在整個網路的任何一條鏈路上只傳送單一的資料報。所以說組播

技術的核心就是針對如何節約網路資源的前提下保證服務質量

靜態連線庫就是把(lib)檔案中用到的函式**直接鏈結進目標程式,程式執行的時候不再需要其它的庫檔案;動態鏈結就是把呼叫的函式所在檔案模組(dll)和呼叫函式在檔案中的位置等資訊鏈結進目標程式,程式執行的時候再從dll中尋找相應函式**,因此需要相應dll檔案的支援。  

靜態鏈結庫與動態鏈結庫都是共享**的方式,如果採用靜態鏈結庫,則無論你願不願意,lib 中的指令都全部被直接包含在最終生成的 exe 檔案中了。但是若使用 dll,該 dll 不必被包含在最終 exe 檔案中,exe 檔案執行時可以「動態」地引用和解除安裝這個與 exe 獨立的 dll 檔案。靜態鏈結庫和動態鏈結庫的另外乙個區別在於靜態鏈結庫中不能再包含其他的動態鏈結庫或者靜態庫,而在動態鏈結庫中還可以再包含其他的動態或靜態鏈結庫

普通PHP程式設計師筆試題3

1.以下哪一句不會把 john 新增到 users 陣列?users john 成功把 john 新增到陣列 users。array add users,john 函式 array add 無定義。array push users,john 成功把 john 新增到陣列 users。users jo...

程式設計師筆試題 搜狐研發崗

一 判斷題 1.c語言中,int型別佔4個位元組。2.ipv4佔4個位元組,ipv6佔6個位元組。3.cpu占用的位址都是虛擬記憶體位址。還有六道記不起來了,都是一些很基礎的。二 不定項選擇題 1.c語言中,swith c c的型別可以是 byte,short,char,int 注意 long是不行...

騰訊 程式設計師 Java 筆試題目

可以在包頭加個字段表示資料的長度,驗證資料的長度值 或者將資料實體轉換為hashcode,利用一些資料驗證演算法 比如md5,是乙個將任意長度的資料字串轉化成短的固定長度的值的單向操作 vector 是執行緒安全的,arraylist不是執行緒安全的 在更多元素新增進來時會請求更大的空間 超過預定義...