java面試題(真實)
java面試題(真實)
java
-
九大內建物件
- 輸入輸出物件:out物件、response物件、request物件;
- 通訊控制物件:pageContext物件、session物件、application物件;
- Servlet物件:page物件、config物件;
- 錯誤處理物件:exception物件。
-
mybatis中$和#的區別
- #相當於對資料 加上 雙引號,$相當於直接顯示資料;
- #將傳入的資料都當成一個字串,會對自動傳入的資料加一個雙引號。如:order by #user_id#,如果傳入的值是111,那麼解析成sql時的值為order by “111”, 如果傳入的值是id,則解析成的sql為order by “id”.;
- $將傳入的資料直接顯示生成在sql中。如:order by ,如果傳入的值是111,那麼解析成sql時的值為order by user_id, 如果傳入的值是id,則解析成的sql為order by id;
- #方式能夠很大程度防止sql注入;
- $方式無法防止Sql注入;
- $方式一般用於傳入資料庫物件,例如傳入表名;
- 一般能用#的就別用$。
-
String 和 StringBuffer 和 StringBuiller的區別
- 三者在執行速度方面的比較:StringBuilder > StringBuffer > String;
- StringBuilder與 StringBuffer:
StringBuilder:執行緒非安全的
StringBuffer:執行緒安全的。
-
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和資料庫的對映問題。
- 相同點:
-
get和post
- 傳送方式:get通過位址列傳輸,post通過報文傳輸。
- 傳送長度:get引數有長度限制(受限於url長度),而post無限制。
- GET產生一個TCP資料包;POST產生兩個TCP資料包。
- get是從伺服器上獲取資料,post是向伺服器傳送資料。
-
過載和重寫
- 方法重寫(overriding):
也叫子類的方法覆蓋父類的方法,要求返回值、方法名和引數都相同。
子類丟擲的異常不能超過父類相應方法丟擲的異常。(子類異常不能超出父類異常)。
子類方法的的訪問級別不能低於父類相應方法的訪問級別(子類訪問級別不能低於父類訪問級別)。 - 方法過載(overloading):過載是在同一個類中的兩個或兩個以上的方法,擁有相同的方法名,但是引數卻不相同,方法體也不相同,最常見的過載的例子就是類的建構函式,可以參考API幫助文件看看類的構造方法。
- 方法重寫(overriding):
-
介面和抽象類的區別
- 抽象類可以有構造方法,介面中不能有構造方法;
- 抽象類中可以有普通成員變數,介面中沒有普通成員變數;
- 抽象類中可以包含非抽象的普通方法,介面中的所有方法必須都是抽象的,不能有非抽象的普通方法;
- 抽象類中的抽象方法的訪問型別可以是public,protected和預設型別,但介面中的抽象方法只能是public型別的,並且預設即為public abstract型別;
- 抽象類中可以包含靜態方法(static),介面中不能包含靜態方法;
- 抽象類和介面中都可以包含靜態成員變數(static),抽象類中的靜態成員變數的訪問型別可以任意,但介面中定義的變數只能是public static final型別,並且預設即為public static final型別;
- 一個類可以實現多個介面,但只能繼承一個抽象類。
-
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,來渲染檢視;
-
將渲染結果返回給客戶端。
-
-
java基本資料型別
- 16位整型: int
- 32位整型:short
- 64位整型:long
- 浮點型:float
- 雙精度:double
- 字元:char
- 布林:boolean
- 位元組:byte