作者小傅哥多年从事一线互联网Java开发,从19年开始编写工作和学习历程的技术汇总,旨在为大家提供一个较清晰详细的核心技能学习文档。如果本文能为您提供帮助,请给予支持(关注、点赞、分享)!
从刚面试的问题回答中,能看得出你用了不少拙力背了不少题。直接拿这些技术点问,你可以回答。但同样是这些技术点,我换个场景来问用到了什么技术,你就像从没有听说过一样。当然不可否认你能通过背把这些内容记住也是一种能力,但作为招聘从事软件编程的码农来说,其实更希望是招聘那些通过实际场景积累下来技术经验研发人员,对各个技术点有张有弛,举一反三。
为啥,面试官那么喜欢让你聊聊 HashMap?因为 HashMap 涉及的东西广,用到的数据结构多,问题延展性好,一个 HashMap 就能聊下来80%的数据结构了。而且面试 HashMap 能通过你对红黑树的了解定位出你哪个级别的研发人员。
API 网关项目,是所有互联网大厂都有的一个核心服务,承接着来自用户的滴滴打车、美团外卖、京东购物、微信支付,更是大促期间千万级访问量的核心系统。 🤔 那么它是一个什么样的项目呢?为什么会有它的存在?它是怎么设计实现的呢?都用到了哪些技术栈呢?
23种设计模式,Mybatis源码中竟然用了一半!怒卷Mybatis设计模式,从源码中学习设计模式,太爽了!
傅哥手写Mybatis,怎么把Mybatis都给手写了!—— 就这么学源码,面试还是个事?
很多研发伙伴都说写不好简历,总结包括:格式难调、结构混乱、内容不足、不会包装。鉴于这些情况小傅哥以自己的博客内容为主,写了一份大家都能看得懂、抄的来、用的上的简历模板!拿去用吧!
引入SQL执行器,解耦DefaultSqlSession对SQL的绑定处理,为后续的功能迭代留出可扩展的口子。 渐进式迭代开发,学习框架源码,掌握设计原则和工程实现方案,拉高自己的认知和编码水平。
我也苦思冥想,怎么跟领导说咱们从 MVC 升级到 DDD 吧,因为 DDD 代码结构更加清晰、领域驱动比测试驱动开发更加先进、研发的兄弟们也更想用用新框架等。
一、前言 二、需求目的 三、案例开发 1. 工程结构 2. 伪随机数检测 3. FastJson检测 4. 提醒模板 5. 检测配置 四、测试验证 五、总结 六、系列推荐
一、前言 二、需求目的 三、案例开发 1. 工程结构 2. 织入代码接口 3. 定义模板方法 4. 代码织入锚点 5. 配置菜单入口 四、测试验证 1. 复制对象 2. 生成对象 3. 最终效果 五、扩展接口 六、总结
一、前言 二、需求目的 三、案例开发 1. 工程结构 2. 拖拽Swing面板 3. 配置鼠标右键弹窗 4. 给窗体添加功能 5. 代码生成领域服务 四、测试验证 五、总结 六、系列推荐
一、前言 二、需求目的 三、案例开发 1. 工程结构 2. UI 工程配置窗体 3. 配置工程步骤创建 4. 开发脚手架服务 5. 调用脚手架服务 6. 配置模板工程 四、测试验证 五、总结 六、系列推荐
一、说明 二、需求目的 三、案例开发 1. 工程结构 2. 创建 UI 窗体 3. ToolWindow 工具框 4. Configurable 配置框 5. 配置 plugin.xml 四、插件测试 五、总结 六、系列推荐
一、前言 二、需求目的 三、环境说明 四、模板方式创建 1. 创建引导 2. 工程结构 3. plugin.xml 配置 4. MyAction 事件入口 5. 运行测试 五、Gradle 方式创建 1. 创建引导 2. 工程结构 3. build.gradle 配置 4. MyAction 事件入口 5. 运行测试 六、总结
一、前言 二、性能测试对比 三、12种转换案例 1. get\set 2. json2Json 3. Apache copyProperties 4. Spring copyProperties 5. Bean Mapping 6. Bean Mapping ASM 7. BeanCopier 8. Orika 9. Dozer 10. ModelMapper 11. JMapper 12. MapStruct 四、总结 五、系列推荐
一、前言 二、代码优化 1. 约定规范 2. 接口标准 3. 库表设计 4. 算法逻辑 5. 职责分离 6. 逻辑缜密 7. 领域聚合 8. 服务分层 9. 并发优化 10. 源码能力 三、总结 四、系列推荐
前言 二、抛出问题 三、开发插件涉及的问题 四、开发插件的两种配置 1. 基础配置 2. 遇到问题 五、写个测试案例 1. 工程结构 2. AnAction 3. MyToolWindowFactory 4. plugin.xml 5. 测试结果 六、插件开发能做啥都 1. 快速生成 CRUD 工程代码 2. 在 IDEA 中摸鱼聊天 3. 可视化流程编排 七、总结 八、系列推荐
实现 1. 工程结构 2. 把读取到属性填充到容器 3. 自定义属性注入注解 4. 扫描自定义注解 5. 在Bean的生命周期中调用属性注入 测试 1. 事先准备 2. 属性配置文件 3. 单元测试
实现 1. 工程结构 2. 处理占位符配置 3. 定义拦截注解 4. 处理对象扫描装配 5. 解析xml中调用扫描 测试 1. 事先准备 2. 属性配置文件 3. spring.xml 配置对象 4. 单元测试(占位符) 5. 单元测试(包扫描)
实现 1. 工程结构 2. 定义Advice拦截器链 3. 定义 Advisor 访问者 4. 方法拦截器 5. 代理工厂 6. 融入Bean生命周期的自动代理创建者 测试 1. 事先准备 2. 自定义拦截方法 3. spring.xml 配置 AOP 4. 单元测试
实现 1. 工程结构 2. 代理方法案例 3. 切点表达式 4. 包装切面通知信息 5. 代理抽象实现(JDK&Cglib) 测试 1. 事先准备 2. 自定义拦截方法 3. 单元测试
实现 1. 工程结构 2. 定义和实现事件 3. 事件广播器 4. 事件发布者的定义和实现 测试 1. 创建一个事件和监听器 2. 配置文件 3. 单元测试
实现 1. 工程结构 2. Bean的作用范围定义和xml解析 3. 创建和修改对象时候判断单例和原型模式 4. 定义 FactoryBean 接口 5. 实现一个 FactoryBean 注册服务 6. 扩展 AbstractBeanFactory 创建对象逻辑 测试 1. 事先准备 2. 定义 FactoryBean 对象 3. 配置文件 4. 单元测试(单例&原型) 5. 单元测试(代理对象)
实现 1. 工程结构 2. 定义标记接口 3. 容器感知类 4. 包装处理器(ApplicationContextAwareProcessor) 5. 注册 BeanPostProcessor 6. 感知调用操作 测试 1. 事先准备 2. 配置文件 3. 单元测试
实现 1. 工程结构 2. 定义初始化和销毁方法的接口 3. Bean属性定义新增初始化和销毁 4. 执行 Bean 对象的初始化方法 5. 定义销毁方法适配器(接口和配置) 6. 创建Bean时注册销毁方法对象 7. 虚拟机关闭钩子注册调用销毁方法 测试 1. 事先准备 2. 配置文件 3. 单元测试
实现 1. 工程结构 2. 定义 BeanFactoryPostProcessor 3. 定义 BeanPostProcessor 4. 定义上下文接口 5. 应用上下文抽象类实现 6. 获取Bean工厂和加载资源 7. 上下文中对配置信息的加载 8. 应用上下文实现类(ClassPathXmlApplicationContext) 9. 在Bean创建时完成前置和后置处理 测试 1. 事先准备 2. 实现 BeanPostProcessor 和 BeanFactoryPostProcessor 3. 配置文件 4. 不用应用上下文 5. 使用应用上下文
实现 1. 工程结构 2. 资源加载接口定义和实现 3. 包装资源加载器 4. Bean定义读取接口 5. Bean定义抽象类实现 6. 解析XML处理Bean注册 测试 1. 事先准备 2. 配置文件 3. 单元测试(资源加载) 4. 单元测试(配置文件注册Bean)
实现 1. 工程结构 2. 定义属性 3. Bean定义补全 4. Bean 属性填充 测试 1. 事先准备 2. 测试用例 3. 测试结果
实现 1. 工程结构 2. 新增 getBean 接口 3. 定义实例化策略接口 4. JDK 实例化 5. Cglib 实例化 6. 创建策略调用 测试 1. 事先准备 2. 测试用例 3. 测试结果 4. 操作案例
实现 1. 工程结构 2. BeanDefinition 定义 3. 单例注册接口定义和实现 4. 抽象类定义模板方法(AbstractBeanFactory) 5. 实例化Bean类(AbstractAutowireCapableBeanFactory) 6. 核心类实现(DefaultSingletonBeanRegistry) 测试 1. 事先准备 2. 测试用例 3. 测试结果
实现 1. 工程结构 2. Bean 定义 3. Bean 工厂 测试 1. 事先准备 2. 测试用例 3. 测试结果
一、前言 二、目标 三、计划 四、源码 五、总结 六、系列推荐
什么是循环依赖? 1. 问题描述 2. 问题体现 3. 问题处理 源码分析 1. 说说细节 2. 处理过程 3. 依赖解析
如何正确使用 Aspect 的 .aj 类 1. 安装 AspectJ 2. AspectJ 插件 3. 添加依赖 aspectjrt.jar 4. 配置AspectJ编译器 5. 案例测试
Bean 的获取过程 1. getBean 核心流程图 2. getBean 从哪开始读源码 3. getBean 源码全局预览 4. beanName 转换操作 5. depends-on 依赖 Bean 6. 处理单实例 Bean 7. 从缓存中获取 bean 实例 8. FactoryBean 中获取 bean 实例 四、测试案例 1. 别名 2. 依赖 3. BeanFactory
一、前言 二、Cloudreve 介绍 🔉 功能 ✨ 特性 📌 资料 三、环境准备 四、宝塔配置 1. 获取用户名和密码 2. 8888 端口授权 3. 登录宝塔后台 五、服务安装 1. 在宝塔终端查看服务内核 2. 下载和安装 3. 开放端口 5212 4. 登录服务 六、进程守护 1. Supervisor 配置 2. Supervisor 启动 七、配置域名 1. 解析域名 2. 反向代理 八、数据库切换 九、总结 十、系列推荐
SpringIOC 特性 1. xml 配置 2. 接口类
• 代理Bean注册到Spring容器 • 1. 定义接口 • 2. 类代理实现 • 3. 实现Bean工厂 • 4. Bean 注册 • 四、测试验证 • 1. 定义 spring-config.xml • 2. 单元测试
单体架构 2. 应用与数据库分离 3. 使用缓存抗量 4. 多应用部署和Nginx反向代理 5. 数据库读写分离 6. 应用分组部署 7. 应用分库设计 8. RPC 分布式部署 9. 应用细分和网关引入 10. 低代码编程和可复用
一、前言 二、什么是低代码 三、如何落地实现 四、总结
前言 二、技术实现准备 三、对字节码插桩 1. 方法入口 2. 采集信息 四、IDEA 插件开发 五、效果演示 六、总结 七、系列推荐
先动手验证垃圾回收 JVM 垃圾回收知识框架 1. 判断对象已死 2. 垃圾回收算法 3. 垃圾回收器
for循环没算法快 1. for 循环实现 2. 算法逻辑实现 3. 耗时曲线对比 四、Java中的算法运用 1. HashMap的扰动函数 2. 斐波那契(Fibonacci)散列法 3. 梅森旋转算法(Mersenne twister) 五、程序员数学入门
1. jps 虚拟机进程状况 2. jcmd 虚拟机诊断命令 3. jinfo Java配置信息工具 4. jstat 收集虚拟机运行数据 5. jmap 内存映射工具 6. jhat 堆转储快照分析工具 7. jstack Java堆栈跟踪工具 四、可视化故障处理工具 1. jconsole,Java监视与管理控制台 2. VisualVM,多合故障处理工具
• 1. 程序计数器 • 2. Java虚拟机栈 • 3. 本地方法栈 • 4. 堆和元空间 • 5. 常量池 • 五、手撸虚拟机(内存模型) • 1. 工程结构 • 2. 重点代码 • 六、jconsole监测元空间溢出 • 1. 找段持续创建大对象的代码 • 2. 调整元空间大小 • 3. 设置监控参数 • 4. 测试运行
写个代码加载下 1. 案例工程 2. 代码讲解 五、解析字节码文件 1. 提取部分字节码 2. 解析魔数并校验 3. 解析版本号信息 4. 解析全部内容对照
. Java 平台标准(JDK 8) 2. JDK 目录结构和作用 3. JDK 是什么? 4. JRE 是什么? 5. JVM 是什么?
一、前言 二、面试题 三、四种线程池使用介绍 1. newFixedThreadPool 2. newSingleThreadExecutor 3. newCachedThreadPool 4. newScheduledThreadPool 四、线程池使用场景说明 五、获取线程池监控信息 1. 重写线程池方式监控 2. 基于IVMTI方式监控 六、总结 七、系列推荐
正好是2020年,看到这张图还是蛮有意思的。以前小时候总会看到一些科技电影,讲到机器人会怎样怎样,但没想到人似乎被娱乐化的东西,搞成了低头族、大肚子! 当意识到这一点时,其实非常怀念小时候。放假的早上跑出去,喊上三五个伙伴,要不下河摸摸鱼、弹弹玻璃球、打打pia、跳跳房子!一天下来真的不会感觉累,但现在如果是放假的一天,你的娱乐安排,很多时候会让头很累!
如果是框架和中间件的存在,是了让程序员只关心业务开发。那为什么你面试的时候会被问到核心组件的设计和原理呢? 在这个年代,别放弃学习是你几乎唯一的生存途径。