Java 工程师成神之路(2018 年修订版)

640?wx_fmt=gif

Java 工程师成神之路(2018 年修订版)_第1张图片

作者 | Hollis

责编 | 胡巍巍

640?wx_fmt=png

基础篇


1.1 JVM

640?wx_fmt=png

JVM内存结构

堆、栈、方法区、直接内存、堆和栈区别。

Java内存模型

内存可见性、重排序、顺序一致性、volatile、锁、final。

垃圾回收

内存分配策略、垃圾收集器(G1)、GC算法、GC参数、对象存活的判定 。

JVM参数及调优

Java对象模型

oop-klass、对象头。

HotSpot

即时编译器、编译优化。

类加载机制

classLoader、类加载过程、双亲委派(破坏双亲委派)、模块化(jboss modules、osgi、jigsaw)。

虚拟机性能监控与故障处理工具

jps, jstack, jmap、jstat, jconsole, jinfo, jhat, javap, btrace、TProfiler。


1.2 编译与反编译

640?wx_fmt=png

javac 、javap 、jad 、CRF。


1.3 Java基础知识

640?wx_fmt=png

阅读源代码

String、Integer、Long、Enum、BigDecimal、ThreadLocal、ClassLoader & URLClassLoader、ArrayList & LinkedList、 HashMap & LinkedHashMap & TreeMap & CouncurrentHashMap、HashSet & LinkedHashSet & TreeSet。

Java中各种变量类型

熟悉Java String的使用,熟悉String的各种函数

JDK 6和JDK 7中substring的原理及区别;

replaceFirst、replaceAll、replace区别

String对“+”的重载

String.valueOf和Integer.toString的区别

字符串的不可变性。

自动拆装箱

Integer的缓存机制。

熟悉Java中各种关键字

transient、instanceof、volatile、synchronized、final、static、const 原理及用法。

集合类

常用集合类的使用;

ArrayList和LinkedList和Vector的区别 ;

SynchronizedList和Vector的区别;

HashMap、HashTable、ConcurrentHashMap区别;

Java 8中stream相关用法;

apache集合处理工具类的使用;

不同版本的JDK中HashMap的实现的区别以及原因。

枚举

枚举的用法、枚举与单例、Enum类。

Java IO&Java NIO,并学会使用

bio、nio和aio的区别、三种IO的用法与原理、netty。

Java反射与javassist

反射与工厂模式、 java.lang.reflect.*。

Java序列化

什么是序列化与反序列化、为什么序列化;

序列化底层原理;

序列化与单例模式;

protobuf;

为什么说序列化并不安全。

注解

元注解、自定义注解、Java中常用注解使用、注解与反射的结合。

JMS

什么是Java消息服务、JMS消息传送模型。

JMX

java.lang.management.*、 javax.management.*。

泛型

泛型与继承;

类型擦除;

泛型中K T V E  ;

object等的含义、泛型各种用法。

单元测试

junit、mock、mockito、内存数据库(h2)。

正则表达式

java.lang.util.regex.*。

常用的Java工具库

commons.lang, commons.*... guava-libraries netty。

什么是API&SPI

异常

异常类型、正确处理异常、自定义异常。

时间处理

时区、时令、Java中时间API。

编码方式

解决乱码问题、常用编码方式。

语法糖

Java中语法糖原理、解语法糖。


1.4 Java并发编程

640?wx_fmt=png

什么是线程,与进程的区别

阅读源代码,并学会使用

Thread、Runnable、Callable、ReentrantLock、ReentrantReadWriteLock、Atomic*、Semaphore、CountDownLatch、、ConcurrentHashMap、Executors。

线程池

自己设计线程池、submit() 和 execute()。

线程安全

死锁、死锁如何排查、Java线程调度、线程安全和内存模型的关系。

CAS、乐观锁与悲观锁、数据库相关锁机制、分布式锁、偏向锁、轻量级锁、重量级锁、monitor、锁优化、锁消除、锁粗化、自旋锁、可重入锁、阻塞锁、死锁。

死锁

volatile

happens-before、编译器指令重排和CPU指令重。

synchronized

synchronized是如何实现的?

synchronized和lock之间关系;

不使用synchronized如何实现一个线程安全的单例。

sleep 和 wait

wait 和 notify

notify 和 notifyAll

ThreadLocal

写一个死锁的程序

写代码来解决生产者消费者问题

守护线程

守护线程和非守护线程的区别以及用法。


640?wx_fmt=png

进阶篇


2.1 Java底层知识

640?wx_fmt=png

字节码、class文件格式

CPU缓存,L1,L2,L3和伪共享

尾递归

位运算

用位运算实现加、减、乘、除、取余


2.2 设计模式

640?wx_fmt=png

了解23种设计模式

会使用常用设计模式

单例、策略、工厂、适配器、责任链。

实现AOP

实现IOC

不用synchronized和lock,实现线程安全的单例模式

nio和reactor设计模式


2.3 网络编程

640?wx_fmt=png

tcp、udp、http、https等常用协议

三次握手与四次关闭、流量控制和拥塞控制、OSI七层模型、tcp粘包与拆包

http/1.0 http/1.1 http/2之前的区别

Java RMI,Socket,HttpClient

cookie 与 session

cookie被禁用,如何实现session

用Java写一个简单的静态文件的HTTP服务器

实现客户端缓存功能,支持返回304 实现可并发下载一个文件 使用线程池处理客户端请求 使用nio处理客户端请求 支持简单的rewrite规则 上述功能在实现的时候需要满足“开闭原则”。

了解nginx和apache服务器的特性并搭建一个对应的服务器

用Java实现FTP、SMTP协议

进程间通讯的方式

什么是CDN?如果实现?

什么是DNS?

反向代理


2.4 框架知识

640?wx_fmt=png

Servlet线程安全问题

Servlet中的filter和listener

Hibernate的缓存机制

Hiberate的懒加载

Spring Bean的初始化

Spring的AOP原理

自己实现Spring的IOC

Spring MVC

Spring Boot2.0

Spring Boot的starter原理,自己实现一个starter

Spring Security


2.5 应用服务器

640?wx_fmt=png

JBoss

tomcat

jetty

Weblogic


2.6 工具

640?wx_fmt=png

git & svn

maven & gradle


640?wx_fmt=png

高级篇


3.1 新技术

640?wx_fmt=png

Java 8

lambda表达式、Stream API、

Java 9

Jigsaw、Jshell、Reactive Streams

Java 10

局部变量类型推断、G1的并行Full GC、ThreadLocal握手机制

Spring 5

响应式编程

Spring Boot 2.0


3.2 性能优化

640?wx_fmt=png

使用单例、使用Future模式、使用线程池、选择就绪、减少上下文切换、减少锁粒度、数据压缩、结果缓存


3.3 线上问题分析

640?wx_fmt=png

dump获取

线程Dump、内存Dump、gc情况

dump分析

分析死锁、分析内存泄露

自己编写各种outofmemory,stackoverflow程序

HeapOutOfMemory、 Young OutOfMemory、MethodArea OutOfMemory、ConstantPool OutOfMemory、DirectMemory OutOfMemory、Stack OutOfMemory Stack OverFlow

常见问题解决思路

内存溢出、线程死锁、类加载冲突

使用工具尝试解决以下问题,并写下总结

当一个Java程序响应很慢时如何查找问题、

当一个Java程序频繁FullGC时如何解决问题、

如何查看垃圾回收日志、

当一个Java应用发生OutOfMemory时该如何解决、

如何判断是否出现死锁、

如何判断是否存在内存泄露


3.4 编译原理知识

640?wx_fmt=png

编译与反编译

Java代码的编译与反编译

Java的反编译工具

词法分析,语法分析(LL算法,递归下降算法,LR算法),语义分析,运行时环境,中间代码,代码生成,代码优化


3.5 操作系统知识

640?wx_fmt=png

Linux的常用命令

进程同步

缓冲区溢出

分段和分页

虚拟内存与主存


3.6 数据库知识

640?wx_fmt=png

MySql 执行引擎

MySQL 执行计划

如何查看执行计划,如何根据执行计划进行SQL优化

SQL优化

事务

事务的隔离级别、事务能不能实现锁的功能

数据库锁

行锁、表锁、使用数据库锁实现乐观锁、

数据库主备搭建

binlog

内存数据库

h2

常用的nosql数据库

redis、memcached

分别使用数据库锁、NoSql实现分布式锁

性能调优


3.7 数据结构与算法知识

640?wx_fmt=png

简单的数据结构

栈、队列、链表、数组、哈希表、

二叉树、字典树、平衡树、排序树、B树、B+树、R树、多路树、红黑树

排序算法

各种排序算法和时间复杂度 深度优先和广度优先搜索 全排列、贪心算法、KMP算法、hash算法、海量数据处理


3.8 大数据知识

640?wx_fmt=png

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


3.9 网络安全知识

640?wx_fmt=png

什么是XSS

XSS的防御

什么是CSRF

什么是注入攻击

SQL注入、XML注入、CRLF注入

什么是文件上传漏洞

加密与解密

MD5,SHA1、DES、AES、RSA、DSA

什么是DOS攻击和DDOS攻击

memcached为什么可以导致DDos攻击、什么是反射型DDoS

SSL、TLS,HTTPS

如何通过Hash碰撞进行DOS攻击

用openssl签一个证书部署到apache或nginx


640?wx_fmt=png

架构篇


4.1 分布式

640?wx_fmt=png

数据一致性、服务治理、服务降级

分布式事务

2PC、3PC、CAP、BASE、 可靠消息最终一致性、最大努力通知、TCC

Dubbo

服务注册、服务发现,服务治理

分布式数据库

怎样打造一个分布式数据库、什么时候需要分布式数据库、mycat、otter、HBase

分布式文件系统

mfs、fastdfs

分布式缓存

缓存一致性、缓存命中率、缓存冗余


4.2 微服务

640?wx_fmt=png

SOA、康威定律

ServiceMesh

Docker & Kubernets

Spring Boot

Spring Cloud


4.3 高并发

640?wx_fmt=png

分库分表

CDN技术

消息队列

ActiveMQ


4.4 监控

640?wx_fmt=png

监控什么

CPU、内存、磁盘I/O、网络I/O等

监控手段

进程监控、语义监控、机器资源监控、数据波动

监控数据采集

日志、埋点

Dapper


4.5 负载均衡

640?wx_fmt=png

tomcat负载均衡、Nginx负载均衡


4.6 DNS

640?wx_fmt=png

DNS原理、DNS的设计


4.7 CDN

640?wx_fmt=png

数据一致性


640?wx_fmt=png

扩展篇


5.1 云计算

640?wx_fmt=png

IaaS、SaaS、PaaS、虚拟化技术、openstack、Serverlsess


5.2 搜索引擎

640?wx_fmt=png

Solr、Lucene、Nutch、Elasticsearch


5.3 权限管理

640?wx_fmt=png

Shiro


5.4 区块链

640?wx_fmt=png

哈希算法、Merkle树、公钥密码算法、共识算法、Raft协议、Paxos 算法与 Raft 算法、拜占庭问题与算法、消息认证码与数字签名

比特币

挖矿、共识机制、闪电网络、侧链、热点问题、分叉

以太坊

超级账本


5.5 人工智能

640?wx_fmt=png

数学基础、机器学习、人工神经网络、深度学习、应用场景。

常用框架

TensorFlow、DeepLearning4J


5.6 其他语言

640?wx_fmt=png

Groovy、Python、Go、NodeJs、Swift、Rust


640?wx_fmt=png


推荐书籍


  • 《深入理解Java虚拟机》 

  • 《Effective Java》 

  • 《深入分析Java Web技术内幕》 

  • 《大型网站技术架构》 

  • 《代码整洁之道》 

  • 《Head First设计模式》 

  • 《maven实战》 

  • 《区块链原理、设计与应用》 

  • 《Java并发编程实战》 

  • 《鸟哥的Linux私房菜》 

  • 《从Paxos到Zookeeper》 

  • 《架构即未来》

作者简介:作者Hollis,知名技术博主,个人博客文章阅读量数百万,CSDN博客专家。工作地点杭州,主要从事金融,支付领域的Java开发,热衷于技术分享。

本文转载自Hollis公众号,专注原创技术文章,主要以Java相关技术为主,覆盖基础知识、底层原理、技术成长等话题。

640?wx_fmt=png

Java 工程师成神之路(2018 年修订版)_第2张图片


print_r('点个赞吧');
var_dump('点个赞吧');
NSLog(@"点个赞吧!");
System.out.println("点个赞吧!");
console.log("点个赞吧!");
print("点个赞吧!");
printf("点个赞吧!\n");
cout << "点个赞吧!" << endl;
Console.WriteLine("点个赞吧!");
fmt.Println("点个赞吧!");
Response.Write("点个赞吧");
alert(’点个赞吧’)
echo(’点个赞吧’)

Java 工程师成神之路(2018 年修订版)_第3张图片

你可能感兴趣的:(Java 工程师成神之路(2018 年修订版))