1. 程式人生 > >一個多月的面試總結,幾乎涵蓋了面試可能會遇到的所有問題

一個多月的面試總結,幾乎涵蓋了面試可能會遇到的所有問題

  經過了為期近一個月面試,面試了20多家公司,剛開始有選擇的投遞簡歷,面試機會少,而且準備不充分,前三個禮拜只面了8家左右,浪費了很多時間,第四個禮拜面了12家,每次面完及時總結,到最後面試官問的題目在之前的公司都問過,筆試的題目大部分類似。終於在第5周,絕地逢生,最終拿到了14K的offer。

1. java基礎

1.1 Object中有哪些方法?

Object中一共有11個基本方法。如下:
HashCode(),equals() 用來判斷物件是否相同
toString(),getClass()前者返回一個String物件,標識自己,後者返回一個Class物件
clone()

用於克隆物件
finalize()用於垃圾回收
wait(),wait(long),wait(long,int),notify(),notifyAll()這幾個方法用於多執行緒,wait讓執行緒進入等待,notify用於喚醒執行緒,notifyAll用於喚醒所有等待的執行緒

1.1 String a=”abc”;String b=”abc”;String c=”ab”+”c”;String d = new String (“abc”);a,b,c,d兩兩用==比較大小的值是

a==b==c均為true,d與另外三個均不相等

1.1 程式碼塊,靜態程式碼塊,建構函式,父類靜態程式碼塊,父類構造程式碼塊的執行順序?

先靜,先父後子:父靜態程式碼塊–>子靜態程式碼塊–>父構造程式碼塊–>父構造方法–>子構造程式碼塊–>子構造方法

1.2 介面和抽象類的區別?

  1. 抽象類可以提供成員方法的實現細節,而介面中只能存在public abstract方法(jdk8接口裡可以有預設方法和靜態方法)
  2. 抽象類中的成員變數可以是各種型別的,而介面中的成員變數只能是public static final型別的
  3. 介面中不能有靜態程式碼塊,抽象類可以有
  4. 抽象類只能單繼承,介面可以多繼承,多實現。
  5. (設計層面)抽象類是對類抽象,可以有很多子類,是一種模板式設計,介面是一種行為規範,是一種輻射式設計

1.3 Exception和error有什麼區別,常見的異常有哪些?

  • error(受檢異常)是系統錯誤,是由虛擬機器丟擲的,一旦發生只能不能捕獲,只能終止程式,常見的有OutOfMemoryError(記憶體溢位),StackOverflowError(堆疊溢位),UnknownError(未知錯誤),UnsupportedClassVersionError(不支援的版本型別錯誤)
  • Exception是異常,包括執行時異常(受檢異常)和非執行時異常。
    • 常見的執行時異常有:
      • ArithmeticExecption 算術異常(如除數為0)
      • ClassCastException 型別轉換異常
      • ArrayIndexOutOfBoundsException 索引越界異常
      • FileNotFoundException 檔案找不到異常
      • SQLException 資料庫異常
      • NoSuchMethodException 方法找不到異常
      • NullPointerException 空指標異常
      • EOFException 檔案已結束異常

1.4 jdk中常用的包有哪些?看過lang包下所有類的原始碼沒?

  • java.io 包含多種輸入和輸出功能的類
  • java.lang 包含java語言的核心類,如String,Math,Integer,System
  • java.math 數字包 BigDecimal,BigInteger
  • java.reflect
  • java.annoatation 註解類 Annoation,Target
  • java.util 實用工具包 日期(Date,Calendar),資料結構(LinkedList,HashMap),隨機數類Random
  • java.util.concurrent 主要類Executors,Future,Callable

1.5 private,public,void,protect的區別?

1.6 list介面下有哪些集合,不安全的,安全的?

1.7 set下有哪些集合,怎麼保證元素唯一?

1.8 LinkedArrayList和ArrayList的區別?ArrayList擴容?

1.9 HashMap和HashTable的區別?

1.10 HashMap中put方法的原理?hash值衝突瞭如何處理?HashMap的底層結構?

1.11 ArrayList、HashMap怎麼實現排序?

1.12 克隆的方式有幾種,深克隆的原理是什麼?

如果一個物件要實現克隆必須實現Clonable介面,並重寫clone方法,克隆只要有兩種:淺克隆和深克隆

1.13 集合ArrayList,HashMap怎麼保證執行緒安全?

1.14 jdk8和jdk6的區別?

1.15 @Service可以被繼承嗎?

1.16 遍歷d盤下所有資料夾中的檔案?(筆試)

//獲取指定目錄以及子目錄中的所有的檔案
public static void getFileAll(File file) {
    File[] files = file.listFiles();
    //遍歷當前目錄下的所有檔案和資料夾
    if(files!=null) {
        for (File f : files) {
            //判斷當前遍歷到的是否為目錄
            if(f.isDirectory()){
                //是目錄,繼續獲取這個目錄下的所有檔案和資料夾
                getFileAll(f);
            }else{
                //不是目錄,說明當前f就是檔案,那麼就打印出來
                System.out.println(f);
            }
        }
    }

}

1.17 寫一個氣泡排序演算法?(筆試)

public static void bubblesort(int[] arr) {
    for (int i = 0; i < arr.length-1; i++) {
        for (int j = 0; j < arr.length-1-i; j++) {
            if(arr[j]>arr[j+1]) {
                int temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1]=temp;
            }
        }
    }
}

1.18 隨機產生10個1-10的隨機數,放入ArrayList中,將大於5的數移除,列印ArrayList(筆試)

public static void main(String[] args) {
    ArrayList<Object> list = new ArrayList<>();

    for (int i = 0; i < 10; i++) {
        int a = (int)(Math.random()*10);
           Random ran = new Random();   
           int b = ran.nextInt(10)+1;
        list.add(b);
    }

    System.out.println(list);
    Iterator<Object> it = list.iterator();
    while(it.hasNext()) {
        int b = (int) it.next();
        if(b>5) {
            it.remove();
        }
    }
    System.out.println(list);
}

注意:一定要用迭代器遍歷

1.19 找出abdegdsasesww中出現次數最少的字母,最少字母首次出現的前一個字母(筆試)

2. 設計模式

2.1你在實際開發中用過哪些設計模式?

2.2 畫一單例模式,說說你對單例模式的理解?懶漢式和餓漢式有什麼區別?

2.3 說說裝飾者模式,哪些地方用到了,畫一個結構圖?

2.4 什麼是代理模式?

3. 多執行緒

3.1 執行緒的實現方式?

1.繼承thread
2.實現runnable介面
3.實現callable介面 :

Callable<Object> callable = new Thread3();
FutureTask<Object> task = new FutureTask<Object>(callable);
Thread th3 = new Thread(task);
th3.start();

3.2 啟動執行緒用start還是run,他們的區別是?

3.3 執行緒池的介面,常用的執行緒池有哪些?

java提供Excutor介面來執行執行緒池中的任務,提供ExecutorService介面來管理和控制事物。ExecutorService是Executor的子介面。
常見執行緒池有4種。分別如下:
1. newCachedThreadPool
2. newFixedThreadPool
3. newSingleThreadPool
4. newScheduledThreadPool

3.4 sevlet怎麼保證執行緒安全?

3.5 synchronized(this)什麼意思,synchronized(this.class)呢?

3.6 執行緒的狀態有哪些,阻塞是怎麼產生的,sleep和wait有什麼區別,notify和notifyAll有什麼區別,notifyAll喚醒兩個執行緒,兩個執行緒是怎麼執行的

3.7 執行緒A負責擲骰子,執行緒B負責列印,當出現連續三個6時,退出執行緒A和執行緒B(上機題)

4. web基礎

4.1 從輸入網址到開啟頁面經歷了什麼?

4.2 http和tcp的區別?

4.3 三次握手是怎麼進行的?

4.4 sevlet的生命週期?

4.5 sevlet有哪些子類?jsp和servlet的區別?

4.6 session和cookie的區別?

4.7 http請求是無狀態的,怎麼保護使用者的狀態

4.8 shiro怎麼實現許可權管理?

4.9 tomcat怎麼調優,怎麼修改記憶體?

5. 五大框架

5.1 說說spring,springmvc,struts的區別?

5.2 說說你對spring的理解?

5.3 IOC的底層原理是什麼?怎麼實現反射的?

5.4 使用spring的好處是什麼?工廠模式不行嗎?

5.5 spring的註解有哪些?

5.6 springMVC的執行流程?

5.7 springMVC的常用註解有哪些?

5.8 你怎麼理解aop,如何使用它的?

5.9 spring是怎麼管理事務的,事務的傳播機制有哪些?

5.10 struts的執行流程?

5.11 struts的漏洞是什麼?怎麼解決?

5.12 mybatis #和$的區別?

6. 資料庫

6.1 mysql和oracle的區別?

  • 1.Oracle是大型資料庫而Mysql是中小型資料庫,Oracle是收費的,mysql是開源的;
  • 2.安裝所有的空間差別很大,Mysql安裝後佔用空間很小,而Oracle很大,上G,使用時Oracle佔用的記憶體空間也大;
  • 3.Mysql支援主鍵自增長,而Oracle沒有,Oracle只能使用序列
  • 4.分頁處理,Oracle通過rownum ,Mysql使用limit
  • 5.欄位型別不同,Oracle的欄位型別沒有mysql多,並且有很多不同
  • 6.一致性:oracle支援serializable的隔離級別,可以實現最高級別的一致性。mysql是read commited的隔離級別
  • 7.事務,oracle完全支援事務,mysql在innodb儲存引擎的行級鎖的情況下才支援事務;oracle預設不自動提交,mysql預設是自動提交的

6.2 oracle怎麼進行資料備份?

6.3 索引的原理什麼?索引是怎麼進行查詢的?用過聯合索引沒?

6.4 畫一個B+樹,B+樹和二叉樹有什麼區別?

6.5 mysql怎麼進行優化?

6.6 mysql的innodb和MyISAM引擎有什麼區別?

6.7 oracle怎麼進行分表?

6.8 oracle如何做定時任務?用過包沒?

6.9 一個表裡有過億資料,怎麼優化可以使查詢更快?、、

6.10 事務的特性?

原子性,一致性,隔離性,永續性

6.11 redis有哪些資料型別,持久化方式?

  • 資料型別如下:
    • 字串型別–String:
    • 雜湊型別–hash:
    • 列表型別–list:
    • 集合型別–set:
    • 有序集合型別–sortedset:
  • 持久化方式:
    • 1 rdb(快照方式) :預設開啟
      bin/redis.conf 查save
      • 儲存策略:
        • after 900 sec (15 min) if at least 1 key changed
        • after 300 sec (5 min) if at least 10 keys changed
        • after 60 sec if at least 10000 keys changed
      • 2 aof(配置檔案命令方式):預設不開啟
      • 若要開啟,必須修改配置檔案bin/redis.conf 搜appendonly
        appendonly yes
      • 儲存策略:
        • appendfsync always 每次都寫入
        • appendfsync everysec 每秒寫入
        • appendfsync no 不寫入

7. 分散式與併發

7.1 你們是怎麼處理高併發的?

可以從以下幾個方面入手:

  • 1.優化資料庫:
    • 叢集(主備,讀寫分離)
    • 開啟索引
    • 開啟快取(記憶體)
    • sql語句優化
  • 2.reids快取: 減輕資料庫壓力,提供查詢效率
  • 3.使用solr搜尋: 減輕資料庫壓力,提高檢索效率(檢索索引)
  • 4.面向服務分散式架構 SOA : 分擔伺服器壓力,提高專案併發能力,提高專案效率
  • 5.activeMQ訊息中介軟體(服務和服務之間非同步通訊): 流量削峰,任務非同步處理
  • 6.fastDFS 分散式檔案系統 ,儲存圖片 ,提高圖片訪問效率
  • 7.頁面靜態化技術: 提高訪問速度,提高併發能力
  • 8.nginx負載均衡優化 : 提高專案併發能力,提高專案訪問速度

7.2 nginx怎麼做負載均衡?

nginx負載均衡有以下幾種方式:

  • 1.輪詢(預設) :每個請求按時間順序逐一分配到不同的後端伺服器2,如果後端伺服器down掉,能自動剔除
  • 2.weight : 指定輪詢的機率,weight和訪問比率成正比,用於後端伺服器效能不均的情況,權重越高,被訪問的概率越大
  • 3.ip_hash : 每個請求按ip的hash結果分配,這樣每個訪客固定訪問一個後端伺服器,可以解決session問題
  • 4.fair(第三方): 按後端伺服器的響應時間來分配,響應時間短的優先分配
  • 5.url_hash(第三方) : 按訪問url的hash結果來分配請求,使每個url定向到同一個後端伺服器,後端伺服器為快取時比較有效

7.3 tomcat部署叢集,session是怎麼處理的?

7.4 dubbo是怎麼釋出服務,接收服務的?

7.5 mq的應用場景有哪些?哪些地方用到了?

7.6 solr怎麼做高亮?

7.7 dubbo協議有哪些?dubbo是怎麼傳輸資料的?

  • dubbo協議
  • rmi協議
  • hessian協議
  • http協議
  • webservice協議
  • thrift協議
  • memcached協議
  • redis協議

7.8 註冊中心除了zookeeper還有哪些?

  • zookeeper(推薦)
  • Multicast
  • Redis
  • Simple

7.9 單點登入是怎麼實現的?瞭解cas嗎?

8. 前端

8.1 閉包是什麼?

8.2 ajax怎麼在請求頭加一個自己的字串?

8.3 給網頁內所有元素增加1px邊框

8.4 怎麼獲取一個表格第三行,第二個td?table是動態生成的?

8.5 怎麼修改表單提交的地址?

8.6 js繼承怎麼用的?

9. linux操作與專案管理

9.1 svn怎麼處理衝突?

9.2 linux cpu滿了怎麼處理?

9.3 linux 常用命令有哪些?怎麼檢視tomcat日誌?

10. java虛擬機器

10.1 OutOfMemory的產生原因有哪些?怎麼解決的?

10.2 虛引用,弱引用,軟引用,強引用的區別?

10.3 說說你對常量池的理解?

10.4 執行時區域哪一個區域不會產生OutOfMemory?