1. 程式人生 > 其它 >2021年網易Java崗面試必問

2021年網易Java崗面試必問

2021年網易Java崗面試必問

面:為什麼要使用雙親委派機制去載入類?

答:避免多份同樣位元組碼的載入,浪費記憶體。

類的載入方式

  • 隱式載入:new
  • 顯示載入:loadClass、forName等

類的裝載過程如下圖:

面:loadClass和forName的區別?

  • Class.forName得到的class是已經初始化完成了的 (MySQL載入驅動時,需要呼叫靜態程式碼塊完成一些操作)
  • ClassLoader.loadClass得到的class是還沒有連結的。(用於Spring IoC中的延遲載入機制)

Java記憶體模型

JVM記憶體模型——JDK8如下圖所示:

  • 執行緒私有:程式計數器、虛擬機器棧、本地方法棧
  • 執行緒共享:MetaSpace、Java堆

程式計數器(PC)

  • 當前執行緒所執行的位元組碼行號指示器(邏輯)
  • 通過改變計數器的值來選取下一條需要執行的位元組碼指令
  • 和執行緒是一對一的關係即“執行緒私有”
  • 對Java方法計數,如果是Native方法則計數器的值為Undefined
  • 不會發生記憶體洩漏

Java虛擬機器棧(Stack)

  • Java方法執行的記憶體模型
  • 包含多個棧幀(一個棧幀包括區域性變量表、操作棧、動態連結、返回地址等,方法的呼叫即對於棧幀從虛擬機器Stack中入棧到出棧的過程)
  • 當執行緒請求的棧深度超過最大值,會丟擲 StackOverflowError 異常;
  • 棧進行動態擴充套件時如果無法申請到足夠記憶體,會丟擲 OutOfMemoryError 異常。

本地方法棧

與虛擬機器棧相似,主要作用於標註了native的方法。

元空間(MetaSpace)

用於存放已被載入的類資訊、常量、靜態變數。

面:談談元空間(MetaSpace)和永久代(PermGen)的區別?

  • 均是方法區(JVM的一種規範)的實現
  • JDK8後元空間替代了永久代
  • 元空間使用本地記憶體,而永久代使用的是jvm記憶體,這解決了空間不足的問題。

面:MetaSpace相比PermGen的優勢?

  • 字串常量池(JDK1.7開始移動到Java堆中)存在與永久代中,容易出現效能問題和記憶體溢位
  • 類的方法的資訊大小難以確定,給永久代的大小的指定帶來了困難
  • 永久代會為GC帶來不必要的複雜性
  • 方便HotSpot與其他JVM如Jrockit的整合(因為永久代是HotSpot獨有的)

Java堆(Heap)

  • 是物件例項的分配區域
  • GC管理的主要區域

面:說說JVM三大效能調優引數-Xms、-Xmx、-Xss的含義?

java -Xms128m -Xmx128m -Xss256k -jar xxx.jar

  • -Xss:規定了每個執行緒虛擬機器棧(堆疊)的大小
  • -Xms:堆的初始值
  • -Xmx:堆能達到的最大值

一般將-Xms與-Xmx設定為同樣的數值,避免堆擴容時發生的記憶體抖動,影響程式的穩定性。

記憶體分配策略

  • 靜態儲存:編譯時確定每個資料目標在執行時的儲存空間需求
  • 棧式儲存:資料區需求在編譯時未知,在執行時模組入口前確定
  • 堆式儲存:編譯時或執行時模組入口都無法確定需求,需要動態分配

面:談談Java記憶體模型中堆和棧的區別與聯絡?

  • 聯絡:引用物件、陣列時,棧裡定義變數來儲存堆中目標的首地址
  • 管理方式:棧自動釋放,堆需要GC
  • 空間大小:一般棧比堆小
  • 碎片相關:棧產生的記憶體碎片遠小於堆
  • 分配方式:棧支援靜態和動態分配,而堆僅支援動態分配
  • 效率:棧的效率比堆高(棧只有入棧與出棧)

面:請解釋下JDK6和JDK6+下intern()方法的區別?

  • JDK6:當呼叫intern方法時,如果字串常量池先前已創建出該字串物件,則返回池中的該字串的引用。否則將此字串物件新增到字串常量池中,並且返回該字串物件的引用。
  • JDK6+:當呼叫intern方法時,如果字串常量池先前已創建出該字串物件,則返回池中該字串的引用。否則,如果該字串物件已經存在與Java堆中,則將堆中對此物件的引用新增到字串常量池中,並且返回該引用;如果堆中不存在該物件,則在字串常量池中建立該字串並返回其引用。

Spring全套教學資料

Spring是Java程式設計師的《葵花寶典》,其中提供的各種大招,能簡化我們的開發,大大提升開發效率!目前99%的公司使用了Spring,大家可以去各大招聘網站看一下,Spring算是必備技能,所以一定要掌握。

**資料領取方式:點選這裡前往藍色傳送門

百度網盤連結:pan.baidu.com/s/1BDrBZ5sv4rzxyDDFLbpocw

提取碼:exa7

**

目錄:

部分內容:

Spring原始碼

  • 第一部分 Spring 概述
  • 第二部分 核心思想
  • 第三部分 手寫實現 IoC 和 AOP(自定義Spring框架)
  • 第四部分 Spring IOC 高階應用
    基礎特性
    高階特性
  • 第五部分 Spring IOC原始碼深度剖析
    設計優雅
    設計模式
    注意:原則、方法和技巧
  • 第六部分 Spring AOP 應用
    宣告事務控制
  • 第七部分 Spring AOP原始碼深度剖析
    必要的筆記、必要的圖、通俗易懂的語言化解知識難點

腳手框架:SpringBoot技術

它的目標是簡化Spring應用和服務的建立、開發與部署,簡化了配置檔案,使用嵌入式web伺服器,含有諸多開箱即用的微服務功能,可以和spring cloud聯合部署。

Spring Boot的核心思想是約定大於配置,應用只需要很少的配置即可,簡化了應用開發模式。

  • SpringBoot入門
  • 配置檔案
  • 日誌
  • Web開發
  • Docker
  • SpringBoot與資料訪問
  • 啟動配置原理
  • 自定義starter

微服務架構:Spring Cloud Alibaba

同 Spring Cloud 一樣,Spring Cloud Alibaba 也是一套微服務解決方案,包含開發分散式應用微服務的必需元件,方便開發者通過 Spring Cloud 程式設計模型輕鬆使用這些元件來開發分散式應用服務。

  • 微服務架構介紹
  • Spring Cloud Alibaba介紹
  • 微服務環境搭建
  • 服務治理
  • 服務容錯
  • 服務閘道器
  • 鏈路追蹤
  • ZipKin整合及資料持久化
  • 訊息驅動
  • 簡訊服務
  • Nacos Confifig—服務配置
  • Seata—分散式事務
  • Dubbo—rpc通訊

Spring MVC

目錄:

部分內容: