職位類(lèi)型:技術(shù)類(lèi)
面試時(shí)間:2015校招
招聘公司:美團(tuán)網(wǎng)
筆試題目好多是算法類(lèi)型的,貌似都是用c寫(xiě)的?,F(xiàn)在只模糊記得下面兩道題了:
1.求把一個(gè)字符串轉(zhuǎn)換成整數(shù),轉(zhuǎn)換出錯(cuò),則返回0,大概意思是這樣吧。
我想到的的解決辦法是,把每一個(gè)字符提取出來(lái),比如'9',字符'9'-'0'字符9減去字符0就是所對(duì)應(yīng)的數(shù)字了(數(shù)字加'0'就得到對(duì)應(yīng)的數(shù)字字符)。把得到的數(shù)字化成sum=sum*10 num;sum是累加的和,num是字符對(duì)應(yīng)的數(shù)字,開(kāi)始sum為0。
2.構(gòu)造一個(gè)函數(shù)把一個(gè)整數(shù)從高位到低位,比如123,存儲(chǔ)到單鏈表中,比如第一個(gè)結(jié)點(diǎn)存1,第二個(gè)結(jié)點(diǎn)存2,第3個(gè)結(jié)點(diǎn)存3,函數(shù)返回單鏈表的頭指針;構(gòu)造函數(shù)把前面的單鏈表乘個(gè)位數(shù)(0-9),把結(jié)果存到單鏈表中。
面試:給我面試的時(shí)一位帥哥,看起來(lái)還蠻和藹的。我走過(guò)去,開(kāi)始拿出草稿本和筆,準(zhǔn)備面試。面試官哥哥開(kāi)始讓我做下自我介紹,我就說(shuō)了下,其中他做了下筆記。然后就正式問(wèn)我問(wèn)題了。
1.你說(shuō)說(shuō)這筆試題目難不難?
這問(wèn)題答的不太好,我說(shuō)筆試都是算法和c語(yǔ)言的題目,而我已經(jīng)很久么碰過(guò)c了,所以有點(diǎn)難度。后來(lái)問(wèn)我學(xué)什么的,我說(shuō)是學(xué)java的,又問(wèn)了我是想搞后臺(tái)開(kāi)發(fā)還是android開(kāi)發(fā),這里回答覺(jué)得有很大的問(wèn)題,我就不說(shuō)了,我應(yīng)該肯定說(shuō)是搞android開(kāi)發(fā)的。
2.java的反射機(jī)制。
反射主要是指程序可以訪問(wèn),檢測(cè)和修改它本身的狀態(tài)或行為的一種能力。java中反射是一種強(qiáng)大的工具,它能夠創(chuàng)建靈活的代碼,這些代碼可以在運(yùn)行時(shí)裝載,無(wú)須在組件之間進(jìn)行鏈接。反射允許在編寫(xiě)與執(zhí)行時(shí),使程序能夠接入到j(luò)vm中的類(lèi)的內(nèi)部信息,而不是源代碼中選定的類(lèi)協(xié)作的代碼。這使反射成為構(gòu)建靈活應(yīng)用代碼的主要工具。需要注意的是,如果使用不當(dāng),反射的成本會(huì)很高。
3.數(shù)據(jù)庫(kù)的隔離機(jī)制,什么是樂(lè)觀鎖,悲觀鎖,有什么區(qū)別。
⑴數(shù)據(jù)庫(kù)提供了4中隔離級(jí)別:
①READ UNCOMMITTED(讀未提交數(shù)據(jù)):允許事務(wù)讀取未被其他事務(wù)提交的變更,臟讀、不可重復(fù)讀和幻讀的問(wèn)題都會(huì)出現(xiàn)。?
②READ COMMITED(讀已提交數(shù)據(jù)):只允許事務(wù)讀取已經(jīng)被其他事務(wù)提交的變更,可以避免臟讀,但不可重復(fù)讀和幻讀問(wèn)題仍然會(huì)出現(xiàn)。
③REPEATABLE READ(可重復(fù)讀):確保事務(wù)可以多次從一個(gè)字段中讀取相同的值,在這個(gè)事務(wù)持續(xù)期間,禁止其他事務(wù)對(duì)這個(gè)字段進(jìn)行更新,可以避免臟讀和不可重復(fù)讀,但幻讀的問(wèn)題依然存在。?
④SERIALIZABLE(串行化):確保事務(wù)可以從一個(gè)表中讀取相同的行,在這個(gè)事務(wù)持續(xù)期間,禁止其他事務(wù)對(duì)該表執(zhí)行插入、更新和刪除操作,所有并發(fā)問(wèn)題都可以避免,但性能十分低。?
⑵①Oracle 支持的2種事務(wù)隔離級(jí)別:READ COMMITED, SERIALIZABLE。Oracle默認(rèn)的事務(wù)隔離級(jí)別為: READ COMMITED。??
②Mysql 支持4種事務(wù)隔離級(jí)別。 Mysql默認(rèn)的事務(wù)隔離級(jí)別為: REPEATABLE READ。
4.什么是進(jìn)程,什么是線程,進(jìn)程和線程的區(qū)別。
進(jìn)程是具有一定獨(dú)立功能的程序關(guān)于某個(gè)數(shù)據(jù)集合上的一次運(yùn)行活動(dòng),進(jìn)程是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個(gè)獨(dú)立單位。
線程是指進(jìn)程內(nèi)的一個(gè)執(zhí)行單元,也是進(jìn)程內(nèi)的可調(diào)度實(shí)體。
與進(jìn)程的區(qū)別:
⑴地址空間:進(jìn)程內(nèi)的一個(gè)執(zhí)行單元;進(jìn)程至少有一個(gè)線程;它們共享進(jìn)程的地址空間;而進(jìn)程有自己獨(dú)立的地址空間。
⑵資源擁有:進(jìn)程是資源分配和擁有的單位,同一個(gè)進(jìn)程內(nèi)的線程共享進(jìn)程的資源。
⑶線程是處理器調(diào)度的基本單位,但進(jìn)程不是。
5.問(wèn)我用了什么瀏覽器,瀏覽器打開(kāi)一個(gè)新的標(biāo)簽頁(yè)面的時(shí)候是用的進(jìn)程還是線程?
我回答錯(cuò)了,正確的應(yīng)該是:看是什么瀏覽器,不同的瀏覽器,實(shí)現(xiàn)的方法有些不同,有的是用的多進(jìn)程,有的是共用一個(gè)進(jìn)程。比如谷歌瀏覽器,打開(kāi)一個(gè)標(biāo)簽就是一個(gè)新的進(jìn)程,但是也可以設(shè)置使用單進(jìn)程,即所有的標(biāo)簽共用一個(gè)進(jìn)程。有的瀏覽器使用的是單進(jìn)程。
多進(jìn)程提高了整個(gè)應(yīng)用的穩(wěn)定性:倘若有一個(gè)標(biāo)簽頁(yè)崩潰、假死了,并不會(huì)影響到其他的標(biāo)簽頁(yè)。
多進(jìn)程可以提高應(yīng)用整體性能:現(xiàn)在計(jì)算機(jī)已經(jīng)進(jìn)入多核時(shí)代,只有能利用多個(gè)核心的優(yōu)勢(shì)才能進(jìn)一步提高程序性能。一般而言,單進(jìn)程的程序要通過(guò)線程來(lái)利用多核,但是線程之間由于共享同一片內(nèi)存地址,編寫(xiě)代碼容易出現(xiàn)問(wèn)題,不如傳統(tǒng)的進(jìn)程方式方便穩(wěn)定。
6.字符串有什么匹配算法,kmp算法的時(shí)間復(fù)雜度,你能夠?qū)懸粋€(gè)kmp算法嘛?
字符串匹配算法有,Brute-Force算法和KMP算法,kmp算法的時(shí)間復(fù)雜度是O(n m)
????
7.問(wèn)我知道什么排序算法。
????????
8.寫(xiě)一個(gè)堆排序。
9.一個(gè)單鏈表a->b->c->d->e........->y->z,奇數(shù)不變,偶數(shù)符號(hào)變,轉(zhuǎn)換成a->b<-c->d<-............x<-y->z
這題的代碼,就略了,我就說(shuō)下思想吧,本來(lái)我以為按a->b<-c->d<-............x<-y->z輸出就可以了,但是最后面試官說(shuō)要返回一個(gè)這樣的單鏈表,汗。。難道我理解錯(cuò)了,但是他說(shuō)的時(shí)候只說(shuō)了一個(gè)節(jié)點(diǎn)里面只有一個(gè)存數(shù)據(jù),一個(gè)存下一個(gè)節(jié)點(diǎn)的指針,那箭頭存哪了?好吧,要是理解對(duì)了,我也就可以寫(xiě)出來(lái)了。。。。
思想:遍歷單鏈表,判斷是否是偶節(jié)點(diǎn),是偶節(jié)點(diǎn)的話,就把節(jié)點(diǎn)里面的箭頭變化下,最后函數(shù)返回頭指針。
10.單鏈表逆序比如a->b->c->d->e....->y->z,變成z->y->x..........->c->b->a
思想:用一個(gè)指針指向該單鏈表,單鏈表本身的指針指向NULL,遍歷新的單鏈表,取出新的每一個(gè)節(jié)點(diǎn),并把它插入到原來(lái)頭指針向的第一個(gè)節(jié)點(diǎn)前面,最后返回頭指針,這樣就可以實(shí)現(xiàn)逆序了。
11.一個(gè)概率問(wèn)題,一個(gè)色子6面,正常情況下每面出現(xiàn)的概率是1/6,現(xiàn)在要設(shè)計(jì)一個(gè)游戲,色子是不均勻的,其每面出現(xiàn)的概率都不在是1/6,而且每面出現(xiàn)的概率不一樣,怎么設(shè)計(jì)這個(gè)游戲使輸贏都是1/2。
12.一枚硬幣2面,不均勻的,所以正面朝上和反面朝上的概率都不是1/2,現(xiàn)在設(shè)計(jì)一個(gè)游戲,使輸贏都是1/2.
13.git的pull命令,怎么克隆,與克隆的區(qū)別。
14.git創(chuàng)建分支,切換分支,列出所有的分支。