
Java(SpringBoot)企业日常研发笔记
文章平均质量分 70
某较火互联网大厂Java研发搬砖狗分享大厂搬砖过程中的笔记/心得/踩坑:
1.基础:单测/MQ/规范/MySQL/Nginx/Redis等知识域系统化
2.实战:设计模式,基础组件从流程图、时序图到实践
3.进阶:根据抽象/解耦/可扩展多个维度解决业务问题,以更优雅的姿势让需求落地。
后续价格会升高
优惠券已抵扣
余额抵扣
还需支付
¥29.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
_我走路带风
To save time is to lengthen life.
展开
-
【基础组件设计实践】项目中实现延时任务的不同姿势
延时任务,一个非常常用和常见的技术组件:如订单下单后五分钟发邮件提醒用户过来查看,又或者定时任务失败后3分钟延时任务自动重试。延时任务的概念很简单,但是实现起来方法很多,下面来介绍一下项目常用的两种。一、 通过Redis的方式实现延时任务实现二、使用云调度平台方式实现延时任务原创 2021-11-26 10:39:45 · 955 阅读 · 0 评论 -
一个封装的BeanCopier工具类
工具类BeanCopierUtils1. 支持source对象到target对象的拷贝2. 支持List<S> source到 List<T> target的拷贝原创 2021-11-08 21:26:11 · 751 阅读 · 0 评论 -
【代码优化】状态机的定义 & 设计与实践
状态机是有限状态自动机的简称,表示有限个状态以及在这些状态之间的转移等行为抽象的数学模型。什么是“状态”( State )。现实事物是有不同状态的,我们拿一个很常见的审批流来举例,一个审批流里,“已通过” 和 “已拒绝” 就是两个不同的状态。状态机的要求需要比较轻量的内存级状态配置,主要负责状态流转计算,如:基本操作,设置初始状态,输入事件,获取目标状态。状态间转换,除了事件触发,需要能够通过配置匹配表达式和传入参数进行扩展,如同一个初始状态和事件,目标状态可能因为传入参数的不同而不同,便于不同业务原创 2021-11-08 10:40:45 · 683 阅读 · 0 评论 -
Easyexcel 实现导出Excel到流中并支持excel抬头国际化基础工具类实现
前言talk is cheap, show youthe code.第一步:定义Easyexcel导出的接口类 以及 参数类接口类定义/** * 导出数据源 * * @author https://blog.youkuaiyun.com/qq_36652619/category_9289993.html * @date 12/09/2020 7:13 下午 */@Api("导出参数")@Data@Builderpublic class ExportParam { /** .原创 2021-01-24 14:18:35 · 3460 阅读 · 1 评论 -
研究一下Socket和IO模型
目录SocketSocket通信流程Socket IO模型IOIO交互过程IO模型一、阻塞IO模型二、非阻塞IO模型三、IO复用模型四、信号驱动式IO模型五、异步IO模型五大IO模型的比较关于Socket和WebSocket的区别Socket和IP可以标识一台计算机一样,进程在网络里面通信也是需要被唯一标识,那么如果是在一台计算机里,PI...原创 2019-11-10 13:32:09 · 1122 阅读 · 0 评论 -
MySQL 之 InnoDB引擎 Log Buffer
Log Buffer(日志缓冲区)是一块内存区域用来保存要写入磁盘上的日子文件的数据。 Log Buffer的大小由innodb_log_buffer_size变量定义。默认大小为16MB。Log Buffer的内容会定期刷到磁盘上。大的Log Buffer让较大事务能够运行,而无需在事务提交之前将redo log中的数据写入磁盘。因此,如果有DML操作并且会影响很多行这样是事务,增加日志缓冲...原创 2019-04-30 20:12:25 · 1881 阅读 · 2 评论 -
MySQL 之 InnoDB引擎 Adaptive Hash index (自适应哈希索引)
官网解释Adaptive Hash index(自适应哈希索引)的特性使得InnoDB在不牺牲事务特性或可靠性的前提下,为缓冲池提供适当的工作负载和足够的内存的时候,能够表现的更像 in-memory(内存)数据库。该特性是通过变量innodb_adaptive_hash_index来使用的,可以说Adaptive Hash index不是传统意义的索引,可以理解为在Btree上的"索引"...原创 2019-04-26 21:20:04 · 3557 阅读 · 1 评论 -
MySQL InnoDB存储引擎 之 锁
锁在实际的业务场景中,数据库上面的一个难点就是:一方面要最大程度利用数据库的并发访问,另一方面要保证用户的数据一致性,不能出现错乱的数据,于是锁的机制就诞生了。锁用于管理共享资源的并发访问,InnoDB引擎不但可以在数据表的行级别上面上锁,还可以在一些其他地方上锁,比如缓冲池中删除、添加LRU列表中的元素的时候为保证一致性需要上锁。Buffer Pool的LRU相关在我这篇里面有简单的介绍...原创 2019-04-08 20:40:07 · 337 阅读 · 0 评论 -
MySQL 之 InnoDB缓冲池(Buffer Pool)体系结构
缓冲池体系结构图:缓冲池(Buffer Pool)是主缓存器的一个区域,用于缓存索引、行的数据、自适应哈希索引、插入缓存(Insert Buffer)、锁 还有其他的内部数据结构。Buffer Pool的大小是可以根据我们实际的需求进行更改,那么Buffer Pool的size取多少比较合适,在我的博客https://blog.youkuaiyun.com/qq_36652619/article/de...原创 2019-04-01 17:39:31 · 2336 阅读 · 0 评论 -
MySQL参数 之 innodb_buffer_pool_size
Innodb_buffer_pool_size《深入浅出MySQL》一文中这样描述Innodb_buffer_pool_size: 该参数定义了 InnoDB 存储引擎的表数据和索引数据的最大内存缓冲区大小。和 MyISAM 存储引擎不同,MyISAM 的 key_buffer_size只缓存索引键, 而 innodb_buffer_pool_size 却是同时为数据块和索引块做...原创 2019-03-26 18:59:16 · 15998 阅读 · 0 评论 -
java开发笔记:SpringBoot拦截器Interceptor (实现简单的登陆拦截器[白名单,重定向,模拟登陆])
定义拦截器顾名思义是拦截打到控制器的请求然后做一些个性化的定制功能比如说302重定向等等,(Interceptor)拦截器相对于(Filter)过滤器可以拦截细一些的东西比如控制请求的方法和控制器,但是控制不了请求方法中的参数。使用场景最常用的几个场景1. 登陆拦截器:白名单 测试环境表单模拟登陆 登陆状态拦截并302重定向login页面2. 国际化3. 鉴权拦截顺序方法执行顺序preHandle -> Controll...原创 2020-10-17 17:59:05 · 1842 阅读 · 0 评论 -
开发笔记:哦豁,BOSS说单元测试覆盖率不达标?(Java)
Mock单元测试什么是单元测试单元测试是指对软件中最小的可测试单元进行检查和验证。通常单元测试只测试一个方法或者一个方法调用。一个单元测试的好处:快速定位bug,提高代码质量,通过单测理解代码放心重构。单元测试代码对于代码的重构非常重要,因为一不小心犯了错,这些小范围的测试能很快作出提醒,这样就可以放心的随时调整代码。单元测试的三部曲given-when-then三部曲Give...原创 2020-05-06 11:56:00 · 1720 阅读 · 1 评论 -
开发笔记:Nginx的故事
什么是Nginx? Nginx是一个高性能的HTTP服务器,它是一个高性能的Web和反向代理服务器由俄罗斯的程序设计师Igor Sysoev开发。Nginx在反向代理、Rewrite规则、稳定性、内存消耗等方面表现出很强的优势,选用Nginx代替传统的Apache服务器会获得很多方面的性能提升。(参考网上资料加以整理)。简而言之,Nginx是一款轻量级高性能且好用的HTTP服...原创 2020-04-25 17:35:21 · 1749 阅读 · 0 评论 -
六大设计原则之 迪米特法则 又称最少知识原则 (Least KnowledgePrinciple | LKP)
目录前言迪米特原则定义特点优点栗子不满足迪米特法则情况满足迪米特法则情况前言冥冥之中:了解越多越觉得自己不行,这谁顶得住迪米特原则定义迪米特法则(Law of Demeter)又叫作最少知识原则(Least Knowledge Principle 简写LKP),就是说一个对象应当对其他对象保持尽可能少的了解,不和陌生人说话。特点只和成员交...原创 2019-07-20 17:11:11 · 679 阅读 · 0 评论 -
六大设计原则之 单一职责原则 (Simple Responsibility Principle | SRP)
目录前言单一职责原则定义场景优点缺点实际栗子关于类关于接口前言设计原则说来简单,想遵从不容易鸭单一职责原则定义一个类应该只有一个发生变化的原因。也就是不能超过一个导致类变化的原因。该原则由罗伯特·C·马丁(Robert C. Martin)于《敏捷软件开发:原则、模式和实践》一书中给出的。(其实不只是类,接口、函数都可以使用单一职责原则)...原创 2019-07-18 18:18:04 · 536 阅读 · 0 评论 -
六大设计原则之 里氏替换原则 (Liskov Substitution Principle | LSP)
目录前言里氏替换原则定义场景特点优点栗子正例特例1特例2前言OO(Object Oriented 面向对象) 设计的六大原则:OCP(开闭原则),DIP(依赖倒置原则),ISP(接口隔离原则),LSP(里氏替换原则),SRP(单一职责原则),LKP(迪米特法则)里氏替换原则定义面向对象的基本设计原则之一,里氏替换原则中说,任何基类可以出现...原创 2019-07-18 18:11:09 · 520 阅读 · 0 评论 -
六大设计原则之 接口隔离原则 (Interface Segregation Principle | ISP)
目录前言接口隔离原则定义场景优点不同实际前言又是元气满满的一天接口隔离原则定义使用多个专门的接口比使用单一的总接口要好。(这里解释一下,总的结构就是把所有的接口都写到一个接口类里面,然后很多个实现去引用它,导致有些实现不需要实现一些接口但必须要写出来。)客户端不应该依赖它不需要的接口。一个类对另外一个类的依赖性应当是建立在最小的接口上的。(参考百科)...原创 2019-06-26 14:00:25 · 451 阅读 · 0 评论 -
六大设计原则之 依赖倒置原则 (Dependency Inversion Principle | DIP)
目录前言依赖倒置原则定义优点栗子(正例)效果分析栗子(反例:对实现编程,高层模块依赖于低层)分析前言编码五分钟,扯淡两小时依赖倒置原则定义依赖倒置原则(Dependence Inversion Principle)是程序要依赖于抽象接口,不要依赖于具体实现。高层模块不应该依赖于低层模块,高层模块和低层模块都应该依赖于其抽象。简单的说就是要求对...原创 2019-06-21 21:36:12 · 735 阅读 · 0 评论 -
六大设计原则之 开闭原则 (Open Close Principle | OCP)
目录前言开闭原则定义:场景:优点:栗子:前言兄弟们快跑,鬼子们(提需求的人)进村啦!开闭原则是面向对象设计中最基础的设计原则,它指导我们如何建立稳定灵活的系统,开闭原则只定义了对修改关闭,对扩展开放。用抽象构建架构,用实现扩展细节。开闭原则定义:一个软件中的 类/模块/函数 应该对扩展开放,对修改关闭。(开闭即针对扩展和修改两个行为的原则。)...原创 2019-06-16 23:47:06 · 513 阅读 · 0 评论 -
图文理解 JVM GC(Garbage Collection) 垃圾回收
目录前言JVM如何判断一个对象是不是垃圾?引用计数算法可达性分析法(主流判断方法)哪些元素可以为根节点?JVM堆的几种垃圾回收算法:标记清除复制标记整理JVM如何进行垃圾回收?分带垃圾回收算法Young(新生代)采用复制算法Old(老年代)采用标记清除或标记整理的方法JVM堆如何分配对象?垃圾收集器(GC)串行垃圾收集器(...原创 2019-05-28 19:26:28 · 3000 阅读 · 4 评论 -
JVM(Java虚拟机)内存结构
目录JVMJVM内部结构图运行时数据区结构(java内存模型)程序计数器 (PC Register)虚拟机栈 (JVM Stacks)本地方法栈 (Native Method Stacks)堆 (Heap)方法区 (Method Area)线程共享的堆与非堆JVMJVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种...原创 2019-05-23 01:10:31 · 474 阅读 · 1 评论 -
java获取线程的返回值
可以通过三种方法获取子线程的返回值:主线程等待法,主线程一直等待到子线程完毕返回为止:比如说子线程需要5秒才能进行赋值,主线程开启子线程后,直接输出那个值得到的是null,那么我们要让主线程一直等(sleep)到子线程执行完再去输出那个值就有了,可以获取到该值。public class Test implements Runnable{ private String flag = ...原创 2019-09-30 15:27:42 · 1064 阅读 · 0 评论