自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(26)
  • 收藏
  • 关注

转载 三层架构到DDD四层架构演进

专业的事情就该让专业的人干,既然业务逻辑是跟具体的业务场景相关的,想办法把业务逻辑提取出来,形成一个模型,让这个模型的对象去执行具体的业务逻辑。其实,不管是经典四层架构、还是六边形架构,亦或者整洁架构,都是对系统应用的描述,也许描述的侧重点不一样,但是描述的是同一个事物。最后,数据模型的 Class 或者属性字段上,通常带有 ORM 框架的一些注解,跟DAO层联系非常紧密,可以认为数据模型就是DAO层拿来查询或者持久化数据的,数据模型脱离了DAO层,意义不大。三层架构,为什么还画了一层 Model 呢?

2023-08-17 16:49:19 232

原创 Redis-all

最常见的使用方法, 无返回值, 默认30秒释放锁 internalLockLeaseTime, 但是实际业务处理睡50秒, 50秒后执行完才释放(因为有看门狗续期, 具体内容看后面内容)",就是redis key存在, hash ksy不存在的场景, 说明加锁的不是当前线程, 返回当前锁的剩余时间。缓存穿透是指缓存和数据库中都不存在的数据, 比如id=-1或者特别大不存在的数据, 攻击请求会导致数据库压力大;接口层增加校验,如用户鉴权校验,id做基础校验,id

2023-08-15 21:07:50 28

转载 二叉搜索树 BST

文章目录一、判断 BST 的合法性二、在 BST 中搜索一个数三、在 BST 中插入一个数四、在 BST 中删除一个数最后总结原文:https://mp.weixin.qq.com/s?__biz=MzAxODQxMDM0Mw==&mid=2247488128&idx=2&sn=b8fb3fd2917f9ac86127054741cd5877&chksm=9bd7ec88aca0659ee0185b657663169169493e9df2063fa4d28b38a0b4d

2021-03-30 17:43:53 171

原创 synchronized、volatile底层原理详解

文章目录一、synchronized1、监视器Monitormonitor结构及原理监视器Monitor有两种同步方式:互斥与协作2、Mutex lockmutex的工作方式3、java对象头java对象布局4、无锁、偏向锁、轻量级锁、重量级锁5、偏向锁获取偏向锁过程撤销偏向锁的过程关闭偏向锁6、轻量级锁Lock Record结构:轻量级锁的解锁过程:为什么升级为轻量锁时要把对象头里的Mark Word复制到线程栈的锁记录中呢?为什么会尝试CAS不成功以及什么情况下会不成功?7、重量级锁8 、偏向锁、轻量级

2021-03-17 14:36:36 817

原创 java中的transient关键字

文章目录transient简介使用序列化为什么要用transient关键字?transient的作用transient使用总结使用场景Exteranlizable接口实现序列化原文:https://blog.csdn.net/u012723673/article/details/80699029transient简介使用transient, 短暂的意思, 对于transient修饰的成员变量, 在类的实例对象进行序列化的时候不会进行序列化, 声明周期仅存于调用的内存中, 而不会序列化到磁盘或者网络i

2021-03-13 17:42:18 189 1

原创 HashMap源码详解(1.8)

文章目录HashMap1.8中的HashMap详解属性构造函数hash算法寻址算法: (n-1) & hashput操作扩容(resize)方法转化为红黑树(treeifyBin)static class NodeHashMap1.8中的HashMap详解属性/*** The smallest table capacity for which bins may be treeified.* (Otherwise the table is resized if too many nodes

2021-03-12 16:06:44 138

原创 jsp页面整合ECharts绘制图表(以折线图为例)

文章目录jsp页面整合ECharts绘制折线图先看效果图前端代码后端测试代码jsp页面整合ECharts绘制折线图官网: https://echarts.apache.org/zh/index.html官网上有demo可以直接调试样式。话不多说, 直接上代码, 因为好久没写过jsp页面, 语法、用法啥的可能都比较糙, 主要参考整合ECharts的js代码部分, 我是为了方便调试, js直接放在了jsp页面中。先看效果图这个是下面 interval: 1 时的显示样式, x轴数据太多的话可以跳几

2021-03-09 11:03:41 2061

转载 NIO基础

转自: https://www.cnblogs.com/zhanglei93/p/6653923.htmlJava NIO以前写过一篇Java Socket的用法,不过觉得介绍的不够细致也不够全面,因此今天想在细谈一下Java NIO,也算是对上一篇博客的补充吧。在以前的博客中提到Java NIO的三个核心部分Buffers、Channels、Selectors,这里不再赘述三者之间的关系,接下来我们重点看看这三个核心部分。Buffer该区域本质是一块可以读写的数据的内存区,这组内存区被包装成N

2021-03-03 14:38:30 88 1

转载 Socket以及NioSocket

转自: https://www.cnblogs.com/zhanglei93/p/6217384.htmlJava中的Socket的用法Java中的Socket分为普通的Socket和NioSocket。普通Socket的用法Java中的网络通信时通过Socket实现的,Socket分为ServerSocket和Socket两大类,ServerSocket用于服务器端,可以通过accept方法监听请求,监听请求后返回Socket,Socket用于完成具体数据传输,客户端也可以使用Socket发起请

2021-03-03 14:37:17 157 1

原创 spring源码构建

文章目录版本安装gradle配置环境变量配置gradle默认镜像验证预编译spring1、打开build.gradle文件2、打开settings.gradle文件3、执行预编译导入idea1、导入2、修改idea中gradle配置3、configure build4、开始构建测试程序参考版本spring : spring-framework-5.2.12.RELEASEgradle: gradle-5.6.4-bin.zip这个gradle版本是通过源码确定的, 源码下载解压, 源码->g

2021-01-30 17:15:45 368

原创 使用easy poi注解实现二级表头

文章目录一、使用easy poi注解实现二级表头效果二、实现1、依赖2、实体bean3、生成导出4、问题5、使用ExcelExportEntity实现动态表头传值一、使用easy poi注解实现二级表头效果使用注解写的话easy poi 貌似最多只能实现二级表头, 更多级需求用easy poi的模板, 或者用阿里的easy excel; 下面是注解实现下图效果代码。官网: http://easypoi.mydoc.io/#category_41961二、实现1、依赖<!-- spring

2020-12-14 20:27:43 2988

原创 mybatis-plus配置多数据源

文章目录引入依赖使用注意引入依赖<!--基于springboot的快速集成多数据源的启动器--><dependency> <groupId>com.baomidou</groupId> <artifactId>dynamic-datasource-spring-boot-starter</artifactId> <version>3.1.0</version></depend

2020-12-05 10:53:23 685

原创 springboot前后端分离项目配置跨域、拦截器(同时生效)

使用WebMvcConfigurer接口配置拦截器, 跨域请求会失效, 好像是拦截放行后不会带有跨域信息, 导致失败。下面两个配置可以同时生效。跨域配置:@Configuration@EnableWebMvcpublic class CorsConfig implements WebMvcConfigurer { @Bean public FilterRegistrationBean someFilterRegistration1() { //新建过滤器注册类

2020-11-27 19:48:37 1163

原创 java失败重试策略

本篇涉及技术栈动态代理设计模式AOP 自定义注解Spring-retryguava-retrying参考资料主要参考: https://blog.csdn.net/MarkerHub/article/details/106726694?utm_medium=distribute.pc_relevant.none-task-blog-title-4&spm=1001.2101.3001.4242主要参考: https://www.cnblogs.com/mfrank/p/11336770

2020-11-27 16:08:32 1305

原创 mybatis-plus代码生成器、物理分页、动态表名、逻辑删除、自动填充等功能实现

文章目录开篇代码生成器1、依赖2、配置3、生成的代码物理分页逻辑分页物理分页对比适用场景mybatis-plus物理分页插件示例代码动态表名配置逻辑删除配置自动填充mp实现其他使用开篇上一篇记录了mybatis-plus入门简单使用, 这一篇记录mybatis-plus代码生成器、动态表名、逻辑删除、自动填充、物理分页等高级功能在实际项目中的使用。初始依赖下面没有写, 在第一篇的基础上进行。(下述配置大部分都是根据官网来的, 依赖版本也是官网copy的, 但是可能由于官网未更新, 有一些过时的类, 但是

2020-11-26 17:02:39 957

原创 mybatis-plus入门简单使用

官网https://baomidou.com/特性无侵入: 只做增强不做改变性能损耗小: 启动后自动注入基本crud, 性能基本无损耗, 直接面向对象操作强大CRUD操作: 内置通用mapper、通用service, 少量配置即可实现单表crud操作支持lambda形式调用支持主键自动生成支持 ActiveRecord 模式支持自定义全局通用操作内置代码生成器: 采用代码或maven插件可快速生成Mapper、Model、Service、Controller层代码, 支持模板引擎内

2020-11-26 15:26:21 161

原创 spring boot项目引入第三方jar包或本地jar包

spring boot项目引入第三方jar包或本地jar包在src同级目录添加lib文件夹, 将jar包放入lib文件夹下, 如图:在pom.xml中添加依赖, 如下: (到此为止可以本地运行, 但是maven打包不会打到BOOT-INF/lib下, 所以只能本地使用)<!-- groupid、artifactId、version随便写的, scope要写system, 最后面是路径--><dependency> <groupId>com.ss

2020-11-20 19:25:37 213

转载 一致性哈希算法的原理与实现

作者:王克锋出处:https://kefeng.wang/2018/08/10/consistent-hashing/分布式系统中对象与节点的映射关系,传统方案是使用对象的哈希值,对节点个数取模,再映射到相应编号的节点,这种方案在节点个数变动时,绝大多数对象的映射关系会失效而需要迁移;而一致性哈希算法中,当节点个数变动时,映射关系失效的对象非常少,迁移成本也非常小。本文总结了一致性哈希的算法原理和Java实现,并列举了其应用。1 概述1.1 传统哈希(硬哈希)分布式系统中,假设有 n 个.

2020-11-16 11:31:40 148

原创 单例模式(饿汉式、懒汉式、DCL单例、静态内部类单例、枚举单例)

文章目录一、用途二、单例四大原则三、几种实现方式1、饿汉式2、DCL单例3、静态内部类单例4、枚举单例1) effective java 书中推荐使用的单例模式;2) 不会受到反序列化、反射的破坏;3) 枚举编译后是一个继承自java.lang.Enum的final类, 单例是类中的static final实例;四、单例模式存在的问题五、重新理解单例六、参考一、用途一个类只允许创建一个对象, 主要用于无状态工具类、全局配置信息等。二、单例四大原则构造私有以静态方法或者枚举返回实例确保实例只有一

2020-11-14 11:03:27 241

原创 在java se项目中使用log4j

文章目录一、引入jar包二、添加配置文件三、日志不生效一、引入jar包官方下载地址: http://logging.apache.org/log4j/1.2/download.html在src同级目录下, 创建lib文件夹, 将下载好的jar包放入(注意: jar是上面下载后解压后找的,不是直接下载的文件)将jar包添加到依赖中, idea可以右键jar包, 点击Add as library, 如图:二、添加配置文件在src同级目录下添加 log4j.properties 配置文件### 设

2020-11-13 23:10:11 317

原创 Spring定时任务框架(静态、动态SchedulingConfigurer)

静态定时任务cron表达式cron=“0/25 * * * * ?”定时任务时间段内执行不完直接跳过下次任务,下例: 25秒,50秒,0秒执行, 注意0秒也执行固定间隔fixedDelay = 1000 * 10固定间隔执行, 定时任务时间段内执行不完, 下次定时任务在上次执行结束fixedDelay时间后开始执行, 下例: 假如11秒执行,23秒结束,下次33秒开始执行固定频率fixedRate = 1000 * 10固定频率, 如果任务执行时间超过频率大小, 下次任务直接在上次执行完就

2020-11-12 00:16:36 1114

原创 二叉堆、堆排序、优先级队列

文章目录一、二叉堆1.最大堆2.最小堆3.二叉堆相关操作1) 插入节点2) 删除节点3) 构建二叉堆二、堆排序1、代码实现2、复杂度分析1) 空间复杂度2) 时间复杂度3) 对比快排三、参考资料堆排序 用代码来实现优先级队列一、二叉堆二叉堆本质上是一棵完全二叉树, 分为最大堆和最小堆两种; 二叉堆的根节点叫做堆顶。二叉堆本质虽然是完全二叉树, 但是地层没有实现链表(链式存储)实现, 而是使用**数组(顺序存储)**实现。根据二叉树的性质, 假设父节点的索引为i, 则左孩子所以为2i+1, 右孩子索引

2020-11-11 00:29:53 169

原创 迁移SVN代码到gitlab库保留提交记录(可以指定分支等)

文章目录迁移说明迁移SVN代码到git库方法步骤命令说明迁移说明公司有一些老的项目在svn上面, svn上的代码版本、分支都不好处理, 所以也都迁移到了gitlab上面, 但是为了保留之前svn上的提交记录, 不能直接克隆下来svn代码创建本地仓库提交到git, 下面步骤本人已经使用了很多次, 可以放心食用。迁移SVN代码到git库方法步骤在本地工作空间下打开git bashgit svn clone svn地址 本地指定工程名(该步骤第一次操作可能会有个sshKey的页面, 直接回车或者点击o

2020-11-09 11:22:35 522

原创 分治思想实现归并排序

文章目录写在最前概念归并思路实现方式(两种)1、自上向下的递归实现, 采用的分治的思想代码实现时间复杂度空间复杂度2、自底向上方法, 也就是常说的二路归并总结参考写在最前本文用来记录自己的工作、学习遇到的问题, 好记性不如烂笔头, 起的更多的是笔记的作用, 由于本人表达能力、技术水平有限, 本文仅起参考作用, 一切以您实际code为准, 给您带来的不便敬请谅解; 如果发现哪里理解不对或者有问题的地方, 欢迎批评指正. 也欢迎添加我的微信一起讨论交流.微: ClearZeroX概念归并排序是指将两个(

2020-11-03 17:24:19 762

原创 挖坑法、指针交换法实现快速排序

文章目录写在最前快速排序时间复杂度挖坑法实现指针交换法实现(双边指针)指针交换法实现(单边指针)指针交换法(双边)(使用栈实现)参考资料写在最前本文用来记录自己的工作、学习遇到的问题, 好记性不如烂笔头, 起的更多的是笔记的作用, 由于本人表达能力、技术水平有限, 本文仅起参考作用, 一切以您实际code为准, 给您带来的不便敬请谅解; 如果发现哪里理解不对或者有问题的地方, 欢迎批评指正. 也欢迎添加我的微信一起讨论交流.微: ClearZeroX快速排序同冒泡排序一样, 快速排序也是交换排序,

2020-10-31 11:34:00 307

原创 冒泡排序基本实现及逐步优化

写在最前本文用来记录自己的工作、学习遇到的问题, 由于本人表达能力、技术水平有限, 本文仅起参考作用, 一切以您实际code为准, 给您带来的不便敬请谅解; 如果发现哪里理解不对或者有问题的地方, 欢迎批评指正. 也欢迎添加我的微信一起讨论交流.微: ClearZeroX冒泡排序每一轮比较都能确定这轮的最大数简单实现public class BubbleSort{ public void sort(int[] arr){ for(int i = 0; i < arr

2020-10-30 11:29:19 151 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除