Java常見面試題目考點(三)

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」);

相關文章
相關標籤/搜索