2017年5月面试总结
1. 漁夫分魚算法
A,B,C,D,E五個漁夫夜間合伙捕魚,凌晨都疲憊不堪,各自在草叢中熟睡。第二天清晨A先醒來,他把魚均分五份,把多余的一條扔回湖中,便拿了自己的一份回家了,B醒來后,也把魚均分五份,把多余的一條扔回湖中,便拿了自己的一份回家了,C,D,E也按同樣方法分魚。問5人至少捕到多少條魚?
面試官讓五分鐘寫出來,我是不行了,回來后因減1的問題差了5條,害得我花了近二十分鐘。像這種算法,稍有點兒能力的都能寫出來,只是時間問題,干嘛非要較那個真兒。
2.動態代理模式
http://www.cnblogs.com/ktlshy/p/4716838.html
實例:http://www.cnblogs.com/xiaoluo501395377/p/3383130.html
詳解:https://www.ibm.com/developerworks/cn/java/j-lo-proxy1/index.html
http://blog.csdn.net/zcc_0015/article/details/22695647
由于動態生成的代理類也實現了被代理對象的接口,然后在實現代理接口方法中會調用invoke方法。所以通過動態代理類調用被代理對象的某全方法時,就能調用到invoke方法了
3.如何在mysql查找效率慢的SQL語句
參考:http://www.cnblogs.com/kimi9py/p/5735043.html
1. 首先查看是否開啟慢查詢:
SHOW VARIABLES LIKE ‘%quer%’;
1. 開啟慢查詢:slow_query_log
set GLOBAL slow_query_log= on;
這個參數設置為ON,可以捕獲執行時間超過一定數值的SQL語句。
2. 設置慢查詢時間:long_query_time
set GLOBAL long_query_time= 2;
當SQL語句執行時間超過此數值時,就會被記錄到日志中,建議設置為1或者更短。
3. 指定慢查詢日志記錄位置:slow_query_log_file
set GLOBAL slow_query_log_file= 2;
4. 捕獲所有未使用索引的SQL語句 log_queries_not_using_indexes
set GLOBAL log_queries_not_using_indexes= on;
4. 字符串排序
有一個字符串str=”235568523134”;請寫程序將字符串str進行升序排序。(請使用一切可以使用的JDK API,但僅限JDK API)
String str = "235568523134"; char[] arr = str.toCharArray(); // 升序排序 Arrays.sort(arr); // 處理結果 StringBuffer sbs = new StringBuffer(); for(char s :arr){sbs.append(s); }System.out.println("排序后結果是:"+sbs.toString());5.spring事務
請簡單介紹Spring支持的常用數據庫事務傳播屬性和事務隔離級別,及對它們的使用場景?
| propagation_required(常用) | 如果當前沒有事務,就新建一個事務,如果已經存在一個事務中,加入到這個事務中。這是 最常見的選擇。 |
| propagation_supports | 支持當前事務,如果當前沒有事務,就以非事務方式執行。 |
| propagation_mandatory | 使用當前的事務,如果當前沒有事務,就拋出異常。 |
| propagation_requires_new | 新建事務,如果當前存在事務,把當前事務掛起。 |
| propagation_not_supported | 以非事務方式執行操作,如果當前存在事務,就把當前事務掛起。 |
| propagation_never | 以非事務方式執行,如果當前存在事務,則拋出異常。 |
| propagation_nested | 如果當前存在事務,則在嵌套事務內執行。如果當前沒有事務,則執行與 propagation_required類似的操作。此時, 底層的數據源必須基于 JDBC 3.0 ,并且實現者需要支持保存點事務機制。 |
參考:
http://jaeger.blog.51cto.com/11064196/1761660
http://blog.csdn.net/willfcareer/article/details/5695530
Spring事務的隔離級別
| DEFAULT | 這是一個PlatfromTransactionManager默認的隔離級別,使用數據庫默認的事務隔離級別. |
| READ_UNCOMMITTED | 這是事務最低的隔離級別,它充許令外一個事務可以看到這個事務未提交的數據。 這種隔離級別會產生臟讀,不可重復讀和幻像讀。 |
| READ_COMMITTED | 保證一個事務修改的數據提交后才能被另外一個事務讀取。另外一個事務不能讀取該事務未提交的數據 |
| REPEATABLE_READ | 這種事務隔離級別可以防止臟讀,不可重復讀。但是可能出現幻像讀。 |
| SERIALIZABLE | 這是花費最高代價但是最可靠的事務隔離級別。事務被處理為順序執行。除了防止臟讀,不可重復讀外,還避免了幻像讀。 |
什么是臟數據,臟讀,不可重復讀,幻讀?
臟讀: 指當一個事務正在訪問數據,并且對數據進行了修改,而這種修改還沒有提交到數據庫中,這時,另外一個事務也訪問這個數據,然后使用了這個數據。因為這個數據是還沒有提交的數據, 那么另外一個事務讀到的這個數據是臟數據,依據臟數據所做的操作可能是不正確的。
不可重復讀: 指在一個事務內,多次讀同一數據。在這個事務還沒有結束時,另外一個事務也訪問該同一數據。那么,在第一個事務中的兩次讀數據之間,由于第二個事務的修改,那么第一個事務兩次讀到的數據 可能是不一樣的。這樣就發生了在一個事務內兩次讀到的數據是不一樣的,因此稱為是不可重復讀。
幻讀: 指當事務不是獨立執行時發生的一種現象,例如第一個事務對一個表中的數據進行了修改,這種修改涉及到表中的全部數據行。同時,第二個事務也修改這個表中的數據,這種修改是向表中插入一行新數據。那么,以后就會發生操作第一個事務的用戶發現表中還有沒有修改的數據行,就好象發生了幻覺一樣。
3.springMVC底層實現
4. mybatis底層實現原理
5.mybatis里的“#”與“$”的區別
6.描述mybatis里的resultMap
總結
以上是生活随笔為你收集整理的2017年5月面试总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: springMVC实现文件下载(附带Se
- 下一篇: 网站的Http请求转为Https请求