详解java体系实用知识总结
0.java技术能力框架
基础模块 | 应用模块 | 综合模块 |
---|---|---|
技术岗位与面试流程 | 常用工具集 | 系统架构设计 |
计算机基础 | 常用框架 | 微服务架构 |
jvm原理 | 缓存 | 容器化 |
多线程 | 队列 | 云计算(阿里云/aws) |
设计模式 | 数据库 | |
数据结构与算法 |
1.常用设计模式与应用场景
- 工厂模式:spring 创建bean
- 代理模式:spring AOP
- 责任链模式:netty消息处理方式或.审批流程采用责任链模式
- 适配器模式:SLF4j对log4j的支持
- 观察者模式:webflux对流式请求的支持
- 构造者模式:PB序列化中的Builder
- 策略模式实现各种业务的指标监控逻辑或利用反射结合策略模式实现虚拟商品购买下发放不同权益;
2. JVM
- 性能分析工具(MAT/JMC/JStack/Jstat/arthas )
3.并发与多线程
线程状态的转换:
4.spring&web
1.spring
spring context初始化流程
spring如何解决bean的循环依赖调用:
Spring通过三级缓存解决了循环依赖,其中一级缓存为单例池(singletonObjects),二级缓存为早期曝光对象earlySingletonObjects,三级缓存为早期曝光对象工厂(singletonFactories)。当A、B两个类发生循环引用时,在A完成实例化后,就使用实例化后的对象去创建一个对象工厂,并添加到三级缓存中,如果A被AOP代理,那么通过这个工厂获取到的就是A代理后的对象,如果A没有被AOP代理,那么这个工厂获取到的就是A实例化的对象。当A进行属性注入时,会去创建B,同时B又依赖了A,所以创建B的同时又会去调用getBean(a)来获取需要的依赖,此时的getBean(a)会从缓存中获取,第一步,先获取到三级缓存中的工厂;第二步,调用对象工工厂的getObject方法来获取到对应的对象,得到这个对象后将其注入到B中。紧接着B会走完它的生命周期流程,包括初始化、后置处理器等。当B创建完后,会将B再注入到A中,此时A再完成它的整个生命周期。至此,循环依赖结束!
2.RPC框架实现
3.mybatis
4.缓存
Memcache:
Redis:
5.Mysql调优
mysql索引:
Mysql调优:
5.软件开发
1.软件工程的阶段
2.测试分类
3. http请求返回状态码
6.常用开发工具
MAT 查看dump信息,jmap导出dump文件
7.常用数据结构与算法
主导世界的10种算法
8.开源项目学习
1.ftgo源码学习
常用依赖库汇总:
io.micrometer:micrometer-registry-prometheusorg.springframework.boot:spring-boot-starter-actuatorio.eventuate.tram.core:eventuate-tram-spring-jdbc-kafka
io.eventuate.tram.core:eventuate-tram-spring-events
io.eventuate.tram.core:eventuate-tram-spring-messaging
io.eventuate.common:eventuate-common-json-mapper
io.eventuate.tram.sagas:eventuate-tram-sagas-spring-orchestration-simple-dsl
io.eventuate.tram.core:eventuate-tram-aggregate-domain-events
io.eventuate.tram.core:eventuate-tram-spring-consumer-kafka
io.eventuate.tram.core:eventuate-tram-spring-commands
eventuate-tram-sagas-spring-participant
io.eventuate.tram.sagas:eventuate-tram-sagas-spring-orchestrationorg.apache.commons.lang3.builder.HashCodeBuilderlibphonenumber :手机号码库edu.princeton.cup:java-cup-10k:解决c10k库 spring-boot-admin-starter-client
pagehelper-spring-boot-starter:分页
mybatis-generator-core:mybatis 生成器
sa-token-reactor-spring-boot3-starter:集成sa-token到响应式springboot
sa-token-redis-jackson:Sa-Token 集成redis并使用jackson序列化
sa-token-jwt:sa-token集成jwt
涉及的技术点:
- 分布式事务saga实现采用io.eventuate.tram库
- kafka-gui:kafka ui界面工具
- @EnableAdminServer 开启adminserver
2. PassJava-Platform源码学习
常用依赖库汇总
mybatis-plus-boot-starterspring-cloud-starter-alicloud-ossspring-cloud-starter-alibaba-nacos-discoveryspring-cloud-starter-alibaba-nacos-configspring-cloud-starter-openfeignmybatis-plus-core
mybatis-plus-extensiontransmittable-thread-local :阿里开源的,提供threadlocal值传递功能,解决异步执行时上下文传递问题。适合jdk6~21io.jsonwebtoken : jjwtspring-security-crypto:加解密spring-retrycom.github.penggle:kaptcha :图片验证码生成工具springfox-swagger2
springfox-swagger-ui hutool-allelasticsearch-rest-high-level-client :es客户端库org.redisson:redisson :分布式锁、分布式对象等功能框架
涉及的技术点
- jwt/springsecurity->token->JwtAuthController
- 解决:时间格式问题–> @JsonFormat(pattern = “yyyy-MM-dd HH:mm:ss”,timezone = “GMT+8”)
- redisson实现分布式锁方案代码如下:
public List<TypeEntity> getTypeEntityListByRedissonDistributedLock() {// 1.设置分布式锁RLock lock = redisson.getLock("lock");// 2.占用锁lock.lock();System.out.println("加锁成功,执行后续代码。线程 ID:" + Thread.currentThread().getId());List<TypeEntity> typeEntityListFromDb = null;try {// 3.获取数据typeEntityListFromDb = getDataFromDB();Thread.sleep(10000); // 模拟长时间执行任务} catch (Exception e) {System.out.println("异常");// TODO} finally {// 4.释放锁System.out.println("释放成功,执行后续代码。线程 ID:" + Thread.currentThread().getId());lock.unlock();}return typeEntityListFromDb;}
9. 工程师求职流程
工程师发展路径
- 技术序列:技术攻坚、架构设计、专业知识
- 管理序列:团队管理、项目管理、沟通协作
1.编写简历
工作内容、专业技能和项目经验写的有问题。简历内容废话太多;高级工程师,考虑综合能力;采用star原则写简历,尽量数据量化成果。
2.面试流程
3.面试前准备工作
- 了解应试公司以及岗位信息
- 系统化复习基础知识
- 对原公司负责的项目进行梳理总结
- 学习典型架构案例
- 阅读常考考点源码
- 针对性准备加分项
面试是:沟通、心态、能力的综合体现;自信、良好顺畅的沟通特别重要
4.面试考察点
5.加分项
- 知识点与典型的业务场景关联
- 以反例描述实际场景中误用的危害
- 与知识点相关的优化点
- 与知识点相关的最新技术趋势
- 在了解的前提下,尽量增加回答内容的深度
6.硬技能
7.面试技巧
star :stituation,task,action,result.
面试结束要做的事:
- 准备1~2个小问题
- 不要询问面试结果
- 复盘与总结
参考资料
- 分布式事务saga: https://blog.csdn.net/2301_77835649/article/details/131529270
- saga实现框架:eventuate-tram https://github.com/eventuate-tram/eventuate-tram-core
- 分布式事务seata
- TransmittableThreadLocal : https://github.com/alibaba/transmittable-thread-local
- arthas https://github.com/alibaba/arthas/blob/master/README_CN.md
https://arthas.aliyun.com/doc/arthas-tutorials.html?language=cn
https://arthas.aliyun.com/doc/spring-boot-starter.html - Sa-Token:java权限认证框架 https://github.com/dromara/Sa-Token https://sa-token.cc/
- JeecgBoot 低代码开发平台: https://github.com/jeecgboot/JeecgBoot
- mall https://github.com/macrozheng/mall https://github.com/macrozheng/mall-swarm
- springboot+k8s https://gitee.com/geektime-geekbang/staffjoy git clone https://gitee.com/geektime-geekbang/staffjoy.git
- ftgo: https://github.com/microservices-patterns/ftgo-application.git
- 程序员进击之路 https://www.didispace.com/home.html
- mybatis一键生成DAO: https://mybatis.org/generator/
- mybatis通用mapper4 一键生成: https://github.com/abel533/Mapper
- 参考资料:https://github.com/WongSilver/spring-cloud-study