這系列帖子用來記錄的我涼涼的線上筆試,第一次筆試讓我更加深刻的認識到了自己的不足,以及還有許多知識點沒有看,算法這一塊我看來還沒入門,只能說秋招道路任重而道遠。希望去北京的這條路自己可以能走得再快一點。
下面來記錄一下,在這次筆試的我的一些問題
單選
1.最短路徑:用於計算一個節點到其他所有節點的最短路徑。主要特點是以起始點為中心向外層層擴展,直到擴展到終點為止。Dijkstra算法能得出最短路徑的最優解,但由於它遍歷計算的節點很多,所以效率低。
2.通過構建有序序列,對於未排序數據,在已排序序列中從后向前掃描,找到相應的位置並插入的排序算法是(插入算法)
3.信號量是對一個共享資源訪問控制表示一個事件發生並讓兩個任務同步,有三個進程共享一程序段,而每次最多允許兩個進程進入程序段,則信號量取值范圍
信號量
目的:可以使用信號量來限制訪問一個共享資源的線程數
含義:信號量指對共同資源進行訪問控制的對象。在訪問資源之前,線程必須從信號量獲取許可,在訪問完資源之后,這個線程必須將許可返回給信號量。一旦獲得許可,信號量中可用許可的總數減1,一旦許可被釋放,信號量中許可數加1.
鎖與信號量之間的區分
區別:
作用域
信號量:進程間或者線程間
互斥鎖:線程間
信號量:如果信號量的value > 0;那么其他的線程可以執行任務。並且成功執行 后,value--;如果value=0,那么線程sem_wait 使得線程阻塞,直到sem_post被釋放后value++,其他的線程才可以根據value執行。
互斥鎖:只有一個對象被上了鎖(加鎖),那么其他任何線程都不可訪問被加鎖的對象。
信號量:用在多線程多任務的同步的,一個線程完成了某個動作就通過信號量告訴別的線程,別的線程在進行某些動作。
互斥鎖:只有一個對象被上了鎖(加鎖),那么其他任何線程都不可訪問被加鎖的對象。
信號量:用在多線程多任務的同步的,一個線程完成了某個動作就通過信號量告訴別的線程,別的線程在進行某些動作。
互斥鎖:用在多線程多任務互斥的。一個線程占用了某個資源后,那么別的線程就無法訪問,直到這個線程unlock,其他線程才可以利用。
4.java NIO
標准的IO基於字節流和字符流進行操作的,而NIO是基於通道和緩沖區進行操作,數據總是從通道讀取到緩沖區中,或者從緩沖區寫入到通道中。
java NIO:Non-blocking IO(非阻塞IO)而java IO是阻塞的
java NIO可以讓你非阻塞的使用IO,例如:當線程從通道讀取數據到緩沖區時。線程還是可以進行其他與事情。當數據被寫入到緩沖區時,線程可以繼續處理它。從緩沖區寫入銅帶也類似。
java NIO引入了選擇器的概念,選擇器用於監聽多個通道的事件(比如:連接打開,數據到達)因此,單個線程可以監聽多個數據通道
5.電子郵件系統中,用戶代理把郵件發送發送郵件服務器,發送方郵件服務器把郵件發給接收方郵件服務器及用戶使用用戶代理從接收方郵件服務器上讀取郵件
電子郵件系統
一個電子郵件系統應具有三個主要組成部分:用戶代理,郵件服務器,郵件發送協議(如SMTP)與郵件讀取協議(如pop)

發送和接收電子郵件的幾個重要步驟:
(1)發件人調用pc中的用戶代理撰寫和編輯要發送的郵件
(2)發件人的用戶代理把郵件用SMTP協議發給發送方郵件服務器
(3)SMTP服務器把郵件臨時存放在郵件緩存隊列中,等待發送
(4)發送方郵件服務器的SMTP客戶與接收方郵件服務器的SMTP服務器簡歷TCP連接,然后就把郵件緩存隊列中的郵件一次發送出去
(5)運行在接收方郵件服務器中的SMTP服務器進程收到郵件后,把郵件放入收件人的用戶郵箱中,等待收件人讀取
(6)收件人在打算收信時,就運行PC機中的用戶代理,使用POP3(或IMAP)協議讀取發送給自己的郵件,請注意,POP3服務器和POP3客戶之間通信是由POP3客戶發起的
簡單郵件傳送協議STMP
STMP所規定的就是在兩個相互通信的SMTP進程之間應如何交換信息。
由於STMP使用客戶服務器方式,因此負責發送郵件的SMTP進程就是SMTP客戶。而負責接收郵件的SMTP進程就是SMTP服務器
通信的三個階段:
(1)連接建立:連接是在發送主機的SMTP客戶和接收主機的SMTP服務器之間建立的,SMTP不使用中間的郵件服務器
(2)郵件傳送
(3)連接釋放:郵件發送完畢后,SMTP應釋放TCP連接
郵件讀取協議POP和IMAP
POP郵局協議是一個非常簡單,但功能有限的郵件讀取協議,現在使用的是它的第三個版本POP3
POP也使用客戶服務器的工作方式。在接收郵件的用戶PC機中必須運行POP客戶程序,而在用戶所連接的ISP的郵件服務器中則運行POP服務器程序
POP協議支持離線郵件處理,當郵件發送到服務器后,電子郵件客戶端會調用郵件客戶端程序,下載所有未閱讀的電子郵件(這種離線訪問模式是一種存儲轉發服務)當郵件從郵件服務器發送到個人計算機上,同時郵件服務器會刪除該郵件(但是目前很多POP3服務器都支持“下載郵件,服務器並不刪除郵件”,也就是在POP3中改進了POP協議)
另一個讀取郵件的協議是IMAP(InternetMessage Access Protocol),它比POP協議復雜很多。
IMAP 也是按客戶服務器方式工作,現在較新的是版本 4,即 IMAP4。
用戶在自己的 PC 機上就可以操縱郵件服務器的郵箱,就像在本地操縱一樣。IMAP最大的好處就是用戶可以在不同的地方使用不同的計算機隨時上網閱讀和處理自己的郵件
IMAP 也是按客戶服務器方式工作,現在較新的是版本 4,即 IMAP4。
用戶在自己的 PC 機上就可以操縱郵件服務器的郵箱,就像在本地操縱一樣。IMAP最大的好處就是用戶可以在不同的地方使用不同的計算機隨時上網閱讀和處理自己的郵件
注意,不要將郵件讀取協議 POP 或 IMAP 與郵件傳送協議 SMTP 弄混。發信人的用戶代理向源郵件服務器發送郵件,以及源郵件服務器向目的郵件服務器發送郵件,都是使用 SMTP 協議。而 POP 協議或 IMAP 協議則是用戶從目的郵件服務器上讀取郵件所使用的協議
6.若用一個大小為6的數組來實現循環隊列,且當前rear和front的值分別0和3。當從隊列中刪除一個元素,再加入兩 個元素后,rear和front的值分別為()
循環隊列 約定:front指向隊首元素,rear指向隊尾元素的下一個位置
入隊操作只改變front:front=(front+1)%size;
出隊操作只改變rear:rear=(rear+1)%size;
簡答
7.java數據庫並發中怎么理解兩個方法數據庫操作在一個事務里面,事務和數據庫連接池有什么關系,JTA事務和普通事務的區別
前兩個暫時找不到,可能這就是網易吧
事務概述:事務表示一個由一系列數據庫操作組成的不可分割的邏輯單位,其中的操作要么全做要么全不做。
事務的特性(ACID)
1.原子性:同一個事務的操作要么全部成功執行,要么全部撤銷
2.隔離性:事務的所有操作不會被其它事務干擾
3.一致性:在操作過程中不會破壞數據的完整性
4.時效性:事務的結果必須持久保存於介質上
JTA(Java Transaction API)提供了跨數據庫連接(或其他JTA資源)的事務管理能力。JTA事務管理則由JTA容器實現,J2ee框架中事務管理器與應用程序,資源管理器,以及應用服務器之間的事務通訊。
JTA的構成
a、高層應用事務界定接口,供事務客戶界定事務邊界的
b、X/Open XA協議(資源之間的一種標准化的接口)的標准Java映射,它可以使事務性的資源管理器參與由外部事務管理器控制的事務中
c、高層事務管理器接口,允許應用程序服務器為其管理的應用程序界定事務的邊界
JTA的構成
a、高層應用事務界定接口,供事務客戶界定事務邊界的
b、X/Open XA協議(資源之間的一種標准化的接口)的標准Java映射,它可以使事務性的資源管理器參與由外部事務管理器控制的事務中
c、高層事務管理器接口,允許應用程序服務器為其管理的應用程序界定事務的邊界
區別:
JTA提供了跨數據庫連接(或其他JTA資源)的事務管理能力。這一點是與JDBC Transaction最大的差異。
JDBC事務由Connnection管理,也就是說,事務管理實際上是在JDBC Connection中實現。事務周期限於Connection的生命周期。同樣,對於基於JDBC的ibatis事務管理機制而言,事務管理在SqlMapClient所依托的JDBC Connection中實現,事務周期限於SqlMapClient 的生命周期。
JTA事務管理則由 JTA容器實現,JTA容器對當前加入事務的眾多Connection進行調度,實現其事務性要求。JTA的事務周期可橫跨多個JDBC Connection生命周期。
JDBC事務由Connnection管理,也就是說,事務管理實際上是在JDBC Connection中實現。事務周期限於Connection的生命周期。同樣,對於基於JDBC的ibatis事務管理機制而言,事務管理在SqlMapClient所依托的JDBC Connection中實現,事務周期限於SqlMapClient 的生命周期。
JTA事務管理則由 JTA容器實現,JTA容器對當前加入事務的眾多Connection進行調度,實現其事務性要求。JTA的事務周期可橫跨多個JDBC Connection生命周期。