計算機方向的面試題目有哪些
在學(xué)習、工作生活中,我們很多時(shí)候都不得不用到試題,試題是用于考試的題目,要求按照標準回答。相信很多朋友都需要一份能切實(shí)有效地幫助到自己的試題吧?以下是小編為大家整理的計算機方向的面試題目有哪些,歡迎大家借鑒與參考,希望對大家有所幫助。
計算機方向的面試題目有哪些1
1、什么是ActiveMQ?
activeMQ是一種開(kāi)源的,實(shí)現了JMS1.1規范的,面向消息(MOM)的中間件,為應用程序提供高效的、可擴展的、穩定的和安全的企業(yè)級消息通信。
2、Activemq的瓶頸值
根據網(wǎng)上一般評測文檔上來(lái)看,每秒的消息吞吐在20xx以上,acticemq也可以集群化部署,也是使用zookeeper來(lái)搭建。
3、ActiveMQ服務(wù)器宕機怎么辦?
這得從ActiveMQ的儲存機制說(shuō)起。在通常的情況下,非持久化消息是存儲在內存中的,持久化消息是存儲在文件中的,它們的最大限制在配置文件的節點(diǎn)中配置。
但是,在非持久化消息堆積到一定程度,內存告急的時(shí)候,ActiveMQ會(huì )將內存中的非持久化消息寫(xiě)入臨時(shí)文件中,以騰出內存。雖然都保存到了文件里,但它和持久化消息的區別是,重啟后持久化消息會(huì )從文件中恢復,非持久化的臨時(shí)文件會(huì )直接刪除。
那如果文件增大到達了配置中的最大限制的時(shí)候會(huì )發(fā)生什么?我做了以下實(shí)驗:
設置2G左右的持久化文件限制,大量生產(chǎn)持久化消息直到文件達到最大限制,此時(shí)生產(chǎn)者阻塞,但消費者可正常連接并消費消息,等消息消費掉一部分,文件刪除又騰出空間之后,生產(chǎn)者又可繼續發(fā)送消息,服務(wù)自動(dòng)恢復正常。
設置2G左右的臨時(shí)文件限制,大量生產(chǎn)非持久化消息并寫(xiě)入臨時(shí)文件,在達到最大限制時(shí),生產(chǎn)者阻塞,消費者可正常連接但不能消費消息,或者原本慢速消費的消費者,消費突然停止。整個(gè)系統可連接,但是無(wú)法提供服務(wù),就這樣掛了。
具體原因不詳,解決方案:盡量不要用非持久化消息,非要用的話(huà),將臨時(shí)文件限制盡可能的調大。
4、AcitveMQ的作用、原理?(生產(chǎn)者、消費者、p2p、訂閱實(shí)現流程)
Activemq的作用就是系統之間進(jìn)行通信。當然可以使用其他方式進(jìn)行系統間通信,如果使用Activemq的話(huà)可以對系統之間的調用進(jìn)行解耦,實(shí)現系統間的異步通信。原理就是生產(chǎn)者生產(chǎn)消息,把消息發(fā)送給activemq。Activemq接收到消息,然后查看有多少個(gè)消費者,然后把消息轉發(fā)給消費者,此過(guò)程中生產(chǎn)者無(wú)需參與。消費者接收到消息后做相應的處理和生產(chǎn)者沒(méi)有任何關(guān)系
5、activemq在項目中如何應用的
Activemq在項目中主要是完成系統之間通信,并且將系統之間的調用進(jìn)行解耦。例如在添加、修改商品信息后,需要將商品信息同步到索引庫、同步緩存中的數據以及生成靜態(tài)頁(yè)面一系列操作。
在此場(chǎng)景下就可以使用activemq。一旦后臺對商品信息進(jìn)行修改后,就向activemq發(fā)送一條消息,然后通過(guò)activemq將消息發(fā)送給消息的消費端,消費端接收到消息可以進(jìn)行相應的業(yè)務(wù)處理。
7、rabbitmq如何實(shí)現集群高可用?
集群是保證服務(wù)可靠性的一種方式,同時(shí)可以通過(guò)水平擴展以提升消息吞吐能力。RabbitMQ是用分布式程序設計語(yǔ)言erlang開(kāi)發(fā)的,所以天生就支持集群。接下來(lái),將介紹RabbitMQ分布式消息處理方式、集群模式、節點(diǎn)類(lèi)型,并動(dòng)手搭建一個(gè)高可用集群環(huán)境,最后通過(guò)java程序來(lái)驗證集群的高可用性。
RabbitMQ分布式的消息處理方式有以下三種:
(1)Clustering:不支持跨網(wǎng)段,各節點(diǎn)需運行同版本的Erlang和RabbitMQ,應用于同網(wǎng)段局域網(wǎng)。
(2)Federation:允許單臺服務(wù)器上的Exchange或Queue接收發(fā)布到另一臺服務(wù)器上Exchange或Queue的消息,應用于廣域網(wǎng)。
(3)Shovel:與Federation類(lèi)似,但工作在更低層次。
RabbitMQ對網(wǎng)絡(luò )延遲很敏感,在LAN環(huán)境建議使用clustering方式;在WAN環(huán)境中,則使用Federation或Shovel。我們平時(shí)說(shuō)的RabbitMQ集群,說(shuō)的就是clustering方式,它是RabbitMQ內嵌的一種消息處理方式,而Federation或Shovel則是以plugin形式存在。
8、丟消息怎么辦?
這得從java的java.net.SocketException異常說(shuō)起。簡(jiǎn)單點(diǎn)說(shuō)就是當網(wǎng)絡(luò )發(fā)送方發(fā)送一堆數據,然后調用close關(guān)閉連接之后。這些發(fā)送的數據都在接收者的緩存里,接收者如果調用read方法仍舊能從緩存中讀取這些數據,盡管對方已經(jīng)關(guān)閉了連接。
但是當接收者嘗試發(fā)送數據時(shí),由于此時(shí)連接已關(guān)閉,所以會(huì )發(fā)生異常,這個(gè)很好理解。不過(guò)需要注意的是,當發(fā)生SocketException后,原本緩存區中數據也作廢了,此時(shí)接收者再次調用read方法去讀取緩存中的數據,就會(huì )報Software caused connection abort:recv failed錯誤。
通過(guò)抓包得知,ActiveMQ會(huì )每隔10秒發(fā)送一個(gè)心跳包,這個(gè)心跳包是服務(wù)器發(fā)送給客戶(hù)端的,用來(lái)判斷客戶(hù)端死沒(méi)死。如果你看過(guò)上面第一條,就會(huì )知道非持久化消息堆積到一定程度會(huì )寫(xiě)到文件里,這個(gè)寫(xiě)的`過(guò)程會(huì )阻塞所有動(dòng)作,而且會(huì )持續20到30秒,并且隨著(zhù)內存的增大而增大。
當客戶(hù)端發(fā)完消息調用connection.close()時(shí),會(huì )期待服務(wù)器對于關(guān)閉連接的回答,如果超過(guò)15秒沒(méi)回答就直接調用socket層的close關(guān)閉tcp連接了。這時(shí)客戶(hù)端發(fā)出的消息其實(shí)還在服務(wù)器的緩存里等待處理,不過(guò)由于服務(wù)器心跳包的設置,導致發(fā)生了java.net.SocketException異常,把緩存里的數據作廢了,沒(méi)處理的消息全部丟失。
解決方案:用持久化消息,或者非持久化消息及時(shí)處理不要堆積,或者啟動(dòng)事務(wù),啟動(dòng)事務(wù)后,commit()方法會(huì )負責任的等待服務(wù)器的返回,也就不會(huì )關(guān)閉連接導致消息丟失了。
計算機方向的面試題目有哪些2
一、什么是Tomcat?
Tomcat簡(jiǎn)單的說(shuō)就是一個(gè)運行JAVA的網(wǎng)絡(luò )服務(wù)器,底層是Socket的一個(gè)程序,它也是JSP和Serlvet的一個(gè)容器。
二、tomcat結構目錄有哪些?
①bin:?jiǎn)?dòng)和關(guān)閉tomcat的bat文件。
②conf:配置文件。
③server.xml該文件用于配置server相關(guān)的信息,比如tomcat啟動(dòng)的端口號,配置主機(Host)。
④web.xml文件配置與web應用(web應用相當于一個(gè)web站點(diǎn))
⑤tomcat—user。xml配置用戶(hù)名密碼和相關(guān)權限。
⑥lib:該目錄放置運行tomcat運行需要的jar包。
⑦logs:存放日志,當我們需要查看日志的時(shí)候,可以查詢(xún)信息。
⑧webapps:放置我們的web應用。
⑨work工作目錄:該目錄用于存放jsp被訪(fǎng)問(wèn)后生成對應的server文件和.class文件。
三、如何配置Tomcat虛擬目錄?
1、在server.xml中的節點(diǎn)下添加如下代碼。path表示的是訪(fǎng)問(wèn)時(shí)輸入的web項目名,docBase表示的是站點(diǎn)目錄的絕對路徑。
2、進(jìn)入到confCatalinalocalhost文件下,創(chuàng )建一個(gè)xml文件,該文件的名字就是站點(diǎn)的名字。
四、Tomcat體系結構是怎樣的?
瀏覽器—>tomcat server—>service—>connector—>engine(引擎)—>host(主機)—>web應用。
五、Web請求在Tomcat請求中的請求流程是怎么樣的?
①瀏覽器輸入URL地址;
②查詢(xún)本機hosts文件尋找IP;
③查詢(xún)DNS服務(wù)器尋找IP;
④向該IP發(fā)送Http請求;
⑤Tomcat容器解析主機名;
⑥Tomcat容器解析Web應用;
⑦Tomcat容器解析資源名稱(chēng);
⑧Tomcat容器獲取資源;
⑨Tomcat響應瀏覽器。
六、如何在tomcat集群中實(shí)現Session共享
Apache集群實(shí)現Tomcat的Session共享配置其實(shí)很簡(jiǎn)單,在Tomcat自帶的文檔中有詳細的說(shuō)明(/docs/cluster—howto.html),只不過(guò)是英語(yǔ)的,所以聯(lián)合下面根據說(shuō)下怎么配置吧:
1、既然是集群肯定要多準備幾個(gè)Tomcat來(lái)模擬,比如分別為T(mén)omcat01、Tomcat02、Tomcat03。
如果各Tomcat程序放在不同的機器上,那么就不會(huì )有端口的沖突。如果是放在同一臺機器上的話(huà),那就簡(jiǎn)單改幾個(gè)端口,防止端口占用造成的沖突。打開(kāi)conf文件夾中的server.xml文件,需要修改的端口有:
1、
2、
3、
以上port需要修改,至于修改成什么樣子,看你自己了,只要不出現端口沖突就可以了,要保證各個(gè)Tomcat實(shí)例間沒(méi)有端口沖突。
七、tomcat有哪些Connector?
Tomcat的Web服務(wù)器連接器支持兩種協(xié)議:AJP和HTTP,它們均定義了以二進(jìn)制格式在Web服務(wù)器和Tomcat之間進(jìn)行數據傳輸,并提供相應的控制命令。
AJP(Apache JServ Protocol)協(xié)議:目前正在使用的AJP協(xié)議的版本是通過(guò)JK和JK2連接器提供支持的AJP13,它基于二進(jìn)制的格式在Web服務(wù)器和Tomcat之間傳輸數據,而此前的版本AJP10和AJP11則使用文本格式傳輸數據。
HTTP協(xié)議:誠如其名稱(chēng)所表示,其是使用HTTP或HTTPS協(xié)議在Web服務(wù)器和Tomcat之間建立通信,此時(shí),Tomcat就是一個(gè)完全功能的HTTP服務(wù)器,它需要監聽(tīng)在某端口上以接收來(lái)自于商前服務(wù)器的請求。
八、tomcat的Valve的作用是什么?
Valve類(lèi)似于過(guò)濾器,它可以工作于Engine和Host/Context之間、Host和Context之間以及Context和Web應用程序的某資源之間。一個(gè)容器內可以建立多個(gè)Valve,而且Valve定義的次序也決定了它們生效的次序。
九、Webserver和Application Server的區別是什么?
最大區別,WebServer一般僅僅指Web(如servlet,jsp)的應用服務(wù)器,ApplicationServer不僅可以是Web,還可以是Ejb等其它的應用服務(wù)器。
web server可以是application server的一部分,也可以是單獨存在。
十、Tomcat的缺省端口是多少,怎么修改?
1)找到Tomcat目錄下的conf文件夾;
2)進(jìn)入conf文件夾里面找到server.xml文件;
3)打開(kāi)server.xml文件;
4)在server.xml文件里面找到下列信息;
port=“8080”改成你想要的端口
十一、Tomcat有幾種部署方式?
1)直接把Web項目放在webapps下,Tomcat會(huì )自動(dòng)將其部署
2)在server.xml文件上配置節點(diǎn),設置相關(guān)的屬性即可
3)通過(guò)Catalina來(lái)進(jìn)行配置:進(jìn)入到confCatalinalocalhost文件下,創(chuàng )建一個(gè)xml文件,該文件的名字就是站點(diǎn)的名字。編寫(xiě)XML的方式來(lái)進(jìn)行設置。
十二、tomcat容器是如何創(chuàng )建servlet類(lèi)實(shí)例?用到了什么原理?
當容器啟動(dòng)時(shí),會(huì )讀取在webapps目錄下所有的web應用中的web.xml文件,然后對xml文件進(jìn)行解析,并讀取servlet注冊信息。然后,將每個(gè)應用中注冊的servlet類(lèi)都進(jìn)行加載,并通過(guò)反射的方式實(shí)例化。(有時(shí)候也是在第一次請求時(shí)實(shí)例化)在servlet注冊時(shí)加上如果為正數,則在一開(kāi)始就實(shí)例化,如果不寫(xiě)或為負數,則第一次請求實(shí)例化。
十三、Tomcat頂層架構小結
(1)Tomcat中只有一個(gè)Server,一個(gè)Server可以有多個(gè)Service,一個(gè)Service可以有多個(gè)Connector和一個(gè)Container;
(2)Server掌管著(zhù)整個(gè)Tomcat的生死大權;
(4)Service是對外提供服務(wù)的;
(5)Connector用于接受請求并將請求封裝成Request和Response來(lái)具體處理;
(6)Container用于封裝和管理Servlet,以及具體處理request請求。
計算機方向的面試題目有哪些3
一、什么是RabbitMQ?
采用AMQP高級消息隊列協(xié)議的一種消息隊列技術(shù),最大的特點(diǎn)就是消費并不需要確保提供方存在,實(shí)現了服務(wù)之間的高度解耦。
二、為什么要使用RabbitMQ?
①在分布式系統下具備異步,削峰,負載均衡等一系列高級功能。
②擁有持久化的機制,進(jìn)程消息,隊列中的信息也可以保存下來(lái)。
③實(shí)現消費者和生產(chǎn)者之間的解耦。
④對于高并發(fā)場(chǎng)景下,利用消息隊列可以使得同步訪(fǎng)問(wèn)變?yōu)榇性L(fǎng)問(wèn)達到一定量的限流,利于數據庫的操作。
⑤可以使用消息隊列達到異步下單的效果,排隊中,后臺進(jìn)行邏輯下單。
三、RabbitMQ的使用場(chǎng)景有哪些?
①跨系統的異步通信,所有需要異步交互的地方都可以使用消息隊列。就像我們除了打電話(huà)(同步)以外,還需要發(fā)短信,發(fā)電子郵件(異步)的通訊方式。
②多個(gè)應用之間的耦合,由于消息是平臺無(wú)關(guān)和語(yǔ)言無(wú)關(guān)的,而且語(yǔ)義上也不再是函數調用,因此更適合作為多個(gè)應用之間的松耦合的接口。基于消息隊列的耦合,不需要發(fā)送方和接收方同時(shí)在線(xiàn)。在企業(yè)應用集成(EAI)中,文件傳輸,共享數據庫,消息隊列,遠程過(guò)程調用都可以作為集成的方法。
③應用內的同步變異步,比如訂單處理,就可以由前端應用將訂單信息放到隊列,后端應用從隊列里依次獲得消息處理,高峰時(shí)的大量訂單可以積壓在隊列里慢慢處理掉。由于同步通常意味著(zhù)阻塞,而大量線(xiàn)程的阻塞會(huì )降低計算機的性能。
④消息驅動(dòng)的架構(EDA),系統分解為消息隊列,和消息制造者和消息消費者,一個(gè)處理流程可以根據需要拆成多個(gè)階段(Stage),階段之間用隊列連接起來(lái),前一個(gè)階段處理的結果放入隊列,后一個(gè)階段從隊列中獲取消息繼續處理。
⑤應用需要更靈活的耦合方式,如發(fā)布訂閱,比如可以指定路由規則。
⑥跨局域網(wǎng),甚至跨城市的通訊(CDN行業(yè)),比如北京機房與廣州機房的應用程序的通信。
四、RabbitMQ有哪些重要的角色?
RabbitMQ中重要的角色有:生產(chǎn)者、消費者和代理:
①生產(chǎn)者:消息的創(chuàng )建者,負責創(chuàng )建和推送數據到消息服務(wù)器;
②消費者:消息的接收方,用于處理數據和確認消息;
③代理:就是RabbitMQ本身,用于扮演“快遞”的角色,本身不生產(chǎn)消息,只是扮演“快遞”的角色。
五、如何確保消息正確地發(fā)送至RabbitMQ?如何確保消息接收方消費了消息?
1、發(fā)送方確認模式
①將信道設置成confirm模式(發(fā)送方確認模式),則所有在信道上發(fā)布的消息都會(huì )被指派一個(gè)唯一的ID。
②一旦消息被投遞到目的隊列后,或者消息被寫(xiě)入磁盤(pán)后(可持久化的消息),信道會(huì )發(fā)送一個(gè)確認給生產(chǎn)者(包含消息唯一ID)。
③如果RabbitMQ發(fā)生內部錯誤從而導致消息丟失,會(huì )發(fā)送一條nack(notacknowledged,未確認)消息。
④發(fā)送方確認模式是異步的,生產(chǎn)者應用程序在等待確認的同時(shí),可以繼續發(fā)送消息。當確認消息到達生產(chǎn)者應用程序,生產(chǎn)者應用程序的回調方法就會(huì )被觸發(fā)來(lái)處理確認消息。
2、接收方確認機制
①消費者接收每一條消息后都必須進(jìn)行確認(消息接收和消息確認是兩個(gè)不同操作)。只有消費者確認了消息,RabbitMQ才能安全地把消息從隊列中刪除。
②這里并沒(méi)有用到超時(shí)機制,RabbitMQ僅通過(guò)Consumer的連接中斷來(lái)確認是否需要重新發(fā)送消息。也就是說(shuō),只要連接不中斷,RabbitMQ給了Consumer足夠長(cháng)的時(shí)間來(lái)處理消息。保證數據的最終一致性。
3、下面羅列幾種特殊情況
①如果消費者接收到消息,在確認之前斷開(kāi)了連接或取消訂閱,RabbitMQ會(huì )認為消息沒(méi)有被分發(fā),然后重新分發(fā)給下一個(gè)訂閱的消費者。(可能存在消息重復消費的隱患,需要去重)
②如果消費者接收到消息卻沒(méi)有確認消息,連接也未斷開(kāi),則RabbitMQ認為該消費者繁忙,將不會(huì )給該消費者分發(fā)更多的消息。
六、RabbitMQ怎么避免消息丟失?
①消息持久化;
②A(yíng)CK確認機制;
③設置集群鏡像模式;
④消息補償機制。
七、要保證消息持久化成功的條件有哪些?
①聲明隊列必須設置持久化durable設置為true。
②消息推送投遞模式必須設置持久化,deliveryMode設置為2(持久)。
③消息已經(jīng)到達持久化交換器。
④消息已經(jīng)到達持久化隊列。
以上四個(gè)條件都滿(mǎn)足才能保證消息持久化成功。
八、RabbitMQ持久化有什么缺點(diǎn)?
持久化的缺地就是降低了服務(wù)器的吞吐量,因為使用的是磁盤(pán)而非內存存儲,從而降低了吞吐量。可盡量使用ssd硬盤(pán)來(lái)緩解吞吐量的問(wèn)題。
九、RabbitMQ有幾種廣播類(lèi)型?
三種廣播模式:
①fanout:所有bind到此exchange的queue都可以接收消息(純廣播,綁定到RabbitMQ的接受者都能收到消息);
②direct:通過(guò)routingKey和exchange決定的那個(gè)唯一的queue可以接收消息;
③topic:所有符合routingKey(此時(shí)可以是一個(gè)表達式)的routingKey所bind的queue可以接收消息;
十、RabbitMQ中vhost的作用是什么?
vhost可以理解為虛擬broker,即mini—RabbitMQ server。其內部均含有獨立的queue、exchange和binding等,但最最重要的是,其擁有獨立的權限系統,可以做到vhost范圍的用戶(hù)控制。當然,從RabbitMQ的全局角度,vhost可以作為不同權限隔離的手段(一個(gè)典型的例子就是不同的應用可以跑在不同的vhost中)。
【計算機方向的面試題目有哪些】相關(guān)文章:
財務(wù)管理專(zhuān)業(yè)就業(yè)方向有哪些10-12
文秘面試有哪些技巧細節09-19
電子競技專(zhuān)業(yè)就業(yè)方向有哪些10-12
高薪總經(jīng)理招聘筆試題目有哪些08-18
單招面試有哪些技巧單招面試要注意哪些細節10-12
食品營(yíng)養與健康專(zhuān)業(yè)就業(yè)方向有哪些202110-12