程序員經(jīng)典面試題目
通常我們?cè)?a href='http://www.yishupeixun.net/speech/mianshi/' target='_blank'>面試計(jì)算機(jī)程序員時(shí),會(huì)遇到各種各樣的問(wèn)題。現(xiàn)在我們把程序員面試所要遇到的問(wèn)題做了一個(gè)總結(jié)與歸納。下面小編給大家?guī)?lái)程序員經(jīng)典面試題目有哪些,希望能幫助到大家!
2021年前端面試題目
1.1、前端 MV框架的意義
早期前端都是比較簡(jiǎn)單,基本以頁(yè)面為工作單元,內(nèi)容以瀏覽型為主,也偶爾有簡(jiǎn)單的表單操作,基本不太需要框架。
隨著 AJAX 的出現(xiàn),Web2.0的興起,人們可以在頁(yè)面上可以做比較復(fù)雜的事情了,然后前端框架才真正出現(xiàn)了。
如果是頁(yè)面型產(chǎn)品,多數(shù)確實(shí)不太需要它,因?yàn)轫?yè)面中的 JavaScript代碼,處理交互的絕對(duì)遠(yuǎn)遠(yuǎn)超過(guò)處理模型的,但是如果是應(yīng)用軟件類(lèi)產(chǎn)品,這就太需要了。
長(zhǎng)期做某個(gè)行業(yè)軟件的公司,一般都會(huì)沉淀下來(lái)一些業(yè)務(wù)組件,主要體現(xiàn)在數(shù)據(jù)模型、業(yè)務(wù)規(guī)則和業(yè)務(wù)流程,這些組件基本都存在于后端,在前端很少有相應(yīng)的組織。
從協(xié)作關(guān)系上講,很多前端開(kāi)發(fā)團(tuán)隊(duì)每個(gè)成員的職責(zé)不是很清晰,有了前端的 MV框架,這個(gè)狀況會(huì)大有改觀。
之所以感受不到 MV框架的重要性,是因?yàn)镸odel部分代碼較少,View的相對(duì)多一些。如果主要在操作View和Controller,那當(dāng)然 jQuery 這類(lèi)庫(kù)比較好用了。
參考《前端 MV框架的意義》
1.2、請(qǐng)簡(jiǎn)述盒模型
IE6盒子模型與W3C盒子模型。
文檔中的每個(gè)元素被描繪為矩形盒子。盒子有四個(gè)邊界:外邊距邊界margin, 邊框邊界bder, 內(nèi)邊距邊界padding與內(nèi)容邊界content。
CSS3中有個(gè)box-sizing屬性可以控制盒子的計(jì)算方式,
content-box:padding和bder不被包含在定義的width和height之內(nèi)。對(duì)象的實(shí)際寬度等于設(shè)置的width值和bder、padding之和。(W3C盒子模型)
bder-box:padding和bder被包含在定義的width和height之內(nèi)。對(duì)象的實(shí)際寬度就等于設(shè)置的width值。(IE6盒子模型)
參考《盒模型》
1.3、請(qǐng)你談?wù)凜ookie的弊端
a. 每個(gè)特定的域名下最多生成的cookie個(gè)數(shù)有限制
b. IE和Opera 會(huì)清理近期最少使用的cookie,F(xiàn)irefox會(huì)隨機(jī)清理cookie
c. cookie的最大大約為4096字節(jié),為了兼容性,一般不能超過(guò)4095字節(jié)
d. 安全性問(wèn)題。如果cookie被人攔截了,那人就可以取得所有的session信息。
1.4、瀏覽器本地存儲(chǔ)
在HTML5中提供了sessionStage和localStage。
sessionStage用于本地存儲(chǔ)一個(gè)會(huì)話(session)中的數(shù)據(jù),這些數(shù)據(jù)只有在同一個(gè)會(huì)話中的頁(yè)面才能訪問(wèn)并且當(dāng)會(huì)話結(jié)束后數(shù)據(jù)也隨之銷(xiāo)毀,是會(huì)話級(jí)別的存儲(chǔ)。
localStage用于持久化的本地存儲(chǔ),除非主動(dòng)刪除數(shù)據(jù),否則數(shù)據(jù)是永遠(yuǎn)不會(huì)過(guò)期的。
1.5、web stage和cookie的區(qū)別
a. Cookie的大小是受限的
b. 每次你請(qǐng)求一個(gè)新的頁(yè)面的時(shí)候Cookie都會(huì)被發(fā)送過(guò)去,這樣無(wú)形中浪費(fèi)了帶寬
c. cookie還需要指定作用域,不可以跨域調(diào)用
d. Web Stage擁有setItem,getItem等方法,cookie需要前端開(kāi)發(fā)者自己封裝setCookie,getCookie
e. Cookie的作用是與服務(wù)器進(jìn)行交互,作為HTTP規(guī)范的一部分而存在 ,而Web Stage僅僅是為了在本地“存儲(chǔ)”數(shù)據(jù)而生
f. IE7、IE6中的UserData通過(guò)簡(jiǎn)單的代碼封裝可以統(tǒng)一到所有的瀏覽器都支持web stage
1.6、對(duì)BFC規(guī)范的理解
BFC全稱是Block Fmatting Context,即塊格式化上下文。它是CSS2.1規(guī)范定義的,關(guān)于CSS渲染定位的一個(gè)概念。
BFC是頁(yè)面CSS 視覺(jué)渲染的一部分,用于決定塊盒子的布局及浮動(dòng)相互影響范圍的一個(gè)區(qū)域。
BFC的一個(gè)最重要的效果是,讓處于BFC內(nèi)部的元素與外部的元素相互隔離,使內(nèi)外元素的定位不會(huì)相互影響。
利用BFC可以閉合浮動(dòng),防止與浮動(dòng)元素重疊。
參考《Learning BFC》
1.7、線程與進(jìn)程的區(qū)別
a. 一個(gè)程序至少有一個(gè)進(jìn)程,一個(gè)進(jìn)程至少有一個(gè)線程
b. 線程的劃分尺度小于進(jìn)程,使得多線程程序的并發(fā)性高
c. 進(jìn)程在執(zhí)行過(guò)程中擁有獨(dú)立的內(nèi)存單元,而多個(gè)線程共享內(nèi)存,從而極大地提高了程序的運(yùn)行效率
d. 每個(gè)獨(dú)立的線程有一個(gè)程序運(yùn)行的入口、順序執(zhí)行序列和程序的出口。但是線程不能夠獨(dú)立執(zhí)行,必須依存在應(yīng)用程序中,由應(yīng)用程序提供多個(gè)線程執(zhí)行控制
e. 多線程的意義在于一個(gè)應(yīng)用程序中,有多個(gè)執(zhí)行部分可以同時(shí)執(zhí)行。但操作系統(tǒng)并沒(méi)有將多個(gè)線程看做多個(gè)獨(dú)立的應(yīng)用,來(lái)實(shí)現(xiàn)進(jìn)程的調(diào)度和管理以及資源分配
1.8、你都使用哪些工具來(lái)測(cè)試代碼的性能?
JSPerf, Dromaeo
1.9、你遇到過(guò)比較難的技術(shù)問(wèn)題是?你是如何解決的?
1.10、常使用的庫(kù)有哪些?常用的前端開(kāi)發(fā)工具?開(kāi)發(fā)過(guò)什么應(yīng)用或組件?
關(guān)于性能測(cè)試的面試題目
1、如何識(shí)別系統(tǒng)瓶頸?
從TPS指標(biāo)分析,TPS即系統(tǒng)單位時(shí)間內(nèi)處理事務(wù)的數(shù)量。當(dāng)前隨著用戶數(shù)的增長(zhǎng)期系統(tǒng)每秒可處理的事務(wù)數(shù)是否也會(huì)增長(zhǎng)。
2、如何發(fā)現(xiàn)數(shù)據(jù)庫(kù)的相關(guān)問(wèn)題?
①通過(guò)運(yùn)行某些相應(yīng)的已獲取的SQL語(yǔ)句,判斷是否由于數(shù)據(jù)庫(kù)索引所導(dǎo)致的事務(wù)響應(yīng)過(guò)長(zhǎng)的問(wèn)題發(fā)生。
②通過(guò)實(shí)時(shí)監(jiān)控工具(nmon等)監(jiān)控分析:Ⅰ.系統(tǒng)在運(yùn)行過(guò)程中其CPU是否穩(wěn)定運(yùn)行或CPU耗用是否過(guò)高;Ⅱ.在系統(tǒng)運(yùn)行過(guò)程中其內(nèi)存是否存在內(nèi)存泄漏現(xiàn)象;
3、think_time的作用是什么?
①降低當(dāng)前運(yùn)行時(shí)壓力,環(huán)節(jié)對(duì)應(yīng)用服務(wù)器所造成的壓力;
②模擬真實(shí)生產(chǎn)用戶操作,考察對(duì)服務(wù)器所造成的影響。
4、進(jìn)行參數(shù)化的目的是什么?
①減少腳本的大小;
②便于腳本的維護(hù),從而更加真實(shí)的模擬生產(chǎn)環(huán)境的數(shù)據(jù)。
5、容量測(cè)試方法中為什么要以逐步遞增的方式進(jìn)行?
虛擬用戶數(shù)隨著負(fù)載時(shí)間的延長(zhǎng)而增加,可以幫助確定系統(tǒng)響應(yīng)時(shí)間減慢的準(zhǔn)確時(shí)間以及準(zhǔn)確的用戶數(shù)。
6、假設(shè)在測(cè)試過(guò)程中某些事務(wù)的響應(yīng)時(shí)間過(guò)長(zhǎng),但分析應(yīng)用服務(wù)、數(shù)據(jù)庫(kù)以及網(wǎng)絡(luò)都屬于正常現(xiàn)象,問(wèn)題可能出現(xiàn)的原因有哪些?
①LoadRunner客戶機(jī)器是否已無(wú)法承載當(dāng)前運(yùn)行壓力導(dǎo)致LoadRunner無(wú)法及時(shí)獲取從服務(wù)端返回的信息;
②Tink_time是否已忽略;
③確定當(dāng)前被測(cè)系統(tǒng)架構(gòu),是否為在每次測(cè)試過(guò)程中清楚緩存所導(dǎo)致。
7、如何發(fā)現(xiàn)應(yīng)用服務(wù)器的相關(guān)問(wèn)題?
①通過(guò)某些事務(wù)的運(yùn)行,判斷是否在應(yīng)用代碼層未進(jìn)行調(diào)優(yōu)導(dǎo)致事務(wù)響應(yīng)事件過(guò)長(zhǎng);
②通過(guò)實(shí)時(shí)監(jiān)控工具(nmon等)監(jiān)控分析:Ⅰ.系統(tǒng)在運(yùn)行過(guò)程中其CPU是否穩(wěn)定運(yùn)行或CPU耗用是否過(guò)高;Ⅱ.在系統(tǒng)運(yùn)行過(guò)程中其內(nèi)存是否存在內(nèi)存泄漏現(xiàn)象;Ⅲ.打開(kāi)相應(yīng)日志、分析在運(yùn)行過(guò)程中是否存在交易報(bào)錯(cuò)并獲取錯(cuò)誤原因查看是否由于代碼原因?qū)е陆灰族e(cuò)誤發(fā)生。
8、簡(jiǎn)述性能測(cè)試流程?
①分析性能需求:挑選用戶使用最頻繁的場(chǎng)景來(lái)測(cè)試,比如:登陸,搜索,下單等等。確定性能指標(biāo):比如:事務(wù)通過(guò)率為100%,TOP99%是5秒,最大并發(fā)用戶為1000人,CPU和內(nèi)存的使用率在70%以下;
②制定性能測(cè)試計(jì)劃,明確測(cè)試時(shí)間(通常在功能穩(wěn)定后,如第一輪測(cè)試后進(jìn)行)和測(cè)試環(huán)境和測(cè)試工具;
③編寫(xiě)測(cè)試用例;
④搭建測(cè)試環(huán)境,準(zhǔn)備好測(cè)試數(shù)據(jù);
⑤編寫(xiě)性能測(cè)試腳本;
⑥性能測(cè)試腳本調(diào)優(yōu)。設(shè)置檢查點(diǎn)、參數(shù)化、關(guān)聯(lián)、集合點(diǎn)、事務(wù),調(diào)整思考時(shí)間,刪除冗余腳本;
⑦設(shè)計(jì)測(cè)試場(chǎng)景,運(yùn)行測(cè)試腳本,監(jiān)控服務(wù)器;
⑧分析測(cè)試結(jié)果,收集相關(guān)的日志提單給開(kāi)發(fā);
⑨回歸性能測(cè)試;
⑩編寫(xiě)測(cè)試報(bào)告。
9、如何確定系統(tǒng)最大負(fù)載?
通過(guò)負(fù)載測(cè)試,不斷增加用戶數(shù),隨著用戶數(shù)的增加,各項(xiàng)性能指標(biāo)也會(huì)相應(yīng)產(chǎn)生變化,當(dāng)出現(xiàn)了性能拐點(diǎn),比如,當(dāng)用戶數(shù)達(dá)到某個(gè)數(shù)量級(jí)時(shí),響應(yīng)時(shí)間突然增長(zhǎng),那么這個(gè)拐點(diǎn)處對(duì)應(yīng)的用戶數(shù)就是系統(tǒng)能承載的最大用戶數(shù)。
10、性能測(cè)試指標(biāo)有哪些?
①響應(yīng)時(shí)間;
②吞吐量;
③Cpu;
④內(nèi)存;
⑤Io;
⑥D(zhuǎn)isk。
Shell 腳本面試題目
一、Shell腳本是什么、它是必需的嗎?
一個(gè)Shell腳本是一個(gè)文本文件,包含一個(gè)或多個(gè)命令。作為系統(tǒng)管理員,我們經(jīng)常需要使用多個(gè)命令來(lái)完成一項(xiàng)任務(wù),我們可以添加這些所有命令在一個(gè)文本文件(Shell腳本)來(lái)完成這些日常工作任務(wù)。
二、什么是默認(rèn)登錄shell,如何改變指定用戶的登錄shell?
在Linux操作系統(tǒng),“/bin/bash”是默認(rèn)登錄shell,是在創(chuàng)建用戶時(shí)分配的。使用chsh命令可以改變默認(rèn)的shell。
三、可以在shell腳本中使用哪些類(lèi)型的變量?
在shell腳本,我們可以使用兩種類(lèi)型的變量:①系統(tǒng)定義變量;②用戶定義變量。
系統(tǒng)變量:是由系統(tǒng)系統(tǒng)自己創(chuàng)建的。這些變量通常由大寫(xiě)字母組成,可以通過(guò)“set”命令查看。
用戶變量:是由系統(tǒng)用戶來(lái)生成和定義,變量的值可以通過(guò)命令“echo $<變量名>”查看。
四、如何將標(biāo)準(zhǔn)輸出和錯(cuò)誤輸出同時(shí)重定向到同一位置?
這里有兩個(gè)方法來(lái)實(shí)現(xiàn):
方法一:2>&1 (如# ls /usr/share/doc > out.txt 2>&1 )
方法二:&> (如# ls /usr/share/doc &> out.txt )
五、shell腳本中“$?”標(biāo)記的用途是什么?
在寫(xiě)一個(gè)shell腳本時(shí),如果你想要檢查前一命令是否執(zhí)行成功,在if條件中使用“$?”可以來(lái)檢查前一命令的結(jié)束狀態(tài)。
六、如何在后臺(tái)運(yùn)行腳本?
在腳本后面添加 “&”。
七、"chmod 500 script" 做什么?
使腳本所有者擁有可執(zhí)行權(quán)限。
八、">" 做什么?
重定向輸出流到文件或另一個(gè)流。
九、& 和 && 有什么區(qū)別
& - 希望腳本在后臺(tái)運(yùn)行的時(shí)候使用它;
&& - 當(dāng)前一個(gè)腳本成功完成才執(zhí)行后面的命令/腳本的時(shí)候使用它。
十、什么時(shí)候要在 [ condition ] 之前使用 “if”?
當(dāng)條件滿足時(shí)需要運(yùn)行多條命令的時(shí)候。
程序員經(jīng)典面試題目相關(guān)文章:
★ 程序員面試最常問(wèn)的10個(gè)問(wèn)題解析
★ 程序員面試邏輯題