天天看點

面試總結之常考題目彙總

以下題目搜集于面試過程中,主要适用于 1-3 年工作經驗的開發者,當然個人以為工作3-5年後,還是會問這些個問題,隻是面試官會揪着某一個知識點往深入裡面問下去,就看被面試者自身的能力。

java 基礎類

  • HashMap 和 HashSet 差別?HashMap 和 HashTable 的差別?HashMap 和 TreeMap 以及LinkedHashMap 的差別?各自底層的資料結構是什麼?HashMap、ArrayList 等資料結構的擴容倍率?HashMap 底層為什麼要用數組?HashMap擴容機制?
  • HashMap的資料結構是什麼?數組加連結清單,那取值時如何從連結清單裡面取到希望的value呢?
  • Try…catch…return的傳回值判斷?執行順序?return 加在 try 代碼塊裡面之後的順序?
  • CurrentHashMap的實作原理?與 HashMap 相比而言,改進在哪裡?如何實作的?
  • 設計模式用過哪些?單例模式的幾種寫法?JDK 裡面有哪些典型的API 是你剛才列舉的常用的設計模式?
  • 單例模式的判斷,即給出一個類似單例模式的代碼段,指出裡面的錯誤的地方?懶漢 vs 餓漢,兩者的差別?
  • JDK 動态代理和 cglib 代理的差別?
  • 關于時間複雜度的計算和推導是否熟悉或者了解,ArrayList的時間複雜度,各種排序算法的時間複雜度是多少?Spring 架構裡面有哪些設計模式應用?
  • JVM的結構圖?ClassLoader原理以及示例圖?兩個類是否可以互為父ClassLoader?

    并發和并行差別?

  • 線程之間的通信方式?建立線程的幾種方式?wait()和sleep()的差別?
  • 用過哪些多線程API,在什麼樣的場合下選擇使用這個API?還知道其他一些API嗎?有什麼差別?
  • 關于多線程,ThreadPoolExecutor 的幾個重要參數,分别是什麼意思?舉一個現實中的執行個體,加以說明最好。
  • synchronized關鍵字和juc鎖的對比差別?
  • 現實問題如OOM或者死鎖的排錯思路?
  • Checked Exception 和 Unchecked Exception 的差別是什麼?已經有 checked exception 的情況下,JDK 為什麼還要提供 unchecked exception?
  • 關于序列化,是否implements Serializable,關鍵字transient,然後是修飾符private和public,問哪個屬性可以序列化到檔案?
  • 運算符的優先級(不常見)
  • Java堆的劃分?
  • 垃圾回收機制以及算法?互相引用的兩個獨立對象如何被垃圾回收器回收?垃圾回收判斷可達的出發點是什麼?
  • Equal和==的差別?equals() 和 hashCode() 方法?什麼時候需要重寫?
  • java.io.* 包的熟悉程度;位元組流與字元流的區分(如選擇題)?進一步,nio 的了解,其使用場景。
  • SPI的思想?SPI的應用場景?
  • Java調用外部程式的方法?比如dll檔案等;
  • 如何用Java自帶的API寫程式導出Dump檔案?(應該是沒記錯的)
  • 如何檢視每一行Java程式代碼的記憶體消耗?
  • 實作一個線程安全的阻塞隊列?
  • 網絡socket有了解不?進一步,Netty?

JVM

  • 記憶體屏障?JVM?JMM?
  • Volatile以及CAS原理?

計算機網絡

  • 七層網絡協定
  • TCP/UDP

架構類

值得一提的是,其中的核心架構,無論是Spring ,還是Spring boot,亦或是Spring cloud,都可以拿出很多問題來考查。

Spring

  • Spring中有哪些設計模式?有沒有單例模式?Spring bean 是不是單例模式?或者直接問 Spring 中 bean 的生命周期是什麼?
  • 簡單論述一下Spring IoC?IoC的種類?IoC容器的啟動過程?Spring web的核心作用?Spring的幾種bean的作用域?@PostConstruct & @PreDestroy兩個注解的作用,結合Spring 來講?
  • 講講 Spring!!spring的啟動過程?你對Aop的了解,ApplicationContext 和 BeanFactory 兩個類的差別? AOP的使用場景?
  • 對 spring 事務控制的了解?7種傳播?4種讀的了解?

spring boot

  • spring boot 的優勢所在?spring boot 如何做到自動配置的? spring boot 開發中并沒有 web.xml 檔案,你對這個缺失檔案的了解?如何做到的?bootstrap.yml 檔案的使用場景?application.properties 和 application.yml 檔案的差別?

Spring cloud

  • Spring cloud各元件的基本使用和了解?Feign的重試機制,Eureka的保護機制,Zuul的路由機制等?
  • Spring cloud與Dubbo的差別?與微服務的差別?

ORM

  • ORM的思想?懶加載如何配置以及意義?級聯如何配置,什麼時候應該使用級聯?一級緩存:Session級别的緩存?@Version的使用:資料庫的樂觀鎖?
  • MyBatis 如何實作連接配接不同的資料庫,并且做到統一适配?(不明白什麼意圖?測試環境使用MySQL資料庫,但是生産資料庫不僅僅是MySQL,還有oracle等。一套代碼!!!不是多資料源。
  • MyBatis如何實作分頁?自帶的插頁功能性能不好,可以使用PageHelper;如果讓你設計實作 mybatis 分頁,如何實作?那資料庫層面的話,是如何支援分頁查詢?
  • Hibernate 的 get() 和 load() 方法的差別? Hibernate 的 lazyload 和 session 啥的差別?

Tomcat

雙親委托類加載機制,以及相關調優參數。

排程

  • 排程架構你有用過嗎?在什麼樣的場景下會需要使用排程架構?quartz的使用?quartz的資料(需要存儲哪些任務job的資料?)存儲有幾種方式?quartz與spring或者spring boot的內建如何實作?cron表達式可知道?Quartz架構如何實作動态改變Cron表達式,來實作動态執行Spring定時任務?
  • 你們的系統是不是微服務形式,或者是分布式部署形式?那分布式情況下的排程如何實作?
  • 開源的分布式排程中心架構,你知道哪些?可看過源碼?

其他

  • SocketTimeOut以及connectionTimeOut的差別?(apache 的http client)

web 開發

HTTP

  • HTTP四種方法?
  • 大緻講解一下 HTTP 協定?
  • HTTPS 和 HTTP 差別,加密算法有哪些?

Nginx

  • 解釋反向代理、正向代理。正向代理和反向代理的差別?
  • Apache和Nginx的差別?
  • 常用的負載均衡算法:ip_hash ,輪詢,weight,fair。
  • 配置動靜分離。

RESTful

  • RESTful API 的了解以及其實作方式?
  • restful http通信與RPC通信的對比?耦合性,通信性能,異構系統的互信各個角度對比。

session & cookie

  • Session與cookie的差別?cookie的作用?cookie存于什麼地方?session的建立以及銷毀時機?session存在什麼地方,能否持久化?session共享是什麼意思?

其他

  • 如何防止表單的重複送出?
  • 如何保證表單的前背景編碼的統一?

資料庫

  • 資料庫的橫表轉縱表,反過來,縱表轉橫表?對橫表和縱表的差別和了解以及使用場景等。
  • 關于資料庫索引,如何設計?
  • Union all operator 和union差別?
  • left join,right join等差別?
  • 資料庫引擎有哪些,差別是什麼?
  • 如何定位一個慢查詢?
  • 資料庫查詢如何建立索引?索引優化?加索引為何能夠提高查詢速度?存儲引擎是什麼?SQL 優化手段有哪些?資料庫的讀寫分離?由此帶來的延遲問題如何解決?什麼情況下會發生索引失效的問題?
  • 給出三張資料庫表,如何聯合查詢?聯合主鍵是什麼?
  • 給出一個查詢語句:​

    ​select like ''​

    ​,能不能對索引進行優化?
  • 資料庫如何進行版本更新?答:兩台IP server,使用内網域名而不是各自的 IP 解耦合,DNS 配置,資料遷移工具,域名指向新的IP。
  • 死鎖是什麼?死鎖的産生條件?如何避免?
  • 樂觀鎖與悲觀鎖?

緩存

說到資料庫,肯定會問你除了CRUD之外,更進一步索引的設計以及優化,進一步分庫分表的實作等,還有哪些問題之類。肯定會提到請求量過大的解決方法,話題就不經意之間轉移到緩存這方面來。又是一個相當大的話題!

大而範之,關于緩存的問題:

  • 緩存的應用場景?寫緩存的時機?
  • 緩存雪崩,緩存失效,緩存穿透,預熱等。

Redis

  • Redis的常用資料結構。
  • Redis的持久化政策,RDB和AOF的使用場景,如何實作持久化的?
  • Redis的釋出訂閱。
  • 列舉Redis的使用場景;除了主要功能緩存之外,還包括session共享,基于Redis的分布式鎖,簡易的消息隊列等。

    Redis的叢集和哨兵機制。

  • Redis實作流量控制?
  • Redis開源用戶端:Jedis,redission……

消息中間件

  • MQ的使用場景?
  • 使用多哪些消息中間件?
  • RabbitMQ?
  • Kafka?

分布式

  • 分布式了解不?鎖并發的了解?分布式鎖的實作方式以及優缺點?Redis分布式鎖如何實作?和資料庫鎖有何差別?
  • 分布式最根本的問題?一緻性
  • CAP和BASE原理。
  • 一緻性雜湊演算法?
  • 分布式,最基本的節點?節點的角色?節點如何實作負載均衡?服務提供者如何實作高可用?
  • 節點之間的傳輸協定是什麼,http/tcp/udp?tcp和udp的差別?
  • RPC架構的性能的關鍵點是什麼?
  • 分布式鍊路跟蹤。Dapper論文,Trace,Span,Annotation,埋點等基本概念的含義?Zipkin,Spring Cloud Slueth?
  • 分布式事務。二階段送出,三階段送出,Paxos,TCC?分布式事務架構?
  • 熔斷與降級的概念和對比?Hystrix可有了解?

資料結構與算法題

  • 100000張試卷,抽取試題,每套試題100道,單套試題不能有重複的題目,兩套試題之間最多有一個試題允許重複,問實作結果的數量級?如何最優化實作?
  • Top k 問題的解決思路?進一步,如果限制記憶體 256M,對一個4G 的文本檔案進行排序,如何實作?你這個方法的時間複雜度是多少?​​參考​​
  • 給定一個字元串,如何實作倒序輸出?輸入字元串,空格切割,反轉單詞組成的字元串?
  • 如何 trim 字元串裡面兩個以上的空格?
  • 時間複雜度和空間複雜度的計算?給定任一算法,分析其複雜度?
  • 給定一個數組,實作這樣的排序:奇數在前,偶數在後;改進算法有沒有?改進時間、空間複雜度等;
  • 已排序數組的給定數字的第一個索引的出現位置?
  • 給定一個表達式,如何校驗其有效性?提示:可以考慮字首、中綴、字尾表達式?逆波蘭啥的?
  • 給定中序周遊和後序周遊,求前序周遊;程式設計算法實作呢?
  • 有環的連結清單,兩個指針,不同步長,問最少需要共同走多少步才能相遇;深入一點,如何判斷一個連結清單有環?程式設計算法實作呢?
  • 連結清單的反轉;
  • 已排序數組求出其中某個數字(出現不止一次,也可以0次;當然考題不會說明得這麼詳細,這是編碼設計時應該要考慮到的)的起始終止索引;
  • 哈夫曼樹;
  • 遞歸實作二項分布;
  • 二叉樹的反轉?
  • 求矩陣的平均值?比如給定一個3*3的二維矩陣,元素值是灰階值0或1,求平均值,如左上角的平均值是周圍四個元素的平均值。
  • 三個連續的整數,其中兩個是質數,證明第三個是6的倍數。​​參考​​
  • 遺傳算法,粒子群算法講講?

編碼題

  • 給出一大串集合操作,将其轉換為 java8 的 stream 流式操作。
  • 取一個給定路徑下面的最大的n個檔案的全路徑名;
  • 實作一個消費者-生産者模型,producer、consumer。
  • SmartPhone,iPhone,Android,Windows Phone,以及由此而生的帶有brand資訊的Phone,怎麼設計?

Linux

  • 平時用Linux多嗎?最基本的Linux指令行可知道?
  • 一個系統通路日志,比如nginx.log,統計通路次數最高的10個IP?
  • 對文本進行排序并取前十個?​

    ​sort xx.txt | tail -n 10​

  • Linux下的IO模型,epoll和poll的差別等;

微服務

  • 微服務定義與概念?設計原則?與SOA的差別是什麼?SOA的設計原則?
  • 服務的注冊中心是什麼?如何實作一個注冊中心?

docker

  • docker的概念?優勢何在?為什麼如此火?如何看待這門新技術(可以作為開放性問題考查)

kubernetes

  • Kubernetes異常狀态有哪些?

論述題

  • 設計一個高并發的搶紅包系統,確定金額的快速即時從A賬戶轉到B1,B2,Bn等?
  • 抛一枚硬币,正面朝上的機率是60%,反面朝上的機率是40%,問如何實作50-50的機率,即抛多少次才能實作?
  • 如何設計秒殺系統?如何設計限時購系統?限時購與秒殺的差別?
  • 購物車設計?鎖庫存如何實作的?如何避免庫存超賣的問題?
  • 系統登入子產品的使用者名/密碼驗證?簡單系統和複雜系統的登入子產品的差別是什麼?SSO知道嗎?LDAP知道嗎?SSO與LDAP的差別是什麼?放在微服務環境下,如何做鑒權?再者,401 和 403的錯誤碼是什麼意思,兩者的差別是什麼?

非技術性問題

  • 怎麼看待加班問題?
  • 給你一個小子產品,你能不能獨立完成實作功能?
  • 講述項目經曆,如何解決一個困難的問題?
  • 看過哪些開源項目?可否講解一下其核心原理?為什麼選擇這個開源項目等?
  • 項目遇到什麼問題?怎麼解決?
  • 近在看什麼書?
  • 業餘時間學習什麼技術?這個技術有沒有反過來用于工作中?
  • 有沒有對産品提出什麼建議或者意見?
  • 如何看待新技術?你知道現在開發領域有哪些新的技術嗎?無論是語言,開發工具,架構,還是踐行方式理念等?