java面試題

JAVA基礎
一、JDK和JRE有什麼區別?
    JRE:java運行時環境,包含java虛擬機、java基礎類庫
    JDK:java開發工具包,它包含了JRE,編譯器和其餘工具
    若是須要運行java程序,只須要安裝JRE就能夠了。
    若是須要編寫java程序,須要安裝JDK。
    JAVA_HOME------>JDK安裝目錄。
 
二、==和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是引用類型
    8個基礎的數據類型有:byte、shrot、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.printIn(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:指定位置建立一個單級文件夾。
    mkdir:指定位置建立一個多級文件夾。
    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是一門面向對象編程語言
    優勢:簡單、安全、平穩、跨平臺
    缺點:須要運行環境、不合適開發桌面應用程序
 
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虛擬機包括什麼?
    寄存器、堆棧、處理器
 
3九、java是否須要開發人員回收內存垃圾?
    大多狀況下是不須要,java提供了一個系統級的線程來跟蹤內存分配,再也不使用的內存區將會自動回收
 
40、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,先賦值,後運算
 
4九、程序的機構有哪些?
    順序結構
    選擇結構
    循環結構
 
50、數組實例化有幾種?
    靜態實例化:建立數組的時候已經指定數組中的元素
    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八、構造方法能不能顯示調用?
    不能將構造方法當成普通調用,只有在建立對象的時候它纔會被系統調用
 
5九、內部類與靜態類的區別?
    靜態內部類至關對於外部類是獨立存在的,在靜態類內部中沒法直接訪問外部類中的變量、方法, 若是要
    訪問他們的話,必需要new一個外部的對象,使用new出來的對象訪問,可是能夠直接訪問靜態的變量、調用靜態的方法。
    若是外部類要訪問內部類的屬性或者調用內部類的方法,必需要建立一個內部類的對象,使用該對象訪問屬性或者調用方法。
 
60、static關鍵字有什麼做用?
    static能夠修飾內部類、方法、變量、代碼塊
    static修飾的類是靜態內部類
    static修飾方法時,表示該方法屬於當前類的,而不是屬於某個對象,靜態方法也不能被重寫,能夠直接使用類名調用,
    在static方法中不能使用this或者supper關鍵字。
    static修飾變量是靜態變量或者叫類變量,靜態變量被全部實例共享,不會依賴對象,靜態變量在內存中只有一份拷貝,在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六、如何將字符串反轉?
    StringBuilder和StringBuffer的revers方法
 
6七、==與equals有什麼區別?
    ==能夠判斷基本數據類型值是否相同,也能夠判斷兩個對象指向的內存地址是否相同,也就是說判斷兩個對是否相同一個對象。
    equals一般用來作字符串比較。
 
6八、java中繼承是單繼承仍是多繼承?
    java中既有單繼承,又有多繼承,對於java類來講只有一個父類,對於接口來講能夠同時繼承多個接口
 
6九、建立一個子類對象的時候,父類的構造方法會執行嗎?
    會執行,當建立一個子類對象,調用子類構造方法的時候,子類構造方法會默認調用父類的構造方法
 
70、什麼是父類引用指向子類對象?
    是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
 
77:、Collection接口下有哪些集合框架?
    List:線性表
    Set:無序集合
 
78:List接口有什麼特色?
    順序存儲、能夠有重複值
 
79:ArrayList和LinkedList有什麼區別?
    ArrayList與LinkedList都實現了List接口
    ArrayList是線性表,底層是使用數組實現的,它在尾端插入和訪問數據時效率較高
    LinkedList是雙向鏈表,它在中間插入效率較高,早訪問數據時效率低
 
 
80、Set接口有什麼特色?
    無序存儲、不能有重複值
 
8一、Array與ArraList有什麼區別?
    Array與ArraList都是用來存儲數據的集合。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序列化?
    把java對象轉換爲字節序列的方法
 
三、什麼狀況下須要系列化?
    把對象的字節序列化到永久的保存到硬盤中
    在網絡上傳遞對象的字節序列
 
四、動態代理是什麼?有哪些應用?
    動態代理:能夠任意控制任意對象的執行過程
    原本應該本身作的事情,由於某種緣由不能直接作,只能請別人代理作,被請的人就是代理
    好比春節買票回家,因爲沒有時間,只能找票務中介類買,這就是代理模式
 
五、怎麼實現動態代理
    jdk動態代理
    cglib動態代理
 
MySQL
一、自定義函數
---> 函數--->模塊化--->封裝--->代碼複用
 
create function  函數名([參數列表]) returns  數據類型
begin
    SQL語句;
    return  值;
end;
 
示例:
最簡單的僅有一條sql函數
create function  myfunction() returns  999;
調用
select     myfunction();
 
帶傳參的函數
create function  myfunction(name vrchar(15))    returns  int
begin
    return   (select  id  from table_name  where  colume_name  =  name);
end;
 
調用
sleect  myfunction(「admin」);
 
 
二、存儲過程
存儲過程-------> 一組爲了完成特定功能的sql語句集
 
IN傳入參數
delimiter //
create procedure  mysql(
    IN id  int 
)
begin
    select * from table_name where di = id;
end;
//
delimiter;
 
其中in是傳進去的變量;
drop procedure  mysql;//銷燬這個存儲過程
 
調用存儲過程
call   mysql(5);
 
 
out 輸出參數
delimiter //
create procedure  demo 
(in   id1   int,  OUT  ids  int )
begin 
    select id into ids  ffrom users  where  id =  id1;
end
//
delimiter;
 
調用
set  @result;
call   demo(1,@result);
 
 
INOUT輸入輸出
delmiter//
create  procedure  demo (inout  ids  int)
begin
    select  id into  ids   from users  where  id  =dis;
    select ids ;
end 
//
delimiter;
 
調用
set  @result1  =2;
call demo(@result1);
 
 
三、視圖
--視圖就是一條select 語句 執行後返回結果集,是一種虛擬表,是一個邏輯包
--方便操做,減小複雜的sql語句,增長可讀性,更加安全一些
 
create  view  demo_view
as
select u.id ,u.name 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 trigger_name
 
after  before  insert   update   delete  on   表名
 
for each  row  --這句話砸imysql是固定的
begin
    sql語句;
end;
 
示例:
delimiter//
 
create triggeer  triggeer _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  tableName  order  by 字段名(升序)
select *   from tableName  order  by  字段名(降序)
 
SQL  Server 與 MySQL簡單分頁查詢
sql  server :  select  top   10  *  from  tablename  ;
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.id;(內鏈接);
select *  from a left  join  b on  a.id  =b.id;(左鏈接)
select  * from a  right  join  b  on  a.id = b.id ; (右鏈接)
(select  *  from a  left  join  b  on  a.id  = b.id ) union (select  * from a right  join  b  on  a.id = b.id);(全鏈接)
 
 
行內轉換
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  wher  '語文'  then score end)  as 語文,
    max(case  subject   wher   '數學 '  then score  end ) as 數學,
    max(case  subject   wher   '英語'  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)
    好比我跟兩個網友聊天,左手操做一個電腦跟A聊,同時右手用另外一臺電腦跟B聊天
 
    併發:值兩個任務都請求運行,而處理器只能接受一個任務,就把這兩個任務安排輪流進行
    若是用一臺電腦我先發給A消息,而後馬上再給B發消息,而後在跟A聊,在跟B聊。
 
五、進程和線程的區別?
    地址空間:同一進程的線程共享進程的地址空間,進程之間則是獨立的地址空間
    資源擁有:同一進程內的線程共享本進程的資源,進程之間的資源是獨立的
    一個進程奔潰後,在保護模式下不會對其餘進程產生影響,可是一個線程奔潰整個進程都會死掉,多進程要比多線程健壯。
    線程是處理器調度的基本單位,進程不是
 
六、建立線程幾種方式?
    繼承Thread類
    實現Runnable接口
    實現Callable接口
 
七、什麼是守護線程?
    守護線程是個服務線程,服務於其餘線程
    典型案例:垃圾回收線程
 
八、什麼是用戶線程?
    用戶線程就是應用程序裏的自定義線程
 
九、線程有哪些狀態?
    新建狀態
    就緒狀態
    運行狀態
    阻塞狀態
    死亡狀態
 
十、sleep()方法和wait()有什麼區別?
    sleep()能夠在任何地方使用
    wait()只能在同步方法或者同步塊中使用
 
十一、notify()和 ontifyAll()有什麼區別?
    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、jinalize有什麼區別?
    final用來修飾類、方法、變量
    finally 只能用在try    catch語句中,表示這段語句最終必定會被執行
 
九、try-cathy-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描述對象 -  關係表的映射關係
相關文章
相關標籤/搜索