你去面試,需要準備什麼知識點?

Sam同學發表於2017-09-18

概述


年中或者年底績效出來後,總是幾家歡樂幾家愁。績效好的機會多的老闆信任的,會更加有幹勁。績效不好的,老闆不看好的,可能就會有離職的衝動。
如果你有離職的想法,那麼還是需要花一些時間準備一下,畢竟現在外面好的網際網路公司對程式設計師的要求還是蠻高的,需要你有各種能耐。

這篇文章主要是介紹一下我自己從畢業到現在碰到的一些面試題。部分題目給出了答案,部分試題則沒有。


JAVA 基礎

  • int 佔用幾個位元組

    答案:
    4個

  • 不用第三個變數,如何交換兩個變數的值

    public class TestSwitchVar {
      public static void main(String[] args) {
          int a = 1;
          int b = 2;
          a = a + b;
          b = a - b;
          a = a - b;
          System.out.println(a);
          System.out.println(b);
      }
    }複製程式碼
  • JAVA動態代理使用什麼技術實現的

    答案:
    反射

  • JAVA類載入器的原理

    答案:
    學習JAVA類載入器


集合類

  • HashSet的add方法是如何實現的,如何去重的;

    答案:
    HashSet的底層是使用HashMap來實現的,呼叫add方法的時候,底層也是用HashMap的put方法來實現的。HashSet之所以具備去重的能力,也是因為HashMap的put方法中,如果發現key已經存在了,會覆蓋key對應的值,但是對於HashSet來說,還是原來那個key。也就是說Key set並沒有任何變動。

  • HashMap的實現原理;

    答案:
    看我之前寫的HashMap的put和get方法原理HashMap擴容以及HashMap多執行緒下發生死迴圈的原因 這幾篇博文即可。

  • JDK 1.7 ConcurrentHashMap的實現原理

    答案:
    ConcurrentHashMap學習


NIO

描述JAVA NIO的工作原理,相比JAVA IO有什麼優勢

答案:
學習NIO


執行緒和併發

  • sleep方法和wait方法有什麼區別

    答案:
    1、wait方法釋放鎖,sleep方法不釋放鎖
    2、wait方法必須在同步程式碼塊裡,比如synchronize關鍵裡,但是sleep方法沒有這限制

  • wait()方法呼叫後,到底發生了什麼事情

    答案:
    Object wait方法

  • 除了使用synchronized關鍵字之外,還有其他同步的做法嗎

    答案:
    volatile關鍵字
    lock()和unlock()

  • 什麼是daemon 執行緒
  • 如果有多個執行緒要併發操作一個檔案,如何做到執行緒安全,請寫出虛擬碼
  • 什麼是執行緒安全
  • volatile關鍵字有什麼用

    答案:
    淺析volatile關鍵字

  • 悲觀鎖和樂觀鎖的區別

  • 有哪些併發模型,用過哪些併發模型,選擇這些模型有什麼依據(比如說Master-Worker模式)
  • 用過ThreadLocal嗎?什麼場景下用過
  • 執行緒有哪幾種狀態
  • CAS的原理

    答案:
    學習一下CAS

  • 寫一個發生死鎖的JAVA程式碼,並描述一下如何避免死鎖?
  • 執行緒要進入阻塞狀態,作業系統是如何操作的(涉及到使用者態和核心態)
  • 談談如何進行"鎖"的優化
  • 什麼叫可重入鎖

JVM

  • 垃圾回收演算法有哪幾種?各種有什麼特點

    答案:
    JVM專欄

  • 什麼時候觸發young gc,什麼時候觸發full gc

    答案:
    新生代中的Eden滿了就就行young gc,老年代滿了,就進行full gc。

  • 如果JAVA程式突然掛掉了,怎麼檢視掛掉的原因

    答案:
    java程式掛掉後,會產生core dump 檔案,可以使用jstack 命令輸出執行緒堆疊資訊。

  • JVM是怎麼調優的

    答案
    JVM調優-學習篇

  • JVM監控工具有哪些,各有什麼用途,簡單介紹一下用法
  • 描述一下JVM的記憶體模型
  • 怎麼知道是哪行程式碼導致系統CPU高

mysql

什麼是覆蓋索引

答案:
Mysql 索引知識點

  • 什麼情況下,需要建立複合索引

    答案:
    Mysql 索引知識點

  • 索引原理是什麼,底層用什麼資料結構

    答案:
    Mysql B+樹學習

  • 應用的資料庫是如何做容災的

  • 如何做到動態增加業務欄位,而程式碼無需改動
  • 行鎖和表鎖的區別,innodb引擎用的是哪種鎖
  • innodb myisam的區別

    答案:
    Mysql 索引知識點

  • mysql批量插入資料的時候,怎麼優化

  • 你參與的專案,有做分庫處理嗎,路由到分庫的規則是什麼?

nosql

用過哪些NoSQL資料庫,簡單介紹一下


快取

  • memcache的原理
  • memcache和redis的區別
  • 系統有用本地快取嗎?是如何做命中率的統計的
  • 選擇堆外快取和堆內快取的依據是什麼
  • 從堆外快取獲取資料需要反序列化,有辦法避免嗎?說一下思路即可

演算法

  • 一致性hash演算法的原理
  • 使用JAVA實現快速排序
  • 使用JAVA實現二分查詢
  • 使用JAVA進行二叉樹的遍歷(前序/中序/後序,寫一種即可)
  • 紅黑樹的原理

HTTP

如何用JAVA程式碼解析一個HTTP請求,描述一下實現的思路
HTTP 1.0 HTTP1.1 HTTP 2.0的區別

答案:
HTTP1.0 HTTP 1.1 HTTP 2.0主要區別


架構設計

  • 系統是如何容災的
  • 系統的快取設計是怎麼做的
  • 如何做防雪崩
  • 描述一下限流的具體方案或者演算法

linux

  • shell用什麼命令檢視硬碟和記憶體的使用情況
  • shell指令碼用什麼變數來接收引數

Spring

  • Spring IOC 的原理
  • Spring 載入bean生命週期

    答案:
    Spring中的bean的生命週期,如果從細節上來講,是非常複雜的,從粗粒度上來講就是:
    1、呼叫構造方法建立物件;
    2、呼叫物件的set方法設定屬性值;
    3、可以使用Spring提供的一些介面,可以在bean set方法呼叫完後,做些處理工作或者注入一些自定義的程式碼實現;
    4、整個bean初始完後,所有的依賴物件注入後,如果想做一些初始化工作,可以利用@PostConstruct等一些註解
    5、銷燬bean之前做一些處理工作
    6、銷燬bean

  • Spring AOP的實現原理

  • Spring使用了哪些設計模式
  • cglib和動態代理有什麼區別
  • cglib和動態代理哪個效率高
  • spring bean 的scope有哪幾種

設計模式

請寫出一個高效能執行緒安全的單例出來

public class Singleton
{
    private static Singleton singleton = null;
    private Singleton()  {    }
    public static Singleton getInstance()   {
        if (singleton != null)  {
           return singleton;
        }

        synchronized (Singleton.class) {
                if (singleton== null)  {
                    singleton= new Singleton();
                }
        }
    }
}複製程式碼

描述一下模板設計模式


微服務

  • 什麼是微服務
  • 描述一下你用過的微服務框架的原理
  • 微服務使用什麼技術進行資料序列化和反序列化的
  • 瞭解thift嗎?請解釋一下thift的原理
  • 微服務的服務治理是怎麼做的
  • 微服務有什麼優缺點

MQ

  • rabbitMQ和kafka的區別
  • rabbitMQ的實現機制
  • 如何保證訊息有序
  • 如何防止訊息丟失

網路

  • TCP/IP 三次握手的過程
  • Netty(關於netty,請參看Netty專欄)

其他

  • 系統遇到過什麼難題,怎麼解決的
  • 最有成就感的一件事情是什麼

原文連結


你去面試,需要準備什麼知識點?

相關文章