9月22日晚收到網(wǎng)易筆試通知,提示歡迎參加23號(hào)廣州地區(qū)校招,詳情筆試地點(diǎn)請(qǐng)等詳細(xì)通知,結(jié)果一直到23日下午4點(diǎn)半,距離筆試開(kāi)始只有2個(gè)半小時(shí),才收到筆試地點(diǎn)的郵件和短信,這蛋疼得,于是趕在下班高峰期,趕往大學(xué)城華工。又是華工,看來(lái)各大企業(yè)都很偏愛(ài)大學(xué)城華工啊。投的崗位是杭州研發(fā)院的前端開(kāi)發(fā)。
半路上買(mǎi)了一個(gè)麥當(dāng)勞套餐,下地鐵,換了三次站,在六點(diǎn)半終于趕到了大學(xué)城。A4教學(xué)樓,考場(chǎng)在2樓的一間教室,教室門(mén)口貼著一張筆試名單:一張半紙。前端開(kāi)發(fā)的大概20個(gè),運(yùn)維的、產(chǎn)品的也都在一張紙上,總共大概100多人,哥驚訝發(fā)現(xiàn)自己排在第一(座位號(hào)),大部分筆試者是華工、中大、廣外的,暨大的我只見(jiàn)到3個(gè)(百年僑校情何以堪),另外見(jiàn)到一個(gè)西安電子科技大學(xué),一個(gè)香港中文、一個(gè)深大的。廣州其他學(xué)校的幾個(gè)學(xué)校的同學(xué)基本沒(méi)有,看情況網(wǎng)易這次筆試是直接設(shè)了學(xué)歷檻,不知道有沒(méi)有了解情況的朋友?當(dāng)然,廣州這邊的考生一般也不怎么想出省也是一個(gè)原因,網(wǎng)易游戲倒是廣州的,可能那個(gè)會(huì)比較多人吧。
現(xiàn)場(chǎng)還有不少來(lái)霸筆的,感覺(jué)比正常筆試的還多,工作人員讓正常筆試的排一隊(duì),霸筆的在另一邊再排一隊(duì)。跟在場(chǎng)的其他同學(xué)隨便扯了扯,然后拿出手機(jī)開(kāi) Evernote 看了一下以前整理的前端相關(guān)的一些筆記,7點(diǎn)就進(jìn)考場(chǎng)了,監(jiān)控的人員胸口掛了一個(gè)「智聯(lián)招聘」的牌子,敢情網(wǎng)易把這個(gè)筆試是直接外包了。筆試者按照座位號(hào)入座,霸筆的被工作人員領(lǐng)到了其他地方。發(fā)試卷了,一張答題卡,一套試卷。這個(gè)答題卡,就上面一個(gè)「?jìng)€(gè)人信息欄」,下面就是空白,意味著,所有的選擇題、填空題、編程題,都要你自己寫(xiě),如果答題卡不夠,可以再要。下面來(lái)說(shuō)說(shuō)考題。
考什么
總共有兩大部分,第一部分為計(jì)算機(jī)科學(xué)基礎(chǔ)題,所有技術(shù)崗的筆試者都要答。第二部分為「專(zhuān)業(yè)題」,根據(jù)所報(bào)崗位不同而分別出題。
第一部分:計(jì)算機(jī)科學(xué)基礎(chǔ)題
表示試卷發(fā)下來(lái),我就傻眼了,前面12道選擇題+3道填空題,屬于所有技術(shù)崗位都必須考的計(jì)算機(jī)專(zhuān)業(yè)基礎(chǔ)題。
由于我不是計(jì)算機(jī)專(zhuān)業(yè)的,不少計(jì)算機(jī)科學(xué)很理論化的知識(shí)的確是不了解,剛剛搜到CSDN 已經(jīng)有人放出了前面的一部分,自己也就先 COPY 過(guò)來(lái)吧,解析部分為自己整理,若出錯(cuò),請(qǐng)指正。
1.(2分)對(duì)于多關(guān)鍵字而言,那種文件組織方便而又高效()
A、順序文件 B、倒排文件 C、散列文件 D、B+樹(shù)索引文件
解析:答案 B。
文件在外存上的基本的組織方式有四種:順序組織,索引組織,散列組織和鏈組織;對(duì)應(yīng)的的文件名稱(chēng)分別為:順序文件、索引文件、散列文件和多關(guān)鍵字文件。選擇哪一種文件組織方式,取決于對(duì)文件中記錄的使用方式和頻繁程度、存取要求、外存的性質(zhì)和容量。
多關(guān)鍵字文件:包含有多個(gè)次關(guān)鍵字索引的文件稱(chēng)為多關(guān)鍵字文件。
倒排表的主要優(yōu)點(diǎn)是:在處理復(fù)雜的多關(guān)鍵字查詢(xún)時(shí),可在倒排表中先完成查詢(xún)的交、并等邏輯運(yùn)算,得到結(jié)果后再對(duì)記錄進(jìn)行存取。這樣不必對(duì)每個(gè)記錄隨機(jī)存取,把對(duì)記錄的查詢(xún)轉(zhuǎn)換為地址集合的運(yùn)算,從而提高查找速度。
2.(2分)以下哪些算法可用于遍歷網(wǎng)絡(luò)圖()
A、廣度優(yōu)先搜索 B、深度優(yōu)先搜索 C、線(xiàn)性規(guī)劃策略 D、決策樹(shù)
解析:答案 A、B。
廣度優(yōu)先搜索假設(shè)從圖中某個(gè)頂點(diǎn)v出發(fā),在訪(fǎng)問(wèn)了v之后依次訪(fǎng)問(wèn)v的各個(gè)未曾訪(fǎng)問(wèn)過(guò)的鄰接點(diǎn),然后再分別從這些鄰接點(diǎn)出發(fā)依次訪(fǎng)問(wèn)它們的鄰接點(diǎn),并使先被訪(fǎng)問(wèn)的頂點(diǎn)的鄰接點(diǎn)先于后被訪(fǎng)問(wèn)的頂點(diǎn)的鄰接點(diǎn)被訪(fǎng)問(wèn)(因此需要用隊(duì)列來(lái)存儲(chǔ)頂點(diǎn)),直到圖中所有已被訪(fǎng)問(wèn)的頂點(diǎn)的鄰接點(diǎn)都被訪(fǎng)問(wèn)為止。如果此時(shí)圖中還有未被訪(fǎng)問(wèn)的頂點(diǎn),則另選圖中未被訪(fǎng)問(wèn)的頂點(diǎn)作為起點(diǎn),重復(fù)上述過(guò)程,直到圖中所有頂點(diǎn)都被訪(fǎng)問(wèn)為止。
深度優(yōu)先搜索法是樹(shù)的先根遍歷的推廣,它的基本思想是:從圖G的某個(gè)頂點(diǎn)v0出發(fā),訪(fǎng)問(wèn)v0,然后選擇一個(gè)與v0相鄰且沒(méi)被訪(fǎng)問(wèn)過(guò)的頂點(diǎn)vi訪(fǎng)問(wèn),再?gòu)膙i出發(fā)選擇一個(gè)與vi相鄰且未被訪(fǎng)問(wèn)的頂點(diǎn)vj進(jìn)行訪(fǎng)問(wèn),依次繼續(xù)。如果當(dāng)前被訪(fǎng)問(wèn)過(guò)的頂點(diǎn)的所有鄰接頂點(diǎn)都已被訪(fǎng)問(wèn),則退回到已被訪(fǎng)問(wèn)的頂點(diǎn)序列中最后一個(gè)擁有未被訪(fǎng)問(wèn)的相鄰頂點(diǎn)的頂點(diǎn)w,從w出發(fā)按同樣的方法向前遍歷,直到圖中所有頂點(diǎn)都被訪(fǎng)問(wèn)。
3.(2分)我們使用一個(gè)6元組<a,b,c,d,e,f>來(lái)表示6個(gè)節(jié)點(diǎn)的無(wú)向圖的頂點(diǎn)數(shù),請(qǐng)問(wèn)以下哪些6元組是可能的組合()
A、<1,2,3,4,5,6>
B、<2,4,4,2,3,5>
C、<1,3,4,2,2,1>
D、<1,2,2,4,5,2>
解析:
無(wú)向圖:一個(gè)無(wú)向圖(undirected graph)是一個(gè)二元組<V,E>,其中:1.V是非空集合,稱(chēng)為頂點(diǎn)集。2.E是V中元素構(gòu)成的無(wú)序二元組的集合,稱(chēng)為邊集。
若一個(gè)圖中每條邊都是無(wú)方向的,則稱(chēng)為無(wú)向圖。
若G是無(wú)向圖,則0≤e≤n(n-1)/2
4.(2分)以下關(guān)于可計(jì)算性的說(shuō)法正確的是()
A、 所有問(wèn)題最終都可以抽象為一個(gè)計(jì)算模型,圖靈機(jī)可以在一個(gè)有限的時(shí)間(雖然可能會(huì)占用非常久的時(shí)間)內(nèi)完成計(jì)算:現(xiàn)代計(jì)算機(jī)的設(shè)計(jì)正是基于該理論。
B、 存在部分問(wèn)題,我們無(wú)法在有限時(shí)間內(nèi),給出解答:但是,所有問(wèn)題都可以在有限時(shí)間內(nèi)驗(yàn)證其解答的正確性。
C、 Godel(哥德?tīng)枺┑谝欢芍该鞑淮嬖谕陚淝蚁嗳莸墓硐到y(tǒng)。
D、 以上說(shuō)法都不正確。
5.(2分)16進(jìn)制數(shù)值C396和8進(jìn)制數(shù)值64474的異或結(jié)果值(10進(jìn)制)為()
A、43690 B、16660 C、60350 D、20375
解析:
異或:Exclusive OR(異-或運(yùn)算、模2和),異或(xor)是一個(gè)數(shù)學(xué)運(yùn)算符。它應(yīng)用于邏輯運(yùn)算。異或符號(hào)為“^”。真異或假的結(jié)果是真,假異或真的結(jié)果也是真,真異或真的結(jié)果是假,假異或假的結(jié)果是假。就是說(shuō)兩個(gè)值不相同,則異或結(jié)果為真。反之,為假。 不同為1,相同為0.
若x是二進(jìn)制數(shù)0101,y是二進(jìn)制數(shù)1011,則x^y=1110。
只有在兩個(gè)比較的位不同時(shí)其結(jié)果是1,否則結(jié)果為0
即“相同為0,不同為1”!
6.(2分)以下經(jīng)典的問(wèn)題哪些屬于NP問(wèn)題()
A、圖靈停機(jī)問(wèn)題 B、排序 C、0,1背包問(wèn)題 D、枚舉有限集合的所有子集
7.(2分)存在以下字母串:AGDCCDDDGFBBFFGGDDDGGGEFFDDCCCDDDFGAAA現(xiàn)在需要對(duì)該串進(jìn)行Huffman編碼,那么字母F對(duì)應(yīng)bit值(二進(jìn)制格式為)()
A、10 B、11 C、110 D、101
解析:
//既然現(xiàn)在用電腦,就用 javascript 來(lái)解決一下如果數(shù)數(shù)的問(wèn)題
var temp='AGDCCDDDGFBBFFGGDDDGGGEFFDDCCCDDDFGAAA';
var count=temp.match(/F/g); // 搜索整個(gè)字符串匹配字母 F
console.log(temp.length); //字符總長(zhǎng)度為36
console.log(count.length);; //輸出的結(jié)果應(yīng)該是6
霍夫曼編碼:(Huffman Coding)是一種編碼方式,是一種用于無(wú)損數(shù)據(jù)壓縮的熵編碼(權(quán)編碼)算法,該方法完全依據(jù)字符出現(xiàn)概率來(lái)構(gòu)造異字頭的平均長(zhǎng)度最短的碼字,有時(shí)稱(chēng)之為最佳編碼。
HC 具體方法:先按出現(xiàn)的概率大小排隊(duì),把兩個(gè)最小的概率相加,作為新的概率 和剩余的概率重新排隊(duì),再把最小的兩個(gè)概率相加,再重新排隊(duì),直到最后變成1。每次相 加時(shí)都將“0”和“1”賦與相加的兩個(gè)概率,讀出時(shí)由該符號(hào)開(kāi)始一直走到最后的“1”, 將路線(xiàn)上所遇到的“0”和“1”按最低位到最高位的順序排好,就是該符號(hào)的霍夫曼編碼。
9.(2分)進(jìn)程管理如果設(shè)計(jì)不當(dāng)將會(huì)導(dǎo)致“死鎖”的產(chǎn)生,對(duì)待死鎖,典型的銀行家算法屬于(1),而剝奪資源屬于(2)的方法。
A、(1)=死鎖預(yù)防,(2)=死鎖避免
B、(1)=死鎖預(yù)防,(2)=死鎖解除
C、(1)=死鎖避免,(2)=死鎖預(yù)防
D、(1)=死鎖避免,(2)=死鎖解除
解析:答案B
死鎖: 是指兩個(gè)或兩個(gè)以上的進(jìn)程在執(zhí)行過(guò)程中,因爭(zhēng)奪資源而造成的一種互相等待的現(xiàn)象,若無(wú)外力作用,它們都將無(wú)法推進(jìn)下去。
系統(tǒng)產(chǎn)生死鎖的四個(gè)必要條件:
1)互斥條件:指進(jìn)程對(duì)所分配到的資源進(jìn)行排它性使用,即在一段時(shí)間內(nèi)某資源只由一個(gè)進(jìn)程占用。如果此時(shí)還有其它進(jìn)程請(qǐng)求資源,則請(qǐng)求者只能等待,直至占有資源的進(jìn)程用畢釋放。
2)請(qǐng)求和保持條件:指進(jìn)程已經(jīng)保持至少一個(gè)資源,但又提出了新的資源請(qǐng)求,而該資源已被其它進(jìn)程占有,此時(shí)請(qǐng)求進(jìn)程阻塞,但又對(duì)自己已獲得的其它資源保持不放。
3)不剝奪條件:指進(jìn)程已獲得的資源,在未使用完之前,不能被剝奪,只能在使用完時(shí)由自己釋放。
4)環(huán)路等待條件:指在發(fā)生死鎖時(shí),必然存在一個(gè)進(jìn)程——資源的環(huán)形鏈,即進(jìn)程集合{P0,P1,P2,···,Pn}中的P0正在等待一個(gè)P1占用的資源;P1正在等待P2占用的資源,……,Pn正在等待已被P0占用的資源。
銀行家算法:我們可以把操作系統(tǒng)看作是銀行家,操作系統(tǒng)管理的資源相當(dāng)于銀行家管理的資金,進(jìn)程向操作系統(tǒng)請(qǐng)求分配資源相當(dāng)于用戶(hù)向銀行家貸款。操作系統(tǒng)按照銀行家制定的規(guī)則為進(jìn)程分配資源,當(dāng)進(jìn)程首次申請(qǐng)資源時(shí),要測(cè)試該進(jìn)程對(duì)資源的最大需求量,如果系統(tǒng)現(xiàn)存的資源可以滿(mǎn)足它的最大需求量則按當(dāng)前的申請(qǐng)量分配資源,否則就推遲分配。當(dāng)進(jìn)程在執(zhí)行中繼續(xù)申請(qǐng)資源時(shí),先測(cè)試該進(jìn)程已占用的資源數(shù)與本次申請(qǐng)的資源數(shù)之和是否超過(guò)了該進(jìn)程對(duì)資源的最大需求量。若超過(guò)則拒絕分配資源,若沒(méi)有超過(guò)則再測(cè)試系統(tǒng)現(xiàn)存的資源能否滿(mǎn)足該進(jìn)程尚需的最大資源量,若能滿(mǎn)足則按當(dāng)前的申請(qǐng)量分配資源,否則也要推遲分配。
10.(2分)關(guān)于數(shù)據(jù)庫(kù)索引,以下說(shuō)法正確的是()
A、針對(duì)某些字段建立索引,能夠有小減少相關(guān)數(shù)據(jù)庫(kù)表的磁盤(pán)空間占用;
B、針對(duì)某些字段建立索引,能夠有效的提升相關(guān)字段的讀與寫(xiě)的效率;
C、常見(jiàn)數(shù)據(jù)庫(kù)管理系統(tǒng),通常使用hash表來(lái)存儲(chǔ)索引;
D、數(shù)據(jù)庫(kù)索引的存在,可能導(dǎo)致相關(guān)字段刪除的效率降低;
第二部分:專(zhuān)業(yè)題(前端開(kāi)發(fā))
題型有1.不定項(xiàng)選擇題 12道,2.填空題 5道左右 3.簡(jiǎn)答題 4.編程題 5道左右,偏重考察 javascript,編程題要求手寫(xiě)代碼,其中包含 js 題目3道還是4道,一道給出三切換標(biāo)簽界面原型圖,要求手寫(xiě)html+css+javascript實(shí)現(xiàn)原型圖和交互效果。由于距離有一段時(shí)間了,詳細(xì)的題目記不清楚了。就回憶一下幾個(gè)知識(shí)點(diǎn)吧。
1.簡(jiǎn)答題:什么是閉包,閉包有什么用?請(qǐng)舉例說(shuō)明。
解析:Javascript中,函數(shù)內(nèi)部可以讀取全局變量,函數(shù)外部無(wú)法讀取函數(shù)內(nèi)部的局部變量。
function f1(){
var n=1024;
function f2(){
console.log(n)
}
return f2();
}
var foo =f1();
foo();
//以上函數(shù)f2()就是閉包
閉包就是能夠讀取其他函數(shù)內(nèi)部變量的函數(shù)。
2.填空題:apply 和 call 的用法和區(qū)別。
解析:
兩者的作用都是將函數(shù)綁定倒另外一個(gè)對(duì)象上面去,兩者僅僅在定義參數(shù)方式有所區(qū)別。
來(lái)自 MDN 的解釋?zhuān)篘OTE: While the syntax of this function is almost identical to that of apply(), the fundamental difference is that call() accepts an argument list, while apply() accepts a single array of arguments.
apply(thisArg,argArray);
call(thisArg[,arg1,arg2…] ]);
3.bind 函數(shù)的兼容性
解析:
bind方法會(huì)創(chuàng)建一個(gè)新函數(shù),稱(chēng)為綁定函數(shù).當(dāng)調(diào)用這個(gè)綁定函數(shù)時(shí),綁定函數(shù)會(huì)以創(chuàng)建它時(shí)傳入bind方法的第一個(gè)參數(shù)作為this,傳入bind方法的第二個(gè)以及以后的參數(shù)加上綁定函數(shù)運(yùn)行時(shí)本身的參數(shù)按照順序作為原函數(shù)的參數(shù)來(lái)調(diào)用原函數(shù).
fun.bind(thisArg[, arg1[, arg2[, ...]]])
4.參考給出的原型圖和要求,手寫(xiě) html,css和 js。要求實(shí)現(xiàn) selected 效果,和鼠標(biāo)切換不同 tab 分別顯示不同的內(nèi)容。