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

概述html


年中或者年末績效出來後,老是幾家歡樂幾家愁。績效好的機會多的老闆信任的,會更加有幹勁。績效很差的,老闆不看好的,可能就會有離職的衝動。
若是你有離職的想法,那麼仍是須要花一些時間準備一下,畢竟如今外面好的互聯網公司對程序員的要求仍是蠻高的,須要你有各類能耐。java

這篇文章主要是介紹一下我本身從畢業到如今碰到的一些面試題。部分題目給出了答案,部分試題則沒有。mysql


JAVA 基礎

  • int 佔用幾個字節linux

    答案:
    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動態代理使用什麼技術實現的redis

    答案:
    反射算法

  • JAVA類加載器的原理spring

    答案:
    學習JAVA類加載器sql


集合類

  • 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方法有什麼區別

    答案:
    一、wait方法釋放鎖,sleep方法不釋放鎖
    二、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的生命週期,若是從細節上來說,是很是複雜的,從粗粒度上來說就是:
    一、調用構造方法建立對象;
    二、調用對象的set方法設置屬性值;
    三、可使用Spring提供的一些接口,能夠在bean set方法調用完後,作些處理工做或者注入一些自定義的代碼實現;
    四、整個bean初始完後,全部的依賴對象注入後,若是想作一些初始化工做,能夠利用@PostConstruct等一些註解
    五、銷燬bean以前作一些處理工做
    六、銷燬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專欄)

其餘

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

原文連接


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

相關文章
相關標籤/搜索