做者 : Stanley 羅昊
本人自行總結,純手打,有疑問請在評論區留言
【
轉載請註明出處和署名,謝謝!】
一.java基礎
1.多態有哪些體現形式?
重寫、重載
2. Overriding的是什麼?Overloading是什麼?
Overriding是重寫 Overloading是重載
3. 接口與抽象類的區別?
抽象類速度比接口快;
接口是稍微有點慢的,由於它須要時間去尋找在類中實現的方法;
抽象方法能夠有main方法而且咱們能夠運行它;
接口沒有main方法,所以咱們不能運行它;
4. 接口在咱們現實中的好處?
咱們寫方法的時候,應該先定義接口,再定義實現類,這樣在後期改動的時候,接口能夠有多個實現類,能夠保證咱們代碼的靈活調用,不至於到後期維護的時候改動特別大,主要是提升了程序的靈活性;
5.java中的垃圾回收機制?
當咱們對象建立以後呢,這個時候對象處於可答狀態,就是能夠被訪問的狀態,在這個時候呢,對象的生命過程它是屬於可控制狀態,但,當咱們的對象好比在方法中定義的,那你方法調用完以後其實就已經沒用了,那它就會處於不可答狀態;
再舉個例子,你new出來的一個對象,本來是你有值的,如今你又給它賦成null值了,那你new的那個對象,就已經成爲垃圾了;
因此,那些不可答資源呢,就被稱之爲,垃圾資源,而這個垃圾資源呢,會被這個java中的垃圾回收器按照必定的原則進行回收,這個一系列的操做是由java虛擬機的內附進行操做的,在正常狀況下,咱們是無權干涉的;
6.int與integer的區別?
int的值存在棧裏面,integer的值,存在堆裏面;
integer是包裝類,它是一個對象,能夠賦空值,而int是基本數據類型是不能賦空值的;
二.多線程
1.多線程是幹嗎的
多線程就是解決程序在使用過程當中會出現一些併發操做;
若是出現併發了,怎麼辦?
能夠作同步,使用synchronized關鍵字;
咱們能夠在方法上,或者在代碼塊上加上synchronized,這樣的話,多個線程在同一個時間片就會只有一個線程能進來,這個就能夠保證你程序中的數據共享問題獲得足夠的解決;
2.若是你使用synchronized的話,會影響效率,你如何解決?
若是出現這種狀況的話,咱們就可使用樂觀鎖來解決;
樂觀鎖是在數據中存儲的有一個狀態,就是在數據庫中,有一個狀態列,當我在操做的時候呢。你如我如今準備向數據庫中插入一條數據,這個時候,有一個狀態在哪兒放着,若是我沒操做完,其餘人是不能操做的,這樣的話能夠保證,你都能進來,可是到數據庫這兒,你被我卡死了,由於我還沒幹完呢,你就不能作;
樂觀鎖的概念就是從數據庫的層面,而後呢,在數據庫中加了一列,經過判斷這一列的狀態呢,來判斷當前這個線程是否能夠進行操做,若是當前線程沒有操做完,下一個線程須要在後面等待,這個等待不是經過加鎖來實現的,而是經過數據庫的邏輯進行判斷的;
說樂觀鎖的話,就能夠在必定程度上的進行優化;
3.用隊列的方式,利用隊列的特性,先進先出;
三.Javaweb基礎
1.什麼是鏈接池?
Tomcat啓動的時候,它就會給默認建立100個鏈接池【能夠設置多個,固然有最大限制度】在哪兒放着,這就鏈接池;
鏈接池的好處呢?
有了鏈接池,它就能夠保證你程序在執行過程當中,你須要連數據拿東西了,就來池子裏面拿一個,拿走你不用管,用完它就會自動還回去,那這個是否是就能夠理解成一個無限循環的池子?這就是鏈接池;
2.什麼是數據源?
在配置中,除了配置 數據庫 用戶名 密碼 地址 意外還須要注意幾項:
鏈接池的屬性:
能夠配置最大鏈接數
最大等待時間
最大鏈接時間
鏈接超時時間
3.經過Tomcat如何配置數據源?
在conf目錄下的context.xml文件中
4.解釋一下什麼是JNDI?
J是java的意思, N是命名的意思,D是目錄的意思,I是接口;
5.JSP的九大內置對象?
equest、response、session、application、out、pagecontext、config、page、exception
詳細介紹:https://www.cnblogs.com/leirenyuan/p/6016063.html
6.servlet的生命週期?
Servlet的生命週期包含了下面4個階段:html
1.加載和實例化java
2.初始化程序員
3.請求處理web
4.服務終止spring
7.什麼是servlet?
Servlet是一個運行了面向請求/ 響應服務器中的網絡模塊。sql
請求是客戶的一個調用,多是遠程的。數據庫
請求包含了客戶要發送給服務器的數據。json
響應是服務器返回給客戶的回答該請求的數據。Servlet是一個JAVA對象,他以請求爲輸入,分析其數據,執行一些邏輯運算,並給客戶發回一個響應。
另外一方面,Servlet做爲駐留在服務器端HTTP明白的中間層,它們知道怎樣在HTTP中經過RMI或IIOP在EJB和客戶之間進行通訊。跨域
8.Tomcat目錄下有什麼?分別是幹嗎的?
bin目錄:
裏面存放可執行文件
lib目錄:
存放jar包
conf目錄
裏面存放一些配置文件
temp目錄
裏面存放一些臨時文件
webapps目錄
項目存放地
work目錄
work目錄用來存放tomcat在運行時的編譯後文件,例如JSP編譯後的文件。緩存
清空work目錄,而後重啓tomcat,能夠達到清除緩存的做用
logs目錄
tomcat每次啓動時,自動在logs目錄下生產如下日誌文件,按照日期自動備份。能夠幫助咱們更好的找出錯誤。
9.springboot微服務你瞭解過沒有?
瞭解過,微服務呢,咱們也作過,可是對於咱們公司來講呢,仍是以單體項目居多!
單體項目就是,咱們這個項目沒有涉及到那麼高的併發量;
因此說,咱們就作過一些單體項目;
可是呢,咱們爲了解決在單體項目中訪問量較大的狀況,咱們在項目中也作過一些簡單的集羣,也能達到咱們的項目需求;
四.數據庫
1.什麼是存儲過程?
存儲過程是事先通過編譯並存儲在數據庫中的一段
SQL語句的集合,調用存儲過程能夠簡化應用開發人員的不少工做,減小數據在數據庫和應用服務器之間的傳輸,對於提升數據處理的效率是有好處的
2.什麼是觸發器?
觸發器(trigger)是SQL server 提供給程序員和數據分析員來保證數據完整性的一種方法,是一種特殊類型的存儲過程,它是與表事件相關的特殊的存儲過程,它的執行不是由程序調用,也不是手工啓動,而是由事件來觸發。
3.什麼是視圖?
數據庫中的視圖,是一個虛擬表,其內容由查詢定義。同真實的表同樣,視圖包含一系列帶有名稱的列和行數據。可是,視圖並不在數據庫中以存儲的數據值集形式存在。行和列數據來自由定義視圖的查詢所引用的表,而且在引用視圖時動態生成。
五.Spring SpringMvc mybatis
1.聊聊Spirng
Spring呢,他是一個容器,對我我來講呢,我用它更多的是來作對象的管理,以及咱們資源的整合。
好比說,咱們用Spring中的IOC,用它來進行對象的注入,好比咱們在分層開發的時候呢,咱們可讓逐層對象之間的依賴關係交給spring來管理,spring呢就是經過ioc的方式來實現的;
注入的形式呢,通常上都是經過註解,固然呢,也能夠經過配置文件經過配置bean的方式進行註解;
get set方式注入 或經過p命名空間進行注入,還有就是經過構造方法進行注入,通常呢,用的最多的仍是經過註解進行注入;
Spring還有一個aop,面向切面;
當咱們作程序的時候呢,咱們能夠在程序代碼不作任何改動的狀況下,咱們在執行的目標方法以前,或者以後,咱們能夠用aop的形式呢,去植入一些加強代碼,這就是aop;
好處呢?就是讓咱們的程序不作任何改動,咱們能夠爲所欲爲的去加入咱們想要的東西;
aop呢,更多體如今聲明式事物;
2.什麼是聲明式事物?怎麼配置的?
裏面須要先配置切面(跟那些方法加事物),第二呢,再去配置加強,第三呢,把加強和這個切入點呢進行一個整合,這個時候切面就配好了;
spring呢支持,註解式事物;
3.spring的定時任務,在什麼場景下使用;
好比定時的刪除數據
4.講講spring的聲明式事物的傳播機制是什麼?
事務傳播行爲就是多個事務方法調用時,如何定義方法間事務的傳播。Spring定義了7中傳播行爲:
(1)propagation_requierd:若是當前沒有事務,就新建一個事務,若是已存在一個事務中,加入到這個事務中,這是Spring默認的選擇。
(2)propagation_supports:支持當前事務,若是沒有當前事務,就以非事務方法執行。
(3)propagation_mandatory:使用當前事務,若是沒有當前事務,就拋出異常。
(4)propagation_required_new:新建事務,若是當前存在事務,把當前事務掛起。
(5)propagation_not_supported:以非事務方式執行操做,若是當前存在事務,就把當前事務掛起。
(6)propagation_never:以非事務方式執行操做,若是當前事務存在則拋出異常。
(7)propagation_nested:若是當前存在事務,則在嵌套事務內執行。若是當前沒有事務,則執行與propagation_required相似的操做。
5.spring的經常使用註解?
@Configuration把一個類做爲一個IoC容器,它的某個方法頭上若是註冊了@Bean,就會做爲這個Spring容器中的Bean。
@Scope註解 做用域
@Lazy(true) 表示延遲初始化
@Service用於標註業務層組件、
@Controller用於標註控制層組件(如struts中的action)
@Repository用於標註數據訪問組件,即DAO組件。
@Component泛指組件,當組件很差歸類的時候,咱們可使用這個註解進行標註。
@Scope用於指定scope做用域的(用在類上)
6.mybaits與其餘持久層框架的對比
先講講mybaits的優勢,再講講hibernate,而後再簡單的聊聊JPA;
7.mybatis的執行原理?
先把sqlsessionfactory建立出來;
而後再建立sqlsession;
而後就調用sqlsession裏面的一些方法,例如:
selectOne、liset、Delete,調用它們就能夠實現增刪改查;
8.mybatis主配置文件,裏面都有什麼信息項?
- 註冊存放DB鏈接四要素的屬性文件
- 註冊實體類的權限定性類名的別名
- 配置MyBatis運行環境,即數據源與事務管理器
- 註冊映射文件
9.mybatis中的一二級緩存
一級緩存是session級緩存,默認開啓的,它會把咱們已經查詢過的數據呢,會緩存到session裏面,可是若是是不一樣session,是不會共享的;
二級緩存是SessionFactory級別,它默認是不開啓的,須要在主配置文件中開始;
你能夠在某一個映射文件裏,我能夠指定我開啓,我能夠指定我使用緩存,固然,不是全部地方都用獲得二級緩存;
通常,一些使用較爲頻繁的一些數據呢,使用二級緩存,當下次再來拿相同的數據時,再也不將去訪問數據庫,而是從緩存中獲取數據;
若是緩存的數據較多,也能夠緩存到服務器的硬盤上;
六.SpringMvc的執行流程
一個請求過來,springmvc是如何處理的;
第一,它有一個核心的控制器DispatcherServlet,核心控制器呢,它須要斷定咱們當前的請求是否爲一個springmvc請求,這個呢,須要跟個人配置文件去對比,或者呢,去跟我咱們的註解去對比,註解裏面有一個RequestMapping,跟它去對比,固然,通常狀況下,咱們用的都是以註解的形式;
一個請求來,它就開始去控制器中去找,若是找到與這個請求相匹配的,springmvc呢它會用一系列的轉換器來進行初始化;
轉換器是什麼呢?
咱們的請求裏面若是有參數,這個轉換器呢它負責把個人蔘數呢轉換了一下,由於springmvc中的方法須要接收,好比說,傳過來的參數是字符串,這我這個接收的時候用的是整數,這個時候,轉換器就須要完成字符中跟整數的一個轉換過程;
好比說,我請求的這個sprinmvc是一個文件上傳,那麼呢,它就須要把我解析我上傳的這個文件,而後把個人這個文件經過轉換器的形式呢,轉換成springmvc可以識別的一個對象叫;
11.什麼是springmvc攔截器,如何配置?
所謂的springmvc攔截器就是,一個用戶請求過來,判斷這個用戶是否有權限訪問個人控制器,若是沒有權限,那麼我將直接終止你對個人訪問,若是有權限,那麼就會被springmvc的轉換器所攔截,所謂的轉換器就是參數轉換器;
最多見的一點就是,將你的參數封裝到實體裏面,須要讓你的springmvc控制器呢可以順利的獲取參數,和使用參數;
12.轉換器會轉換失敗嗎?失敗後發生什麼?
若是我這個後臺須要接收的是一個整數,你傳過來一個abc,這個時候,轉換器就會轉換失敗;
轉換器轉換失敗的時候,這個時候,你的請求將被終止,直接返回;
轉換器,轉換成功的時候,它就會開始跳到你的控制器裏,去執行你的service、執行你的頁面跳轉、執行你的業務邏輯,若是執行完了以後,就會須要進行頁面跳轉;
這個時候,咱們就須要斷定,當前返回的是JSON仍是仍是須要跳頁面;
若是是跳頁面的話,它須要根據springmvc配置那個靜態資源的路徑,去找我對應的頁面;
那,若是沒有呢?返回的是JSON的呢?
就把咱們最後返回的集合,經過咱們阿里巴巴的FastJson,經過這個打包工具呢,會把咱們最後的獨享轉換成JSON字符串,最後返回到頁面上解析;
13.簡述springmvc執行流程
第一,先通過核心控制器(DispatcherServlet)檢測是否是springmvc請求;
第二,須要經過攔截器來斷定當前你的權限等等是否可以訪問;
第三,須要經過轉換器進行參數一系列轉換;
第四,訪問;
第五,返回並判斷是JSON仍是頁面;
14.springmvc的全局異常是怎麼處理的?
若是我在執行這個控制過程當中,有沒有可能個人代碼執行的時候報500了?
有可能吧!
這個時候,springmvc就不會往下執行了,這個時候咱們就須要配置一個全局異常處理,保證springmvc呢可以跳轉到一個正常合法的頁面;
15.springmvc中常見的註解?
@Controller
@RequestMapping
RequestMapping是一個用來處理請求地址映射的註解,可用於類或方法上。用於類上,表示類中的全部響應請求的方法都是以該地址做爲父路徑。
@Resource和@Autowired
@Resource和@Autowired都是作bean的注入時使用,其實@Resource並非Spring的註解,它的包是javax.annotation.Resource,須要導入,可是Spring支持該註解的注入。
一、共同點
二者均可以寫在字段和setter方法上。二者若是都寫在字段上,那麼就不須要再寫setter方法。
二、不一樣點
(1)@Autowired
@Autowired爲Spring提供的註解,須要導入包org.springframework.beans.factory.annotation.Autowired;只按照byType注入。
@requestParam
@requestParam主要用於在SpringMVC後臺控制層獲取參數,相似一種是request.getParameter("name"),它有三個經常使用參數:defaultValue = "0", required = false, value = "isApp";defaultValue 表示設置默認值,required 銅過boolean設置是不是必需要傳入的參數,value 值表示接受的傳入的參數類型。
@ResponseBody
做用: 該註解用於將Controller的方法返回的對象,經過適當的HttpMessageConverter轉換爲指定格式後,寫入到Response對象的body數據區。
使用時機:返回的數據不是html標籤的頁面,而是其餘某種格式的數據時(如json、xml等)使用;
16.springmvc怎樣進行數據校驗?
JSR 303 用於對Java Bean 中的字段的值進行驗證,
使得驗證邏輯從業務代碼中脫離出來。是一個運行時的數據驗證框架,在驗證以後驗證的錯誤信息會被立刻返回。通常用於表單提交頁面(如用戶名必填、只能由數字字母組成等等)。
17.springmvc怎麼處理日期?
在實體類字段上加:
@DateTimeFormat(pattern="yyyy-MM-dd")
七.springboot
1.springboot如何配置數據源?
2.springboot如何配置兩個數據源?
連接:https://www.cnblogs.com/fengmao/p/7538854.html
3.springboot如何讀取屬性文件?
通常是經過value,在類的屬性上加一個value,括號裏面呢這個value的值呢就寫你配置文件裏的值就能夠了;
4.如何實現跨域?
JSONP,該協議的一個要點就是容許用戶傳遞一個callback 參數給服務端。
利用<script>標籤沒有跨域限制的「漏洞」,來達到與第三方通信的目的。當須要通信時,本站腳本動態建立一個<script>元素,地址指向第三方的API網址