救救孩子吧
初級(jí):9K-15K java基礎(chǔ)、主流的開發(fā)技術(shù):spring、springMVC、mybatis、servlet、restful、webservice、 前端:h5、c3、javaScript、jquery、ajax、angular、vue、 服務(wù)器:tomcat、apache、nginx maven、redis、dubbo、zookeeper、 多線程、設(shè)計(jì)模式、javaio、nio 網(wǎng)絡(luò)方面:網(wǎng)絡(luò)協(xié)議---tcp、udp、netty
中級(jí):15k-25k springcloud、dubbo(精通)、中間件:分布式技術(shù)、rpc技術(shù)、緩存、消息系統(tǒng) 要有大規(guī)模高并發(fā)訪問web應(yīng)用的經(jīng)驗(yàn)、熟悉一些虛擬化技術(shù):docker、vmware、openstack 深入理解數(shù)據(jù)結(jié)構(gòu)與算法、對(duì)設(shè)計(jì)模式精通(至少常用的七八中設(shè)計(jì)模式--精通) 高級(jí):25k--35k 了解大數(shù)據(jù)的技術(shù):hadoop、impala、fink、spark 精通jvm內(nèi)存管理、jvm性能調(diào)優(yōu)、熟悉分布式常用技術(shù)、rpc
目錄
集合
線程與進(jìn)程
什么是進(jìn)程
什么是線程
什么是并發(fā)和并行
怎么創(chuàng)建線程
MySQL
maven
springBoot
spring
mybatis
springMVC
Nginx
Feign
集合
-
Collection下有兩個(gè)集合:list接口、和set接口。另外一個(gè)分支是map接口
-
list接口的特點(diǎn):
-
元素有序
-
可重復(fù)
-
每個(gè)元素有自己的下標(biāo)
-
set接口的特點(diǎn):
-
元素?zé)o序
-
不可重復(fù)
-
每個(gè)元素沒有下標(biāo)
-
map接口的特點(diǎn):
-
存放的數(shù)據(jù)是key-value形式,一對(duì)k-v存放在一個(gè)node對(duì)象中,有因?yàn)閚ode實(shí)現(xiàn)了Entry接口,所以說一對(duì)k-v是一個(gè)Entry
-
key不允許重復(fù),如果重復(fù),新添加的會(huì)把舊的替換掉
-
key-value可以是任何引用類型的數(shù)據(jù)
-
list接口常用的實(shí)現(xiàn)類有Arraylist、LinkedList、Vector
-
Arraylist
-
可以存放任何值,多個(gè)null也可以重復(fù)存放
-
線程不安全,因?yàn)樵谠创a中沒有加synchronized關(guān)鍵字
-
查詢快,增刪慢
-
底層是封裝了一個(gè)Object類型的數(shù)組。
-
其擴(kuò)容機(jī)制采用的是位運(yùn)算符的形式:
當(dāng)創(chuàng)建ArrayList對(duì)象時(shí),如果使用的是無參構(gòu)造,這初始容量為0,第一次擴(kuò)容為10,再擴(kuò)容為其1.5倍。如果使用指定大小的有參構(gòu)造器,則初始容量為指定大小。再擴(kuò)容為其1.5倍
-
-
LinkedList
-
可以存放任何值
-
線程不安全
-
增刪快,查詢慢
-
底層是維護(hù)的是雙向鏈表和雙端隊(duì)列的特點(diǎn)。維護(hù)了兩個(gè)屬性分別為first和last分別指向首節(jié)點(diǎn)和尾結(jié)點(diǎn)。每個(gè)node對(duì)象里面又維護(hù)了prev、next、item三個(gè)屬性。
-
Vector
-
線程是同步的,即線程安全。因?yàn)槠洳僮鞣椒ㄓ衧ynchronized關(guān)鍵字
-
效率較低
-
底層是Object類型的數(shù)組
-
其擴(kuò)容機(jī)制采用的是三元運(yùn)算符。即原數(shù)組長度+原數(shù)組長度
set接口常用的實(shí)現(xiàn)類有:HashSet、LinkedHashSet、TreeSet
-
HashSet
-
不保證元素時(shí)有序的
-
不能有重復(fù)的元素或者對(duì)象
-
底層結(jié)構(gòu)為:hashMap結(jié)構(gòu),而hashMap結(jié)構(gòu)底層是數(shù)組+鏈表+紅黑樹
-
其擴(kuò)容機(jī)制為:默認(rèn)初始容量為16.裝載因子為0.75.也就是每次擴(kuò)容12
LinkedHashSet
LinkedHashSet是HashSet子類,繼承HashSet,實(shí)現(xiàn)set接口
添加元素順序與取出順序一致
不允許添加重復(fù)的元素
底層是一個(gè)LinkedHashMap,維護(hù)了一個(gè)數(shù)組+雙向鏈表
TreeSet:底層是TreeMap,也是紅黑樹的形式,便于查找數(shù)據(jù)
map接口常用的實(shí)現(xiàn)類有:HashMap、Hashtable、TreeMap
-
HashMap
-
不保證映射順序,因?yàn)榈讓邮且詇ash表的方式來存儲(chǔ)的
-
key不能重復(fù)、value可以重復(fù)。允許使用null鍵和null值
-
線程不安全
-
底層是數(shù)組+雙向鏈表+紅黑樹的形式呈現(xiàn)的
-
擴(kuò)容機(jī)制:第一次擴(kuò)容為16,臨界值為其0.75.再次擴(kuò)容為其2倍,臨界值也為2倍。
-
具體實(shí)現(xiàn)為:
-
添加一個(gè)元素時(shí),會(huì)先得到其hash值,再轉(zhuǎn)換成索引值
-
然后存儲(chǔ)數(shù)據(jù)表table,看這個(gè)索引值對(duì)應(yīng)的位置有沒有元素
-
沒有的話,直接加入。
-
有的話,通過equals比較,如果相同,放棄添加。如果不相同,添加到已存放元素后面,形成鏈表
-
當(dāng)鏈表長度>=8 并且table>=64時(shí),會(huì)進(jìn)化成紅黑樹
Hashtable
Hashtable的鍵和值都不能為null
線程安全
底層是:數(shù)組+鏈表+樹的結(jié)構(gòu)出現(xiàn)的
擴(kuò)容機(jī)制:初始容量為11,臨界值為8.擴(kuò)容時(shí),擴(kuò)容到初始容量的2倍+1
線程與進(jìn)程
什么是進(jìn)程
-
進(jìn)程是指運(yùn)行中的程序
-
進(jìn)程是程序的一次執(zhí)行過程,或是正在運(yùn)行的一個(gè)程序。是動(dòng)態(tài)過程:有它自身的產(chǎn)生、存在和消亡的過程
什么是線程
-
線程時(shí)有進(jìn)程創(chuàng)建的,是進(jìn)程的一個(gè)實(shí)體
什么是并發(fā)和并行
并發(fā):同一時(shí)刻,多個(gè)任務(wù)交替執(zhí)行。也就是單核CPU實(shí)現(xiàn)的多任務(wù)就是并發(fā)
并行:同一時(shí)刻,多個(gè)任務(wù)同時(shí)執(zhí)行,多核CPU可以實(shí)現(xiàn)并行
解釋
并發(fā):一個(gè)CPU來回執(zhí)行多個(gè)程序
并行:兩個(gè)CPU同時(shí)各自實(shí)現(xiàn)自己的一個(gè)程序
并發(fā)和并行同時(shí)存在:兩個(gè)CPU同時(shí)各自實(shí)現(xiàn)自己的多個(gè)程序
怎么創(chuàng)建線程
繼承Thread類,重寫run方法
實(shí)現(xiàn)Runnable接口,重寫run()方法
MySQL
-
存儲(chǔ)數(shù)據(jù)、管理數(shù)據(jù)的倉庫為數(shù)據(jù)庫
-
sql語句是用來存取數(shù)據(jù)、查詢、更新、管理數(shù)據(jù)庫系統(tǒng)的一種語言
-
sql語句分為
-
DCL(數(shù)據(jù)控制語言,是指權(quán)限的分配)
-
DDL(數(shù)據(jù)定義語言,是指創(chuàng)建的SQL語法)
-
DML數(shù)據(jù)操縱語言,是指對(duì)數(shù)據(jù)進(jìn)行CRUD
-
DQL數(shù)據(jù)查詢語言,是指對(duì)數(shù)據(jù)的各種查詢語法
-
事務(wù)的特性ACID
-
A(原子性)事務(wù)要么同時(shí)成功,要么同時(shí)失敗(不可分割)
-
C(一致性)多個(gè)事務(wù)之間相互獨(dú)立,互不干擾
-
I(隔離性)當(dāng)A事務(wù)對(duì)一個(gè)文件進(jìn)行修改后,B事務(wù)得到的這個(gè)文件數(shù)據(jù)時(shí)A事務(wù)修改后的數(shù)據(jù)。保證了數(shù)據(jù)的一致性
-
D(持久性)一旦事務(wù)提交后,對(duì)數(shù)據(jù)的修改是永久性的
-
事務(wù)的操作:
-
開啟事務(wù):start transaction
-
提交事務(wù):commit---最終持久性影響數(shù)據(jù)庫
-
回滾事務(wù):rollback---回滾到事務(wù)操作前
-
隔離級(jí)別
-
讀未提交:安全性最差,可能發(fā)生并發(fā)數(shù)據(jù)問題性能最好
-
讀已提交:犧牲了效率,提高了安全性---Oracle數(shù)據(jù)的默認(rèn)級(jí)別
-
可重復(fù)讀:犧牲了效率,提高了安全性---MySQL數(shù)據(jù)的默認(rèn)級(jí)別
-
串行化:安全性最高,但是效率太低
maven
-
跨平臺(tái)管理工具、主要服務(wù)于項(xiàng)目的構(gòu)建、依賴、版本信息的管理
-
有四大特征:
-
倉庫 :遠(yuǎn)程倉庫、鏡像倉庫、本地倉庫
-
依賴:每個(gè)jar包形成依賴,maven底層對(duì)它進(jìn)行導(dǎo)入
-
坐標(biāo):每個(gè)jar包都有其對(duì)應(yīng)的文件夾
-
命令
springBoot
-
簡化新spring應(yīng)用的初始搭建以及開發(fā)過程
-
特點(diǎn)
-
創(chuàng)建獨(dú)立的spring應(yīng)用程序
-
簡化maven配置
-
自動(dòng)配置spring
spring
-
spring是一個(gè)輕量級(jí)的開源框架,可以解決企業(yè)應(yīng)用開發(fā)的復(fù)雜度。也是一個(gè)分層框架,有7個(gè)模塊組成。 spring core 、spring AOP、spring DAO、spring context、spring web、spring MVC、spring ORM 它里面的有兩個(gè)核心思想:IOC和AOP
-
IOC 是控制翻轉(zhuǎn),也就是將對(duì)象的創(chuàng)建權(quán)利和對(duì)象的生命周期管理過程交給spring容器管理。 IOC是基于IOC容器完成的,底層原理是xml解析、工廠模式和反射 IOC的實(shí)現(xiàn)有兩種方式:一個(gè)是BeanFactory(Bean工廠)和applicationContext 因?yàn)樵趕pring中認(rèn)為萬物皆是bean,只要配置好bean的位置,spring就會(huì)自動(dòng)完成IOC。
spring容器管理的對(duì)象叫做bean。而bean管理指的就是spring的創(chuàng)建對(duì)象、和注入屬性 在spring的配置文件中,使用bean標(biāo)簽,在標(biāo)簽里面添加對(duì)應(yīng)的屬性就可以完成對(duì)象的創(chuàng)建。比如id屬性表示bean的唯一標(biāo)識(shí)、class屬性表示描述類的全路徑 而注入屬性也叫DI依賴注入。DI依賴注入也可以在創(chuàng)建對(duì)象的過程中spring根據(jù)對(duì)象的關(guān)系,自動(dòng)將其他對(duì)象注入 @AutoWird
-
AOP面向切面編程:利用AOP可以對(duì)業(yè)務(wù)邏輯的各個(gè)部分進(jìn)行隔離。從而使業(yè)務(wù)邏輯各部分之間的耦合度降低,提高程序的可重用性、也提高了額開發(fā)效率。 通俗點(diǎn)講:在不通過修改源碼的方式,在主干業(yè)務(wù)上添加新的業(yè)務(wù)模塊 這是因?yàn)锳OP的底層使用的是動(dòng)態(tài)代理。在有接口的情況下采用的是JDK動(dòng)態(tài)代理。沒有接口的情況下采用的CGLIB動(dòng)態(tài)代理
-
而在AOP中還有三大要素:
1.切面:把通知應(yīng)用到切點(diǎn)的過程 2.通知:實(shí)際增強(qiáng)的部分邏輯稱為通知 3.切點(diǎn):實(shí)際被增強(qiáng)的方法,就是切入點(diǎn) 通知分為:前置通知、后置通知、環(huán)繞通知、異常通知、最終通知
-
spring中的事務(wù): 一般添加在事務(wù)層(Service),在spring中對(duì)事務(wù)的控制一般采用聲明式事務(wù)管理。而聲明式事務(wù)一般采用的是注解的方式。
關(guān)鍵注解是:@Transaction 其注解的作用是默認(rèn)條件下,只攔截運(yùn)行時(shí)異常,也就是說當(dāng)發(fā)生運(yùn)行時(shí)異常,會(huì)發(fā)生事務(wù)的回滾
mybatis
-
Mybatis是一個(gè)優(yōu)秀的持久層框架,基于ORM設(shè)計(jì)思想,實(shí)現(xiàn)了以對(duì)象的方式操作數(shù)據(jù)庫.
-
mybatis參數(shù)天生為單值傳參,遇到多值傳參有三種方式:
-
封裝為對(duì)象
-
封裝為map集合
-
注解@Param
-
#號(hào)和$符用法:使用#號(hào)會(huì)默認(rèn)給數(shù)據(jù)添加一對(duì)雙引號(hào)。默認(rèn)有預(yù)編譯效果,防止sql注入。當(dāng)字段名稱為參數(shù)時(shí),需要用到$符。但是會(huì)有sql注入風(fēng)險(xiǎn)
-
轉(zhuǎn)義標(biāo)簽:> > < < & & <![CDATA[內(nèi)容]] 用于sql中出現(xiàn)大量轉(zhuǎn)義符號(hào)的場(chǎng)景
-
遇到相同的多個(gè)數(shù)據(jù),則一般采用集合的方式封裝數(shù)據(jù)。
-
array封裝
-
list封裝
-
map<list>封裝
-
resultType和resultMap的區(qū)別:當(dāng)使用單表時(shí)用resultType。多表時(shí)使用resultMap
-
關(guān)聯(lián)關(guān)系:一對(duì)一,一對(duì)多,多對(duì)多
-
一對(duì)一:mapper映射文件中使用association+javaType
-
一對(duì)多:mapper映射文件中使用collection+ofType
-
緩存:有一級(jí)緩存、二級(jí)緩存。都默認(rèn)開啟
-
一級(jí)緩存:同一個(gè)SqlSession對(duì)象中查詢相同數(shù)據(jù),可以實(shí)現(xiàn)數(shù)據(jù)共享
-
二級(jí)緩存:同一個(gè)SqlSessionFactory有效,但是需要手動(dòng)表示。<cache/>
springMVC
Nginx
-
Nginx是一個(gè)高性能的HTTP和反向代理web服務(wù)器,也是一款輕量級(jí)的Web服務(wù)器/反向代理服務(wù)器及電子郵件代理服務(wù)器 它的特點(diǎn)是:占有內(nèi)存少,并發(fā)能力強(qiáng)。
它里面的概念有:反向代理、負(fù)載均衡、動(dòng)靜分離
反向代理是 1.在客戶端與用戶之間有一個(gè)反向代理服務(wù)器 2.客戶端會(huì)以為反向代理服務(wù)器就是目標(biāo)服務(wù)器 3.反向代理服務(wù)器保護(hù)了目標(biāo)服務(wù)器的信息
負(fù)載均衡: 當(dāng)單個(gè)服務(wù)器服務(wù)器解決不了問題,增加多個(gè)服務(wù)器,
將原先請(qǐng)求集中分發(fā)給單個(gè)服務(wù)器的情況改為了將請(qǐng)求分發(fā)給多個(gè)服務(wù)器,將負(fù)載分發(fā)給不同的服務(wù)器
負(fù)載均衡中還有三大策略: 1.輪詢策略:根據(jù)配置信息,依次訪問服務(wù)器 2.權(quán)重策略:根據(jù)服務(wù)器的性能,手動(dòng)分配服務(wù)器的負(fù)載 3.IPHASH策略:讓用戶的請(qǐng)求跟服務(wù)器綁定,用戶初次訪問的是哪個(gè)服務(wù)器,以后永遠(yuǎn)訪問其服務(wù)器
動(dòng)靜分離:
將靜態(tài)資源和動(dòng)態(tài)資源放在不同的服務(wù)器上,當(dāng)用戶訪問哪個(gè)資源時(shí),用哪個(gè)服務(wù)器接受。降低原來單個(gè)服務(wù)器的壓力、加快網(wǎng)站的解析速度
Feign
-
Feign 是一種聲明式Web服務(wù)客戶端,底層封裝了對(duì)Rest技術(shù)的應(yīng)用,通過Feign可以簡化服務(wù)消費(fèi)方對(duì)遠(yuǎn)程服務(wù)提供方法的調(diào)用實(shí)現(xiàn)
總結(jié)
- 上一篇: OpenCV中基本数据类型Mat类使用简
- 下一篇: 代理ip会不会影响网络速度和稳定性