Java面試經驗——20200623

TP_Link 面試

1介紹你的項目,面試官針對我的項目問了大部分時間,可能比較感興趣把,簡歷上寫的項目一定要了解清楚.

2介紹快排,快排爲什麼不穩定,介紹TCP三次握手,說Java關鍵字final的作用

選擇排序、快速排序、希爾排序、堆排序不是穩定的排序算法,而冒泡排序、插入排序、歸併排序和基數排序是穩定的排序算法

final 修飾的類叫最終類,該類不能被繼承。修飾的方法不能被重寫。final修飾的變量叫常量,常量必須初始化,初始化之後值就不能被修改(相當於在c中的constant所修飾的量)

final finally finalize區別

    final可以修飾類、變量、方法,修飾類表示該類不能被繼承、修飾方法表示該方法不能被重寫、修飾變量表示該變量是一個常量不能被重新賦值。

    finally一般作用在try-catch代碼塊中,在處理異常的時候,通常我們將一定要執行的代碼方法finally代碼塊中,表示不管是否出現異常,該代碼塊都會執行,一般用來存放一些關閉資源的代碼。

    finalize是一個方法,屬於Object類的一個方法,而Object類是所有類的父類,該方法一般由垃圾回收器來調,當我們調用System.gc() 方法的時候,由垃圾回收器調用finalize(),回收垃圾,一個對象是否可回收的最後判斷。

TCP的三次握手原理是:

 順豐java實習面試

1選擇題

2dubbo

3AOP

AOP 是一種編程思想。是面向切面編程的一種思想,在傳統的架構中都是垂直的流程體系。但是在這個過程中經常產生一些橫向問題,比如log日誌記錄,權限驗證,事務處理,性能檢查的問題,爲了遵循軟件的開閉原則。就是對原來不修改進而擴展原方法和原類的功能。SpringAOP就是實現了這樣一種思想。通過對原方法和類在不修改代碼的情況下而進行了類的增強的方式。主要是通過使用的動態代理技術來實現。

4redis如何持久化

Redis的持久化的方式

redis提供兩種方式進行持久化,一種是RDB持久化(原理是將Reids在內存中的數據庫記錄定時 dump到磁盤上的RDB持久化),另外一種是AOF(append only file)持久化(原理是將Reids的操作日誌以追加的方式寫入文件)

RDB持久化是指在指定的時間間隔內將內存中的數據集快照寫入磁盤,實際操作過程是fork一個子進程,先將數據集寫入臨時文件,寫入成功後,再替換之前的文件,用二進制壓縮存儲

AOF持久化以日誌的形式記錄服務器所處理的每一個寫、刪除操作,查詢操作不會記錄,以文本的方式記錄,可以打開文件看到詳細的操作記錄。

 

AOF

RDB

優點

1AOF 可以更好的保護數據不丟失,一般 AOF 會每隔 1 秒,通過一個後臺線程執行一次fsync操作,最多丟失 1 秒鐘的數據

2AOF 日誌文件以 append-only 模式寫入,所以沒有任何磁盤尋址的開銷,寫入性能非常高,而且文件不容易破損,即使文件尾部破損,也很容易修復。

3AOF 日誌文件即使過大的時候,出現後臺重寫操作,也不會影響客戶端的讀寫.

4AOF 日誌文件的命令通過非常可讀的方式進行記錄,這個特性非常適合做災難性的誤刪除的緊急恢復。

1RDB 會生成多個數據文件,每個數據文件都代表了某一個時刻中 redis 的數據,這種多個數據文件的方式,非常適合做冷備,可以將這種完整的數據文件發送到一些遠程的安全存儲上去

2RDB 對 redis 對外提供的讀寫服務,影響非常小,可以讓 redis 保持高性能

3相對於 AOF 持久化機制來說,直接基於 RDB 數據文件來重啓和恢復 redis 進程,更加快速。

缺點

1對於同一份數據來說,AOF 日誌文件通常比 RDB 數據快照文件更大

2AOF 開啓後,支持的寫 QPS 會比 RDB 支持的寫 QPS 低AOF 這種較爲複雜的基於命令日誌 / merge / 回放的方式,比基於 RDB 每次持久化一份完整的數據快照文件的方式

1如果想要在 redis 故障時,儘可能少的丟失數據,那麼 RDB 沒有 AOF 好

2RDB 每次在 fork 子進程來執行 RDB 快照數據文件生成的時候,如果數據文件特別大,可能會導致對客戶端提供的服務暫停數毫秒,或者甚至數秒。

5wait/sleep/join

sleep 與 wait 區別:

1. 對於 sleep()方法,我們首先要知道該方法是屬於 Thread 類中的。而 wait()方法,則是屬於Object 類中的。

2. sleep()方法導致了程序暫停執行指定的時間,讓出 cpu 該其他線程,但是他的監控狀態依然保持者,當指定的時間到了又會自動恢復運行狀態。

3. 在調用 sleep()方法的過程中, 線程不會釋放對象鎖

4. 而當調用 wait()方法的時候,線程會放棄對象鎖,進入等待此對象的等待鎖定池,只有針對此對象調用 notify()方法後本線程才進入對象鎖定池準備獲取對象鎖進入運行狀態。

6消息隊列如何保證不重複消費

用一張日誌表來記錄已經處理成功的消息的 ID,如果新到的消息 ID 已經在日誌表中,那麼就不再處理這條消息。

7super extend

父類關鍵字和繼承與實現的的關係單繼承 多實現。

8innodb myisam

9抽象類和接口

抽象類和接口的區別:一個類只能繼承一個抽象類,而一個類卻可以實現多個接口。(單繼承多實現方式)

 

接口

抽象類

相同點

接口和抽象類都不能被實例化,它們都位於繼承樹的頂端,用於被其他類實現和繼承。實現接口或繼承抽象類的普通子類都必須實現這些抽象方法

不同點

1只能包含抽象方法,靜態方法和默認方法,不能爲普通方法提供方法實現(但是在JDK1.8以後可以使用default和static關鍵字來修飾接口中定義的普通方法)

2接口中的成員變量只能是 public static final 類型的

3接口不能包含構造器

4接口裏不能包含初始化塊

1完全可以包含普通方法,接口中的普通方法默認爲抽象方法

2抽象類中的成員變量可以是各種類型的

3抽象類可以包含構造器,抽象類裏的構造器並不是用於創建對象,而是讓其子類調用這些構造器來完成屬於抽象類的初始化操作。

4抽象類裏完全可以包含初始化塊。

10springboot註解原理:

通過SPI的原理來實現的通過tomcat來調用的spring的。Websocket是不能在tomcat部署的。在servlet3.1的規範中的了在servlet容器啓動的時候回去調用servletContainerInitialzer這個實現類SpringServletcontainerInitalizer這個類在這個實現類中的添加了handlestype這實現類。會將這個SpringServletcontainerInitalizer這個類傳入到集合當中,在通過在調用到onstarup方法來實現。

11判斷閏年

1、能被4整除,但不能被100整除;2、能被400整除;

12在linux上部署java

1 安裝docker  將java的相關程序打成鏡像文件,然後在運行jar包

2 將java的文件打包成爲war 包 放在Tomacat的webapps目錄下,啓動Tomcat並開放端口,就可以訪問。

三一集團-校招提前批java面經

1.自我介紹

2.用java做過什麼

3.redis提供了那些讀寫功能,具體

4.用spring等框架做了什麼功能

     用戶的註冊和登入用戶的信息的查詢。

5.java中有哪些具體集合類

  Map set List

6.list循環遍歷有幾種方法

    for  增強的for

7.多線程怎麼實現

1)繼承Thread類創建線程

2)實現Runnable接口創建線程

3)使用Callable和Future創建線程

4)使用線程池例如用Executor框架

8.浮點數四捨五入保留2位小數怎麼實現

public static void main(String[] args) {
        String d1 = "2.2";
        String d2 = "2.260";
        String d3 = "2.207";
        String d4 = "2.996";
        
        DecimalFormat df = new DecimalFormat("0.00");
        
        System.out.println(df.format(Double.parseDouble(d1)));
        System.out.println(df.format(Double.parseDouble(d2)));
        System.out.println(df.format(Double.parseDouble(d3)));
        System.out.println(df.format(Double.parseDouble(d4)));
        
    }

結果如下:

2.20
2.26
2.21
3.00

9.怎麼保證兩條數據同時寫入成功

使用事務的。將兩個數據放置爲一個事務

10.事務具體的配置

在設計到增刪改的地方設置 @TrainSeation 註解 並在springMVC 中開啓事務。

 

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