百度2013研發工程師A筆試

2021-06-29 09:56:33 字數 4647 閱讀 5319

1

動態鏈結庫和靜態鏈結庫的優缺點

動態鏈結的優點: 1)不占用源程式**段,節省空間。 2) 使程式更容易更新。 3)減少物理頁面的切入。4)增加程式的可擴充套件性

動態鏈結的缺點: 1) 效能損失 2)相容性問題

靜態鏈結的優點: 1)**裝載速度快。 2)不存在版本相容的問題

靜態鏈結的缺點: 1)體積問題  2)可擴充套件性問題

2列出資料庫中常用的鎖及其應用場景

1)共享鎖 sql server中,共享鎖用於所有的唯讀資料操作。共享鎖是非獨佔的,允許多個併發事務讀取其鎖定的資源。預設情況下,資料被讀取後,sql server立即釋放共享鎖。例如,執行查詢「select * from my_table」時,首先鎖定第一頁,讀取之後,釋放對第一頁的鎖定,然後鎖定第二頁。這樣,就允許在讀操作過程中,修改未被鎖定的第一頁。但是,事務 隔離級別連線選項設定和select語句中的鎖定設定都可以改變sql server的這種預設設定。例如,「 select * from my_table holdlock」就要求在整個查詢過程中,保持對錶的鎖定,直到查詢完成才釋放鎖定。

2)修改鎖 修 改鎖在修改操作的初始化階段用來鎖定可能要被修改的資源,這樣可以避免使用共享鎖造成的死鎖現象。因為使用共享鎖時,修改資料的操作分為兩步,首先獲得一 個共享鎖,讀取資料,然後將共享鎖公升級為獨佔鎖,然後再執行修改操作。這樣如果同時有兩個或多個事務同時對乙個事務申請了共享鎖,在修改資料的時候,這些 事務都要將共享鎖公升級為獨佔鎖。這時,這些事務都不會釋放共享鎖而是一直等待對方釋放,這樣就造成了死鎖。如果乙個資料在修改前直接申請修改鎖,在資料修 改的時候再公升級為獨佔鎖,就可以避免死鎖。修改鎖與共享鎖是相容的,也就是說乙個資源用共享鎖鎖定後,允許再用修改鎖鎖定。

3)獨佔鎖 獨佔鎖是為修改資料而保留的。它所鎖定的資源,其他事務不能讀取也不能修改。獨佔鎖不能和其他鎖相容。

4)結構鎖 結構鎖分為結構修改鎖(sch-m)和結構穩定鎖(sch-s)。執行表定義語言操作時,sql server採用sch-m鎖,編譯查詢時,sql server採用sch-s鎖。

5)意向鎖 意 向鎖說明sql server有在資源的低層獲得共享鎖或獨佔鎖的意向。例如,表級的共享意向鎖說明事務意圖將獨佔鎖釋放到表中的頁或者行。意向鎖又可以分為共享意向鎖、 獨佔意向鎖和共享式獨佔意向鎖。共享意向鎖說明事務意圖在共享意向鎖所鎖定的低層資源上放置共享鎖來讀取資料。獨佔意向鎖說明事務意圖在共享意向鎖所鎖定 的低層資源上放置獨佔鎖來修改資料。共享式獨佔鎖說明事務允許其他事務使用共享鎖來讀取頂層資源,並意圖在該資源低層上放置獨佔鎖。

6)批量修改鎖 批量複製資料時使用批量修改鎖。可以通過表的tablock提示或者使用系統儲存過程sp_tableoption的「table lock on bulk load」選項設定批量修改鎖。

3給定n是乙個正整數,求比n大的最小「不重複數」,這裡的不重複是指沒有兩個相等的相鄰位,如1102中的11是相等的兩個相鄰位故不是不重複數,而12301是不重複數。

**演算法思想:當然最直接的方法是採用暴力法,從n+1開始逐步加1判斷是否是不重複數,是就退出迴圈輸出,這種方法一般是不可取的,例如n=11000000,你要乙個個的加1要加到12010101,一共迴圈百萬次,每次都要重複判斷是否是不重複數,效率極其低下,因此是不可取的。這裡我採用的方法是:從n+1的最高位往右開始判斷與其次高位是否相等,如果發現相等的(即為重複數)則將次高位加1,注意這裡可能進製,如8921—>9021,後面的直接置為010101...形式,如1121—>1201,此時便完成「不重複數」的初步構造,但此時的「不重複數」不一定是真正的不重複的數,因為可能進製後的次高位變為0或進製後變成00,如9921—>10001,此時需要再次迴圈判斷重新構造直至滿足條件即可,這種方法迴圈的次數比較少,可以接受。

// 求比指定數大且最小的「不重複數」

#include void minnotrep(int n)

// 從高位開始遍歷是否有重複位

for(i = len - 1; i > 0; i--)

else if(flag)

}// 重組各位數字為n,如果是「不重複數」則輸出退出否則繼續判斷

for(i = len - 1; i >= 0; i--)

if(!flag)

}}int main()

return 0;

}

4輪詢任務排程和可搶占式排程有什麼區別?

下列關於輪詢任務排程和可搶占式排程區別描述錯誤的是?

//(1)輪詢排程的原理是每一次把來自使用者的請求輪流分配給內部中的伺服器,從1開始,直到n(內部伺服器個數),然後重新開始迴圈。只有在當前任務主動放棄cpu控制權的情況下(比如任務掛起),才允許其他任務(包括高優先順序的任務)控制cpu。其優點是其簡潔性,它無需記錄當前所有連線的狀態,所以它是一種無狀態排程。但不利於後面的請求及時得到響應。

(2)搶占式排程允許高優先順序的任務打斷當前執行的任務,搶占cpu的控制權。這有利於後面的高優先順序的任務也能及時得到響應。但實現相對較複雜且可能出現低優先順序的任務長期得不到排程。 5

設n是乙個大整數,求長度為n的字串的最長回文子串。

演算法1:第乙個方法當然是暴力法,外面的兩層迴圈找到所有子串,第三層迴圈判斷子串是否是回文。方法的時間複雜度為o(n^3),空間複雜度為o(1)。

演算法2:採用動態規劃法判斷子串是否是回文。開闢乙個p[i][j]用來表示str[i..j]是否為回文,p[i][j]的狀態轉移方程如下:

當i==j時,p[i][j]=true

當i+1==j時,p[i][j]=str[i]==str[j]

其他,p[i][j]=p[i+1][j-1]&&(str[i]==str[j])

那麼p[i][j]中j-i+1最大的且值為true的就是最長回文子串。這樣,這個方法的時間複雜度為o(n^2),空間複雜度為o(n^2)。比暴力法有很大的改進。

演算法3:第三個方法,可以從上面那個方法的狀態轉移方程獲得啟發,對於每乙個回文子串可以先確定乙個中心,然後向兩邊擴充套件,這樣可以在時間複雜度o(n^2),空間複雜度o(1)的情況下完成,需要注意的是,長度為奇數和偶數的中心的情況是不同的。

#include #include #include int longestpalsubstr(char *str)

low--;

high++;

}// 處理長度為奇數的情況

low = i - 1; 

high = i + 1;

while(low >= 0 && high < len && str[low] == str[high])

low--;

high++;}}

printf("the longest palin substr is ");

for(i = start; i < start + maxlen; i++)

printf(", maxlen is %d\n\n", maxlen);

return maxlen;

}int main()

return 0;

}

6數軸上從左到右有 n 個點 a[0],a[1],„„,a[n-1],給定一根長度為 l 的繩子,求繩子最多能 覆蓋其中的幾個點。

滿足a[j]-a[i] <= l && a[j+1]-a[i] > l這兩個條件的j與i中間的所有點個數中的最大值,即j-i+1最大,方法很簡單:直接從左到右掃瞄,兩個指標i和j,i從位置0開始,j從位置1開始,如果a[j] - a[i] <= l則j++並記錄中間經過的點個數,如果a[j] - a[i] > l則j--回退,覆蓋點個數-1回到剛好滿足條件的時候,將滿足條件的最大值與所求最大值比較,然後i++,j++直到求出最大的點個數。

有兩點需要注意:

(1)這裡可能沒有i和j使得a[j] - a[i]剛好等於l的,所以判斷條件不能為a[j] - a[i] = l。

(2)可能存在不同的覆蓋點但覆蓋的長度相同,此時只選第一次覆蓋的點。

// 求最大覆蓋點  

#include int maxcover(int a, int n, int l)

// 退回到滿足條件的j

j--;

count--;

if(maxcount < count)

i++;

j++;    

}printf("covered point: ");

for(i = start; i < start + maxcount; i++)

printf("\n"); return maxcount;

}int main()

;    printf("max count: %d\n\n", maxcover(a, 13, 8)); int b = ;

printf("max count: %d\n", maxcover(b, 7, 8)); return 0;

}

7在現代系統的設計過程中,為了減輕請求的壓力,通常採用快取技術。為了進一步提公升 快取的命中率,通常採用分布式快取方案。即前端的排程模組,將針對不同內容的使用者請求 分配不同的快取伺服器向使用者提供服務。請給出乙個分布式快取方案,滿足如下要求:

1)單台快取伺服器故障,整個分布式快取集群,可以繼續提供服務;

2)通過一定的分配策略,可以保證充分利用每個快取服務的儲存空間,及負載均衡。當 部分伺服器故障或系統擴容時,該分配策略可以保證較小的快取檔案重分配開銷。

3)當不同快取伺服器的儲存空間存在差異時,分配策略可以滿足比例分配

百度2011研發工程師筆試卷

2.判斷乙個括號字串是否匹配正確,如果括號有多種,怎麼做?如 正確,錯誤。3.給定兩個數a b 0,100000 求 a b中最後三位數是多少。請簡要描述你的思路。4.微博上,每個使用者可以傳送一條訊息,可以 follow 另乙個使用者,當使用者傳送訊息時,所有 follow 他的使用者都能看見這條...

百度2016研發工程師筆試題(六)

2016 研發工程師筆試題 六 的會話有四個過程,請選出不是的乙個 a.建立連線 b.發出響應資訊 c.發出請求資訊 d.傳輸資料 2.osi 參考模型中,網路層的主要功能是 a.路由選擇,擁塞控制與網路互連 b.提供可靠的端一端服務,透明地傳送報文 c.資料格式變換,資料加密與解密,資料壓縮與恢復...

2013百度研發筆試

一 簡答題 1.動態鏈結庫和靜態鏈結庫的優缺點 2.輪詢任務排程和可搶占式排程有什麼區別?3.列出資料庫中常用的鎖及其應用場景 二 演算法設計題 1.給定n是乙個正整數,求比n大的最小 不重複數 這裡的不重複是指沒有兩個相等的相鄰位,如1102中的11是相等的兩個相鄰位故不是不重複數,而12301是...