Java面試題整理

線程生命週期html


一、新建狀態(New):新建立了一個線程對象。 java

二、就緒狀態(Runnable):線程對象建立後,其餘線程調用了該對象的start()方法。該狀態的線程位於可運行線程池中,變得可運行,等待獲取CPU的使用權。算法

三、運行狀態(Running):就緒狀態的線程獲取了CPU,執行程序代碼。 spring

四、阻塞狀態(Blocked):阻塞狀態是線程由於某種緣由放棄CPU使用權,暫時中止運行。直到線程進入就緒狀態,纔有機會轉到運行狀態。阻塞的狀況分三種: sql

(一)、等待阻塞:運行的線程執行wait()方法,JVM會把該線程放入等待池中。(wait會釋放持有的鎖) 數據庫

(二)、同步阻塞:運行的線程在獲取對象的同步鎖時,若該同步鎖被別的線程佔用,則JVM會把該線程放入鎖池中。 設計模式

(三)、其餘阻塞:運行的線程執行sleep()或join()方法,或者發出了I/O請求時,JVM會把該線程置爲阻塞狀態。當sleep()狀態超時、join()等待線程終止或者超時、或者I/O處理完畢時,線程從新轉入就緒狀態。(注意,sleep是不會釋放持有的鎖) 五、死亡狀態(Dead):線程執行完了或者因異常退出了run()方法,該線程結束生命週期。 數組

wait()釋放鎖,sleep()不釋放鎖安全

Java有沒有goto?有,是個關鍵字,沒啓用
bash

&;和&&的區別? 按位與 ;邏輯與

Math.round(),四捨五入,無論正數負數,想象有1個橫軸,只要恰好一半或者過半就等於右邊那個數

switch 是否能做用在byte 上,是否能做用在long 上,是否能做用在String上?

能做用在char,byte,short,int 及其對應的包裝類型,還有String,enum

數組有沒有length()方法?String有沒有length()方法?數組有length屬性,String有方法

兩個對象值相同(x.equals(y) == true),但卻可有不一樣的hash code,這句話對不對?

不對,要看equals()是否被重寫

當一個對象被看成參數傳遞到一個方法後,此方法可改變這個對象的屬性,並可返回變化後的結果,那麼這裏究竟是值傳遞仍是引用傳遞?

值傳遞,這個值就是對象的地址

String和StringBuilder、StringBuffer的區別?

String:適用於少許的字符串操做的狀況   StringBuilder:適用於單線程下在字符緩衝區進行大量操做的狀況    StringBuffer:適用多線程下在字符緩衝區進行大量操做的狀況 StringBuilder線程不安全是由於它有不少方法沒有使用synchronized關鍵字

描述一下JVM加載class文件的原理機制?

1.裝載:查找和導入class文件;

2.鏈接:

(1)檢查:檢查載入的class文件數據的正確性;

(2)準備:爲類的靜態變量分配存儲空間;

(3)解析:將符號引用轉換成直接引用(這一步是可選的)

3.初始化:初始化靜態變量,靜態代碼塊。

char 型變量中能不能存貯一箇中文漢字,爲何?

char標識的變量就是用來表示unicode編碼的字符的,unicode表示的字符佔2個字節,因此char也是2個字節,0~65535,unicode編碼的字符是包含部分文字的

靜態嵌套類(Static Nested Class)和內部類(Inner Class)的不一樣?

Static Nested Class是被聲明爲靜態(static)的內部類,它能夠不依賴於外部類實例被實例化。而一般的內部類須要在外部類實例化後才能實例化

Java 中會存在內存泄漏嗎,請簡單描述

內存泄漏指對象再也不使用,可是引用一直存在致使GC沒有回收的狀況,不是內存溢出

1.對象再也不使用,引用還在,沒有置爲null

2.經過外部類實例化內部類後,外部類再也不使用,內部類仍然使用,由於內部類實例依賴外部類而存在,因此外部類實例不會被釋放

3.HashSet添加的對象s,若是這個對象參與hash計算的一些值被改變,contains(s)將會返回null,也刪除不了

抽象的(abstract)方法 是否可同時是 靜態的(static),是否可同時是 本地方法(native),是否可同時被 synchronized修飾?

答:都不能。
抽象方法須要子類重寫,而靜態的方法是沒法被重寫的,所以兩者是矛盾的。
本地方法是由本地代碼(如C代碼)實現的方法,而抽象方法是沒有實現的,也是矛盾的。
synchronized和方法的實現細節有關,抽象方法不涉及實現細節,所以也是相互矛盾的

如何實現對象克隆?

1.淺拷貝,拷貝當前對象,不拷貝引用 當前對象及其引用對象實現Cloneable,重寫Object的clone()方法(調用super.clone())

2.深拷貝,連同引用的對象一塊兒拷貝

a.當前對象及其引用對象實現Cloneable,重寫Object的clone()方法(調用super.clone()),在當前對象的clone()方法中調用引用對象的clone()方法,嵌套調用

b.當前對象及其引用對象實現Serializable,串行化,先將對象以流的形式輸出,再讀取

String s = new String("xyz");建立了幾個字符串對象?

2個,過程爲先去String池看看有沒有,有的話後續只new一個對象在堆空間,返回引用,若是沒有,則先在String池建立1個對象,再去堆new一個對象

這篇講得賊清楚 https://www.cnblogs.com/dangzhenjiuhao/p/4585389.html

抽象類是否可繼承具體類(concrete class)?能夠

內部類沒法改變外部類的值,儘管操做看起來像改變了

static int a=5;
int b=6;
public void ain() {
   Test t=new Test();
   t.test(new AccChkResultDao() {
      @Override
      public int insert(AccChkResult entity) {
         a=6;
         return 0;
      }
   });
}
public static void main(String[] args) {
   System.out.println(a);//結果爲5
}複製代碼

內部類能夠引用它的包含類(外部類)的成員嗎?有沒有什麼限制?

1.靜態內部類 只能訪問外部類靜態成員

2.成員內部類 可訪問外部類全部成員

3.局部內部類(定義在方法中) 外部類成員隨便訪問,局部變量要求必須被final修飾纔可訪問

4.匿名內部類 局部內部類的簡寫形式

Java 中的final關鍵字有哪些用法?

1.修飾變量 2.修飾方法的參數 3.修飾方法或類,不能被重寫或被繼承

怎樣將GB2312編碼的字符串轉換爲ISO-8859-1編碼的字符串?

eg: String s1 = "你好"; String s2 = new String(s1.getBytes("GB2312"), "ISO-8859-1");

System.currentTimeMillis()的值是什麼意思?

在java中是最經常使用的獲取系統時間的方法,它返回的是1970年1月1日0點到如今通過的毫秒數

何時用斷言(assert)?

開發調試時;assert(a > 0); // throws an AssertionError if a <= 0 ,須要在VM options中填寫 -ea 才能啓用

try{}裏有一個return語句,那麼緊跟在這個try後的finally{}裏的代碼會不會被執行,何時被執行,在return前仍是後?

先執行finally再返回,若是finally中有return,則會返回finally中return的結果

List、Set、Map是否繼承自Collection接口?

List和Set是,Map是和Collection同等地位



Collection和Collections的區別?

Collection是接口,Collections是操做集合的工具類

List、Map、Set三個接口存取元素時,各有什麼特色?

1.List按索引添加 2.Map按鍵值對添加 3.Set添加元素方式也是add(),能夠add()重複值,可是存儲不進去(Collection家族都是add(e),Map家族都是put(k,v))

TreeMap和TreeSet在排序時如何比較元素?Collections工具類中的sort()方法如何比較元素?

兩個集合在添加元素後都會排序 1.TreeSet要求存放的對象所屬的類必須實現Comparable接口,進而實現compareTo(E e),當插入元素時會回調該方法比較元素的大小。 2.TreeMap要求存放的鍵值對映射的鍵必須實現Comparable接口從而根據鍵對元素進行排序 3.Collections.sort(List<T> a,Comparator<? super T> b), 至關於有個單獨的類實現Comparator<? super T>,重寫compare(T1 t1,T2 t2),告訴Collections比較方法

線程的sleep()方法和yield()方法有什麼區別?

① sleep()方法給其餘線程運行機會時不考慮線程的優先級,所以會給低優先級的線程以運行的機會;yield()方法只會給相同優先級或更高優先級的線程以運行的機會; ② 線程執行sleep()方法後轉入阻塞(blocked)狀態,而執行yield()方法後轉入就緒(ready)狀態; ③ sleep()方法聲明拋出InterruptedException,而yield()方法沒有聲明任何異常; ④ sleep()方法比yield()方法(跟操做系統CPU調度相關)具備更好的可移植性

當一個線程進入一個對象的synchronized方法A以後,其它線程是否可進入此對象的synchronized方法B?

不能,同步方法拿的是對象鎖,不過能夠訪問其它非同步方法

同步和異步的解釋?zhidao.baidu.com/question/20…

什麼是線程池?www.jianshu.com/p/916ea29ff…

說白了就是預先建立一些線程放在容器中供使用,減小了用時建立以及銷燬的過程,由於對象建立和銷燬是比較耗資源的操做

簡述synchronized 和java.util.concurrent.locks.Lock的異同?

synchronized的功能Lock都能實現,Lock更強大,前者會自動釋放鎖,後者必須在finally中手動釋放鎖

使用JDBC操做數據庫時,如何提高讀取數據的性能?如何提高更新數據的性能?

1.指定返回記錄數(空間換時間策略)2.多個語句放在PreparedStatement中處理

事務的ACID是指什麼?

  • 原子性(Atomic):事務中各項操做,要麼全作要麼全不作,任何一項操做的失敗都會致使整個事務的失敗;
  • 一致性(Consistent):事務結束後系統狀態是一致的;
  • 隔離性(Isolated):併發執行的事務彼此沒法看到對方的中間狀態;
  • 持久性(Durable):事務完成後所作的改動都會被持久化,即便發生災難性的失敗。經過日誌和同步備份能夠在故障發生後重建數據

  • JDBC中如何進行事務處理?

    Connection的setAutoCommit()可設置是否自動提交

    JDBC可否處理Blob和Clob?cloud.tencent.com/developer/a…

    得到一個類的類對象有哪些方式?

    • 方法1:類型.class,例如:String.class
    • 方法2:對象.getClass(),例如:」hello」.getClass()
    • 方法3:Class.forName(),例如:Class.forName(「java.lang.String」)
    Class也和String同樣,是一種類型

    如何經過反射建立對象?

    • 方法1:經過類對象調用newInstance()方法,例如:String.class.newInstance()
    • 方法2:經過類對象的getConstructor()或getDeclaredConstructor()方法得到構造器(Constructor)對象並調用其newInstance()方法建立對象,例如:String.class.getConstructor(String.class).newInstance(「Hello」);

    簡述一下你瞭解的設計模式

    對象建立型:1.原型模式;2.工廠模式;3.抽象工廠模式;4.單例模式;5.生成器

    接口適配型:1.適配器模式;2.橋接模式;3.外觀模式

    對象去耦型:1.中介者模式;2.觀察者模式

    抽象集合型:1.組合模式;2.迭代器模式

    行爲擴展型:1.訪問者模式;2.裝飾器模式;3.責任鏈模式

    算法封裝型:1.模版方法模式;2.策略模式;3.命令模式

    性能與對象訪問型:1.享元模式;2.代理模式

    對象狀態型:1.備忘錄模式

    spring中的FactoryBean接口就是工廠模式;aop處理部分有用到適配器模式(保證接口兼容),代理模式(用一箇中間對象控制原對象);觀察者模式(1個對象的狀態改變了通知其它對象改變狀態)

    JSP有哪些內置對象?做用分別是什麼?

    9大內置對象:www.cnblogs.com/yuyu666/p/9…

    講解JSP中的四種做用域? blog.csdn.net/tanyunlong_…

    JSP和Servlet是什麼關係?

    jsp編譯之後就是servlet,本質同樣

    如何實現JSP或Servlet的單線程模式? blog.csdn.net/xichengqc/a…

    實現會話跟蹤的技術有哪些?blog.csdn.net/qq_33098039…

    MyBatis中使用<code>#</code>和<code>$</code>書寫佔位符有什麼區別?

    #將傳入的數據都當成一個字符串,會對傳入的數據自動加上引號;

    $將傳入的數據直接顯示生成在SQL中,較易遭受sql攻擊

    Spring中Bean的做用域有哪些?

    1.singleton 2.prototype 3.request 4.session 5.globalsession

    抽象類必定要有抽象方法嗎?不須要

    抽象類能被final繼承嗎?

        不能,定義抽象類就是用來繼承的,子類必須實現抽象類的抽象方法

    字節流和字符流的區別?

        字節流是8位一個單位,字符流是16位一個單位

    BIO,NIO,AIO的區別?

        www.imooc.com/article/265…

    • BIO,同步阻塞式IO,簡單理解:一個鏈接一個線程
    • NIO,同步非阻塞IO,簡單理解:一個請求一個線程(多個鏈接)
    • AIO,異步非阻塞IO,簡單理解:一個有效請求一個線程
    HashMap,HashTable的區別?

        HashMap線程不安全,後者線程安全(官方不推薦使用)。前者key,value能夠爲null,多線程狀況可以使用ConcurrentHashMap代替

    HashMap實現原理? 

    HashSet原理?底層就是操做HashMap,不容許有重複值

    相關文章
    相關標籤/搜索