自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

张伟光

好玩的不是技术,好玩的是用技术玩转业务

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

原创 【MySQL】之性能优化-事务+锁+MVCC

事务1、概念**数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作; 事务是一组不可再分割的操作集合(工作逻辑单元);**是什么**update user_account set balance = balance - 1000 where userID = 3;update user_account set balance = balance +1000 where ...

2019-09-26 21:48:52 183 1

原创 【MySQL】之性能优化-索引+查询优化

索引A、索引真的去了解正确的创建合适的索引是提升数据库的查询性能的基础。索引是为了加速对表中数据的检索而创建的一种分散存储的数据结构。是什么为什么1、极大地减少存储引擎需要扫描的数据量。2、把随机io编程顺序io。3、帮助我们在分组、排序等操作时避免使用临时表。B、索引为什么选B+Tree?二叉树到平衡二叉树再到B-Tree、B+Tree。平衡二叉树B-Tre...

2019-07-07 19:33:57 199

原创 【并发编程】--AQS实现原理

AQSlock之所以能实现线程安全的锁,主要的核心是AQS(AbstractQueuedSynchronizer),AQS提供了一个FIFO队列,可以用来实现锁以及需要同步功能的框架。称为AQS。AQS使用依靠继承来完成,子类通过继承自AQS并实现所需的方法来管理同步状态。ReentrantLock、CountDownLatch。AQS分为两种:独占和共享。独占锁模式下,每次只能有...

2019-06-30 21:19:22 178

原创 【并发编程】synchronized底层实现原理

synchronized原子性、可见性、有序性应用加锁的三种方式:1、普通同步方法,锁的是实例对象2、静态同步方法,锁的是当前类的对象。3、同步方法块,锁的是synchronized括号里的对象synchronized的字节码指令:对于同步块的实现使用了monitorenter和monitorexit指令,前面我 们在讲JMM的时候,提到过这两个指令,他们隐式的执行...

2019-06-23 23:09:14 167

原创 【并发编程】--volatile底层实现原理

1、volatile解决可见性使用缓存一致性。防止指令重排序使用内存屏障,保证有序性。有volatile变量修饰的共享变量,编译时会有lock前缀。volatile实现原则:·Lock前缀指令会引起处理器缓存回写到内存。(总线锁、缓存锁)·一个处理器的缓存回写到内存会导致其他处理器的缓存无效。(MESI、嗅探)缓存一致性协议:处理器上有一套完整的协议,来保证 Cac...

2019-06-09 19:35:40 292

原创 最近最少使用算法

最近最少使用算法解析

2022-11-20 17:43:58 380 1

原创 分布式协调服务

分布式协调服务

2022-11-20 16:01:50 841

原创 分布式通信框架

分布式通信框架

2022-11-20 16:00:35 259

原创 分布式架构基础

分布式架构基础

2022-11-20 15:58:13 151

原创 分布式架构演进过程

分布式

2022-11-20 15:52:50 435

原创 spring 升级5之后引发的问题

1.mvc发生了修改,之前比如后端是list 接口, 前端用list.json请求了,会抱404,这时候我们需要在mvc配置文件中加<mvc:path-matching suffix-pattern="true"/>意思是允许后缀匹配2.升级后Log4jConfigListener不识别,需要把log4j升级log4j2,解决方法将log4j文件放到 resource目录下,官网给的解决办法,感谢组内大神帮忙解决Apache log4j 1.2 - Short

2022-04-08 18:12:12 2482

原创 又一年总结

一年总结又到了。

2021-12-31 15:38:59 306 1

原创 spring启动设置开关

【前言】 最近接触了一个项目,对数据库的数据进行监听,当监听到数据库数据进行了增删改,就会更新es或者做一些业务处理,这时候就有一个疑问,如果我项目运行中,我想关掉这个服务的监听,而不是杀死服务,这时候怎么处理呢?【过程】 @Componentpublic class SpringFinishedListener implements InitializingBean, ApplicationListener<ContextRefreshedEvent>...

2021-10-09 15:22:08 475 1

原创 spring aop拦截dao层 对参数自动加解密

【前言】 项目中对一些手机号邮箱什么的,我们都在数据库存储的是加密状态,但是我们在实际在后端传参数的时候,传的是手机号,这时候我们就需要做下处理,自动把手机号加密,或者当查出来的手机号是加密状态,我们自动给它解密。【实战】 一、定义拦截类package com.zhipin.crm.customer.base.encrypt;import lombok.extern.slf4j.Slf4j;import org.aspectj.lang.Proceedin...

2021-08-30 20:53:10 1588 3

原创 Java树结构的一些方法

package cn.techwolf.boss.crm.utils;import org.apache.commons.collections4.CollectionUtils;import java.util.*;import java.util.function.Consumer;import java.util.stream.Collectors;public class TreeUtils { /** * 列表转树 * @return *.

2021-02-02 14:10:55 2707

原创 如何持续对编程保持热情

欢迎大家在下面评论 或者 放一些文章的链接 或者视频 大家一起交流 学习 提高

2020-11-05 21:17:17 227

原创 分库分表实战问题

1.分库分表中水平拆分和垂直拆分的区别?水平拆分:将表数据拆分到不同的数据数据库中。垂直拆分:把一个大表拆成多个小表。字段进行拆分。分表:是指的是把表数据拆分到多张表里面。range分发:每个月生成一个新表。如果访问新的数据还好,但是访问旧的数据就麻烦一些。hash分发:平均分配,但是扩容的话会比较麻烦。2.如何让未分库分表的系统,设计成分库分表的系统?1)停机迁移方案2)双写迁移方案修改系统中所有写库的代码,同时让他写老库和新的分库分表的库。单表的数据中取数据,同步

2020-07-21 21:46:18 227

原创 分布式系统常见实战问题解决方案

1.dubbo工作原理1)service层:接口层,给服务提供者和消费者来实现。2)config层:配置层,主要是对dubbo进行配置的3)proxy层:代理层,透明生成生成客户端的stub和服务单的skeleton4)registry层:服务注册层,负责服务的注册和发现5)cluster层:集群层,封装多个服务提供者的路由以及负载均衡,将多个实例组合成一个服务6)monitor层:监控层,对rpc接口的调用次数和调用时间进行监控7)protocol层:远程调用层,封装rpc调用

2020-07-21 20:10:27 483

原创 项目中常见的缓存问题实战

1.redis的线程模型是什么?为什么单线程的redis比多线程的memcached效率要高得多(为什么redis是单线程的但是还可以支撑高并发)?[redis线程模型]redis的server端会有server socket来接收客户端的请求,当准备完毕会放入io多路复用程序,然后通过io多路复用程序压入一个对列中,然后通过文件事件分派器给到链接应答处理器。这时候发送set命令接着放到io多路复用程序,也会压入队列中,同时会有一个wating状态来去监听io多路复用程序,然后上面发送命令的请求从队

2020-07-13 20:01:04 500

原创 分布式引擎-es

1.es的分布式架构原理能说一下么(es是如何实现分布式的啊)?存储数据的基本单位是索引,比如你现在在es中存一些订单数据,你就应该在es中创建一个索引,order_idx,一个索引差不多就是相当于mysql中的一张表。index -> type -> mapping -> document -> field。index:mysql里面一张表type:详单于订单分类。例如一个是实物商品订单type,一个是虚拟商品订单type;很多情况下,一个index里可能就一个type

2020-07-12 17:07:46 282

原创 消息队列常见实战问题

1.如何保证消息队列的高可用?一、rabbitmq的高可用a.单机模式b.普通集群模式(无高可用性) 【连接获取数据方式】创建的queue只会放到一个mq上,消费的时候如果连接的另一个实例。那么需要去存放数据的queue拉取数据。 【设置连接方式】 1)随机 的获取实例连接所有的queue。缺点:有拉取数据的性能问题 2)指定到有queue的mq上。缺点:单实例的性能瓶颈 【事故处理方式】存放了queue的实例宕机了,未开启...

2020-07-12 15:45:38 371

原创 mysql delete in删除数据

【前言】 如果多张表连查出来符合条件的单表的id后,但是通过delete in无法删除?这时我们该如何处理?【实践】CREATE TABLE tmp AS SELECTe.role_id FROM ( SELECT a.role_id FROM sys_user_role a WHERE a.user_id NOT IN (SELECT b.user_id...

2020-02-20 17:36:47 10970

原创 年终总结

【离开、开始】【曲折】【安逸】【缓进】【回归离开】

2020-01-17 17:39:50 342 1

原创 parallelStream简单实用规则

【前言】 Stream().forEach是单线程的形式进行遍历,没有充分利用现在多核Cpu的设备,这时我们就需要使用今天说到的parallelStream。【使用】 我们怎么使用呢?直接parallelStream().forEach。这时就变得并行执行任务。由于并行遍历会改变执行的顺序,从而影响返回的顺序,这时我们就需要使用:parallelStream()...

2020-01-08 15:34:00 529

原创 java8函数式编程基础(一)

什么是函数式编程?为什么要用函数式编程?函数式编程有哪些特色?(相比较不用函数式编程来看)函数式编程有哪些意想不到的高级特性?...

2019-12-17 19:09:49 145

原创 SpringBoot使用RateLimiter通过AOP方式进行限流

引言:我们为了防止接口防刷操作,我们需要对接口做一些处理,如下是简单的对接口进行防刷的操作,具体是用aop+redis设置过期时间来实现的一、方法上添加注解 @InvokeRateLimit(rate = 1 * 60)二、配置一个要拦截的接口package com.sunlands.app.common.annotation;import java.lang.annota...

2019-11-11 15:35:14 756 1

原创 srpingboot整合shiro简单应用

引言:推荐一篇博客https://blog.csdn.net/qq_41737716/article/details/82948729,我下边写得只是简单的应用一、添加pom依赖<!-- shiro spring. --><dependency> <groupId>org.apache.shiro</groupId> &l...

2019-11-08 19:09:15 181 1

原创 继承中黑狗与狗的关系

所有的黑狗都是狗,在new黑狗的时候首先走狗的构造方法,在走狗的构造方法时,用this依旧是黑狗,如果在狗中写方法时,要用狗做形参,是为了让所有的黑狗,白狗,黄狗都用这个方法。...

2019-06-15 16:39:02 188

原创 rmi运行机制

【RMI】远程方法调用,纯java的RPC框架,在RMI中最核心的为远程对象。A发布了服务,生成stub对象,B拿到stub对象,调用对象的方法进行传输。【远程对象发布】 远程对象必须实现 UnicastRemoteObject,这样才能保证客户端访问获得远程对象时,该远程对象会把自身的一个拷贝以 Socket 形式传输给客户端,客户端获得的拷贝称为“stub”,而服务器端...

2019-06-15 11:51:50 464

原创 深入理解设计模式

【前言】 做了几个可大可小的项目,或多或少的接触了代码复用,代码解耦,代码高扩展等一系列优秀的代码的实用性,提高了代码的可读性,可扩展性,维护成本,复杂的业务问题。而我们生活上也是如此,如果一件事情,总要不断重复去做,虽然我们可以把事情做好,但是总是杂乱无章,这不免会浪费我们的时间成本,对生活深度分析,并且用代码实现这种思想,不断思考,思想与代码并驾齐驱,灵活运用设计模式,理清应...

2019-06-08 14:55:27 598

原创 Java秒杀实战(十二) 优化秒杀业务流程

优化后的秒杀业务流程【总结】 秒杀实现的优化思路,能缓存就去redis缓存起来,然后放到队列中,让队列去处理。

2019-06-02 15:32:52 1047 1

原创 Java秒杀实战(十一) RabbitMQ四种常见应用模式

先把数据放到路由上。【Direct 模式】添加配置类package com.wings.seckill.config; import org.springframework.amqp.core.Queue;import org.springframework.context.annotation.Bean;import org.springframework.context....

2019-06-02 11:29:26 644 1

原创 Java秒杀实战(十) SpringBoot框架集成RabbitMQ

【安装RabbitMQ及其相关依赖】下载erlanghttps://www.erlang.org/downloads下载rabbitMQhttp://www.rabbitmq.com/download.html安装相关依赖yum install ncurses-develtar xf otp_src_21.0.tar.gzcd otp_src_21.0...

2019-06-02 10:29:23 348 1

原创 Java秒杀实战(九)页面优化技术(Redis缓存页面,url,对象)

【页面缓存】把页面的数据放到reids里面,然后从redis取出后直接返回html @RequestMapping(value = "/to_list", produces = "text/html") @ResponseBody public String toList(HttpServletRequest request, HttpServletResponse response...

2019-06-02 09:43:15 447 2

原创 Java秒杀实战(八)JMeter压测

下载链接http://jmeter.apache.org/download_jmeter.cgi添加线程组设置10个线程同时并发,下面的0表示多长时间启动起来这10个线程(0表示10个线程同时启动起来,1表示1秒钟10个线程先后启动起来),最下面的1表示循环多少次。设置http请求默认值添加待压测的http请求添加聚合报告监听器启动测试,下面是...

2019-05-31 21:42:02 411 1

原创 Java秒杀实战(七)分布式session

1.首先通过uuid生成唯一标识的token信息String token = UUIDUtil.uuid();2.然后把token信息连带着user用户信息放到缓存服务器中redisService.set(MiaoshaUserKey.token, token, user);3.再new出来一个cookie对象,往里面填充值,设置信息。Cookie cookie = ne...

2019-05-30 21:33:04 322 2

原创 Java秒杀实战(六)系统异常拦截

运行的过程中,已知的异常信息,通过定义一个GlobleException类即全局异常类,再按一定的格式来抛出异常。package com.imooc.miaosha.exception;import com.imooc.miaosha.result.CodeMsg;/** * Created by 张伟光 on 2019/5/16. */public class GlobleE...

2019-05-30 20:47:13 278 1

原创 Java秒杀实战(五) SpringBoot框架集成Redis

【Linux系统安装Redis】官网下载redis包,上传到linux服务器上。1.解压并移动目录tar -zxvf redis-4.0.10.tar.gz mv redis-4.0.10 /usr/local/redis cd /usr/local/redis/2.译并把编译后的可执行文件添加到启动目录make -j 4 make ins...

2019-05-29 21:44:23 270 2

原创 Java秒杀实战(四) SpringBoot框架集成Mybatis

如果linux系统没有安装mysql的话,推荐一篇博客来进行安装mysqlhttps://www.cnblogs.com/duanrantao/p/8988116.html1.maven添加mybatis依赖,druid依赖 <dependency> <groupId>org.mybatis.spring.boot</groupId> ...

2019-05-29 19:19:05 221 3

原创 Java秒杀实战(三) 系统结果集返回数据封装

Controller在开发过程,通常主要有两个作用:1.返回json结果;2.返回页面路径。在现在前后端分离的项目中,如果你是用的vue或者angular等,控制器只用返回json信息就行了。返回的信息我们定义一个数据结构 public class Result<T> { private int code; private String msg; private T d...

2019-05-29 17:16:16 445 2

空空如也

空空如也

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

TA关注的人

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