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