详解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
相关文章:
详解java体系实用知识总结
0.java技术能力框架 基础模块应用模块综合模块技术岗位与面试流程常用工具集系统架构设计计算机基础常用框架微服务架构jvm原理缓存容器化多线程队列云计算(阿里云/aws)设计模式数据库数据结构与算法 1.常用设计模式与应用场景 工厂模式:s…...
node-ddk,electron,主进程通讯,窗口间通讯
node-ddk,electron,主进程通讯,窗口间通讯 https://blog.csdn.net/eli960/article/details/146207062 也可以下载demo直接演示 http://linuxmail.cn/go#node-ddk import 在主进程 import main, { NODEDDK } from "node-ddk/main"在渲染进程 import renderer, …...
kubectl 命令参数详解与示例
kubectl 命令参数详解与示例 kubectl 是 Kubernetes 的命令行工具,用于与 Kubernetes 集群交互。下面我将详细介绍 kubectl 的主要命令参数,并提供相应的使用示例。 一、基础命令 1. kubectl get - 获取资源信息 常用参数: -n, --namesp…...
在 Ubuntu 20.04 上重新启动网络
参考链接: 如何在 Ubuntu 22.04 上重新启动网络 执行以下两条命令,ok sudo nmcli networking off sudo nmcli networking on...
STM32 - 在机器人、自动化领域,LL库相比HAL优势明显
在机器人控制器、电机控制器等领域的开发,需要高实时性、精细化控制或者对代码执行效率、占用空间有较高要求。所以,大家常用的HAL库明显不符合要求。再加上,我们学习一门技术,一定要学会掌握底层的原理。MCU开发的底层就是寄存器…...
【区块链安全 | 第二篇】区块链概念详解
文章目录 概述1. 区块链类型2 区块链五层架构3 账本模型4. 节点(Node)5. 区块(Block)6. 区块链(Blockchain)7. 区块链工作流程 核心技术1. 共识机制2. 智能合约 主要组件1. 交易(Transaction&am…...
【开源宝藏】30天学会CSS - DAY6 第六课 流光文字动画
第 0 步:项目结构 lighting-text/├─ index.html└─ style.cssindex.html:包含列表 <ul>,其中每个 <li> 放一个字母或符号。style.css:设置背景、文字样式,以及关键帧动画(lighting…...
linux - centos7 部署 redis6.0.5
事先说明 本篇文章只解决在部署redis中出现的问题,并没有部署redis的全过程,详细部署过程可以参考Linux安装部署Redis(超级详细) - 长沙大鹏 - 博客园 执行 make 命令时报错 原因:是因为gcc版本太低 升级gcc版本时 出现没有可用软件包 devt…...
Java反射机制详解:原理、应用与最佳实践
Java反射机制详解:原理、应用与最佳实践 1. 什么是反射? Java反射(Reflection)是指在运行时动态获取类的信息(如类名、方法、字段、构造方法等)并操作对象的能力。它允许程序在运行时检查和修改类的行为&…...
Swift实现嵌套json字典重排序并输出string
在网络请求或接口签名中,通常要求将参数按照一定规则拼接成字符串。一个常见的做法是对字典的 key 进行排序,然后按照 “keyvalue” 的格式拼接,多个参数之间以特定符号(例如 &)连接。 如果参数中包含嵌套的字典或…...
【Ai】--- 可视化 DeepSeek-r1 接入 Open WebUI(超详细)
在编程的艺术世界里,代码和灵感需要寻找到最佳的交融点,才能打造出令人为之惊叹的作品。而在这座秋知叶i博客的殿堂里,我们将共同追寻这种完美结合,为未来的世界留下属于我们的独特印记。【Ai】--- 可视化 DeepSeek-r1 接入 Open WebUI(超详细) 开发环境一、前情提要:你…...
VSCode加Cline插件加DeepSeek实现AI编程指南
VSCode加Cline插件加DeepSeek实现AI编程指南 简介 本文将详细介绍如何在VSCode中使用Cline插件结合DeepSeek AI实现高效的AI辅助编程,特别适合初学者快速上手。我们将通过实现一个TodoList应用的例子来演示整个流程。 环境准备 1. 安装VSCode 前往VSCode官网下…...
代码规范之Variable Names变量名
代码规范之Variable Names变量名 golang中 官方文档:https://go.dev/wiki/CodeReviewComments#variable-names Variable names in Go should be short rather than long. This is especially true for local variables with limited scope. Prefer c to lineCoun…...
2025春招市场迎AI热潮:生成式人工智能(GAI)认证如何重构人才竞争力
随着科技的飞速发展,人工智能(AI)已逐渐渗透到我们生活的方方面面,从智能家居到自动驾驶,从智能客服到医疗诊断,AI的身影无处不在。而在这股AI浪潮中,生成式人工智能(Generative AI,…...
Flink基础简介和安装部署
文章目录 一、Flink基础简介1、什么是Flink2、Flink流处理特性3、Flink四大基石4、Flink中的角色 二、Flink集群搭建1、Local模式①上传Flink安装包②启动交互窗口③提交任务测试④访问WebUI页面查看⑤退出停止集群 2、Standalone模式①修改配置⽂件 conf/flink-conf.yaml②修改…...
SpringBoot分布式项目实战:观察者模式的高阶应用与避坑指南
一、痛点场景:当观察者遇上分布式 在某电商平台重构项目中,我们遭遇了这样的困境:订单中心完成支付后需要触发库存扣减、积分结算、物流调度等12个后续操作。最初的实现采用了硬编码调用: // 伪代码示例 public void paySuccess…...
How to use pgbench to test performance for PostgreSQL?
pgbench 是一个用于测试 PostgreSQL 数据库性能的基准测试工具。通过模拟多个客户端并发执行 SQL 查询,它可以帮助你评估数据库的性能。以下是使用 pgbench 的基本步骤: 安装 pgbench pgbench 是 PostgreSQL 的一部分,因此在安装 PostgreSQ…...
C#基础学习(五)函数中的ref和out
1. 引言:为什么需要ref和out? 问题背景:函数参数默认按值传递,值类型在函数内修改不影响外部变量;引用类型重新赋值时外部对象不变。核心作用:允许函数内部修改外部变量的值,实现“双向传参…...
从零构建大语言模型全栈开发指南:第二部分:模型架构设计与实现-2.2.2文本生成逻辑:Top-k采样与温度控制
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 2.2.2 文本生成逻辑:Top-k采样与温度控制1. 文本生成的核心挑战与数学框架1.1 自回归生成的基本流程2. `Top-k`采样原理与工程实现2.1 数学定义与算法流程2.2 PyTorch实现优化3. 温度控制的数学本质与参…...
关于CodeJava的学习笔记——9
一、IO流 1、定义 IInput输入 OOutput输出 流 : 数据从源点传输到汇点的"管道"而已 2、流的分类 按照方向分: 输入流 输出流 *:参照物当前Java程序为参照物 按照单位分: 字节流 字符流 按照功能分: 节点流 过滤流(包装流 处…...
LeetCode算法题(Go语言实现)_11
题目 给定字符串 s 和 t ,判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列&a…...
Python----数据分析(足球运动员数据分析)
一、数据展示 1.1、数据 1.2、列名 字段名备注Name姓名Nationality国籍National_Position国家队位置National_Kit国家队号码Club所在俱乐部Club_Position所在俱乐部位置Club_Kit俱乐部号码Club_Joining加入俱乐部时间Contract_Expiry合同到期时间Rating评分Height身高Weight体…...
Day38 | 1365. 有多少小于当前数字的数字、941. 有效的山脉数组、1207. 独一无二的出现次数、283. 移动零、189. 轮转数组
1365. 有多少小于当前数字的数字 题目链接:1365. 有多少小、于当前数字的数字 - 力扣(LeetCode) 题目难度:简单 代码: class Solution {public int[] smallerNumbersThanCurrent(int[] nums) {Map<Integer,Inte…...
Docker-清理容器空间prune
docker system prune -a 是一个非常有用的命令,用于清理 Docker 系统中未使用的资源,包括停止的容器、未使用的网络、卷以及未被任何容器引用的镜像(悬空镜像和所有未使用的镜像)。以下是关于该命令的详细说明: 命令格…...
matplotlib——南丁格尔玫瑰
南丁格尔玫瑰图(Nightingale Rose Chart),是一种特殊形式的柱状图,它以南丁格尔(Florence Nightingale)命名,她在1858年首次使用这种图表来展示战争期间士兵死亡原因的数据。 它将数据绘制在极坐…...
Django与网页表单
我叫补三补四,很高兴见到大家,欢迎一起学习交流和进步 今天来讲一讲网页表单 网页表单又叫做HTML表单,用来处理用户从页面输入发送到服务器的数据,页面表单通常会提供复选框、单选按钮和文本字段,方便用户填写各种形式…...
Rust从入门到精通之入门篇:10.包和模块
包和模块 在本章中,我们将学习 Rust 的包和模块系统,它们是组织和重用代码的重要工具。随着项目规模的增长,良好的代码组织变得越来越重要,Rust 提供了一套强大的机制来管理代码结构。 包和 Crate Crate Crate 是 Rust 中最高…...
ChatDBA VS DeepSeek:快速诊断 OceanBase 集群新租户数据同步异常
社区王牌专栏《一问一实验:AI 版》改版以来已发布多期(51-60),展现了 ChatDBA 在多种场景下解决问题的效果。 下面让我们正式进入《一问一实验:AI 版》第 62 期,看看 ChatDBA 最新效果以及与热门大模型 De…...
dify忘记密码
特别好,非常好,一把年纪忘了dify的账号、密码了,very good!!! 参考如下教程 https://zhuanlan.zhihu.com/p/24515387167 rootbae577d82ec7:/# psql -U postgres psql: error: connection to server on so…...
Python----计算机视觉处理(Opencv:图像边缘检测:非极大值抑制,双阈值筛选)
一、 高斯滤波 边缘检测本身属于锐化操作,对噪点比较敏感,所以需要进行平滑处理。这里使用的是一个5*5的高斯 核对图像进行消除噪声。 二、计算图像的梯度和方向 三、非极大值抑制 在得到每个边缘的方向之后,其实把它们连起来边缘检测就算完了…...
