捡田螺的小男孩

其他

田螺工作以来总结的大厂SQL调优姿势

这天我正在午休呢,公司DBA就把我喊醒了,说某库出现大量慢SQL,很快啊,很快,我还没反应过来,库就挂了,我心想现在的用户不讲武德啊,怎么在我睡觉的时候大量请求呢。这是很常见的一个场景哈,因为很多业务开始数据量级不大,所以写sql的时候就没注意性能,等量级上去,很多业务就需要做调优了,在电商公司工作的这几年我也总结了不少,下面就分享给大家吧。在代码开发过程中,我们都会遵循一些SQL开发规范去编写高质量SQL,来提高接口的Response
2023年4月9日
其他

字节国际支付十连问

命名规范选择合适的字段类型主键设计合理选择合适的字段长度优先考虑逻辑删除,而不是物理删除每个表必备的几个字段(如create_time和update_time等)一张表的字段不宜过多尽可能使用not
2022年12月28日
其他

Redis分布式锁的10个坑

dog看门狗,它是一个后台线程,会每隔10秒检查一下,如果线程一还持有锁,那么就会不断的延长锁key的生存时间。因此,Redisson就是使用Redisson解决了锁过期释放,业务没执行完问题。8.
2022年12月18日
其他

分库分表经典15连问

数据库被切分后,不能再依赖数据库自身的主键生成机制啦,最简单可以考虑UUID,或者使用雪花算法生成分布式ID。雪花算法是一种生成分布式全局唯一ID的算法,生成的ID称为Snowflake
2022年12月11日
其他

实战总结!18种接口优化方案的总结

100000,10意味着会扫描100010行,丢弃掉前100000行,最后返回10行。即使create_time,也会回表很多次。我们可以通过标签记录法和延迟关联法来优化深分页问题。13.1
2022年11月18日
其他

21个MySQL表设计的经验准则

设计表时,我们需要选择合适的字段类型,比如:尽可能选择存储空间小的字段类型,就好像数字类型的,从tinyint、smallint、int、bigint从左往右开始选择小数类型如金额,则选择
2022年9月25日
其他

细数线程池的10个坑

最终出现OOM。看下newFixedThreadPool的相关源码,是可以看到一个无界的阻塞队列的,如下://阻塞队列是LinkedBlockingQueue,并且是使用的是无参构造函数public
2022年8月16日
其他

ThreadLocal的八个关键知识点

是如何做到的呢?原理是什么呢?在Thread类中,除了成员变量threadLocals之外,还有另一个成员变量:inheritableThreadLocals。它们两类型是一样的:public
2022年8月1日
其他

盘点MySQL慢查询的12个原因

大家好,我是捡田螺的小男孩。日常开发中,我们经常会遇到数据库慢查询。那么导致数据慢查询都有哪些常见的原因呢?今天田螺哥就跟大家聊聊导致MySQL慢查询的12个常见原因,以及对应的解决方法。1.
2022年5月25日
其他

后端思维篇:手把手教你写一个并行调用模板

list。那并行调用的出参呢?你有多个Callable的任务,是不是得有多个对应的返回,因此,你的出参可以是List。我们抽取的通用并行调用模板,就可以写成酱紫:
2022年5月18日
其他

后端思想篇:设计好接口的36个锦囊!

,不应该通过catch的方式来处理,而是先预检查,比如:NullPointerException处理注意异常匹配的顺序,优先捕获具体的异常小伙伴们有兴趣可以看下我之前写的这篇文章哈:Java
2022年5月9日
其他

我们为什么要分库分表?

水平分库水平分库是指,将表的数据量切分到不同的数据库服务器上,每个服务器具有相同的库和表,只是表中的数据集合不一样。它可以有效的缓解单机单库的性能瓶颈和压力。用户库的水平拆分架构如下:3.2.2
2022年4月11日
其他

面试必备:聊聊分布式锁的多种实现!

锁住主键key_resource那个记录,如果为空,则可以插入一条记录,如果已有记录判断下状态和时间,是否已经超时。这里需要注意一下哈,必须要加事务哈。2.2
2022年4月8日
自由知乎 自由微博
其他

看一遍就理解:分布式事务详解

来源:juejin.im/post/5baa54e1f265da0ac2566fb2作者:郑郑好victorzheng排版:捡田螺的小男孩文章纲要
2022年3月31日
其他

面试必备:聊聊MySQL的主从

长链接主库和从库在同步数据的过程中断怎么办呢,数据不就会丢失了嘛。因此主库与从库之间维持了一个长链接,主库内部有一个线程,专门服务于从库的这个长链接的。4.2
2022年3月2日
其他

面试必备:回溯算法详解

[1,2,3]输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]实例2:输入:nums
2022年2月4日
其他

看一遍就理解:group by详解

的执行流程有些小伙伴觉得上一小节的SQL太简单啦,如果加了where条件之后,并且where条件列加了索引呢,执行流程是怎样?好的,我们给它加个条件,并且加个idx_age的索引,如下:select
2022年1月17日
其他

聊聊幂等设计

唯一流水号实现,分布式锁的key必须为业务的唯一标识哈Redis执行设置key的动作时,要设置过期时间哈,这个过期时间不能太短,太短拦截不了重复请求,也不能设置太长,会占存储空间。6.
2022年1月4日
其他

看一遍就理解:零拷贝详解

零拷贝并不是没有拷贝数据,而是减少用户态/内核态的切换次数以及CPU拷贝的次数。零拷贝实现有多种方式,分别是mmap+writesendfile带有DMA收集拷贝功能的sendfile4.1
2021年12月21日
其他

看一遍就理解:IO模型详解

IO。它相对于阻塞IO,虽然大幅提升了性能,但是它依然存在性能问题,即频繁的轮询,导致频繁的系统调用,同样会消耗大量的CPU资源。可以考虑IO复用模型,去解决这个问题。IO多路复用模型
2021年12月1日
其他

leetcode必备算法:聊聊滑动窗口

}}leetcode提交结果如下:这道题是字节一面真题,大家可以细看一下哈,也可以加我微信(tianluoboy1024),一起讨论一下。--
2021年11月12日
其他

实战!工作中常用到哪些设计模式

使用策略模式如何使用呢?我们借助spring的生命周期,使用ApplicationContextAware接口,把对用的策略,初始化到map里面。然后对外提供resolveFile方法即可。/**
2021年10月27日
其他

生产问题分析!delete in子查询不走索引?!

account,然后逐行执行子查询判断条件是否满足;显然,这个执行计划和我们预期不符合,因为并没有走索引。但是如果把delete换成select,就会走索引。如下:为什么select
2021年9月29日
其他

工作总结!日志打印的15个建议

我们日常开发中,如果核心或者逻辑复杂的代码,建议添加详细的注释,以及较详细的日志。日志要多详细呢?脑洞一下,如果你的核心程序哪一步出错了,通过日志可以定位到,那就可以啦。--
2021年9月22日
其他

聊聊spring事务失效的12种场景,太坑了

大家好,我是捡田螺的小男孩。前言对于从事java开发工作的同学来说,spring的事务肯定再熟悉不过了。在某些业务场景下,如果一个请求中,需要同时写入多张表的数据。为了保证操作的原子性(要么同时成功,要么同时失败),避免数据不一致的情况,我们一般都会用到spring事务。确实,spring事务用起来贼爽,就用一个简单的注解:@Transactional,就能轻松搞定事务。我猜大部分小伙伴也是这样用的,而且一直用一直爽。但如果你使用不当,它也会坑你于无形。今天我们就一起聊聊,事务失效的一些场景,说不定你已经中招了。不信,让我们一起看看。一
2021年9月9日
其他

可怕,原来 HTTPS 也没用

HTTPS,访问的域名信息也是裸奔状态。你上班期间访问小电影网站,都留下了痕迹,若接入了公司网络,就自然而然被抓个正着。除了域名是裸奔外,其实还有更严重的风险,那就是中间人攻击。中间人攻击前面也提到
2021年9月3日
其他

2W字!梳理50道经典计算机网络面试题(收藏版)

在交互过程中如果数据传送完了,还不想断开连接怎么办,怎么维持?这个问题记住keep-alive就好,也就是说,在HTTP中响应体的Connection字段指定为keep-alive即可10.
2021年8月2日
其他

看一遍就理解:order by详解

索引树取数据,继续放到sort_buffer内存中,排序后,也把这些数据写入到磁盘临时小文件中。继续循环,直到取出所有满足条件的数据。最后把磁盘的临时排好序的小文件,合并成一个有序的大文件。TPS:
2021年6月15日
其他

框架篇:分布式一致性解决方案

前言上一篇架构篇:分布式理论CAP、BASE[1],我们了解到分布式存在的问题以及大致的解决理论,但是具体的实现协议或者方案有哪些?分布式一致性分布式共识算法paoxs、Raft、zab分布式事务一致性分布式事务一致性的实现方案(XA模式和AT模式)两阶段提交三阶段提交柔性事务TCCAT模式事件通知一起交流,加我微信回复:加群1
2021年6月8日
其他

异步编程利器:CompletableFuture详解

}}//输出当前线程名称:ForkJoinPool.commonPool-worker-1上个任务执行完啦,还把捡田螺的小男孩传过来666关注了多个任务组合处理AND组合关系thenCombine
2021年6月6日
其他

面试必备:4种经典限流算法讲解

最近,我们的业务系统引入了Guava的RateLimiter限流组件,它是基于令牌桶算法实现的,而令牌桶是非常经典的限流算法。本文将跟大家一起学习几种经典的限流算法。公众号:捡田螺的小男孩限流是什么?维基百科的概念如下:In
2021年5月31日
其他

25种代码坏味道总结+优化示例

(过大的类)一个类做太多事情,维护了太多功能,可读性变差,性能也会下降。举个例子,订单相关的功能你放到一个类A里面,商品库存相关的也放在类A里面,积分相关的还放在类A里面...反例如下:Class
2021年5月17日
其他

使用Redis,你必须知道的21个注意要点

前言最近在学习Redis相关知识,看了阿里的redis开发规范,以及Redis开发与运维这本书。分使用规范、有坑的命令、项目实战操作、运维配置四个方向,整理了使用Redis的21个注意点,希望对大家有帮助,一起学习哈公众号:「捡田螺的小男孩」1、Redis的使用规范1.1、
2021年3月23日
其他

七种方案!探讨Redis分布式锁的正确使用姿势

false;}这个方案的优点是,巧妙移除expire单独设置过期时间的操作,把「过期时间放到setnx的value值」里面来。解决了方案一发生异常,锁得不到释放的问题。但是这个方案还有别的缺点:
2021年3月7日
其他

MySQL索引底层:B+树详解

前言当我们发现SQL执行很慢的时候,自然而然想到的就是加索引。对于范围查询,索引的底层结构就是B+树。今天我们一起来学习一下B+树哈~公众号:「捡田螺的小男孩」树简介、树种类B-树、B+树简介B+树插入B+树查找B+树删除B+树经典面试题树的简介树的简介树跟数组、链表、堆栈一样,是一种数据结构。它由有限个节点,组成具有层次关系的集合。因为它看起来像一棵树,所以得其名。一颗普通的树如下:树是包含n(n为整数,大于0)个结点,
2021年2月16日
其他

并发环境下,先操作数据库还是先操作缓存?

通过数据库的「binlog」来「异步淘汰key」,以mysql为例 可以「使用阿里的canal将binlog日志采集发送到MQ队列」里面,然后「通过ACK机制 确认处理」
2020年10月24日
其他

一文读懂线程池的工作原理(故事白话文)

「线程池」IT部门成立后,雇佣了几个与公司有正式合同关系的员工a,b,c,「小田螺」管他们几个正式员工做「核心线程」。当老板提一个需求过来,小田螺就把需求分配给「手上没活干」的线程处理...
2020年10月22日
其他

线程池到底设置多少线程比较合适?

❝作者:只会一点java来源:https://www.cnblogs.com/dennyzhangdd/p/6909771.html❞目录一、抛出问题二、分析三、实际应用四、总结:抛出问题关于如何计算并发线程数,一般分两派,来自两本书,且都是好书,到底哪个是对的?问题追踪后,整理如下:「第一派:《Java
2020年9月3日
其他

凉了!张三同学没答好「进程间通信」,被面试官挂了....

脚本时,能使用一个管道搞定的事情,就不要多用一个管道,这样可以减少创建子进程的系统开销。我们可以得知,对于匿名管道,它的通信范围是存在父子关系的进程。因为管道没有实体,也就是没有管道文件,只能通过
2020年8月3日
其他

漫画:星球入侵之策略模式

这么简单分布式ID生成服务,真的有必要搞一个个人珍藏的80道多线程并发面试题(1-10答案解析)图解什么是一致性哈希算法Nginx
2020年8月2日
其他

卧槽!原来 IOC 这么简单

了解了基本的使用后,有人说IOC就是控制反转,讲到这里你还没将控制反转?好!别急接下来就是细讲我们常说的控制反转。控制反转在理解控制反转之前我们首先要清楚控制是指什么?反转又反转了什么?1.
2020年8月1日
其他

分布式ID生成服务,真的有必要搞一个

生成的场景确实挺多。比如业务要做幂等的时候,如果没有合适的业务字段去做唯一标识,那就需要单独生成一个唯一的标识,这个场景相信大家不陌生。很多时候为了图方便可能就是写一个简单的
2020年7月29日
其他

个人珍藏的80道多线程并发面试题(1-10答案解析)

前言个人珍藏的80道Java多线程/并发经典面试题,因为篇幅太长,现在先给出1-10的答案解析哈,后面一起完善,并且上传github哈~❝https://github.com/whx123/JavaHome❞「公众号:捡田螺的小男孩」1.
2020年7月28日
其他

Nginx 从入门到实践,万字详解!

}}反向代理还有一些其他的指令,可以了解一下:proxy_set_header:在将客户端请求发送给后端服务器之前,更改来自客户端的请求头信息;proxy_connect_timeout:配置
2020年7月26日
其他

图解什么是一致性哈希算法

救兵来了由于S3宕机了,因此管理员增加了一台机器S5,代理层再次调整N=4,此时又将出现类似于阶段二的数据迁移,仍然会出现CacheMiss的情况。5.一致性哈希算法先来看看维基百科的英文定义:in
2020年7月23日
其他

抛出这8个问题,检验一下你到底会不会ThreadLocal,来摸个底~

0、问题和Synchronized的区别存储在jvm的哪个区域真的只是当前线程可见吗会导致内存泄漏么为什么用Entry数组而不是Entry对象你学习的开源框架哪些用到了ThreadLocalThreadLocal里的对象一定是线程安全的吗笔试题一、概述1、官方术语
2020年7月22日
其他

YGC问题排查,又让我涨姿势了!

client包进行定制化开发时不小心引入的,很显然没有经过仔细测试,并且刚好在我们上线前一天发布到了中央仓库中,而公司基础组件库的版本是通过super-pom方式统一维护的,业务无感知。7.
2020年7月21日
其他

程序员必备基础:加签验签

「验签」:接收方拿到原始报文和数字签名后,用「同一个Hash函数」从报文中生成摘要A。另外,用对方提供的公钥对数字签名进行解密,得到摘要B,对比A和B是否相同,就可以得知报文有没有被篡改过。
2020年7月19日
其他

用好Jackson,操作Json节省一半时间

Mode方式解析JSON,全程无脑操作,除了一些特别复杂的JSON,或者只取JSON中的一部分,千万不要用这种二B方式解析JSON。正确的方式是将JSON直接转为对象。我这里演示一下解析的方式
2020年7月15日
其他

图解!24张图彻底弄懂九大常见数据结构!

树可以衍生出许多的结构,若将指针域设置为双指针,那么即可形成最常见的二叉树,即每个结点最多有两个子树的树结构。二叉树根据结点的排列和数量还可进一度划分为完全二叉树、满二叉树、平衡二叉树、红黑树等。
2020年7月11日