日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

顽石系列:Java技术面试

發(fā)布時間:2025/3/15 java 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 顽石系列:Java技术面试 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

頑石系列:Java技術(shù)面試

JDBC相關(guān)

1.Statement與PreparedStatement的區(qū) 別,什什么是SQL注?入,如何防?止SQL注??

  PreparedStatement支持動態(tài)設(shè)置參數(shù)、支持預(yù)編譯、防止SQL注入,而statement不支持。

  SQL注入:通過拼接SQL語句達到無參數(shù)查詢數(shù)據(jù)庫數(shù)據(jù)的目的的方法。

?

字符串相關(guān)

1.String、StringBuffer、StringBuilder?

  String是不可變的,StringBuffer和StringBuilder都是可變的。后兩者的字符內(nèi)容可變,前者創(chuàng)建后內(nèi)容不可變。

  StringBuffer是線程安全的,但是會帶來額外的系統(tǒng)開銷。StringBuilder效率比較高

  

2.==與.equals()的區(qū)別

  使用==,當(dāng)比較的是原生數(shù)據(jù)類型時,比較的是值。比較引用數(shù)據(jù)類型是,比較的是地址(也就是說是否同一個對象)。

  equals()?法: 該?法定義在Object類中,因此java中的每個 類都具有該方法,對于Object類的equal()?方法來說,它是判斷 調(diào)?用equals()?方法的引?用與傳進來的引?用是否?一致,即這兩個 引?用是否指向同?一個對象。?

說明一點:

  String重寫了equals方法,對于String類的equal()?方法來說,它是判斷當(dāng)前字符串與傳進 來的字符串的內(nèi)容是否?致。?

3.字符串常量池

字符串常量池的設(shè)計思想

  • 字符串的分配,和其他的對象分配一樣,耗費高昂的時間與空間代價,作為最基礎(chǔ)的數(shù)據(jù)類型,大量頻繁的創(chuàng)建字符串,極大程度地影響程序的性能

  • JVM為了提高性能和減少內(nèi)存開銷,在實例化字符串常量的時候進行了一些優(yōu)化

    • 為字符串開辟一個字符串常量池,類似于緩存區(qū)

    • 創(chuàng)建字符串常量時,首先堅持字符串常量池是否存在該字符串

    • 存在該字符串,返回引用實例,不存在,實例化該字符串并放入池中

    • 實現(xiàn)基礎(chǔ)
      • 字符串不可變,不用擔(dān)心數(shù)據(jù)沖突
      • 常量池的字符串不會被垃圾回收器回收。

運行時數(shù)據(jù)區(qū)

  

堆:

  存放的是對象,每個對象都包含一個與之對應(yīng)的class

  JVM只有一個堆區(qū)被所有線程共享堆中不存放基本類型和對象引用,只存放對象本身。

  對象由垃圾回收器復(fù)雜回收,因此大小和生命周期不需要確定。

棧:

  每個線程包含一個棧區(qū),棧中只保存基礎(chǔ)數(shù)據(jù)類型和對象引用,不是對象

  每個棧中的數(shù)據(jù)(原始類型和對象引用)都是私有的

  棧中分三個部分:基本類型變量區(qū)、執(zhí)行環(huán)境上下文、操作指令區(qū)(存放操作指令)

  數(shù)據(jù)大小和生命周期時可以確定的,當(dāng)沒有引用執(zhí)行數(shù)據(jù)時,這個數(shù)據(jù)就會消失

方法區(qū):

  靜態(tài)區(qū)和堆一樣,被所有線程共享。

  方法區(qū)存在的都是在整個程序中永遠唯一的,如class、static等。

字符串常量池存儲于方法區(qū)(說明:方法區(qū)是堆的一個邏輯組成部分):

  

?

面試題:棧內(nèi)存與堆內(nèi)存

  當(dāng)一個方法執(zhí)行時,每個方法都會建立自己的內(nèi)存棧,在這個方法內(nèi)定義的變量將會逐個放入逐個棧內(nèi)存中,隨著方法的執(zhí)行結(jié)束,這個方法的內(nèi)存棧也會隨之銷毀。因此,所有方法的局部變量都是放在棧內(nèi)存中的;在程序中,創(chuàng)建一個對象時,這個對象被保存到運行時數(shù)據(jù)區(qū)中,以便反復(fù)利用(因為對象的創(chuàng)想成本較大),這個運行時數(shù)據(jù)區(qū)就是堆內(nèi)存。堆內(nèi)存的變量不會隨著方法的執(zhí)行而銷毀。只有當(dāng)一個對象沒有被任何引用變量引用時,系統(tǒng)的垃圾回收期才會在合適的時候自動銷毀它。

面試題:String str4 = new String(“abc”) 創(chuàng)建多少個對象?

1.首先在字符串常量池中查找是否有"abc"對象,有則返回對應(yīng)的引用實例、沒有則創(chuàng)建對應(yīng)的引用實例

2.在堆中new一個String(abc)對象

3.將對象地址賦值給str4,創(chuàng)建一個引用

常量池中沒有“abc”字面量則創(chuàng)建兩個對象否則創(chuàng)建一個對象,以及創(chuàng)建一個引用

說明:

  通過new操作符創(chuàng)建的字符串對象不指向字符串池中的任何對象,但是可以通過使用字符串的intern()方法來指向其中的某一個。java.lang.String.intern()返回一個保留池字符串,就是一個在全局字符串池中有了一個入口。如果以前沒有在全局字符串池中,那么它就會被添加到里面。

字面量和常量池初探

String m = "hello,world";String n = "hello,world";String u = new String(m);String v = new String("hello,world");  
  • 會分配一個11長度的char數(shù)組,并在常量池分配一個由這個char數(shù)組組成的字符串,然后由m去引用這個字符串

  • 用n去引用常量池里邊的字符串,所以和n引用的是同一個對象

  • 生成一個新的字符串,但內(nèi)部的字符數(shù)組引用著m內(nèi)部的字符數(shù)組

  • 同樣會生成一個新的字符串,但內(nèi)部的字符數(shù)組引用常量池里邊的字符串內(nèi)部的字符數(shù)組,意思是和u是同樣的字符數(shù)組

  •   

    ?

    IO/NIO相關(guān)

    NIO有三大核心部分

    傳統(tǒng)IO有什么缺點,為什么NIO是非阻塞的?

    傳統(tǒng)IO為每一個客戶端使用一個線程,如果客戶端出現(xiàn)延遲等異常,線程可能會被占用很長時間,因為數(shù)據(jù)的準(zhǔn)備和讀取都在這個線程中,此時,如果客戶端數(shù)量眾多,將會消耗?量的系統(tǒng)資源

    ??個線程對應(yīng)?一個selector,但是?個 selector可以對應(yīng)多個客戶端極少的線程可以監(jiān)控?量的客戶端,即使發(fā)生阻 塞,數(shù)量也是很少的。?

    ?Scanner類

    next() 與 nextLine() 區(qū)別

    next:

      一定要讀到有效字符后才可以結(jié)束輸入。

      對輸入有效字符之前的空白,next可以自動去掉。

      只有輸入有效字符后才將其后面輸入的空白作為分隔符或者結(jié)束符

      next不能得到帶有空格的字符串。

    nextline:

      以Enter為結(jié)束符,也就是說返回的是輸入回車之前的所有字符

      可以獲得空白。

    Java基礎(chǔ)?

    Java語言關(guān)鍵字

      以下是Java編程語言中的關(guān)鍵字列表。您不能在程序中使用以下任何標(biāo)識符作為標(biāo)識符

    說明

      const和goto是保留關(guān)鍵字,即使現(xiàn)在仍未被使用。

      true,false和null可能看起來像關(guān)鍵字,但它們實際上是文字;您不能在程序中將它們用作標(biāo)識符

    ?

    abstractcontinuefornewswitch
    assert***defaultgoto*packagesynchronized
    booleandoifprivatethis
    breakdoubleimplementsprotectedthrow
    byteelseimportpublicthrows
    caseenum****instanceofreturntransient
    catchextendsintshorttry
    charfinalinterfacestaticvoid
    classfinallylongstrictfp**volatile
    const*floatnativesuperwhile

    訪問修飾符及范圍

    ?

    內(nèi)部類及注意事項

    ?

      

    轉(zhuǎn)載于:https://www.cnblogs.com/MrSaver/p/9329422.html

    總結(jié)

    以上是生活随笔為你收集整理的顽石系列:Java技术面试的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。