2020年Java面试题
1.mybatis中$和#的區別
答:1.#將獲取的值轉為字符串,并對自動傳入的參數添加雙引號;
2.$會將獲取的值直接顯示在SQL中;
3.#可以避免大部分的SQL注入;
4.在傳遞的參數是數據庫對象時需要使用$.
2.MySQL中excel批量導入通過mybatis使用什么SQL
答:使用select標簽執行插入語句,在VALUES關鍵字后使用foreach標簽循環獲取傳入的參數
| <select id="batchInsertion" parameterType="java.util.List"> ? ? ? ? INSERT INTO product_process_drawback ? ? ? ? (created,drawback_id,information?) ? ? ? ? VALUES ? ? ? ? <foreach collection="list" ?index="index" item="item" separator=","> ? ? ? ? ? ? (#{item.created},#{item.drawbackId},#{item.information}) ? ? ? ? </foreach> ? ? </select> ? |
3.用過的分布式
4.MySQL的主從機制
答:當主節點宕機后,其他節點可以立即提供服務。有三種復制機制:
MySQL源生復制和semi-sync半同步復制,Group Replication全同步復制的差異是:
5.對反射的理解
答:Java反射機制主要提供了以下功能:在運行時構造一個類的對象;判斷一個類所具有的成員變量和方法;調用一個對象的方法;生成動態代理。反射最大的應用就是框架。
獲取反射的三種方式:
I:String s = "ziwenxie"; Class<?> c = s.getClass();
II:Class<?> c = Class.forName("java.lang.String");
III:Class<?> c = String.class;
6.對動態代理的理解
?
7.在項目中負責的模塊
8.Oracle中如何做excel批量新增,另外Oracle中自增怎么操作
答:Oracle批量新增和MySQL差不多,都可以使用mybatis中的foreach標簽實現。Oracle通過創建一個自增序列實現自增
9.hashcode方法和equle方法的作用和差別
答:
1、如果兩個對象相同,那么它們的hashCode值一定要相同;
2、如果兩個對象的hashCode相同,它們并不一定相同(上面說的對象相同指的是用eqauls方法比較。)
10.在開發過程中遇到的錯誤
答:NUllPointException? FileNotFoundException? EOFException??
11.對兩個list進行合并去除重復元素并排序
答:實現方法一:
I 創建一個set ,循環兩個list,把list中的元素放到set中? ?,可以實現合并去重;
II 創建一個新數組,把set中的元素放到數組中,進行排序 ,使用Arrays.sort(arrays);可以進行排序
實現方法二:
I 把需要合并的兩個list放到一個新的list中,使用Collections.sort對list中的元素進行排序? ,實現排序;
II 使用for循環判斷list中前后兩個元素是否相同,如果相同就移除一個
實現方法三:
I for循環一個list,在for循環中再for循環一個list,判斷元素是否相同,如果相同就移除一個 ,去重
II? 把去重后的兩個list進行合并 , 合并
II? 使用Collections.sort對list中的元素進行排序 ,排序
?
12.實現在數組中指定位置新增一個元素
答:因為數組長度是固定的,所以需要新建一個數組,然后使用for循環把數組中指定位置前的元素放到新數組中,然后把新增元素放到指定位置,然后再把指定元素后的元素安裝索引+1放到新數組中
13.redis可以存放的五種數據類型和場景
少量數據存儲,高速讀寫訪問,是Redis最主要的適用場景
答:string? ? ?hash? ? ? list? ? ? set? ? ? sorted set
①?string?是 redis 最基本的類型,是最常用的一種數據類型,普通的key/ value 存儲都可以歸為此類,是二進制安全的,值最大能存儲 512MB
使用場景:常規key-value緩存應用。常規計數: 微博數, 粉絲數。
實現方式如下
②?hash?是一個鍵值(key => value)對集合。Redis hash 是一個 string 類型的 field 和 value 的映射表,hash 特別適合用于存儲對象
使用場景:存儲部分變更數據,如用戶信息等
實現方式如下
?
③?Redis list?列表是簡單的字符串列表,按照插入順序排序。你可以添加一個元素到列表的頭部(左邊)或者尾部(右邊)
常用命令:lpush(添加左邊元素),rpush,lpop(移除左邊第一個元素),rpop,lrange(獲取列表片段,LRANGE key start stop)等。
應用場景:Redis list的應用場景非常多,也是Redis最重要的數據結構之一,比如twitter的關注列表,粉絲列表等都可以用Redis的list結構來實現。
List 就是鏈表,相信略有數據結構知識的人都應該能理解其結構。使用List結構,我們可以輕松地實現最新消息排行等功能。List的另一個應用就是消息隊列,
可以利用List的PUSH操作,將任務存在List中,然后工作線程再用POP操作將任務取出進行執行。Redis還提供了操作List中某一段的api,你可以直接查詢,刪除List中某一段的元素。
實現方式:Redis list的實現為一個雙向鏈表,即可以支持反向查找和遍歷,更方便操作,不過帶來了部分額外的內存開銷,Redis內部的很多實現,包括發送緩沖隊列等也都是用的這個數據結構。
Redis的list是每個子元素都是String類型的雙向鏈表,可以通過push和pop操作從列表的頭部或者尾部添加或者刪除元素,這樣List即可以作為棧,也可以作為隊列。?獲取越接近兩端的元素速度越快,但通過索引訪問時會比較慢。
使用場景:
消息隊列系統:使用list可以構建隊列系統,使用sorted set甚至可以構建有優先級的隊列系統。比如:將Redis用作日志收集器,實際上還是一個隊列,多個端點將日志信息寫入Redis,然后一個worker統一將所有日志寫到磁盤。
實現方式如下:
?④?set是string類型的無序集合。集合是通過hashtable實現的,概念和數學中個的集合基本類似,可以交集,并集,差集等等,set中的元素是沒有順序的。所以添加,刪除,查找的復雜度都是O(1)
常用命令:sadd,spop,smembers,sunion 等。
應用場景:Redis set對外提供的功能與list類似是一個列表的功能,特殊之處在于set是可以自動排重的,當你需要存儲一個列表數據,又不希望出現重復數據時,set是一個很好的選擇,并且set提供了判斷某個成員是否在一個set集合內的重要接口,這個也是list所不能提供的。
實現方式如下:
?
⑤?Sorted Set?和 set 一樣也是string類型元素的集合,且不允許重復的成員
常用命令:zadd,zrange,zrem,zcard等
使用場景:Redis sorted set的使用場景與set類似,區別是set不是自動有序的,而sorted set可以通過用戶額外提供一個優先級(score)的參數來為成員排序,并且是插入有序的,即自動排序。當你需要一個有序的并且不重復的集合列表,那么可以選擇sorted set數據結構,比如twitter 的public timeline可以以發表時間作為score來存儲,這樣獲取時就是自動按時間排好序的。和Set相比,Sorted Set關聯了一個double類型權重參數score,使得集合中的元素能夠按score進行有序排列,redis正是通過分數來為集合中的成員進行從小到大的排序。zset的成員是唯一的,但分數(score)卻可以重復。比如一個存儲全班同學成績的Sorted Set,其集合value可以是同學的學號,而score就可以是其考試得分,這樣在數據插入集合的時候,就已經進行了天然的排序。另外還可以用Sorted Set來做帶權重的隊列,比如普通消息的score為1,重要消息的score為2,然后工作線程可以選擇按score的倒序來獲取工作任務。讓重要的任務優先執行。
實現方式如下:
?
14.監聽器、過濾器、Servlet和攔截器的區別
答:
I.servlet:servlet是一種運行服務器端的java應用程序,具有獨立于平臺和協議的特性,
可以動態生成web頁面它工作在客戶端請求與服務器響應的中間層;
II.filter:filter是一個可以復用的代碼片段,可以用來轉換HTTP請求,響應和頭信息。
它不能產生一個請求或者響應,它只是修改對某一資源的請求或者響應;
III.listener:監聽器,通過listener可以堅挺web服務器中某一執行動作,并根據其要求作出相應的響應。
就是在application,session,request三個對象創建消亡或者往其中添加修改刪除屬性時自動執行代碼的功能組件;
IIII.interceptor:攔截器是對過濾器更加細化的應用,他不僅可以應用在service方法前后還可以應用到其他方法的前后
攔截器;
IIIII.servlet,filter,listener是配置到web.xml中,interceptor不配置到web.xml中,spring的攔截器配置到spring.xml中;
15.drop 、truncate和delete的區別
答:drop是刪除一個表,執行drop后,表就不存在了;
truncate是清除表中的數據,清除的同時,表中的索引也會被刪除;
delete是清除表中的數據,但是是一行一行的進行刪除,數據被刪除后,索引還是存在的,只是表中數據被刪除;
?
總結
以上是生活随笔為你收集整理的2020年Java面试题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: jquery获取select选中的文本的
- 下一篇: springboot集成测试时@RunW