Java常見面試題目考點(三) html
一、session共享怎麼作的(分佈式如何實現session共享)? 前端
利用redis 作session共享,方案是重寫服務器中的HttpSession和HttpServletRequest,首先實現HttpSession接口,重寫session的全部方法,將session以hash值的方式存在redis中,一個session的key就是sessionID,setAtrribute重寫以後就是更新 redis 中的數據,getAttribute 重寫以後就是獲取 redis 中的數據,等等須要將 HttpSession 的接口一一實現。java
二、什麼是jsp?什麼是Servlet?jsp和Servlet有什麼區別?** mysql
①jsp本質上就是一個Servlet, 每一個jsp頁面都是一個servlet實例;web
②Servlet是由 Java提供用於開發 web服務器應用程序的一個組件, 用來生成動態內容;面試
區別:ajax
①jsp是html頁面中內嵌的Java代碼,側重頁面顯示; redis
②Servlet是html代碼和Java代碼分離,側重邏輯控制,mvc設計思想中jsp位於視圖層,servlet位於控制層。spring
三、jsp有哪些域對象?** sql
(1)pageContext,在當前jsp頁面有效,跳到其它頁面失效
(2)request,指一次請求範圍內有效,從http請求到服務器處理結束,返回響應的整個過程。在這個過程當中使用forward(請求轉發)方式跳轉多個jsp,在這些頁面裏你均可以使用這個變量
(3)session,指當前會話有效範圍,瀏覽器從打開到關閉過程當中,轉發、重定向都可以使用
(4)application context域-指只能在同一個web中使用,服務器未關閉或者重啓,數據就有效
四、談談你對ajax的認識?**
Ajax是一種建立交互式網頁應用的的網頁開發技術, 經過異步模式,提高了用戶體驗。優化了瀏覽器和服務器之間的傳輸,減小沒必要要的數據往返,減小了帶寬佔用。最大特色是能夠實現局部刷新,在不更新整個頁面的前提下維護數據。
五、經常使用的Linux命令?
列出文件列表:ls
建立目錄和移除目錄:mkdir rmdir
建立文件: touch 文件名稱
打包並壓縮:tar -zcvf
解壓壓縮包: tar -xvf
查找字符串:grep
顯示當前所在目錄:pwd
建立空文件:touch
編輯器:vim vi
刪除:rm -rf
修改: mv 目錄名稱 新目錄名稱
動態打印日誌信息:tail –f 日誌文件
六、Mysql性能優化?**
①當只要一行數據時使用limit 1
②選擇正確的數據庫引擎, MyISAM 適用於一些大量查詢的應用, InnoDB的寫操做比較優秀
③用not exists代替not in
④充分使用索引, B-TREE 仍然是最高效的索引之中的一個
⑤用 NOSQL 的方式使用 MYSQL
4.一、內鏈接與外鏈接的區別?
內鏈接,也被稱爲天然鏈接,只有兩個表相匹配的行才能在結果集中出現。
外鏈接不只包含符合鏈接條件的行,(1)左外鏈接(左邊的表不加限制)(2)右外鏈接(右邊的表不加限制)(3)全外鏈接(左右兩表都不加限制
4.二、mysql行轉列?
mysql中行轉列是經過group_concat()函數來實現的。默認是使用逗號隔開。
五、事務的四大特性是什麼?
①原子性(A):整個事務中的全部操做,要麼所有完成,要麼所有不完成,不可能停滯在中間某個環節, 事務在執行過程當中發生錯誤,會被回滾(Rollback)到開始前的狀態。
②一致性(C):在事務開始以前和事務結束之後,數據庫的完整性約束沒有被破壞。就拿轉帳爲例,A有500元,B有300元,若是在一個事務裏A成功轉給B50元,那麼無論併發多少,無論發生什麼,只要事務執行成功了,那麼最後A帳戶必定是450元,B帳戶必定是350元。
③隔離性(I):一個事務的成功或者失敗對於其餘的事務是沒有影響。2個事務應該相互獨立。
④持久性(D):在事務完成之後,該事務所對數據庫所做的更改便持久的保存在數據庫之中,並不會被回滾。
六、四種隔離級別?
①讀未提交(read uncommitted):也就是髒讀,事務能夠讀取其它事務未提交的數據。(避免)
②讀已提交(read committed):一個事務讀到另外一個事務已經提交的數據。解決了髒讀問題.oracle默認
③可重複讀(repeatable read):在一個事務中讀到的數據始終保持一致,不管另外一個事務是否提交。解決髒讀、不可重複讀,mysql默認
④可串行化(SERIALIZABLE): 同時只能執行一個事務,至關於事務中的單線程
七、在千萬級的數據庫查詢中,如何提升效率?
(1) 數據庫設計方面
a.對查詢進行優化,應儘可能避免全表掃描
b.應儘可能避免在 where 子句中對字段進行 null 值判斷
c.索引並非越多越好,索引當然能夠提升相應的 select 的效率,但同時也下降了 insert 及 update 的效率
d.儘可能使用數字型字段, 是由於引擎在處理查詢和鏈接時會逐個比較字符串中每個字符,而對於數字型而言只須要比較一次就夠了。
e.避免頻繁建立和刪除臨時表,以減小系統表資源的消耗。
(2)語句方面
f.應儘可能避免在 where 子句中使用!=或<>操做符,或者是or來鏈接條件,不然將引擎放棄使用索引而進行全表掃描。
g.任何地方都不要使用 select * from t ,用具體的字段列表代替「*」,不要返回用不到的任何字段
h.用not exists代替not in
(3)java方面
(i)合理利用內存,有的數據要緩存
八、SpringMVC的工做原理
①用戶向服務器發送請求,請求被springMVC前端控制器DispatchServlet捕獲.
②DispatcherServle對請求URL進行解析,獲得請求資源標識符(URL),而後根據該URL調用HandlerMapping將請求映射處處理器HandlerExcutionChain
③DispatchServlet根據得到Handler選擇一個合適的HandlerAdapter適配器處理;
④Handler對數據處理完成之後將返回一個ModelAndView()對象給DisPatchServlet;
⑤Handler 返回的 ModelAndView()只是一個邏輯視圖並非一個正式的視圖,DispatcherSevlet 經過ViewResolver試圖解析器將邏輯視圖轉化爲真正的視圖View;
⑥DispatcherServle 經過 model 解析出 ModelAndView()中的參數進行解析最終展示出完整的 view 並返回給客戶端;
九、SpringMVC經常使用註解都有哪些?**
@requestMapping 用於請求 url 映射。
@RequestBody 註解實現接收 http 請求的 json 數據,將 json 數據轉換爲 java 對象。
@ResponseBody 註解實現將 controller 方法返回對象轉化爲 json 響應給客戶。
springMvc的優化:
①controller能使用單例的話儘可能使用單例,能夠減小建立對象和回收對象的開銷。
②處理request的方法形參務必加上@RequestParam註解,能夠避免springmvc使用asm框架讀取class文件獲取方法參數名的過程。
十、如何解決get和post亂碼問題?**
解決post 請求亂碼:
咱們能夠在web.xml 裏邊配置一個 CharacterEncodingFilter 過濾器。 設置爲 utf-8.
解決get請求的亂碼:
有兩種方法。對於 get 請求中文參數出現亂碼解決方法有兩個:
①修改tomcat 配置文件添加編碼與工程編碼一致。
②另一種方法對參數進行從新編碼String userName = NewString(Request.getParameter(「userName」).getBytes(「ISO8859-1」), 「utf-8」);