学个 P 的Java
你好,我是yes。
这篇文章我想从劝退的角度,来拢一波身为一个Javaer不管是从工作还是面试都需要掌握的一些要点。
从初学者到老油条的节奏来写,来看看会不会被劝退吧!随便推荐一些相关的资料。
学 Java 都要学些啥呢?
Java 基础学了没?
什么基本数据类型、操作符、控制语句等基本语法就不说了。
一些特性搞明白了嘛?
面向对象和面向过程 反射与代理 接口与继承 泛型 异常处理 注解 .....
常用类库用的溜嘛?
文件I/O操作 时间日期操作 字符串操作
集合类熟不熟?
List、ArrayList、LinkedList Set、HashSet、TreeSet、LinkedHashSet Queue、PriorityQueue Map、HashMap、HashTable、LinkedHashMap、TreeMap
并发相关熟不熟?
Java内存模型 线程的几个状态及转换 线程池原理 join、wait、notify、notifyAll Thread、Runnable、Callable Executors、FutureTask、ForkJoin synchronized、ReentrantLock、ReentrantReadWriteLock ConcurrentHashMap、ConcurrentSkipListMap、CopyOnWriteArrayList ArrayBlockingQueue、LinkedBlockingDeque、DelayQueue、PriorityBlockingQueue LinkedTransferQueue、SynchronousQueue CyclicBarrier、Semaphore、StampedLock、CountDownLatch Atomicxxxx、LongAdder、LongAccumulator CompletableFuture
怎么这么多类?平常有些很少用到,就怕面试问到。之所以列了这么多,就是让你重视一下!
JVM 得了解一下吧?
内存的划分 几种引用类型的区别 几种垃圾收集算法 垃圾收集器:CMS、G1、ZGC等 GC如何调优 类加载机制
一些I/O模型相关
C10k问题 BIO、NIO、AIO select、poll、epoll Reactor、Proactor
常用框架总得学学吧?
Spring、SpringBoot Mybatis、Hibernate Netty
JavaWeb 相关
Servlet、JSP、模板 Html、CSS、JS 简单的也得懂点吧? 浏览器也得懂点吧? Tomcat、Jetty 顺带学下 Nginx、CDN等
这个阶段好像感觉自己有点东西了,回头看看你的代码吧!
代码设计
单一、开闭、里氏替换、接口分离、依赖倒置、最小依赖、Kiss原则 23种设计模式 代码整洁之道
对了,数据库整明白了没?
Mysql
啥 groupby、having 之类的基本语法就不说了 几个范式 独立完成数据库设计 ACID事务、MVCC 整体架构 SQL 处理流程 几个引擎对比 索引结构和使用 看懂 explain、调优 SQL 读写分离、主从同步原理 binlog、redolog、undolog的作用 分区分表分库 在线数据迁移
非关系型数据库,别问为什么都列两个,对比选型呀
Redis、Memcached MongoDB、CouchDB HBase、Cassandra InfoGrid, Neo4j
数据库中间件总得了解点吧
Mycat、ShardingSphere、cannal等
消息队列不可或缺
RocketMQ、Kafka、RabbitMQ
好像还不够,分布式相关了解一下啊
CAP、BASE Dubbo、SpringCloud、gRpc ZooKeeper、Eureka、Consul、Nacos API网关:zuul、Openresty、Kong Zipkin、Pinpoint、SkyWalking、CAT 分布式存储、分布式计算、流计算...... Paxos、Raft、ZAB、Gossip TCC、2pc、3pc等分布式事务
这时候或者更早之前你就感觉你需要完整的巩固一遍基础,当然如果你大学是科班出身,而且认真上课了,应该不太需要
计算机组成原理 操作系统 计算机网络 数据结构与算法 编译原理
这些详细我的就不展开了,有点多。
还有容器相关 docker、k8s ,还有大数据(选修吧)
所以,还想学 Java 呢?
那就来看看到底要看哪些书和视频
这里的推荐基本上每份一样,我怕你有选择恐惧症,只给你一个选择。
Java 基础:
《Java 核心技术卷 I》 《Java 核心技术卷 II》
如果你想看点轻松点入门的
《Head First Java》
如果看不进书,那去看视频吧
B站的Java入门视频,https://www.bilibili.com/video/BV1Kb411W75N
新手(没有任何语言基础)推荐视频,比较不容易劝退。
还有一本被誉为神书的《Java编程思想》,内容容易劝退,不建议新手看。
还有《Effective Java》,学会了再看,好奇的话你可以先试试。
Java 并发相关:
《Java并发编程实战》
至于并发相关还想看看别的?你先把这本看完了,到时候自然就知道如何学了。
JVM :
《深入理解 Java 虚拟机》
同样,如果还想深入,先把这本看完,到时候再深入不迟。
如果想看视频:
B站宋红康,https://www.bilibili.com/video/BV1PJ411n7xZ
如果对垃圾回收感兴趣:
《垃圾回收算法手册:自动内存管理的艺术》 《垃圾回收的算法与实现》
对了这本也可以看看,Java性能优化相关的:
《Java性能优化权威指南》
I/O模型相关:
c10k问题,http://www.kegel.com/c10k.html Doug Lea 老爷子的 Scalable IO in Java,http://gee.cs.oswego.edu/dl/cpjslides/nio.pdf 再加一些杂七杂八的博客,自己用用,差不多了。
常用框架和中间件:
B站Spring视频,https://www.bilibili.com/video/BV1Vf4y127N5 Spring官网,https://spring.io/ 《Spring揭秘》 MyBatis官方文档,https://mybatis.org/mybatis-3/zh/index.html(中文的应该不会被劝退) 《Netty实战》 李号双的专栏《深入拆解Tomcat&Jetty》,然后书《深入剖析Tomcat》
一点点前端知识:
w3cschool,https://www.w3cschool.cn
学学 html、js、css
设计模式与代码整洁:
《代码整洁之道》 《设计模式之美》
MySQL
如果有你 MySQL 基础,或者说你大学学过数据库的课程,那么《MySQL必知必会》这本书,别去看,虽说很薄,但是太太太基础了....
如果你基本的 SQL 语句都不会,那就去看《MySQL必知必会》
《MySQL技术内幕:InnoDB存储引擎》 丁奇《MySQL实战45讲》 《从根儿上理解mysql》 《高性能MySQL(第3版)》 《MySQL技术内幕 InnoDB存储引擎》
Redis
redis官网,https://redis.io/
《Redis设计与实现》
《Redis开发与运维》
还有一些配套网站和中文注解源码,我之前文章写过。
还有很多中间件相关的我就不详细列了
统一看看官网 书的话,关键字打在豆瓣上搜搜,评分高的就没错。有一些中间件书不多,所以即使评分不高也可以看看,学习学习。 配合一些收费实战专栏学习,几十块的那种。
如果上面的都学下来,那么你脑海里应该挺有东西了,所以大头书应该能啃下去了,所以直接啃经典吧。
《深入理解计算机系统》 《计算机程序的构造和解释》 《现代操作系统》 《计算机网络:自顶向下》 《算法》第四版
算法如果只是为了应付面试,其实看小争哥的专栏就够了《数据结构与算法之美》,然后再配合 LeetCode刷题。
最后
差不多了,有些细节没有展开,只是列出了一些关键点,从这里可以看出,咱们后端要学的和懂得真的是太多了!
有时候懂一个不够,还得环比,这叫选型!
懂的表面不行,不懂原理遇到问题容易懵逼,并且面试很容易被问底层原理,想想咱们真的难!
完了,我自己要被自己劝退了!
学个P的Java!
我是yes,从一点点到亿点点,我们下篇见。
推荐阅读: