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