牛客網試卷: 京東2019校招筆試Java開發工程師筆試題(1-)


1.在軟件開發過程中,我們可以采用不同的過程模型,下列有關 增量模型描述正確的是()

A 是一種線性開發模型,具有不可回溯性

B 把待開發的軟件系統模塊化,將每個模塊作為一個增量組件,從而分批次地分析、設計、編碼和測試這些增量組件

C 適用於已有產品或產品原型(樣品),只需客戶化的工程項目

D 軟件開發過程每迭代一次,軟件開發又前進一個層次

解析:增量模型是把待開發的軟件系統模塊化,將每個模塊作為一個增量組件,從而分批次地分析、設計、編碼和測試這些增量組件。運用增量模型的軟件開發過程是遞增式的過程。相對於瀑布模型而言,采用增量模型進行開發,開發人員不需要一次性地把整個軟件產品提交給用戶,而是可以分批次進行提交。

2.下面有關值類型和引用類型描述正確的是()?

A 值類型的變量賦值只是進行數據復制,創建一個同值的新對象,而引用類型變量賦值,僅僅是把對象的引用的指針賦值給變量,使它們共用一個內存地址。

B 值類型數據是在棧上分配內存空間,它的變量直接包含變量的實例,使用效率相對較高。而引用類型數據是分配在堆上,引用類型的變量通常包含一個指向實例的指針,變量通過指針來引用實例。

C 引用類型一般都具有繼承性,但是值類型一般都是封裝的,因此值類型不能作為其他任何類型的基類。

D 值類型變量的作用域主要是在棧上分配內存空間內,而引用類型變量作用域主要在分配的堆上。

解析:

B錯在,值類型變量不包含實例,實例是針對於對象的概念,當類實例化為對象的時候,這個時候可以稱為是類的一個實例。同時,效率比較高這個概念比較模糊。
C錯在,封裝的概念也是針對類而言的,值類型數據不存在封裝概念。
D錯在,值類型變量可以作為成員變量存儲在堆里,例如一個Class A中包含一個int value,那么value是作為成員變量存儲在堆中的。D選項表述有漏洞。

 3.如何在多線程中避免發生死鎖?

A 允許進程同時訪問某些資源。

B 允許進程強行從占有者那里奪取某些資源。

C 進程在運行前一次性地向系統申請它所需要的全部資源。

D 把資源事先分類編號,按號分配,使進程在申請,占用資源時不會形成環路。

解析:死鎖:在多道程序設計環境下,多個進程可能競爭一定數量的資源,。一個進程申請資源,如果資源不可用,那么進程進入等待狀態。如果所申請的資源被其他等待進程占有,那么該等待的進程有可能無法改變狀態,這種情況下稱之為死鎖。

死鎖的四個條件:

互斥:至少有一個資源必須處在非共享模式,即一次只能有一個進程使用,如果另一進程申請該資源,那么申請進程必須延遲直到該資源釋放為止。

占有並等待:一個進程必須占有至少一個資源,並等待另一個資源,而該資源為其他進程所占有。

非搶占:資源不能被搶占
循環等待:有一組進程{P0,P1,...Pn},P0等待的資源被P1占有,P1等待的資源被P2占有,Pn-1等待的資源被Pn占有,Pn等待的資源被P0占有。

形成死鎖必須要滿足這四個條件。那么違背這幾個條件中的任何一個就不會形成死鎖,這種方式成為 死鎖預防,而死鎖避免是動態的檢測分配資源的狀態是否安全
- 死鎖解決方式
1. 死鎖預防
2. 死鎖避免
3. 死鎖檢測並恢復
三者處理死鎖的方式可以類比為:死鎖預防,直接鏟平坑;死鎖避免,直接跳過坑;死鎖檢測並恢復,摔到坑里,修正一下繼續前行。
對於互斥而言:有的資源本身就是互斥的,所以通常無法破壞這一必要條件。
對於占有並等待:破壞它,可以指定這樣的規則(協議):每一個進程執行前一次性申請完所有資源。或者 每個進程申請當前所需要的資源,當需要使用其他資源時,需要把之前申請的資源釋放掉。前者可以理解為破壞**等待**,后者可以理解為破壞**占有**。這樣做使得資源得利用率很低(最后階段可能需要用一下打印機,而將其在整個運行期占有);對於優先級低得進程來說,多次釋放資源很容易造成它們飢餓。
對於非搶占:破壞它,即對於已經分配的資源可以進行搶占。當一個優先級比較低,那么它的資源往往會被優先級高得剝奪,導致它飢餓。
對於循環等待:對所有資源類型進排序,要求每個進程按照資源編號遞增順序申請資源。可以用反證法證明。簡要描述一下,在進程按照資源編號遞增順序申請資源的條件下,假設一個循環等待存在,即有一組進程{P0,P1,...Pn},P0等待的資源被P1占有,P1等待的資源被P2占有,Pn-1等待的資源被Pn占有,Pn等待的資源被P0占有。那么Pi+1占有了Ri資源,同時又申請Ri+1,所以資源Ri的編號必然小於Ri+1,那么R0的編號小於R1的....Rn資源的編號小於R0資源的編號(Pn進程)。根據傳遞性,R0的編號小於R0的編號,顯然矛盾,因此,在上述條件下,不會產生循環等待。
4.以下為求0到1000以內所有奇數和的算法,從中選出描述正確的算法( )
A ①s=0;②i=1;③s=s+i;④i=i+2;⑤如果i≤1000,則返回③;⑥結束
B ①s=0;②i=1;③i=i+2;④s=s+i;⑤如果i≤1000,則返回③;⑥結束
C ①s=1;②i=1;③s=s+i;④i=i+2;⑤如果i≤1000,則返回③;⑥結束
D ①s=1;②i=1;③i=i+2;④s=s+i;⑤如果i≤1000,則返回③;⑥結束
解析:
int s = 0;
for(int i = 1 ;i<=1000;i+=2){
    s = s+ i;
}
System.out.println(s);

5.關於遞歸法的說法不正確的是( )

A 程序結構更簡潔

B 占用CPU的處理時間更多

C 要消耗大量的內存空間,程序執行慢,甚至無法執行

 

D 遞歸法比遞推法的執行效率更高

解析:遞歸就是一層一層的調用函數進棧,會大量存儲重復的數據,占用大量內存,且會有棧溢出的可能。而遞推就是不用存儲重復的數據,從底層獲得了數據直接遞給上一層即可。

6.字符串”ABCD”和字符串”DCBA”進行比較,如果讓比較的結果為真,應選用關系運算符()

A >

B <

C =

D >=

解析:比較的時候比的是ASCII碼,從第一位開始比,如果第一位能比較出誰大誰小則直接返回,若相等,比較下一個字符,因此選B

7.下面是一段關於計算變量s的算法: ①變量s的初值是0 ②變量i從1起循環到n,此時變量s的值由下面的式子表達式計算 ③s=s+(-1)*i ④輸出變量s的值 這個計算s值的算法中,s的代數式表示是(    )。

A 1-2+3-4+„+(-1)n*(n-1)

B 1-2+3-4+„+(-1)n-1*n

C 1+2+3+4+...+(n-1)+n

D -1-2-3-4-...-n

解析:對於s=s+(-1)*i,(-1)乘i(0到n)永遠為負,說明計算式一直在減,可以排除abc

8.以下運算符中運算優先級最高的是( )

A +

B OR

C >

D /

解析:數字越小表示優先級越高。

9.采用哪種遍歷方法可唯一確定一棵二叉樹?(  )

A 給定一棵二叉樹的先序和后序遍歷序列

B 給定一棵二叉樹的后序和中序遍歷序列

C 給定先序、中序和后序遍歷序列中的任意一個即可

D 給定一棵二叉樹的先序和中序遍歷序列

 解析:給出中序遍歷之后再給一個其他的遍歷就能夠確定了,前序和后續不能確定。

例如:先序abdecf,中序dbeafc。
分析思路.
1、先序就是根左右,中序就是左根右。所以在先序中a在前即為根。在中序中找到a,則dbe為其左子樹,fc為其右子樹。
2、dbe左子樹在先序中b在前說明b為根,則中序中d為b左子樹,e為b右子樹。
3、同理fc在先序中c在前說明c為根,中序中f在c前,說明f為c的左子樹。
即得如下圖:
a
/  \
b  c
/ \   /
d e f

 

 

 


免責聲明!

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



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