2020中金所實習面試問題

一、Java基礎

Arraylist和LinkedList的區別 底層實現原理

 Arraylist:底層是基於動態數組,根據下表隨機訪問數組元素的效率高,向數組尾部添加元素的效率高;但是,刪除數組中的數據以及向數組中間添加數據效率低,因爲需要移動數組。

Linkedlist基於鏈表的動態數組,數據添加刪除效率高,只需要改變指針指向即可,但是訪問數據的平均效率低,需要對鏈表進行遍歷。

對於隨機訪問get和set,ArrayList優於LinkedList,因爲LinkedList要移動指針。對於新增和刪除操作add和remove,LinedList比較佔優勢,因爲ArrayList要移動數據。

“==”和“equals”區別 hashcode是什麼

垃圾回收算法;分代回收中新生代採用的方法,老年代的方法

標記清除算法 複製算法(新生代算法)  標記整理算法(老年代回收算法)

String StringBuilder StringBuffer 區別

Error和Exception的區別,舉例……

Exception和Error都是繼承了Throwable類,在java中只有Throwable類型的實例纔可以被拋出(throw)或者捕獲(catch),他是異常處理機制的基本組成類型。
Exception和Error體現了java平臺設計者對不同異常情況的分類,Exception是程序正常運行中,可以預料的意外情況,可能並且應該被捕獲,進行相應的處理。
Error是指正常情況下,不大可能出現的情況,絕大部分的Error都會導致程序(比如JVM自身)處於非正常狀態,不可恢復狀態。既然是非正常情況,所以不便於也不需要捕獲,常見的比如OutOfMemoryError之類,都是Error的子類。
Exception又分爲可檢查(checked)異常和不檢查(unchecked)異常,可檢查異常在源碼裏必須顯示的進行捕獲處理,這裏是編譯期檢查的一部分。前面我們介紹的不可查的Error,是Throwable不是Exception。
不檢查異常就是所謂的運行時異常,類似NullPointerException,ArrayIndexOutOfBoundsExceptin之類,通常是可以編碼避免的邏輯錯誤,具體根據需要來判斷是否需要捕獲,並不會在編譯器強制要求。

數據庫中事務特徵:原子性的含義

 一個事務包含多個操作,這些操作要麼全部執行,要麼全都不執行。實現事務的原子性,要支持回滾操作,在某個操作失敗後,回滾到事務執行之前的狀態。
     回滾實際上是一個比較高層抽象的概念,大多數DB在實現事務時,是在事務操作的數據快照上進行的(比如,MVCC),並不修改實際的數據,如果有錯並不會提交,所以很自然的支持回滾。
     而在其他支持簡單事務的系統中,不會在快照上更新,而直接操作實際數據。可以先預演一邊所有要執行的操作,如果失敗則這些操作不會被執行,通過這種方式很簡單的實現了原子性。

二、計網

三次握手

第一次握手:主機 A 發送位碼爲 syn=1,隨機產生 seq number=1234567 的數據包到服務器,主機 B由 SYN=1 知道, A 要求建立聯機;

第 二 次 握 手 : 主 機 B 收 到 請 求 後 要 確 認 聯 機 信 息 , 向 A 發 送 ack number=( 主 機 A 的seq+1),syn=1,ack=1,隨機產生 seq=7654321 的包

第三次握手: 主機 A 收到後檢查 ack number 是否正確,即第一次發送的 seq number+1,以及位碼ack 是否爲 1,若正確, 主機 A 會再發送 ack number=(主機 B 的 seq+1),ack=1,主機 B 收到後確認

四次揮手(最後一次ack沒有的話會怎麼樣)

端口被佔用,主動斷開連接的一方需要等待2msl時間才能釋放原來使用的端口

三、Spring

IOC和DI的含義,解釋:IOC不是一種技術,只是一種思想,一個重要的面向對象編程的法則,它能指導我們如何設計出松耦合、更優良的程序。傳統應用程序都是由我們在類內部主動創建依賴對象,從而導致類與類之間高耦合,難於測試;有了IoC容器後,把創建和查找依賴對象的控制權交給了容器,由容器進行注入組合對象,所以對象與對象之間是鬆散耦合,這樣也方便測試,利於功能複用,更重要的是使得程序的整個體系結構變得非常靈活。

DI即“依賴注入”:是組件之間依賴關係由容器在運行期決定,形象的說,即由容器動態的將某個依賴關係注入到組件之中。依賴注入的目的並非爲軟件系統帶來更多功能,而是爲了提升組件重用的頻率,併爲系統搭建一個靈活、可擴展的平臺。通過依賴注入機制,我們只需要通過簡單的配置,而無需任何代碼就可指定目標需要的資源,完成自身的業務邏輯,而不需要關心具體的資源來自何處,由誰實現。理解DI的關鍵是:“誰依賴誰,爲什麼需要依賴,誰注入誰,注入了什麼”,

AOP的理解 切向編程思想:springAOP是一種的切向編程的思想,通過springAoP實現對軟件設計的原則:開閉原則。進而實現對一個類的和一個方法的增強的一種的手段。在傳統的架構中都是垂直的流程體系。但是在這個過程中經常產生一些橫向問題,比如log日誌記錄,權限驗證,事務處理,性能檢查的問題,通過使用的動態代理技術來實現來實現的AOP 的編程思想。

AOP的應用是:log日誌記錄,權限驗證,事務處理,性能檢查的問題。AOP在面向過程中產生的一些橫向問題,抽象出來就是AOP,主要是是關心邏輯的執行的順序時間。

事務:ACID   原子性 一致性  隔離性 持久性  

事務的隔離級別:讀未提交 讀讀已提交 可重複度 串行化

對象的序列化和反序列化?

序列化:把對象轉換成字節序列的過程稱爲序列化

反序列化:把字節序列恢復成對象的過程稱爲反序列化

對象的序列化和反序列化主要就是使用ObjectOutputStream 和 ObjectInputStream

 大數據中的Hbase和mysql的區別:

Mysql:關係型數據庫,主要面向OLTP,支持事務,支持二級索引,支持sql,支持主從、Group Replication架構模型(此處以Innodb爲例,不涉及別的存儲引擎)。
b)Hbase:基於HDFS,支持海量數據讀寫(尤其是寫),支持上億行、上百萬列的,面向列的分佈式NoSql數據庫。天然分佈式,主從架構,不支持事務,不支持二級索引,不支持sql。
數據存儲方式
a)MySQL採用行存儲,MySQL行存儲的方式比較適合OLTP業務。
b)HBase是面向列的NoSql數據庫,列存儲的方式比較適合OLAP業務,而HBase採用了列族的方式平衡了OLTP和OLAP,支持水平擴展,如果數據量比較大、對性能要求沒有那麼高、並且對事務沒有要求的話,HBase也是個不錯的選擇。

 

 

 Redis、MySQL、hive、hbase的區別

redis:分佈式緩存,強調緩存,基於內存,支持數據持久化,支持事務操作
傳統數據庫:注重關係,注重事務性
hbase:列式數據庫,字典查詢,稀疏性存儲,無法做關係數據庫的主外鍵,用於存儲海量數據,底層基於hdfs
hive:數據倉庫工具,底層是mapreduce。不是數據庫,不能用來做用戶的交互存儲
HBase和Redis都是基於Key、Value的數據庫。


增、刪、改、查、 庫、表的概念在hbase 和hive 中 哪些有哪些沒有?

雖然Hive提供了SQL查詢功能,但是Hive不能夠進行交互查詢–因爲它只能夠在Haoop上批量的執行Hadoop,Hive中有增、查、庫、表的概念。
Hbase的能夠在它的數據庫上實時運行,Hbase中有增刪、改、查、表的概念。
數據庫和數據倉庫的區別
數據倉庫:分析型處理

是爲了企業所有級別的決策制定計劃過程,提供所有類型數據類型的戰略集合。它出於分析性報告和決策支持的目的而創建。
數據倉庫是面向主題的;
數據是隨着時間的變化而變化的;
數據倉庫的數據是不可修改的。 數據倉庫的數據主要提供企業決策分析之用,所涉及的數據操作主要是數據查詢,一般情況下並不進行修改操作。
屬於讀模式:在數據查詢時會進行檢查
hive數據倉庫可理解爲hdfs的一個數據管理工具
數據庫:操作型處理

支持事務性操作,屬於寫模式,即寫入數據時進行檢查
它是針對具體業務在數據庫聯機的日常操作,通常對少數記錄進行查詢、修改。
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章