苏三说技术
关注公众号【苏三说技术】,领取粉丝福利。免费刷题网站:www.susan.net.cn
展开
-
select for update加锁,懵逼了!
前几天,知识星球中的一个小伙伴,问了我一个问题:在MySQL中,事务A中使用select...for update where id=1锁住了,某一条数据,事务还没提交,此时,事务B中去用select ... where id=1查询那条数据,会阻塞等待吗?其实select...for update在MySQL中,是一种悲观锁的用法,一般情况下,会锁住一行数据,但如果没有使用正确的话,也会把整张表锁住,导致SQL性能急剧下降。原创 2024-04-29 17:24:19 · 273 阅读 · 0 评论 -
高并发下如何保证数据库和缓存双写一致性?
前言数据库和缓存(比如:redis)双写数据一致性问题,是一个跟开发语言无关的公共问题。尤其在高并发的场景下,这个问题变得更加严重。我很负责的告诉你,该问题无论在面试,还是工作中遇到的概率非常大,所以非常有必要跟大家一起探讨一下。今天这篇文章我会从浅入深,跟大家一起聊聊,数据库和缓存双写数据一致性问题常见的解决方案,这些方案中可能存在的坑,以及最优方案是什么。1. 常见方案通常情况下,我们使用缓存的主要目的是为了提升查询的性能。大多数情况下,我们是这样使用缓存的:用户请求过来之后,先查缓存原创 2022-04-01 21:19:12 · 4002 阅读 · 20 评论 -
我用kafka两年踩过的一些非比寻常的坑
大家好,我是苏三,又和大家见面了。前言我的上家公司是做餐饮系统的,每天中午和晚上用餐高峰期,系统的并发量不容小觑。为了保险起见,公司规定各部门都要在吃饭的时间轮流值班,防止出现线上问题时能...原创 2021-02-21 09:26:21 · 728 阅读 · 4 评论 -
商城首页卡爆了!!!
最近我们的商城系统出现了一个线上问题,用户访问商城首页的时候要差不多20秒,才返回数据,可以说卡爆了。到底怎么回事呢?如果这篇文章对您有所帮助,或者有所启发的话,帮忙扫描下发二维码关注一下,您的支持是我坚持写作最大的动力。关注公众号:【苏三说技术】,在公众号中回复:面试、代码神器、开发手册、时间管理有超赞的粉丝福利,另外回复:加群,可以跟很多BAT大厂的前辈交流和学习。原创 2023-12-25 11:45:37 · 926 阅读 · 0 评论 -
我调用第三方接口遇到的13大坑
在实际工作中,我们经常需要在项目中调用第三方API接口,获取数据,或者上报数据,进行数据交换和通信。那么,调用第三方API接口会遇到哪些问题?如何解决这些问题呢?这篇文章就跟大家一起聊聊第三方API接口的话题,希望对你会有所帮助。原创 2023-04-16 21:01:33 · 1727 阅读 · 1 评论 -
Java中100==100为true,而1000==1000为false?
今天跟大家聊一个有趣的话题,在Java中两个Integer对象做比较时,会产生意想不到的结果。其运行结果是:true。其运行结果是:false。看到这里,懵了没有?为什么会产生这样的结果呢?-128~127。其实默认调用了如果数字在-128~127之间,则直接从缓存中获取Integer对象。如果数字在-128~127之外,则该方法会new一个新的Integer对象。我们在判断两个对象是否相等时,一定要多注意:判断两个对象的引用是否相等,用==号判断。原创 2024-01-03 10:13:49 · 944 阅读 · 0 评论 -
聊聊写代码的20个反面教材
前言今天跟大家聊一个有趣的话题:如何写出让人抓狂的代码?大家看到这个标题,第一印象觉得这篇文章可能是一篇水文。但我很负责的告诉你,它是一篇有很多干货的技术文。曾几何时,你在阅读别人代码的时候,有没有抓狂,想生气,想发火的时候?今天就跟大家一起聊聊,这20种我看了会抓狂的代码,看看你中招了没?1.不注重代码格式代码格式说起来很虚,下面我用几个案例演示一下,不注重代码格式的效果。作为这篇文章的开胃小菜吧。1.1 空格有时候必要的空格没有加,比如:@Service@Slf4jpublic原创 2022-02-08 21:56:59 · 2593 阅读 · 1 评论 -
聊聊spring事务失效的12种场景,太坑了
前言对于从事java开发工作的同学来说,spring的事务肯定再熟悉不过了。在某些业务场景下,如果一个请求中,需要同时写入多张表的数据。为了保证操作的原子性(要么同时成功,要么同时失败),避免数据不一致的情况,我们一般都会用到spring事务。确实,spring事务用起来贼爽,就用一个简单的注解:@Transactional,就能轻松搞定事务。我猜大部分小伙伴也是这样用的,而且一直用一直爽。但如果你使用不当,它也会坑你于无形。今天我们就一起聊聊,事务失效的一些场景,说不定你已经中招了。不信,让我们原创 2021-09-04 13:30:33 · 15064 阅读 · 87 评论 -
聊聊redis分布式锁的8大坑
前言在分布式系统中,由于redis分布式锁相对于更简单和高效,成为了分布式锁的首先,被用到了很多业务场景当中。尤其是分布式配置中心:apollo、nocos等的出现,让zookeeper的地位越来越低了。zookeeper分布式锁复杂度更高,想把它使用好并不容易。所以我们还是好好使用redis分布式锁吧。不是说用了redis分布式锁,就可以高枕无忧了,如果没有用好,也会引来一些意想不到的麻烦。今天我们重点聊聊redis分布式锁的一些坑,给有需要的朋友一个参考。最近无意间获得一份BAT大厂大佬写原创 2021-09-24 22:15:35 · 3766 阅读 · 10 评论 -
烂大街的缓存穿透、缓存击穿和缓存雪崩,你真的懂了?
前言对于从事后端开发的同学来说,缓存已经变成的项目中必不可少的技术之一。没错,缓存能给我们系统显著的提升性能。但如果你使用不好,或者缺乏相关经验,它也会带来很多意想不到的问题。今天我们一起聊聊如果在项目中引入了缓存,可能会给我们带来的下面这三大问题。看看你中招了没?最近无意间获得一份BAT大厂大佬写的刷题笔记,一下子打通了我的任督二脉,越来越觉得算法没有想象中那么难了。BAT大佬写的刷题笔记,让我offer拿到手软1. 缓存穿透问题大部分情况下,加缓存的目的是:为了减轻数据库的压力,提升系统的原创 2021-12-26 08:29:30 · 415 阅读 · 2 评论 -
面试必考:秒杀系统的9个核心知识点,一次性打包给你
苏三说技术 作者就职于知名互联网公司,掘金月度优秀作者,从事开发、架构和部分管理工作。实战经验丰富,对jdk、spring、springboot、springcloud、mybatis等开源框架源码有一定研究,欢迎关注...原创 2021-07-29 19:23:48 · 11539 阅读 · 27 评论 -
聊聊索引失效的10种场景,巨坑
前言我之前写的一篇文章《聊聊sql优化的15个小技巧》,自发表之后,在全网广受好评,被很多大佬转载过,说明了这类文章的价值。今天我接着上一期数据库的话题,更进一步聊聊索引的相关问题,因为索引是大家都比较关心的公共话题,确实有很多坑。不知道你在实际工作中,有没有遇到过下面的这两种情况:明明在某个字段上加了索引,但实际上并没有生效。索引有时候生效了,有时候没有生效。最近无意间获得一份BAT大厂大佬写的刷题笔记,一下子打通了我的任督二脉,越来越觉得算法没有想象中那么难了。BAT大佬写的刷题笔记原创 2022-01-09 21:11:55 · 6566 阅读 · 11 评论 -
阿里二面:我们为什么要做分库分表?
前言在高并发系统当中,分库分表是必不可少的技术手段之一,同时也是BAT等大厂面试时,经常考的热门考题。你知道我们为什么要做分库分表吗?这个问题要从两条线说起:垂直方向 和 水平方向。1 垂直方向垂直方向主要针对的是业务,下面聊聊业务的发展跟分库分表有什么关系。1.1 单库在系统初期,业务功能相对来说比较简单,系统模块较少。为了快速满足迭代需求,减少一些不必要的依赖。更重要的是减少系统的复杂度,保证开发速度,我们通常会使用单库来保存数据。系统初期的数据库架构如下:此时,使用的数据库方案是原创 2021-10-28 18:14:08 · 1021 阅读 · 2 评论 -
聊聊并发编程中的10个坑
前言对于从事后端开发的同学来说,并发编程肯定再熟悉不过了。说实话,在java中并发编程是一大难点,至少我是这么认为的。不光理解起来比较费劲,使用起来更容易踩坑。不信,让继续往下面看。今天重点跟大家一起聊聊并发编程的10个坑,希望对你有帮助。1. SimpleDateFormat线程不安全在java8之前,我们对时间的格式化处理,一般都是用的SimpleDateFormat类实现的。例如:@Servicepublic class SimpleDateFormatService {原创 2022-03-04 21:10:48 · 404 阅读 · 1 评论 -
Objects.equals有坑
前言最近review别人代码的时候,发现有个同事,在某个业务场景下,使用Objects.equals方法判断两个值相等时,返回了跟预期不一致的结果,引起了我的兴趣。原本以为判断结果会返回true的,但实际上返回了false。记得很早之前,我使用Objects.equals方法也踩过类似的坑,所以有必要把这个问题记录下来,分享给大家。到底怎么回事呢?1. 案发现场假设现在有这样一个需求:判断当前登录的用户,如果是我们指定的系统管理员,则发送一封邮件。系统管理员没有特殊的字段标识,他的用户id=88原创 2022-03-21 22:15:04 · 3260 阅读 · 3 评论 -
ThreadLocal夺命11连问
前言前一段时间,有同事使用ThreadLocal踩坑了,正好引起了我的兴趣。所以近期,我抽空把ThreadLocal的源码再研究了一下,越看越有意思,发现里面的东西还真不少。我把精华浓缩了一下,汇集成了下面11个问题,看看你能顶住第几个?1. 为什么要用ThreadLocal?并发编程是一项非常重要的技术,它让我们的程序变得更加高效。但在并发的场景中,如果有多个线程同时修改公共变量,可能会出现线程安全问题,即该变量最终结果可能出现异常。为了解决线程安全问题,JDK出现了很多技术手段,比如:使原创 2022-05-15 10:35:27 · 1262 阅读 · 0 评论 -
高并发下如何避免产生重复数据?
最近测试给我提了一个bug,说我之前提供的一个批量复制商品的接口,产生了重复的商品数据。追查原因之后发现,这个事情没想象中简单,可以说一波多折。产品有个需求:用户选择一些品牌,点击确定按钮之后,系统需要基于一份品牌的商品数据,复制出一批的商品。拿到这个需求时觉得太简单了,三下五除二就搞定。我提供了一个复制商品的基础接口,给商城系统调用。当时的流程图如下:如果每次复制的商品数量不多,使用同步接口调用的方案问题也不大。但由于每次需要复制的商品数量比较多,可能有几千。如果每次都是用同步接口的方式复制商品,可能原创 2022-06-25 20:39:36 · 1569 阅读 · 1 评论 -
糟了,线上服务出现OOM了
前一段时间,公司同事的一个线上服务OOM的问题,我觉得挺有意思的,在这里跟大家一起分享一下。我当时其实也参与了一部分问题的定位。如果这篇文章对您有所帮助,或者有所启发的话,帮忙扫描下发二维码关注一下,您的支持是我坚持写作最大的动力。关注公众号:【苏三说技术】,在公众号中回复:面试、代码神器、开发手册、时间管理有超赞的粉丝福利,另外回复:加群,可以跟很多BAT大厂的前辈交流和学习。原创 2022-10-10 19:37:55 · 2382 阅读 · 0 评论 -
千万小心,99%的Java程序员会踩这些坑
作为Java程序员的你,不知道有没有踩过一些基础知识的坑。有时候,某个bug查了半天,最后发现竟然是一个低级错误。有时候,某些代码,这一批数据功能正常,但换了一批数据就出现异常了。有时候,你可能会看着某行代码目瞪口呆,心里想这行代码为什么会出错?今天跟大家一起聊聊99%的Java程序员踩过,或者即将踩的6个坑。如果这篇文章对您有所帮助,或者有所启发的话,帮忙扫描下发二维码关注一下,您的支持是我坚持写作最大的动力。求一键三连关注公众号【苏三说技术】,在公众号中回复ttpshttps。...原创 2022-07-15 20:13:49 · 910 阅读 · 0 评论 -
模糊查询 + 分页 有坑!
不知道你有没有使用过Mysql的like语句,进行模糊查询?不知道你有没有将查询结果,进行分页处理?模糊查询,加上分页处理,会有意想不到的坑,不信我们继续往下看。我之前提供过一个品牌查询接口,给前端品牌选择控件使用的。当时为了性能考虑,怕前端控件因为一次性加载太多的品牌,而导致页面卡死。因此,对品牌查询接口做了分页处理。刚开始品牌表的数据比较少,没有出现什么问题。后来,产品加需求了,在品牌下拉选择控件中,让用户可以输入自定义品牌。原创 2022-09-15 21:12:02 · 1627 阅读 · 0 评论 -
使用ClickHouse JDBC官方驱动,踩坑无数
这个问题我在网上查原因说是由于Zookeeper压力过大,表变成只读状态,导致ClickHouse插入数据失败。写入数据频率过高。Zookeeper中的集群节点挂掉。而我们项目出现这个问题的原因是第一个:写入数据频率过高。但是在网上搜资料的过程中,我又发现了另外一个问题:我们项目用了JDBC驱动,但ClickHouse官方并不推荐。。证实了官网确实不建议使用驱动:而应该改成驱动,并且推荐使用0.3.2以上的版本:于是,后面几天开始了ClickHouse的JDBC驱动升级之旅。原创 2022-11-28 22:15:47 · 18102 阅读 · 7 评论 -
生产环境一次诡异的空指针问题,反转了4次
前言公司为了保证系统的稳定性,加了很多监控,比如:接口响应时间、cpu使用率、内存使用率、错误日志等等。如果系统出现异常情况,会邮件通知相关人员,以便于大家能在第一时间解决隐藏的系统问题。此外,我们这边有个不成文的规定,就是线上问题最好能够当日解决,除非遇到那种非常棘手的问题。1.起因有个周一的早上,我去公司上班,查看邮件,收到我们老大转发的一封邮件,让我追查线上的一个NPE(NullPointException)问题。邮件是通过sentry发出来的,我们通过点击邮件中的相关链接,可以直接跳原创 2021-06-19 22:46:23 · 754 阅读 · 3 评论 -
万万没想到一个普通的地区问题,竟然让我们大战了300回合
前言我最近参与了公司的一个新项目,需要通过openapi接口把接入方的数据,比如:企业、订单、合同、物流等,同步到我们平台,然后我们平台给他们提供金融能力。由于我方跟对接方不在同一个城市,为了提高工作效率,双方进行了多次在线视频沟通。刚开始比较顺利,没想到在沟通企业信息上传接口时,接口文档中有个非常不起眼的企业注册地id字段,让我们一下子进入了僵局。到底是怎么回事呢?1.地区问题在我们平台的企业表中有一个企业注册地id字段,是必填的,用户在注册企业的页面需要选择一个地区,作为该企业的注册地,实际上原创 2021-06-06 14:44:09 · 600 阅读 · 11 评论 -
盘点一下数据库的误操作有哪些后悔药?
前言无论是开发、测试,还是DBA,都难免会涉及到数据库的操作,比如:创建某张表,添加某个字段、添加数据、更新数据、删除数据、查询数据等等。正常情况下还好,但如果操作数据库时出现失误,比如:...原创 2021-03-19 08:15:00 · 426 阅读 · 0 评论 -
高并发下如何保证接口的幂等性?
苏三说技术 「苏三说技术」 维护者目前就职于某知名互联网公司,从事开发、架构和部分管理工作。实战经验丰富,对jdk、spring、springboot、springcloud、mybatis等开源框架源码有一定研究,欢...原创 2021-03-29 22:57:14 · 656 阅读 · 3 评论 -
兄dei,你的代码死循环了吗?
前言代码死循环这个话题,个人觉得还是挺有趣的。因为只要是开发人员,必定会踩过这个坑。如果真的没踩过,只能说明你代码写少了,或者是真正的大神。尽管很多时候,我们在极力避免这类问题的发生,但很多时候,死循环却悄咪咪的来了,坑你于无形之中。我敢保证,如果你读完这篇文章,一定会对代码死循环有一些新的认识,学到一些非常实用的经验,少走一些弯路。死循环的危害我们先来一起了解一下,代码死循环到底有哪些危害?程序进入假死状态, 当某个请求导致的死循环,该请求将会在很大的一段时间内,都无法获取接口的返回,程序好原创 2021-04-25 15:39:48 · 5555 阅读 · 27 评论 -
记一次系统被sql注入搞挂的惨痛经历
前言最近我在整理安全漏洞相关问题,准备在公司做一次分享。恰好,这段时间团队发现了一个sql注入漏洞:在一个公共的分页功能中,排序字段作为入参,前端页面可以自定义。在分页sql的mybatis mapper.xml中,order by字段后面使用$符号动态接收计算后的排序参数,这样可以实现动态排序的功能。但是,如果入参传入:id; select 1 --最终执行的sql会变成:select * from user order by id; select 1 -- limit 1,20–会把后面原创 2021-04-22 21:09:12 · 2768 阅读 · 8 评论 -
明明加了唯一索引,为什么还是产生重复数据?
前段时间我踩过一个坑:在mysql8的一张innodb引擎的表中,加了唯一索引,但最后发现数据竟然还是重复了。到底怎么回事呢?本文通过一次踩坑经历,聊聊唯一索引,一些有意思的知识点。如果这篇文章对您有所帮助,或者有所启发的话,帮忙扫描下发二维码关注一下,您的支持是我坚持写作最大的动力。关注公众号:【苏三说技术】,在公众号中回复:面试、代码神器、开发手册、时间管理有超赞的粉丝福利,另外回复:加群,可以跟很多BAT大厂的前辈交流和学习。原创 2024-01-03 10:16:17 · 1060 阅读 · 0 评论 -
糟糕,CPU100%了!!!
cpu使用率100%问题,是一个让人非常头疼的问题。因为出现这类问题的原因千奇百怪,最关键的是它不是必现的,有可能是系统运行了一段时间之后,在突然的某个时间点出现问题。今天特地把我和同事,之前遇到过的cpu使用率100%的问题,总结了一下,给有需要的朋友一个参数。如果这篇文章对您有所帮助,或者有所启发的话,帮忙扫描下发二维码关注一下,您的支持是我坚持写作最大的动力。原创 2024-02-26 10:40:12 · 908 阅读 · 0 评论 -
分类树,我从2s优化到0.1s
分类树查询功能,在各个业务系统中可以说随处可见,特别是在电商系统中。但就是这样一个简单的分类树查询功能,我们却优化了5次。到底是怎么回事呢?如果这篇文章对您有所帮助,或者有所启发的话,帮忙扫描下发二维码关注一下,您的支持是我坚持写作最大的动力。关注公众号:【苏三说技术】,在公众号中回复:面试、代码神器、开发手册、时间管理有超赞的粉丝福利,另外回复:加群,可以跟很多BAT大厂的前辈交流和学习。原创 2023-10-14 09:50:28 · 147 阅读 · 0 评论 -
工作中最常见的6种OOM问题
最近我写的几篇线上问题相关的文章:《糟糕,CPU100%了》《如何防止被恶意刷接口》《我调用第三方接口遇到的13大坑》,发表之后,在全网广受好评。今天接着线上问题这个话题,跟大家一起聊聊线上服务出现OOM问题的6种场景,希望对你会有所帮助。如果这篇文章对您有所帮助,或者有所启发的话,帮忙扫描下发二维码关注一下,您的支持是我坚持写作最大的动力。关注公众号:【苏三说技术】,在公众号中回复:面试、代码神器、开发手册、时间管理有超赞的粉丝福利,另外回复:加群,可以跟很多BAT大厂的前辈交流和学习。原创 2024-03-18 09:41:03 · 928 阅读 · 0 评论 -
加密的手机号,如何模糊查询?
前几天,知识星球中有位小伙伴,问了我一个问题:加密的手机号如何模糊查询?我们都知道,在做系统设计时,考虑到系统的安全性,需要对用户的一些个人隐私信息,比如:登录密码、身份证号、银行卡号、手机号等,做加密处理,防止用户的个人信息被泄露。很早之前,CSDN遭遇了SQL注入,导致了600多万条明文保存的用户信息被泄。因此,我们在做系统设计的时候,要考虑要把用户的隐私信息加密保存。原创 2023-11-04 11:17:25 · 221 阅读 · 0 评论 -
原来count(*)是接口性能差的真凶
最近我在公司优化过几个慢查询接口的性能,总结了一些心得体会拿出来跟大家一起分享一下,希望对你会有所帮助。我们使用的数据库是Mysql8,使用的存储引擎是Innodb。这次优化除了优化索引之外,更多的是在优化count(*)。通常情况下,分页接口一般会查询两次数据库,第一次是获取具体数据,第二次是获取总的记录行数,然后把结果整合之后,再返回。查询具体数据的sql,比如是这样的:`它没有性能问题。却存在性能差的问题。为什么会出现这种情况呢?原创 2023-12-26 14:12:37 · 947 阅读 · 0 评论 -
糟糕,接口被刷了,怎么办?
在面试时,经常会被问一个问题:如何防止别人恶意刷接口?这是一个非常有意思的问题,防范措施挺多的。今天这篇文章专门跟大家一起聊聊,希望对你会有所帮助。原创 2024-02-16 18:27:02 · 936 阅读 · 0 评论 -
保证接口安全,用这11招就够了!!!
最近知识星球中有位小伙伴问了我一个问题:如何保证接口的安全性?根据我多年的工作经验,这篇文章从11个方面给大家介绍一下保证接口安全的一些小技巧,希望对你会有所帮助。原创 2024-01-18 17:09:03 · 1641 阅读 · 0 评论