- 博客(77)
- 资源 (3)
- 收藏
- 关注
原创 【面试不用背】作为一个CRUD工程师,你必须要知道的MySQL知识
目录1 写在前面的话2 MySQL 架构设计2.1 程序是如何跟 MySQL 打交道的2.2 程序是如何跟 MySQL 打交道的图解2.3 服务端流程分析2.4 服务端流程图解3 InnoDB 架构设计3.1 设计思路3.2 图解4 MySQL 物理数据模型4.1 数据在磁盘上的存储格式4.2 null列表与数据头4.3 行溢出5 BufferPool5.1 free 链表5.1.1 概念5.1.2 缓存页 hash 表5.1.3 图解5.2 flush 链表5.2.1 概念5.2.2 图解5.3 LRU
2022-02-14 02:28:58 12455 21
原创 写给想入门单元测试的你
单元测试入门一、为什么要进行单元测试二、单元测试需要引用的jar包三、单元测试解析与技巧1、单元测试类注解解析2、常用断言3、有返回值方法的测试4、无返回值方法的测试四、单元测试小例(1)dao层的单元测试(2)service层的单元测试(3)controller层的单元测试五、其他六、附录一、为什么要进行单元测试首先我们来看一下标准的软件开发流程是什么样的从图中我们可以看到,单元测试作为开发流程中的重要一环,其实是保证代码健壮性的重要一环,但是因为各种各样的原因,在日常开发中,我们往往不重视这一步
2022-02-03 21:38:37 781
原创 JVM从入门到坚持
楔子在生产开发中,20%的 JAVA 知识,就能完成 80%的工作。但是区分高手与新手的差异往往就在那 20%,JVM 就属于这 20%的知识,本篇文章准备和大家分享 JVM 入门的相关知识,可以理解为简单的导论。从 hello world 的运行开讲学习一门新语言一般都是从简单的 hello world 开始,所以,咱们先准备一个 HelloWorld.java 的文件。class HelloWorld { public static void main(String[] args) {
2022-01-24 13:14:13 661
原创 设计模式Java实现-迭代器模式
迭代器模式遵循开闭原则,对扩展开放,对修改封闭。当需要增加新的遍历方式时,只需添加新的具体迭代器类,无需修改现有代码。每个类只关注一项任务,也符合单一职责原则。面对对象面对君,不负代码不负卿。
2024-05-13 23:04:38 1162
原创 设计模式Java实现-原型模式
原型模式的原理和实现都是比较简单的,主要是需要理解浅拷贝和深拷贝的原理。有机会还是要用在项目中,多实践才能掌握得更好。面对对象面对君,不负代码不负卿。
2024-05-06 22:32:19 590
原创 设计模式Java实现-建造者模式
每次new这个实体的时候,都会调用大量的set方法,关键是这100个字段基本不会变,但是他们的组合却经常变,弄得开发的小伙伴们苦不堪言,于是前辈们就重载了很多的构造方法,结果构造方法也爆炸了,导致新来的后浪们差点直接被拍死在了沙滩上。==========链式调用-建造者模式开始====================链式调用-建造者模式开始====================标准建造者模式开始====================标准建造者模式结束==========
2024-05-06 22:15:48 1368 2
原创 设计模式Java实现-工厂模式
本文从模拟需求开始,带着读者一起学习了工厂模式,从上文可知工厂模式其实非常简单,掌握三大实现要点就可以了。所以小七在工作中使用工厂模式的频率也非常的高,但是工厂模式一般是不会单独使用的,他的好伙伴有策略模式、单例模式、模版模式等等,后面小七都会讲到。本文由博客一文多发平台OpenWrite发布!
2024-05-06 21:39:37 993 1
原创 不会吧,都2023年了你还不会JavaStream?
本文主要介绍了Java Stream的一些基本概念和常见使用例子。方便新手学习,和老手查找巩固。
2023-09-15 13:03:37 187
原创 不会吧,都2023年了你还不会Lamda表达式?
Lambda表达式是一种匿名函数,它允许我们将函数作为参数传递给其他函数或者作为返回值使用。在Java中,它是Java 8引入的一个新特性。Lambda表达式通常用于实现函数式接口,例如Runnable、Callable、Comparator等接口。函数式接口是Java 8引入的一个新特性,它允许我们使用Lambda表达式来简化代码。函数式接口是只有一个抽象方法的接口,可以使用Lambda表达式来实现该接口的方法。注:@FunctionalInterface注解仅是标注作用,可以不写。
2023-09-15 10:38:15 181
原创 【Spring源码解析】一文读懂Spring注入模型:开发者必备知识
首先我们要明确,注入模型和注入Bean的方式不能混为一谈。从Spring的官网我们可以知道,Spring注入bean的方式有两种,一种是通过构造方法进行注入,另外一种是通过setter方法进行注入。说简单一点就是注入Bean的方式是一种注入bean的策略,而注入模型是Bean的一种属性(其实是BeanDefinition的属性),他会影响bean的一些行为。
2023-09-13 17:46:22 171
原创 【架构思想】告别繁琐的多选值存储,MySQL位运算带你飞!
工作中经常遇到多选值存储问题,比如某个配置项是星期一到星期天的任意组合。再比如用户修改密码的方式有邮箱验证、手机短信验证、回答密保问题等等,一个用户有可能只开启了其中某几种方式。如果数据范围有限,且变更不频繁的场景,可以考虑使用位与运算解决多选值存储的问题。
2023-09-12 17:15:14 844
原创 手把手带你理解Spring日志原理
✨这里是第七人格的博客✨小七,欢迎您的到来~✨🍅系列专栏:【Spring源码解析】🍅✈️本篇内容: Spring日志原理✈️🍱本篇收录完整代码地址:https://gitee.com/diqirenge/spring-book/tree/master/spring-log🍱。
2023-04-18 00:04:10 1131 1
原创 【工作小札】利用动态数据源实现Sass的一种思路(内含完整代码示例)
✨这里是第七人格的博客✨小七,欢迎您的到来~✨🍅系列专栏:【工作小札】🍅✈️本篇内容: 利用动态数据源实现Sass化✈️🍱。
2023-04-13 16:38:35 2643
原创 【开发工程师的运维小知识】docker安装gitlab
✨这里是第七人格的博客✨小七,欢迎您的到来~✨🍅系列专栏:【开发工程师的运维小知识】🍅✈️本篇内容: docker安装gitlab✈️🍱本篇收录完整代码地址:无🍱。
2023-04-05 01:09:03 636
原创 【开发工程师的运维小知识】 linux安装jdk
✨这里是第七人格的博客✨小七,欢迎您的到来~✨🍅系列专栏:【开发工程师的运维小知识】🍅✈️本篇内容: linux安装jdk✈️🍱本篇收录完整代码地址:无🍱。
2023-04-04 23:48:20 86
原创 【开发工程师的运维小知识】docker安装nacos
✨这里是第七人格的博客✨小七,欢迎您的到来~✨🍅系列专栏:【开发工程师的运维小知识】🍅✈️本篇内容: docker安装nacos✈️🍱本篇收录完整代码地址:无🍱。
2023-04-04 20:01:58 277
原创 【工作小札】自定义classloader实现热加载jar
我们这里定义,需要加载的jar的结构和maven打包出来的jar一致。我们编写一个测试jar如下:执行package命令获取jar包:sheep-web-demo-custom-classloader-jar-1.0-SNAPSHOT.jar/*** 自定义jar/*** jar文件/*** 源路径} }
2023-04-03 11:38:05 2720
原创 【工作小札】apache-dubob泛化调用小例
小七最近在开发网关应用,因为下层业务系统之间都是dubbo协议通信,不再提供http接口,所以考虑在网关层需要做一下协议转换,即http转dubbo。参考dubbo官网,发现dubbo提供了泛化调用来解决这个场景的问题。因为小七公司已经从对接规范上,杜绝了多参数调用的情况,所有这里小七就只列举几种常见的单参数调用例子。{“data”:{“name”:“第七人格”,“id”:“1”,“class”:“xxxx”}}因为泛型存在类型擦除的情况,所以我们在进行泛化调用的时候,需要申明泛型类型。
2023-03-31 11:23:20 1728
原创 参考@NotBlank实现自定义注解校验器
最近小七在做接口对接的时候,发现某些接口的同一个字段,可能需要做相同的校验。比如,在用户的注册和更新接口都需要判断用户的证件类型是否合法,许多小伙伴们的做法就是直接在代码里写if-else,这种在屎山拉屎的行为,小七实在是难以接收,想着看看能不能在上面雕雕花。
2022-12-09 22:59:24 2366
原创 每天一道算法题——队列基础
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。说人话就是,队列是一种特殊的链表或者数组,就像排队买票,先来的先买,后来的后买,不允许插队,所以只有最早进入队列的元素才能最先从队列中删除,故队列又称为先进先出(FIFO—first in first out)线性表。底层结构为数组,所以我们需要定义一个数组来存储数据。往数组里面放数据,我们需要一个大小的属性。
2022-10-24 12:09:59 1384 1
原创 每天一道算法题——栈基础
栈(Stack)又名堆栈,它是一种基于先进后出(FILO-First In Last Out)且运算受限的线性表。说人话就是,栈是一种特殊的链表或者数组,就像咱们叠碗一样,放的时候是一个一个往下放,拿的时候是从上往下一个个拿,也就是说我们仅仅只能操作表尾的数据。底层结构为数组,所以我们需要定义一个数组来存储数据。往数组里面放数据,我们需要一个大小的属性。大小为0,则表示栈为空直接往数组里面添加数据栈的大小增加1数据大小减少1栈顶数据置为0。
2022-10-11 02:27:36 803
原创 每天一道算法题——链表基础
链表通过指针将一组零散的内存块串联在一起。其中,我们把内存块称为链表的“结点”。为了将所有的结点串起来,每个链表的结点除了存储数据之外,还需要记录链上的下一个结点的地址。结点除了在·下一个结点的地址我们的单向链表只需要最简单的2个元素,头和大小即可初始新化节点新节点的下一个节点的地址 赋值为 原本head的地址新的节点成为head获取当前指定位置的节点保证不断链(1)新加的点指向后(2)把当前的点指向新加的点把head的点指向head的下一个点获取当前指定位置的节点保证不断链。
2022-10-09 22:30:25 732
原创 每天一道算法题——数组基础
数组(Array)是有序的元素序列。若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。用于区分数组的各个元素的数字编号称为下标。数组是在程序设计中,为了处理方便, 把具有相同类型的若干元素按有序的形式组织起来的一种形式。这些有序排列的同类数据元素的集合称为数组。
2022-09-30 00:30:37 607
原创 工作流实战之Activiti7
本文主要介绍了 Activiti 的相关使用与集成,适合想要学习 Activiti 的读者食用。Activiti 是目前使用最为广泛的开源工作流引擎之一,在小七 2017 年走向程序员这一条不归路的时候,它就已经是开源工作流引擎的老大哥了。学习一门新技术/新框架,我们第一件事就是从它的官网入手,下面贴出 Activiti 的官网从官网的描述,我们可以知道 Activiti 是领先的轻量级的、以 java 为中心的开源 BPMN 引擎,可以支持现实世界的流程自动化需求。 Activiti Cloud 是新一代
2022-08-17 01:44:26 6234 2
原创 【源码】LinkedList源码学习笔记
楔子上一次,小七和大家一起学习了ArrayList源码,今天再和大家一起分享下LinkedList的源码。基本数据结构LinkedList顾名思义,linked链表,他也就是基于链表实现的,而且是双向链表。所以他具有双向链表的优缺点。缺点不太适合在随机的位置,获取某个随机的位置的元素,比如LinkedList.get(10),这种操作,性能就很低,因为他需要遍历这个链表,从头开始遍历这个链表,直到找到index = 10的这个元素为止。优点非常适合各种元素频繁的插入里面去,因为不断的把新的节点
2022-03-13 08:46:37 402
原创 【源码】ArrayList源码学习笔记
目录楔子一、基本数据结构1、缺点2、优点二、核心方法的原理0、基础构造方法1、add方法源码2、set方法源码3、get方法源码4、remove方法源码楔子对于Java开发者来说,不管是初级、中级,还是高级,一定都曾经被问道Java集合包里的东西,而ArrayList作为集合包中重要的一员,出现的频率也非常高,今天小七就从源码的角度,重新分析学习下ArrayList。一、基本数据结构ArrayList顾名思义,array就是数组的意思。在java中的数组,都是定长数组,所以ArrayList会有定长
2022-03-12 17:19:20 1030
原创 【源码】HashMap源码学习笔记
目录楔子基本数据结构核心成员变量解析hash算法从put看JDK优化后的hash算法hash寻址算法hash冲突hash冲突时的链表处理hash冲突时的红黑树优化扩容与rehash算法楔子HashMap作为Java集合里重要的一环,不仅在生产中有着超高频率的使用,在面试中更是被经常问起,所以学习Hash的源码对Java开发人员来说是很有必要的。基本数据结构JDK 1.8以后,hashmap的数据结构是,数组 + 链表 + 红黑树。核心成员变量解析/** * The default init
2022-03-03 10:50:46 690 5
原创 常用唯一ID生成方案分析(从单机到分布式)
本文主要对常见的几种唯一ID生成方案做了分析,包括UUID、业务规则生成、数据库生成、Redis生成、雪花算法及其开源框架实现。
2022-03-02 00:49:01 3309 8
原创 ShenYu网关数据同步源码分析
目录admin数据同步从SelectorController讲起发布事件ConfigGroupEnumDataEventTypeEnumDataChangedEventDispatcher配置解析gateway数据同步ShenyuWebsocketClientWebsocketDataHandlerAbstractDataHandlerCommonPluginDataSubscriberBaseDataCache配置解析验证猜想增量数据同步全量数据同步总结当在后台管理系统中,数据发生了更新后,如何将更新的
2022-02-08 11:50:47 1125
原创 手把手教你如何下载编译Spring源码
目录楔子Spring 源码下载github 下载gitee 下载将项目导入开发工具选择版本为 5.2.x修改 IDEA 中 Gradle 配置如下确认IDEA中的Kotlin是否生效添加阿里云镜像Reload项目耐心等待编译完成新建Gradle模块楔子学习 Spring 源码有两种方式,一种是直接引入 Spring 依赖,读静态源码或者调试;一种是自己编译 Spring 源码。小七觉得如果想要更好的理解 Spring 源码,自己编译 Spring 源码是很有必要的,一方面我们可以修改源码,方便调试验证我
2022-02-04 20:29:04 14156 7
原创 一年工作经验的我,居然被问到了CAS
楔子前一篇文章,我们介绍了 synchronized,知道了 synchronized 可以解决某些数据的原子性问题,本篇文章我们以 AtomicInteger 为切入点,继续学习 CAS 无锁化的知识。使用 synchronized 解决 i++的原子性使用 synchronized 关键字,保证数据原子性public class Test { static int synchronizedValue = 0; public static void main(String[]
2022-01-24 12:48:17 337
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人