字節跳動面試題+答案,答對了30+


1、變量a是一個64位有符號的整數,初始值用16進制表示為:0x7FFFFFFFFFFFFFFF;變量b是一個64位有符號的整數,初始值用16進制表示為:0x8000000000000000。則a+b的結果用10進制表示為多少?

A.1
B.-1
C.263+262+…+22+21+2^0
D.–(263+262+…+22+21+2^0)

2、TCP建立連接的三次握手中,第二次握手發送的包會包含的標記,最正確的描述是?

A.ACK
B.SYN,ACK
C.SYN,PSH
D.SYN

3、棧是先進后出的數據結構。給定一個大小為3的初始狀態為空的棧,已知一組數據經過這個棧后,最終的數據順序依次為:1 3 2 4 ,問原始的進棧數據不可能是以下的那組?

A.2 3 1 4
B.1 4 2 3
C.4 2 3 1
D.3 1 2 4

4、電路中其中三個門電路非門,與門,或門的示意圖及性質分別如下所示:
非門,使輸入的電平編程相反電平:
 
與門,使輸入兩個高電平,輸出高電平,其他情況下輸出低電平:
 
或門。當且僅當輸入兩個低電平時,輸出低電平,否則輸出高電平:
 
現在對以下的電路中的 A 和 B 引腳分別持續輸入一個高電平( 1 )和一個低電平( 0 ),問最終電路的引腳 C 、 D 、 E 、 F 分別輸出的電平是什么?
 
A.C=0,D=1,E=0,F=1
B.C=1,D=1,E=1,F=0
C.C=1,D=1,E=0,F=1
D.C=0,D=0,E=0,F=1

5、操作系統中可以使用LRU(least recently used)內存淘汰舊數據的策略,如果內存需要加載新數據但空間又不足,則會按照最近訪問時間進行排序,並將最老的數據淘汰,假設現在內存空間大小為5,原本內存中沒有數據,對內存中數據的訪問順序如下:1,2,5,3,4,6,1,4,3,6,7,8,3,9

A.缺頁次數:9
B.缺頁次數:4
C.缺頁次數:10
D.缺頁次數:5

6、下面的程序中, int32-t 表示一個有符號的 32 位整數,程序的入口是 main 函數,問最終 res 的結果是多少?
 
A.–(231+230+…+22+21+2^0)
B.0
C.-1
D.程序會死循環

7、給定一個如下所示的圖,圖中的邊代表了兩個節點間的距離。如果使用迪傑斯特拉算法對節點 1 和節點 8 求最短路徑,則當完成計算時,算得節點1 到節點 8 的最短路徑是?同時當完成節點 1 到節點 8 的最短路徑計算時,節點 1 到哪些節點(除了 1 和 8 )的最短路徑也已經計算完畢?( )

8、x86 CPU在實模式下解釋代碼時看到一個地址為2330H:5041H,請問它最終在內存中要找的地址是多少?

A.28341H
B.5374H
C.52740H
D.7371H

9、有三個程序J1,J2,J3。程序在單核CPU執行時,三個程序需要的資源如下所示:
 
優先級高的程序可以搶占優先級低的程序的CPU,但不能搶占IO。問當所有任務執行完畢時,共消耗的時間是?

A.170ms
B.160ms
C.120ms
D.130ms

 

 

 

 

 

答案僅供參考

1、答案解析:正確答案: B  
(1)a+b的16進制表示為:OxFFFFFFFFFFFFFFF(16位F),轉為2進制為111……111(64位1,每個F->4位2)。
(2)有符號數:是針對二進制來講的。用最高位作為符號位,“0”代表“+”,“1”代表“-”。所以a+b的結果是一個負數。
(3)計算機中負數是以補碼的形式保存的,將補碼轉換成原碼的計算方式如下:
        ①. 對於正數,原碼與補碼相同。
        ②.對於負數,將補碼除符號位之外,按位取反,末位加1,即得到原碼。
(4)a + b = 111……111(64位1)
          取反:100……000(1位1,后面63位0)
          加一:

  10進制:-1。

2、答案解析:正確答案: B

3、答案解析:正確答案: C
注意棧的大小為3

4、答案解析:正確答案: D

5、答案解析:正確答案: C  
內存空間5,所以前5個都是缺頁的,因為內存空間中並沒有這五個,然后6置換1,1置換2,然后4.3.6都有不用置換,7置換5,8置換4,3有了,然后9置換3,總共十次。

6、答案解析:正確答案: D
以char為例
f(1,0): 
        a=2  b=-1 
        a=3  b=-2 
        … 
        a=127 b=-126 
        a=128 b=-127  溢出–>a=-128 b=-127     char范圍:-128~127        
 return a+b:-128-127實際上是1(char范圍),繼續循環

而原例為int_32t,臨界情況 a+b:      -232+(-232+1)=1,也繼續循環。

因此死循環。

7、答案解析:正確答案: C
初始狀態:路徑長度0:(1)
路徑長度1:(1,5)
路徑長度2:(1,3)
路徑長度3:(1,3,4),(1,2)
路徑長度4:(1,5,8)
節點1到8的最短路徑長度為4;    2,3,4,5節點的最短路徑已經計算完畢;  其中到5節點的最短路徑最小為1;

應該選C,感覺出題人玩文字游戲把自己繞進去了

8、答案解析:正確答案: A
實模式下內存空間的訪問
8086處理器(CPU)內的寄存器都是16位的,地址線上的地址由CPU提供。CPU用兩個16位的值合成一個20位的值:將一個16位的值乘以16(相當於這個16位的值保存在20位寄存器的低16位中,然后將低16位往高位移動了4位)再加上另一個16位的值。將這個由2個16位合成的值提供給20根地址線作為訪問內存的地址值。被乘以16的那個值被稱為段基址,沒有被乘以16的那個值被稱為偏移地址。

CPU在實模式下,段寄存器中的值就是段基址,如果想要通過匯編程序訪問某個內存單元,那么就需要指定一個段寄存器和一個偏移地址或以“段基址值:偏移地址值”的格式。CPU會將段寄存器的值乘以16再與偏移地址相加后,才將這個結果提供給地址線;用段基址和偏移地址的形式給出的表達式,CPU也會給段基址乘以16與偏移地址相加后,才將這個結果提供給地址線。

Figure 2. 實模式下訪問內存(得出內存地址)的方式
這就是說,在匯編程序中,得用段基址:偏移地址的方式訪問內存,因為CPU形成內存地址的方式是“段基址* 16 + 偏移地址”。
按照“段:偏移地址”的方式訪問內存是CPU對內存的一種管理方式

9、答案解析:正確答案: D
因為優先級高的程序可以搶占優先級低的程序的CPU,但不能搶占IO,
所以J1在CPU之后不能搶占J2的IO,J2在IO之后可以搶占J3的CPU。

CPU:J1 40ms + J3 10ms + J2 20ms +J1 20ms
IO:J2 50ms + J1 60ms + J3 20ms

所以共消耗時間為130ms,選D。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM