Java程序员的自我修养

Java程序员的自我修养

一、Java程序员应该具备的能力

  • 抽象能力
    对业务和技术进行抽象的能力.
    业务抽象就是对需求进行分析后,能够建立完整的实体类以及它们之间的联系
    技术抽象是对整体架构进行分层,各层之间的交互.如果技术抽象能力不足,会导致整个系统的架构不灵活,难以维护和扩展.
  • 知识广度
    需要知道主流技术为什么诞生,能解决什么问题?如果同一个业务用不同的技术实现,会有什么优缺点.比如流行的ORM框架Mybatis和hibernate,他们之间的优缺点是什么?对技术有清晰的认识才能在技术选型时做出正确的决定.
  • 知识深度
    至少是某一领域的专家.知道其技术原理,研究过底层源码级别的实现.
  • 学习能力
    对新的技术和前沿性技术进行学习的能力.

二、学习方法

  • 学习一个新的技术,要带着目的去学
    1. 这个技术的应用场景有哪些?使用它带来了哪些便利?
    2. 快速上手,demo级别的运行案例,搞明白提供了哪些功能,基本的操作有哪些
    3. 深究原理,demo是如果运行起来的,内部实现是啥?
    4. 及时总结,产生输出,写一些技术文章
    5. 对鸭弹琴,在桌面上摆一个小黄鸭,将你学到的技术的实现原理,运行方法等用大白话的方式讲给它听.这一步非常重要,能够加深对技术的印象.
  • 如何阅读一本技术书籍
    0. 存在的问题:有时候看一本技术书籍,当时看的时候感觉写的内容都懂了,可是合上书之后,啥都不记得了.
    1. 先将文章标题写在纸上,看完之后,回想一下这章内容是啥,尝试复述出来.
    2. 读书笔记,每章一个知识点总结.
  • 项目经验的积累
    1. 平时工作中不能只顾着埋头写业务代码,要注意总结
    2. 记下项目中用到了哪些技术,为什么要用这个技术,如何使用的
    3. 画出项目的用例图,类图,时序图,还有项目的技术架构图.
    4. 项目中遇到的bug改完后要及时总结,记录,避免下次犯同样的错误

三、Java程序员的内功修练

  • 数据结构与算法
  • 操作系统
  • 编译原理
  • 软件工程(用例图,类图,时序图)
  • 计算机网络

四、Java基础

五、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源码环境

十五、一些碎碎念

种一棵树最好的时间是十年前,其次是现在.其实早就应该把自己学的技术做笔记记录下来,系统的梳理一遍.不过现在也还不迟,这里先列个大纲,慢慢来,该补的课还是要补的.
现在网上越来越多的培训班,我也报了一个架构师课程,老师总是有个论调,不要把你学到的东西分享出去,要不然人家就会是你的面试竞争者.其实不然,肯去专研这些的最终都可能成为你的同事,当然,版权意识也很重要.
感觉高昂的生活成本,需要六个钱包才能买得起的住所,让我们变得太过物质,技术需要分享,站在巨人的肩膀上,才能走的更远,可以看到,国内的一些大厂也有很多开源项目,也在积极推动技术分享社区的建设.
月亮与六便士,为什么只低着头看地上的那枚六便士,如果我们能在追寻月亮的同时创造更多的六便士.
用技术创造价值.

十六、网站推荐

posted @ 2020-03-10 01:21  Serenity1994  阅读(322)  评论(0编辑  收藏  举报