我看最新的回答都是16年了,三年過去了,市場對java技術的需求發生了很大的變化,在三年前到企業去面試,面試官不會問道企業級的框架,ssm這些都不會問道,但是現在要會分布式架構,微服務架構,CC服務這些,企業面試官才會願意跟你聊,跟你探討,IT行業的技術發展特別快,需要我們不斷的更新新的技術,java包含了6大階段,273個技能點,現將技能點列舉如下:
第一階段:java基本功修煉
1.認識計算機硬體
2.計算機組成原理
3.計算機軟體知識
4.計算機網路知識
5.常用網路應用操作
6.認識計算機病毒
7.邏輯訓練
8.初識Java
9.變數和數據類型
10.選擇結構
11.循環結構for
12.循環結構do-while
13.循環結構while
14.多重循環及程序調試
15.循環進階
16.一維數組及經典應用
17.二維數組
18.認識類與對象
19.方法及方法重載
20.封裝與繼承
21.方法重寫與多態
22.項目實戰-汽車租賃系統
23.抽象類和介面
24.異常
25.項目實戰-QuickHit
26.Java中的集合類型
27.List集合
28.Set集合
29.HashMap集合
30.Iterator
31.Collections演算法類及常用方法
32.enum
33.包裝類及裝箱拆箱
34.String、StringBuffer類常用方法操作字元串
35.Date、Calendar
36.Math類常用方法
37.IO/NIO
38.位元組輸入流(InputStream、FileInputStream、BufferedInputStream)
39.位元組輸出流(OutputStream、FileOutputStream、BufferedOutputStream)
40.字元輸入流(Reader、InputStreamReader、FileReader BufferedReader)
41.位元組輸出流(Writer、OutputStreamWriter、FileWriter、BufferedWriter)
42.文件復制
43.Serialize、Deserialize
44.職場晉升力:四象限時間管理與精力管理
45.多線程(Thread、Runnable)
46.ThreadLifeCycle
47.線程的調度
48.線程的同步和死鎖
49.ThreadPool
50.職場晉升力:團隊合作
51.Socket(TCP、UDP)
52.XML概念、優勢、規范
53.XML中特殊字元的處理
54.使用DOM讀取、添加、刪除、解析 XML數據
第二階段:javaweb開發
55.搭建和配置MySQL資料庫
56.資料庫增、刪、查、改語句
57.事務
58.視圖
59.資料庫備份與恢復
60.資料庫用戶管理
61.資料庫設計
62.項目實戰-銀行ATM存取款機系統
63.走進 HTML和CSS
64.列表表格及表單美化
65.CSS 高級操作
66.Bootstrap
67.CSS 組件
68.JavaScript面向對象
69.JavaScript判斷、循環
70.JavaScript閉包
71.JavaScript語法
72.Bootstrap綜合案例
73.HTML5、CSS3
74.jQuery基礎
75.jQuery基本操作
76.jQuery事件與特效
77.jQuery Ajax
78.jQuery插件
79.搭建Web 環境初識JSP
80.JSP九大內置對象
81.JSP實現數據傳遞和保存
82.JDBC
83.單例模式、工廠模式
84.MVC、三層模式
85.Commons-fileupload、CKEditor
86.分頁查詢
87.EL 與 JSTL
88.Servlet與Filter
89.Listener與MVC
90.Ajax 與 jQuery
91.jQuery的Ajax交互擴展
92.項目實戰—使用Ajax技術改進新聞發布系統
93.反射
94.Linux系統的安裝
95.在Linux中管理目錄和文件
96.在Linux中管理用戶和許可權
97.在Linux伺服器環境下安裝軟體和部署項目
98.職場晉升力:職場溝通
第三階段: 企業級框架開發
99. MyBatis 環境搭建
100. SQL 映射文件
101. 動態SQL
102. MyBatis 框架原理
103.SpringIOC
104.構造注入、依賴注入、註解
105. Spring 整合MyBatis(SqlSessionTemplate、MapperFactoryBean、事務
處理)
106. Spring 數據源(屬性文件、JNDI)、Bean 作用域
107. Spring 框架的運行原理
108.SpringMVC 體系概念
109.SpringMVC 之數據綁定、數據效驗、
110.SpringMVC 之視圖及視圖解析
111.SpringMVC 之文件上傳、本地化解析
112.SpringMVC 之靜態資源處理、請求攔截器、異常處理
113.Oracle資料庫環境搭建、安裝
114.Oracle資料庫 SQL、分頁、備份、還原
115.Hibernate 概念、依賴
116.HQL查詢語言
117.Hibernate 中配置關聯映射
118.HQL連接查詢與 Hibernate註解
119.Struts2概念、依賴
120.Struts2配置
121.OGNL表達式
122.Struts2攔截器
123.SSH框架整合
124.使用Maven構建項目
125.使用Struts2實現Ajax
126.Jsoup網路爬蟲
127.多線程網路爬蟲
128.反爬及反反爬策略
129.通用爬蟲設計
130.Echart圖表分析
131.IKAnalyzer分詞
132.企業框架項目實戰-代理商管理系統
133.企業框架項目實戰-SL 會員商城
134.企業框架項目實戰-會員管理系統
135.企業框架項目實戰-互聯網招聘信息採集分析平台
第四階段: 前後端分離開發
136.GitHub
137.Git基礎(checkout、pull、commit、push、merge等)
138.Git進階(多分支協作)
139.GitLab
140.IDEA的使用
141.Maven介紹(概念、倉庫、構建、命令)
142.使用Maven構建WEB項目
143.使用Maven構建多模塊項目
144.使用Maven搭建私服倉庫
145.Scrum框架介紹(三個角色、三個工件、四個會議)
146.ScrumTeam組建團隊
147.產品需求和用戶故事
148.每日立會
149.使用敏捷-Scrum方式開發管理實戰
150.前後端分離、分布式集群架構、垂直架構
151.SSM(SpringMVC+Spring+MyBatis)整合實戰
152.Git、Maven私服Nexus
153.第三方接入技術(微信、阿里)
154.MySQL電商實戰
155.Redis(緩存服務)
156.搜索引擎-Solr
157.集成APIDoc工具-Swagger
158.圖片自動化處理:Tengine+LUA+GraphicsMagic
159.手機、郵箱注冊
160.單點登錄 Token
161.OAuth2.0認證
162.Jsoup網路爬蟲(多線程爬蟲/代理 IP爬蟲)
163.ExecutorService線程池
164.IK中文分詞
165.Postman
166.ReactJS
167.webpack
168.職場晉升力:簡歷撰寫
169.程序猿面試寶典之項目面試
170.大型互聯網旅遊電商項目實戰-愛旅行
第五階段: 分布式微服架構開發
171.SpringBoot環境搭建
172.SpringBoot常用技能
173.SpringBoot整合Redis
174.SpringBoot整合Mybatis
175.微服務架構及架構設計
176.消息隊列
ActiveMQRabbitMQ
177.分布式事務
178.分布式鎖 Redis-setnx
179.Zookeeper注冊中心
180.基於 ActiveMQ實現高並發
181.Docker環境搭建
182.Docker鏡像加速
183.Docker容器管理
184.Docker鏡像管理
185.Docker容器文件備份
186.Dockerfile
187.Docker私服倉庫
188.真實互聯網高並發電商項目實戰-雙十一搶購
189.可視化監控 Portainer
190.DockerCompose 容器編排
191.DockerCompose擴容、縮容
192.DockerSwarm集群編排
193.Jenkins安裝、插件配置
194.Jenkins配置普通任務
195.Jenkins配置管道任務
196.Jenkins自動發布服務
197.Spring CloudEureka
198.Spring CloudFeign
199.Spring CloudRibbon
200.Spring CloudZuul
201.Spring CloudConfig
202.Spring CloudHystrix
203.Spring CloudSleuth
204.Spring BootAdmin
205.Eureka注冊原理探秘
206.SpringCloud 大坑解讀
207.Zipkin
208.Zipkin整合RabbitMQ
209.Zipkin整合MySQL
210.ELK日誌收集
211.Kafka
212.Elasticsearch映射管理
213.Elasticsearch查詢/復合查詢
214.Elasticsearch集群/集群規劃
215.Elasticsearch聚合
216.Elasticsearch集群監控
217.Elasticsearch插件
(Head/BigDesk)
218.Mycat讀寫分離
219.Mycat一主多從
220.Mycat多主多從
221.Mycat數據分片
222.Redis
223.Redis-Redlock
224.Elasticsearch環境搭建
225.Elasticsearch客戶端
226.Elasticsearch索引管理
227.Elasticsearch文檔管理
228.Mycat集群
229.Jmeter 並發測試
230.Jmeter 生成測試報告
231.微信登錄
232.微信支付
233.支付寶支付
234.網路地圖
235.Sonar本地檢測
236.Sonar+Jenkins線上檢測
237.CI/CD
238.SpringBoot改造愛旅行項目實戰
239.大型互聯網票務類電商項目實戰-大覓網
240.ES6概念(les、const)
241.ES6對象和數組
242.ES6函數擴展
243.VUE環境搭建
244.VUE.JS指令
245.VUE 交互
246.VUE 實例生命周期
247.VUE 組件
248.VUE項目環境配置及單文件組件
249.VUE 路由
第六階段:cc服務
250. Spring Cloud Gateway
251. Consul
252. Nacos
253. Eureka、Consu、lNacos、Zookeeper 對比分析
254. Prometheus + Grafana
255. ES 分布式存儲原理
256. NoSQL 資料庫解決方案(Redis、MongoDB)
257. OAuth2.0 認證( authorization code 模式)
258. OAuth2.0 認證( implicit 模式)
259. OAuth2.0 認證( resource owner password credentials 模式)
260.OAuth2.0認證( clientcredentials模式)
261.NAS/FastDFS分布式文件存儲
262.Python基礎
263.Python爬蟲
264. 大數據及 Hadoop 概述
265. 分布式文件系統 HDFS
266. 分布式計算框架MapRece
267. 分布式列式資料庫 HBase
268. Hadoop 綜合應用
269. 面試大局觀
270. 職業規劃
271. 項目面試
272. 具體業務場景化解決方案
273. 更多技術專題持續增加中
⑵ 想要系統學習java到底要學習哪些知識
一、java基礎
學習任何一門編程語言,首先要學習的是基礎語法,開啟Java學習的第一步,當然就是深入掌握計算機基礎、編程基礎語法,面向對象,集合、IO流、線程、並發、異常及網路編程,這些我們稱之為JavaSE基礎。當你掌握了這些內容之後,你就可以做出諸如:電腦上安裝的迅雷下載軟體、QQ聊天客戶端、考勤管理系統等桌面端軟體。
java學習路線大陸傳送門
⑶ 每日一練進擊大廠「DAY7」並發編程4
可以使用線程類中的join方法,在一個線程中啟動另一個線程,另外一個線程執行完該線程繼續執行。T3的run方法中執行t2.join(),T2的run方法中執行t1.join(),這樣就會按照T1,T2,T3的順序執行了。
AQS是java.util.concurrent包下的工具類,全稱是AbstractQueuedSynchronizer抽象隊列同步器,AQS是多線程同步器,Lock、CountDownLatch、Semaphore都用到了AQS,從本質上來說AQS提供了兩種鎖機制,分別是排它鎖和共享鎖。
排它鎖:就是存在多線程競爭同一共享資源時,同一時刻只允許一個線程訪問該共享資源,也就是多個線程中只能有一個線程獲得鎖資源,比如Lock中的ReentrantLock重入鎖實現就是用到了AQS中的排它鎖功能。
共享鎖:也稱為讀鎖,就是在同一時刻允許多個線程同時獲得鎖資源,比如CountDownLatch、Semaphore都是用到了AQS中共享鎖功能。
CountDownLatch是基於執行時間的同步類,允許一個或多個線程等待其他線程完成操作,構造方法接收一個int參數作為計數器,如果要等待n個點就傳入n,每次調用countDown方法時計數器減1,await方法阻塞當前線程直到計數器變為0,由於countDown方法可用在任何地方,所以n個點既可以是n個線程,也可以是一個線程里的n個執行步驟。
循環屏障是基於同步到達某個點的信號量觸發機制,作 是讓 組線程到達 個屏障時被阻塞,直到最後 個線程到達屏障才會解除。構造 法中的參數表示攔截線程數量,每個線程調 await 法告訴CyclicBarrier 已到達屏障,然後被阻塞。還 持在構造 法中傳 個 Runnable 任務,當線程到達屏障時會優先執 該任務。適 於多線程計算數據,最後合並計算結果的應 場景。CountDownLacth 的計數器只能 次, CyclicBarrier 的計數器可使 reset 法重置,所以CyclicBarrier 能處理更為復雜的業務場景,例如計算錯誤時可 重置計數器重新計算。
信號量 來控制同時訪問特定資源的線程數量,通過協調各個線程以保證合理使 公共資源。信號量可以 於流量控制,特別是公共資源有限的應 場景, 如資料庫連接。Semaphore 的構造 法參數接收 個 int 值,表示可 的許可數量即最 並發數。使 acquire 法獲得 個許可證,使 release 法歸還許可,還可以 tryAcquire 嘗試獲得許可。
synchronized是重量級鎖,拿到鎖必須要阻塞,當量大的時候會一直阻塞喚醒,優化一下,不要讓其阻塞,只是告訴有這么個標記,在synchronized的邊界做循環,這就是自旋,如果做了多次循環發現還沒有獲得鎖,再阻塞。
有一個線程來訪問代碼塊,沒有鎖的競爭,偏向某個線程,把偏向鎖的偏向標記存儲為線程的線程id(主要是同一個線程反復搶占鎖的場景),只有一個線程,如果線程搶占那麼就會升級成輕量級鎖,偏向鎖默認是關閉的。
有線程競爭,自旋去判斷這個對象的鎖是否釋放,自旋次數(默認根據上一次自旋次數和鎖的釋放時間來決定),會升級重量級鎖
線程阻塞等待。
首先synchronized會嘗試使用偏向鎖的方式去競爭鎖資源,如果能夠競爭到偏向鎖,表示加鎖成功直接返回。如果競爭鎖失敗,說明當前鎖已經偏向了其他線程,需要將鎖升級到輕量級鎖,在輕量級鎖狀態下,競爭鎖的線程根據自適應自旋次數去搶占鎖資源。如果在輕量級鎖狀態下還是沒有競爭到鎖,就只能升級到重量級鎖,在重量級鎖狀態下,沒有競爭到鎖的線程就會被阻塞,線程的狀態就是Blocked。
在運行的某個函數或者代碼,因為搶占資源或者中斷等原因導致函數或者代碼的運行中斷,等待中斷程序執行結束後,重新進入這個函數或者代碼中運行,並且運行結果不會受到影響,那麼這個函數或者代碼就是可重入的。
ReentrantLock類實現了Lock,它擁有與synchronized相同的並發性和內存語義。線程A在第一次搶佔到鎖,在還沒有釋放之前再次得到鎖,這個時候就不需要重新搶占鎖,而是增加重入次數,然後鎖需要被釋放兩次才能獲得真正的釋放。
ReentrantLock是一種可重入的排它鎖,主要用來解決多線程對共享資源競爭的問題
特性:
1)支持可重入。
2)支持公平和非公平。
3)提供了阻塞競爭鎖和非阻塞競爭鎖的兩種方法,分別是lock()和tryLock()。
幾個非常關鍵的技術:
鎖的競爭,ReentrantLock通過互斥變數,使用CAS機制來實現的,沒有競爭到鎖的線程,使用了AbstractQueuedSynchronized這樣一個隊列同步器來存儲,底層是通過雙向鏈表來實現的,當鎖被釋放之後,會從AQS隊列里的頭部喚醒下一個等待鎖的線程。
公平和非公平的特性,主要體現在競爭鎖的時候,是否需要判斷AQS隊列存在等待中的線程。等待隊列里的鎖則是公平鎖,如果都可以競爭鎖,則是非公平鎖。
鎖的重入特性,在AQS裡面有一個成員變數來保存當前獲得鎖的線程,當同一個線程下次再來競爭鎖的時候,就不會去走鎖競爭的邏輯,而是直接增加重入次數。
對於並發間操作產生的線程安全問題持樂觀狀態,樂觀鎖認為競爭不總是會發生,因此它不需要持有鎖,將比較替換這兩個動作作為一個原子操作嘗試去修改內存中的變數,如果失敗則表示發生沖突,那麼就應該有相應的重試邏輯。
對於並發間操作產生的線程安全問題持悲觀狀態,悲觀鎖認為競爭總是會發生,因此每次對某資源進行操作時,都會持有一個獨占的鎖,就像synchronized,直接上鎖操作資源。
擇一良人,選一城市,三餐四季,春夏秋冬