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