尚硅谷 Java面試題 第一季 - 20181221

SSM

1、SpringBean的做用域之間有什麼區別?

其實就是scope屬性裏設置singleton | prototype 兩個屬性,默認是singleton單例的
prototype是多實例。
其餘的request:每次HTTP請求會建立新的bean,該做用域僅適用於WebApplicationContext環境。
session:同一個HTTP session共享bean,該做用域僅適用於WebApplicationContext環境。java

2、Spring支持的經常使用數據庫事務傳播屬性和事務隔離級別?

3、SpringMVC解決中如何解決POST請求中文亂碼問題

springmvc提供了過濾器CharacterEncodingFilter:這個類有兩個變量String類型的encoding、boolean類型forceEncoding默認false,核心方法doFilterInternal,方法中有request.setCharacterEncoding設置請求字符集,設force那個爲true的話,能夠設置response.setCharacterEncoding。
那麼在web.xml裏須要配置這一屬性:git

<!--post方式字符集-->
<filter>
    <filter-name>CharacterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <!--初始化參數-->
    <init-param>
         <param-name>encoding</param-name>
         <param-value>UTF-8</param-value>
     </init-param>
     <!--響應亂碼,可設可不設-->
     <init-param>
         <param-name>force-encoding</param-name>
         <param-value>UTF-8</param-value>
     </init-param>
</filter>
<filter-mapping>
     <filter-name>CharacterEncodingFilter</filter-name>
     <url-pattern>/*</url-pattern>
</filter-mapping>

get方式,修改Tomcat的server.xml中的配置。web

4、簡單的談一下SpringMVC的工做流程

springmvc在處理模型數據有兩種方式:方式一.返回值是ModelAndView、方式二.在參數中傳入Map,Model或者ModelMap;最後都會轉換爲一個 ModelAndView對象(因此是以request做用域來響應用戶)
流程以下圖:
在這裏插入圖片描述redis

總結
請求過來後,先到DispatcherServlet中央處理器,以後它會調用處理器映射器找到HandlerMapping處理器映射器裏的方法,返回HandlerExecultionChain對象,這個對象包含了全部的攔截器和處理器。
以後拿到HandlerAdapter處理器適配器,由它找到對應的處理器去調用請求,至關於調用controller以後,會返回ModelAndView對象,這個對象返回到中央處理器。
中央處理器經過咱們在springmvc配置文件中配的InternalResourceViewResolver視圖解析器,獲得視圖InternalResourceView。
獲得視圖以後,調用裏邊的方法進行渲染視圖,將咱們的模型數據,在頁面給用戶呈現出來,響應給用戶。算法

5、MyBatis中當實體類中的屬性名和表中的字段名不同,怎麼辦?(三種解決方案)

  1. 寫sql語句時起別名
  2. 在MyBatis的全局配置文件中開啓駝峯命名規則(前提只是將數據庫中下劃線映射)
  3. 在Mapper映射文件中使用ResultMap自定義映射

Java高級

1、Linux經常使用服務類相關命令

CentOS 6spring

  • 經常使用基本命令-進程類
  • 註冊在系統中的標準化程序
    • service 服務名 start
    • service 服務名 stop
    • service 服務名 restart
    • service 服務名 reload
    • service 服務名 status
  • 經過chkconfig 命令設置自啓動程序
    • chkcongfig --list #能夠查看全部對應服務自啓動狀態開關
    • chkcongfig --level 3 服務名 off #on自啓動、off不自啓動

運行級別runlevel(centos6),經常使用級別3和5
0 停機、1 單用戶root狀態、2 多用戶狀態、3 有網多用戶狀態、4. 保留、5 圖形模式、六、重啓sql

CentOS 7數據庫

  • 註冊在系統中的標準化程序
    • systemctl start 服務名
    • systemctl restart 服務名
    • systemctl stop 服務名 #示例:停防火牆 systemctl stop firewalld
    • systemctl reload 服務名
    • systemctl status 服務名
  • 查看服務的命令
    • systemctl list-unit-files #示例:systemctl list-unit-files |grep firewalld
    • systemctl --type service
  • 設置自啓動/不自啓動
    • systemctl enable 服務名
    • systemctl disable 服務名

2、git分支相關命令

Git:分佈式版本控制工具json

  1. 建立分支centos

  2. 切換分支

    一步完成:git checkout -b <分支名> #直接就完成了建立,並切換過去了

  3. 合併分支

    先切換到主幹 git checkout master
    git merge <分支名>

  4. 刪除分支

    先切換到主幹 git checkout master
    git branch -D <分支名>
    在這裏插入圖片描述

工做流:
master分支,分出多個develop分支,並行開發互不影響;出現bug了,能夠有master分出一個臨時分支,處理完後再合併到master中合併上線;以後將臨時分支合併到develop分支,保證版本一致,避免bug重複出現。
開發人員開發完成了,先合併到dev分支,建立測試分支進行測試,沒問題了在合併到master上線,以後再和dev合併保證一致。

3、redis持久化幾種類型及區別?

兩種:

  • RDB(Redis DataBase)快照,將全部內存數據進行全量保存 ;優勢:省空間,效率高;缺點:數據量大耗性能,最後一次持久化可能數據丟失

  • AOF(Append Of File)日誌,以日誌形式來記錄每一個寫操做增量操做 ;優勢:備份穩健,可讀日誌處理誤操做;缺點:佔更多磁盤,備份慢,佔性能

4、Mysql建索引的時機?

MySQL官方定義:索引(Index)是幫助MySQL高效獲取數據的數據結構。簡而言之,索引本質是數據結構。

優:提升檢索效率,下降數據庫IO成本;經過索引列對數據進行排序,下降排序成本,下降cpu消耗。

劣:下降更新表的速度,由於更新表時,不只要保存數據,還要保存索引更新了的索引列字段,不斷調整索引信息。

實際上,索引也是一張表,該表保存了主鍵與索引字段,並指向實體表的記錄,因此索引列也要佔用空間

  • 建立索引

主鍵自動惟1、頻繁查詢字段、外鍵關聯字段、組合索引性價比高、排序字段、統計或分組字段(分組更傷性能)

  • 不建立索引

表記錄太少、頻繁增刪改、where用不到字段、過濾性很差字段(例:性別)

5、JVM垃圾回收機制 - GC發生在JVM哪部分,有幾種GC,它們的算法是什麼?

GC發生在heap堆中。
GC是分代收集算法:頻繁收集年輕代``Minor GC、次數較少老年代``Full GC、永久區不GC
GC的四大算法:

  1. 引用回收算法(對象有引用,就不回收,已淘汰,沒法處理循環引用)
  2. 複製算法(發生在YG、效率高,無碎片,佔空間)
  3. 標記清楚(發生在OG、省空間,產生碎片)
  4. 標記壓縮(OG、成本高)
  5. 標記清除壓縮(OG、③④混合)

Java項目

1、redis在項目中的使用場景 (各數據類型)

  • String
    綁定ip地址,能夠記錄ip地址的操做。

  • Hash
    存儲用戶信息【id,name,age】
    Hset(key,field,value)
    Hset(userKey,id,101)
    當我修改用戶信息某一項屬性的時候,能夠直接取出單一的值。
    不建議使用String類型是由於,在反序列化時,會所有序列化出來,會增長IO次數,下降性能。

  • List
    實現最新消息的排行
    還能夠利用List的push命令,將任務存在list集合中,同時使用另外一個命令,將任務從集合中取出[pop]。
    Redis — List 數據類型來模擬消息隊列。【電商中的秒殺就能夠採用這種方式來完成一個秒殺活動】

  • Set
    特殊之處:能夠自動排重(非重複)。好比說微博中將每一個人的好友存在集合(Set)中
    這樣求兩我的的共通好友的操做。咱們只須要求交集便可。

  • Zset (SortedSet)
    以某一個條件爲權重,進行排序。 京東:商品詳情的時候,都會有一個綜合排名,還能夠按照價格進行排名。

2、ES和solr的區別?

它們都是基於Lucene搜索服務器基礎上開發,高性能的企業級搜索服務。【它們都是基於分詞技術構建的倒排索引方式進行查詢】
區別:

  1. 當實時創建索引的時候,solr會產生io阻塞,而es則不會,es查詢性能高於solr。
  2. 在不斷動態添加數據的時候,solr的檢索效率會降低,es則不會。
  3. Solr利用zk進行分佈式管理,es自身帶有分佈式系統管理功能。Solr的本質是web項目,須要部署到web服務器上,啓動服務器時需配置solr。
  4. Solr支持更多的格式數據[xml、json、csv],而es僅支持json文件格式。
  5. Solr是傳統搜索應用的有力解決方案,可是es更適合新興實時搜索應用。【solr適合已有數據搜索時,效率更好;須要動態增添數據時,es效率更高】
  6. solr的觀望提供功能更多,es更注重核心搜索功能,高級功能須要三方集成。
  • Solr集羣圖
    11
    在這裏插入圖片描述

  • ElasticSearch集羣圖
    在這裏插入圖片描述

3、單點登陸實現過程?

單點登陸:一處登陸、多處使用
(前提:單點登陸多使用在分佈式系統中)
【京東:單點登陸是將token放入到cookie中】

4、購物車實現過程?

  • 購物車跟用戶的關係!
    不管買多少商品,一個用戶必須對應一個購物車。單點登陸在購物車以前。
  • 跟購物車有關操做
  1. 添加購物車
    用戶未登陸:數據保存到Redis【京東將未登陸購物車放在redis中,給未登陸用戶存儲惟一標識uuid,保存用戶未登陸時的購物車信息】、cookie
    用戶登陸:Redis緩存[hash或string:hset(key,field,value)],讀寫速度快;保證數據安全性,將數據存到數據庫中。
  2. 展現購物車
    未登陸狀態:直接從cookie中取得數據展現便可
    登陸狀態:用戶一旦登陸,必須顯示數據庫或Redis以及cookie中的購物車綜合數據

5、消息隊列的使用?

分佈式系統中處理高併發的情景。
因爲高併發的環境下,來不及同步處理大量請求,則會致使請求發生阻塞。這是使用消息隊列的異步通訊能夠解決問題。

在這裏插入圖片描述 消息隊列弊端: 消息的不肯定性,延遲隊列,輪詢技術來解決該問題便可!(ActiveMQ java)

相關文章
相關標籤/搜索