- 博客(876)
- 资源 (203)
- 收藏
- 关注

转载 基于Groovy的规则脚本引擎实战
前言因为之前在项目中使用了Groovy对业务进行一些抽象,效果比较好,过程中也踩了一些坑,所以简单记录分享一下自己如何一步一步实现的,在这里你可以了解:1、为什么选用groovy作为规则脚本引擎2、了解Groovy的基本原理和Java如何集成3、分析Groovy与java集成的一些问题和坑4、在项目中使用时做了哪些性能优化5、实际使用时需考虑的一些tips规则脚本可解决的问题互联网时代随着业务的飞速发展,迭代和产品接入的速度越来越快,需要一些灵活的配置。办法通常有如下几个方面
2021-11-27 21:54:07
852
1

转载 如何经营 职业生涯
人和人的差距,到底是什么时候被渐渐拉开几倍、十几倍、乃至几十倍、立方倍的?起跑的时候,大家其实都差不多。名校硕士,和普校大专,第一份工作的起薪,相差不过几千块。跑着跑着,5年一回头,10年一回头,没准你就在给当年你看不上的同学打工。我身边就有这样的事。时隔20年,好几个初中同学,在另一个初中同学开的公司里打工。这一点都不耻辱。识时务者为俊杰。这哥们已经开始二次创业,第一次创业把...
2018-12-20 22:25:18
599

转载 如何经营好30岁到35岁?这是我看过最好的职业建议文章
我们的身边现在存在着两类人:一类是充满着慌乱、焦虑的人。一类是“任世事变迁,我自岿然不动”而在对比后你会发现,这两者最大的区别就是:实力不同。 实力不同,自然自信心也就不同。比如说有人压根不敢辞职,问了问原因大多都是:“我怕我辞职了找不到更好的,还不如在这耗着。”而另一拨人是老板想方设法的留住他,因为他有价值,只要出了公司的门,多的是好公司来请他过去。后来我才知...
2018-12-14 23:05:37
5566

原创 Java高并发处理总结
自己参考大牛博客及视频写了一些关于并发的感悟,高并发的处理思路,无外乎以下几种1 代码层面: 锁优化措施(见本文内容)、尽量简化事务和减少事务2 应用层面:缓存 队列 限流 熔断 3数据库层面: 分库分表 读写分离JDK常见并发包处理工具中,ReentrantLock、countdownlanth、currenthasp、AQS源码一定要多读多看,理解里面的设计精髓。带着问题去思考...
2018-09-07 21:03:20
17186

转载 高可用+高并发+负载均衡架构设计
原创2017-09-05 58沈剑 架构师之路 架构师之路架构师之路微信号 road5858 功能介绍 架构师之路,坚持撰写接地气的架构文章 前篇:《无限容量数据库架构设计》《MQ消息可达性+幂等性+延时性架构设计》都收到网友好评:系统性,全局性看问题体会更深刻简单易懂本
2017-12-09 08:57:03
1005
转载 CompletableFuture实现多线程异步任务编排实战
在Java 8中, 新增加了一个包含50个方法左右的类: CompletableFuture,提供了非常强大的Future的扩展功能,可以帮助我们简化异步编程的复杂性,提供了函数式编程的能力,可以通过回调的方式处理计算结果,并且提供了转换和组合CompletableFuture的方法。「thenAcceptBothAsync:任务01 任务02都完成了,再开始执行任务3,能感知到任务1、2的结果,但没返回值」「任务01 任务02都完成了,再开始执行任务3,不感知任务1、2的结果的,也没返回值」
2023-03-12 11:41:49
18
转载 方法入参很复杂,每次调用都要构造BO入参?一招教你自动构造入参
(被多处调用)我们通常会封装成一个方法,那这个方法入参正常来说都不会少,(在开发规范中,经常会看到一条"方法入参正常不超过3个”。如下图,假设现在有三个逻辑需要去调用这个方法,我们是不是都需要去build入参呀,这也是很多小伙伴会选择的调用方式。那么就有工匠精神的码农看不惯红框内的代码的(怎么看都是重复代码),每次调用方法都去build入参,太麻烦了!在面对各种各样的开发场景,我们要多思考,多沉淀,才可以让自己的代码更优雅,更好扩展。光说光看,还不如来个实操理解快呢,早知道会这么想,接下来,上代码!
2023-03-12 11:12:56
21
转载 消息链路拆分最佳实践:钉钉审批异步链路重构【总结】
在一个审批单的生命周期中会有很多种类的消息发出,比如审批单发起,审批单结束,审批任务生成,审批任务完成,审批抄送等等,我们可以将这些将这些消息的处理逻辑聚合到一个业务处理器中,只需要实现这个接口的 onXxx 方法,就能将逻辑嵌入整个审批的生命周期中。以钉钉审批为例,为了优化产品体验,在审批单发起后,还要消费审批单发起消息,异步做一系列的事情,比如发消息通知,同步搜索引擎,更新提示红点等等,这些功能随着产品迭代只会越叠越多,最后成为一个同时做十几件事情的 “大泥球” 消费者。
2023-03-12 10:24:04
411
转载 Vue3.2语法糖使用总结
在Vue2时期,组件里定义的各类变量、方法、计算属性等是分别存放到data、methods、computed等选项里,这样编写的代码不便于后期的查阅,查找一个业务逻辑需要在各个选项来回切换。
2023-03-11 09:23:22
45
转载 ES6中的箭头函数详细梳理
箭头函数的this在定义的时候就确定了,继承fn2的执行环境中的this,fn2的this指向被call方法改变绑定到obj这个对象。箭头函数继承定义它的执行环境的this,指向window对象,指向全局变量,输出Global。箭头函数没有自己的this指向,它会捕获自己定义所处的外层执行环境,并且继承这个this值。2.2 箭头函数不会创建自己的this,如果存在外层第一个普通函数,在定义的时候会继承它的this。(6)箭头函数的this指向外一层的普通函数,使用argument继承该普通函数。
2023-03-11 09:20:13
30
转载 你必须知道的Docker数据卷(Volume)
可以看到,我们通过Bind Mounts的方式将宿主机上的/XiLife/consul/data/server1目录挂载到了容器的/consul/data目录下,还将/XiLife/consul/conf/server1目录挂载到了容器的/consul/config目录下,而容器下的两个目录/consul/data和/consul/config则是我们指定的存放agent数据和配置文件的地方。在容器里边的改动,我们可以在宿主机里感知,而在宿主机里面的改动,在容器里边可以感知到。
2023-02-26 18:09:56
91
转载 谁再问我docker,我就把这篇甩给他
而Docker容器则是通过隔离(namesapce)的方式,将文件系统、进程、设备、网络等资源进行隔离,再对权限、CPU资源等进行控制(cgroup),最终让容器之间互不影响,容器无法影响宿主机。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口.此时容器不再拥有隔离的、独立的网络栈。通过镜像启动一个容器,一个镜像是一个可执行的包,其中包括运行应用程序所需要的所有内容包含代码,运行时间,库、环境变量、和配置文件。数据卷容器是一个普通的容器,专门提供数据卷给其他容器挂载使用。
2023-02-26 16:37:42
82
转载 Docker下安装Tomcat总结及遇到的坑
最简单的方式是在启动docker时增加--net=host选项,这样容器就和宿主机共用网络,容器中的app也就能访问MySQL了。ls 查看文件夹内容,可以发现下面有webapps文件夹和webapps.dist文件夹,将webapps.dist下的内容全部复制到webapps中。拉取docker pull 镜像名:tag:tag是可选的,tag表示标签,多为软件的版本,默认 是latest。‐p: 将主机的端口映射到容器的一个端口 主机端口:容器内部的端口。
2023-02-26 16:30:28
36
转载 Docker下载Tomcat镜像并运行Tomcat容器
本文仅仅是让你对Docker的使用有个初步的了解和认识,Docker本身是一个庞大而系统的自动化部署平台,上手很容器,但是要想学好,还有很长的路要走,后面要逐步接触一些容器编排工具,目前最流行的是K8s。本讲是从Docker系列讲解课程,单独抽离出来的一个小节,重点介绍:Docker命令的使用,浏览本文之前,建议你先了Docker核心命令的使用,本篇为实战篇!#docker rmi -f tomcat:8.5.46-jdk8-openjdk 强制移除(不要在生产环境用,应先用rm命令移除容器再移除镜像)
2023-02-26 16:00:48
102
转载 接了个变态需求:给定一个接口,要用户自定义动态实现并上传热部署,怎么搞?
如果用户上传的jar包含了spring的上下文,那么就需要扫描jar包里的所有需要注入spring容器的bean,注册到当前系统的spring容器中。接下来系统要把上传的jar包加载到当前线程的类加载器中,然后通过完整类名,加载得到该实现的Class对象。近期开发系统过程中遇到的一个需求,系统给定一个接口,用户可以自定义开发该接口的实现,并将实现打成jar包,上传到系统中。考虑到用户实现接口的两种方式,使用spring上下文管理的方式,或者不依赖spring管理的方式,这里称它们为注解方式和反射方式。
2023-02-26 15:40:19
25
转载 高并发下如何避免产生重复数据
如果你对重复数据衍生出的幂等性问题感兴趣的话,可以看看我的另一篇文章《高并发下如何保证接口的幂等性?》,里面有非常详细的介绍。
2023-02-26 10:04:23
37
转载 聊Spring事务,当场吐槽我懂的太浅没研究过底层
一个Bean在执行Bean的创建生命周期时,会经过InfrastructureAdvisorAutoProxyCreator的初始化后的方法,会判断当前Bean对象是否和BeanFactoryTransactionAttributeSourceAdvisor匹配,匹配逻辑为判断该Bean的类上是否存在@Transactional注解,或者类中的某个方法上是否存在@Transactional注解,如果存在则表示该Bean需要进行动态代理产生一个代理对象作为Bean对象。
2023-02-25 23:02:03
15
转载 【PostgreSql】解决postgresql设置fetchsize也无法流查询的思路及方案
然后排查发现,获取数据是全部获取了,那肯定会内存溢出了。1.4 但是又开始迷惑了,因为在我们的导出系统中,如果是大数据导出的话,会设置fetchSize设置游标查询获取数据,此时是不会获取全部数据在内存中的,如果全部数据都在内存了,那唯一的可能就是游标查询没生效。3、整体来说就是,由于刚才设置了preferQueryMode =simple,就会导致进入了下面的判断,而看QueryExecutor类的枚举,QUERY_EXECUTE_AS_SIMPLE是很大的,如果设置了此值,就会直接覆盖到游标查询了。
2023-02-25 22:52:12
73
转载 jdbc和mybatis的流式查询使用方法
throwSQLError.createSQLException(Messages.getString("Statement.7"), MysqlErrorNumbers.SQL_STATE_ILLcom.mysql.cj.jdbc.StatementImpl的方法EGAL_ARGUMENT, getExceptionInterceptor());这个时候就可以使用流式查询,数据一条条的返回,处理完一条在拿下一条数据,这样每次在内存里面的数据其实很小,不会导致内存溢出。
2023-02-25 22:22:15
44
转载 fastjson2为什么这么快?
我们也可以在日常业务处理中,学习其精华部分,运用其中的技术亮点,优化业务处理速度,提升用户体验。核心逻辑就是根据位数,直接开始计算给定的时间字符串,相对于参照的原点时间(1970-1-1 0点)过去了多少毫秒,这个优化,避免了parse Number的开销,精简了大量 Partten 的处理,处理流程非常高效。为了实现字符串是不可变的特性,JDK 在构造 String 构造字符串的时候,会有拷贝的过程,比如上图是 JDK8 的 String 的一个构造函数的实现,其在堆内存中重新开辟了一块内存区域。
2023-02-25 11:03:38
25
转载 Mybatis流式查询
版权声明:本文为CSDN博主「污鸦嘴」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。处理的需求,因数据量过大不能一次性将结果集装入客户端内存,就可以考虑使用流式查询或者分页查询, 本文仅讨论流式查询.规则 类似于oracle的fetchsize缓冲区。方式三: TransactionTemplate。方式四: @Transactional 注解。方式二: SqlSession 方式。方式一: 基于mybatis的。基于Cursor构建的方式。话不多说 直接上代码。
2023-02-25 10:47:30
133
转载 通过ThreadLocal实现一个上下文管理组件
在工作中,我们经常需要维护一些上下文,这样可以避免在方法调用过程中传入过多的参数,需要查询/修改一些数据的时候,直接在当前上下文中操作就行了。举个具体点的例子:当web服务器收到一个请求时,需要解析当前登录态的用户,在后续的业务执行流程中都需要这个用户名。如果只需要维护一个上下文状态数据还比较好处理,可以通过方法传参的形式,执行每个业务方法的时候都通过添加一个表示用户名方法参数传递进去,但是如果需要维护上下文状态数据比较多的话,这个方式就不太优雅了。
2023-02-25 09:59:05
23
转载 实现高并发秒杀的七种方式
三、四、五方式主要是数据库的锁来解决并发问题,方式三是利用for upate对表加行锁,方式四是利用update来对表加锁,方式五是通过增加version字段来控制数据库的更新操作,方式五的效果最差。六、七方式是通过队列来解决并发问题,这里需要特别注意的是,在代码中不能通过throw抛异常,否则消费线程会终止,而且由于进队和出队存在时间间隙,会导致商品少卖。对于并发量大于商品数的情况,商品秒杀一般不会出现少卖的请况,但对于并发数小于等于商品数的时候可能会出现商品少卖情况,这也很好理解。
2023-02-25 09:48:42
23
转载 【Win11家庭中文版本Docker Desktop安装指北】
下载好的docker镜像和容器的存储路劲默认是在C盘的,但是C盘一般都是默认的系统盘,空间和容量都比较不够用,所以我还需要把docker的镜像文件保存路径和容器存储路径调整到我的文件盘里面,我给笔记本加装了一条固态就是为了干这个事的:)。然后通过命令行操作将上一步导出的数据导入到文件夹路径下面,这条命令前面是需要导入到的文件夹路径吗,后面是导入的文件路径,最后是wsl的操作版本号,因为之前设置过默认的版本号,所以这边加不加其实关系不大,但是我习惯顺手就加了。相关代码贴在下面,这两个命令直接执行就可以了。
2023-02-12 09:50:31
344
转载 这是一份保姆级Vue3+Vite实战教程
ESLint 不仅能够检测代码中的错误,而且在许多情况下,可以为我们自动纠正错误。如上,这是我电脑 nrm 管理的镜像源列表,最后一个是我公司内网的所以打码了,除了最后一个都是安装 nrm 自带的,你可以使用 nrm use 命令很方便的去切换源,npm 默认就是列表中名为 npm 的源,如果你下载不下来一些工具,可以切换为 taobao 源,当然安装完成后最好切回来,因为除了 npm 源,其他源在下载某些包时,都可能会出现一些莫名的问题。
2023-02-12 09:30:14
292
转载 25种代码坏味道总结+优化示例,你中招没?
什么样的代码是好代码呢?好的代码应该命名规范、可读性强、扩展性强、健壮性......而不好的代码又有哪些典型特征呢?这25种代码坏味道大家要注意啦。
2022-12-11 10:18:15
137
转载 9条消除if...else的锦囊妙计,解决代码的坏味道!
最近在做代码重构,发现了很多代码的烂味道。其他的不多说,今天主要说说那些又臭又长的if...else要如何重构。在介绍更更优雅的编程之前,让我们一起回顾一下,不好的if...else代码。
2022-12-11 10:14:29
89
转载 Java 8 重构传统设计模式,是真的优雅!
比如:会员系统中,每个商家都会有一些营销活动,需要推送某种信息给会员,但是不同的商家推送的内容可能不同,有些需要推送优惠券,有些需要积分通知。重要提示:什么时候该用lambda,什么时候不用,这是要看情况的,如果处理逻辑相对比较简单,可以用lamdba来重构,以便让代码更简洁易读,如果处理逻辑很复杂,应该还是用“类”。思路:基于某个Subject主题,然后一堆观察者Observer注册到主题上,有事件发生时,subject根据注册列表,去通知所有的observer。显然如果模板的实现方式越多,子类就越多。
2022-12-11 10:12:26
90
转载 Mybatis关联查询 ResultMap的继承
先来看看 resultMap 节点的官方定义:复制代码会把列名和属性名进行绑定,该节点一共有 4 个属性:1. id :表示该 resultMap,共其他的语句调用2. type:表示其对于的pojo类型,可以使用别名,也可以使用全限定类名3. autoMapping:如果设置这个属性,MyBatis将会为这个ResultMap开启或者关闭自动映射。这个属性会覆盖全局的属性 autoMappingBehavior。默认值为:unset。
2022-11-27 17:43:53
966
转载 被玩烂了的9种设计模式 附Spring例子
本文通过对设计模式的讲解加源码举例的方式介绍了9种在代码设计中常用的设计模式:单例模式建造者模式工厂模式策略模式模板方法模式责任链模式代理模式适配器模式观察者模式其实这些设计模式不仅在源码中常见在平时工作中也是可以经常使用到的。设计模式其实还是一种思想,或者是套路性的东西,至于设计模式具体怎么用、如何用、代码如何写还得依靠具体的场景来进行灵活的判断。
2022-11-20 16:42:27
100
转载 一起来学redis redission
redis 的客户端有jedis、lettuce、redission;我个人比较推荐的是redission,因为它的分布式锁和缓存实在是太优秀了。Redisson采用了基于NIO的Netty框架,封装了大家常用的集合类以及原子类、锁等工具。本章节主要介绍redission 中重要的两个点:数据结构和锁。...
2022-08-30 22:23:50
377
转载 最强分布式锁工具:Redisson
什么是Redisson?Redisson是一个在Redis的基础上实现的Java驻内存数据网格(In-Memory Data Grid)。它不仅提供了一系列的分布式的Java常用对象,还提供了许多分布式服务。Redisson的宗旨是促进使用者对Redis的关注分离(Separation of Concern),从而让使用者能够将精力更集中地放在处理业务逻辑上。一个基于Redis实现的分布式工具,有基本分布式对象和高级又抽象的分布式服务,为每个试图再造分布式轮子的程序员带来了大部分分布式问题的解决办法。...
2022-08-30 22:18:06
189
转载 数据库中的乐观锁与悲观锁
当我们提交更新的时候,判断数据库表对应记录的当前库存数与第一次取出来的库存数进行比对,如果数据库表当前库存数与第一次取出来的库存数相等,则予以更新,否则认为是过期数据。乐观锁( Optimistic Locking ) 是相对悲观锁而言的,乐观锁假设数据一般情况下不会造成冲突,所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果发现冲突了,则让返回用户错误的信息,让用户决定如何去做。以上,在对id = 1的记录修改前,先通过for update的方式进行加锁,然后再进行修改。...
2022-08-14 17:54:19
3758
1
转载 有了这篇 Kubernetes 的介绍,它的原理秒懂!
kubernetes 已经成为容器编排领域的王者,它是基于容器的集群编排引擎,具备扩展集群、滚动升级回滚、弹性伸缩、自动治愈、服务发现等多种特性能力。本文将带着大家快速了解 kubernetes ,了解我们谈论 kubernetes 都是在谈论什么。...
2022-08-14 14:59:38
46
转载 数据库优化-事务篇
背景: 日常开发中, 性能的瓶颈往往在于 IO, 尤其是数据库. 了解如何优化数据库, 提高数据库的性能和请求响应速度是有必要的.因此, 我打算梳理和总结数据库优化的相关内容.本篇为事务篇, 讲解数据库事务相关的优化. 梳理事务相关的知识点, 并结合实际场景进行讲解.文章中的实例都是以 PG 数据库为例的, 其它数据库语法可能稍有不同....
2022-08-14 14:53:20
109
转载 阿里官方 Redis 开发规范
来源:yq.aliyun.com/articles/531067一、键值设计1、key名设计2、value设计二、命令使用三、客户端使用四、相关工具五、删除bigkey本文主要介绍在使用阿里云Redis的开发规范,从下面几个方面进行说明。键值设计命令使用客户端使用相关工具通过本文的介绍可以减少使用Redis过程带来的问题。...
2022-08-14 14:40:51
47
转载 在kubernetes集群中部署SpringBoot应用和MySQ
在项目根目录下创建deploy文件夹,按照如下创建spring-boot-deployment.yaml文件,并放到deploy文件夹下。为了免去手工部署敲命令的烦恼,直接一把梭将命令整合成如下的bash脚本,命名为auto-deploy.sh,并扔进deploy文件夹下。注意:此auto-deploy.sh中,根据你的实际集群环境,你需要替换192.168.6.128:5000为自己的镜像仓库。我们创建MySQL的同时创建了Service,Service为集群中的容器通信提供了服务发现功能。...
2022-08-13 11:37:18
110
转载 使用 helm 部署 k8s 资源
helm 是基于 kubernetes 的包管理器。它之于 kubernetes 就如 yum 之于 centos,pip 之于 python,npm 之于gitlabpostgresprometheusgrafanahelmhelm。让开发人员写 k8s 资源配置文件是不现实的于是helm应时而出,运维写配置文件,开发给配置文件填很少的参数本篇文章主要介绍如何安装 helm 以及如何使用 helm 部署基础服务和业务Chartreleaserepo使用。...
2022-08-13 11:28:44
573
转载 【kubernetes】新版helm3的三大概念+快速指南+自定义charts模板
Helm 是 Kubernetes 的包管理器上述nginx安装只是使用仓库chart的默认配置。不利于个性化需求和生成环境的使用。我们也可以修改chart默认配置,也可以自己创建Charts模板。1. 创建一个chart模板testnginx/├── chartstemplates/目录是我们资源清单的yaml文件。values.yaml文件内容,定义一些template目录下yaml文件所引用的字段Chart.yaml文件是该chart的描述信息。...
2022-08-13 11:22:22
166
token_demo.zip
2020-10-06
vue 源码分析1.zip
2020-08-29
RDP大屏幕图表使用教程.zip
2020-07-15
RDP报表工具操作手册V3.0.zip
2020-07-15
RDP3.0-Beat3.zip
2020-07-15
vueblog-master.zip
2020-07-04
compiler-master.zip
2020-05-12
spring-boot-route-master.zip
2021-08-25
技术案例课职场生涯回顾介绍.zip
2021-01-10
springcloud-demo.zip
2020-12-07
vue2+springbootPRE.zip
2020-11-05
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人