mysql的电话面试题_以往百度电话面试题
1、一個概率題:54張撲克牌,除去兩張大小王剩下52張撲克牌。問紅桃A和黑桃A同時被一個人拿到的概率是多少?C(4,1)*C(50,11)/C(52,13)???假設(shè)分為四個人拿,每人拿13張。2、給一組數(shù),其中只有一個數(shù)是重復(fù)了奇數(shù)次,其余都重復(fù)了偶數(shù)次,如何找出奇數(shù)次的那個數(shù)ans=0,for?i?in?1?to?n?,?ans^=num[i]?最后qns為所求
把所有的數(shù)異或,最后剩下的就是那個數(shù)了3、上千萬條記錄,統(tǒng)計出重復(fù)記錄最多的前N條。先統(tǒng)計每個記錄出現(xiàn)的次數(shù)(hash),再求第N大元素(經(jīng)典法)4、一個N個整數(shù)的無序數(shù)組,給你一個數(shù)sum,求出數(shù)組中是否存在兩個數(shù),使他們的和為sum
O(nlg(n))先排序,然后兩個指針從數(shù)組的兩端向中間靠攏
《編程之美》一書有講
5、談?wù)勀銓?shù)據(jù)庫中索引的理解
如果對于一個數(shù)據(jù)庫表中的訪問比較頻繁,那么可以考慮建立索引,根據(jù)搜索語句的不同建立的索引也不相同,如果查詢語句大多是=什么數(shù)據(jù)的話,或者是一個范圍的話,那么可以建立b+樹索引,如果所搜索的字段值的唯一性比較好,那么可以考慮建立位圖索引,以節(jié)約空間,但是如果查詢語句大多是搜索空值,那么沒有必要建立索引了,因為空值是沒有辦法建立索引的。
在經(jīng)常用在連接的列上,這些列主要是一些外鍵,可以加快連接的速度;
在經(jīng)常需要排序的列上創(chuàng)建索引,因為索引已經(jīng)排序,這樣查詢可以利用索引的排序,加快排序查詢時間
不應(yīng)該建立索引的地方:訪問比較少,值得范圍很少(例如性別,年齡),經(jīng)常進行修改的。
如果表的行數(shù)比較小的話,沒有必要建立索引。
6、現(xiàn)在普通關(guān)系數(shù)據(jù)庫用得數(shù)據(jù)結(jié)構(gòu)是什么類型的數(shù)據(jù)結(jié)構(gòu)
B+樹?bitmap
7、索引的優(yōu)點和缺點
優(yōu)點:
第一,可以大大加快數(shù)據(jù)的檢索速度,這也是創(chuàng)建索引的最主要的原因。
第二,通過創(chuàng)建唯一性索引,可以保證數(shù)據(jù)庫表中每一行數(shù)據(jù)的唯一性。
第三,可以加速表和表之間的連接,特別是在實現(xiàn)數(shù)據(jù)的參考完整性方面特別有意義。例如,有些搜索語句經(jīng)常需要對兩個表同時進行join,對于這兩個表進行join后的索引,可以大大加快訪問這兩個表的速度。
第四,如果索引是有序的,那么在搜索一個范圍時,可以很快給出結(jié)果。而不用進行排序。
缺點:
第一,時間:創(chuàng)建索引和維護索引要耗費時間,這種時間隨著數(shù)據(jù)量的增加而增加。
第二,空間:索引需要占物理空間,除了數(shù)據(jù)表占數(shù)據(jù)空間之外,每一個索引還要占一定的物理空間,如果要建立聚簇索引,那么需要的空間就會更大。
第三,維護難度:當(dāng)對表中的數(shù)據(jù)進行增加、刪除和修改的時候,索引也要動態(tài)的維護,這樣就降低了數(shù)據(jù)的維護速度。
8、session和cache的區(qū)別是什么
Session?是單用戶的會話狀態(tài)。
當(dāng)用戶訪問網(wǎng)站時,產(chǎn)生一個?SESSIONID。并存在于COOKIES中。每次向服務(wù)器請求時,發(fā)送這個COOKIES,再從服務(wù)器中檢索是否有這個SESSIONID保存的數(shù)據(jù)。。。
而?CACHE,則是服務(wù)器端的緩存,是所有用戶都可以訪問和共享的。
9、如果有幾千個session,怎么提高效率
分子目錄存放session提高效率
10、session是存儲在什么地方,以什么形式存儲的。
session是存在服務(wù)器的內(nèi)存中?每個會話對應(yīng)一個sessionId通過sessionId開區(qū)分是那個會話的session,是以鍵值對的形式存儲hashtable
Tomcat?中的?Session?是放在?org.apache.catalina.session.ManagerBase?類中,以?HashMap?格式存放,key?為?sessionId,?value?為?org.apache.catalina.Session?接口,這個接口由?org.apache.catalina.session.StandardSession?類實現(xiàn),這個類同時實現(xiàn)了HttpSession?接口。實際上?Tomcat?中所使用的?HttpSession?實現(xiàn)并不把?StandardSession?拿來直接使用的,而是為這個類做了個?org.apache.catalina.session.StandardSessionFacade?的門面,這個門面什么事情都沒做過,只是委托其內(nèi)部屬性的?StandardSession?去做。另外,StandardSession,也就是?HttpSession?在?Tomcat?中實現(xiàn)的根源,其中的數(shù)據(jù),也就是我們采用?session.setAttribute(key,?value);?設(shè)置進去的值是采用一個?Hashtable?來存放的。
11、程序的調(diào)試
看錯誤報告,alert,print,設(shè)置斷點,messagebox,
Application是公共的,所有人都能看到,所以可以用來做聊天室,session是私有的,每個客戶端都存在一個不同的session生存期正常是20分鐘,也可以自己設(shè)定為1分鐘或2個小時cookie是保存在本機的文件,記錄短小的信息,除非你讓cookie過期,否則會一直存在viewstate類似于asp中的hidden控件,用來記錄頁面中的控件的狀態(tài)的,主要在頁面間信息傳遞時用,cache是緩存,用來記錄已經(jīng)執(zhí)行過的一些數(shù)據(jù),比如讀取數(shù)據(jù)庫,目的是加速顯示,減少服務(wù)器的負擔(dān),過期時間也是可以自己設(shè)定的,
13、對給定的上億條無序的url,請按照domain、site以及path分別排序,并請指出排序過程中可能會遇到的哪些問題?如何提高效率?
14、內(nèi)存中有一個長數(shù)組,條目數(shù)為10萬,數(shù)組單元為結(jié)構(gòu)體struct?array,sizeof(struct?array)為512字節(jié)。結(jié)構(gòu)有一int型成員變量weight?,F(xiàn)需要取得按weight值從大到小排序的前500個數(shù)組單元,請實現(xiàn)算法,要求效率盡可能高。
思路:這題屬于排序的內(nèi)容,題目要求只排序前500個數(shù)組單元,則在所有常用算法中,堆排序不僅能實現(xiàn)要求,還能達到n*lg(n)的時間復(fù)雜度,相對較快。因此,用堆排序解決。算法如下:1,將長數(shù)組按照變量weight調(diào)整為最大堆2,取第一個元素和最后一個元素交換3,再執(zhí)行1,2總共循環(huán)500次4,取數(shù)組的最后500個元素,就是排序的前500個單元
15、如何用兩個指針檢測一個鏈表是否為帶回路(也就是循環(huán)鏈表)
用兩個步長相差1的指針在鏈表中移動,如果有回路,肯定兩個指針會相遇的
16、有一百個人,其中有一個是明星。明星不認識任何人,其他人都認識明星以及若干個其他人。你可以找任意兩個人,問他們互相是否認識。?問:如何以最快的方式找出明星。
答案是:找第一個人,問是否認識第二個。如果認識,說明第一個人不是明星,排除;如果不認識,說明第二個人不是明星,排除。以此類推,每次都可以排除一個人,最多99次。
17、如何用兩個隊列模擬棧。
假設(shè)queuea和queueb。
入棧:由queuea入隊列
出棧:
1.如果queuea.size>1,queuea元素出隊列到queueb,但queuea保留一個元素,并出隊列
2.如果queuea.size=1,queuea出隊列
3.如果queuea.size=0,且queueb.size>0,queueb所有元素出隊列到queuea,且queuea再導(dǎo)出元素到queueb,但queuea保留一個元素,并出隊列
4.如果queuea.size=0&?queueb.size=0,沒有元素可出棧
18、如何用兩個堆棧模擬隊列
假設(shè)instack和outstack。
入隊列:由instack入棧
出隊列:
1.如果outstack為空,instack所有元素出棧到outstack
2.如果outstack不為空,outstack出棧
3.如果outstack為空,沒有元素可出隊列
19、如何找到鏈表的中間元素呢?
1.?如果是雙向鏈表,那么設(shè)置兩個指針,一個指向頭
一個指向尾,指向頭的指針和指向尾的指針同時向后向前移動,
a.當(dāng)他們的next為對方的時候,這兩個指針指向中間的兩個元素
b.上面的情況時偶數(shù)個元素的情況,如果是奇數(shù)個元素呢?
這個時候需要判斷他們指向的是不是同一個元素,如果是,
那么這個元素就是中間的元素
所以,雙向鏈表需要判斷兩種情況,
當(dāng)他們的next為對方的時候或者同一個元素的時候,
這個時候就找到了中間的元素
2.如果是單鏈表,情況稍微復(fù)雜點。
這個時候還是需要設(shè)置兩個指針,都指向鏈表頭,但是移動的速度不一樣
其中一個指針的移動速度是另外一個的兩倍。
當(dāng)速度快的指針沒有next和next的next的時候,循環(huán)結(jié)束
a.當(dāng)單鏈表只有一個元素的時候,直接結(jié)束
b.當(dāng)有兩個元素的時候,直接結(jié)束
當(dāng)有三個或以上元素的時候,循環(huán)即可。循環(huán)結(jié)束時,
速度慢的指針指向的就是中間的元素。
但是當(dāng)單鏈表元素有偶數(shù)個的時候,上面的辦法只能找出來一個
中間元素。所以在指針移動的時候記錄元素的個數(shù),如果是偶數(shù)個元素,
那么速度慢的指針指向的元素和這個元素的next都是中間元素。
20、多個線程訪問共享內(nèi)存時應(yīng)該怎么辦
21、智力題目
一個小猴子邊上有100根香蕉,它要走過50米才能到家,每次它最多只能搬50根香蕉,它每走1米就要吃掉一根,請問它最多能把多少根香蕉搬到家里?
設(shè)Y為要求的香蕉最大剩余數(shù),X為要求的那個點(X米),可以列出方程式:
1.?Y=(100-3X)?-?(50-X)=50-2X?所以x越小y越大
2.?(100-3X)<=50剩余的香蕉數(shù)小于等于50,否則拿不了,x>=16又2/3因此x=17
Y=16
很容易求出Y=16
總結(jié)
以上是生活随笔為你收集整理的mysql的电话面试题_以往百度电话面试题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python中怎么表示整数的点称为整点_
- 下一篇: python查微信好友是否删除自己_Py