Java 全棧面試題html
Java基礎前端
一、JVM內存結構java
1 )、堆(主要用來存儲對象)mysql
2 )、棧(先進後出、通常存局部變量(int, short, long, byte, float, double, boolean, char)和對象句柄)web
3 )、方法區(又叫靜態區,跟堆同樣,被全部的線程共享。方法區包含全部的class和static變量,運行時常量池都分配在 Java 虛擬機的方法區之中(String))面試
4 )、PC 寄存器(每一個線程啓動的時候,都會建立一個PC(Program Counter,程序計數器)寄存器。PC寄存器裏保存有當前正在執行的JVM指令的地址。 每個線程都有它本身的PC寄存器,也是該線程啓動時建立的。保存下一條將要執行的指令地址的寄存器是 :PC寄存器。PC寄存器的內容老是指向下一條將被執行指令的地址,這裏的地址能夠是一個本地指針,也能夠是在方法區中相對應於該方法起始指令的偏移量)redis
二、什麼是GC算法
1)、垃圾回收機制(用來清理堆區對象,無棧區對象句柄內存空間)spring
三、& 和 && 的區別sql
1)、&是不帶短路的,&&帶短路
四、集合Set如何保證值不重複
1)、HashSet底層是用的哈希算法(實際調用的方法是equals和hashcode方法)
五、HashMap和Hashtable有什麼區別?
1)、HashMap 能夠Key和Value是null、HashTable則不能夠(Key、Value)
2)、HashMap 線程不安全、HashTable線程安全
六、Set 保證添加順序的集合類是哪一個?
1)、LinkedHashSet (底層是哈希+雙鏈表因此記錄了插入順序)
七、HashMap、HashTable、ConcurrentHashMap 區別
1)、HashMap(底層數組+鏈表、初始空間16)
2)、HashTable(底層數組+鏈表、效率低、初始空間11)
3)、ConcurrentHashMap(底層分段數組+鏈表、線程安全、JDK1.5以後提供的(取代HashTable)、使用了final和volatile特性實現了無堵塞的Map)
鎖分段技術:首先將數據分紅一段一段的存儲,而後給每一段數據配一把鎖,當一個線程佔用鎖訪問其中一個段數據的時候,其餘段的數據也能被其餘線程訪問。
ConcurrentHashMap提供了與Hashtable和SynchronizedMap不一樣的鎖機制。Hashtable中採用的鎖機制是一次鎖住整個hash表,從而在同一時刻只能由一個線程對其進行操做;而ConcurrentHashMap中則是一次鎖住一個桶。
ConcurrentHashMap默認將hash表分爲16個桶,諸如get、put、remove等經常使用操做只鎖住當前須要用到的桶。這樣,原來只能一個線程進入,如今卻能同時有16個寫線程執行,併發性能的提高是顯而易見的。
八、ArrayList 初始空間大小?
1)、10
九、ArrayList和Linkedlist區別
1)、ArrayList(底層數組、查詢,修改 快 (由於不改動座標))
2)、Linkedlist(底層雙鏈表、刪除、新增 快 (由於鏈表結構兩邊動一下就OK))
十、Servlet 中 service方法做用是什麼?
1)、經過源碼能夠查看 sevice方法是分發請求的 若是是get則調用doget方法、post則調用dopost方法
2)、service方法是頂級接口裏的方法
十一、Servlet 生命週期
1)、init 初始化方法 - service 邏輯方法 - destory 銷燬
十二、接口在JDK版本迭代中有什麼變化
1)、1.7(Switch可使用String類型、Catch多個異常、泛型實例的建立能夠經過類型推斷來簡化 能夠去掉後面new部分的泛型類型,只用<>就能夠了、)
2)、1.8(接口的默認和靜態方法、Lambda 表達式)
1三、比較經典的一個面試題吧 String str = new String("adwa");建立了幾個對象
1)、2個
1四、String str = "a"+"b" 建立了幾個對象
1)、3個
1五、業務場景:兩個對象屬性名同樣 如何快速複製對象A裏面屬性值到對象B中
1)、反射
1六、List<String> strList = new ArrayList<String>() ; 存入int類型的值 怎麼保存?
1)、反射(反射動態擦除泛型)
2)、這個面試題 其實主要考的就是泛型的理解
1七、類加載順序
1)、父類static
2)、子類static
3)、初始化父類的其餘成員變量
4)、父類構造方法
5)、初始化子類的其餘成員變量
6)、子類構造方法
1九、動態代理和Cglib代理區別
1)、動態代理(實現接口)
2)、Cglib(是asm開源包,以實現子類的方式來生成代理對象)
20、Java 都有哪些代碼塊
1)、普通代碼塊
2)、構造代碼塊
3)、靜態代碼塊
4)、同步代碼塊
2一、JDBC 預編譯和不預編譯的區別
1)、預編譯 (簡單理解:提早編譯好了Sql 比較節省時間)
2)、不預編譯(就是在執行的時候纔會去編譯Sql)
2二、switch 在哪一個版本中加入了 String 類型
1)、1.7
2三、用最有效率的方法計算2乘以8
1 )、位運算
2四、Java 如何跳出多重循環
1)、能夠加標記A,break A
2五、什麼是斷言
1)、也就是所謂的assertion,是jdk1.4後加入的新功能。它主要使用在代碼開發和測試時期,用於對某些關鍵數據的判斷,若是這個關鍵數據不是你程序所預期的數據,程序就提出警告或退出。
2六、反射建立對象用哪一個方法
1)、newInstance
2七、獲取class對象的方式
1)、.class
2)、getClass()
3)、forName
2八、反射如何拿到私有字段
1)、暴力反射(getDeclaredFields 能夠拿到全部的字段包括私有)
2九、什麼是可變參
1)、形式參數好比String... strs 這叫可變參 底層維護的是個數組
30、jvm參數的設置和jvm調優
1)、答案
3一、什麼是年輕代內存溢出
1)、答案
3二、內部類:靜態內部類和匿名內部類的使用和區別
1)、靜態內部類
2)、匿名內部類
3三、反射機制會不會有性能問題?
1)、會有性能問題(可是得執行幾百萬次以上 纔會感受到,因此能夠忽略)
3四、finally塊必定會執行嗎?
1)、不必定(正常來講執行了try裏面內容 finally纔會執行,可是執行了try裏面內容 finally也是不必定就必定會執行)
3五、正常狀況下,當在try塊或catch塊中遇到return語句時,finally語句塊在方法返回以前仍是以後被執行?
1)、在 try return 語句執行以後 返回以前執行,若是finally裏面也有return 則 覆蓋try裏面的return
3六、字節流和字符流區別是什麼?
1)、字節流(字節流操做的直接就是文件)
2)、字符流(字符流操做的是緩衝區,緩衝區在操做文件)
在硬盤上的全部文件都是以字節形式存在的(圖片,聲音,視頻),而字符值在內存中才會造成。
3七、遞歸讀取文件夾下的文件,代碼怎麼實現
1)、這個。。。。就是考遞歸的寫法
3八、檢查型異常和非檢查型異常的區別
1)、檢查型異常在Java中全部不是RuntimeException派生的Exception都是檢查型異常。當函數中存在拋出檢查型異常的操做時該函數的函數聲明中必須包含throws語句。調用改函數的函數也必須對該異常進行處理,如不進行處理則必須在調用函數上聲明throws語句。
2)、非檢查型異常:在Java中全部RuntimeException的派生類都是非檢查型異常,與檢查型異常相對拋出非檢查型異常能夠不在函數聲明中添加throws語句,調用函數上也不須要強制處理。便可以不使用try...catch進行處理,可是若是有異常產生,則異常將由JVM進行處理,也會致使程序中斷。
3九、@RequestBody 請求方式是Post Content-Type - application/x-www-form-urlencoded 能接到數據嗎
1)、接不到(@RequestBody 這個只能接受 Content-Type - application/json 數據)
40、Http 請求方式是Post 能夠用@RequestParam 接受到參數嗎?
1)、能夠 可是必須是Content-Type - application/x-www-form-urlencoded 由於這是屬於表單提交 提交上去格式爲?name=123&qwe=123
4一、@RequestParam 和 @RequestBody 區別是什麼
1)、@RequestParam 接受請求頭數據
2)、@RequestBody 接受請求體
4二、@RequestBody 只能用在Post 請求嗎?
1)、不是,也能夠用在get請求 把數據寫到請求體裏面
4三、什麼是守護線程
1)、守護線程是執行後臺做業的線程。能夠經過設置setDaemon方法把線程設置成守護線程
4四、線程鎖 synchronized 加到方法上 那麼實例裏有兩個都是同步方法,共享一道鎖嗎?
1)、是的 這是實例鎖 當線程拿到鎖至關於拿到該實例全部同步方法的權限,其他線程都在外面等待
4五、線程鎖 synchronized 同步方法,和同步靜態方法的區別
1)、同步方法 實例鎖
2)、同步靜態方法 class鎖
4六、線程鎖 synchronized方法塊 和 靜態方法 使用synchronized方法塊 參數 有啥差異?
1)、一個是使用this (普通方法)
2)、一個是使用.class(靜態方法)
4七、調用 object 的 wait、notity、notityall須要注意什麼?
1)、須要拿到線程鎖 不然直接拋出異常
4八、線程調用wait和sleep有啥區別?
1)、sleep 不釋放鎖,使用這個方法 線程不會在實例的等待隊列中
2)、wait 釋放鎖 被喚醒後 , 會繼續搶鎖
4九、線程 start和run方法區別
1)、start 是 啓動線程而且調用run方法
2)、run是調用實例方法
50、volatile 做用
1)、volatile關鍵字的做用是強制從公共堆棧中取得變量的值,而不是從線程私有數據棧中取得變量的值、不會引起重排序問題 建議寫操做放到最後對volatile字段賦值
5一、i++ 是原子操做嗎
1)、不是
5二、棧內存是隻有一塊仍是每一個線程都有一塊?
1)、每一個線程都有一塊
5三、synchronized 添加了同步和不添加除了互斥性還有什麼其餘特色?
1)、在拿到鎖的時候會清空本地緩存(寄存器)會去共享空間拿最新值
2)、在放鎖的時候會將本地緩存修改直接放到共享空間
5四、線程可見性和重排序分別什麼意思?
1)、可見性就是本地緩存和共享空間 數據不同 ,其餘線程修改的值 本線程沒有馬上知道通常經過volatile和synchronized解決
2)、重排序就是代碼實際寫的順序在編譯的時候可能會打亂
5五、爲何重寫了equals方法必須重寫hashcode方法?
1)、簡單說就是確保是同一個對象
5六、.java 編譯後 一對一輩子成 .class文件嗎?
1)、若是類中包含靜態代碼塊,或者內部類 則是一對多關係,若是部署服務器,這.java文件必須把所對應的.class一併升級
框架
一、SpringMvc 運行原理
1)、用戶發送請求至前端控制器DispatcherServlet。
2)、DispatcherServlet收到請求調用HandlerMapping處理器映射器。
3)、處理器映射器找到具體的處理器(能夠根據xml配置、註解進行查找),生成處理器對象及處理器攔截器(若是有則生成)一併返回給DispatcherServlet。
4)、DispatcherServlet調用HandlerAdapter處理器適配器。
5)、HandlerAdapter通過適配調用具體的處理器(Controller,也叫後端控制器)。
6)、Controller執行完成返回ModelAndView。
7)、HandlerAdapter將controller執行結果ModelAndView返回給DispatcherServlet。
8)、DispatcherServlet將ModelAndView傳給ViewReslover視圖解析器。
9)、ViewReslover解析後返回具體View。
10)、DispatcherServlet根據View進行渲染視圖(即將模型數據填充至視圖中)。
11)、DispatcherServlet響應用戶。
二、SpringMvc 有個類把視圖和數據都合併的一塊兒的,叫什麼?
1)、ModelAndView
三、如何向前端返回數據
1)、@reponseBody
2)、PrintWriter
3)、ResponseEntity
四、Spring IOC 初始化步驟
1)、Resource定位
2)、經過返回的resource對象,進行BeanDefinition的載入
3)、將BeanDefiniton註冊到容器中
五、什麼是 IOC(控制反轉)
1)、簡單理解就是:沒有 IOC 本身建立對象,本身釋放對象,編碼者控制的對象的生命週期、加了 IOC 也就是控制反轉 字面的意思 就是將本身乾的這些事情 對象建立啊 什麼的 轉給了 IOC 容器去幹 IOC容器幫你生成對象
六、什麼是 DI (依賴注入)
1)、依賴注入:就是將 IOC 裏面的容器 經過調用getBean的方法 經過反射機制來找到Bean而且生成Bean而後注入到類中
七、IOC 容器 底層是?
1)、IOC容器底層是一個 HashMap 將對象的依賴關係都存入這個HashMap中 (源碼:DefaultListableBeanFactory類中能夠看到 Map對象(beanDefinitionMap) )+ 反射
八、IOC 什麼是 BeanDefiniton
1)、描述對象依賴關係的類(簡單理解)
九、IOC BeanFactroy和ApplicationContext區別
1)、BeanFactroy (IOC容器系列頂層接口定義了IOC容器行爲、初始化是第一次調用getBean時初始化Bean)
2)、ApplicationContext(是BeanFactroy的實現類(不是直接下級,具體的看IOC容器集成體系)包含BeanFactroy全部功能,而且新增:MessageSource, 提供國際化的消息訪問 、事件傳播 等功能(一共4個)、容器啓動初始化Bean 區別就是BeanFactroy 在問題排查調用到這個類才能發現有問題 而ApplicationContext 在容器初始化就能檢測到問題) )
十、Spring框架 底層都用了哪些設計模式
1)、代理、工廠、委派、單例、原型、適配器
十一、Spring AOP 底層是用哪一種代理
1)、若是目標類實現了接口 那麼用的就是動態代理
2)、若是目標類沒有實現接口 那麼用的就是Cglib
十二、Spring IOC Bean生命週期
1)、建立實例 >> 初始化 >> 使用 >>銷燬 (根據Bean的定義加載Bean的單例實例(默認單例能夠經過@Scope來進行修改)而後依次加載依賴該Bean的依賴Bean、而後若是指定了initMethod方法執行初始化方法、使用、容器關閉調用DestroyMethod )
1三、Spring IOC 核心容器
1)、BeanFactroy
1四、Spring 框架哪些用法使用了AOP
1)、事務
1五、Spring 事務傳播行爲
1)、PROPAGATION_MANDATORY(表示該方法必須運行在一個事務中。若是當前沒有事務正在發生,將拋出一個異常)默認
2)、PROPAGATION_NESTED(表示若是當前正有一個事務在進行中,則該方法應當運行在一個嵌套式事務中。被嵌套的事務能夠獨立於封裝事務進行提交或回滾。若是封裝事務不存在,行爲就像PROPAGATION_REQUIRES同樣。)
3)、PROPAGATION_NEVER(表示當前的方法不該該在一個事務中運行。若是一個事務正在進行,則會拋出一個異常。)
4)、PROPAGATION_NOT_SUPPORTED(表示該方法不該該在一個事務中運行。若是一個現有事務正在進行中,它將在該方法的運行期間被掛起。)
5)、PROPAGATION_SUPPORTS(表示當前方法不須要事務性上下文,可是若是有一個事務已經在運行的話,它也能夠在這個事務裏運行。)
6)、PROPAGATION_REQUIRES_NEW(表示當前方法必須在它本身的事務裏運行。一個新的事務將被啓動,並且若是有一個現有事務在運行的話,則將在這個方法運行期間被掛起。)
7)、PROPAGATION_REQUIRES(表示當前方法必須在一個事務中運行。若是一個現有事務正在進行中,該方法將在那個事務中運行,不然就要開始一個新事務。)
1六、Spring 事務隔離級別
1)、ISOLATION_DEFAULT(使用後端數據庫默認的隔離級別。)默認
2)、ISOLATION_READ_UNCOMMITTED(容許讀取還沒有提交的更改。可能致使髒讀、幻影讀或不可重複讀。)
3)、ISOLATION_READ_COMMITTED(容許從已經提交的併發事務讀取。可防止髒讀,但幻影讀和不可重複讀仍可能會發生。)Oracle 默認
4)、ISOLATION_REPEATABLE_READ(對相同字段的屢次讀取的結果是一致的,除非數據被當前事務自己改變。可防止髒讀和不可重複讀,但幻影讀仍可能發生。)Mysql 默認
5)、ISOLATION_SERIALIZABLE(徹底服從ACID的隔離級別,確保不發生髒讀、不可重複讀和幻影讀。這在全部隔離級別中也是最慢的,由於它一般是經過徹底鎖定當前事務所涉及的數據表來完成的。)
1七、Spring 事務回滾規則
1)、在默認設置下,事務只在出現運行時異常(runtime exception)時回滾,而在出現受檢查異常(checked exception)時不回滾
2)、也能夠聲明在出現特定受檢查異常時像運行時異常同樣回滾。一樣,也能夠聲明一個事務在出現特定的異常時不回滾,即便那些異常是運行時一場。
1八、Spring 單例和JVM單例區別
1)、Spring 默認Bean是單例的 只是這個單例是相對於IOC容器裏的Bean的單例
2)、JVM這個單例模式 則是相對於整個虛擬機的
1九、Spring @Autowired 和 @Resource 區別
1)、@Autowired (按照類型找Bean)
2)、@Resource (能夠同時按照類型和Name找Bean)
20、Spring 默認是單例的多例
1)、單例
2一、Spring Boot 有幾種嵌入式容器
1)、Tomcat(默認)
2)、jetty(Jetty更適合開發一些長鏈接Web應用,如Web聊天)
3)、Undertow(Jboss)(Undertow是一個高性能非阻塞的Servlet容器,併發性能很好,可是不支持JSP)
2二、Spring Boot application.yml 和 application.properties 配置文件區別
1)、加載順序不一樣 先加載yml
2)、寫法也不一樣 application.yml 我感受這種的更直觀
2三、Spring Boot 和 Spring Mvc的關係是
1)、包含的關係 Springboot在自動裝配的時候 自動包含了SpringMvc
2四、Spring Boot 自動配置核心包是
1)、spring-boot-autoconfigure-1.4.1.RELEASE.jar
2五、Spring Boot 啓動原理(自動裝配原理)
1)、@SpringBootApplication (@SpringBootApplication 註解,查找 META-INF/spring.factories 文件 根據條件自動裝配類)
跳轉:http://www.javashuo.com/article/p-egloejrh-bo.html
2六、Spring Boot 優勢
1)、自動裝配
2)、配置少
3)、內置服務器
4)、Actuator
5)、打包 .jar(固然war也能夠) 能夠在服務器直接使用 java -jar 啓動
6)、起步依賴(start 節省了一個個找模塊jar的煩惱)
2七、如何修改Spring Boot 內置嵌入式容器
1)、修改Pom文件將tomat依賴換成對應的容器依賴
2八、什麼是Spring 條件註解
1)、@Conditional(有好多種 通常就是知足什麼條件下加載Bean 相似於if)
2九、Spring Boot 都提供哪些起步依賴
1)、spring-boot-starter-web
2)、spring-boot-starter-jdbc
3)、spring-boot-starter-security
4)、spring-boot-starter-data-jpa
還有好多 詳情:http://www.javashuo.com/article/p-egloejrh-bo.html
30、Spring Aop 定義方法後置通知 若是目標方法拋出異常 後置通知是否執行?
1)、不執行(後置通知是在方法成功返回以後 纔會調用)
3一、Spring Aop分爲哪兩種模式?
一、編程式Aop(提供Aop功能封裝的類是 ProxyFactory)
TargetImpl taget = new TargetImpl(); ProxyFactory aopFactory = new ProxyFactory(taget ); aopFactory.addAdvisor(yourAdvisor); aopFactory.addAdvice(yourAdvice); TargetImpl targetProxy = (TargetImpl)aopFactory .getProxy();
二、聲明式Aop(比較經常使用的寫法,定義切點就能夠了 提供Aop功能封裝的類是 ProxyFactoryBean)
3二、Spring Aop默認實現類
1)、DefaultAopProxyFactory
3三、Spring Mvc 和 Struts2 區別
1)、Spring Mvc (核心是Servlet、單例(IOC)、針對Handler中的處理請求的方法進行mappring)
2)、Struts2 (核心是 過濾器、多例、針對Action類型進行mapping)
3四、Mybatis $和#區別
1)、$(僅僅爲一個純碎的 string 替換,在動態 SQL 解析階段將會進行變量替換、order by 中就須要使用 $.)
2)、#(解析成jdbc預編譯語句、一個#表明一個佔位符、能夠很大程度上防止sql注入、而且類型轉換。通常使用#)
3五、Mybatis 緩存
1)、一級緩存(做用域在session 當 Session flush 或 close 以後,該Session中的全部 Cache 就將清空。)
2)、二級緩存(HashMap存儲,不一樣在於其存儲做用域爲 Mapper(Namespace),而且可自定義存儲源,如 Ehcache。)
對於緩存數據更新機制,當某一個做用域(一級緩存Session/二級緩存Namespaces)的進行了 C/U/D 操做後,默認該做用域下全部 select 中的緩存將被clear。
3六、Mybatis 和 Habernate 區別
1)、Mybatis (比較容易上手、sql好優化、比較適合大型項目)
2)、Habernate(上手難度比較高、操做很差會產生不少多餘內存空間、完整的對象/關係映射解決方案、使用Hql會查詢出全部的字段(也可使用自定義sql)、比較適合小型項目(我的理解))
3七、Spring Data JPA 和 Habernate 區別
1)、JPA(Spring 對 JPA的一個整合)
2)、Habernate(是JPA規範的一個實現)
3八、Habernate 對象狀態
1)、transient 瞬時狀態(新建立的對象沒歸入session管理的對象)
2)、persistent 持久化狀態(數據庫中有)
3)、detached 離線狀態(數據庫中有,可是session中不存在該對象)
3九、Habernate 緩存
1)、一級緩存(session)
2)、二級緩存(sessionFactory)
3)、查詢緩存(sessionFactory級別,緩存同樣的Hql語句)
40、Mysql 查詢緩存
1)、sql 沒變化 而且表數據和列、都無任何變化、會將查詢的sql緩存下來
41、Redis和memcached:何時選擇redis,何時選擇memcached,內存模型和存儲策略是什麼樣的
1)、首先在類型上選擇 若是說須要除了K/V這種模式儲存數據須要更豐富的儲存類型就選擇redis,由於redis有五種數據類型
2)、而後呢 redis 支持持久化 memcached 是不支持持久化的
3)、memcached 在內存 存儲方面 會比redis快 memcached 適合作緩存,redis則適合作數據存儲
4二、Redis 持久化兩種不一樣配置文件區別
1)、詳解
4三、Redis 主從複製機制?
1)、詳解
4四、微服務優缺點
1)、負責業務拆分紅若干小業務
2)、微服務系統的微服務單元具備很強的橫向擴展能力
3)、服務和服務之間經過Http來進行協議通訊,服務能夠採用任何語言和技術開發
4)、每一個服務單元都是獨立部署,微服務的修改和部署對其餘服務沒有影響
缺點
5)、微服務的複雜度
6)、分佈式事務
7)、服務的瓜分
8)、服務的部署
4五、消息隊列點對點和發佈/訂閱模式的區別
1)、點對點(生產者只有一個消費者 單獨給這個消費者發送消息)
2)、訂閱(全部訂閱了這個消費者 都會收到消息)
4六、Rabbit Mq 交換機 幾種類型 每種都有什麼區別
1)、Direct exchange(直連交換機)
2)、Fanout exchange(扇型交換機)
3)、Topic exchange(主題交換機)
4)、Headers exchange(頭交換機)
4七、Rabbit Mq 和 ActiveMQ 區別
1)、ActiveMQ (老牌的消息隊列,Java編寫,協議是JMS,採用多線程併發,資源消耗比較大、如今更新比較少,使用的也比較少)
2)、Rabbit Mq (使用者多,協議是AMQP、網上案例比較多)
4八、Hibernate 什麼是懶加載
1)、集合、對象、(簡單理解就是加載須要的屬性,目前不須要的不加載,當調用屬性或者集合的時候在加載)
4九、Mybatis 如何快速執行插入操做(應該不全 我記得有個特殊的寫法)
1)、foreach
2)、batch
50、Redis 有幾種類型
1)、String
2)、List
3)、Set
4)、ZSet
5)、Hash
5一、Redis 和 Memcached 區別
1)、redis使用單線程模型,數據順序提交,redis支持主從模式,mencache只支持一致性hash作分佈式
2)、redis支持數據落地,rdb定時快照和aof實時記錄操做命令的日誌備份,memcache不支持
3)、redis數據類型豐富,有string,hash,set,list, sort set,而memcache只支持簡單數據類型
5二、若是Redis數據和數據庫裏數據不一致怎麼辦
1)、我被人問過這個問題,我當時說的是若是代碼邏輯是沒問題的 應該不會出現這個狀況
5三、Spring Mvc 工做原理(底層源碼分析(我的理解,歡迎大神一塊兒討論學習))
1)、SpringMvc最重要的類,就是DispatcherServlet,請求所有進入該類的doDisPatch方法,該方法內根據請求信息(requestMapping),進行查找HandlerMap是否有對應的HandlerExceutionChain , 若是有 則對該Controller進行校驗,若是合法,則經過HandlerAdapter調用該Controller信息,而且返回ModelAndView
5四、Spring IOC 容器默認是哪一個(這個只是書上看到,並不許確哈。網上沒找到)
1)、XML開頭那個容器類
5五、消息隊列 如何保證消息發送成功
1)、詳解
60、 Spring框架中須要引用哪些jar包,以及這些jar包的用途
1)、spring-core.jar:包含spring框架基本的核心工具類,其餘組件都要使用這個包裏面的類,是其餘組件的核心;
2)、spring-bean.jar:是全部的應用都要用到的,包含訪問配置文件、建立和管理bean以及進行IoC和DI操做所需的相關類;
3)、spring-aop.jar:包含使用AOP特性時所需的類;
4)、spring-context.jar:爲spring核心提供了大量擴展;
5)、spring-dao.jar:包含spring DAO、spring Transaction進行數據訪問的全部類;
6)、spring-hibernate.jar:包含spring對hibernate 2以及hibernate 3進行封裝的全部類;
7)、spring-jdbc.jar:包含spring對JDBC數據庫訪問進行封裝的全部類;
8)、spring-orm.jar:包含多DAO特性集進行了擴展;
9)、spring-remoting.jar:包含支持EJB、JMS、遠程調用Remoting方面的類;
10)、spring-support.jar:包含支持緩存Cache、JAC、JMX、郵件服務、任務計劃Scheduling方面的類;
11)、spring-web.jar:包含web開發時,用到spring框架時所需的核心類;
12)、spring-webmvc.jar:baohan Spring MVC框架相關的全部類;
13)、spring-mock.jar:包含spring一整套mock類來輔助應用的測試。
6一、Spring 事務 方法內拋出異常可是被catch 那麼這事務回滾嗎?
1)、事務底層源碼 TransactionAspectSupport類中invokeWithinTransaction方法能夠看到 開啓使用調用目標方法 若是拋出異常拋到spring源碼這個層面來被catch纔會致使事務回滾 不然是當正常結束
6二、Spring 事務 事務方法A 調用非事務方法 那麼是屬於統一事務嗎?
1)、是
6三、什麼狀況下使用消息隊列
1)、這個問題就是同步異步(同步的 用戶等待時間過長用戶體驗度很差,因此使用異步後臺處理前臺更快給用戶響應)
6四、Spring Mvc HandlerExceutionChain 這個類做用?
1)、封裝了 controller 和 攔截器鏈 在源碼中SimpleURLHandlerMapping中定義了一個映射關係和Controller對應的HandlerMap
6五、Spring Cloud Eureka 如何指定訪問服務
1)、region: beijing
availability-zones: beijing: zone-2,zone-1 利用分區來進行規劃
2)、metadata-map: zone:
zone-1 標識屬於哪一個分區
詳情:http://www.javashuo.com/article/p-cztgbqem-kg.html
6六、Spring Cloud Eureka 服務發現註解 @EnableDiscoveryClient 和 @EnableEurekaClient 區別
1)、@EnableEurekaClient (網上說源碼包含了 @EnableDiscoveryClient 註解 這個我沒找到哈。。。。 可能我版本不夠新,若是註冊中心是Eureka 則推薦 該註解,基於spring-cloud-netflix)
2)、@EnableDiscoveryClient(若是是其餘註冊中心,則用該註解,基於spring-cloud-commons)
6七、Eureka 配置項 hostName 和 instanceId 有什麼區別
1)、hostName 配置的是 服務列表 houst 主機名
2)、instanceId 配置的是 status 那一欄服務的名字 默認的是有一個規則的 看源碼能夠查到
6八、Hystrix @HystrixCommand 屬性fallbackMethod 配置 返回值和參數和源方法不一致能夠嗎?
1)、能夠方法名不一致,可是返回值和參數必須和加了註解的HystrixCommand保持一致
6九、Hystrix 配置的@HystrixCommand 熔斷方法 若是說這個方法內 調用若干個服務 是特定服務的調用熔斷進入熔斷方法仍是都會進入?(這個可能我研究不深)
1)、都會進入(可能有指定的。可是我這研究不深 因此目前先這麼寫 ,知道的大佬 指點一下哈)
70、Hystrix 和 Feign 集成 fallbackFactory 和 fallback 屬性的區別
1)、fallbackFactory 範圍更大一點 能夠獲得具體的Exception異常信息
2)、fallback 這個範圍小 得不到具體的信息
7一、Zuul 配置了服務名映射,還可使用serverId訪問嗎?
1)、能夠
7二、Zuul 底層使用的是 ribbon作的負載均衡 如何關閉?
1)、ribbon.eureka.enabled:false(這個配置有問題,多是遺留的bug 若是使用的yml後綴的配置文件,則寫一行)
7三、Zuul如何制定負載均衡服務
#禁用掉ribbon的負載均衡 這個配置有問題 若是在yml文件配置則最好這麼寫
ribbon.eureka.enabled: false
#配置serviceId爲SERVICE-HI的負載均衡名單
SERVICE-HI:
ribbon:
listOfServers: http://localhost:8763
7四、Ribbon 、 Feign 、Zuul 都繼承了 Hystrix格子的集成方式 是什麼?
1)、Ribbon 經過@HystrixCommand 註解裏面的一個屬性 執行fallback方法
2)、Feign 經過一個屬性關聯一個類 去執行fallback
3)、Zuul 是經過一個服務 來指定 application名字 進行熔斷
7五、Dubbo 和 Spring Cloud 區別
1)、Dubbo 是個微服務總體架構的框架,提供的功能包括服務註冊發現,遠程調用,監控等等。對標的項目是spring cloud。但Spring Cloud是一個系列的軟件,有不少組件來拼裝提供微服務的整體架構。Dubbo本身全封裝了
7六、Zookeeper 集成在 Dubbo中至關於 Spring Cloud 的 Eureka
1)、Dubbo 服務發現是 Zookeeper 實現
7七、本來的Zookeeper
1)、Zookeeper是用來保證分佈式一致性的一個軟件,不是爲了服務發現註冊而設計的。
只不過它的特性也能夠被二次開發成服務發現註冊中心罷了。這是在概念上的區別,具體的區別太多了。在Duboo這裏被改形成作註冊用了。
SQL
一、什麼狀況索引不會命中,會形成全表掃描
1)、詳解
二、創建索引的條件
1)、不常常修改的列
2)、列的可選值多的(性別這種就不能創建索引)
3)、常常出如今where、order by、group by的列
三、sql優化
1)、表關聯根據數據量大小,先關聯後關聯是不同的
2)、那些能夠過濾掉最大數量記錄的條件必須寫在WHERE子句的最末尾
3)、還有數據類型 必定要是合理的,別數字類型加了個「」進行查詢
4)、利用索引,注意sql是否是引起了全表掃描
四、內鏈接加where和正常加where的區別
1)、內鏈接加where(就是先賽選一下表裏數據在匹配)
2)、正常where 就是過濾表數據
五、mysql 經常使用函數
1)、日期啊,格式化啊、字符串鏈接、聚合函數、CASE When then、MD5
六、Oracle 表空間
1)、
七、Oracle 特有的函數
1)、
八、Mysql 默認帳戶 能夠直接遠程登陸嗎
1)、不能夠遠程登陸、
九、什麼是樂觀鎖,悲觀鎖,共享鎖,排它鎖
1)、樂觀鎖(數據庫未實現,須要本身實現,通常都是經過一列來進行標識)
2)、悲觀鎖(數據庫實現,操做以前先上鎖)
3)、共享鎖(對於多個不一樣的事務,對同一個資源共享同一個鎖)
4)、排它鎖(就是資源本身鎖住,不允許修改,update、insert、delete會自動加排它鎖)
十、mysql查詢字段區不區分大小寫?
1)、不區分
十一、mysql 字段類型作比較或者連接兩個表的時候 必須類型統一嗎?
1)、不是必須
十二、mysql 函數和存儲過程區別
1)、函數(更像是加在where裏的一個條件,比較簡單一點,通常都是結合select來使用)
2)、存儲過程(就是複雜的純sql編寫的一個邏輯,通常都是獨立使用)
1三、SQL注入的原理以及如何預防,並舉例
1)、Mybatis 的 $和# 就是一個預防sql注入的寫法
2)、還有數據庫層框架的 佔位傳入參數 不直接寫在鏈接字符串
3)、使用正則啊 過濾掉用戶輸入的非法內容
1四、Union All 和 Union的區別
1)、Union All 兩個表 分別查詢出來多少數據就顯示多少數據
2)、Union 就是說 兩個表的查詢語句 查詢出來的數據 須要進行個去從
1五、數據庫 若是說A B表 關聯外建是abc 那麼 AB表共同有個列爲C 我如今inner join後 我限制A表 C列爲D值,那麼B表會一樣限制表數據嗎? B表abc外建值同樣 可是B表 C列的值並非D可否都查出來?
1)、不會,能夠查出來
經常使用設計模式
1)、單例模式:懶漢式、餓漢式、雙重校驗鎖、靜態加載,內部類加載、枚舉類加載。保證一個類僅有一個實例,並提供一個訪問它的全局訪問點。
2)、代理模式:動態代理和靜態代理,何時使用動態代理。
3)、適配器模式:將一個類的接口轉換成客戶但願的另一個接口。適配器模式使得本來因爲接口不兼容而不能一塊兒工做的那些類能夠一塊兒工做。
4)、裝飾者模式:動態給類加功能。
5)、觀察者模式:有時被稱做發佈/訂閱模式,觀察者模式定義了一種一對多的依賴關係,讓多個觀察者對象同時監聽某一個主題對象。這個主題對象在狀態發生變化時,會通知全部觀察者對象,使它們可以自動更新本身。
6)、策略模式:定義一系列的算法,把它們一個個封裝起來, 而且使它們可相互替換。
7)、外觀模式:爲子系統中的一組接口提供一個一致的界面,外觀模式定義了一個高層接口,這個接口使得這一子系統更加容易使用。
8)、命令模式:將一個請求封裝成一個對象,從而使您能夠用不一樣的請求對客戶進行參數化。
9)、建立者模式:將一個複雜的構建與其表示相分離,使得一樣的構建過程能夠建立不一樣的表示。
10)、抽象工廠模式:提供一個建立一系列相關或相互依賴對象的接口,而無需指定它們具體的類。
Docker
一、docker -v 掛載單個文件和掛載數據卷區別
1)、-v 掛載單個文件 是將宿主機上文件 掛載到容器內部(宿主機必須有相同文件)
2)、-v 掛在數據卷 是將宿主機上數據卷 掛載到容器內部