Java程序员的自我修养
Java程序员的自我修养
一、Java程序员应该具备的能力
- 抽象能力
对业务和技术进行抽象的能力.
业务抽象就是对需求进行分析后,能够建立完整的实体类以及它们之间的联系
技术抽象是对整体架构进行分层,各层之间的交互.如果技术抽象能力不足,会导致整个系统的架构不灵活,难以维护和扩展. - 知识广度
需要知道主流技术为什么诞生,能解决什么问题?如果同一个业务用不同的技术实现,会有什么优缺点.比如流行的ORM框架Mybatis和hibernate,他们之间的优缺点是什么?对技术有清晰的认识才能在技术选型时做出正确的决定. - 知识深度
至少是某一领域的专家.知道其技术原理,研究过底层源码级别的实现. - 学习能力
对新的技术和前沿性技术进行学习的能力.
二、学习方法
- 学习一个新的技术,要带着目的去学
- 这个技术的应用场景有哪些?使用它带来了哪些便利?
- 快速上手,demo级别的运行案例,搞明白提供了哪些功能,基本的操作有哪些
- 深究原理,demo是如果运行起来的,内部实现是啥?
- 及时总结,产生输出,写一些技术文章
- 对鸭弹琴,在桌面上摆一个小黄鸭,将你学到的技术的实现原理,运行方法等用大白话的方式讲给它听.这一步非常重要,能够加深对技术的印象.
- 如何阅读一本技术书籍
0. 存在的问题:有时候看一本技术书籍,当时看的时候感觉写的内容都懂了,可是合上书之后,啥都不记得了.- 先将文章标题写在纸上,看完之后,回想一下这章内容是啥,尝试复述出来.
- 读书笔记,每章一个知识点总结.
- 项目经验的积累
- 平时工作中不能只顾着埋头写业务代码,要注意总结
- 记下项目中用到了哪些技术,为什么要用这个技术,如何使用的
- 画出项目的用例图,类图,时序图,还有项目的技术架构图.
- 项目中遇到的bug改完后要及时总结,记录,避免下次犯同样的错误
三、Java程序员的内功修练
- 数据结构与算法
- 操作系统
- 编译原理
- 软件工程(用例图,类图,时序图)
- 计算机网络
四、Java基础
五、JVM
- 分享一个jvm领域大神的博客RednaxelaFX
- 读书笔记 | 深入理解Java虚拟机
- 学习笔记 | JVM
- Java程序是如何运行起来的,JVM是如何启动的?
- Java类的生命周期
- new一个对象时,jvm中做了什么操作
- JVM的垃圾回收
- JVM性能调优
六、多线程与并发编程
七、Mysql
- 读书笔记 | Mysql是怎样运行的
- mysql数据如何存储,内部结构
- sql操作做了哪些事,数据的增删改查底层是如何实现的,又是如何存入文件系统的
- mysql中的乐观锁和悲观锁? mysql行级锁的内部原理?
八、Spring
- 什么是spring
- 使用spring框架有什么好处
- spring的IOC及IOC的优缺点
- IOC容器
- bean的作用域
- 如何声明一个bean
- spring中bean的生命周期
- spring的AOP及原理
- spring中用到的设计模式
- spring的事务,事务的传播行为,如何使用
- spring MVC从接受请求到返回数据的整个流程
九、Redis
- 读书笔记 | Redis的设计与实现
- redis的数据类型,基本操作,每个数据类型的具体使用场景,数据内部存储
- redis的线程模型,为啥单线程也能有很高的效率
- redis的过期策略
- 如何保证redis的高并发和高可用
- redis的持久化及数据恢复策略
- redis的集群模式原理
- 如何处理 缓存穿透,缓存雪崩,缓存击穿
- 如何保证缓存与数据库双写时的数据一致性
- 如何解决redis的并发竞争问题
十、Dubbo
- dubbo服务暴露的过程
- 为什么要使用dubbo?dubbo和spring cloud的区别?
- rpc调用和http调用对比,哪个性能更好,为什么?
- dubbo的工作原理是啥,注册中心挂了之后可以继续通信吗?
- dubbo支持哪些通信协议及序列化协议?
- dubbo支持哪些负载均衡,高可用以及动态代理的策略?
- dubbo中的SPI
- dubbo如何做服务治理,服务降级以及重试?
- 分布式系统接口的幂等性如何保证?
- 分布式系统接口的顺序性
- 让你设计一个类似dubbo的rpc框架,如何设计
十一、MQ
- 如何进行消息队列的技术选型
- 引入消息队列后如何保证其高可用性
- 消息的重复消费问题
- 消息丢失问题
- 消息的顺序性问题
- 大量消息在消息队列中堆积,该怎么办
- 如果让你来设计消息队列,你会怎么做
十二、Elasticsearch
- Elasticsearch是什么?有什么用途?
- Elasticsearch的底层原理,倒排索引是啥?
十三、Spring cloud
十四、源码环境搭建
1. jvm编译环境
2. spring源码环境
3. springboot源码环境
4. dubbo源码环境
十五、一些碎碎念
种一棵树最好的时间是十年前,其次是现在.其实早就应该把自己学的技术做笔记记录下来,系统的梳理一遍.不过现在也还不迟,这里先列个大纲,慢慢来,该补的课还是要补的.
现在网上越来越多的培训班,我也报了一个架构师课程,老师总是有个论调,不要把你学到的东西分享出去,要不然人家就会是你的面试竞争者.其实不然,肯去专研这些的最终都可能成为你的同事,当然,版权意识也很重要.
感觉高昂的生活成本,需要六个钱包才能买得起的住所,让我们变得太过物质,技术需要分享,站在巨人的肩膀上,才能走的更远,可以看到,国内的一些大厂也有很多开源项目,也在积极推动技术分享社区的建设.
月亮与六便士,为什么只低着头看地上的那枚六便士,如果我们能在追寻月亮的同时创造更多的六便士.
用技术创造价值.