學習技術5步走:javascript
a.概念 是什麼 ,能幹啥 ,有啥用css
b.爲啥要用? 有啥優點前端
c.流程+原理 (面試最重要的點) 底層代碼vue
d.如何使用 核心api(會不會用方法 ,註解)java
e.和項目結合 。mysql
1.關係型數據庫,隔離級別默認使用可重複讀react
2.事務四大特性:原子性,一致性,隔離性,持久性jquery
3.索引:ios
索引是查詢變快的緣由:B+Tree,不用掃描整張表獲得須要的數據,沒有用索引的時候,須要遍歷雙向鏈表來定位對應的頁,而有了索引,則能夠經過一層層「目錄」定位到對應的頁上。nginx
index----普通索引,unique---- 惟一索引,primary key ---- 主鍵索引,組合索引,全文索引
4.存儲引擎 MyISAM 和 InnoDB
默認使用InnoDB,支持事務,外鍵,MyISAM不支持。
如今通常都選用InnoDB,主要是InnoDB最小的鎖粒度是行鎖,MyISAM最小的鎖粒度是表鎖。一個更新語句會鎖住整張表,致使其餘查詢和更新都會被阻塞,所以併發訪問受限。
5.delete、drop、truncate
當你再也不須要該表時,用 drop;
當你仍要保留該表,但要刪除全部記錄時,用 truncate;
當你要刪除部分記錄時, 用 delete.
注意: 對於有主外鍵關係的表,不能使用truncate而應該使用不帶where子句的delete語句,因爲truncate不記錄在日誌中,不可以激活觸發器
6.分佈式ID生成器
雪花算法生成惟一主鍵值
分庫分表是不要使用自帶的自增,會有可能不一樣文章生成一樣的id,使用分佈式ID生成器
1.隔離級別默認讀取已提交
1.事務:MySQL在innodb存儲引擎的行級鎖的狀況下才可支持事務,默認是自動提交,而Oracle徹底支持事務,默認不自動提交
2.分頁查詢:MySQL是直接在SQL語句中寫"select... from ...where...limit x, y",有limit就能夠實現分頁;而Oracle則是須要用到僞列ROWNUM和嵌套查詢
3.事務隔離級別:MySQL是可重複讀的隔離級別,而Oracle是讀取已提交的隔離級別
4.保存數據的持久性:MySQL是在數據庫更新或者重啓,會丟失數據,Oracle把提交的sql操做線寫入了在線聯機日誌文件中,保持到了磁盤上,能夠隨時恢復
1.客戶端和服務器端之間數據傳輸的格式規範,請求-響應協議,無狀態協議(指協議對於事務處理沒有記憶能力),解決辦法:一、Cookie 二、經過Session會話保存。無鏈接(限制每次鏈接只處理一個請求)
2.常見Http協議狀態:
200:請求被正常處理
301:永久性重定向
400:請求報文語法有誤,服務器沒法識別(例:接口接受數字,請求發送的中文)
403:請求的對應資源禁止被訪問
404:服務器沒法找到對應資源
500:服務器內部錯誤,沒法完成請求 ,邏輯,代碼等錯誤
1.7個HTTP方法:GET、POST、PUT、DELETE、PATCH、HEAD、OPTIONS
2.網絡通訊規範,rest風格是用來描述接口的,http 接口按照rest風格設計就是 restfull http
3.冪等性:不論你請求多少次,資源的狀態是同樣的。
1.選擇符:id選擇器(#myid)、類選擇器(.myclassname)、標籤選擇器(div, h1, p)、相鄰選擇器(h1 + p)、子選擇器(ul > li)、後代選擇器(li a)、通配符選擇器(*)、屬性選擇器(a[rel=」external」])、僞類選擇器(a:hover, li:nth-child)
1.腳本語言(不須要編譯),用於加強HTML頁面,以交互式和動態的方式呈現網頁
2.跨平臺,不依賴於操做系統,僅須要瀏覽器的支持。
3.DOM處理網頁內容,BOM與瀏覽器交互
4.回調函數:能夠做爲參數傳遞給另外一個函數的函數,並在某些操做完成後執行。
1.是一個簡潔而快速的JavaScript庫,
2.方便獲取DOM元素
3.統一Ajax操做
1.商業級數據圖表,它是一個純JavaScript的圖標庫
1.構建用戶界面的漸進式框架,核心是雙向數據綁定,組件化
2.MVVM設計模式即model,view,viewmodel,它是數據驅動模式,即全部的一切經過操做數據來進行,而儘可能避免操做dom樹。
3.axios異步
1.基於Vue2.0開發,提供了豐富的PC端組件
1.前端頁面渲染
1.是一個使用 Vue.js 開發跨平臺應用的前端框架,開發者編寫一套代碼,可編譯到iOS、Android、H五、小程序等多個平臺。
1.在客戶端保存,保存用戶名密碼
1.在服務端保存
2.session 的運行依賴 session id,而 session id 是存在 cookie 中的,也就是說,若是瀏覽器禁用了 cookie ,同時 session 也會失效(可是能夠經過其它方式實現,好比在 url 中傳遞 session_id)
1.介紹
負責處理客戶請求,把結果返回給客戶。交互式的瀏覽和生成數據,生成動態web內容,必須實現Servlet接口,用來處理網絡請求的一套規範.
2.生命週期
1.收到請求後檢查是否存在後建立Servlet實例對象
2.調用Servlet對象的init()
3.調用service()將請求(HttpServletRequest)和響應(HttpServletResponse)對象做爲參數傳遞進去
4.WEB應用程序被中止或從新啓動以前,調用destroy()
3.forward()與redirect()區別?
forward():轉發,一次請求,共享request數據,服務器行爲,地址欄不變
redirect():重定向,兩次請求,不能共享數據,客戶端行爲,地址欄改變
1.動態網頁技術標準,部署於服務器,響應客戶端發送的請求,根據請求動態的生成web網頁,實現以靜態頁面爲模板動態生成其中部份內容,是Servlet技術的擴展,HTML+Java片斷
2.處理 JSON,一般須要配套使用 JQuery 控件
3.和Servlet相比,Jsp的可讀性強,容易看得懂
4.有九個內置對象:request、response、out、session、application、pageContext、config、page、exception
它提供了在 JSP 中簡化表達式的方法
使網頁實現異步更新。
過濾器,
監聽器,
分佈式版本控制系統,通常工做流程以下:
一、git clone 克隆遠程資源到本地目錄,做爲工做目錄;
二、而後在本地的克隆目錄上添加或修改文件;
三、若是遠程修改了,須要同步遠程的內容,直接git pull就能夠更新本地的文件;
四、本地在修改以後,能夠經過git status 查看修改的文件。而後使用git add 添加修改的文件暫到緩衝區;
五、在添加以後,可使用git commit添加到當前的工做區;
六、在修改完成後,若是發現錯誤,能夠撤回提交併再次修改並提交;
七、git push將本地的修改推送到遠程的git服務器。
1.集中式版本控制器
1.主要服務於基於Java平臺的項目構建、依賴管理和項目信息管理,爲了避免重複造輪子。
2.優秀的項目構建工具,配置文件 :pom.xml
3.clean,package,install
1.快捷鍵:
Ctrl+Alt+V :自動建立變量也就是=號前的變量定義
Alt+回車:導入包自動修正
Ctrl+Alt+L: 格式化代碼
Ctrl+P: 提示參數
Ctrl + F : 在當前文件進行文本查找
Ctrl + Shift + F : 全局查找
Ctrl + R : 在當前文件進行文本替換
Ctrl + Shift + R : 全局替換
Ctrl + Shift + Z : 取消撤銷
F2 : 跳轉到下一個高亮錯誤 或 警告位置
反射是框架設計的靈魂
1.開源框架,Spring是一個輕量級的控制反轉(IoC)和麪向切面(AOP)的容器框架。用Spring來建立對象,整合其餘框架,經過反射建立對象。
2.Spring是爲了解決企業級應用開發的複雜性而建立的,簡化開發:
1.基於POJO的輕量級和最小入侵性編程
2.經過IOC,依賴注入(DI)和麪向接口實現解耦
3.基於切面(AOP)和慣例進行聲明式編程
4.經過切面和模板減小樣式代碼
3.IOC控制反轉,直接在spring容器中拿對象,DI依賴注入(將對象之間的依賴關係交由框架處理,減低組件的耦合性),構造器注入、setter方法注入、根據註解注入
4.AOP面向切面編程,動態代理,接口jdk,繼承cglib,實現程序功能的統一維護,事務管理(配置文件中添加事務管理器和開啓註解,@Transaction),日誌
5.註解:
一、聲明bean的註解
@Component 組件,沒有明確的角色 @Service 在業務邏輯層使用(service層) @Repository 在數據訪問層使用(dao層) @Controller 在展示層使用,控制器的聲明(Controller層)
二、注入bean的註解
@Autowired:由Spring提供
@Configuration
@Value
1.和 Spring 其餘框架無縫集成,是一個實現了MVC設計模式的請求驅動類型的輕量級Web框架,經過把Model,View,Controller分離,將web層進行職責解耦
2.SpringMVC的流程:
(1)用戶發送請求至前端控制器DispatcherServlet;
(2) DispatcherServlet收到請求後,調用HandlerMapping處理器映射器,請求獲取Handle;
(3)處理器映射器根據請求url找到具體的處理器,生成處理器對象及處理器攔截器(若是有則生成)一併返回給 DispatcherServlet;
(4)DispatcherServlet 調用 HandlerAdapter處理器適配器;
(5)HandlerAdapter 通過適配調用 具體處理器(Handler,也叫後端控制器);
(6)Handler執行完成返回ModelAndView;
(7)HandlerAdapter將Handler執行結果ModelAndView返回給DispatcherServlet;
(8)DispatcherServlet將ModelAndView傳給ViewResolver視圖解析器進行解析;
(9)ViewResolver解析後返回具體View;
(10)DispatcherServlet對View進行渲染視圖(即將模型數據填充至視圖中)
(11)DispatcherServlet響應用戶。
3.SpringMvc和AJAX相互調用:經過Jackson框架就能夠把Java裏面的對象直接轉化成Js能夠識別的Json對象。
4.POST請求中文亂碼:在web.xml中配置一個CharacterEncodingFilter過濾器,設置成utf-8
5.GET請求中文亂碼:修改tomcat配置文件添加編碼與工程編碼一致
6.異常處理:拋給Spring框架
7.經常使用的註解:
@RequestMapping:用於處理請求 url 映射的註解,可用於類或方法上。用於類上,則表示類中的全部響應請求的方法都是以該地址做爲父路徑。
@RequestBody:註解實現接收http請求的json數據,將json轉換爲java對象。
@ResponseBody:註解實現將conreoller方法返回對象轉化爲json對象響應給客戶。
@RequestParam:用在方法的參數前面
@PathVariable: 獲取路徑參數
1.半ORM(對象關係映射)框架,內部封裝了JDBC,將實體類映射成數據庫中的記錄
2.sql寫在xml,統一管理,優化
3.使用:依賴,application.yml配置,SpringBoot啓動類包掃描,dao繼承BaseMapper
Mybatis-Plus
1.性能損耗小:啓動即會自動注入基本CURD ,性能無損耗,直接面向對象操做
2.自動熱加載:Mapper對應的xml能夠熱加載,大大減小重啓Web服務器時間,提高開發效率
3.性能分析:自帶Sql性能分析插件,開發測試時,能有效解決慢查詢
4.全局攔截:提供全表delete、update操做智能分析阻斷
5.避免Sql注入:內置Sql注入內容剝離器,預防Sql注入攻擊
6.與Mybatis的不一樣,依賴,配置文件
1.對象/關係映射能力強,對於關係模型要求高的軟件,若是用hibernate開發能夠節省不少代碼,提升效率。
1.用於表的基本CRUD。
1.構建一個個功能獨立的微服務應用單元,使用SpringBoot能夠幫咱們快速構建一個應用
2.簡化了spring的開發過程,開箱即用(遠離繁瑣的配置),約定優於配置(由SpringBoot自己來配置),自動裝配原理。
3.application.yml配置文件:服務名,數據庫鏈接,端口號
4.註解:
@SpringBootApplication 啓動類 @EnableAutoCfiguration 根據添加jar依賴猜想你想如何配置spring @Autowired 自動注入 @ComponentScan 自動掃描包 @RestController 以json的格式輸出 @ResponseBody 異步請求的時候常使用,用於構建restful的API @Repository DAO組件 @service 業務層 @PathVariable 自動賦值 @PequestParam 獲取請求參數的值
1.微服務框架的規範,大型分佈式網絡服務的調用,由SpringCloud來完成,實現分佈式
2.功能:服務註冊與發現,負載均衡,服務熔斷與限流,智能路由,控制總線,鏈路監控
CAP:分佈式系統中,一致性(c),可用性(a),分區容錯性(p),p是必須保證的
1.服務註冊與發現,AP原則
2.兩大組件:Eureka Server,Eureka client
3.應用啓動後向Server發送心跳,週期三十秒,90秒沒收到會移除服務節點,自我保護:爲網絡異常時保持高可用設計的,不會註銷服務實例,直至心跳恢復
4.集羣:Eureka Server啓動時默認註冊本身,配置多個相互註冊,高併發,高可用
5.將微服務註冊進Eureka:
首先你要建立一個eureka的服務端,弄一個Model,而後給它的pom文件加上依賴
啓動類上加上註解:@EnableEurekaServer
編寫yml配置文件
在被調用端的啓動類上加上註解:@EnableDiscoveryClient
1.客戶端負載均衡
2.ribbon 負責獲取註冊中心的遠程服務信息以及提供負載均衡功能
1.輕量級rest客戶端,就像restTemplate 的簡化,Web Service客戶端
2.
1.RPC 分佈式服務框架,CP原則
2.服務方與消費方遠程調用,將核心業務抽取出來,做爲獨立的服務,分佈式
3.配置方式:(1)Spring 配置方式 (2)Java API 配置方式
4.Dubbo中zookeeper作註冊中心,若是註冊中心集羣都掛掉,發佈者和訂閱者之間還能通訊麼:
能夠通訊的,啓動dubbo時,消費者會從zk拉取註冊的生產者的地址接口等數據,緩存在本地。每次調用時,按照本地存儲的地址進行調用;掛掉是沒關係的,但前提是你沒有增長新的服務,若是你要調用新的服務,則是不能辦到的。
1.註冊中心
2.zk會出現這樣一種狀況,當master節點由於網絡故障與其餘節點失去聯繫時,剩餘節點會從新進行leader選舉。問題在於,選舉leader的時間太長,30 ~ 120s, 且選舉期間整個zk集羣都是不可用的,這就致使在選舉期間註冊服務癱瘓。在雲部署的環境下,因網絡問題使得zk集羣失去master節點是較大機率會發生的事,雖然服務可以最終恢復,可是漫長的選舉時間致使的註冊長期不可用是不能容忍的。
1.網關,用戶認證
2.業務流程說明以下:
一、客戶端請求認證服務進行認證。
二、認證服務認證經過向瀏覽器cookie寫入token(身份令牌)
認證服務請求用戶中心查詢用戶信息。
認證服務請求Spring Security申請令牌。
認證服務將token(身份令牌)和jwt令牌存儲至redis中。
認證服務向cookie寫入 token(身份令牌)。
三、前端攜帶token請求認證服務獲取jwt令牌****
前端獲取到jwt令牌並存儲在sessionStorage。
前端從jwt令牌中解析中用戶信息並顯示在頁面。
四、前端攜帶cookie中的token身份令牌及jwt令牌訪問資源服務
前端請求資源服務須要攜帶兩個token,一個是cookie中的身份令牌,一個是http header中的jwt令牌
前端請求資源服務前在http header上添加jwt請求資源
五、網關校驗token的合法性
用戶請求必須攜帶token身份令牌和jwt令牌
網關校驗redis中token是否合法,已過時則要求用戶從新登陸
六、資源服務校驗jwt的合法性並完成受權
資源服務校驗jwt令牌,完成受權,擁有權限的方法正常執行,沒有權限的方法將拒絕訪問。
1.安全認證服務框架,原理就是在訪問咱們的系統前加了一系列的過濾器
1.客戶應用向受權服務器請求令牌與受權服務器頒發令牌的過程標準化,OAuth2會提供受權請求,訪問令牌和刷新令牌
2.應用場景:
第三方應用受權登陸:在APP或者網頁接入一些第三方應用時,時長會須要用戶登陸另外一個合做平臺,好比 QQ,微博,微信的受權登陸。
原生app受權:app登陸請求後臺接口,爲了安全認證,全部請求都帶token信息,若是登陸驗證、請求後臺數據。
先後端分離單頁面應用(spa):先後端分離框架,前端請求後臺數據,須要進行oauth2安全認證,好比使用vue、react後者h5開發的app。
1.路由,過濾器()核心功能
2.加在整個微服務最前沿的防火牆和代理器,隱藏微服務IP端口信息,從而增強保護,自己也是一個微服務,須要註冊到Eureka服務註冊中心
3.實現請求的鑑權,IP黑白名單,特定地址攔截
1.業務複雜訪問量高的時候用的多,咱們能夠很方便的實現資源隔離、限流、超時設計、服務降級等服務容災措施,而且還提供了強大的監控,能夠查看各個熔斷器的容許狀況。
2.雪崩效應:服務與服務之間的依賴,當一個服務出現問題,形成系統中的其餘服務出現問題,甚至致使系統奔潰。
3.服務容災:資源隔離、超時設定、服務降級、服務限流
4.Hystrix提供了一個HystrixCommand用來包裝調用請求。
5.如何使用:
在spring boot中使用Hystrix,只須要引入spring-cloud-starter-hystrix,
而後添加註解使用Hystrix,@EnableCircuitBreaker,@EnableHystrixDashboard
最後在須要使用熔斷器的地方標記註解便可。
@HystrixCommand(groupKey = "xxx", fallbackMethod = "yyy") public String doSomething()
1.輕量級分佈式文件系統,它對文件進行管理,功能包括:文件存儲、文件同步、文件訪問(文件上傳、文件下載)等,解決了大容量存儲和負載均衡的問題。特別適合以文件爲載體的在線服務,如相冊網站、視頻網站等等。
1.消息中間件,集羣,解耦(生產與消費經過MQ)、異步、削峯、(就像菜鳥驛站)
2.場景:不須要同步且耗時長的操做
3.缺點:下降了系統的穩定性:原本系統運行好好的,消息隊列掛了,系統可用性會下降;
增長了系統的複雜性:一致性問題、如何保證消息不被重複消費、如何保證消息可靠性傳輸等。
4.Spring Boot默認集成
5.工做模式:簡單,工做隊列,發佈訂閱,路由,通配符
1.存放高熱點,常常查詢的數據,常常修改或財務數據不放這裏,支持事務
2.自身是Map,數據key:value格式
3.數據類型:String,Hash,List,Set,zset(有序集合)
4.持久化:把內存的數據寫到硬盤中,RDB(默認,性能好),AOF(安全)
5.架構:單機,主從複製,哨兵,集羣
1.分佈式文件存儲的數據庫,非關係型數據庫,存儲Json格式數據 ,數據格式靈活。
2.最終一致性,更能保證用戶的訪問速度
3.文檔結構的存儲方式,可以更便捷的獲取數據
4.不支持事務操做,磁盤空間佔用比較大
5.內置GridFS,分佈式文件系統,能夠支持海量的數據存儲。
1.用戶經過瀏覽器向web服務器發送http請求,web服務器解析http請求將請求路徑的文件返回給瀏覽器,瀏覽器再將文件渲染顯示給咱們看,所以web服務器的做用就是返回服務端的靜態文件。
1.是servlet容器,是web服務器
2.在傳統的Web項目中,併發量小,用戶使用的少。因此在低併發的狀況下,用戶能夠直接訪問tomcat服務器,而後tomcat服務器返回消息給用戶。
3.應用場景:
一、 http服務器。Nginx是一個http服務能夠獨立提供http服務。能夠作網頁靜態服務器。
二、 虛擬主機。能夠實如今一臺服務器虛擬出多個網站。例如我的網站使用的虛擬主機。
三、 反向代理,負載均衡。當網站的訪問量達到必定程度後,單臺服務器不能知足用戶的請求時,須要用多臺服務器集羣可使用nginx作反向代理。而且多臺服務器能夠平均分擔負載,不會由於某臺服務器負載高宕機而某臺服務器閒置的狀況。
1.做用:
2.異步,減輕後端Web服務器的壓力
3.多進程機制,好處是各個進程之間相互獨立,不須要加鎖,減小了使用鎖對性能形成影響,同時下降編程的複雜度,下降開發成本。
4.負載均衡做用:
一、轉發功能:按照必定的算法【權重、輪詢】,將客戶端請求轉發到不一樣應用服務器上,減輕單個服務器壓力,提升系統併發量。
二、故障移除:經過心跳檢測的方式,判斷應用服務器當前是否能夠正常工做,若是服務器期宕掉,自動將請求發送到其餘應用服務器。
三、恢復添加:如檢測到發生故障的應用服務器恢復工做,自動將其添加處處理用戶請求隊伍中。
5.負載均衡配置:
1.查看進程: ps-ef|grep
2.查看端口: netstat -anp|grep
3.壓縮: tar -czf
4.解壓: tar -xvzf
5.建立目錄:mkdir
6.查看日誌: 實時日誌:tail -f XXX.log(查看tomcat運行日誌:tail -f catalina.out)
搜索關鍵字附近日誌:cat -n filename | grep "關鍵字"
1.虛擬機,
1.是 Linux操做系統品牌
1.Docker的思想來自於集裝箱,可讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,而後發佈到任何流行的 Linux 機器上,也能夠實現虛擬化。
2.Web 應用的自動化打包和發佈。自動化測試和持續集成、發佈。
3.更快速的交付和部署,高效的部署和擴容,更高的資源利用率,更簡單的管理
1.分佈式全文檢索引擎
2.基於Lucene,開箱即用,簡化操做,對外提供Restful 接口來操做索引、搜索。
3.head插件是ES的一個可視化管理插件,用來監視ES的狀態,並經過head客戶端和ES服務進行交互,好比建立映射、建立索引等
4.使用logstash採集數據,同步索引庫,刪除信息沒法使用logstash,在service方法刪除課程信息時將索引庫中的也刪除
5.數據分散,彙總到一張表來讓logstash採集數據,部署集羣
6.IK分詞器
1.模板引擎,模板+數據
2.模板:好說,提早編寫出來;數據:編輯頁面信息時定義一個dataUrl(例:由開發輪播圖管理的程序員提供),讀頁面信息遠程請求http地址,拿到數據
3.過程:1.靜態化程序讀取頁面信息拿到dataUrl,2.遠程請求獲取數據模型,3.獲取頁面模板,MongoDB的分佈式文件系統GridFS,4.經過FreeMarker的API生成靜態化文件
1.配置管理中心,可以集中化管理應用不一樣環境、不一樣集羣的配置,配置修改後可以實時推送到應用端,而且具有規範的權限、流程治理等特性。
1.接口測試
2.與Nginx整合,開發接口文檔
1.http接口測試工具
2.可以發送任何類型的HTTP 請求 (GET,HEAD, POST,PUT。。。)
3.附帶任意數量的參數