自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

zquwei的博客

本空间是学习总结,有抄录,也有原创,学习贵在坚持。

  • 博客(41)
  • 收藏
  • 关注

原创 netty长连接集群方案

消息中间件 具有I/O高吞吐量读写高性能,利用redis存储每个连接用户所在的服务器分区(主题),不同分区(主题)消费,扩展本地路由和远程路由,实现各个netty服务直接的通讯,消息分发找到用户所在的机器才进行相关业务逻辑处理。在流量进入对应的服务后,因为是集群环境,所以服务端要往客户端发消息时也要判断下当前服务是否有客户端的通道(channel),拿到正确的通道才能发给客户端消息。并且和用户聚合服务耦合在一起,服务多节点部署不能提高拍卖性能,不能支撑更多用户使用拍卖。目前需要改造并出一个集群的方案。

2024-08-02 16:32:56 893

原创 Redis 实现高并发库存扣减方案

redis,库存

2024-07-09 18:39:29 709

原创 【结合AOP与ReflectUtil对返回数据进行个性化填充展示】

思路是可以定义一个切面 把返回的列表信息重新遍历一遍。如上面例子 可以再定义一个dic注解 判断如果在sex字段打了@dict标签就根据编码转换或返回多一个中文字段。或者根据自己的业务需要把某些字段进行个性化填充展示。对于接口列表返回的数据,我们通常有时候会对某些特殊的字段进行转化,或者根据某逻辑进行重新赋值,举个例子,

2023-09-10 21:50:18 181

原创 动态表单设计

自定一表单数据结构。内容展示如有必要行转列。前端根据题目类型自定义组件后端跟俊题目类型用策略模式校验各种类型这样有统计功能的简单动态问卷就可以了展示时可能某些场景需要行转列。大概估摸使用的话有可能kmic_form_data_detail表的记录数比较大,后期再考虑数据或者表迁移或拆分。

2023-09-08 17:51:24 2166

原创 记一次线上并发出现分布式锁失效的问题

记一次线上并发出现分布式锁失效的问题

2022-09-21 19:49:26 1011

原创 java自定义线程池名称

背景:工作中有时候需要自定义线程池名称,以便于更好地定位问题。分析查看线程池核心类分析下:ThreadPoolExecutor线程池执行时会添加工作线程://如例子代码:ExecutorService executorService =new ThreadPoolExecutor(5,5,1, TimeUnit.MINUTES,new LinkedBlockingDeque<>(),new NamedThreadFactory("测试"));//Ex

2022-02-15 11:22:21 2603 1

原创 docker常用命令与dockerfile编写

常用命令拉取容器docker pull tomcatdocker run -d --name first_tomcat -p 8080:8080 tomcat修改源为阿里云1登录阿里云,找到 产品与服务 -> 容器镜像服务 -> 镜像加速器 ,可以看到下图所示的aliyun镜像加速器地址2执行 vim /etc/docker/daemon.json 下面命令,创建/修改文件,并设置加速器地址。{“registry-mirrors”: [“https://089rhvhq.mir

2021-10-10 21:33:25 136 1

原创 springcloudalibaba-sentinel使用

单机版简单使用官方文档中文的 比较简单 直接上主要代码@SpringBootApplicationpublic class SpringbootSentinelApplication { public static void main(String[] args) { SpringApplication.run(SpringbootSentinelApplication.class, args); }//配置规则 @PostConstruct pub

2021-10-05 18:49:08 110

原创 分布式事务与seata(oracle版)的使用

背景前端时间公司的Oracle项目改造发觉需要用到分布式事务,顾继续回顾加强学习一下。分布式事务事务要说分布式事务,首先还是从事务的基本特征说起。A 原子性 :在事务的执行过程中,要么全部执行成功,要么都不成功。C 一致性 :事务在执行前后,不能破坏数据的完整性。一致性更多的说的是通过 AID 来达到目的,数据应该符合预先的定义和约束,由应用层面来保证,还有的说法是 C 是强行为了 ACID 凑出来的。I 隔离性:多个事务之间是互相隔离的,事务之间不能互相干扰,涉及到不同事务的隔离级别的问题

2021-10-02 11:08:32 873 1

原创 shell脚本启动停止服务

有时候shell脚本启动停止服务需要做一些操作比如启动时,先移动备份文件。停止服务时先执行某些接口。方便开发人员快速回滚等。#!/usr/bin/bashfunction backup(){ echo "backup start.." dateStr=`date "+%Y%m%d%H%M"` echo $dateStr if [[ -e $runningJarPath ]];then backUpFileName=${runningJarPath}${dateStr}.zi

2021-09-16 11:52:45 701

原创 结合spring特性实现的策略模式

结合spring特性实现的策略模式背景工作中常常需要用到设计模式,集合spring实现的设计模式使用起来比较方便,下面就简单举例使用下。如我这里想根据不同的场景类型更新不同的表。使用1、策略接口类public interface UpdateTableStrategy { void UpdateTableByAnswer();}2、不同的策略实现类:@Componentpublic class updateTable1 implements UpdateTableSt

2021-09-14 10:42:25 249

原创 统一返回值处理、统一异常处理

项目中与前端对接通常需要统一的返回处理和异常处理。统一异常处理比较简答直接上代码:@Slf4j@ControllerAdvicepublic class GlobalExceptionHandler { /** * 校验异常处理 * * @param e e * @return AjaxResult * @throws Exception */ @ExceptionHandler(value = MethodArgu

2021-05-20 15:31:05 388

原创 基于SpringSecurity+JWT的微服务鉴权解决方案

基于SpringSecurity+JWT的微服务鉴权解决方案背景公司一旧项目权鉴改造达到目的任意一端登录(web、app、h5)后可以携带对应的token 来请求访问后台服务资源。#### 传统认证流程:互联网服务离不开用户认证。一般流程是下面这样:用户向服务器发送用户名和密码服务器验证通过后,在当前对话(session)里面保存相关数据,比如用户角色、登录时间等等服务器向用户返回一个 session_id,写入用户的 Cookie。用户随后的每一次请求,都会通过 Cookie,将 s

2021-05-05 18:36:08 1147

原创 springboot 上传文件-feign內部調用

springboot 上传文件-feign內部調用1.springboot版本-springboot2.1.62.feign间调用注意的点:1.注解用:@RequestPart2.变量:MediaType.MULTIPART_FORM_DATA_VALUE3.如果不行添加:,required = false例子:/** * 项目共享文件-保存,feign內部調用 */ @RequestMapping( value = "/feignUploadFile",cons

2021-01-14 16:57:57 168

原创 代理模式

静态代理用父亲帮儿子找对象来举例:public interface Person { public void findLove();}public class Son implements Person { @Override public void findLove() { System.out.println("儿子要找一个对象"); }}public class Father implements Person { priv

2020-10-08 21:35:47 90

原创 单例模式

单例模式单例模式的应用场景单例模式(Singleton Pattern)是指确保一个类在任何情况下都绝对只有一个实例,并 提供一个全局访问点。单例模式是创建型模式。在 J2EE 标准中,ServletContext、 ServletContextConfig 等;在 Spring 框架应用中 ApplicationContext;数据库的连接 池也都是单例形式。单例模式的常见写法1、饿汉式单例饿汉式单例是在类加载的时候就立即初始化,并且创建单例对象。绝对线程安全,在线 程还没出现以前就是实例化

2020-10-03 22:25:40 78

原创 工厂模式

简单工厂模式简单工厂模式(Simple Factory Pattern)是指由一个工厂对象决定创建出哪一种产品类 的实例,但它不属于 GOF,23 种设计模式(参考资料: http://en.wikipedia.org/wiki/Design_Patterns#Patterns_by_Type)。简单工厂适用 于工厂类负责创建的对象较少的场景,且客户端只需要传入工厂类的参数,对于如何创 建对象的逻辑不需要关心。public interface ICourse { public void reco

2020-09-21 22:53:11 87

原创 搭建一个在线教育直播平台

搭建一个在线直播系统需要满足的基本功能流畅稳定的直播系统,满足师生音视频互动对直播课程进行录制,方便学生复习老师可以分享PPT、视频、图片等,便于教学有丰富的互动功能,比如抢题答题等能够供老师书写的白板IM等其中“直播”功能是最核心和最复杂的功能,可以用第三方现成,如阿里云,腾讯云的流媒体服务,并且使用他们的服务还能够解决录播,点播等问题。而其他功能交互 和实时性比较强,但也能够用框架解决。问题演变成可以用 云服务 + 类似一个 即时通讯系统的服务解决。技术栈这样的系统通常使用性能比

2020-09-14 12:32:03 990

原创 SpringCloudOpenFeign

feignfeign是一个远程客户端他的核心是feignclient,内部实际上是一个动态代理,把requestMapping上的地址 拼接成目标地址Feign要做的事情参数的解析和装载针对指定的feignClient,生成动态代理针对FeignClient中的方法描述进行解析组装出一个Request对象,发起请求Bean的动态装载所有实现了该接口的类的都会被ConfigurationClassPostProcessor处理,ConfigurationClassPostProces

2020-09-05 23:12:57 143

原创 Spring的声明式事务@Transactional注解的6种失效场景

Spring事务管理的两种方式事务管理在系统开发中是不可缺少的一部分,Spring提供了很好事务管理机制,主要分为编程式事务和声明式事务两种。编程式事务:是指在代码中手动的管理事务的提交、回滚等操作,代码侵入性比较强,如下示例try { //TODO something transactionManager.commit(status);} catch (Exception e) { transactionManager.rollback(status); t

2020-08-27 11:59:21 324

原创 spring boot@Value和bean执行顺序问题

很多时候我们需要在某个bean初始化时,读取一个类的属性如:从配置文件中获取配置使用@value,当你在bean加载时调用@value时会出现空指针异常。因为bean加载完成后才会执行@value。方法一:写多一个配置类方法二:定义为static类型...

2020-08-20 11:20:26 1192 1

原创 转:spring循环依赖

什么是循环依赖构造器注入@Componentpublic class A {// @Autowired// private B b; public A(B b) { }}@Componentpublic class B {// @Autowired// private A a; public B(A a){ }}setter方式注入@Componentpublic class A { // A中注入了B @Autowired privat

2020-08-20 10:52:16 87

原创 转:秒杀

数据库行锁减库存update table_name set num = #{num}, version = version + 1 where id = 1 and version = #{version}update produce set stock = stock -1 where product_id = 1 and stock >0数据库会所行数据,排队执行单机的Redis我感觉3-4W的QPS还是能顶得住的.大量的请求进来,我们需要考虑的点就很多了,缓存雪崩,缓存..

2020-08-18 17:30:02 264

原创 springcloudribbon

LoadBalancerAutoConfiguration@Configuration(proxyBeanMethods = false)@ConditionalOnClass(RestTemplate.class)@ConditionalOnBean(LoadBalancerClient.class)@EnableConfigurationProperties(LoadBalancerRetryProperties.class)public class LoadBalancerAutoCon.

2020-08-18 11:02:37 103

原创 kafka

Kafka 为什么快Kafka 的消息是保存或缓存在磁盘上的,一般认为在磁盘上读写数据是会降低性能的,因为寻址会比较消耗时间,但是实际上,Kafka 的特性之一就是高吞吐率。Kafka 之所以能这么快,无非是:「顺序写磁盘、大量使用内存页 、零拷贝技术的使用」…1 顺序写入Kafka 会把收到的消息都写入到硬盘中,它绝对不会丢失数据。为了优化写入速度 Kafka 采用了两个技术, 顺序写入和 MMFile(Memory Mapped File)磁盘读写的快慢取决于你怎么使用它,也就是顺序读写或者随

2020-08-18 10:54:40 163 1

原创 分布式事务

认识分布式事务经典的 X/OpenDTP 事务模型X/Open DTP(X/Open Distributed Transaction Processing Reference Model) 是X/Open 这个组织定义的一套分布式事务的标准,也就是定义了规范和 API 接口,由各个厂商进行具体的实现这个标准提出了使用二阶段提交(2PC – Two-Phase-Commit)来保证分布式事务的完整性。后来 J2EE 也遵循了 X/OpenDTP 规范,设计并实现了 java 里的分布式事务编程接口

2020-08-13 16:49:28 107

原创 NIO

NIO 核心组件解读ChannelBufferSelectorSelection Key组件之间的关系NIO 使用 Channel(通道)和 Buffer(缓冲区)传输数据,数据总是从缓冲区写入通道,并从通道读取到缓冲区。在面向流的 I/O 中,可以将数据直接写入或者将数据直接读到 Stream 对象中。在 NIO 库中,所有数据都是通过 Buffer(缓冲区)处理的。Channel 可以看作是 Netty 的网络操作抽象类,对应于 JDK 底层的 SocketNIO 利用 Select

2020-08-10 22:21:09 181

原创 graphics.drawString中文乱码

前言在绘制微信海报时出现中文昵称乱码问题原因在linux下没有对应字体解决在c:/windows/fonts 文件夹下找到对应的字体,然后复制到linux的jkd目录下。cd $JAVA_HOME/jre/lib/fonts 找到目录新建一个文件加(fallback),拷贝字体重启jvm...

2020-08-07 10:37:26 1161

原创 提升MySQL查询性能常用套路

前言我们查询数据库通常会多表关联,当数据量大时,很多时候我们可以多表查询分成多次 sql 查询,来提高性能。如:select * from tagjoin tag_post on tag_post.tag_id=tag.idjoin post on tag_post.post_id=post.idwhere tag.tag=’mysql’;可以分解成下面这些查询来代替:Select * from tag where tag=’mysql’;Select * from tag_p

2020-08-05 10:31:12 134

原创 如何优雅地导出报表

前言有时候我们需要导出一些报表,但是当有多人同时导出报表时,可能对服务器的压力,尤其是数据库的压力比较大,因为导出报表可能涉及到的查询语句比较多 而且比较耗时,io压力比较大。我们公司在前端时间就出现过cup压力升高,报警的短信,查看具体进程是因为某时刻导出报表的人比较多。怎么避免有时候客户导出报表后不一定期望立即能够返回结果,当任务过多时可以让他等待。于是我们可以让利用mq来削峰 或限流。这就需要业务和技术之间达成一个共识,业务或技术之间有一方能够进行妥协是可以接受的。于是,当点击下载时可以跳到一

2020-08-03 14:56:46 489

原创 HTTPS

HTTP协议特点HTTP五状态协议HTTP协议本身不会对请求和响应之间的通信状态做保存客户端支持的 cookieHttp 协议中引入了 cookie 技术,用来解决 http 协议无状态的问题。通过在请求和响应报文中写入 Cookie信息来控制客户端的状态Cookie 会根据从服务器端发送的响应报文内的一个叫做 Set-Cookie 的首部字段信息,通知客户端保存 Cookie下次客户端再往该服务器发送请求时,客户端会自动在请求报文中加入 Cookie 值后发送出去服务端支持

2020-08-02 22:08:54 343

原创 jvm-05

垃圾收集发生的时机GC是由JVM自动完成的,根据JVM系统环境而定,所以时机是不确定的。 当然,我们可以手动进行垃圾回收,比如调用System.gc()方法通知JVM进行一次垃圾回收,但是具体什么时刻运行也无法控制。也就是说System.gc()只是通知要回收,什么时候回收由JVM决定。 但是不建议手动调用该方法,因为消耗的资源比较大。一般以下几种情况会发生垃圾回收Full GC = Minor GC+Major GC +MetaSpace GC当Eden区或者S区不够用老年代空间不够.

2020-07-27 23:01:04 98

原创 ThreadLocal的使用总结

前言工作中用到了ThreadLocal,觉得非常巧妙好用,顾总结下ThreadLocal 通常使用场景在进行对象跨层传递的时候,使用ThreadLocal可以避免多次传递,打破层次间的约束线程间数据隔离进行事务操作,用于存储线程事务信息。数据库连接,Session会话管理。工作中就是利用了ThreadLocal省去了频繁的传递参数。使用先写一个工具类public class VersionHodler { private static ThreadLocal<docV

2020-07-22 12:30:36 395

原创 反射技术运用

前言昨天工作中遇到使用反射的场景,看别人用得多了,真正自己使用后总结一下。场景工作中通常有场景是根据某个类型来判断调用哪个方法,比如我们有个导出的功能,有很多类型报表需要导出,如果是某个业务类型的功能我们需要调用不同的service,代码大概会是这样:if(type ==0 ){ serviceA.doA(param1); } if(type ==1){ serviceB.doB(param1,param2);

2020-07-21 12:20:18 184

原创 一个基于websocket分布式消息推送系统

前言前段时间开发某个系统 ,需要用到消息推送功能,基于它是一个比较独立的服务,把它做成了服务,现在有时间来单独对它作一个总结,其实就是类似消息推送服务。背景因为公司开发的系统越来越多,有很多系统度需要一个消息的实时推送,接收功能,比如说,在某工单系统提了工单,在个人管理那里收到实时的反馈,或者在某教学系统上完课,家长评论后老师在教学系统也实时收到反馈,又或者在业务系统下单扣减课时,教师或者业务人员实时收到反馈等。如果在每个系统都开发类似的代码就臃肿了,于是消息推送服务出现了。思路由于各个系统都是

2020-07-19 23:39:41 2423

原创 Apache Commons Lang3之StringUtils

背景工作中经常用到一些字符串的操作类 ,觉得挺好用,找网上的文章总结一下一、对字符串进行校验//判断字符串是否为null或""String

2020-07-19 12:04:24 222

原创 jvm-04

jvm参数标准参数:不随着jdk的版本变化而发生变化,如java -versionjava -help-X 参数:随着jdk版本的变动而变动如:-Xint(运行期解释字节码并执行)-XX参数Boolean类型-XX:[+/-]name 启动或停止非Boolean类型-XX:name = value-XX:MaxHeapSize=100M其他参数[-XX参数]-Xms100M ===>等同于 -XX:InitialHeapSize=100M-Xm

2020-07-19 09:44:05 80

原创 jvm-03

垃圾回收(通常讨论的是堆区的对象)如何确定一个对象是垃圾引用计数法对于某个对象而言,只要应用程序中持有该对象的引用,就说明该对象不是垃圾,如果一个对象没有任 何指针对其 引用,它就是垃圾弊端:如果AB相互持有引用,导致永远不能被回收可达性分析通过GC Root的对象,开始向下寻找,看某个对象是否可达能作为GC Root:类加载器、Thread、虚拟机栈的本地变量表、static成员、常量引用、本地方法 栈的变量等垃圾收集算法1.标记-清除(Mark-Sweep)标志:

2020-07-15 08:40:25 155

原创 jvm-02

栈帧:每个栈帧对应一个被调用的方法,可以理解为一个方法的运行空间。局部变量表:方法中定义的局部变量以及方法的参数存放在这张表中 局部变量表中的变量不可直接使用,如需要使用的话,必须通过相关指令将其加载至操作数栈中作为操作数使用。操作数栈:以压栈和出栈的方式存储操作数的动态链接:每个栈帧都包含一个指向运行时常量池中该栈帧所属方法的引用,持有这个引用是为了支持方法调用过程中的动态 连接(Dynamic Linking)比如private List = List(虚拟机装载的时候还不知道子类的类型,只

2020-07-15 08:38:59 90

原创 mysql事务与锁

事务四大特征原子性 Atomicity一致性 Consistent隔离性 Isolation持久性:Durableredo log + double write(防止磁盘损坏不能写日志),双写缓冲如何开启/结束事务set session autocommit = on/off; – 设定事务是否自动开启begin / start transaction – 手工方式(会获得锁)commit / rollback – 事务提交或回滚(会释放锁,关闭客户端连接也会释放锁)事务并

2020-07-15 08:34:42 94

空空如也

空空如也

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

TA关注的人

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