整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          "不敢去懷疑代碼,又不得不懷疑代碼"記一次網絡請求超時分析

          要:此次定位,頗為復雜,而且有時讓人沒有思路,因為同一個接口,換一個環境又好使了,又不敢去懷疑代碼;然而有問題的環境,換一個接口也好使了,又不得不懷疑代碼

          本文分享自華為云社區《一次網絡請求超時分析-云社區-華為云》,作者:xiewenci 。

          問題現象

          發起http請求,后端服務接口/v5/iot/11c9c88e6fb26bead43b75514dc380eb/routing-rule/rules?limit=10&marker=ffffffffff&offset=0,一直等待,一分鐘后返回響應,且中文亂碼顯示

          分析過程

          1. 首先定界,在正常環境和異常環境換一樣的版本代碼,測試同樣接口,但是正常環境正常,異常環境還是等待1分鐘,所以覺得是環境問題,于是下一步,抓包
          2. 分別再異常環境和正常環境抓包,具體流信息見下圖:

          異常環境的流信息

          正常環境的流信息

          從圖中看出正常環境是,服務端發送響應完成之后,由客戶端正常返回ACK,然后由客戶端發起FIN斷鏈請求。而異常環境則是服務端發送響應完成之后,客戶端也回了ACK,但是沒有主動發起斷鏈請求,直到超過keep-alive時間之后,由服務端發起了斷鏈請求(因為超時主動斷鏈)。現象是客戶端一直在等服務端發送響應(可能沒有發送完),所以懷疑服務端有緩存之類,沒有及時將響應流發送出去,所以繼續查看代碼

          3. 查看代碼,在返回客戶端的時候,沒有flush和close操作,代碼如下

          然后以為找到問題原因所在了,就嘗試修改代碼,如下:

          增加了flush操作和close操作(放在了try語快中),最后測試執行,還是跟最初的現象一致,還是會等待1分鐘后才會返回響應。這時就有點納悶了,再重新仔細分析,其實從流中可以看出來,服務端的響應是立馬返回給了客戶端的,如下圖

          既然給了響應,那為什么客戶端為什么還要繼續等待呢?這里有注意到圖中有幾個問號,這其實是中文字符亂碼了,所以這里又懷疑是不是編碼格式導致客戶端收到的Content-Length長度和收到的響應的長度不一致,也就是客戶端實際收到的響應的長度小于Content-Length的長度,然后一直等待下去,所以繼續修改代碼代碼

          4. 修改代碼,指定編碼格式為UTF-8,代碼如下:

          替換環境版本,測試執行,響應就立馬返回了,果然是這個編碼格式的鍋

          原因回顧

          1. 編碼格式不一致就會導致響應流的實際長度不一致?答案是一定的,編碼格式不一致,實際長度就是會不一致,測試結果如下:

          2. 為什么之前的沒有出現過這個問題?是什么原因導致編碼格式丟失的

          查看后端服務jar包,發現spring版本已經升級到5.2.21.RELEASE,此版本中沒有指定默認編碼格式為UTF-8

          所以需要后端服務去指定編碼格式,或者網關服務統一處理

          總結與思考

          此次定位,頗為復雜,而且有時讓人沒有思路,因為同一個接口,換一個環境又好使了,又不敢去懷疑代碼;然而有問題的環境,換一個接口也好使了,又不得不懷疑代碼;還有就是在容器中去調用接口,也是一樣的問題,所以感覺又跟網絡沒啥關系。其實應該靜下心來去思考為什么客戶端那里一直等待,沒有主動發起斷鏈,這里還是說明了對HTTP協議細節,不夠熟練掌握,才導致中間走了一些誤區,需要去鞏固和加深對http協議的理解。

          點擊下方,第一時間了解華為云新鮮技術~

          華為云博客_大數據博客_AI博客_云計算博客_開發者中心-華為云

          、Thymeleaf簡介

          • Thymeleaf是用來開發Web和獨立環境項目的服務器端的Java模版引擎
          • Spring官方支持的服務的渲染模板中,并不包含jsp。而是Thymeleaf和Freemarker等,而Thymeleaf與SpringMVC的視圖技術,及SpringBoot的自動化配置集成非常完美,幾乎沒有任何成本,你只用關注Thymeleaf的語法即可。

          二、Thymeleaf的特點

          • 動靜結合:Thymeleaf 在有網絡和無網絡的環境下皆可運行,即它可以讓美工在瀏覽器查看頁面的靜態效果,也可以讓程序員在服務器查看帶數據的動態頁面效果。這是由于它支持 html 原型,然后在 html 標簽里增加額外的屬性來達到模板+數據的展示方式。瀏覽器解釋 html 時會忽略未定義的標簽屬性,所以 thymeleaf 的模板可以靜態地運行;當有數據返回到頁面時,Thymeleaf 標簽會動態地替換掉靜態內容,使頁面動態顯示。
          • 開箱即用:它提供標準和spring標準兩種方言,可以直接套用模板實現JSTL、 OGNL表達式效果,避免每天套模板、該jstl、改標簽的困擾。同時開發人員也可以擴展和創建自定義的方言。
          • 多方言支持:Thymeleaf 提供spring標準方言和一個與 SpringMVC 完美集成的可選模塊,可以快速地實現表單綁定、屬性編輯器、國際化等功能。
          • 與SpringBoot完美整合,SpringBoot提供了Thymeleaf的默認配置,并且為Thymeleaf設置了視圖解析器,我們可以像以前操作jsp一樣來操作Thymeleaf。代碼幾乎沒有任何區別,就是在模板語法上有區別。

          三.ssm中添加thymeleaf

          1.導入jar包

          <dependency>
            <groupId>org.thymeleaf</groupId>
            <artifactId>thymeleaf</artifactId>
            <version>3.0.9.RELEASE</version>
          </dependency>
          
          <dependency>
            <groupId>org.thymeleaf</groupId>
            <artifactId>thymeleaf-spring4</artifactId>
            <version>3.0.9.RELEASE</version>
          </dependency>
          

          2.在springmvc.xml文件中設置視圖解析器為thymeleaf解析

          <!-- 使用thymeleaf解析 -->
          
          <bean id="templateResolver"
          
                class="org.thymeleaf.spring4.templateresolver.SpringResourceTemplateResolver">
          
              <property name="prefix" value="/WEB-INF/views/" />
          
              <property name="suffix" value=".html" />
          
              <property name="templateMode" value="HTML" />
          
              <property name="cacheable" value="false" />
          
              <property name="characterEncoding" value="UTF-8"/><!--不加會亂碼-->
          
          </bean>
          
          <bean id="templateEngine"
          
                class="org.thymeleaf.spring4.SpringTemplateEngine">
          
              <property name="templateResolver" ref="templateResolver" />
          
          </bean>
          
          <bean class="org.thymeleaf.spring4.view.ThymeleafViewResolver">
          
              <property name="templateEngine" ref="templateEngine" />
          
              <!--解決中文亂碼-->
          
              <property name="characterEncoding" value="UTF-8"/>
          
          </bean>
          

          3.刪除之前視圖解析器為jsp的配置信息,如果兩個都配置,誰在前面,用誰

          <!-- 配置視圖解析器 -->
          
          <!--<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">-->
              <!--<property name="prefix" value="/WEB-INF/" />-->
              <!--<property name="suffix" value=".jsp" />-->
          <!--</bean>-->
          

          4.配置web.xml文件中thymeleaf部分

           
            <context-param>
              <param-name>contextConfigLocation</param-name>
              <param-value>classpath:applicationContext-ioc.xml</param-value>
            </context-param>
            
            <listener>
              <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
            </listener>
           
           <servlet>
            <servlet-name>springMVC</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
          
            <!--SpringMVC配置文件的名字  <servlet-name>-servlet.xml
                默認位置:src / resources
              如果放在了 src/resources(maven)
                    contextConfigLocation:classpath:文件名即可!
                    Web-INF/xx.xml
                    contextConfigLocation:/WEB-INF/xx.xml
            -->
          
            <init-param>
              <param-name>contextConfigLocation</param-name>
              <param-value>classpath:springmvc.xml</param-value>
            </init-param>
          
            <load-on-startup>1</load-on-startup>
          </servlet>
          <!-- 訪問DispatcherServlet對應的路徑 -->
          <servlet-mapping>
            <servlet-name>springMVC</servlet-name>
            <url-pattern>/</url-pattern> <!--/不過濾jsp防止死循環-->
          </servlet-mapping>
          
          <!--配置thymeleaf  -->
          
          <servlet-mapping>
          
            <servlet-name>springMVC</servlet-name>
          
            <url-pattern>*.html</url-pattern>
          
          </servlet-mapping>
          

          5.創建控制器

          package com.test.action;
          
          import org.springframework.stereotype.Controller;
          import org.springframework.ui.Model;
          import org.springframework.web.bind.annotation.RequestMapping;
          
          @Controller
          @RequestMapping("thymeleaf")
          public class ThymeleafAction {
          
              @RequestMapping("/testThymeleaf")
              public String testThymeleaf(Model model)
              {
                  model.addAttribute("uname","zhangsan");
          
                  return "testThymeleaf";// WEB-INF/views/testThymeleaf.html
              }
          }
          

          6.創建html頁面

          根據之前設置的前綴

          在web-inf/views/文件夾下創建html文件

          訪問傳遞過來的數據,注意聲明Thymeleaf命名空間

          <!DOCTYPE html>
          <html lang="en" xmlns="http://www.w3.org/1999/xhtml" 
                xmlns:th="http://www.thymeleaf.org">
          <head>
              <meta charset="UTF-8">
              <title>Title</title>
          </head>
          <body>
          <h1 th:text="${uname}">aaaa</h1>
          </body>
          </html>
          

          7.測試

          ? http://localhost:8080/testssm/thymeleaf/testThymeleaf

          ? 成功

          ?

          張三

          四.常用th屬性解讀

          html有的屬性,Thymeleaf基本都有,而常用的屬性大概有七八個。其中th屬性執行的優先級從1~8,數字越低優先級越高。

          一、th:text :設置當前元素的文本內容,相同功能的還有th:utext,兩者的區別在于前者不會轉義html標簽,后者會。優先級不高:order=7

          二、th:value:設置當前元素的value值,類似修改指定屬性的還有th:srcth:href。優先級不高:order=6

          三、th:each:遍歷循環元素,和th:text或th:value一起使用。注意該屬性修飾的標簽位置,詳細往后看。優先級很高:order=2

          四、th:if:條件判斷,類似的還有th:unlessth:switchth:case。優先級較高:order=3

          五、th:insert:代碼塊引入,類似的還有th:replaceth:include,三者的區別較大,若使用不恰當會破壞html結構,常用于公共代碼塊提取的場景。優先級最高:order=1

          六、th:fragment:定義代碼塊,方便被th:insert引用。優先級最低:order=8

          七、th:object:聲明變量,一般和*{}一起配合使用,達到偷懶的效果。優先級一般:order=4

          八、th:attr:修改任意屬性,實際開發中用得較少,因為有豐富的其他th屬性幫忙,類似的還有th:attrappend,th:attrprepend。優先級一般:order=5

          五.基礎使用語法

          1.創建HTML

          由上文也可以知道需要在html中添加:

          <html xmlns:th="http://www.thymeleaf.org">
          

          這樣,下文才能正確使用th:*形式的標簽!

          2.獲取變量值${…}

          通過**${…}進行取值,這點和ONGL表達式語法一致!**

            <h1 th:text="${uname}"></h1>
            <input type="text" th:value="${uname}" />
            
          

          選擇變量表達式*{…}


          <div th:object="${items}">
              <p th:text="*{name}" >產品名</p>
              <p th:text="*{detail}" >產品名</p>
          </div>
          


          至于p里面的原有的值只是為了給前端開發時做展示用的.這樣的話很好地做到了前后端分離。

          這也是Thymeleaf非常好的一個特性:在無網絡的情況下也能運行,也就是完全可以前端先寫出頁面,模擬數據展現效果,后端人員再拿此模板修改即可!

          3.鏈接表達式: @{…}

          用來配合link src href使用的語法,類似的標簽有:th:hrefth:src

          鏈接表達式結構

          無參:@{/xxx}

          有參:@{/xxx(k1=v1,k2=v2)} 對應url結構:xxx?k1=v1&k2=v2

          引入本地資源:@{/項目本地的資源路徑}

          引入外部資源:@{/webjars/資源在jar包中的路徑}

          列舉:第三部分的實戰引用會詳細使用該表達式

          <link th:href="@{/webjars/bootstrap/4.0.0/css/bootstrap.css}" rel="stylesheet">
          <link th:href="@{/main/css/itdragon.css}" rel="stylesheet">
          <form class="form-login" th:action="@{/user/login}" th:method="post" >
          <a class="btn btn-sm" th:href="@{/login.html(l='zh_CN')}">中文</a>
          <a class="btn btn-sm" th:href="@{/login.html(l='en_US')}">English</a>
          <a href="details.html" th:href="@{/thymeleaf/showItemsById(id=${items.id})}">view</a>
              
          

          4.${…}變量表達式

          變量表達式有豐富的內置方法,使其更強大,更方便。

          變量表達式功能

          一、可以獲取對象的屬性和方法

          二、可以使用ctx,vars,locale,request,response,session,servletContext內置對象

          三、可以使用dates,numbers,strings,objects,arrays,lists,sets,maps等內置方法(重點介紹)

          常用的內置對象

          一、ctx :上下文對象。

          二、vars :上下文變量。

          三、locale:上下文的語言環境。

          四、request:(僅在web上下文)的 HttpServletRequest 對象。

          五、response:(僅在web上下文)的 HttpServletResponse 對象。

          六、session:(僅在web上下文)的 HttpSession 對象。

          七、servletContext:(僅在web上下文)的 ServletContext 對象

          這里以常用的Session舉例,用戶刊登成功后,會把用戶信息放在Session中,Thymeleaf通過內置對象將值從session中獲取。

          // java 代碼將用戶名放在session中
          session.setAttribute("userinfo",username);
          // Thymeleaf通過內置對象直接獲取
          th:text="${session.userinfo}"
          

          常用的內置方法

          一、strings:字符串格式化方法,常用的Java方法它都有。比如:equals,equalsIgnoreCase,length,trim,toUpperCase,toLowerCase,indexOf,substring,replace,startsWith,endsWith,contains,containsIgnoreCase等

          二、numbers:數值格式化方法,常用的方法有:formatDecimal等

          三、bools:布爾方法,常用的方法有:isTrue,isFalse等

          四、arrays:數組方法,常用的方法有:toArray,length,isEmpty,contains,containsAll等

          五、listssets:集合方法,常用的方法有:toList,size,isEmpty,contains,containsAll,sort等

          六、maps:對象方法,常用的方法有:size,isEmpty,containsKey,containsValue等

          七、dates:日期方法,常用的方法有:format,year,month,hour,createNow等

          文章底部提供了對應的官網鏈接

          <!DOCTYPE html>
          <html lang="en" xmlns:th="http://www.thymeleaf.org">
          <head>
              <meta charset="UTF-8">
              <title>ITDragon Thymeleaf 內置方法</title>
          </head>
          <body>
              <h2>ITDragon Thymeleaf 內置方法</h2>
              <h3>#strings </h3>
              <div th:if="${not #strings.isEmpty(itdragonStr)}" >
                  <p>Old Str : <span th:text="${itdragonStr}"/></p>
                  <p>toUpperCase : <span th:text="${#strings.toUpperCase(itdragonStr)}"/></p>
                  <p>toLowerCase : <span th:text="${#strings.toLowerCase(itdragonStr)}"/></p>
                  <p>equals : <span th:text="${#strings.equals(itdragonStr, 'itdragonblog')}"/></p>
                  <p>equalsIgnoreCase : <span th:text="${#strings.equalsIgnoreCase(itdragonStr, 'itdragonblog')}"/></p>
                  <p>indexOf : <span th:text="${#strings.indexOf(itdragonStr, 'r')}"/></p>
                  <p>substring : <span th:text="${#strings.substring(itdragonStr, 2, 8)}"/></p>
                  <p>replace : <span th:text="${#strings.replace(itdragonStr, 'it', 'IT')}"/></p>
                  <p>startsWith : <span th:text="${#strings.startsWith(itdragonStr, 'it')}"/></p>
                  <p>contains : <span th:text="${#strings.contains(itdragonStr, 'IT')}"/></p>
              </div>
          
              <h3>#numbers </h3>
              <div>
                  <p>formatDecimal 整數部分隨意,小數點后保留兩位,四舍五入: <span th:text="${#numbers.formatDecimal(itdragonNum, 0, 2)}"/></p>
                  <p>formatDecimal 整數部分保留五位數,小數點后保留兩位,四舍五入: <span th:text="${#numbers.formatDecimal(itdragonNum, 5, 2)}"/></p>
              </div>
          
              <h3>#bools </h3>
              <div th:if="${#bools.isTrue(itdragonBool)}">
                  <p th:text="${itdragonBool}"></p>
              </div>
          
              <h3>#arrays </h3>
              <div th:if="${not #arrays.isEmpty(itdragonArray)}">
                  <p>length : <span th:text="${#arrays.length(itdragonArray)}"/></p>
                  <p>contains : <span th:text="${#arrays.contains(itdragonArray, 5)}"/></p>
                  <p>containsAll : <span th:text="${#arrays.containsAll(itdragonArray, itdragonArray)}"/></p>
              </div>
              <h3>#lists </h3>
              <div th:if="${not #lists.isEmpty(itdragonList)}">
                  <p>size : <span th:text="${#lists.size(itdragonList)}"/></p>
                  <p>contains : <span th:text="${#lists.contains(itdragonList, 0)}"/></p>
                  <p>sort : <span th:text="${#lists.sort(itdragonList)}"/></p>
              </div>
              <h3>#maps </h3>
              <div th:if="${not #maps.isEmpty(itdragonMap)}">
                  <p>size : <span th:text="${#maps.size(itdragonMap)}"/></p>
                  <p>containsKey : <span th:text="${#maps.containsKey(itdragonMap, 'thName')}"/></p>
                  <p>containsValue : <span th:text="${#maps.containsValue(itdragonMap, '#maps')}"/></p>
              </div>
              <h3>#dates </h3>
              <div>
                  <p>format : <span th:text="${#dates.format(itdragonDate)}"/></p>
                  <p>custom format : <span th:text="${#dates.format(itdragonDate, 'yyyy-MM-dd HH:mm:ss')}"/></p>
                  <p>day : <span th:text="${#dates.day(itdragonDate)}"/></p>
                  <p>month : <span th:text="${#dates.month(itdragonDate)}"/></p>
                  <p>monthName : <span th:text="${#dates.monthName(itdragonDate)}"/></p>
                  <p>year : <span th:text="${#dates.year(itdragonDate)}"/></p>
                  <p>dayOfWeekName : <span th:text="${#dates.dayOfWeekName(itdragonDate)}"/></p>
                  <p>hour : <span th:text="${#dates.hour(itdragonDate)}"/></p>
                  <p>minute : <span th:text="${#dates.minute(itdragonDate)}"/></p>
                  <p>second : <span th:text="${#dates.second(itdragonDate)}"/></p>
                  <p>createNow : <span th:text="${#dates.createNow()}"/></p>
              </div>
          </body>
          </html>
          

          后臺給負責給變量賦值,和跳轉頁面。

          @RequestMapping("varexpressions")
          public String varexpressions(ModelMap map) {
            map.put("itdragonStr", "itdragonBlog");
            map.put("itdragonBool", true);
            map.put("itdragonArray", new Integer[]{1,2,3,4});
            map.put("itdragonList", Arrays.asList(1,3,2,4,0));
            Map itdragonMap = new HashMap();
            itdragonMap.put("thName", "${#...}");
            itdragonMap.put("desc", "變量表達式內置方法");
            map.put("itdragonMap", itdragonMap);
            map.put("itdragonDate", new Date());
            map.put("itdragonNum", 888.888D);
            return "grammar/varexpressions";
          }
          

          ?

          5.運算符

          數學運算

          • 二元操作:+, - , * , / , %
          • 一元操作: - (負)

          邏輯運算

          • 一元 : and or
          • 二元 : !,not

          比較運算(為避免轉義尷尬,可以使用括號中的英文進行比較運算!)

          • 比較:> , < , >= , <= ( gt , lt , ge , le )
          • 等于:== , != ( eq , ne )

          條件運算

          • If-then: (if) ? (then)
          • If-then-else: (if) ? (then) : (else)
          • Default: (value) ?: (defaultvalue)

          6.選擇

          if/unless

          使用th:if和th:unless屬性進行條件判斷,th:unless于th:if恰好相反,只有表達式中的條件不成立,才會顯示其內容。

           <td ><span th:if="${items.price gt 1000}" >精品</span></td>
           
           <td ><span th:unless="${items.price gt 1000}" >次品</span></td>
          

          switch

          <div th:switch="${items.name}">
            <p th:case="'aa'">aaaaaaaaa</p>
            <p th:case="'bb'">bbbbbbb</p>
            <p th:case="'cc'">cccccccc</p>
          </div>
          

          7.循環

          th:each

          thymeleaf的th:each常見用法
          一.th:eath迭代集合用法:
          <table border="1" id="stuTable">
              <tr>
                  <td>是否選中</td>
                  <td>編號</td>
                  <td>姓名</td>
                  <td>年齡</td>
              </tr>
              <tr th:each="stu,userStat:${studentList}" >
                  <td><input th:type="checkbox" th:name="id" th:value="${stu.id}"></td>
                  <td th:text="${stu.id}">編號</td>
                  <td th:text="${stu.name}">姓名</td>
                  <td th:text="${stu.age}">年齡</td>
              </tr>
          </table>
          二.迭代下標變量用法:
          狀態變量定義在一個th:每個屬性和包含以下數據:
          
          1.當前迭代索引,從0開始。這是索引屬性。index
          
          2.當前迭代索引,從1開始。這是統計屬性。count
          
          3.元素的總量迭代變量。這是大小屬性。 size
          
          4.iter變量為每個迭代。這是目前的財產。 current
          
          5.是否當前迭代是奇數還是偶數。這些even/odd的布爾屬性。
          
          6.是否第一個當前迭代。這是first布爾屬性。
          
          7.是否最后一個當前迭代。這是last布爾屬性。
          
          用法實例:
          
          <table border="1" id="stuTable">
              <tr>
                  <td>是否選中</td>
                  <td>編號</td>
                  <td>姓名</td>
                  <td>年齡</td>
              </tr>
              <tr th:each="stu,userStat:${studentList}" th:class="${userStat.odd}?'odd':'even'">
                  <td th:text="${userStat.index}"></td>
                  <td><input th:type="checkbox" th:name="id" th:value="${stu.id}"></td>
                  <td th:text="${stu.id}">編號</td>
                  <td th:text="${stu.name}">姓名</td>
                  <td th:text="${stu.age}">年齡</td>
              </tr>
          </table>
          

          控制器端代碼:

          package com.test.action;
          
          import com.test.pojo.Items;
          import org.springframework.stereotype.Controller;
          import org.springframework.ui.Model;
          import org.springframework.web.bind.annotation.RequestMapping;
          
          import java.util.ArrayList;
          import java.util.Date;
          import java.util.List;
          
          @Controller
          @RequestMapping("thymeleaf")
          public class ThymeleafAction {
          
              @RequestMapping("/testThymeleaf")
              public String testThymeleaf(Model model)
              {
                  model.addAttribute("uname","zhangsan");
          
                  Items items=new Items();
          
                  items.setId(1);
          
                  items.setName("iphone");
          
                  items.setDetail("9999");
          
                  items.setPrice(6000);
          
                  model.addAttribute("items",items);
          
                  List<Items> itemsList=new ArrayList<Items>();
          
                  itemsList.add(new Items(101,"aa",1000,"aaa","1.jpg",new Date()));
                  itemsList.add(new Items(102,"bb",1000,"aaa","1.jpg",new Date()));
                  itemsList.add(new Items(103,"cc",1000,"aaa","1.jpg",new Date()));
          
                  model.addAttribute("itemsList",itemsList);
          
          
          
                  return "testThymeleaf";
              }
          
              @RequestMapping("/showItemsById")
              public String showItemsById(Model model,int id)
              {
                  model.addAttribute("id",id);
          
                   return "showItemsById";
          
              }
          
          
          
          }
          

          tems);

              List<Items> itemsList=new ArrayList<Items>();
          
              itemsList.add(new Items(101,"aa",1000,"aaa","1.jpg",new Date()));
              itemsList.add(new Items(102,"bb",1000,"aaa","1.jpg",new Date()));
              itemsList.add(new Items(103,"cc",1000,"aaa","1.jpg",new Date()));
          
              model.addAttribute("itemsList",itemsList);
          
          
          
              return "testThymeleaf";
          }
          
          @RequestMapping("/showItemsById")
          public String showItemsById(Model model,int id)
          {
              model.addAttribute("id",id);
          
               return "showItemsById";
          
          }
          

          }

          大廠是大部分程序員的夢想,而進大廠的門檻也是比較高的,所以這里整理了一份阿里、美團、滴滴、頭條等大廠面試大全其中概括的知識點有:Java基礎、spring、springmvc、springboot、springcloud、JVM、Tomcat、dubbo、netty、zookeeper共有500+道面試題

          面試題整理十分全面,文末還有答案解析!(文章比較長,耐心看完,讓你面試提升一大截!)

          獲取以下面試專題答案的朋友們請轉發此文關注我私信回復“面試資料”即可獲取

          Java基礎

          1. Java概述
          2. 何為編程
          3. 什么是Java
          4. jdk1.5之后的三大版本
          5. JVM、JRE和JDK的關系
          6. 什么是跨平臺性?原理是什么
          7. Java語言有哪些特點
          8. 什么是字節碼?采用字節碼的最大好處是什么
          9. 什么是Java程序的主類?應用程序和小程序的主類有何不同?
          10. Java應用程序與小程序之間有那些差別?
          11. Java和C++的區別
          12. Oracle JDK 和 OpenJDK 的對比
          13. 基礎語法
          14. 數據類型
          15. Java有哪些數據類型
          16. switch 是否能作用在 byte 上,是否能作用在 long 上,是否能作用在 String 上
          17. 用最有效率的方法計算 2 乘以 8
          18. Math.round(11.5) 等于多少?Math.round(-11.5)等于多少
          19. float f=3.4;是否正確
          20. short s1 = 1; s1 = s1 + 1;有錯嗎?short s1 = 1; s1 += 1;有錯嗎
          21. 編碼
          22. Java語言采用何種編碼方案?有何特點?
          23. 注釋
          24. 什么Java注釋
          25. 訪問修飾符
          26. 訪問修飾符 public,private,protected,以及不寫(默認)時的區別
          27. 運算符
          28. &和&&的區別
          29. 關鍵字
          30. Java 有沒有 goto
          31. final 有什么用?
          32. final finally finalize區別
          33. this關鍵字的用法
          34. super關鍵字的用法
          35. this與super的區別
          36. static存在的主要意義
          37. static的獨特之處
          38. static應用場景
          39. static注意事項
          40. 流程控制語句
          41. break ,continue ,return 的區別及作用
          42. 在 Java 中,如何跳出當前的多重嵌套循環
          43. 面向對象
          44. 面向對象概述
          45. 面向對象和面向過程的區別
          46. 面向對象三大特性
          47. 面向對象的特征有哪些方面
          48. 什么是多態機制?Java語言是如何實現多態的?
          49. 面向對象五大基本原則是什么(可選)
          50. 類與接口
          51. 抽象類和接口的對比
          52. 普通類和抽象類有哪些區別?
          53. 抽象類能使用 final 修飾嗎?
          54. 創建一個對象用什么關鍵字?對象實例與對象引用有何不同?
          55. 變量與方法
          56. 成員變量與局部變量的區別有哪些
          57. 在Java中定義一個不做事且沒有參數的構造方法的作用
          58. 在調用子類構造方法之前會先調用父類沒有參數的構造方法,其目的是?
          59. 一個類的構造方法的作用是什么?若一個類沒有聲明構造方法,該程序能正確執行嗎?為什么?
          60. 構造方法有哪些特性?
          61. 靜態變量和實例變量區別
          62. 靜態變量與普通變量區別
          63. 靜態方法和實例方法有何不同?
          64. 在一個靜態方法內調用一個非靜態成員為什么是非法的?
          65. 什么是方法的返回值?返回值的作用是什么?
          66. 內部類
          67. 什么是內部類?
          68. 內部類的分類有哪些
          69. 靜態內部類
          70. 成員內部類
          71. 局部內部類
          72. 匿名內部類
          73. 內部類的優點
          74. 內部類有哪些應用場景
          75. 局部內部類和匿名內部類訪問局部變量的時候,為什么變量必須要加上final?
          76. 內部類相關,看程序說出運行結果
          77. 重寫與重載
          78. 構造器(constructor)是否可被重寫(override)
          79. 重載(Overload)和重寫(Override)的區別。重載的方法能否根據返回類型進行區分?
          80. 對象相等判斷
          81. == 和 equals 的區別是什么
          82. hashCode 與 equals (重要)
          83. 對象的相等與指向他們的引用相等,兩者有什么不同?
          84. 值傳遞
          85. 當一個對象被當作參數傳遞到一個方法后,此方法可改變這個對象的屬性,并可返回變化后的結果,那么這里到底是值傳遞還是引用傳遞
          86. 為什么 Java 中只有值傳遞
          87. 值傳遞和引用傳遞有什么區別
          88. Java包
          89. JDK 中常用的包有哪些
          90. import java和javax有什么區別
          91. IO流
          92. java 中 IO 流分為幾種?
          93. BIO,NIO,AIO 有什么區別?
          94. Files的常用方法都有哪些?
          95. 反射
          96. 什么是反射機制?
          97. 反射機制優缺點
          98. 反射機制的應用場景有哪些?
          99. Java獲取反射的三種方法
          100. 網絡編程
          101. 常用API
          102. String相關
          103. 字符型常量和字符串常量的區別
          104. 什么是字符串常量池?
          105. String 是最基本的數據類型嗎
          106. String有哪些特性
          107. String為什么是不可變的嗎?
          108. String真的是不可變的嗎?
          109. 是否可以繼承 String 類
          110. String str="i"與 String str=new String("i")一樣嗎?
          111. String s = new String("xyz");創建了幾個字符串對象
          112. 如何將字符串反轉?
          113. 數組有沒有 length()方法?String 有沒有 length()方法
          114. String 類的常用方法都有那些?
          115. 在使用 HashMap 的時候,用 String 做 key 有什么好處?
          116. String和StringBuffer、StringBuilder的區別是什么?String為什么是不可變的
          117. Date相關
          118. 包裝類相關
          119. 自動裝箱與拆箱
          120. int 和 Integer 有什么區別
          121. Integer a= 127 與 Integer b = 127相等嗎
          122. 常用工具類庫
          123. 單元測試
          124. 日志

          Java基礎124道面試答案

          JVM

          1. 說一下 JVM 的主要組成部分及其作用?
          2. 說一下 JVM 運行時數據區
          3. 說一下堆棧的區別?
          4. 隊列和棧是什么?有什么區別?
          5. 對象的創建
          6. 為對象分配內存
          7. 處理并發安全問題
          8. 對象的訪問定位
          9. 句柄訪問
          10. 直接指針
          11. 內存溢出異常
          12. Java會存在內存泄漏嗎?請簡單描述垃圾收集器
          13. 簡述Java垃圾回收機制
          14. GC是什么?為什么要GC
          15. 垃圾回收的優點和原理。并考慮2種回收機制
          16. 垃圾回收器的基本原理是什么?垃圾回收器可以馬上回收內存嗎?有什么辦法主動通知虛擬機進行垃圾回收?
          17. Java 中都有哪些引用類型?
          18. 怎么判斷對象是否可以被回收?
          19. 在Java中,對象什么時候可以被垃圾回收
          20. JVM中的永久代中會發生垃圾回收嗎
          21. 說一下 JVM 有哪些垃圾回收算法?
          22. 標記-清除算法
          23. 復制算法
          24. 標記-整理算法
          25. 分代收集算法
          26. 說一下 JVM 有哪些垃圾回收器?
          27. 詳細介紹一下 CMS 垃圾回收器?
          28. 新生代垃圾回收器和老年代垃圾回收器都有哪些?有什么區別?
          29. 簡述分代垃圾回收器是怎么工作的?
          30. 簡述java內存分配與回收策率以及Minor GC和Major GC
          31. 對象優先在 Eden 區分配
          32. 大對象直接進入老年代
          33. 長期存活對象將進入老年代
          34. 簡述java類加載機制?
          35. 描述一下JVM加載Class文件的原理機制
          36. 什么是類加載器,類加載器有哪些?
          37. 說一下類裝載的執行過程?
          38. 什么是雙親委派模型?
          39. 說一下 JVM 調優的工具?
          40. 常用的 JVM 調優的參數都有哪些?

          JVM 40道面試答案

          Spring

          1. Spring概述(10)
          2. 什么是spring?
          3. Spring框架的設計目標,設計理念,和核心是什么
          4. Spring的優缺點是什么?
          5. Spring有哪些應用場景
          6. Spring由哪些模塊組成?
          7. Spring 框架中都用到了哪些設計模式?
          8. 詳細講解一下核心容器(spring context應用上下文) 模塊
          9. Spring框架中有哪些不同類型的事件
          10. Spring 應用程序有哪些不同組件?
          11. 使用 Spring 有哪些方式?
          12. Spring控制反轉(IOC)(13)
          13. 什么是Spring IOC 容器?
          14. 控制反轉(IoC)有什么作用
          15. IOC的優點是什么?
          16. Spring IoC 的實現機制
          17. Spring 的 IoC支持哪些功能
          18. BeanFactory 和 ApplicationContext有什么區別?
          19. Spring 如何設計容器的,BeanFactory和ApplicationContext的關系詳解
          20. ApplicationContext通常的實現是什么?
          21. 什么是Spring的依賴注入?
          22. 依賴注入的基本原則
          23. 依賴注入有什么優勢
          24. 有哪些不同類型的依賴注入實現方式?
          25. 構造器依賴注入和 Setter方法注入的區別
          26. Spring Beans(19)
          27. 什么是Spring beans?
          28. 一個 Spring Bean 定義 包含什么?
          29. 如何給Spring 容器提供配置元數據?Spring有幾種配置方式
          30. Spring配置文件包含了哪些信息
          31. Spring基于xml注入bean的幾種方式
          32. 你怎樣定義類的作用域?
          33. 解釋Spring支持的幾種bean的作用域
          34. Spring框架中的單例bean是線程安全的嗎?
          35. Spring如何處理線程并發問題?
          36. 解釋Spring框架中bean的生命周期
          37. 哪些是重要的bean生命周期方法? 你能重載它們嗎?
          38. 什么是Spring的內部bean?什么是Spring inner beans?
          39. 在 Spring中如何注入一個java集合?
          40. 什么是bean裝配?
          41. 什么是bean的自動裝配?
          42. 解釋不同方式的自動裝配,spring 自動裝配 bean 有哪些方式?
          43. 使用@Autowired注解自動裝配的過程是怎樣的?
          44. 自動裝配有哪些局限性?
          45. 你可以在Spring中注入一個null 和一個空字符串嗎?
          46. Spring注解(8)
          47. 什么是基于Java的Spring注解配置? 給一些注解的例子
          48. 怎樣開啟注解裝配?
          49. @Component, @Controller, @Repository, @Service 有何區別?
          50. @Required 注解有什么作用
          51. @Autowired 注解有什么作用
          52. @Autowired和@Resource之間的區別
          53. @Qualifier 注解有什么作用
          54. @RequestMapping 注解有什么用?
          55. Spring數據訪問(14)
          56. 解釋對象/關系映射集成模塊
          57. 在Spring框架中如何更有效地使用JDBC?
          58. 解釋JDBC抽象和DAO模塊
          59. spring DAO 有什么用?
          60. spring JDBC API 中存在哪些類?
          61. JdbcTemplate是什么
          62. 使用Spring通過什么方式訪問Hibernate?使用 Spring 訪問 Hibernate 的方法有哪些?
          63. 如何通過HibernateDaoSupport將Spring和Hibernate結合起來?
          64. Spring支持的事務管理類型, spring 事務實現方式有哪些?
          65. Spring事務的實現方式和實現原理
          66. 說一下Spring的事務傳播行為
          67. 說一下 spring 的事務隔離?
          68. Spring框架的事務管理有哪些優點?
          69. 你更傾向用那種事務管理類型?
          70. Spring面向切面編程(AOP)(13)
          71. 什么是AOP
          72. Spring AOP and AspectJ AOP 有什么區別?AOP 有哪些實現方式?
          73. JDK動態代理和CGLIB動態代理的區別
          74. 如何理解 Spring 中的代理?
          75. 解釋一下Spring AOP里面的幾個名詞
          76. Spring在運行時通知對象
          77. Spring只支持方法級別的連接點
          78. 在Spring AOP 中,關注點和橫切關注的區別是什么?在 spring aop 中 concern 和 cross-cutting concern 的不同之處
          79. Spring通知有哪些類型?
          80. 什么是切面 Aspect?
          81. 解釋基于XML Schema方式的切面實現
          82. 解釋基于注解的切面實現
          83. 有幾種不同類型的自動代理?

          Spring 80道面試題答案

          SpringMVC

          1. 什么是Spring MVC?簡單介紹下你對Spring MVC的理解?
          2. Spring MVC的優點
          3. Spring MVC的主要組件?
          4. 什么是DispatcherServlet
          5. 什么是Spring MVC框架的控制器?
          6. Spring MVC的控制器是不是單例模式,如果是,有什么問題,怎么解決?
          7. 請描述Spring MVC的工作流程?描述一下 DispatcherServlet 的工作流程?
          8. MVC是什么?MVC設計模式的好處有哪些
          9. 注解原理是什么
          10. Spring MVC常用的注解有哪些?
          11. SpingMvc中的控制器的注解一般用哪個,有沒有別的注解可以替代?
          12. @Controller注解的作用
          13. @RequestMapping注解的作用
          14. @ResponseBody注解的作用
          15. @PathVariable和@RequestParam的區別
          16. Spring MVC與Struts2區別
          17. Spring MVC怎么樣設定重定向和轉發的?
          18. Spring MVC怎么和AJAX相互調用的?
          19. 如何解決POST請求中文亂碼問題,GET的又如何處理呢?
          20. Spring MVC的異常處理?
          21. 如果在攔截請求中,我想攔截get方式提交的方法,怎么配置
          22. 怎樣在方法里面得到Request,或者Session?
          23. 如果想在攔截的方法里面得到從前臺傳入的參數,怎么得到?
          24. 如果前臺有很多個參數傳入,并且這些參數都是一個對象的,那么怎么樣快速得到這個對象?
          25. Spring MVC中函數的返回值是什么?
          26. Spring MVC用什么對象從后臺向前臺傳遞數據的?
          27. 怎么樣把ModelMap里面的數據放入Session里面?
          28. Spring MVC里面攔截器是怎么寫的
          29. 介紹一下 WebApplicationContext

          SpringMVC 30道面試答案

          SpringBoot

          1. 什么是 Spring Boot?
          2. Spring Boot 有哪些優點?
          3. Spring Boot 的核心注解是哪個?它主要由哪幾個注解組成的?
          4. 什么是 JavaConfig?
          5. Spring Boot 自動配置原理是什么?
          6. 你如何理解 Spring Boot 配置加載順序?
          7. 什么是 YAML?
          8. YAML 配置的優勢在哪里 ?
          9. Spring Boot 是否可以使用 XML 配置 ?
          10. spring boot 核心配置文件是什么?bootstrap.properties 和 application.properties 有何區別 ?
          11. 什么是 Spring Profiles?
          12. 如何在自定義端口上運行 Spring Boot 應用程序?
          13. 如何實現 Spring Boot 應用程序的安全性?
          14. 比較一下 Spring Security 和 Shiro 各自的優缺點 ?
          15. Spring Boot 中如何解決跨域問題 ?
          16. 什么是 CSRF 攻擊?
          17. Spring Boot 中的監視器是什么?
          18. 如何在 Spring Boot 中禁用 Actuator 端點安全性?
          19. 我們如何監視所有 Spring Boot 微服務?
          20. 什么是 WebSockets?
          21. 什么是 Spring Data ?
          22. 什么是 Spring Batch?
          23. 什么是 FreeMarker 模板?
          24. 如何集成 Spring Boot 和 ActiveMQ?
          25. 什么是 Apache Kafka?
          26. 什么是 Swagger?你用 Spring Boot 實現了它嗎?
          27. 前后端分離,如何維護接口文檔 ?
          28. 如何重新加載 Spring Boot 上的更改,而無需重新啟動服務器?Spring Boot項目如何熱部署?
          29. 您使用了哪些 starter maven 依賴項?
          30. Spring Boot 中的 starter 到底是什么 ?
          31. spring-boot-starter-parent 有什么用 ?
          32. Spring Boot 打成的 jar 和普通的 jar 有什么區別 ?
          33. 運行 Spring Boot 有哪幾種方式?
          34. Spring Boot 需要獨立的容器運行嗎?
          35. 開啟 Spring Boot 特性有哪幾種方式?
          36. 如何使用 Spring Boot 實現異常處理?
          37. 如何使用 Spring Boot 實現分頁和排序?
          38. 微服務中如何實現 session 共享 ?
          39. Spring Boot 中如何實現定時任務 ?

          SpringBoot 40道面試答案

          Spring Cloud

          1. 為什么需要學習Spring Cloud
          2. 什么是Spring Cloud
          3. 設計目標與優缺點
          4. 設計目標
          5. 優缺點
          6. Spring Cloud發展前景
          7. 整體架構
          8. 主要項目
          9. Spring Cloud Config
          10. Spring Cloud Netflix
          11. Spring Cloud Bus
          12. Spring Cloud Consul
          13. Spring Cloud Security
          14. Spring Cloud Sleuth
          15. Spring Cloud Stream
          16. Spring Cloud Task
          17. Spring Cloud Zookeeper
          18. Spring Cloud Gateway
          19. Spring Cloud OpenFeign
          20. Spring Cloud的版本關系
          21. Spring Cloud和SpringBoot版本對應關系
          22. Spring Cloud和各子項目版本對應關系
          23. SpringBoot和SpringCloud的區別?
          24. 使用 Spring Boot 開發分布式微服務時,我們面臨以下問題
          25. 服務注冊和發現是什么意思?Spring Cloud 如何實現?
          26. Spring Cloud 和dubbo區別?
          27. 負載平衡的意義什么?
          28. 什么是 Hystrix?它如何實現容錯?
          29. 什么是 Hystrix 斷路器?我們需要它嗎?
          30. 什么是 Netflix Feign?它的優點是什么?
          31. 什么是 Spring Cloud Bus?我們需要它嗎?
          32. Spring Cloud斷路器的作用
          33. 什么是Spring Cloud Config?
          34. 什么是Spring Cloud Gateway?

          SpringCloud 34道面試答案

          MyBatis

          1. MyBatis是什么?
          2. ORM是什么
          3. 為什么說Mybatis是半自動ORM映射工具?它與全自動的區別在哪里?
          4. 傳統JDBC開發存在的問題
          5. JDBC編程有哪些不足之處,MyBatis是如何解決這些問題的?
          6. Mybatis優缺點
          7. MyBatis框架適用場景
          8. Hibernate 和 MyBatis 的區別
          9. MyBatis的解析和運行原理
          10. MyBatis編程步驟是什么樣的?
          11. 請說說MyBatis的工作原理
          12. MyBatis的功能架構是怎樣的
          13. MyBatis的框架架構設計是怎么樣的
          14. Mybatis都有哪些Executor執行器?它們之間的區別是什么?
          15. Mybatis中如何指定使用哪一種Executor執行器?
          16. Mybatis是否支持延遲加載?如果支持,它的實現原理是什么?
          17. #{}和${}的區別
          18. 模糊查詢like語句該怎么寫
          19. 在mapper中如何傳遞多個參數
          20. Mybatis如何執行批量操作
          21. 如何獲取生成的主鍵
          22. 當實體類中的屬性名和表中的字段名不一樣 ,怎么辦
          23. Mapper 編寫有哪幾種方式?
          24. 什么是MyBatis的接口綁定?有哪些實現方式?
          25. 使用MyBatis的mapper接口調用時有哪些要求?
          26. 最佳實踐中,通常一個Xml映射文件,都會寫一個Dao接口與之對應,請問,這個Dao接口的工作原理是什么?Dao接口里的方法,參數不同時,方法能重載嗎
          27. Mybatis的Xml映射文件中,不同的Xml映射文件,id是否可以重復?
          28. 簡述Mybatis的Xml映射文件和Mybatis內部數據結構之間的映射關系?
          29. Mybatis是如何將sql執行結果封裝為目標對象并返回的?都有哪些映射形式?
          30. Xml映射文件中,除了常見的select|insert|updae|delete標簽之外,還有哪些標簽?
          31. Mybatis映射文件中,如果A標簽通過include引用了B標簽的內容,請問,B標簽能否定義在A標簽的后面,還是說必須定義在A標簽的前面?
          32. MyBatis實現一對一,一對多有幾種方式,怎么操作的?
          33. Mybatis是否可以映射Enum枚舉類?
          34. Mybatis動態sql是做什么的?都有哪些動態sql?能簡述一下動態sql的執行原理不?
          35. Mybatis是如何進行分頁的?分頁插件的原理是什么?
          36. 簡述Mybatis的插件運行原理,以及如何編寫一個插件。
          37. Mybatis的一級、二級緩存

          Mybatis 面試答案

          Redis

          1. 什么是Redis
          2. Redis有哪些優缺點
          3. 為什么要用 Redis /為什么要用緩存
          4. 為什么要用 Redis 而不用 map/guava 做緩存?
          5. Redis為什么這么快
          6. Redis有哪些數據類型
          7. Redis的應用場景
          8. 什么是Redis持久化?
          9. Redis 的持久化機制是什么?各自的優缺點?
          10. 如何選擇合適的持久化方式
          11. Redis持久化數據和緩存怎么做擴容?
          12. Redis的過期鍵的刪除策略
          13. Redis key的過期時間和永久有效分別怎么設置?
          14. 我們知道通過expire來設置key 的過期時間,那么對過期的數據怎么處理呢?
          15. MySQL里有2000w數據,redis中只存20w的數據,如何保證redis中的數據都是熱點數據
          16. Redis的內存淘汰策略有哪些
          17. Redis主要消耗什么物理資源?
          18. Redis的內存用完了會發生什么?
          19. Redis如何做內存優化?
          20. Redis線程模型
          21. 什么是事務?
          22. Redis事務的概念
          23. Redis事務的三個階段
          24. Redis事務相關命令
          25. 事務管理(ACID)概述
          26. Redis事務支持隔離性嗎
          27. Redis事務保證原子性嗎,支持回滾嗎
          28. Redis事務其他實現
          29. 哨兵模式
          30. 官方Redis Cluster 方案(服務端路由查詢)
          31. 基于客戶端分配
          32. 基于代理服務器分片
          33. Redis 主從架構
          34. Redis集群的主從復制模型是怎樣的?
          35. 生產環境中的 redis 是怎么部署的?
          36. 說說Redis哈希槽的概念?
          37. Redis集群會有寫操作丟失嗎?為什么?
          38. Redis集群之間是如何復制的?
          39. Redis集群最大節點個數是多少?
          40. Redis集群如何選擇數據庫?
          41. Redis是單線程的,如何提高多核CPU的利用率?
          42. 為什么要做Redis分區?
          43. 你知道有哪些Redis分區實現方案?
          44. Redis分區有什么缺點?
          45. Redis實現分布式鎖
          46. 如何解決 Redis 的并發競爭 Key 問題
          47. 分布式Redis是前期做還是后期規模上來了再做好?為什么?
          48. 什么是 RedLock
          49. 緩存雪崩
          50. 緩存穿透
          51. 緩存擊穿
          52. 緩存預熱
          53. 緩存降級
          54. 熱點數據和冷數據
          55. 緩存熱點key
          56. Redis支持的Java客戶端都有哪些?官方推薦用哪個?
          57. Redis和Redisson有什么關系?
          58. Jedis與Redisson對比有什么優缺點?
          59. Redis與Memcached的區別
          60. 如何保證緩存與數據庫雙寫時的數據一致性?
          61. Redis常見性能問題和解決方案?
          62. Redis官方為什么不提供Windows版本?
          63. 一個字符串類型的值能存儲最大容量是多少?
          64. Redis如何做大量數據插入?
          65. 假如Redis里面有1億個key,其中有10w個key是以某個固定的已知的前綴開頭的,如果將它們全部找出來?
          66. 使用Redis做過異步隊列嗎,是如何實現的
          67. Redis如何實現延時隊列
          68. Redis回收進程如何工作的?
          69. Redis回收使用的是什么算法?

          Redis 70道面試答案解析

          Dubbo

          1. 為什么要用 Dubbo?
          2. Dubbo 是什么?
          3. Dubbo 的使用場景有哪些?
          4. Dubbo 核心功能有哪些?
          5. Dubbo 核心組件有哪些?
          6. Dubbo 服務器注冊與發現的流程?
          7. Dubbo 的整體架構設計有哪些分層?
          8. Dubbo Monitor 實現原理?
          9. Dubbo 類似的分布式框架還有哪些?
          10. Dubbo 和 Spring Cloud 有什么關系?
          11. Dubbo 和 Spring Cloud 有什么哪些區別?
          12. Dubbo 和 Dubbox 之間的區別?
          13. Dubbo 有哪些注冊中心?
          14. Dubbo 的注冊中心集群掛掉,發布者和訂閱者之間還能通信么?
          15. Dubbo集群提供了哪些負載均衡策略?
          16. Dubbo的集群容錯方案有哪些?
          17. Dubbo 配置文件是如何加載到 Spring 中的?
          18. 說說核心的配置有哪些?
          19. Dubbo 超時設置有哪些方式?
          20. 服務調用超時會怎么樣?
          21. Dubbo 使用的是什么通信框架?
          22. Dubbo 支持哪些協議,它們的優缺點有哪些?
          23. Dubbo 用到哪些設計模式?
          24. 服務上線怎么兼容舊版本?
          25. Dubbo telnet 命令能做什么?
          26. Dubbo 支持服務降級嗎?
          27. Dubbo 如何優雅停機?
          28. Dubbo SPI 和 Java SPI 區別?
          29. Dubbo 支持分布式事務嗎?
          30. Dubbo 可以對結果進行緩存嗎?
          31. Dubbo 必須依賴的包有哪些?
          32. Dubbo 支持哪些序列化方式?
          33. Dubbo 在安全方面有哪些措施?
          34. 服務調用是阻塞的嗎?
          35. 服務提供者能實現失效踢出是什么原理?
          36. 同一個服務多個注冊的情況下可以直連某一個服務嗎?
          37. Dubbo 服務降級,失敗重試怎么做?
          38. Dubbo 使用過程中都遇到了些什么問題?
          39. 為什么要有RPC
          40. 什么是RPC
          41. PRC架構組件
          42. RPC和SOA、SOAP、REST的區別
          43. RPC框架需要解決的問題?
          44. RPC的實現基礎?
          45. RPC使用了哪些關鍵技術?
          46. 主流RPC框架有哪些
          47. RPC的實現原理架構圖

          Dubbo面試答案

          Tomcat

          1. Tomcat是什么?
          2. Tomcat的缺省端口是多少,怎么修改
          3. tomcat 有哪幾種Connector 運行模式(優化)?
          4. Tomcat有幾種部署方式?
          5. tomcat容器是如何創建servlet類實例?用到了什么原理?
          6. Tomcat工作模式
          7. Tomcat頂層架構
          8. Tomcat頂層架構小結
          9. Connector和Container的微妙關系
          10. Container架構分析
          11. Container如何處理請求的

          Tomcat面試答案

          ZooKeeper

          1. ZooKeeper 是什么?
          2. ZooKeeper 提供了什么?
          3. Zookeeper 文件系統
          4. Zookeeper 怎么保證主從節點的狀態同步?
          5. 四種類型的數據節點 Znode
          6. Zookeeper Watcher 機制 -- 數據變更通知
          7. 客戶端注冊 Watcher 實現
          8. 服務端處理 Watcher 實現
          9. 客戶端回調 Watcher
          10. ACL 權限控制機制
          11. Chroot 特性
          12. 會話管理
          13. 服務器角色
          14. Zookeeper 下 Server 工作狀態
          15. 數據同步
          16. zookeeper 是如何保證事務的順序一致性的?
          17. 分布式集群中為什么會有 Master主節點?
          18. zk 節點宕機如何處理?
          19. zookeeper 負載均衡和 nginx 負載均衡區別
          20. Zookeeper 有哪幾種幾種部署模式?
          21. 集群最少要幾臺機器,集群規則是怎樣的?集群中有 3 臺服務器,其中一個節點宕機,這個時候 Zookeeper 還可以使用嗎?
          22. 集群支持動態添加機器嗎?
          23. Zookeeper 對節點的 watch 監聽通知是永久的嗎?為什么不是永久的?
          24. Zookeeper 的 java 客戶端都有哪些?
          25. chubby 是什么,和 zookeeper 比你怎么看?
          26. 說幾個 zookeeper 常用的命令。
          27. ZAB 和 Paxos 算法的聯系與區別?
          28. Zookeeper 的典型應用場景
          29. Zookeeper 都有哪些功能?
          30. 說一下 Zookeeper 的通知機制?
          31. Zookeeper 和 Dubbo 的關系?

          Zookeeper 面試答案

          Netty

          1. Netty 是什么?
          2. Netty 的特點是什么?
          3. Netty 的優勢有哪些?
          4. Netty 的應用場景有哪些?
          5. Netty 高性能表現在哪些方面?
          6. BIO、NIO和AIO的區別?
          7. NIO的組成?
          8. Netty的線程模型?
          9. TCP 粘包/拆包的原因及解決方法?
          10. 什么是 Netty 的零拷貝?
          11. Netty 中有哪種重要組件?
          12. Netty 發送消息有幾種方式?
          13. 默認情況 Netty 起多少線程?何時啟動?
          14. 了解哪幾種序列化協議?
          15. 如何選擇序列化協議?
          16. Netty 支持哪些心跳類型設置?
          17. Netty 和 Tomcat 的區別?
          18. NIOEventLoopGroup源碼?
          19. JDK原生NIO程序的問題
          20. Netty的特點
          21. Netty常見使用場景
          22. I/O模型
          23. 阻塞I/O
          24. I/O復用模型
          25. 基于buffer
          26. 線程模型
          27. 事件驅動模型
          28. Reactor線程模型
          29. Netty線程模型
          30. 異步處理
          31. Bootstrap、ServerBootstrap
          32. Future、ChannelFuture
          33. Channel
          34. Selector
          35. NioEventLoop
          36. NioEventLoopGroup
          37. ChannelHandler
          38. ChannelHandlerContext
          39. ChannelPipline

          Netty 面試答案

          獲取以上面試專題答案的朋友們請轉發此文關注我私信回復“面試資料”即可獲取

          面試答案匯總


          小編整理Java面試寶典分享給大家復習

          Java核心知識283頁覆蓋了JVM、鎖、并發、Java反射、Spring原理、微服務、Zookeeper、數據庫、數據結構等大量知識點

          如果需要獲取到這個【核心知識點整理】文檔的話幫忙轉發一下然后再關注我私信回復“面試資料”得到獲取方式吧!


          主站蜘蛛池模板: 女人18毛片a级毛片一区二区| 久久精品国产AV一区二区三区| 日韩人妻精品无码一区二区三区 | 日韩一区二区三区无码影院| 久久久国产精品亚洲一区 | 一区二区三区福利视频| 农村人乱弄一区二区| 国产精品一区二区资源| 国精无码欧精品亚洲一区| 国产乱码精品一区二区三区| 国模私拍一区二区三区| 视频在线观看一区| 曰韩人妻无码一区二区三区综合部| AV怡红院一区二区三区 | 亚洲欧洲一区二区三区| 中文字幕乱码亚洲精品一区| 精品视频一区二区三区| 午夜性色一区二区三区不卡视频| 一区二区免费视频| 波多野结衣一区在线观看| 亚洲国产精品一区二区久| 国产成人精品一区二区秒拍| 国产免费一区二区三区VR| 国产SUV精品一区二区四| 亚洲一区二区三区写真 | 国产精品特级毛片一区二区三区| 国产无人区一区二区三区| 精品一区二区三区在线观看l | 另类国产精品一区二区| 亚洲国产综合无码一区| 女人和拘做受全程看视频日本综合a一区二区视频 | 无码av不卡一区二区三区| 色天使亚洲综合一区二区| 国产精品分类视频分类一区| 国产乱人伦精品一区二区在线观看| 中文字幕乱码一区久久麻豆樱花| 麻豆一区二区免费播放网站| 视频在线一区二区三区| 精品在线一区二区三区| 久久精品国产一区二区三区 | 精品一区二区久久久久久久网站|