蒐集2015百度筆試題

2021-06-25 23:38:37 字數 2862 閱讀 4231

① 先進先出演算法(fifo);

② 最近最少使用演算法(lru);

3 lfu最少訪問頁面演算法

opt最佳淘汰演算法

儲存過程

sql語句執行的時候要先編譯,然後執行。儲存過程就是編譯好了的一些sql語句。應用程式需要用的時候直接呼叫就可以了,所以效率會高。

儲存過程介紹

儲存過程是由流控制和sql語句書寫的過程,這個過程經編譯和優化後儲存在資料庫伺服器中,應用程式使用時只要呼叫即可。在oracle中,若干個有聯絡的過程可以組合在一起構成程式包。

使用儲存過程stored procedure)有以下的優點:

1)儲存過程的能力大大增強了sql語言的功能和靈活性。儲存過程可以用流控制語句編寫,有很強的靈活性,可以完成複雜的判斷和較複雜的運算。

2)可保證資料的安全性和完整性。

通過儲存過程可以使沒有許可權的使用者在控制之下間接地訪問資料庫,從而保證資料的安全。

4)通過儲存過程可以使相關的動作在一起發生,從而可以維護資料庫的完整性。

再執行儲存過程前,資料庫已對其進行了語法和句法分析,並給出了優化執行方案。這種已經編譯好的過程可極大地改善sql語句的效能。 由於執行sql語句的大部分工作已經完成,所以儲存過程能以極快的速度執行。可以降低網路的通訊量。

使體現企業規則的運算程式放入資料庫伺服器中,以便集中控制。當企業規則發生變化時在伺服器中改變儲存過程即可,無須修改任何應用程式。企業規則的特點是要經常變化,如果把體現企業規則的運算程式放入應用程式中,則當企業規則發生變化時,就需要修改應用程式工作量非常之大(修改、發行和安裝應用程式)。如果把體現企業規則的 運算放入儲存過程中,則當企業規則發生變化時,只要修改儲存過程就可以了,應用程式無須任何變化。

資料庫儲存過程的實質就是部署在資料庫端的一組定義**以及sql。

優缺點:

①重複使用。儲存過程可以重複使用,從而可以減少資料庫開發人員的工作量。

②提高效能。儲存過程在建立的時候在進行了編譯,將來使用的時候不再重新翻譯。一般的sql語句每執行一次就需要編譯一次,所以使用儲存過程提高了效率。

③減少網路流量。儲存過程位於伺服器上,呼叫的時候只需要傳遞儲存過程的名稱以及引數就可以了,因此降低了網路傳輸的資料量。

④安全性。引數化的儲存過程可以防止sql注入式攻擊,而且可以將grant、deny以及revoke許可權應用於儲存過程。

簡單講:

1.儲存過程只在創造時進行編譯,以後每次執行儲存過程都不需再重新編譯,而一般sql語句每執行一次就編譯一次,所以使用儲存過程可提高資料庫執行速度。

2.當對資料庫進行複雜操作時(如對多個表進行update,insert,query,delete時),可將此複雜操作用儲存過程封裝起來與資料庫提供的事務處理結合一起使用。

3.儲存過程可以重複使用,可減少資料庫開發人員的工作量

4.安全性高,可設定只有某些使用者才具有對指定儲存過程的使用權

有一點需要注意的是,一些網上盛傳的所謂的儲存過程要比sql語句執行更快的說法,實際上是個誤解,並沒有根據,包括微軟內部的人也不認可這一點,所以不能作為正式的優點,希望大家能夠認識到這一點。

缺點:1:除錯麻煩,但是用 pl/sql developer 除錯很方便!彌補這個缺點。

2:移植問題,資料庫端**當然是與資料庫相關的。但是如果是做工程型專案,基本不存在移植問題。

3:重新編譯問題,因為後端**是執行前編譯的,如果帶有引用關係的物件發生改變時,受影響的儲存過程、包將需要重新編譯(不過也可以設定成執行時刻自動編譯)。

4: 如果在乙個程式系統中大量的使用儲存過程,到程式交付使用的時候隨著使用者需求的增加會導致

資料結構的變化,接著就是系統的相關問題了,最後如果使用者想維護該系統可以說是很難很難、而且代價是空前的,維護起來更麻煩。

全域性static變數和普通全域性變數區別?static區域性變數和普通區域性變數的區別?static函式和普通函式的區別?

1. static全域性變數與普通的全域性變數有什麼區別 ?

全域性變數(外部變數)的說明之前再冠以static 就構成了靜態的全域性變數。

全域性變數本身就是靜態儲存方式, 靜態全域性變數當然也是靜態儲存方式。

這兩者在儲存方式上並無不同。

這兩者的區別在於

非靜態全域性變數的作用域是整個源程式,

當乙個源程式由多個原始檔組成時,非靜態的全域性變數在各個原始檔中都是有效的。 

而靜態全域性變數則限制了其作用域, 即只在定義該變數的原始檔內有效, 在同一源程式的其它原始檔中不能使用它。由於靜態全域性變數的作用域侷限於乙個原始檔內,只能為該原始檔內的函式公用,因此可以避免在其它原始檔中引起錯誤。

static全域性變數只初使化一次,防止在其他檔案單元中被引用;   

2.  static區域性變數和普通區域性變數有什麼區別 ?

把區域性變數改變為靜態變數後是改變了它的儲存方式即改變了它的生存期

把全域性變數改變為靜態變數後是改變了它的作用域,限制了它的使用範圍。  

3.  static函式與普通函式有什麼區別?

static函式與普通函式作用域不同,僅在本檔案。

只在當前原始檔中使用的函式應該說明為內部函式(static修飾的函式),內部函式應該在當前原始檔中說明和定義。

對於可在當前原始檔以外使用的函式,應該在乙個標頭檔案中說明,要使用這些函式的原始檔要包含這個標頭檔案.

static函式在記憶體中只有乙份,普通函式在每個被呼叫中維持乙份拷貝

2015百度筆試題(演算法)

有乙個已經排序的陣列 公升序 陣列中可能有正數 負數或0,求陣列中元素的絕對值最小的數,要求,不能用順序比較的方法 複雜度需要小於o n 可以使用任何語言實現 includeusing namespace std double searchmin double int,int int main do...

百度2015校園招聘筆試題

一 簡答題 30分 1.程序和執行緒的聯絡與區別。2.簡述資料庫的儲存過程及其優點。3.static全域性變數與普通的全域性變數有什麼區別?static區域性變數和普通的區別?static函式和普通函式的區別?二 演算法與程式設計題 45分 1 請編碼實現memcpy函式 void memcpy v...

百度筆試題

一 選擇題 15分 共10題 1.在排序方法中,關鍵碼比較次數與記錄地初始排列無關的是 a.shell排序 b.歸併排序 c.直接插入排序 d.選擇排序 2.以下多執行緒對int型變數x的操作,哪幾個需要進行同步 a.x y b.x c.x d.x 1 3.void func 中,變數val的記憶體...