2018-05-29

java 基礎總結

  1. 面向對象的特征有哪些犀填?

    • 封裝 隱藏一切可隱藏的東西哗伯,只向外提供簡單的編程接口
    • 繼承
    • 多態(tài):方法重載和重寫
    • 抽象:只關注有哪些行為和屬性苇瓣,不關注細節(jié)
  2. public匠楚,private捷沸,protected以及default的區(qū)別摊沉?

    • 橫坐標:當前類>>同包>>子類>>其它包

    • 縱坐標:public>>protected>>default>>private

  3. java的數據類型

    • 基本類型
      • int,double,byte,boolean,long,float,short,char
    • 引用類型
      • eg:String
    • 枚舉類型(java 5以後)
  4. java的自動拆箱與裝箱機制

    其實就是基本數據類型與引用類型的自動轉換

  5. IntegerCache的範圍

    -128~127

  6. &和&&的區(qū)別

    &是按位于;&&是邏輯與痒给;按位與的作用通常作用是對某些位清零或保留某些位说墨。

  1. stack,heap和meathod area 的用法

    首先明確堆和棧存放的東西是什麼。
    • 棧:基本數據類型的變量苍柏,一個對象的引用尼斧,函數調用的現場保存
    • 堆:new 或構造器創(chuàng)建的對象,堆是垃圾收集器管理的主要區(qū)域
    • 方法區(qū):方法區(qū)和堆都是各個線程共享的內存區(qū)域序仙。用於存儲已經被jvm加載的類信息突颊,常量,靜態(tài)變量登數據潘悼。字面量如"hello",100等是放在常量池中律秃,jdk1.7以前常量池是方法區(qū)的一部分,1.7以後常量池在堆中治唤。
    他們的特點是什麼棒动?

    棧後進先出,空間小宾添,操作起來速度快船惨,大量的對象存在堆空間,他們的大小可通過jvm的啟動參數來調整缕陕,椓蝗瘢空間用光了,會引發(fā)StackOverflowError扛邑,而堆和常量池空間不足會引發(fā)OutofMemoryError

  2. java四捨五入的原理是什麼怜浅?

    加0.5然後向下取整。

  3. switch可以作用在哪些類型的變量上蔬崩?

    java5以前:byte,short,char,int.
    java5:引入枚舉類型
    java7:引入String類型

  4. ==和equal的區(qū)別

    ==看看左右是不是一個東西恶座,equal是看左右是否長的一樣。
    若x,y滿足x.equals(y)==true,則他們的hash code 一定相同沥阳,反過來不成立跨琳。
    有關==和equals的更詳細總結,可參考這裡

  5. java到底是值傳遞還是引用傳遞桐罕?

    值傳遞脉让。首先明確值傳遞和引用傳遞的概念:

    • 值傳遞:表示方法接收的是調用者提供的值
    • 引用傳遞:表示方法接收的是調用者提供的變量地址

    方法得到是所有參數值得一個拷貝,方法不能修改任何傳遞給它的參數變量的內容

    因此功炮,在java中溅潜,

    • 一個方法不能修改一個基本數據類型的參數(針對參數為基本數據類型)
    • 一個方法不能讓對象參數引用一個新對象(針對參數為引用類型)

    下面的方法解釋為什麼java中不存在引用傳遞。

    Employee a = new Employee("tom",20);  

    Employee b = new Employee("jack",19);  
 
    public static void swap(Employee x,Employee y){    
        Employee temp=x;  
        x=y;  
        y=temp;  
    }    

如果是引用傳遞死宣,swap可以實現交換兩個對象值得效果伟恶,然而最終結果是swap并沒有改變存儲在a和b中的對象引用,x和y被初始化位兩個對象引用的拷貝毅该。

  1. String博秫、StringBuilder、StringBuffer的區(qū)別

    String只讀眶掌。其餘兩種可對字符串進行修改挡育,StringBuilder(1.5引入)和StringBuffer完全相同,區(qū)別在於StringBuilder線程不安全朴爬,效率比StringBuffer高即寒。

  2. 重載和重寫的區(qū)別

    重載發(fā)生在同一個類中,重寫發(fā)生在子類與父類之間,前者是編譯時多態(tài)性母赵,(編譯時就知道要調用哪一個方法)逸爵,後者是運行時多態(tài)性。

  3. JVM加載class文件的原理機制

    類的裝載有類加載器(ClassLoader)和它的子類實現凹嘲。過程如下:

    加載:把.class文件中的數據讀到內存中

    ??|
    ??|

    連接:(驗證师倔、準備、解析)為靜態(tài)變量分配內存周蹭,并設置默認的初始值趋艘,將符號引用替換為直接引用。

    ??|
    ??|

    初始化

    • 如果類存在直接的父類且這個父類還未初始化凶朗,則先初始化父類
    • 如果類中存在初始化語句則依次執(zhí)行
  4. 如何實現對象的克隆

    此處列舉深度克隆的方式瓷胧。

  public static <T extends Serializable> T clone(T obj) throws Exception(){
  //將對象寫入流中
      ByteOutputStream bout = new ByteArrayOutputStream();
      ObjectOutputStream oos = new ObjectOutputStram(bout);
      oos.write(obj);  
      //從流中讀取對象
      ByteInputStream bin = new ByteArrayInputStream(bout.toByteArray());
      ObjectInputStream ois = new ObjectInputStream(bin);
      return (T)ois.readObject();  
}

參考 實現對象克隆的兩種方式

  1. 常見的異常分類

    關於Exception更多詳細信息點擊這裡

  2. 闡述ArrayList、Vector棚愤、LinkedList的存儲性能和特性

    • ArrayList和Vector都是使用數組的方式來存儲數據搓萧,查詢速度快,插入數據慢遇八。

    • Vector的方法有synchronized 修飾矛绘,性能上比ArrayList差。

    • LinkedList使用雙向鏈錶實現存儲刃永。插入速度快货矮。

    • Vector,Hashtable,Dictionary,BitSet,Stack,Properties是遺留容器,不推薦使用斯够。

    • ArrayList和LinkedList都是非線程安全的囚玫,可用Collections中synchronizedList方法變?yōu)榫€程安全的

  3. Colledtion和Collections的區(qū)別

    Collection是Set,List登容器的父接口;Collections是一個工具類读规,提供靜態(tài)方法來輔助容器操作抓督。

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

    簡單記:

    • 實現Comparable接口铃在,重寫compareTo方法

    • 採用Collections中sort方法,如下

       //obj為要排序的對象碍遍,第二個參數為自定義的排序規(guī)則
       Collections.sort(obj,new Comparator<Object>(){  
         public int compare(Object o1,Object o2){  
              return o1.hashCode()-o2.hashCode();
          }
    }  
  1. Thread類的sleep()方法和對象的wait()方法都可以讓線程暫停執(zhí)行定铜,它們有什麼區(qū)別?

    它們的共同點是調用此方法會讓當前線程暫停執(zhí)行制定的時間怕敬。

    • sleep方法是Thread類的靜態(tài)方法揣炕,但對象鎖依然保持。
    • wait()方法是Object類的方法东跪,調用后會放棄當前對象的鎖畸陡,進入對象的等待池鹰溜,只有調用對象的nodify()或notifYAll()才能喚醒等待池中的線程進入等鎖池,如果線程重新獲得對象的鎖就可以進入就緒狀態(tài)丁恭。
  2. sleep方法和yield方法有什麼區(qū)別曹动?

    • sleep給其它線程運行時會不考慮線程優(yōu)先級,會給底優(yōu)先級線程以運行的機會涩惑,yield只能把機會給相同優(yōu)先級或更高優(yōu)先級的線程
    • 線程執(zhí)行sleep后進入阻塞狀態(tài)仁期,執(zhí)行yield方法后進入就緒狀態(tài)
    • sleep方法需要拋出InterruptedException
    • sleep方法比yield(跟操作系統(tǒng)的cpu有關)具有更好的移植性
  3. 請說出與線程同步以及線程調度相關的方法

    • wait():使一個線程處於阻塞狀態(tài)桑驱,並且釋放對象所持有的鎖竭恬;
    • sleep():讓線程進入睡眠狀態(tài)
    • notify():喚醒一個處於等待狀態(tài)的線程,但不能確切的喚醒某一個等待的線程熬的,而是有JVM確定
    • notifyAll():喚醒所有處於等待狀態(tài)的線程痊硕,該方法並不是將對象的鎖給所有線程,而是讓他們去競爭押框,只有獲得鎖的線程才能進入就緒狀態(tài)岔绸。
  4. 編寫多線程有幾種實現方法

    java5以前有兩種:

    • 繼承Thread類
    • 實現Runnable接口
      兩種方式都需要通過重寫run()方法來定義線程的行為,後者更加靈活
      java5以後還可以通過:實現Callable和ExecutorService等來創(chuàng)建(待補充)橡伞。
  5. 什麼是線程池盒揉?

    “池化技術”產生的原因:盡可能的減少對象創(chuàng)建和銷毀的次數,從而減少資源的消耗兑徘。如線程池刚盈,數據庫連接池。
    線程池就是事先創(chuàng)建若干個可執(zhí)行的線程放入一個容器中挂脑,需要的時候從池中獲取而不需要自行創(chuàng)建藕漱,使用完放回池中。
    線程工具類Executors提供一些靜態(tài)工廠方法崭闲,生成一些常用的線程池肋联。

    • newSingleThreadExecutor:單線程線程池,該線程池保證所有任務的執(zhí)行順序按照任務的提交順序執(zhí)行刁俭。一個不行了另一個接著上橄仍。
    • newFixedThreadPool:創(chuàng)建固定大小的線程池,線程池大小一旦達到最大值就保持不變牍戚。
    • newCachedThreadPool:可緩存的線程池侮繁。當線程池大小超過處理任務所需線程數,則回收空閒線程翘魄,若不夠用鼎天,則新建線程來補充 ,最終線程池大小取決於jvm能夠創(chuàng)建的最大線程數
    • newScheduledThreadPool:創(chuàng)建一個大小無線的線程池暑竟。該線程池支持定時以及週期性執(zhí)行任務的需求斋射。
  6. 線程的基本狀態(tài)以及狀態(tài)之間的關係

    ![](https://coding.net/u/sukianata/p/ImgRepository/git/raw/master/java/Thread.png
    (若圖片加載失敗育勺,訪問https://coding.net/u/sukianata/p/ImgRepository/git/raw/master/java/Thread.png)
    說明:

         Blocked in Object's Wait Pool  對象等待池  
         Blocked in Object's Lock Pool  等鎖池  
         Runnable                       就緒狀態(tài)  
         Running                        運行狀態(tài)
         Blocked                        阻塞狀態(tài)
    
  7. synchronized和java.util.concurrent.locks.Lock的異同

    Lock能完成synchronized所實現的所有功能。主要不同點:Lock有比synchronized更精確的線程語義和更好的性能罗岖,而且不強制性的要求一定要獲得鎖涧至。synchronized會自動釋放鎖,而Lock一定要求程序員手工釋放桑包。

  8. java中有幾種類型的流
    字節(jié)流和字符流南蓬。字節(jié)流繼承于InputStream,OutputStream,字符流繼承與Reader,Writer。
    編程實現文件拷貝哑了,此處列出NIO的形式赘方。

    public static void fileCopyNIO(String soure,String target) throws IOException{
      try(FileInputStram in =new FileInputStream(source)){
        try(FileOutputStream out = new FileOutputStream(target)){
            FileChannel inChannel = in.getChannel();
            FileChannel outChannel =out.getChannel();
            ByteBuffer buffer = ByteBuffer.allocate(4096);
            while(inChannel.read(buffer) !=-1){
                buffer.flip();
                outChannel.write(buffer);   
                buffer.clear();
            }
         }
      }
    }

此處用到了java7的新特性try...with..resource格式。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末弱左,一起剝皮案震驚了整個濱河市窄陡,隨后出現的幾起案子,更是在濱河造成了極大的恐慌拆火,老刑警劉巖跳夭,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現場離奇詭異们镜,居然都是意外死亡币叹,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進店門模狭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來颈抚,“玉大人,你說我怎么就攤上這事胞皱⌒耙猓” “怎么了?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵反砌,是天一觀的道長雾鬼。 經常有香客問我,道長宴树,這世上最難降的妖魔是什么策菜? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮酒贬,結果婚禮上又憨,老公的妹妹穿的比我還像新娘。我一直安慰自己锭吨,他們只是感情好蠢莺,可當我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著零如,像睡著了一般躏将。 火紅的嫁衣襯著肌膚如雪锄弱。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天祸憋,我揣著相機與錄音会宪,去河邊找鬼。 笑死蚯窥,一個胖子當著我的面吹牛掸鹅,可吹牛的內容都是我干的。 我是一名探鬼主播拦赠,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼巍沙,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了矛紫?” 一聲冷哼從身側響起赎瞎,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎颊咬,沒想到半個月后,有當地人在樹林里發(fā)現了一具尸體牡辽,經...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡喳篇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現自己被綠了态辛。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片麸澜。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖奏黑,靈堂內的尸體忽然破棺而出炊邦,到底是詐尸還是另有隱情,我是刑警寧澤熟史,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布馁害,位于F島的核電站,受9級特大地震影響蹂匹,放射性物質發(fā)生泄漏碘菜。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一限寞、第九天 我趴在偏房一處隱蔽的房頂上張望忍啸。 院中可真熱鬧,春花似錦履植、人聲如沸计雌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽凿滤。三九已至传泊,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間鸭巴,已是汗流浹背眷细。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留鹃祖,地道東北人溪椎。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像恬口,于是被迫代替她去往敵國和親校读。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,044評論 2 355