自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 这一年让我印象深刻的bug --外部接口请求失败问题

调用外部系统要注意事务一致性。

2024-02-05 22:48:00 311

原创 这一年让我印象深刻的bug --内存溢出

sql查询注意必填字段校验,如果没有校验可能会导致全表查询关于内存溢出处理参考内存溢出处理。

2024-02-05 09:04:16 421

原创 这一年让我印象深刻的bug -- 让sql选择更合理的执行过程

我们要建立有效索引,对区分度不打的字段没必要建索引我们要放让mysql走更有效的索引。

2024-02-04 11:49:17 475 1

转载 Java 内存结构

而栈是线程级的,即每个线程都有一个属于自己的栈,且是私有的。堆是由垃圾回收来负责的,堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配内存的,Java的垃圾收集器会自动收走这些不再使用的数据。这个时候,“From”和“To”会交换他们的角色,也就是新的“To”就是上次GC前的“From”,新的“From”就是上次GC前的“To”。2,紧接着进行GC,Eden区中所有存活的对象都会被复制到“To”,(,每次GC,Eden都会是空的,且谁空谁是To)

2023-07-10 21:56:04 1022

原创 记一次接口超时

于是我仔细看了下后台发现我们接口请求花了134389ms,而我网关设置的超时时间是6000很明明显网关超时了,于是我先将网关时间改大到200000.再次请求报错果然消失。如下图,接口报“The upstream server ss timing out”,而报错编码是504,5xx我们很容易想到是后端服务处理问题,于是我赶快去看后台监控。这时就有点懵逼了,于是习惯性的先去百度下看有没有啥新发发现,结果发现有人说是nginx等待超时导致的,这时我想到了接口转发环节的网关,是不是网关超时。

2023-03-24 22:10:58 1521

原创 接口反应慢定位及处理方法

有时候我们点击一个按钮可能会触发很多个接口,这时如果反应慢我们那就要定位一下是具体那个接口反应慢,如图当我点击查询接口时他一直在转圈,很多人自然而然的也以为是查询接口出了问题。但是当我们点看network查看时会发现,其实一直在请求的是另外一个接口。整个逻辑是:当我们请求查询是首先会去判断这个人的权限,如果有权限再返回数据。而权限接口一直请求慢导致我们看到查询时一直在转圈。

2023-03-19 12:37:47 1341

转载 [转载]流程图画法总结

流程图画法

2022-09-15 22:41:46 12297

转载 Controller 就该这么写

说到 Controller,相信大家都不陌生,它可以很方便地对外提供数据接口。它的定位,我认为是「不可或缺的配角」,说它不可或缺是因为无论是传统的三层架构还是现在的COLA架构,Controller 层依旧有一席之地,说明他的必要性;说它是配角是因为 Controller 层的代码一般是不负责具体的逻辑业务逻辑实现,但是它负责接收和响应请求作者:gelald链接:https://juejin.cn/post/7123091045071454238来源:稀土掘金著作权归作者所有。商业转载请联系作者获

2022-08-28 19:39:05 928

转载 【Spring事务详解】--- 3.事务失效的八种场景

被捕获的异常一定要抛出,否则是不会回滚的。

2022-08-11 22:50:23 338

转载 【Spring事务详解】--- 2.事务应用的注意事项

开启声明式事务非常简单,直接通过@Transactional注解即可除了常规的支持自定义事务的隔离级别、传播属性之外,还可以设置事务的超时时间,回滚的异常类型。

2022-08-11 22:39:20 255

转载 【Spring事务详解】--- 1.事务传播的案例演示

NESTED应该是几种事务传播方式中最难理解的,如果不注意,NESTED和REQUIRED功能看起来则差不多,都可以理解为有事务则加入,没有则新启一个,但实际上NESTED比REQUIRED要更加灵活。这就是NESTED不同之处,两个方法同一个事务,居然没有一起回滚,这就叫嵌套事务,子事务回滚不会影响到主事务,实际上利用的是savepoint功能,就好像下面这样。此时执行后,t2的数据不会回滚,t1的数据会回滚,因为t2和t1不是一个事务。很明显,如果存在事务,直接抛出异常。......

2022-08-11 22:29:40 310

原创 java多线程join()方法的坑

join方法的用法

2022-07-04 23:28:07 594

原创 后端接口性能优化七字诀

我讲自己的心得总结为7个字:**缓存**,**异步**,**批处理**。

2022-06-13 21:36:46 203

转载 RocketMQ:事务性消息

可以认为是一个确保分布式系统中的最终一致性的两阶段提交(two-phase commit )的消息实现。事务性消息确保本地事务的执行和消息的发送是一个原子性操作。

2022-06-05 23:38:33 877

转载 Java本地缓存

缓存是存储在内存中的KV数据结构,分为分布式缓存和本地缓存。

2022-06-01 22:02:08 4291

原创 性能压测及优化

压测方法为我们利用Jmeter进行压测,具体使用方法参考链接

2022-05-29 22:14:26 357

原创 利用消息队列完成定时任务

项目背景  公司的客户快速响应系统每天都会接到十几万的客户反馈信息,而这些信息根据紧急情况如果规定的时间内没有处理,需要给相应的负责人发送短信进行提醒。目前使用的方式是利用定时任务对数据库进行扫描,捞取未完成的订单判断是否超时(这里有一个坑,有点经验的程序员可能会问下产品一个订单大概周期多久然后然后捞数据时规定时间。那些菜鸟很可能就直接全表扫描了),然后发送短信。  这样做有个很明显的缺点,1 这样做订单主表数据量数据量非常大频繁扫描明显会增加数据库压力    2 时间控制不够精准  于是我决定利用M

2022-05-23 20:28:02 1945 3

原创 利用Apollo进行Sentinel规则持久化

什么是sentinel?Sentinel 是面向分布式服务架构的流量控制组件,主要以流量为切入点,从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度来帮助开发者保障微服务的稳定性。源码地址:https://github.com/alibaba/Sentinel官方文档:https://github.com/alibaba/Sentinel/wiki为什么要持久化我们下载好sentinel之后,每次要使用都需要启动sentinel的jar包,在sentinel中添加规则之后,每次重启,所有

2022-05-11 22:09:39 582

转载 TreeMap讲解

参看文章

2022-03-27 15:57:09 181

原创 利用redis+lua脚本进行分布式限流

1 为啥要用lua脚本 1. 一个脚本包含多个操作,减少访问次数从而减少网络开销 2. 原子操作 redis 对lua脚本是原子化执行方案  3. 复用性 复用 lua脚本的逻辑2 代码编写A 导包(不详写)B 定义注解@Target({ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface AccessLimiter { int limit(); Stri

2022-03-18 00:12:32 362

转载 接口幂等性详解

1.什么是接口幂等接口幂等性就是用户对同一操作发起了一次或多次请求的对数据的影响是一致不变的,不会因为多次的请求而产生副作用。副作用:可以认为多次请求操作,每一次对数据状态都会产生影响 。注意这里并没有要求接口返回结果是一致的。例如:update order set moeny = 100 where orderId = 2029282312接口不做幂等处理会怎样?支付场景:用户购买商品后,发起支付操作,支付系统处理支付成功后,由于网络原因没有及时返回给用户结果,其实这个时候订单已经扣过款,

2022-03-12 15:26:52 691

原创 数据库读写分离,分库分表

1 数据切分方法数据切分主要有两种方式:1. 水平切分:优点:    解决了单库大数据,高并发的性能瓶颈    拆分规则封装好,对应用端几乎透明,开发人员无需关心拆分细节    提高了系统的稳定性和负载能力缺点:    拆分规则很难抽象    分片事物一致性难以解决    二次扩展时,数据迁移,维护难度大1. 2. 垂直切分:优点:    拆分后业务清晰,拆分规则明确    系统之间容易扩展和整合    数据维护简单缺点:    部分业务表无法jo

2022-03-05 17:36:28 798

原创 聊聊分布式锁

什么是分布式锁对于一个单机的系统,我们可以通过synchronized或者ReentrantLock等这些常规的加锁方式来实现,然而对于一个分布式集群的系统而言,单纯的本地锁已经无法解决问题。这时候就需要这些分布式系统能够共用一把锁。这就是分布式锁。分布式锁特点分布式锁要保证互斥性、不死锁、可重入等特点。互斥性指的是对于同一个资源,任意时刻,都只有一个客户端能持有锁。不死锁指的是必须要有锁超时这种机制,保证在出现问题的时候释放锁,不会出现死锁的问题。可重入指的是对于同一个线程,可以多次重复加锁

2022-02-21 22:43:54 853

原创 Java 当事物@Transactional跟锁synchronized同时出现时请注意

先看一段代码:代码逻辑很简单,当用户请求购买商品时我们去后台查找商品库存如果库存大于购买数量我们就更新库存。显然查找跟更新是一个事物所以我们要加@Transactional,同时为了防止高并发下多个用户同一时间去扣减库存也就是多个用户同时执行该方法就需要对方法加锁synchronized。看起来这段代码好像没啥问题,但是当你运行起来之后你会发现出现库存超扣现象 @Transactional(rollbackFor = Exception.class) public synchronized Int

2022-02-20 21:20:33 1553

转载 ES常见问题总结

1、elasticsearch了解多少,说说你们公司es的集群架构,索引数据大小,分片有多少,以及一些调优手段 。   面试官:想了解应聘者之前公司接触的ES使用场景、规模,有没有做过比较大规模的索引设计、规划、调优。 解答: 如实结合自己的实践场景回答即可。 比如:ES集群架构13个节点,索引根据通道不同共20+索引,根据日期,每日递增20+,索引:10分片,每日递增1亿+数据, 每个通道每天索引大小控制:150GB之内。仅索引层面调优手段1.1、设计阶段调优 &nb

2022-02-10 21:53:55 1104

原创 如何将mysql数据同步到es

logstash安装1 上传并解压logstash2 创建文件夹sync并在里面创建文件logstash-db-sync.conf,logstash.sql,track_time把数据库驱动移到该文件夹下3 配置logstash-db-sync.conf文件内内容input { jdbc { # 设置 MySql/MariaDB 数据库url以及数据库名称 jdbc_connection_string => "jdbc:mysql://ip:3306

2022-02-08 23:08:54 7772 2

原创 redis知识点总结

redis的数据类型String Hash List Set zsetRedis相比Memcached有哪些优势(1) memcached所有的值均是简单的字符串,redis作为其替代者,支持更为丰富的数据类型(2) redis的速度比memcached快很多(3) redis可以持久化其数据Redis–各个数据类型最大存储量Strings类型:一个String类型的value最大可以存储512MLists类型:list的元素个数最多为2^32-1个,也就是4294967295个。Sets

2022-01-17 23:26:06 582

原创 利用LVS +Nginx搭建高可用负载均衡

LVS与Nginx解释LVS:Linux 虚拟机、流量调度,负载均衡单向的 End user -----> LVS -----> tomcat -----> end usernginx:高性能代理服务器,系统内部流量分发,反向代理有来回 End user -----> Ngnix -----> tomcat -----> Ngnix -----> end userLVS 的优势1.抗负载能力强,因为 LVS 工作方式的逻辑是非常简单的,而且工作在网络的第

2022-01-14 23:59:22 2210

原创 同步与异步,阻塞与非阻塞

这四个概念两两组合,会形成4个新的概念,如下:同步阻塞: 客户端发送请求给服务端,此时服务端处理任务时间很久,则客户端则被服务端堵塞了,所以客户端会一直等待服务端的响应,此时客户端不能做事,服务端也不会接受其他客户端的请求。这种通信机制比较简单粗暴,但是效率不高。同步非阻塞: 客户端发送请求给服务端,此时服务端处理任务时间很久,这个时候虽然客户端会一直等待响应,但是服务端可以处理其他的请求,过一会回来的。这种方式很高效,一个服务端可以处理很多请求,不会在因为任务没有处理完而堵着,所以这是非阻塞的。

2022-01-10 22:34:17 94

转载 java 关键字 Static

Java中Static关键字的四种用法1.修饰成员变量     在我们平时的使用当中,static最常用的功能就是修饰类的属性和方法,让他们成为类的成员属性和方法,我们通常将用static修饰的成员称为类成员或者静态成员,这句话挺起来都点奇怪,其实这是相对于对象的属性和方法来说的。请看下面的例子public class Person { String name; int age; public String toStr

2022-01-08 17:49:45 86

转载 Java中abstract的基本使用与详解

先来看一道题:下列哪一种叙述是正确的A:abstract修饰符可修饰字段、方法和类B:抽象方法的body部分必须用一对大括号{ }包住C:声明抽象方法,大括号可有可无D:声明抽象方法不可写出大括号解析:Djava中规定:abstract只能修饰类和方法,不能修饰变量。1、什么是抽象类?类和类之间如果具有相同的特征,将这些共同的特征提取出来,形成的就是抽象类。类本身是不存在的,所以抽象类无法实例化对象。类到对象是实例化,对象到类是抽象。public class Test { p

2022-01-08 10:33:31 28757 4

原创 数据脱敏工具类

数据脱敏工具类在快递面单中我们经常要对用户名或电话号码一些字段用*代替进行数据脱敏。该方法就是一个这样的工具类/** * 通用脱敏工具类 * 可用于: * 用户名 * 手机号 * 邮箱 * 地址等 */public class DesensitizationUtil { private static final int SIZE = 6; private static final String SYMBOL = "*";

2022-01-03 23:14:20 681

原创 静态注入示例

在一些工具类中可能会依赖 service 层的对象,一般情况下工具类都是使用静态方法,对应的成员变量也需要声明为静态的,此时如果直接使用 @Autowired 进行依赖注入,在方法调用的时候会报 NullpointerException.废话不多说先上代码@Componentpublic class TenderMakeTagUtil { @Autowired private static AttrSpecService attrSpecService; @Autowired

2021-09-25 11:39:00 325

原创 fdfs和springboot的整合

1 FastDFS介绍FastDFS是一个由 C 语言实现的开源轻量级分布式文件系统,作者余庆(happyfish100),支持 Linux、FreeBSD、AID 等 Unix 系统,解决了大数据存储和读写负载均衡等问题,适合存储 4KB~500MB 之间的小文件,如图片网站、短视频网站、文档、app 下载站等,UC、京东、支付宝、迅雷、酷狗等都有使用2 FastDFS上传下载的流程3 java包导入a 通过git下载fdfs的客户端添加链接描述b 将fdfs的客户端打包到本地maven仓库中

2021-09-25 10:45:48 502

转载 Spring事务不生效的几种情况

场景一Service方法抛出的异常不是RuntimeException或者Error类型,并且@Transactional注解上没有指定回滚异常类型。如下@Servicepublic class UserServiceImpl implements UserService { private final UserMapper userMapper; public UserServiceImpl(UserMapper userMapper) { this.user

2021-09-22 19:31:16 735

转载 docker-compose教程(安装,使用, 快速入门)

教程基于ubuntu下最新的compose版本3参考: https://docs.docker.com/compose/overview/1.Compose介绍Docker Compose是一个用来定义和运行复杂应用的Docker工具。一个使用Docker容器的应用,通常由多个容器组成。使用Docker Compose不再需要使用shell脚本来启动容器。Compose 通过一个配置文件来管理多个Docker容器,在配置文件中,所有的容器通过services来定义,然后使用docker-compos

2021-03-10 23:59:51 177

转载 高德地图获取城市所有小区的POI

我们使用高德开放平台https://lbs.amap.com上的webapi服务,获取POI数据,严格说来不算爬虫,就是调数据接口获取数据而已。步骤也很简单。1.获取北京的范围。2.将北京范围拆分成设定步长的网格,用每个网格矩形搜索小区数据,如果搜索到的数据量大于阈值,则将网格拆分成四个,如此递归,直到矩形搜索到的数据量小于阈值。3.用2中获取的网格调用接口,获取小区数据,把所有网格的数据汇总到一起就可以了。稍稍有点难度的,可能就是网格拆分的递归,但只要想明白了,就也很简单。接下来,看实践。一

2021-02-24 16:48:11 9750 4

转载 js逆向学习笔记之hook

什么是hook替换原有方法的这种处理方式我们就叫hookhook的三种方式:1、 覆盖原方法// hook示例1function hello(){ console.log("1111"); }// 不修改hello中的代码的情况下,调用hello()输出2222hello = function(){ console.log("2222") }// hook示例2:// 替换js内部的alert使其,在调用alert的时候,不再弹出警示框, 而是在控制台输出hello wo

2021-01-26 22:53:15 1593 3

原创 猿人学第五题下---过程分析

网页链接: http://match.yuanrenxue.com/match/51 首先分析url,可以看到m参数像一个时间戳,我们把它进行时间戳转换,我们可以发现转换后的时间跟当前时间一致,至于后面的f参数多次分析后发现它跟m的关系是:f是m参数减去1000后把后面三位数置为02 url分析完后我们接着分析cookie.cookie有两个参数m跟RM4hZBv0dDon443M,用常规思维去搜搜发现根本搜不到.3 既然搜不到,那我们就hook下.如图一通过hook我们发现函数 0x3d0f3f

2021-01-25 19:47:01 487 1

原创 猿人学第五题上---代码

先把代码展示出来分析过程明天做js代码var window = {};var times = 0;function _0x12e4a8(_0x7542c8, _0x5eada0) { var _0x41f81f = (0xffff & _0x7542c8) + (0xffff & _0x5eada0); return (_0x7542c8 >> 0x10) + (_0x5eada0 >> 0x10) + (_0x41f81f >>

2021-01-24 22:24:10 14220

空空如也

空空如也

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

TA关注的人

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