運維面試題(資料庫)
資料庫
(1)查詢年齡在20-30之間的使用者
A:
select *from 表 where datediff(year,出生日期,getdate())<20 20歲以下的
select *from 表 where adtediff(year,出生日期,getdate()) between 20 and 30 20-30歲
select *from 表 where adtediff(year,出生日期,getdate())>30 30歲以上的
(2)sum和count差別
A:
SUM是對符合條件的記錄的數值列求和
COUNT 是對查詢中符合條件的結果(或記錄)的個數
例如:
表fruit
id name price
1 apple 3.00
2 pear 4.00
select count(price) from fruit; —-執行之後結果為:2 (表示有2條記錄)
select sum(price) from fruit;—執行之後結果為:7:00(表示各記錄price字段之和為7.00)
資料結構
-
完全二叉樹
(1)若某完全二叉樹包含200個結點,那麼這顆完全二叉樹中有多少個葉子結點?
A:完全二叉樹除了最後一層,其他層都是滿結點的。
總結點為200個,是偶數,可以判斷度為1的結點僅1個,即n1=1;
根據二叉樹性質n0=n2+1;葉子結點數=度為2的結點數+1
200=n0+n1+n2;
200=n0+n1+n0-1;
2*n0=201-n1=201-1=200;
n0=100;
葉子結點數為100
引:
完全二叉樹的定義
滿二叉樹的定義
(2)用數組存儲完全二叉樹時,結點的索引(數組下标)與其父子結點索引的關系
A:若下标從1開始存儲,則編号為i的結點的主要關系為:
雙親:(i/2)下取整
左孩子:2i
右孩子:2i+1
若下标從0開始存儲,則編号為i的結點的主要關系為:
雙親:((i-1)/2)下取整
左孩子:2i+1
右孩子:2i+2
引:
數組順序存儲二叉樹
完全二叉樹通常采用數組而不是連結清單的存儲,其存儲結構如下:
對于tree[i],有如下特點:
(1)若i為奇數且i>1,那麼tree的左兄弟為tree[i-1];
(2)若i為偶數且i<<n,那麼tree的右兄弟為tree[i+1];
(3)若i>1,tree的父親節點為tree[i div 2];
(4)若2i<=n,那麼tree的左孩子為tree[2i];若2i+1<=n,那麼tree的右孩子為tree[2i+1];
(5)若i>n div 2,那麼tree[i]為葉子結點(對應于(3));
(6)若i<(n-1) div 2.那麼tree[i]必有兩個孩子(對應于(4))。
(7)滿二叉樹一定是完全二叉樹,完全二叉樹不一定是滿二叉樹。
完全二叉樹第i層至多有2(i-1)個節點,共i層的完全二叉樹最多有2i-1個節點。
-
二叉查找樹、平衡二叉樹
(1)二叉查找樹的時間複雜度
引:
二叉排序樹的搜尋、插入、删除,時間複雜度
(2)樹的廣度優先周遊和深度優先周遊的差別
A:
廣度優先周遊用隊列存儲結點對象。
首先将父節點入隊,然後将父節點彈出隊列;當父節點彈出隊列時,對應的左右子節點依次入隊;
将左子節點彈出隊列,同時對應的左右子節點依次入隊;将右子節點彈出隊列,同時對應的左右子節點依次入隊;
以此類推。
深度優先周遊用棧存儲結點對象。
首先将父節點入棧;當父節點出棧時,對應的右左子節點入棧(注意先壓右子結點,再壓左子結點);
将左子節點(在棧頂)彈出棧,同時對應的右左子節點入棧;
将左子節點(在棧頂)彈出棧,同時對應的右左子節點入棧,依次類直到沒有子節點入棧;
引:
樹的廣度優先周遊和深度優先周遊(遞歸非遞歸、Java實作)
-
排序
(1)下列選項中,不可能是快速排序第2趟排序結果的是 ()
2,3,5,4,6,7,9
2,7,5,6,4,3,9
3,2,5,4,7,6,9
4,2,3,5,7,6,9
A:
四個選項都是同樣的數組元素,若完全有序,應為2345679
每經過一趟快排,軸點元素都必然就位,也就是說,一趟下來至少有1個元素在其最終位置
是以考察各個選項,看有幾個元素就位即可。
A:2、3、6、7、9
B:2、9
C:9
D:5、9
第二趟至少應有2個元素就位,是以C不對。
-
哈希表
(1)哈希表(碰撞,複雜度)——筆試面試常考問題
(2)哈希表如何處理沖突
計算機網絡、作業系統
-
缺頁率
(1)缺頁率的計算
A:
FIFO、LRU、OPT這三種置換算法的缺頁次數
引:
記憶體管理
1)虛拟記憶體
每個程式擁有自己的位址空間,這個位址空間被分割成多個塊,每一塊稱為一頁。這些頁被映射到實體記憶體,但不需要映射到連續的實體記憶體,也不需要所有頁都必須在實體記憶體中。當程式引用到一部分不在實體記憶體中的位址空間時,由硬體執行必要的映射,将缺失的部分裝入實體記憶體并重新執行失敗的指令。
2)分頁與分段
分頁:
大部分虛拟記憶體系統都使用分頁技術。把由程式産生的位址稱為虛拟位址,它們構成了一個虛拟位址空間。例如有一台計算機可以産生 16 位位址,它的虛拟位址空間為 0~64K,然而計算機隻有 32KB 的實體記憶體,是以雖然可以編寫 64KB 的程式,但它們不能被完全調入記憶體運作。
虛拟位址空間劃分成固定大小的頁,在實體記憶體中對應的單元稱為頁框,頁和頁框大小通常相同,它們之間通過頁表進行映射。
程式最開始隻将一部分頁調入頁框中,當程式引用到沒有在頁框的頁時,産生缺頁中斷,進行頁面置換,按一定的原則将一部分頁框換出,并将頁調入。
分段:
使用分頁系統的一維位址空間,動态增長的特點會導緻覆寫問題的出現。分段的做法是把每個表分成段,一個段構成一個獨立的位址空間。每個段的長度可以不同,并且可以動态增長。
每個段都需要程式員來劃分。
段頁式:
用分段方法來配置設定和管理虛拟存儲器。程式的位址空間按邏輯機關分成基本獨立的段,而每一段有自己的段名,再把每段分成固定大小的若幹頁。
用分頁方法來配置設定和管理實存。即把整個主存分成與上述頁大小相等的存儲塊,可裝入作業的任何一頁。
程式對記憶體的調入或調出是按頁進行的,但它又可按段實作共享和保護。
分頁與分段的差別:
對程式員的透明性:分頁透明,但是分段需要程式員顯示劃分每個段。
位址空間的次元:分頁是一維位址空間,分段是二維的。
大小是否可以改變:頁的大小不可變,段的大小可以動态改變。
出現的原因:分頁主要用于實作虛拟記憶體,進而獲得更大的位址空間;分段主要是為了使程式和資料可以被劃分為邏輯上獨立的位址空間并且有助于共享和保護。
3)頁面置換算法
1)最佳Optimal
所選擇的被換出的頁面将是最長時間内不再被通路,通常可以保證獲得最低的缺頁率。
是一種理論上的算法,因為無法知道一個頁面多長時間不再被通路。
舉例:一個系統為某程序配置設定了三個實體塊,并有如下頁面引用序列:70120304230321201701
開始運作時,先将 7, 0, 1 三個頁面裝入記憶體。當程序要通路頁面 2 時,産生缺頁中斷,會将頁面 7 換出,因為頁面 7 再次被通路的時間最長。
2)先進先出FIFO
所選擇換出的頁面是最先進入的頁面。
該算法會将那些經常被通路的頁面也被換出,進而使缺頁率升高。
3)最近最久未使用LRU
雖然無法知道将來要使用的頁面情況,但是可以知道過去使用頁面的情況。LRU 将最近最久未使用的頁面換出。
可以用棧來實作該算法,棧中存儲頁面的頁面号。當程序通路一個頁面時,将該頁面的頁面号從棧移除,并将它壓入棧頂。這樣,最近被通路的頁面總是在棧頂,而最近最久未使用的頁面總是在棧底。
4)時鐘Clock
-
程序線程
(1)程序什麼時候變為阻塞狀态
程序從運作狀态轉變到阻塞狀态可能是由于( )。
A.程序排程程式的排程
B.現運作程序的時間片用完
C.現運作程序執行了P操作
D.現運作程序執行了V操作
A:
選C。執行P操作,目前程序可能進入信号量隊列而阻塞。程序排程或時間片用完時,程序從運作狀态轉變為就緒狀态。執行V操作,目前程序繼續處于運作狀态。
P操作表示申請一個資源,V操作表示釋放一個資源。
引:
關于p操作和v操作的了解
程序狀态的切換
就緒狀态(ready):等待被排程
運作狀态(running)
阻塞狀态(waiting):等待資源
應該注意以下内容:
隻有就緒态和運作态可以互相轉換,其它的都是單向轉換。就緒狀态的程序通過排程算法進而獲得 CPU 時間,轉為運作狀态;而運作狀态的程序,在配置設定給它的 CPU 時間片用完之後就會轉為就緒狀态,等待下一次排程。
阻塞狀态是缺少需要的資源進而由運作狀态轉換而來,但是該資源不包括 CPU 時間,缺少 CPU 時間會從運作态轉換為就緒态;當一個阻塞程序等待的事件發生時,該程序的狀态從阻塞變為就緒。
當一個就緒程序被排程程式選中時,該程序的狀态從就緒變為運作;當正在運作的程序等待某事件或申請的資源得不到滿足時,該程序的狀态從運作變為阻塞;當一個阻塞程序等待的事件發生時,該程序的狀态從阻塞變為就緒;當一個運作程序時間片用完時,該程序的狀态從運作變為就緒。
(2)關于程序間通信,不正确的是:
A、程序互斥是指每次隻允許一個程序使用臨界資源
B、程序控制是通過原語實作的
C、P、V操作是一種程序同步機制
D、管道不是一種程序進階通信機制
A:
D。管道是一種程序進階通信機制,管道實際上是連結讀寫程序的一個特殊檔案,允許程序按先進先出的方式傳送資料,也能使程序同步執行操作。發送程序以字元流形式把大量資料送入管道,接收程序從管道中接收資料。
引:
作業系統 – 程序間同步機制
程序和線程的差別
-
通信
(1)哪些應用協定使用UDP協定?
A:
UDP協定包括:TFTP、SNMP、NFS、DNS、BOOTP
引:
UDP協定的用途
UDP(使用者資料報協定)是無連接配接的,盡最大可能傳遞,沒有擁塞控制,面向封包(對于應用程式傳下來的封包不合并也不拆分,隻是添加UDP首部)。
TCP(傳輸控制協定)是面向連接配接的,提供可靠傳遞,有流量控制,擁塞控制,提供全雙工通信,面向位元組流(把應用層傳下來的封包看成位元組流,把位元組流組織成大小不等的資料塊)。
(2)向一個不存在但合法的公網IP人一端口發送SYN包會出現什麼情況?
A:
傳回ICMP主機不可達
(3)向一個存在的IP但未綁定的端口發送SYN包會出現什麼情況?
A:
傳回ICMP端口不可達
引:
ICMP協定
(4)第一個SYN包丢失了,客戶主機(主動連接配接)會采取什麼動作?
A:
重傳,重試幾次後(一般為3次)失敗後,連接配接失敗。
(5)為什麼建立連接配接的過程作3次TCP segment互動,而不是4次?
A:
server端的SYN&ACK在一個TCP segment傳給了client
(6)什麼情況下将會出現4次TCP segment互動?
A:
連接配接的兩段同時打開
(7)第二個SYN2(SYN2&ACK1)丢失了,将出現什麼情況?
A:
Client收不到SYN2而不發送ACK2,server端将逾時重發
(8)ACK2丢失了将會怎樣?
A:
server端認為client沒有收到SYN2+ACK1,重發SYN2+ACK1;另外處于未完成的狀态,如果出現大量的ACK2丢失,未完成的連接配接隊列會出現“滿”的狀态,進而不能再接收SYN1。
TCP 的三次握手
假設 A 為用戶端,B 為伺服器端。
首先 B 處于 LISTEN(監聽)狀态,等待客戶的連接配接請求。
A 向 B 發送連接配接請求封包段,SYN=1,ACK=0,選擇一個初始的序号 x。
B 收到連接配接請求封包段,如果同意建立連接配接,則向 A 發送連接配接确認封包段,SYN=1,ACK=1,确認号為 x+1,同時也選擇一個初始的序号 y。
A 收到 B 的連接配接确認封包段後,還要向 B 發出确認,确認号為 y+1,序号為 x+1。
B 收到 A 的确認後,連接配接建立。
三次握手的原因
第三次握手是為了防止失效的連接配接請求到達伺服器,讓伺服器錯誤打開連接配接。
失效的連接配接請求是指,用戶端發送的連接配接請求在網絡中滞留,用戶端因為沒及時收到伺服器端發送的連接配接确認,是以就重新發送了連接配接請求。滞留的連接配接請求并不是丢失,之後還是會到達伺服器。如果不進行第三次握手,那麼伺服器會誤認為用戶端重新請求連接配接,然後打開了連接配接。但是并不是用戶端真正打開這個連接配接,是以用戶端不會給伺服器發送資料,這個連接配接就白白浪費了。
TCP 的四次揮手
以下描述不讨論序号和确認号,因為序号和确認号的規則比較簡單。并且不讨論 ACK,因為 ACK 在連接配接建立之後都為 1。
A 發送連接配接釋放封包段,FIN=1。
B 收到之後發出确認,此時 TCP 屬于半關閉狀态,B 能向 A 發送資料但是 A 不能向 B 發送資料。
當 B 要不再需要連接配接時,發送連接配接釋放請求封包段,FIN=1。
A 收到後發出确認,進入 TIME-WAIT 狀态,等待 2MSL 時間後釋放連接配接。
B 收到 A 的确認後釋放連接配接。
四次揮手的原因
用戶端發送了 FIN 連接配接釋放封包之後,伺服器收到了這個封包,就進入了 CLOSE-WAIT 狀态。這個狀态是為了讓伺服器端發送還未傳送完畢的資料,傳送完畢之後,伺服器會發送 FIN 連接配接釋放封包。
TIME_WAIT
用戶端接收到伺服器端的 FIN 封包後進入此狀态,此時并不是直接進入 CLOSED 狀态,還需要等待一個時間計時器設定的時間 2MSL。這麼做有兩個理由:
確定最後一個确認封包段能夠到達。如果 B 沒收到 A 發送來的确認封包段,那麼就會重新發送連接配接釋放請求封包段,A 等待一段時間就是為了處理這種情況的發生。
等待一段時間是為了讓本連接配接持續時間内所産生的所有封包段都從網絡中消失,使得下一個新的連接配接不會出現舊的連接配接請求封包段。
(9)通路一個url傳回http 403 代表什麼意思?
A:
請求被伺服器拒絕;Forbidden
引:
HTTP協定之http狀态碼詳解
深度學習
(1)機器學習中防止過拟合的處理方法
機器學習中防止過拟合的處理方法
A:
Early stopping,提前停止疊代;
資料集擴增,擁有更多的資料勝過一個好的模型;
正則化方法,在目标函數或loss函數後加正則項,降低模型複雜度;
Dropout,修改神經網絡中隐藏層的神經元個數來防止過拟合;
Batch normalization;
注:交叉驗證是為了驗證模型是否過拟合,并不能防止過拟合,随着訓練資料和驗證資料的增加以及訓練和驗證的進度,到訓練和驗證完成,如果訓練誤差和驗證誤差相差較大,則可能發生過拟合,可以通過增加訓練資料、減少特征、正則化來解決過拟合問題。
(2)L1和L2正則化的異同點
A:
相同—都用于避免過拟合;
不同—L1可以讓一部分特征的系數縮小到0,進而間接實作特征選擇,L1範數适用于特征之間有關聯的情況;L2讓所有特征的系數都縮小,但是不會減為0,它會使優化求解穩定快速,L2适用于特征之間沒有關聯的情況。
(3)聚類算法有哪些?
A:
劃分聚類:K-Means聚類、K-中心點算法、CLARANS算法;
層次聚類:DIANA算法、BIRCH算法、Chameleon算法;
模糊聚類:EM算法;
基于密度聚類:OPTICS算法、DBSCAN算法、OPTICS算法;
(4)聚類算法中用到哪些距離度量衡?
A:
曼哈頓距離(1範數);
歐氏距離(2範數);
漢明距離;
權重的歐式距離;
切比雪夫距離;
幂距離;
餘弦相似度;
皮爾森相似度;
修正的餘弦相似度;
Jaccard相似度;
相關距離;
馬氏距離;
引:
聚類分析中距離度量方法比較
(5)系數矩陣一般的壓縮存儲方法有哪些?
A:
三元數組存儲(行、列、值);
行指針連結清單(第一列為數組,用指針連結到本行下一個有意義的位置);
十字連結清單;
(6)實序列的傅裡葉變換有何特點?
A、共轭對稱函數
B、共轭反對稱函數
C、線性函數
D、雙線性函數
A:
A。實序列的傅裡葉變換隻有共轭對稱部分,其實部是偶函數,虛部是奇函數。
(7)哪種優化方法的收斂速度是線性的?
A、梯度下降法
B、牛頓法和拟牛頓法
C、共轭梯度法
D、Adagrad
A:
A。線性收斂的優化算法:SGD、SVRG
引:
收斂速度:線性收斂,超線性收斂,r 階收斂
線性收斂的随機優化算法之 SAG、SVRG(随機梯度下降)
(8)随機變量的皮爾森相關系數
Linux
(1)查找檔案的指令
A:
find /etc -name httpd.conf #在/etc目錄下檔案httpd.conf
grep ‘test’ d* #顯示所有以d開頭的檔案中包含 test的行
locate ~/m 搜尋使用者主目錄下,所有以m開頭的檔案
whereis
which
注:type指令其實不能算查找指令,它是用來區分某個指令到底是由shell自帶的,還是由shell外部的獨立二進制檔案提供的
引:
Linux的五個查找指令
Python
(1)list的方法
(2)map()函數
Python map()函數的用法
(3)lambda的用法
python中lambda的用法
C++
(1)哪些函數不能聲明為虛函數?
A:
普通函數(非成員函數)—普通函數隻能overload,不能被override,聲明為虛函數沒什麼意思,是以編譯器會在編譯時綁定函數;
靜态成員函數—靜态成員函數對于每個類來說隻有一份代碼,所有的對象都共享這一份代碼,它不歸某個對象所有,是以也沒有動态綁定的必要性;
内聯成員函數—内聯函數是為了在代碼中直接展開,減少函數調用花費的代價,虛函數是為了在繼承後對象能準确的執行自己的動作,這是不可能統一的。inline函數在編譯時被展開,虛函數在運作時才能動态的綁定函數;
構造函數—構造函數是為了明确初始化對象成員才産生的,然而virtual function主要是為了在不完全了解細節的情況下也能正确處理對象。另外虛函數是在不同類型的對象産生不同的動作,現在對象還沒産生,如何使用虛函數來完成想完成的動作;
友元函數;
(2)靜态資料成員可以作為預設實參(Y)
(3)static變量在什麼時候配置設定記憶體?
A:
全局變量、檔案域的靜态變量和類的靜态成員變量在main執行之前的靜态初始化過程中配置設定記憶體并初始化;局部靜态變量(一般為函數内的靜态變量)在第一次使用時配置設定記憶體并初始化。這裡的變量包含内置資料類型和自定義類型的對象。
引:
C++局部靜态變量在什麼時候配置設定記憶體和初始化?
關于static靜态變量的了解以及C中的記憶體區的配置設定
(4)#define中的##的含義
A:
##define f(a,b) a##b
##define d(a) #a
##define s(a) d(a)
void main( void )
{
puts(d(f(a,b)));
puts(s(f(a,b)));
}
輸出結果:
f(a,b)
ab
分析: ##把兩個符号連起來
#a指把a當成符号,就是把#後面的看成字元串
##define f(a,b) a##b
##define d(a) #a --》 以”#”開頭的,直接替換,不展開:immediately replaced by the unexpanded actual argument
##define s(a) d(a) --》 非以”#”開頭的,先展開,再替換,也就是一般的情況
mysql資料庫表user結構
create table user (
user_id varchar(40) not null,
l int(1)default 0,
primary key (user_id)
);
将has_emai修改為has_email int(1) default 1
alter table user modify has_email has_email int(1) default 1;
添加一個字段 user_name varchar(40) not null
alter table user add user_name varchar(40) not null;
1、資料庫索引可以明顯提高哪一操作的效率?
正确答案: A
A SELECT
B INSERT INTO … VALUES …
C UPDATE
D DELETE
2、資料庫:以下哪種鎖定方式能提供最佳的并行通路性能?
正确答案: D
A 列鎖定
B 表鎖定
C 塊鎖定
D 行鎖定
3、從DELETE 語句中省略WHERE 子句,将産生什麼結果?
正确答案: B
A DELETE 語句将失敗因為沒有記錄可删除
B DELETE 語句将從表中删除所有的記錄
C DELETE 語句将提示使用者進入删除的标準
D DELETE 語句将失敗,因為文法錯誤
4、raceroute一般使用的是哪種網絡層協定?
正确答案: D
A vrrp
B udp
C arp
D icmp
5、ospf協定中哪種lsa隻能在本區域内傳播?
正确答案: A
A 2
B 3
C 5
D 7
6、在linux系統中,下列哪些信号無法捕獲?
正确答案: B
A SIGHUP
B SIGKILL
C SIGQUIT
D SIGUSR1
7、Linux下,如何檢視一個端口被什麼程序占用?
正确答案: B
A netstat -an|grep 端口号
B netstat -tnlp | grep 端口号
C iostat -an | grep 端口号
D iostat -dxt | grep 端口号
8、清單如何去掉重複元素?
正确答案: B
A 清單無法去重
B 先把list轉換為一個去重的集合,然後在list化
C 先把list轉換為一個去重的元組,然後在list化
D 清單不會有重複
9、Python的清單(List)和元組(Tuple)差別是什麼?
正确答案: A
A 清單可變,元組不可變
B 沒有差別
C 限度限制不一樣
D 清單可以被疊代,元組無法疊代
10、關于Python類的繼承正确的說法是?
正确答案: C
A python類無法繼承
B 可以繼承但是,無法執行父類的建構函數
C 可以有多個父類
D 隻能有一個父類
11、以下關于端口的描述哪些是正确的?
正确答案: A B C D
A FTP使用TCP 20 端口
B FTP使用TCP 21 端口
C DNS使用TCP 53 端口
D DNS使用 UDP 53端口
12、下面關于http協定中的GET 和 POST 方式的差別,哪些是錯誤的?
正确答案: A C
A 他們都可以被收藏,以及緩存
B GET請求參數放在URL中
C GET隻用于查詢請求,不能用于請求資料
D GET不應該處理敏感資料的請求
13、一個簡單的網站可能由這三部分組成:一個 web伺服器(提供網頁和http 服務),一個背景伺服器(比如java 背景程式,負責計算),一個mysql資料庫伺服器(存儲使用者資料)。然而我們知道,這樣一個網站也是很脆弱的,上述三個伺服器的任何一個出現問題(伺服器問題,或者伺服器的網絡問題,或者上面運作的程式問題),都會導緻網站通路不了。顯然這樣是無法符合美團大衆點評給使用者的服務承諾的。現在,假定你是公司的技術經理,你認為你會針對上述3個部分,做一些什麼樣的加強或改善工作,以幫助提高網站的可用性呢?(盡可能多的列舉)
14、從哪幾個方面評價一個hash函數的好壞?列舉幾種常見的hash函數?
參考答案:hash函數好壞的評判标準 1.高效,節省cpu,才能提高并發,作為中間層,需要高效的根據key來計算hash 2.沖突盡可能的小,小到可以建立唯一索引 3.盡可能的節省空間。例如,要把這個結果存儲到資料庫中,在給這個hash後的結果建立索引,那麼我們希望這個列越小越好,以便節省資料存儲空間。特别是資料庫中建立索引的時候,被索引的字段自然是越小越好 4.要均勻,特别是有多個節點的時候,保證每個key分布的均勻,比較重要,否則負載沒法均衡 5.rehash的時候,保證key的重新分布盡可能的小,避免給後端帶來較大的沖擊 常見hash函數 比如,md5,sha-1,crc16,crc32等
Hash算法的好壞需要考慮以下幾個方面:
-
Hash函數總體結構上是否具有理論已證明的安全性。例如SHA-3的優勝者KECCAK采用的海綿結構就是能夠在理論上證明結構安全的,可以防止針對MD結構的一系列攻擊。
2.Hash函數結構中采用的壓縮函數F性質是否足夠良好。現階段,壓縮函數F一般由成熟的分組密碼或者序列密碼組合設計,需要使用密碼分析手段分析該F是否可抵抗各種類型的密碼攻擊。
3.Hash函數的混亂、擴散、以及輸出摘要值的随機性質是否良好。建議閱讀吳文玲的《分組密碼的設計與分析》、NIST随機性測試等資料了解相關内容。PHP中出現的字元串Hash函數
static unsigned long hashpjw(char *arKey, unsigned int nKeyLength)
{
unsigned long h = 0, g;
char *arEnd=arKey+nKeyLength;
while (arKey < arEnd) {
h = (h << 4) + *arKey++;
if ((g = (h & 0xF0000000))) {
h = h ^ (g >> 24);
h = h ^ g;
}
}
return h;
}
●OpenSSL中出現的字元串Hash函數
unsigned long lh_strhash(char *str)
{
int i,l;
unsigned long ret=0;
unsigned short *s;
if (str == NULL) return(0);
l=(strlen(str)+1)/2;
s=(unsigned short *)str;
for (i=0; i
ret^=(s[i]<<(i&0×0f));
return(ret);
}
unsigned long lh_strhash(const char *c)
{
unsigned long ret=0;
long n;
unsigned long v;
int r;
if ((c == NULL) || (c == ‘/0′))
return(ret);
/
unsigned char b[16];
MD5(c,strlen©,b);
return(b[0]|(b[1]<<8)|(b[2]<<16)|(b[3]<<24));
*/
n=0×100;
while (*c)
{
v=n|(c);
n+=0×100;
r= (int)((v>>2)^v)&0×0f;
ret=(ret(32-r));
ret&=0xFFFFFFFFL;
ret^=vv;
c++;
}
return((ret>>16)^ret);
}
●MySql中出現的字元串Hash函數
#ifndef NEW_HASH_FUNCTION
static uint calc_hashnr(const byte *key,uint length)
{
register uint nr=1, nr2=4;
while (length–)
{
nr^= (((nr & 63)+nr2)*((uint) (uchar) *key++))+ (nr << 8);
nr2+=3;
}
return((uint) nr);
}
static uint calc_hashnr_caseup(const byte *key,uint length)
{
register uint nr=1, nr2=4;
while (length–)
{
nr^= (((nr & 63)+nr2)*((uint) (uchar) toupper(*key++)))+ (nr << 8);
nr2+=3;
}
return((uint) nr);
}
#else
uint calc_hashnr(const byte *key, uint len)
{
const byte *end=key+len;
uint hash;
for (hash = 0; key < end; key++)
{
hash *= 16777619;
hash ^= (uint) (uchar) key;
}
return (hash);
}
uint calc_hashnr_caseup(const byte *key, uint len)
{
const byte *end=key+len;
uint hash;
for (hash = 0; key < end; key++)
{
hash *= 16777619;
hash ^= (uint) (uchar) toupper(*key);
}
return (hash);
}
#endif
Mysql中對字元串Hash函數還區分了大小寫
●另一個經典字元串Hash函數
unsigned int hash(char *str)
{
register unsigned int h;
register unsigned char *p;
for(h=0, p = (unsigned char *)str; *p ; p++)
h = 31 * h + *p;
return h;
1、資料庫:以下哪項不是HASH索引的特征?
正确答案: C
A MySQL不能确定在兩個值之間大約有多少行
B 不能使用hash索引來加速ORDER BY操作
C 隻用于使用“>”或“<”操作符的比較
D 隻能使用整個關鍵字來搜尋一行
2、使用者JANKO 想在有三個列: empid, lastname, 和 salary. 的employee表中插入一行,該使用者想輸入資料empid 59694, lastname Harris, 但沒有salary. 哪一個語句最适合這項工作?
正确答案: A
A INSERT INTO employee VALUES(59694,‘harris’, null)
B INSERT INTO employee VALUES(59694,‘harris’)
C INSERT INTO employee (empid, lastname, salary) VALUES(59694,‘harris’)
D INSERT INTO employee (SELECT 59694 FROM ‘harris’)
3、資料庫:以下哪項是在視圖上不能進行的操作?
正确答案: C
A 更新視圖
B 查詢視圖
C 在視圖上定義新的表
D 在視圖上定義新的視圖
4、以下哪項不是DNS記錄類型?
正确答案: C
A AAAA
B TXT
C TTL
D PTR
5、在linux環境下,檢視日志檔案的最後100行資料的正确方式是?
正确答案: D
A mv -100 a.log
B grep -100 a.log
C cat -100 a.log
D tail -100 a.log
6、假設用4個同樣大小的硬碟來做RAID,以下哪種raid 模式獲得的可用磁盤空間最少?
正确答案: B
A no-raid
B raid5
C raid1
D raid6
7、關于linux檔案系統軟連接配接和硬連接配接的差別,如下哪條是錯誤的?
正确答案: A
A 硬連接配接指通過檔案複制來進行連接配接, 類似檔案别名。
B 硬連接配接的作用是允許一個檔案擁有多個有效路徑名,删除源檔案不影響硬連接配接
C 軟連接配接又被稱為符号連接配接,類似于快捷方程式
D 軟連接配接包含另一檔案的位置資訊,删除源檔案軟體連也無法通路了
8、下面關于網絡七層和四層的描述,哪條是錯誤的?
正确答案: A
A SNMP工作在四層
B 四層是指網絡的傳輸層,主要包括IP和端口資訊
C 七層是指網絡的應用層(協定層),比如 http協定就工作在七層
D 四層主要應用于TCP和UDP的代理,七層主要應用于HTTP等協定的代理
9、以下代碼輸出什麼?
list = [‘a’, ‘b’, ‘c’, ‘d’, ‘e’] print list[10:] 正确答案: A
A [ ]
B 程式異常
C [‘a’, ‘b’, ‘c’, ‘d’, ‘e’]
D 輸出空
10、Python語言什麼那些類型的資料才能作為字典的key?
正确答案: D
A 沒有限制
B 字母,數字,下劃線
C 字母
D 可被hash的的類型
11、以下哪些是常見的TCP Flags?
正确答案: A B C D
A SYN
B RST
C ACK
D URG
12、Linux作業系統具備以下哪些特性?
正确答案: A B C
A Multi User
B Multi Tasking
C Multi Process
D None of the above
13、編寫shell腳本,能夠生成32位随機密碼
一種可能的方法:cat /dev/urandom | head -1 | md5sum | head -c 32
14、假設你是一個小型網站的管理者。周末的時候,你在自己家裡發現網站打不開了,請問你能做哪些操作或方法,來确定是什麼問題?
參考答案:1. 用自己的電腦通路百度網站,以檢查是否自己電腦問題; 2. 聯系自己朋友,看看其他人能否打開網站; 3. 使用ping 指令 ping 網站伺服器位址,檢查伺服器是否正常; 4. 登陸伺服器,使用netstat 指令檢查80端口是否打開; 5. 登陸伺服器,使用 ps 指令檢查 http 程序是否存在; 6. 登陸伺服器,檢查網站日志; (不需要答完整,可用根據回答的方法個數來給分)