1. 程式人生 > 實用技巧 >2020/12/08背題筆記

2020/12/08背題筆記

反射怎麼建立物件,構造器裡的引數是什麼?

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;

/**
 * @Author:Frank
 * @Date:2020/12/8 15:38
 */
public class Reject {
    public static void main(String[] args) {
        try {
            Class tree=Class.forName("TreeNode");
            Constructor constructor=tree.getConstructor(new Class[]{int.class});
            //Constructor []constructors=tree.getConstructors();
            Object arr[]=new Object[]{1,2};
            //TreeNode s=(TreeNode) constructor.newInstance(123);
            Method go=tree.getMethod("go",new Class[]{int.class,int.class});
            System.out.println(go.invoke(constructor.newInstance(123),arr));
            //System.out.println(go.invoke(null,arr));

        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

  1. Class.forName或者TreeNode.class獲取class

  2. 獲取建構函式,可以指定引數獲取哪個建構函式,或者可以直接陣列全都獲取

  3. 如果要建立物件,直接newInstance,構造器傳入建構函式的引數

  4. 如果只是想用方法,定義一個Method傳入想要獲取函式的引數來指定獲取的方法

  5. 通過invoke來實現方法,如果是靜態方法,傳入null,如果傳入多個引數,需要以Object陣列的形式傳入

執行緒池引數有哪些,拒絕策略講一下?

  • 執行緒池七大引數

    • 核心執行緒數

    • 最大執行緒數

    • 空閒執行緒等待時間

    • 空閒執行緒等待時間的單位

    • 阻塞佇列

    • 拒絕策略

    • 建立執行緒的工廠

  • 拒絕策略

    • 丟棄任務丟擲異常
    • 丟棄任務不丟擲異常
    • 丟掉佇列最前面的任務,然後再提交一次任務
    • 由提交任務的執行緒處理該任務

spring事務傳播機制

  • 支援當前事務的

    • required----當前存在事務則加入,不存在建立一個
    • supports----當前存在事務則加入,不存在那就非事務放hi執行
    • mandatory----存在事務則加入,不存在那就報錯
  • 不支援當前事務的

    • required_news----建立一個新事務----如果當前存在事務則掛起
    • not_supported----以非事務方式執行----如果當前存在事務則掛起
    • never----以非實物方式執行-----如果當前存在事務報錯
  • 其他情況

    • nested----如果當前存在事務,則建立一個新事務作為當前事務的巢狀事務執行,否則和requird等價

資料庫索引的底層原理,B樹和B+樹有什麼區別

  • B樹,資料不下沉也儲存資料,會導致索引儲存量下降
  • b+樹,資料存在葉子節點,並且還有底層連結串列存在

那你是認為b樹不適合作為索引麼?(面試官:其實這兩個都作為索引,只不過各有優點的)

  • 大坑!面試的時候不要把b樹噴得一無是處,mongodb用的是b樹
  • b樹內,每個節點都儲存資料,因此在查詢單條資料的時候,有可能o(1)就查到,也有可能會更高,所以做單一資料查詢時,b樹平均效能更好,但是不適合做資料遍歷操作
  • b+樹,資料出現在葉子節點上,查詢比較穩定,單一資料查詢平均效能不如b樹,但是資料便利又優點,葉子節點有指標相連,這個特性使得b+樹非常適合做範圍查詢
  • 所以沒準是Mysql資料遍歷操作比較多,所以用b+,monnodb單一查詢過多,用b

hashmap的hashcode為什麼一定要重寫?

  • 可以理解為hashcode是在定位元素應該分配給陣列的哪個下標裡,如果不重寫,那麼預設hashcode是記憶體地址的id,業務上認為相等,但是地址不等

那為什麼equals也要重寫?

  • 如果不重寫,那麼equals就是預設的==,進行地址的判斷,那麼必定不是業務上的同一個物件,所以也要重寫

inputstream/reader的區別

inputstream是位元組流byte,reader是字元流,所以inputstream傳輸中文可能亂碼,但是reader可能不會

位元組和字元的區別是什麼?

位元組通常用來描述大小的,可以理解為byte,而字元,通常我們稱為一個char字元,一個int字元這種,他們分別佔2個位元組,4個位元組大小

MD5是對稱加密,還是非對稱加密?

兩者都不是,MD5無法解密,根本談不上對稱和非對稱

程序間通訊的方式

  • 管道(半雙工,如果需要雙方通訊,需要建立兩個管道)
  • 有名管道
  • 共享記憶體(需要自定義)
  • 訊號
  • 訊號量
  • 訊息佇列
  • 套接字

執行緒間通訊的方式

  • 鎖機制:互斥鎖,條件變數,讀寫鎖
  • 訊號量機制Semaphore
  • 訊號機制Signal

list和set區別

  • list不允許重複元素的存在,set允許重複元素存在,list是有序集合保持插入順序,set是無序集合,list可以通過下標訪問,set不能

解決雜湊衝突的常用方法

  • 開放定址法(線性探測)
  • 鏈地址法(拉鍊法)
  • 再雜湊法(衝突就再hash一遍)
  • 建立公共溢位區