摘要:結構型模式適配器模式橋接模式裝飾模式組合模式外觀模式享元模式代理模式。行為型模式模版方法模式命令模式迭代器模式觀察者模式中介者模式備忘錄模式解釋器模式模式狀態模式策略模式職責鏈模式責任鏈模式訪問者模式。
主要版本 | 更新時間 | 備注 |
---|---|---|
v1.0 | 2015-08-01 | 首次發布 |
v1.1 | 2018-03-12 | 增加新技術知識、完善知識體系 |
v2.0 | 2019-02-19 | 結構調整,更適合從入門到精通; 進一步完善知識體系; 新技術補充; |
面向對象、面向過程
面向對象的三大基本特征和五大基本原則
平臺無關性Java如何實現的平臺無關
JVM還支持哪些語言(Kotlin、Groovy、JRuby、Jython、Scala)
值傳遞值傳遞、引用傳遞
為什么說Java中只有值傳遞
封裝、繼承、多態什么是多態、方法重寫與重載
Java的繼承與實現
構造函數與默認構造函數
類變量、成員變量和局部變量
成員變量和方法作用域
Java基礎知識 基本數據類型7種基本數據類型:整型、浮點型、布爾型、字符型
整型中byte、short、int、long的取值范圍
什么是浮點型?什么是單精度和雙精度?為什么不能用浮點型表示金額?
自動拆裝箱什么是包裝類型、什么是基本類型、什么是自動拆裝箱
Integer的緩存機制
String字符串的不可變性
JDK 6和JDK 7中substring的原理及區別、
replaceFirst、replaceAll、replace區別、
String對“+”的重載、字符串拼接的幾種方式和區別
String.valueOf和Integer.toString的區別、
switch對String的支持
字符串池、常量池(運行時常量池、Class常量池)、intern
熟悉Java中各種關鍵字transient、instanceof、volatile、synchronized、final、static、const 原理及用法。
集合類常用集合類的使用、ArrayList和LinkedList和Vector的區別 、SynchronizedList和Vector的區別、HashMap、HashTable、ConcurrentHashMap區別、
Set和List區別?Set如何保證元素不重復?
Java 8中stream相關用法、apache集合處理工具類的使用、不同版本的JDK中HashMap的實現的區別以及原因
Collection和Collections區別
Arrays.asList獲得的List使用時需要注意什么
Enumeration和Iterator區別
fail-fast 和 fail-safe
CopyOnWriteArrayList、ConcurrentSkipListMap
枚舉枚舉的用法、枚舉的實現、枚舉與單例、Enum類
Java枚舉如何比較
switch對枚舉的支持
枚舉的序列化如何實現
枚舉的線程安全性問題
IO字符流、字節流、輸入流、輸出流、
同步、異步、阻塞、非阻塞、Linux 5種IO模型
BIO、NIO和AIO的區別、三種IO的用法與原理、netty
Java反射與javassist反射與工廠模式、 反射有什么作用
Class類
java.lang.reflect.*
動態代理靜態代理、動態代理
動態代理和反射的關系
動態代理的幾種實現方式
AOP
序列化什么是序列化與反序列化、為什么序列化、序列化底層原理、序列化與單例模式、protobuf、為什么說序列化并不安全
注解元注解、自定義注解、Java中常用注解使用、注解與反射的結合
Spring常用注解
JMS什么是Java消息服務、JMS消息傳送模型
JMXjava.lang.management.*、 javax.management.*
泛型泛型與繼承、類型擦除、泛型中K T V E ? object等的含義、泛型各種用法
限定通配符和非限定通配符、上下界限定符extends 和 super
List
List>和List
單元測試junit、mock、mockito、內存數據庫(h2)
正則表達式java.lang.util.regex.*
常用的Java工具庫commons.lang, commons.*... guava-libraries netty
API&SPIAPI、API和SPI的關系和區別
如何定義SPI、SPI的實現原理
異常異常類型、正確處理異常、自定義異常
Error和Exception
異常鏈、try-with-resources
finally和return的執行順序
時間處理時區、冬令時和夏令時、時間戳、Java中時間API
格林威治時間、CET,UTC,GMT,CST幾種常見時間的含義和關系
SimpleDateFormat的線程安全性問題
Java 8中的時間處理
如何在東八區的計算機上獲取美國時間
編碼方式Unicode、有了Unicode為啥還需要UTF-8
GBK、GB2312、GB18030之間的區別
UTF8、UTF16、UTF32區別
URL編解碼、Big Endian和Little Endian
如何解決亂碼問題
語法糖Java中語法糖原理、解語法糖
語法糖:switch 支持 String 與枚舉、泛型、自動裝箱與拆箱、方法變長參數、枚舉、內部類、條件編譯、 斷言、數值字面量、for-each、try-with-resource、Lambda表達式、
閱讀源代碼String、Integer、Long、Enum、BigDecimal、ThreadLocal、ClassLoader & URLClassLoader、ArrayList & LinkedList、 HashMap & LinkedHashMap & TreeMap & CouncurrentHashMap、HashSet & LinkedHashSet & TreeSet
Java并發編程 并發與并行什么是并發
什么是并行
并發與并行的區別
線程線程的實現、線程的狀態、優先級、線程調度、創建線程的多種方式、守護線程
線程與進程的區別
線程池自己設計線程池、submit() 和 execute()、線程池原理
為什么不允許使用Executors創建線程池
線程安全死鎖、死鎖如何排查、線程安全和內存模型的關系
鎖CAS、樂觀鎖與悲觀鎖、數據庫相關鎖機制、分布式鎖、偏向鎖、輕量級鎖、重量級鎖、monitor、
鎖優化、鎖消除、鎖粗化、自旋鎖、可重入鎖、阻塞鎖、死鎖
死鎖死鎖的原因
死鎖的解決辦法
synchronizedsynchronized是如何實現的?
synchronized和lock之間關系、不使用synchronized如何實現一個線程安全的單例
synchronized和原子性、可見性和有序性之間的關系
volatilehappens-before、內存屏障、編譯器指令重排和CPU指令重
volatile的實現原理
volatile和原子性、可見性和有序性之間的關系
有了symchronized為什么還需要volatile
sleep 和 wait wait 和 notify notify 和 notifyAll ThreadLocal 寫一個死鎖的程序 寫代碼來解決生產者消費者問題 并發包 閱讀源代碼,并學會使用Thread、Runnable、Callable、ReentrantLock、ReentrantReadWriteLock、Atomic*、Semaphore、CountDownLatch、、ConcurrentHashMap、Executors
二、底層篇 JVM JVM內存結構class文件格式、運行時數據區:堆、棧、方法區、直接內存、運行時常量池、
堆和棧區別
Java中的對象一定在堆上分配嗎?
Java內存模型計算機內存模型、緩存一致性、MESI協議
可見性、原子性、順序性、happens-before、
內存屏障、synchronized、volatile、final、鎖
垃圾回收GC算法:標記清除、引用計數、復制、標記壓縮、分代回收、增量式回收
GC參數、對象存活的判定、垃圾收集器(CMS、G1、ZGC、Epsilon)
JVM參數及調優-Xmx、-Xmn、-Xms、Xss、-XX:SurvivorRatio、
-XX:PermSize、-XX:MaxPermSize、-XX:MaxTenuringThreshold
Java對象模型oop-klass、對象頭
HotSpot即時編譯器、編譯優化
虛擬機性能監控與故障處理工具jps, jstack, jmap、jstat, jconsole, jinfo, jhat, javap, btrace、TProfiler
Arthas
類加載機制classLoader、類加載過程、雙親委派(破壞雙親委派)、模塊化(jboss modules、osgi、jigsaw)
編譯與反編譯什么是編譯(前端編譯、后端編譯)、什么是反編譯
JIT、JIT優化(逃逸分析、棧上分配、標量替換、鎖優化)
編譯工具:javac
反編譯工具:javap 、jad 、CRF
三、 進階篇 Java底層知識 字節碼、class文件格式 CPU緩存,L1,L2,L3和偽共享 尾遞歸 位運算用位運算實現加、減、乘、除、取余
設計模式設計模式的六大原則:
開閉原則(Open Close Principle)、里氏代換原則(Liskov Substitution Principle)、依賴倒轉原則(Dependence Inversion Principle)
接口隔離原則(Interface Segregation Principle)、迪米特法則(最少知道原則)(Demeter Principle)、合成復用原則(Composite Reuse Principle)
了解23種設計模式創建型模式:單例模式、抽象工廠模式、建造者模式、工廠模式、原型模式。
結構型模式:適配器模式、橋接模式、裝飾模式、組合模式、外觀模式、享元模式、代理模式。
行為型模式:模版方法模式、命令模式、迭代器模式、觀察者模式、中介者模式、備忘錄模式、解釋器模式(Interpreter模式)、狀態模式、策略模式、職責鏈模式(責任鏈模式)、訪問者模式。
會使用常用設計模式單例的七種寫法:懶漢——線程不安全、懶漢——線程安全、餓漢、餓漢——變種、靜態內部類、枚舉、雙重校驗鎖
工廠模式、適配器模式、策略模式、模板方法模式、觀察者模式、外觀模式、代理模式等必會
不用synchronized和lock,實現線程安全的單例模式 實現AOP 實現IOC nio和reactor設計模式 網絡編程知識 tcp、udp、http、https等常用協議三次握手與四次關閉、流量控制和擁塞控制、OSI七層模型、tcp粘包與拆包
http/1.0 http/1.1 http/2之間的區別http中 get和post區別
常見的web請求返回的狀態碼
404、302、301、500分別代表什么
http/3 Java RMI,Socket,HttpClient cookie 與 sessioncookie被禁用,如何實現session
用Java寫一個簡單的靜態文件的HTTP服務器 了解nginx和apache服務器的特性并搭建一個對應的服務器 用Java實現FTP、SMTP協議 進程間通訊的方式 什么是CDN?如果實現? DNS?什么是DNS 、記錄類型:A記錄、CNAME記錄、AAAA記錄等
域名解析、根域名服務器
DNS污染、DNS劫持、公共DNS:114 DNS、Google DNS、OpenDNS
反向代理正向代理、反向代理
反向代理服務器
框架知識 Servlet生命周期
線程安全問題
filter和listener
web.xml中常用配置及作用
Hibernate什么是OR Mapping
Hibernate的緩存機制
Hibernate的懶加載
Hibernate/Ibatis/MyBatis之間的區別
SpringBean的初始化
AOP原理
實現Spring的IOC
spring四種依賴注入方式
Spring MVC什么是MVC
Spring mvc與Struts mvc的區別
Spring BootSpring Boot 2.0、起步依賴、自動配置、
Spring Boot的starter原理,自己實現一個starter
Spring Security Spring Cloud服務發現與注冊:Eureka、Zookeeper、Consul
負載均衡:Feign、Spring Cloud Loadbalance
服務配置:Spring Cloud Config
服務限流與熔斷:Hystrix
服務鏈路追蹤:Dapper
服務網關、安全、消息
應用服務器知識 JBoss tomcat jetty Weblogic 工具 git & svn maven & gradle Intellij IDEA常用插件:Maven Helper 、FindBugs-IDEA、阿里巴巴代碼規約檢測、GsonFormat
Lombok plugin、.ignore、Mybatis plugin
四、 高級篇 新技術 Java 8lambda表達式、Stream API、時間API
Java 9Jigsaw、Jshell、Reactive Streams
Java 10局部變量類型推斷、G1的并行Full GC、ThreadLocal握手機制
Java 11ZGC、Epsilon、增強var、
Spring 5響應式編程
Spring Boot 2.0 http/2 http/3 性能優化使用單例、使用Future模式、使用線程池、選擇就緒、減少上下文切換、減少鎖粒度、數據壓縮、結果緩存
線上問題分析 dump獲取線程Dump、內存Dump、gc情況
dump分析分析死鎖、分析內存泄露
dump分析及獲取工具jstack、jstat、jmap、jhat、Arthas
自己編寫各種outofmemory,stackoverflow程序HeapOutOfMemory、 Young OutOfMemory、MethodArea OutOfMemory、ConstantPool OutOfMemory、DirectMemory OutOfMemory、Stack OutOfMemory Stack OverFlow
Arthasjvm相關、class/classloader相關、monitor/watch/trace相關、
options、管道、后臺異步任務
文檔:https://alibaba.github.io/art...
常見問題解決思路內存溢出、線程死鎖、類加載沖突
使用工具嘗試解決以下問題,并寫下總結當一個Java程序響應很慢時如何查找問題、
當一個Java程序頻繁FullGC時如何解決問題、
如何查看垃圾回收日志、
當一個Java應用發生OutOfMemory時該如何解決、
如何判斷是否出現死鎖、
如何判斷是否存在內存泄露
使用Arthas快速排查Spring Boot應用404/401問題
使用Arthas排查線上應用日志打滿問題
利用Arthas排查Spring Boot應用NoSuchMethodError
編譯原理知識 編譯與反編譯 Java代碼的編譯與反編譯 Java的反編譯工具javap 、jad 、CRF
即時編譯器 詞法分析,語法分析(LL算法,遞歸下降算法,LR算法),語義分析,運行時環境,中間代碼,代碼生成,代碼優化 操作系統知識 Linux的常用命令 進程間通信 進程同步生產者消費者問題、哲學家就餐問題、讀者寫者問題
緩沖區溢出 分段和分頁 虛擬內存與主存 虛擬內存管理 換頁算法 數據庫知識 MySql 執行引擎 MySQL 執行計劃如何查看執行計劃,如何根據執行計劃進行SQL優化
索引Hash索引、B樹索引(B+樹、和B樹、R樹)
普通索引、唯一索引
覆蓋索引、最左前綴原則、索引下推
SQL優化 數據庫事務和隔離級別事務的隔離級別、事務能不能實現鎖的功能
數據庫鎖行鎖、表鎖、使用數據庫鎖實現樂觀鎖、
連接內連接,左連接,右連接
數據庫主備搭建 binlog redolog 內存數據庫h2
分庫分表 讀寫分離 常用的nosql數據庫redis、memcached
分別使用數據庫鎖、NoSql實現分布式鎖 性能調優 數據庫連接池 數據結構與算法知識 簡單的數據結構棧、隊列、鏈表、數組、哈希表、
棧和隊列的相同和不同之處
棧通常采用的兩種存儲結構
樹二叉樹、字典樹、平衡樹、排序樹、B樹、B+樹、R樹、多路樹、紅黑樹
堆大根堆、小根堆
圖有向圖、無向圖、拓撲
排序算法穩定的排序:冒泡排序、插入排序、雞尾酒排序、桶排序、計數排序、歸并排序、原地歸并排序、二叉排序樹排序、鴿巢排序、基數排序、侏儒排序、圖書館排序、塊排序
不穩定的排序:選擇排序、希爾排序、Clover排序算法、梳排序、堆排序、平滑排序、快速排序、內省排序、耐心排序
各種排序算法和時間復雜度
深度優先和廣度優先搜索 全排列、貪心算法、KMP算法、hash算法 海量數據處理分治,hash映射,堆排序,雙層桶劃分,Bloom Filter,bitmap,數據庫索引,mapreduce等。
兩個棧實現隊列,和兩個隊列實現棧 大數據知識 Zookeeper基本概念、常見用法
Solr,Lucene,ElasticSearch在linux上部署solr,solrcloud,,新增、刪除、查詢索引
Storm,流式計算,了解Spark,S4在linux上部署storm,用zookeeper做協調,運行storm hello world,local和remote模式運行調試storm topology。
Hadoop,離線計算HDFS、MapReduce
分布式日志收集flume,kafka,logstash 數據挖掘,mahout 網絡安全知識 XSSXSS的防御
CSRF 注入攻擊SQL注入、XML注入、CRLF注入
文件上傳漏洞 加密與解密對稱加密、非對稱加密、哈希算法、加鹽哈希算法
MD5,SHA1、DES、AES、RSA、DSA
彩虹表
DDOS攻擊DOS攻擊、DDOS攻擊
memcached為什么可以導致DDos攻擊、什么是反射型DDoS
如何通過Hash碰撞進行DOS攻擊
SSL、TLS,HTTPS 用openssl簽一個證書部署到apache或nginx 五、架構篇 分布式數據一致性、服務治理、服務降級
分布式事務2PC、3PC、CAP、BASE、 可靠消息最終一致性、最大努力通知、TCC
Dubbo服務注冊、服務發現,服務治理
http://dubbo.apache.org/zh-cn/
分布式數據庫怎樣打造一個分布式數據庫、什么時候需要分布式數據庫、mycat、otter、HBase
分布式文件系統mfs、fastdfs
分布式緩存緩存一致性、緩存命中率、緩存冗余
限流降級Hystrix、Sentinal
算法共識算法、Raft協議、Paxos 算法與 Raft 算法、拜占庭問題與算法
2PC、3PC
微服務SOA、康威定律
ServiceMeshsidecar
Docker & Kubernets Spring Boot Spring Cloud 高并發 分庫分表 CDN技術 消息隊列ActiveMQ
監控 監控什么CPU、內存、磁盤I/O、網絡I/O等
監控手段進程監控、語義監控、機器資源監控、數據波動
監控數據采集日志、埋點
Dapper 負載均衡tomcat負載均衡、Nginx負載均衡
四層負載均衡、七層負載均衡
DNSDNS原理、DNS的設計
CDN數據一致性
六、 擴展篇 云計算IaaS、SaaS、PaaS、虛擬化技術、openstack、Serverlsess
搜索引擎Solr、Lucene、Nutch、Elasticsearch
權限管理Shiro
區塊鏈哈希算法、Merkle樹、公鑰密碼算法、共識算法、Raft協議、Paxos 算法與 Raft 算法、拜占庭問題與算法、消息認證碼與數字簽名
比特幣挖礦、共識機制、閃電網絡、側鏈、熱點問題、分叉
以太坊 超級賬本 人工智能數學基礎、機器學習、人工神經網絡、深度學習、應用場景。
常用框架TensorFlow、DeepLearning4J
IoT 量子計算 AR & VR 其他語言Groovy、Python、Go、NodeJs、Swift、Rust
六、 推薦書籍《深入理解Java虛擬機》
《Effective Java》
《深入分析Java Web技術內幕》
《大型網站技術架構》
《代碼整潔之道》
《架構整潔之道》
《Head First設計模式》
《maven實戰》
《區塊鏈原理、設計與應用》
《Java并發編程實戰》
《鳥哥的Linux私房菜》
《從Paxos到Zookeeper》
《架構即未來》
本文首發自微信公眾號:Hollis
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/73360.html
摘要:線性表的基本運算置空表,構造一個空的線性表。三線性表的鏈式存儲結構單鏈表線性鏈表鏈式存儲結構除了存儲本身的信息之外,還需要一個存儲指示其后繼元素存儲位置的指針,由這兩個部分組成元素的存儲映像通常稱為結點。用這種方法存儲的線性表稱為鏈表。 目錄 前言 一、線性表的定義和基本運算 1.線...
一直在網站上學習別人的測試之路,現在也想分享一下自己的經歷。 結緣測試 和大家不同的地方在于,作為一名生物醫學工程專業畢業生,我都是在醫療行業打轉。 我的軟件測試之旅分為兩段,第一段是一份實習,從2019年9月到2020年1月,第二段是畢業后的第一份工作,從2020年4月到今天。 實習之路 雖然從時間上來看,我的軟件測試之旅接近兩年,尤其是第一份實習,雖然時間跨度有四個月,但因為當時學校導師給的壓...
摘要:但其實,虛擬機并不支持這些語法糖。方式為每個泛型類型創建唯一的字節碼表示,并且將該泛型類型的實例都映射到這個唯一的字節碼表示上。GitHub 2.5k Star 的Java工程師成神之路 ,不來了解一下嗎); GitHub 2.5k Star 的Java工程師成神之路 ,真的不來了解一下嗎); GitHub 2.5k Star 的Java工程師成神之路 ,真的確定不來了解一下嗎); 本文從 ...
摘要:但其實,虛擬機并不支持這些語法糖。方式為每個泛型類型創建唯一的字節碼表示,并且將該泛型類型的實例都映射到這個唯一的字節碼表示上。GitHub 2.5k Star 的Java工程師成神之路 ,不來了解一下嗎); GitHub 2.5k Star 的Java工程師成神之路 ,真的不來了解一下嗎); GitHub 2.5k Star 的Java工程師成神之路 ,真的確定不來了解一下嗎); 本文從 ...
摘要:但其實,虛擬機并不支持這些語法糖。方式為每個泛型類型創建唯一的字節碼表示,并且將該泛型類型的實例都映射到這個唯一的字節碼表示上。GitHub 2.5k Star 的Java工程師成神之路 ,不來了解一下嗎); GitHub 2.5k Star 的Java工程師成神之路 ,真的不來了解一下嗎); GitHub 2.5k Star 的Java工程師成神之路 ,真的確定不來了解一下嗎); 本文從 ...
閱讀 2025·2023-04-26 00:16
閱讀 3474·2021-11-15 11:38
閱讀 3167·2019-08-30 12:50
閱讀 3178·2019-08-29 13:59
閱讀 749·2019-08-29 13:54
閱讀 2496·2019-08-29 13:42
閱讀 3304·2019-08-26 11:45
閱讀 2186·2019-08-26 11:36