2021屆Java開發求職-------面試實戰之Vivo提前批

一.介紹

這個面試題目非常多,牛客網鏈接

我擦 但是 VIvo好像不招Java研發崗的

二.題目

Java基礎

  1. Java異常瞭解嗎?說說平時遇到的異常?說出6種常見的java異常。寫程序遇到過哪些異常 運行時異常有哪些
  • 運行時異常,比如空指針這種,也叫做非受檢異常
  1. 面向對象 面對對象的幾大特性 多態怎麼理解
  • 這個就舉例子扯就行
  1. 對string類的理解。stringbuffer 和 stringbuilder
  • StringBuffer線程安全,StingBuilder線程不安全
  • 底層是char數組
  1. 反射機制介紹一下
  • 指在程序的運行狀態中,可以構造任意一個類的對象,可以瞭解任意一個對象所屬的類,可以瞭解任意一個類的成員變量和方法,可以調用任意一個對象的屬性和方法
  1. bio,nio,aio分別介紹一下,nio的實現方式
  • 阻塞式IO,非阻塞式IO,異步非阻塞式IO
  • NIO 基於 Channel(通道)和 Buffer(緩衝區)進行操作,數據總是從通道讀取到緩衝區中,或者從緩衝區寫入到通道中。Selector(選擇器)用於監聽多個通道的事件(比如:連接請求,數據到達等),因此使用單個線程就可以監聽多個客戶端通道
  1. 問了public等變量定義修飾詞的時間域
  1. 問了反射機制,還有問了動態代理的好處和壞處,好處答不上來
  • 好處:動態代理可以通過用代理對象替換原本對象,對一些功能進行擴展,例如Spring的AOP面向切面編程,就是通過動態代理來實現一些類似於打日誌等功能
  • 壞處:但是它只能基於接口進行代理,已經繼承proxy了,可能還有消耗內存?
  1. 接口和抽象類的區別。
  • 接口能實現多繼承,抽象類不行
  • 抽象類描述的是一種類,接口描述的是一個功能
  1. 有一個public static final的HashMap,裏邊對象的屬性能不能修改?
  • 可以更改,只有初始化操作做不了
  • 當final修飾變量時,對於基本類型和string,這個變量的值是不能改變的;當修飾其他類型的對象時,final使其引用恆定不變,但是對象自身卻可以自由修改變換。
  1. 爲什麼java 平臺無關性 機器碼和字節碼區別 JVM加載代碼的一個流程
  • 流程:加載,準備,驗證,解析,初始化,使用,卸載
  • 平臺無關性:通過JVM把class文件轉化爲機器能看懂的機器語言
  • 機器碼是二進制的,字節碼是16進制class文件,java文件編譯產生的
  1. java數據類型以及自己的應用 自動拆箱和自動裝箱以及自己的應用即什麼時候用到的,列舉幾種情況
  • byte,short,int,long,boolean,double,float,char
  1. 什麼是值傳遞和引用傳遞,區別及應用
  • “在Java裏面參數傳遞都是按值傳遞”這句話的意思是:按值傳遞是傳遞的值的拷貝,按引用傳遞其實傳遞的是引用的地址值,所以統稱按值傳遞。
  1. 重載和重寫
    重寫是子類對父類方法進行重寫,重載是指不同函數用同名方法,根據參數不同實現函數不同。
  2. static方法是否能重寫,接口和抽象類的區別
    不可以
  3. 你覺得java是一種什麼樣的語言以及java特性
  • 面向對象blablabla
  1. lamda表達式瞭解嗎?1.8新特性有什麼?(面試寶典對接口抽象這個問題是錯的,過時了)
  • 瞭解
  • 速度更快 – 紅黑樹
  • 代碼更少 – Lambda
  • 強大的Stream API – Stream
  • 便於並行 – Parallel
  • 最大化減少空指針異常 – Optional
  1. 內存泄露怎麼造成的,怎麼排查
    內存泄漏就是創建的對象一直沒有回收,導致丟了一部分內存。內存泄漏排查
  2. 講講final修飾符。
  • 修飾類,終態類,類不能被繼承。
  • 修飾方法,方法不能被重寫。
  • 修飾變量,變量只能被賦值一次,不能被重新賦值,其實就是一個常量。(在類加載階段可以把對象的值預先賦值)
  1. 一個對象佔多少內存。
  • Object o=new Object(): 在java中空對象佔八個字節,對象的引用佔四個字節。所以上面那條語句所佔的空間是4byte+8byte=12byte
  1. java淺拷貝和深拷貝
  • 二者對於基本類型變量沒區別
  • 對於引用類型對象,淺拷貝直接把地址賦值給新對象,假如新對象變了,原來對象也跟着變
  • 深拷貝每個對象都需要實現 Cloneable 並重寫 clone() 方法,開銷大,速度慢
  1. static能不能被重寫?
  • 重寫方法的目的是爲了多態,或者說:重寫是實現多態的前提,即重寫是發生在繼承中且是針對非static方法的。
    語法上子類允許出現和父類只有方法體不一樣其他都一模一樣的static方法,但是在父類引用指向子類對象時,通過父類引用調用的依然是父類的static方法,而不是子類的static方法。
    即:語法上static支持重寫,但是運行效果上達不到多態目的
  1. 序列化,反序列化,什麼時候用? 如何對一個對象序列化
    存儲爲二進制、xml、json等等,把bai對象轉換成這du種格式就叫序列化,而反序列化通常是從這種格式轉換回來。序列化可以用一些API

Java集合類

  1. Hashmap底層(數組+鏈表+紅黑樹)hashmap爲什麼線程不安全,如何保證線程安全,就扯到concurrenthashmap hashmap底層實現 多線程會出現什麼情況 擴容機制是什麼爲什麼會死鎖 如何解決碰撞 Jdk 1.8的優化。
  • 爲什麼線程不安全:頭插法/數值覆蓋
  • 解決碰撞:拉鍊法
  • jdk1.8:引入紅黑樹優化過長鏈表導致的查詢效率低
  1. concurrenthashmap1.7和1.8的區別;concurrenthashmap說說,它是如何保證線程安全的?jdk1.7的hashentry和segment鎖。具體說說segment鎖?能講下ConcurrentHashMap的實現原理麼 JDK7或者8都行
    常用集合類 實現類
  2. list和set區別(重複/不重複)
  3. set,list,map(線程安全的map,map怎麼實現之類的)
  4. 紅黑樹介紹一下,跟平衡二叉樹比較一下,紅黑樹有哪些應用場景
  5. 一致性哈希函數以及hashmap的put方法

Java併發

  1. java創建線程的方式,runnable和callable區別(參數不同)1. java線程的狀態有哪些;線程的幾種狀態
  2. wait和sleep的區別;wait和notify的使用場景;
  3. 介紹一下volatile以及原理;volatile介紹一下Volatile底層是如何實現的? 說了內存可見性和內存屏障,Volatile是絕對線2程安全的嗎?不是,沒有保證原子性。volatile關鍵字在線程通信的問題
  4. 介紹一下synchornized以及原理; lock和synchornized的區別;synchronized鎖的升級過程?Synchronized,底層是如何實現的?說了monitor對象頭,以及兩個monitorenter和monitorexit運用於代碼塊。
    對象頭是存儲了哪些信息?說說synchronized的鎖優化過程?說了偏向,自旋,輕量和重量。
  5. 介紹一下AQS
  6. 說一下公平鎖和非公平鎖的原理;
    • 公平鎖是每次都從隊列中取隊頭的線程獲得鎖
    • 非公平鎖每次都會競爭(用CAS操作嘗試獲取鎖)
  7. cas操作是什麼,以及可能出現的問題;
  1. 說說你理解的悲觀鎖和樂觀鎖?樂觀鎖有哪些?樂觀鎖有什麼缺點?
  • 悲觀鎖和樂觀鎖是兩種思想
  • 樂觀鎖的實現有版本號機制,如果數據跟預期版本version一致就更新
  • 缺點是隻適用於併發寫操作少的情況,如果操作多就會一直阻塞
  1. 阻塞隊列 線程間通信方式 創建線程方式 創建線程池方式 線程池常用參數
  2. cpu密集型多線程和io密集型多線程的比較。cpu密集型裏如何管理多線程? 用什麼樣的線程池和阻塞隊列?
  • CPU密集型就需要線程數與CPU數一致

JVM

  1. JVM運行時內存區域劃分?哪些線程私有?運行時數據區,私有共享都是哪些?堆區內存如何分配?
  • 堆區內存:年輕代80% ,老年代20%,大部分對象都是朝生夕死的
  • 堆區,方法區,本地方法棧,虛擬機棧,程序計數器。堆和方法區是共有的,其餘是私有的
  1. 對象的生命週期?
    1.  創建階段(Created)
      
    1.  應用階段(In Use)
      
    1.  不可見階段(Invisible)
      
    1.  不可達階段(Unreachable)
      
    1.  收集階段(Collected)
      
    1.  終結階段(Finalized)
      
    1.  對象空間重分配階段(De-allocated)
      
  1. JVM垃圾回收器,cms和g1的特點,兩者的區別是什麼,比g1更加先進的垃圾回收器有了解麼,ZGC原理,能夠管理多大的內存,CMS能管理多大的內存,G1呢
  • cms是最短停頓時間收集器,g1是整堆收集器
  • CMS專注老年代
  • G1:它將整個Java堆劃分爲多個大小相等的獨立區域(Region),雖然還保留有新生代和老年代的概念,但新生代和老年代不再是物理隔離的了,它們都是一部分Region(不需要連續)的集合。
  • 工作步驟不同
  • 比G1更先進:這還真不知道
  1. JVM內存模型 類的生命週期 類加載過程 雙親委派機制瞭解嗎 進入老年代過程 什麼情況下直接進入老年代
  2. 類加載機制,過程,類加載機制?如何自定義實現類加載器?雙親委派模型、類加載器類別,雙親委派模型本質是解決了什麼問題?安全性,有哪幾種類加載器?類加載的流程。知道哪些類加載器。類加載器之間的關係?雙親委派模型。爲什麼使用雙親委派模型?
  1. 垃圾回收算法,常見的垃圾回收器及他們之間區別,垃圾回收發生在哪裏,怎麼判斷對象存活、GC Roots具體有哪些、講講對象分配與回收,什麼可以作爲垃圾回收的對象,垃圾回收算法和流程。
  • 發生在堆區,通過GC-roots對象判斷,如果沒有引用就是要進行gc的對象
  1. 棧什麼情況下會溢出?
  • 方法執行是創建的棧幀超過了棧的深度。那麼最有可能的就是方法遞歸調用產生這種結果。
  • 注意棧是線程私有的
  1. 靜態變量存放在內存哪個區域?
  • static修飾的成員(包括變量和方法)叫靜態成員,都存放在方法區中的靜態區,隨着類的加載而存在、類的回收而釋放,和對象存在與否沒有關係,並且要先於對象存在。
  • 在主函數中調用靜態方法,靜態方法是在棧內存中進行加載的,靜態方法執行完之後就彈棧結束了。事實上,所有方法都是在棧內存中執行的。

計算機網絡

  1. 輸入一個url後的過程;瀏覽器從發送請求的全部過程
    我的文章關於計網
  2. OSI七層和TCP四層協議,OSI七層模型/五層模型,每一層有哪些協議,3. http,tcp,ip位於哪一層
  • http位於應用層
  • tcp位於傳輸層
  • ip位於網絡層
  1. TCP三次握手四次分手,tcp四次揮手爲什麼要四次,爲什麼TCP是安全的,TCP,UDP的區別
    TCP的可靠體現在TCP在傳遞數據之前,會有三次握手來建立連接,而且在數據傳遞時,有確認、窗口、重傳、擁塞控制機制,在數據傳完後,還會斷開連接用來節約系統資源。

1、TCP面向連接(如打電話要先撥號建立連接);UDP是無連接的,即發送數據之前不需要建立連接

2、TCP提供可靠的服務。也就是說,通過TCP連接傳送的數據,無差錯,不丟失,不重複,且按序到達;UDP盡最大努力交付,即不保證可靠交付

3、TCP面向字節流,實際上是TCP把數據看成一連串無結構的字節流;UDP是面向報文的

UDP沒有擁塞控制,因此網絡出現擁塞不會使源主機的發送速率降低(對實時應用很有用,如IP電話,實時視頻會議等)

4、每一條TCP連接只能是點到點的;UDP支持一對一,一對多,多對一和多對多的交互通信

5、TCP首部開銷20字節;UDP的首部開銷小,只有8個字節
6、TCP的邏輯通信信道是全雙工的可靠信道,UDP則是不可靠信道

  1. 一個手機應用程序裏面的進程和線程分別是怎麼進行的?

進程是操作系統資源分配的基本單位,而線程是任務調度和執行的基本單位

在開銷方面:每個進程都有獨立的代碼和數據空間(程序上下文),程序之間的切換會有較大的開銷;線程可以看做輕量級的進程,同一類線程共享代碼和數據空間,每個線程都有自己獨立的運行棧和程序計數器(PC),線程之間切換的開銷小。

所處環境:在操作系統中能同時運行多個進程(程序);而在同一個進程(程序)中有多個線程同時執行(通過CPU調度,在每個時間片中只有一個線程執行)

Mysql

  1. 數據庫引擎事務隔離級別,串行化如何實現,數據庫的隔離級別?四個。你平常使用的是哪個隔離級別。數據庫隔離級別以及分別解決了什麼問題
  • 讀未提交,讀已提交,可重複讀,可串行化
  • mysql默認是可重複讀
  • 髒讀,不可重複讀,幻讀
  1. MySQL的存儲引擎有哪些?它們之間的區別?你用的mysql存儲引擎?爲什麼選擇它?實現原理?
    innodb和myisam,區別見:innodb和myisam區別
  2. 怎麼判斷一個SQL語句有沒有走索引?緊接着問explain知道哪些字段嗎
    mysql存儲模型 區別 怎麼看用沒用索引 怎麼判斷sql語句好壞
  • explain命令看結果
  1. 一個手機應用要更改數據庫,它的底層是怎麼實現的?
  2. MySQL InnoDB存儲引擎中的MVCC解決了什麼問題,能說下MVCC的實現原理麼
  • 多版本併發控制
  • 一種處理讀寫衝突的手段, 目的在於提高 數據庫 高併發場景下的吞吐性能 。
  • 如此一來不同的事務在併發過程中, SELECT 操作可以不加鎖而是通過 MVCC 機制讀取指定的版本歷史記錄,並通過一些手段保證保證讀取的記錄值符合事務所處的隔離級別,從而解決併發場景下的讀寫衝突。

文章:MVCC

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