1. 程式人生 > >java面試題(真實)

java面試題(真實)

java面試題(真實)

java

  1. 九大內建物件

    • 輸入輸出物件:out物件、response物件、request物件;
    • 通訊控制物件:pageContext物件、session物件、application物件;
    • Servlet物件:page物件、config物件;
    • 錯誤處理物件:exception物件。
  2. mybatis中$和#的區別

    • #相當於對資料 加上 雙引號,$相當於直接顯示資料;
    • #將傳入的資料都當成一個字串,會對自動傳入的資料加一個雙引號。如:order by #user_id#,如果傳入的值是111,那麼解析成sql時的值為order by “111”, 如果傳入的值是id,則解析成的sql為order by “id”.;
    • $將傳入的資料直接顯示生成在sql中。如:order by u s e r i d
      user_id
      ,如果傳入的值是111,那麼解析成sql時的值為order by user_id, 如果傳入的值是id,則解析成的sql為order by id;
    • #方式能夠很大程度防止sql注入;
    • $方式無法防止Sql注入;
    • $方式一般用於傳入資料庫物件,例如傳入表名;
    • 一般能用#的就別用$。
  3. String 和 StringBuffer 和 StringBuiller的區別

    • 三者在執行速度方面的比較:StringBuilder > StringBuffer > String;
    • StringBuilder與 StringBuffer:
      StringBuilder:執行緒非安全的
      StringBuffer:執行緒安全的。
  4. mybatis和hibernate的區別

    • 相同點:
      (1)Hibernate與MyBatis都是通過SessionFactoryBuider由XML配置檔案生成SessionFactory,由SessionFactory 生成Session,由Session來開啟執行事務和SQL(Structured Query Language,結構化查詢語言)語句。
      (2)Hibernate和MyBatis都支援JDBC(Java DataBase Connectivity,java資料庫連線)和JTA(Java Transaction API,Java事務API(Application Programming Interface,應用程式程式設計介面))事務處理。
      注:jdbc和jta的主要作用是增強資料訪問能力。
    • 不同點:
      (1)sql方面:mybaits通過mapper.xml維護對映結果,程式設計師手動編寫sql相比hibernate自動生成hql(hibernate sql)更加靈活,sql調優更加容易(hibernate因為更好的封裝性,開發效率提高的同時,sql語句調優要更費力,當然可以手動修改sql來優化,但是同時也會影響開發效率);hibernate的hql資料庫移植性更好,體現在強壯性。hibernate在級聯刪除的時候效率低;資料量大, 表多的時候,基於關係操作會變得複雜。
      (2)快取方面:mybatis和hibernate都可以使用第三方快取,而hibernate相比maybatis有更好的二級快取機制。
      (3)基於ORM(Object Relational Mapping, 物件關係對映)思想解決了entity和資料庫的對映問題。
  5. get和post

    • 傳送方式:get通過位址列傳輸,post通過報文傳輸。
    • 傳送長度:get引數有長度限制(受限於url長度),而post無限制。
    • GET產生一個TCP資料包;POST產生兩個TCP資料包。
    • get是從伺服器上獲取資料,post是向伺服器傳送資料。
  6. 過載和重寫

    • 方法重寫(overriding):
        也叫子類的方法覆蓋父類的方法,要求返回值、方法名和引數都相同。
        子類丟擲的異常不能超過父類相應方法丟擲的異常。(子類異常不能超出父類異常)。
        子類方法的的訪問級別不能低於父類相應方法的訪問級別(子類訪問級別不能低於父類訪問級別)。
    • 方法過載(overloading):過載是在同一個類中的兩個或兩個以上的方法,擁有相同的方法名,但是引數卻不相同,方法體也不相同,最常見的過載的例子就是類的建構函式,可以參考API幫助文件看看類的構造方法。
  7. 介面和抽象類的區別

    • 抽象類可以有構造方法,介面中不能有構造方法;
    • 抽象類中可以有普通成員變數,介面中沒有普通成員變數;
    • 抽象類中可以包含非抽象的普通方法,介面中的所有方法必須都是抽象的,不能有非抽象的普通方法;
    • 抽象類中的抽象方法的訪問型別可以是public,protected和預設型別,但介面中的抽象方法只能是public型別的,並且預設即為public abstract型別;
    • 抽象類中可以包含靜態方法(static),介面中不能包含靜態方法;
    • 抽象類和介面中都可以包含靜態成員變數(static),抽象類中的靜態成員變數的訪問型別可以任意,但介面中定義的變數只能是public static final型別,並且預設即為public static final型別;
    • 一個類可以實現多個介面,但只能繼承一個抽象類。
  8. springMVC的流程
    在這裡插入圖片描述

    • 使用者向伺服器傳送請求,請求被Spring 前端控制Servelt DispatcherServlet捕獲;

    • DispatcherServlet對請求URL進行解析,得到請求資源識別符號(URI)。然後根據該URI,呼叫HandlerMapping獲得該Handler配置的所有相關的物件(包括Handler物件以及Handler物件對應的攔截器),最後以HandlerExecutionChain物件的形式返回;

    • DispatcherServlet 根據獲得的Handler,選擇一個合適的HandlerAdapter。(附註:如果成功獲得HandlerAdapter後,此時將開始執行攔截器的preHandler(…)方法);

    • 提取Request中的模型資料,填充Handler入參,開始執行Handler(Controller)。 在填充Handler的入參過程中,根據你的配置,Spring將幫你做一些額外的工作:
      HttpMessageConveter: 將請求訊息(如Json、xml等資料)轉換成一個物件,將物件轉換為指定的響應資訊
      資料轉換:對請求訊息進行資料轉換。如String轉換成Integer、Double等
      資料根式化:對請求訊息進行資料格式化。 如將字串轉換成格式化數字或格式化日期等
      資料驗證: 驗證資料的有效性(長度、格式等),驗證結果儲存到BindingResult或Error中;

    • Handler執行完成後,向DispatcherServlet 返回一個ModelAndView物件;

    • 根據返回的ModelAndView,選擇一個適合的ViewResolver(必須是已經註冊到Spring容器中的ViewResolver)返回給DispatcherServlet ;

    • ViewResolver 結合Model和View,來渲染檢視;

    • 將渲染結果返回給客戶端。

  9. java基本資料型別

    • 16位整型: int
    • 32位整型:short
    • 64位整型:long
    • 浮點型:float
    • 雙精度:double
    • 字元:char
    • 布林:boolean
    • 位元組:byte

資料庫