Java面試題

一 Java基礎

一、JDK 和 JRE 有什麼區別?java

  • JRE:Java運行時環境,包含了Java虛擬機、Java基礎類庫mysql

  • JDK:Java開發工具包,它包含了JRE,編譯器和其餘工具sql

  1. 若是須要運行java程序,只須要安裝JRE就能夠了。數據庫

  2. 若是須要編寫java程序,須要安裝JDK編程

  3. JAVA_HOME ----> JDK的安裝目錄json

二、== 和 equals 的區別是什麼?跨域

  • ==比較的是地址數組

  • equals 比較的是 兩個對象的內容瀏覽器

三、兩個對象的 hashCode()相同,則 equals()也必定爲 true,對嗎?緩存

  • 是相同,由於 equals() 比較的是兩個對象的內容,hashCode相同說明值相同

四、final 在 java 中有什麼做用?

  • final能夠修飾類,這樣的類不能被繼承,好比String類

  • final能夠修飾方法,這樣的方法不能被重寫

  • final能夠修飾變量,這樣的變量的值不能被修改

五、java 中的 Math.round(-1.5) 等於多少?

  • -1

  • Math.round() 的返回值類型是long

    • Math.round(11.5f),那它的返回值類型是int,取值向正無窮方向取捨

  • Math.round(11.5) --> 12

  • Math.round(-11.5) --> -11

  • Math.round(0.5) --> 1

  • Math.round(-0.5) --> 0

六、String 屬於基礎的數據類型嗎?

  • String 是引用類型

    • 基礎的數據類型有:byte、short、int、long、Boolean、double、float、char

七、基礎類型與引用類型的區別:

  • 基礎類型只表示簡單的字符或數字

  • 引用類型能夠是任何複雜的數據結構

八、java 中操做字符串都有哪些類?它們之間有什麼區別?

  • String

    • 一旦被建立,就不能修改它的值

    • 適用於少許的字符串操做的狀況

  • StringBuffer

    • StringBuffer是線程安全的

  • StringBuilder

    • StringBuilder是線程不安全的

    • 運行速度比StringBuffer快

九、String str="i"與 String str=new String("i")同樣嗎?

  • 不同

  • String str = 'i' 先去內存中找是否存在 ’i‘ 這個字符串,如果存在,則將地址引用,不存在則建立。

  • String str = new String('i'),無論事先是否存在’i‘ 每次都會建立其新的對象

十、如何將字符串反轉

  • 調用StringBuffer類中的reverse方法

    • String str = "abc";
      StringBuffer sb = new StringBuffer(str);
      System.out.println(sb.reverse());
  • 經過charAt(int index)返回char值進行字符串拼接

    • String str = "abc";
      String reverse = "";
      for (int i = 0; i <str.length() ; i++) {
         reverse = +str.charAt(i) + reverse ;
      }

十一、String 類的經常使用方法都有那些?

  • length(): 返回字符串長度

  • charAt():返回指定索引處的字符

  • substring():截取字符串

  • concat():拼接字符串

  • indexOf():返回指定字符的索引

  • toLowerCase():將字符串轉成小寫字母

  • toUpperCase():將字符串轉成大寫字母

  • replace():字符串替換

  • trim():去除字符串兩端空白

  • split():分割字符串,返回一個分割後的字符串數組

  • format():格式化字符串

  • equals():字符串比較

十二、抽象類必需要有抽象方法嗎?

  • 抽象類能夠沒有抽象方法

  • 抽象方法不能聲明爲靜態

  • 若是一個類中有了一個抽象方法,那麼這個類必須聲明爲抽象類,不然編譯不經過

1三、普通類和抽象類有哪些區別?

  • 抽象類不能被實例化

  • 抽象方法不能被聲明爲靜態

1四、抽象類能使用 final 修飾嗎?

  • 不能

  • 抽象類所抽取的咱們關注的共同特徵所造成的基類,若是不能繼承這個抽象類將是無心義的

1五、接口和抽象類有什麼區別?

  • 抽象類使用 abstract 關鍵字 繼承

  • 接口使用 implements 關鍵字 實現

  • 接口中不能有方法體

  • 抽象類中能夠有方法體

  • 抽象類能夠繼承一個類實現多個接口

  • 接口只能夠繼承一個或多個其餘接口

  • 抽象類中添加新方法,只需提供默認的實現,不須要改變你如今的代碼

  • 接口中添加新方法,那你必須改變實現該接口的類

  • 抽象類除了不能被實例化,和普通Java類沒有區別

  • 接口是徹底不一樣的類型

1六、java 中 IO 流分爲幾種?

  • 按流向分

    • 輸入流

    • 輸出流

  • 按類型分

    • 字節流

    • 字符流

1七、BIO、NIO、AIO 有什麼區別?

  • BIO

    • 同步阻塞

    • 第一次請求尚未結束的話,後面的請求就一直等待

  • NIO

    • 同步非阻塞

    • 將每個請求分配給一個線程來單獨處理

  • AIO

    • 異步非阻塞

1八、File的經常使用方法都有哪些?

  • createNewFile 指定位置建立一個空文件,成功就返回true,若是已存在就不建立,而後返回false。

  • mkdir 指定位置建立一個單級文件夾。

  • mkdirs 指定位置建立一個多級文件夾。

  • delete 刪除文件或者一個空文件夾,不能刪除非空文件夾,立刻刪除文件,返回一個布爾值

  • exists 文件或文件夾是否存在。

  • isFile 是不是一個文件,若是不存在,則始終爲false

  • getName 獲取文件或文件夾的名稱,不包含上級路徑。

  • getAbsolutePath 獲取文件的絕對路徑,與文件是否存在不要緊

  • getParent 返回此抽象路徑名父目錄的路徑名字符串;若是此路徑名沒有指定父目錄,則返回null

1九、java有多個訪問修飾符?各有什麼含義?

  • public 公開的 任何一個類均可以訪問

  • private 私有的 只能在本類訪問

  • default 默認的 只能被同一個包中類訪問

  • protected 受保護的 同包和繼承的類能夠訪問

20、什麼是繼承?

  • 繼承是面向對象實現軟件複用的重要手段,當子類繼承父類,可直接或者間接獲取父類裏的成員

2一、什麼是封裝?

  • 封裝是指將對象的實現細節隱藏起來,經過公共方法暴露出該對象的功能

2二、什麼是多態?

  • 多態指的是同一行爲具備多個不一樣表現形態和狀態的能力

2三、方法重載與重寫有什麼區別?

  • 重寫(Override)發生在繼承中

    • 方法名稱、參數類型、返回值類型所有相同

  • 重載(Overload)發生在一類中

    • 方法名相同、參數的類型或個數不一樣

2四、抽象類與接口 相同與不一樣之處? 他們分別何時使用?

相同處:

  • 不能直接實例化

  • 抽象類裏的抽象方法必須所有被子類所實現,子類不能所有實現父類抽象方法,那麼該子類還只能是抽象類。一個類實現接口的時候,如不能所有實現接口方法,那麼該類也只能爲抽象類。

不相同處:

  • 子類須要使用extends關鍵字來繼承抽象類

  • 接口子類使用implements來實現接口

  • 抽象類能夠有構造器,接口不能有構造器

  • 抽象類除了不能實例化以外和普通的java類沒有區別

  • 接口是徹底不一樣的類型

若是想實現多重繼承,則使用接口

若是基本功能在不斷改變,則使用抽象類

2五、什麼是類?

  • 類是一個模板,它描述着一類對象的行爲和狀態

2六、什麼是對象?

  • 對象是類的一個實例,有狀態、行爲,客觀存在的事物均可以成爲對象(萬物皆對象)

2七、構造函數的做用是什麼?

  • 對類進行初始化

2八、局部變量 實例變量 類變量 全局變量

  • 局部變量

    • 在方法或者代碼塊中,或者方法的聲明上(即在參數列表中)

  • 實例變量

    • 在類的聲明中,屬性是使用變量來表示的。稱爲實例變量

  • 類變量(靜態變量)

    • 獨立於方法以外的變量

  • 全局變量

    • 在函數外部定義的變量 稱爲全局變量

2九、Java是什麼?

  • Java是一門面向對象編程語言

    • Java的優勢

      • 簡單、安全、穩定、跨平臺

    • Java缺點

      • 須要運行環境、不合適開發桌面應用程序

30、Java的特性是什麼?

  • 封裝

    • 將對象的實現細節隱藏起來,經過公共方法暴露出該對象的功能

  • 繼承

    • 繼承是面向對象實現軟件複用的重要手段,當子類繼承父類後,可直接或間接獲取父類裏的成員

  • 多態

    • 同一行爲具備多個表現形式和狀態的能力

  • 抽象

    +是指定從特定的角度出發,從已存在的一些事物中抽取咱們所關注的特性、行爲從而成一個新事物的思想過程

3一、SE、EE、ME

  • SE

    • 用於桌面或簡單的服務器應用的Java平臺

  • EE

    • 用於複雜的服務器應用Java平臺

  • ME

    • 用於手機和其餘小型設備的Java平臺

3二、面向對象 和 面向過程的區別?

  • 面向過程

    • 面向過程是一種站在過程的角度思考問題的思想,強調的是功能行爲,功能的執行過程

  • 面向對象

    • 面向對象是一種基於面向過程的新編程思想,是一種站在對象的角度思考問題,咱們把多個功能臺合理的放到不一樣對象,強調的是具有某些功能的對象

3三、基礎數據類型

  • byte

  • short

  • int

  • float

  • double

  • long

  • char

  • boolean

對於 byte、short、int、double、float、long等基本數據類型的變量來講會默認初始化爲0(boolean變量默認初始化爲false)

對於引用類型的變量,會默認初始化爲null

3四、什麼是 Java Ide?

  • IDE是集成開發環境,簡單來講就是Java開發工具,好比IDEA、Eclipse

3五、什麼是B/S架構?

  • 瀏覽器和服務器架構模式

3七、什麼是C/S架構

  • 客戶端/服務端架構模式

3八、什麼是JVM?

  • java虛擬機,運用硬件或者軟件手段實現的虛擬的計算機

3九、Java虛擬器包括什麼?

  • 寄存器、堆棧、處理器

40、Java是否須要開發人員回收內存垃圾嗎?

  • 大多狀況下是不須要的。Java提供了一個系統級的線程來跟蹤內存分配,再也不使用的內存區將會自動回收

4一、Java的數據結構有哪些?

  • 線性表 (ArrayList)

  • 鏈表 (LinkedList)

  • 棧 ( Stack )

  • 隊列 ( Queue )

  • 圖 ( Map )

  • 樹 ( Tree )

4二、類與對象的關係?

  • 類是對象的抽象,對象是類的具體,類是對象的模板,對象是類的實例

4三、什麼是隱式轉換?

  • 大範圍的變量可以接受小範圍的數據

4四、什麼是顯示轉換?

  • 把一個大類型的數據強制賦值給小類型的數據

4五、什麼是拆裝箱?

  • 拆箱:把包裝類型轉成基本數據類型

  • 裝箱:把基本數據類型轉成包裝類型

4六、一個Java類中包含哪些內容?

  • 屬性、方法、內部類、構造方法、代碼塊

4七、if ( a +1.0 == 4.0 ) ,這樣作好嗎?

  • 很差,由於計算機在浮點型數據運算的時候,會有偏差,儘可能在布爾表達式中不使用浮點型數據

4八、針對浮點型數據運算出現的偏差的問題,你怎麼解決?

  • 使用 Bigdecimal 類 進行 浮點型數據的運算

4九、 ++i 與 i++ 的區別?

  • i ++ ,先運算,後賦值

  • ++ i ,先賦值,後運算

50、程序的結構有哪些?

  • 順序結構

  • 選擇結構

  • 循環結構

5一、數組實例化有幾種方式?

  • 靜態實例化:建立數組的時候已經指定數組中的元素

    • int[] a = new int[]{1,2,3,4};

  • 動態實例化:實例化數組的時候,只指定了數組長度

5二、Java經常使用包有哪些?

  • Java.lang

  • Java.IO

  • Java.sql

  • Java.util

  • Java.awt

  • Java.net

  • Java.math

5三、Java最頂級的父類是哪一個?

  • Object

5四、Object類經常使用方法有哪些?

  • equals

  • hashcode

  • toString

  • wait

  • notify

  • clone

  • getClass

5五、Java中沒有有指針?

  • 有指針,可是隱藏了,開發人員沒法直接操做指針,由JVM來操做指針

5六、Java中是值傳遞?仍是引用傳遞?

  • 理論上說,java都是引用傳遞,對於基本數據類型,傳遞是值的副本,而不是值的自己,對於對象類型,傳遞是對象的引用

5七、假設數組內有5個元素,若是對數組進行反序,該如何作?

  • 建立一個新數組,從後到前循環遍歷每一個元素,將取出的元素依次順序放入新數組中

5八、形參與實參

  • 形參:是定義方法名和方法體的時候使用的參數,用於接收調用該方法時傳入的實際值

    • 好比 public void method(int a ,int b ); a,b就是形參

  • 實參:是在調用方法時傳遞給該方法的實際值

    • 如如 public void method( 1,2 );1,2就是實參

5九、構造方法能不能顯式調用?

  • 不能將構造方法當成普通方法調用,只有在建立對象的時候它纔會被系統調用

60、內部類與靜態內部類的區別?

  • 靜態內部類相對於外部類是獨立存在的,在靜態內部類中沒法直接訪問外部類中變量、方法。若是要訪問的話,必需要new一個外部類的對象,使用new出來的對象訪問。可是能夠直接訪問靜態的變量、調用靜態的方法

  • 若是外部類要訪問內部類的屬性或者調用內部類的方法,必需要建立一個內部類的對象,使用該對象訪問屬性或者調用方法

  • 。。。

6一、static 關鍵字有什麼做用?

  • static 能夠修飾內部類、方法、變量、代碼塊

  • static修飾的類是靜態內部類

  • static修飾的方法時靜態方法,表示該方法屬於當前類的,而不屬於某個對象的,靜態方法也不能被重寫,能夠直接使用類名調用。在static方法中不能使用this或者supper關鍵字

  • staic修飾變量是靜態變量或者叫類變量,靜態變量被全部實例共享,不會依賴對象。靜態變量在內存中只有一份拷貝,在JVM加載類的時候,只爲靜態分配一次內存

  • static修飾的代碼塊叫靜態代碼塊,一般用來作程序優化,靜態代碼塊中的代碼在整個類加載的時候,只會執行一次,靜態代碼塊能夠有多個,若是有多個,按照前後順序依次執行

6二、final 在 java 中 的做用

  • final 能夠修飾類,修飾方法,修飾變量

  • 修飾的類叫最終類。該類不能被繼承

  • 修飾的方法不能被重寫

  • 修飾的變量叫常量,常量必須初始化,一旦初始化後,常量的值不能發生改變

6三、String str = 'aa' ,String str = new String('aa'); 同樣嗎?

  • 不同的,由於內存分配的方式不同

  • 第一種,建立的 'aa' 是常量,jvm都將其分配在常量池中

  • 第二種,建立的是一個對象,jvm將其值分配在堆內存中

6四、String str ='aa' , String s ='bb' , String aa =aa + s ;一共建立了幾個對象?

  • 一共有兩個引用,三個對象

6五、Java中的math類有哪些經常使用方法?

  • pow() : 冪運算

  • sqrt() : 平方根

  • round():四捨五入

  • Abs() : 求絕對值

  • Random() :生成一個 0-1 的隨機數,包括 0 不包括 1

6六、判斷兩個對象是否相同,能使用equals比較嗎?

  • 不能,equals大多用來作字符串比較,要判斷基本數據類型或者對象類型,須要使用 ==

6七、 == 與 equals 有什麼區別?

  • == 能夠判斷基本數據類型值是否相同,也能夠判斷兩個對象指向的內存地址是否相同,也就是說判斷兩個對象是否同一個對象,equals一般用來作字符串比較

6八、如何將字符串反轉?

  • StringBuilder 和 StringBuffer 的 revers 方法

6九、Java中的繼承是單繼承仍是多繼承?

  • Java中既有單繼承,又有多繼承,對於Java類來講只能有一個父類,對於接口來講能夠同時繼承多個接口

70、建立一個子類對象的時候,父類的構造方法會執行嗎?

  • 會執行,當建立一個子類對象,調用子類構造方法的時候,子類構造方法會默認調用父類的構造方法

7一、什麼是父類引用指向子類對象?

  • 是java多態一種特殊的表現形式,建立父類引用,讓該引用指向一個子類的對象

  • 好比 類A ,B類繼承了類A,

    • A a =new B(); 這就稱父類的引用a 指向了子類的對象 new B()

7二、當父類引用指向子類對象的時候,子類重寫了父類方法和屬性,那麼當訪問屬性的時候,訪問是誰的屬性?調用方法時,調用的是誰的方法?

  • 子類重寫了父類方法和屬性,訪問的是父類的屬性,調用的是子類的方法

7三、Supper 與 this 表示什麼?

  • supper 表示當前類的父類對象

  • this表示當前類的對象

7四、接口有什麼特色?

  • 接口中聲明全是public static final 修飾的常量

  • 接口中全部方法都是抽象方法

  • 接口中是沒有構造方法

  • 接口也不能直接實例化

  • 接口能夠多繼承

7五、除了使用new建立對象以外,還能夠用什麼方法建立對象?

  • Java反射

7六、Java反射建立對象效率高仍是經過new建立對象的效率高?

  • 經過new建立對象的效率比較高

  • 經過反射時,先找類資源,使用類加載器建立,過程比較繁瑣,因此效率低

7七、Java 中集合框架的有幾個?

  • Collection、Map

7八、Collection接口下有哪些集合框架?

  • List :線性表

  • Set:無序集合

7九、List接口有什麼特色?

  • 順序存儲、能夠有重複值

80、Set接口有什麼特色?

  • 無序存儲、不能有重複值

8一、ArrayList 和 LinkedList有什麼區別?

  • ArrayList 與 LinkedList 都實現了List接口

  • ArrayList是線性表,底層是使用數組實現的,它在尾端插入和訪問數據時效率較高

  • LinkedList是雙向鏈表,它在中間插入或者插入是效率較高,在訪問數據時效率較低

8二、Array 與 ArraList 有什麼區別?

  • Array 與 ArrayList 都是用來存儲數據的集合。ArrayList底層是使用數組實現的,可是ArrayList對數組進行了封裝和功能擴展

8三、Map有什麼特色?

  • 以鍵值對存儲數據

  • 元素存儲循序是無序的

  • 不容許出現重複鍵

8四、JDBC操做的步驟

  • 加載數據庫驅動

  • 打開數據庫鏈接

  • 執行sql語句

  • 處理返回結果

  • 關閉資源

8五、在使用jdbc的時候,如何防止出現sql注入問題?

  • 使用 PreparedStatement 類

8六、怎麼在JDBC 調用 存儲過程?

  • 使用 CallableStatement

8七、& 和 && 的區別?

  • &是位運算。

    • 條件 所有要執行

      • 好比 if ( a==b & a==c ) 這裏面兩個條件都要執行

  • && 是布爾邏輯運算符

    • 第一個條件經過,後面的條件就無論了

      • 好比 If( a==b &&a==c ) 當 a==b 結果爲false時, a==c 條件就不執行了

容器

一、java 容器都有哪些?

  • 數組、String、java.util下的集合容器

反射

一、什麼是反射?

  • 指程序能夠訪問、檢測和修改它自己狀態或行爲的一種能力

二、什麼是 java序列化?

  • 序列化:把Java對象轉換爲字節序列的方法

三、什麼狀況下須要序列化?

  • 把對象的字節序列化到永久的保存到硬盤中

  • 在網絡上傳遞對象的字節序列

四、動態代理是什麼?有哪些應用?

  • 動態代理 指的是 能夠任意控制任意對象的執行過程

    • 原本應該本身作的事情,由於沒有某種緣由不能直接作,只能請別人代理作。被請的人就是代理

    • 好比春節買票回家,因爲沒有時間,只能找票務中介來買,這就是代理模式。

  • 應用: Spring的AOP

五、怎麼實現動態代理

  • jdk動態代理

  • cglib動態代理

MySQL

一、自定義函數

-- 函數 --> 模塊化,封裝,代碼複用

create function 函數名([參數列表]) returns 數據類型
begin
SQL語句;
return 值;
end;

示例:
--最簡單的僅有一條sql的函數
create function myselect1() returns int return 666;
--調用
select myselect1();

--帶傳參的函數
create function mysql(name varchar(15)) returns int
begin
return (select id from table_name where column_name = name);
end;
--調用
select mysql("張三");

二、存儲過程

-- 存儲過程 --> 一組爲了完成特定功能的SQL語句集

-- IN 傳入參數
delimiter //
create procedure mysql (
IN id int
)
begin
select * from table_name where id = id;
end;
//
delimiter;

--其中in是傳進去的變量;
drop procedure mysql;//銷燬這個存儲過程
--調用存儲過程
call mysql(1);

-- OUT 輸出參數
delimiter //
create procedure demo
(in id1 int,OUT ids int)
begin
select id into ids from users where id = id1;
select ids;
end
//
delimiter ;

--調用
set @result;
call demo(1,@result);

--INOUT輸入輸出
delimiter //
create procedure demo (inout ids int)
begin
select id into ids from users where id =ids;
select ids;
end
//
delimiter ;

--調用
set @result1 =2;
call demo(@result1);

三、視圖

-- 視圖就是一條select 語句 執行後返回結果集,是一種虛擬表,是一個邏輯表
-- 方便操做,減小複雜的SQL語句,增長可讀性,更加安全一些
create view demo_view
as
select u.id,u.name,n.stuNo from users u inner join number n on u.stuId=n.id;

--調用
select * from demo_view;
--刪除
drop view demo_view;

四、索引

-- 索引分類?
一、普通索引 二、惟一索引 三、全文索引 四、組合索引

普通索引:僅加速查詢,最基本的索引,沒有任何限制

惟一索引:加速查詢 + 列值惟一(能夠有null)

全文索引:僅適用於MyISAM引擎的數據表,做用於char、varchar、text數據類型的列

組合索引:將幾個列做爲一條索引進行檢索,使用最左匹配原則

--索引用於快速找出在某個列中有一特定值的行,不使用,MySQL必須從第一條記錄開始讀完整個表

-- 優勢
一、全部的MySQL列類型(字段類型)均可以被索引,也就是能夠給任意字段設置索引
二、大大加速數據的查詢速度
-- 缺點
一、建立索引和維護索引要耗費時間
二、對錶的數據進行增長、刪除、修改時,索引也須要動態的維護,下降了數據的維護速度

create table healerjean (
id int AUTO_INCREMENT PRIMARY KEY COMMENT '主鍵',
name VARCHAR(32) NOT NULL COMMENT '姓名',
email VARCHAR(64) NOT NULL COMMENT '郵箱',
message text DEFAULT NULL COMMENT '我的信息'
#INDEX index_name (name) COMMENT '索引name'
) COMMENT = '索引測試表';
--給已建立的表 添加索引
create index index_name on healerjean(name);
--刪除索引
drop index index_name on healerjean;

五、觸發器

-- 監視某種狀況,並觸發某種操做

--觸發器建立語法四要素
一、監視地點
二、監視事件
三、觸發時間
四、觸發事件

-- 觸發器只能建立在永久表上,不能對臨時表建立觸發器

create trigger 觸發器名稱
after/before insert/update/delete on 表名
for each row #這句話在mysql是固定的
begin
sql語句;
end;

示例:
delimiter //
create trigger trigger_demo before insert on demo1
for each row
begin
insert into demo1(name) values('觸發器修改啦...');
end
//
delimiter ;

--刪除觸發器
drop trigger trigger_demo;

SQL Server 中 Order by 排序

  • select * from 表名 order by 字段名 (升序)

  • select * from 表名 order by 字段名 desc (降序)

SQL Server 與 MySQL 簡單分頁查詢

  • sql server : select top 10 * from 表名

  • sql server: select * from 表名 order by 字段名 offset 10 rows Fetch next 10 rows only

  • mysql : select * from 表名 limit 頁數,條數

SQL查詢語法

  • select * from a inner join b on a.id=b.aId; (內鏈接)

  • select * from a left join b on a.id = b.aId;(左鏈接)

  • select * from a right join b on a.id = b.aId;(右鏈接)

  • (select * from a left join b on a.id = b.aId) union (select * from a right join b on a.id = b.aId);(全鏈接)

行列轉換

create table t_score
(
name varchar(20) ,
subject varchar(20),
score float
)default charset=utf8;

INSERT INTO `t_score` VALUES
  ('王海', '語文', '86'),
  ('王海', '數學', '83'),
  ('王海', '英語', '93'),
  ('陶俊', '語文', '88'),
  ('陶俊', '數學', '84'),
  ('陶俊', '英語', '94'),
  ('劉可', '語文', '80'),
  ('劉可', '數學', '86'),
  ('劉可', '英語', '88'),
  ('李春', '語文', '89'),
  ('李春', '數學', '80'),
  ('李春', '英語', '87');

要求實現的效果:

select name,
	max(case subject when '語文' then score end) as 語文 ,
	max(case subject when '數學' then score end) as 數學,
	max(case subject when '英語' then score end) as 英語,
	sum(score) 成績
from t_score group by name
union all
select 'TOTAL',
	sum(case subject when '語文' then score end),
	sum(case subject when '數學' then score end),
	sum(case subject when '英語' then score end),
	sum(score)
	from t_score;

二、求出每科每門成績大於等於80分的人名字

select * from t_score  group by name having min(score) >=80;

多線程

一、什麼是線程?

  • 線程有時被稱爲經量級進程,是程序執行流的最小單位

  • 線程是CPU調度的一個基本單位

二、什麼是進程?

  • 進程是系統中正在運行的一個程序,程序一旦運行就是進程

三、什麼是多線程?

  • 多線程是指從軟件或者硬件上實現多個線程併發執行的技術

四、並行 和 併發的區別?

  • 並行:是兩個任務同時運行(須要多核CPU)

    • 好比我跟兩個網友聊天,左手操做一個電腦跟甲聊,同時右手用另外一臺電腦跟乙聊天

  • 併發:指兩個任務都請求運行,而處理器只能接受一個任務,就把這個兩個任務安排輪流進行。

    • 若是用一臺電腦我先給甲發個消息,而後馬上再給乙發消息,而後再跟甲聊,再跟乙聊。

五、進程和線程的區別?

  • 地址空間:同一進程的線程共享本進程的地址空間,進程之間則是獨立的地址空間

  • 資源擁有:同一進程內的線程共享本進程的資源,進程之間的資源是獨立的

  • 一個進程崩潰後,在保護模式下不會對其餘進程產生影響,可是一個線程崩潰整個進程都死掉,多進程要比多線程健壯

  • 線程是處理器調度的基本單位,進程不是

六、建立線程幾種方式?

  • 繼承 Thread 類

  • 實現Runnable 接口

  • 實現Callable 接口

七、什麼是守護線程?

  • 守護線程是個服務線程,服務於其餘線程

    • 典型案例:垃圾回收線程

八、什麼是用戶線程?

  • 用戶線程就是應用程序裏的自定義線程

九、線程有哪些狀態?

  • 新建狀態

  • 就緒狀態

  • 運行狀態

  • 阻塞狀態

  • 死亡狀態

十、sleep() 方法 和 wait() 有什麼區別?

  • sleep() 能夠在任何地方使用

  • wait() 只能在同步方法或同步塊中使用

十一、notify 和 notifyAll 有什麼區別?

  • notify是喚醒某個線程

  • notifyAll是喚醒全部暫停線程

十二、線程的 run()和 start()有什麼區別?

  • run() 至關於線程的任務處理邏輯的入口方法

  • start() 的做用是啓動相應的線程

1三、ThreadLocal 是什麼?有哪些使用場景?

  • ThreadLocal用於保存某個線程共享變量

  • 使用場景:解決數據庫鏈接,Session管理

Java Web

一、jsp 和 servlet 有什麼區別?

  • jsp經編譯後就成了Servlet(Jsp的本質就是Servlet,JVM只能識別Java類,不能識別Jsp代碼,Web容器將Jsp的代碼編譯成JVM可以識別的java類)

  • jsp更擅長表現於頁面顯示,servlet更擅長於邏輯控制

  • Servlet中沒有內置對象,Jsp中的內置對象都是必須經過HttpServletRequest對象,HttpServletResponse對象以及HttpServlet對象獲得。

二、session 和 cookie 有什麼區別?

  • cookie 以文本格式存儲在瀏覽器上,存儲量有限

  • session存儲在服務端,能夠無限量存儲多個變量而且比cookie更安全

異常

一、throw 和 throws 的區別?

  • throw則是指拋出的一個具體異常類型

  • throws是用來聲明一個方法可能拋出的全部異常信息

二、異常是什麼?

  • 異常是一個在程序執行期間發生的事件,它中斷正在執行的程序的正常指令流

三、異常處理的幾個關鍵字有哪些?

  • try、catch、finally、throw、throws

四、運行時異常都是什麼異常類型的子類?

  • Exception異常類

五、檢查異常是什麼?

  • 簡單來講,你代碼尚未運行,編碼器就會檢查你的代碼,對可能出現的異常必須作出相對的處理

六、有哪些常見的檢查異常?

  • 除了 RuntimeException與其子類,以及錯誤(Error).其餘的差很少都是檢查異常

七、異常傳播

  • 這個從異常拋出到控制轉移給合適的異常處理語句的過程就叫作異常傳播

八、final、finally、finalize 有什麼區別?

  • final 用來修飾類、方法、變量

  • finally 只能用在 try catch 語法中,表示這段語句最終必定會被執行

九、try-catch-finally 中哪一個部分能夠省略?

  • catch和finally語句不能同時省略

網絡

一、http 響應碼 301 和 302 表明的是什麼?有什麼區別?

  • 301表示網頁永久性轉移到另外一個地址

  • 302表示臨時性轉移

  • 區別

    • 301是永久的重定向,搜索引擎在抓取新內容的同時也將舊的網址替換爲重定向以後的網址

    • 302重定向是臨時的重定向,搜索引擎抓取新的內容而保留舊的網址

二、forward 和 redirect 的區別?

  • forward是服務器內部重定向

  • redirect是服務器收到請求後發送一個狀態頭給客戶,客戶將再請求一次

三、get 和 post 請求有哪些區別?

  • get請求的參數包含在URL中

  • post請求參數是放在請求body中

  • get請求傳參有長度限制,post請求沒有長度限制

  • get請求的參數只能是ASCII碼,post請求傳參沒有這個限制

四、如何實現跨域?

  • 使用CORS技術

  • 使用JSONP

五、什麼是json?

  • json是一種經量級的數據交換格式

概念

一、AOP:面向切面編程

  • 經過預編譯方式 和 運行期動態代理 實現程序功能的統一維護的一種技術

  • 利用AOP

    • 將業務邏輯的各部分之間的耦合度下降

    • 提升程序的可重用性

    • 不干擾源碼

二、IoC:控制反轉

  • 是面向對象編程的一種設計原則

  • 能夠減低代碼之間的耦合度‘

  • IoC是一種描述經過第三方去產生或獲取特定對象的方式

  • 將類的建立 和 依賴關係 寫在配置文件裏,由配置文件注入,實現了鬆耦合

三、MVC:模型 - 視圖 - 控制器

  • 是一種軟件規範

  • 用一種 業務邏輯、數據、界面顯示分離的方法組織代碼

四、MVVM:模型 - 視圖 - 視圖模型

  • 視圖經過視圖模型的dom監聽將事件綁定到模型上,而模型則經過數據綁定來管理視圖中的數據,視圖模型從中起到一個鏈接橋的做用

五、RESTful

  • 一種軟件架構風格、設計風格、不是標準,只是提供了一組設計原則和約束條件

  • 主要用於客戶端和服務端交互類的軟件

  • 基於這個風格設計的軟件能夠更簡潔,更有層次,更易於實現緩存等機制

六、Vue生命週期

  • beforeCreate、create、beforeMount、mounted、beforUpdate、update、beforDestroy、destroyed

七、MyBatis

  • MyBatis 是一個支持定製化SQL、存儲過程以及高級映射的持久層框架

八、Hibernate

  • Hibernate是一個開放源碼的對象關係映射框架,它對JDBC進行了簡單封裝,它將POJO與數據庫表創建映射關係,是一個全自動的ORM框架

九、ORM:對象關係映射

  • 是一種程序技術,用於實現面向對象編程語言裏不一樣類型系統的數據之間的轉換

十、OOP:面向對象編程

  • 它是一種計算機編程架構

十一、JPA:Java持久層API

  • 是JDK註解或XML描述對象 - 關係表的映射關係

相關文章
相關標籤/搜索