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