1. 程式人生 > >陸金所面試題

陸金所面試題

今天下午去陸金所面試java。問得是java基礎與框架,但是自己沒有背面試寶典,很多都回答不好。

1.hashmap 與 hashtable 的區別 以及 hashmap的實現原理

arraylist與liknedlist 的區別與原理

ComparableComparator介面是幹什麼的?列出它們的區別。

2.多執行緒:volatile 關鍵字與記憶體可見性  CAS 演算法 同步容器類 ConcurrentHashMap鎖分段機制

                object 中 的wait  sleep notify

寫一個多執行緒的生產者與消費者的例子 

3.jvm  模型 以及類載入機制  棧記憶體溢位  記憶體溢位

4.springMVC 模型原理

5.springIOC   AOP  動態代理機制

6.mybatis原理   #、$ 的區別  分頁 resulttype與resultmap的區別

resultTypesql語句的結果集封裝型別   

比如 :    resultType="User"

看出來了吧,resultType和resultMap都對映到了User物件中

說說不同點吧,resultType 和restltMap
restulyType:
1.對應的是java物件中的屬性,大小寫不敏感,
2.如果放的是java.lang.Map,key是查詢語句的列名,value是查詢的值,大小寫敏感
3.resultMap:指的是定義好了的id的,是定義好的resyltType的引用
注意:用resultType的時候,要保證結果集的列名與java物件的屬性相同,而resultMap則不用,而且resultMap可以用typeHander轉換
4.type:java 物件對應的類,id:在本檔案要唯一column :資料庫的列名或別名,property:對應java物件的屬性,jdbcType:java.sql.Types
查詢語句中,resultMap屬性指向上面那個屬性的標籤的id
parameterType:引數型別,只能傳一個引數,如果有多個引數要封裝,如封裝成一個類,要寫包名加類名,基本資料型別則可以省略
5.一對1、一對多時,若有表的欄位相同必須寫別名,不然查詢結果無法正常對映,出現某屬性為空或者返回的結果與想象中的不同,而這往往是沒有報錯的。
6.若有意外中的錯誤,反覆檢查以上幾點,和認真核查自己的sql語句,mapper.xml檔案是否配置正確。


另外還有resultMap 元素,它是 MyBatis 中最重要最強大的元素,它能提供級聯查詢,快取等功能

 原sql語句:

[sql] 
           <span style= "font-size:18px;">            delete from   ups_role_permission_dataparams   where role_id = #{roleId,jdbcType=INTEGER}          </span>  

在這裡用到了#{},使用#時:

1、用來傳入引數,sql在解析的時候會加上" ",當成字串來解析 ,如這裡 role_id = "roleid";

2、#{}能夠很大程度上防止sql注入;

延伸:

1、用${}傳入資料直接顯示在生成的sql中,如上面的語句,用role_id = ${roleId,jdbcType=INTEGER},那麼sql在解析的時候值為role_id = roleid,執行時會報錯;

2、${}方式無法防止sql注入;

3、$一般用入傳入資料庫物件,比如資料庫表名;

4、能用#{}時儘量用#{};

注意:

mybaties排序時使用order by 動態引數時需要注意,使用${}而不用#{};