計算機專業(yè)面試題
面試過程中,面試官會向應(yīng)聘者發(fā)問,而應(yīng)聘者的回答將成為面試官考慮是否接受他的重要依據(jù)。對應(yīng)聘者而言,了解這些問題背后的“貓膩”至關(guān)重要。以下是小編為大家整理的計算機專業(yè)面試題,僅供參考,歡迎大家閱讀。
計算機專業(yè)面試題(篇1)
1、什么是ActiveMQ?
activeMQ是一種開源的,實現(xiàn)了JMS1.1規(guī)范的,面向消息(MOM)的中間件,為應(yīng)用程序提供高效的、可擴展的、穩(wěn)定的和安全的企業(yè)級消息通信。
2、Activemq的瓶頸值
根據(jù)網(wǎng)上一般評測文檔上來看,每秒的消息吞吐在20__以上,acticemq也可以集群化部署,也是使用zookeeper來搭建。
3、ActiveMQ服務(wù)器宕機怎么辦?
這得從ActiveMQ的儲存機制說起。在通常的情況下,非持久化消息是存儲在內(nèi)存中的,持久化消息是存儲在文件中的,它們的最大限制在配置文件的節(jié)點中配置。
但是,在非持久化消息堆積到一定程度,內(nèi)存告急的時候,ActiveMQ會將內(nèi)存中的非持久化消息寫入臨時文件中,以騰出內(nèi)存。雖然都保存到了文件里,但它和持久化消息的區(qū)別是,重啟后持久化消息會從文件中恢復(fù),非持久化的臨時文件會直接刪除。
那如果文件增大到達(dá)了配置中的最大限制的時候會發(fā)生什么?我做了以下實驗:
設(shè)置2G左右的持久化文件限制,大量生產(chǎn)持久化消息直到文件達(dá)到最大限制,此時生產(chǎn)者阻塞,但消費者可正常連接并消費消息,等消息消費掉一部分,文件刪除又騰出空間之后,生產(chǎn)者又可繼續(xù)發(fā)送消息,服務(wù)自動恢復(fù)正常。
設(shè)置2G左右的臨時文件限制,大量生產(chǎn)非持久化消息并寫入臨時文件,在達(dá)到最大限制時,生產(chǎn)者阻塞,消費者可正常連接但不能消費消息,或者原本慢速消費的消費者,消費突然停止。整個系統(tǒng)可連接,但是無法提供服務(wù),就這樣掛了。
具體原因不詳,解決方案:盡量不要用非持久化消息,非要用的話,將臨時文件限制盡可能的調(diào)大。
4、AcitveMQ的作用、原理?(生產(chǎn)者、消費者、p2p、訂閱實現(xiàn)流程)
Activemq的作用就是系統(tǒng)之間進(jìn)行通信。當(dāng)然可以使用其他方式進(jìn)行系統(tǒng)間通信,如果使用Activemq的話可以對系統(tǒng)之間的調(diào)用進(jìn)行解耦,實現(xiàn)系統(tǒng)間的異步通信。原理就是生產(chǎn)者生產(chǎn)消息,把消息發(fā)送給activemq。Activemq接收到消息,然后查看有多少個消費者,然后把消息轉(zhuǎn)發(fā)給消費者,此過程中生產(chǎn)者無需參與。消費者接收到消息后做相應(yīng)的處理和生產(chǎn)者沒有任何關(guān)系
5、activemq在項目中如何應(yīng)用的
Activemq在項目中主要是完成系統(tǒng)之間通信,并且將系統(tǒng)之間的調(diào)用進(jìn)行解耦。例如在添加、修改商品信息后,需要將商品信息同步到索引庫、同步緩存中的數(shù)據(jù)以及生成靜態(tài)頁面一系列操作。
在此場景下就可以使用activemq。一旦后臺對商品信息進(jìn)行修改后,就向activemq發(fā)送一條消息,然后通過activemq將消息發(fā)送給消息的.消費端,消費端接收到消息可以進(jìn)行相應(yīng)的業(yè)務(wù)處理。
7、rabbitmq如何實現(xiàn)集群高可用?
集群是保證服務(wù)可靠性的一種方式,同時可以通過水平擴展以提升消息吞吐能力。RabbitMQ是用分布式程序設(shè)計語言erlang開發(fā)的,所以天生就支持集群。接下來,將介紹RabbitMQ分布式消息處理方式、集群模式、節(jié)點類型,并動手搭建一個高可用集群環(huán)境,最后通過java程序來驗證集群的高可用性。
RabbitMQ分布式的消息處理方式有以下三種:
(1)Clustering:不支持跨網(wǎng)段,各節(jié)點需運行同版本的Erlang和RabbitMQ,應(yīng)用于同網(wǎng)段局域網(wǎng)。
(2)Federation:允許單臺服務(wù)器上的Exchange或Queue接收發(fā)布到另一臺服務(wù)器上Exchange或Queue的消息,應(yīng)用于廣域網(wǎng)。
(3)Shovel:與Federation類似,但工作在更低層次。
RabbitMQ對網(wǎng)絡(luò)延遲很敏感,在LAN環(huán)境建議使用clustering方式;在WAN環(huán)境中,則使用Federation或Shovel。我們平時說的RabbitMQ集群,說的就是clustering方式,它是RabbitMQ內(nèi)嵌的一種消息處理方式,而Federation或Shovel則是以plugin形式存在。
8、丟消息怎么辦?
這得從java的java.net.SocketException異常說起。簡單點說就是當(dāng)網(wǎng)絡(luò)發(fā)送方發(fā)送一堆數(shù)據(jù),然后調(diào)用close關(guān)閉連接之后。這些發(fā)送的數(shù)據(jù)都在接收者的緩存里,接收者如果調(diào)用read方法仍舊能從緩存中讀取這些數(shù)據(jù),盡管對方已經(jīng)關(guān)閉了連接。
但是當(dāng)接收者嘗試發(fā)送數(shù)據(jù)時,由于此時連接已關(guān)閉,所以會發(fā)生異常,這個很好理解。不過需要注意的是,當(dāng)發(fā)生SocketException后,原本緩存區(qū)中數(shù)據(jù)也作廢了,此時接收者再次調(diào)用read方法去讀取緩存中的數(shù)據(jù),就會報Software caused connection abort:recv failed錯誤。
通過抓包得知,ActiveMQ會每隔10秒發(fā)送一個心跳包,這個心跳包是服務(wù)器發(fā)送給客戶端的,用來判斷客戶端死沒死。如果你看過上面第一條,就會知道非持久化消息堆積到一定程度會寫到文件里,這個寫的過程會阻塞所有動作,而且會持續(xù)20到30秒,并且隨著內(nèi)存的增大而增大。
當(dāng)客戶端發(fā)完消息調(diào)用connection.close()時,會期待服務(wù)器對于關(guān)閉連接的回答,如果超過15秒沒回答就直接調(diào)用socket層的close關(guān)閉tcp連接了。這時客戶端發(fā)出的消息其實還在服務(wù)器的緩存里等待處理,不過由于服務(wù)器心跳包的設(shè)置,導(dǎo)致發(fā)生了java.net.SocketException異常,把緩存里的數(shù)據(jù)作廢了,沒處理的消息全部丟失。
解決方案:用持久化消息,或者非持久化消息及時處理不要堆積,或者啟動事務(wù),啟動事務(wù)后,commit()方法會負(fù)責(zé)任的等待服務(wù)器的返回,也就不會關(guān)閉連接導(dǎo)致消息丟失了。
計算機專業(yè)面試題(篇2)
1 編程:
用C語言實現(xiàn)一個revert函數(shù),它的功能是將輸入的字符串在原串上倒序后返回。
2 編程:
用C語言實現(xiàn)函數(shù)void __ memmove(void __dest,const void __src,size_t n)。memmove函數(shù)的功能是拷貝src所指的內(nèi)存內(nèi)容前n個字節(jié)到dest所指的地址上。
3 英文拼寫糾錯:
在用戶輸入英文單詞時,經(jīng)常發(fā)生錯誤,我們需要對其進(jìn)行糾錯。假設(shè)已經(jīng)有一個包含了正確英文單詞的詞典,請你設(shè)計一個拼寫糾錯的程序。
(1)請描述你解決這個問題的思路;
(2)請給出主要的處理流程,算法,以及算法的復(fù)雜度;
(3)請描述可能的改進(jìn)(改進(jìn)的方向如效果,性能等等,這是一個開放問題)。
4 尋找熱門查詢:
搜索引擎會通過日志文件把用戶每次檢索使用的所有檢索串都記錄下來,每個查詢串的長度為1-255字節(jié)。假設(shè)目前有一千萬個記錄,這些查詢串的重復(fù)度比較高,雖然總數(shù)是1千萬,但如果除去重復(fù)后,不超過3百萬個。一個查詢串的重復(fù)度越高,說明查詢它的用戶越多,也就是越熱門。請你統(tǒng)計最熱門的10個查詢串,要求使用的內(nèi)存不能超過1G。
(1)請描述你解決這個問題的思路;
(2)請給出主要的處理流程,算法,以及算法的復(fù)雜度。
5 集合合并:
給定一個字符串的集合,格式如: {aaa bbb ccc}, {bbb ddd},{eee fff},{ggg},{ddd hhh} 要求將其中交集不為空的集合合并,要求合并完成后的集合之間無交集,例如上例應(yīng)輸出 {aaa bbb ccc ddd hhh},{eee fff}, {ggg}
(1)請描述你解決這個問題的思路;
(2)請給出主要的處理流程,算法,以及算法的復(fù)雜度
(3)請描述可能的改進(jìn)(改進(jìn)的方向如效果,性能等等,這是一個開放問題)。
計算機專業(yè)面試題(篇3)
1.網(wǎng)絡(luò)結(jié)構(gòu)
在OSI參考模型中,物理層的作用是透明的傳輸比特流。對等實體在一次交互作用中傳送的信息單位稱為協(xié)議數(shù)據(jù)單元,它包括控制信息和用戶數(shù)據(jù)兩部分。上下層實體之間的接口稱為服務(wù)訪問點(SAP),網(wǎng)絡(luò)層的服務(wù)訪問點也稱為網(wǎng)絡(luò)地址,通常分為網(wǎng)絡(luò)號和主機號。
OSI參考模型分為:物理層、數(shù)據(jù)鏈路層,網(wǎng)絡(luò)層,傳輸層,會話層,表示層,應(yīng)用層。
物理層涉及到在信道上傳輸?shù)脑急忍亓鳌?shù)據(jù)鏈路層的主要任務(wù)是加強物理層傳輸原始比特流的功能,使之對應(yīng)的網(wǎng)絡(luò)層顯現(xiàn)為一條無錯線路。發(fā)送包把輸入數(shù)據(jù)封裝在數(shù)據(jù)幀,按順序傳送出去并處理接受方回送的確認(rèn)幀。網(wǎng)絡(luò)層關(guān)系到子網(wǎng)的運行控制,其中一個關(guān)鍵問題是確認(rèn)從源端到目的端如何選擇路由。傳輸層的基本功能是從會話層接受數(shù)據(jù)而且把其分成較小的單元傳遞給網(wǎng)絡(luò)層。會話層允許不同機器上的用戶建立會話關(guān)系。
TCP/IP的五層結(jié)構(gòu)圖:物理層、數(shù)據(jù)鏈路層、網(wǎng)絡(luò)層、運輸層,應(yīng)用層。
2.請你詳細(xì)地解釋一下IP協(xié)議的定義,在哪個層上面?主要有什么作用?TCP與UDP呢?
答:IP是Internet Protocol的簡稱,是網(wǎng)絡(luò)層的主要協(xié)議,作用是提供不可靠、無連接的數(shù)據(jù)報傳送。TCP是Transmit Control Protocol(傳輸控制協(xié)議)的縮寫,在運輸層,TCP提供一種面向連接的,可靠的字節(jié)流服務(wù);UDP是User Datagram Protocol(用戶數(shù)據(jù)報協(xié)議)的縮寫,在運輸層,UDP提供不可靠的傳輸數(shù)據(jù)服務(wù)。
3.請問交換機和路由器各自的實現(xiàn)原理是什么?分別在哪個層次上面實現(xiàn)的?
答:交換機屬于OSI第二層即數(shù)據(jù)鏈路層設(shè)備。它根據(jù)MAC地址尋址,通過站表選擇路由,站表的建立和維護(hù)由交換機自動進(jìn)行。路由器屬于OSI第三層即網(wǎng)絡(luò)層設(shè)備,它根據(jù)IP地址進(jìn)行尋址,通過路由表路由協(xié)議產(chǎn)生。交換機最大的好處是快速,路由器最大的好處是控制能力強。
4.交換和路由的區(qū)別是什么?VLAN有什么特點?
交換是指轉(zhuǎn)發(fā)和過濾幀,是交換機的工作,它在OSI參考模型的第二層。而路由是指網(wǎng)絡(luò)線路當(dāng)中非直連的鏈路,它是路由器的工作,在OSI參考模型的第三層。交換和路由的區(qū)別很多。首先,交換是不需要IP的,而路由需要,因為IP就是第三層的協(xié)議,第二層需要的是MAC地址;再有,第二層的技術(shù)和第三層不一樣,第二層可以做VLAN、端口捆綁等,第三層可以做NAT、ACL、QOS等。
VLAN是虛擬局域網(wǎng)的英文縮寫,它是一個純二層的技術(shù),它的特點有三:控制廣播,安全,靈活性和可擴展性。
5.什么是SNMP協(xié)議?它有什么特點?SNMP協(xié)議需要專門的連接么?
答:SNMP(Simple Network Manager Protocol)即簡單網(wǎng)絡(luò)管理協(xié)議,它為網(wǎng)絡(luò)管理系統(tǒng)提供了底層網(wǎng)絡(luò)管理的框架。SNMP的特點是:SNMP易于實現(xiàn);SNMP協(xié)議是開放的免費產(chǎn)品;
SNMP協(xié)議有很多詳細(xì)的文檔資料,網(wǎng)絡(luò)業(yè)界對這個協(xié)議也有較深入的了解,這些都是SNMP協(xié)議進(jìn)一步發(fā)展和改進(jìn)的基礎(chǔ);SNMP協(xié)議可用于控制各種設(shè)備。
SNMP是一種無連接協(xié)議。無連接的意思是它不支持像TELNET或FTP這種專門的連接。通過使用請求報文和返回響應(yīng)的方式,SNMP在管理代理和管理員之間傳送消息。
6.路由表是做什么用的?在Linux環(huán)境中怎么配置一條默認(rèn)路由?
答:路由表是用來決定如何將包從一個子網(wǎng)傳送到另一個子網(wǎng)的,換句話說就是用來決定從一個網(wǎng)卡接受到的包應(yīng)該送到哪一個網(wǎng)卡上去。路由表的每一行至少由目標(biāo)網(wǎng)絡(luò)號、netmask、到這個子網(wǎng)應(yīng)該使用的網(wǎng)卡這3條信息。當(dāng)路由器從一個網(wǎng)卡接受到一個包時,它掃描路由表的每一行,用里面的netmask和包里的目標(biāo)IP地址做并邏輯運算(&)找出目標(biāo)網(wǎng)絡(luò)號。如果此網(wǎng)絡(luò)號和這一行里的網(wǎng)絡(luò)號相同,就將這條路由保留下來作為備用路由。如果已經(jīng)有備用路由了,就在這兩條路由里將網(wǎng)絡(luò)號最長的留下來,另一條丟掉。如此接著掃描下一行直到結(jié)束。如果掃描結(jié)束仍沒有找到任何路由,就用默認(rèn)路由。確定路由后,直接將包送到對應(yīng)的網(wǎng)卡上去。
在Linux上可以用“route add default gw<默認(rèn)路由器IP>”命令配置一條默認(rèn)路由