Mar9th 海尔java面试
Mar9th 海爾java面試
- java基本數(shù)據(jù)類型
- 抽象類和接口的區(qū)別
- HashMap擴(kuò)容機(jī)制
- 什么時(shí)候觸發(fā)擴(kuò)容?
- jdk7的擴(kuò)容機(jī)制
- jdk8的擴(kuò)容機(jī)制
- ArrayList,LinkedList
- Innodb表鎖,行鎖
- Mysql隔離級(jí)別
- B+樹,索引類型
- IOC AOP
java基本數(shù)據(jù)類型
int short long double float boolean char byte
public class Learn1 {static double d;static long l;static float f;static int i;static short s;static char c;static byte b;static boolean bool;public static void main(String[] args) {//8字節(jié)System.out.println(Double.SIZE / 8);//8字節(jié)System.out.println(Long.SIZE / 8);//4字節(jié)System.out.println(Float.SIZE / 8);//4字節(jié)System.out.println(Integer.SIZE / 8);//2字節(jié)System.out.println(Short.SIZE / 8);//2字節(jié)System.out.println(Character.SIZE / 8);//1字節(jié)System.out.println(Byte.SIZE / 8);//1比特System.out.println(Boolean.FALSE);//0.0System.out.println(d);//0LSystem.out.println(l);//0.0fSystem.out.println(f);//0System.out.println(i);//0System.out.println(s);//""System.out.println(c);//0System.out.println(b);//falseSystem.out.println(bool);} }抽象類和接口的區(qū)別
抽象類可以有構(gòu)造方法,接口中不能有構(gòu)造方法。
抽象類中可以有普通成員變量,接口中沒有普通成員變量
抽象類中可以包含非抽象的普通方法,接口中的所有方法必須都是抽象的,不能有非抽象的普通方法。
抽象類中的抽象方法的訪問類型可以是public,protected和默認(rèn)類型,但接口中的抽象方法只能是public類型的,并且默認(rèn)即為public abstract類型。
抽象類中可以包含靜態(tài)方法,接口中不能包含靜態(tài)方法
抽象類和接口中都可以包含靜態(tài)成員變量,抽象類中的靜態(tài)成員變量的訪問類型可以任意,但接口中定義的變量只能是public static final類型,并且默認(rèn)即為public static final類型。
一個(gè)類可以實(shí)現(xiàn)多個(gè)接口,但只能繼承一個(gè)抽象類。
HashMap擴(kuò)容機(jī)制
- capacity 即(數(shù)組大小)容量,默認(rèn)16。
- loadFactor 加載因子,默認(rèn)是0.75
- threshold 閾值。閾值=容量*加載因子。默認(rèn)12。當(dāng)元素?cái)?shù)量超過閾值時(shí)便會(huì)觸發(fā)擴(kuò)容。
什么時(shí)候觸發(fā)擴(kuò)容?
一般情況下,當(dāng)元素?cái)?shù)量超過閾值時(shí)便會(huì)觸發(fā)擴(kuò)容。每次擴(kuò)容的容量都是之前容量的2倍。
HashMap的容量是有上限的,必須小于1<<30,即1073741824。如果容量超出了這個(gè)數(shù),則不再增長,且閾值會(huì)被設(shè)置為Integer.MAX_VALUE,即永遠(yuǎn)不會(huì)超出閾值了。
jdk7的擴(kuò)容機(jī)制
JDK7的擴(kuò)容機(jī)制相對(duì)簡單,有以下特性:
- 空參數(shù)的構(gòu)造函數(shù):以默認(rèn)容量、默認(rèn)負(fù)載因子、默認(rèn)閾值初始化數(shù)組。內(nèi)部數(shù)組是空數(shù)組。
- 有參構(gòu)造函數(shù):根據(jù)參數(shù)確定容量、負(fù)載因子、閾值等。
- 第一次put時(shí)會(huì)初始化數(shù)組,其容量變?yōu)椴恍∮谥付ㄈ萘康?的冪數(shù)。然后根據(jù)負(fù)載因子確定閾值。
- 如果不是第一次擴(kuò)容,則 新容量=舊容量*2, 新閾值=新容量*加載因子 。
jdk8的擴(kuò)容機(jī)制
JDK8的擴(kuò)容做了許多調(diào)整。
HashMap的容量變化通常存在以下幾種情況:
- 空參數(shù)的構(gòu)造函數(shù):實(shí)例化的HashMap默認(rèn)內(nèi)部數(shù)組是null,即沒有實(shí)例化。第一次調(diào)用put方法時(shí),則會(huì)開始第一次初始化擴(kuò)容,長度為16。
- 有參構(gòu)造函數(shù):用于指定容量。會(huì)根據(jù)指定的正整數(shù)找到不小于指定容量的2的冪數(shù),將這個(gè)數(shù)設(shè)置賦值給閾值(threshold)。第一次調(diào)用put方法時(shí),會(huì)將閾值賦值給容量,然后讓 閾值=負(fù)載因子*容量 。(因此并不是我們手動(dòng)指定了容量就一定不會(huì)觸發(fā)擴(kuò)容,超過閾值后一樣會(huì)擴(kuò)容!!)
- 如果不是第一次擴(kuò)容,則容量變?yōu)樵瓉淼?倍,閾值也變?yōu)樵瓉淼?倍。(容量和閾值都變?yōu)樵瓉淼?倍時(shí),負(fù)載因子還是不變)
此外還有幾個(gè)細(xì)節(jié)需要注意:
首次put時(shí),先會(huì)觸發(fā)擴(kuò)容(算是初始化),然后存入數(shù)據(jù),然后判斷是否需要擴(kuò)容;
不是首次put,則不再初始化,直接存入數(shù)據(jù),然后判斷是否需要擴(kuò)容;
ArrayList,LinkedList
頻繁刪除用linkedlist
Innodb表鎖,行鎖
Mysql隔離級(jí)別
未提交讀(Read uncommitted)
已提交度(Read committed)
可重復(fù)讀(Repeatable read)
可序列化(Serializable)
B+樹,索引類型
IOC AOP
總結(jié)
以上是生活随笔為你收集整理的Mar9th 海尔java面试的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于SimpleDateFormat时间
- 下一篇: hibernate状态转换关系图【原】