自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 线上服务挂了 3 分钟

在一个风和日丽的下午,刚打算饮茶,线上就开始报警了,一看情况网关报 500 了。。网关(用的是Spring Cloud Gateway)挂了可还行,这可是对外的们,门没了岂不是所有请求都进不来了!说好的动态调度扩缩容负载均衡呢??怎么没支棱起来?

2023-08-03 16:09:42 231

原创 百万QPS系统如何设计?

分析miss缓存的请求后,我们发现主要的业务来源是评论,其大部分请求的返回是“无关系”,即评论场景会查询大量陌生人的关注关系,那么空哨兵会特别多且大部分不会被二次访问到(对于一个用户而言,空哨兵的数量可以认为是他看的评论用户数),这也就能对单kv结构缓存的表现做出合理解释了。极端情况下,还可能会遇到写入冲突问题:比如某个时间点用户A关注了用户B,”同时“用户B关注了用户A,此时就可能会引发一些意想不到的数据错误(因为单向关注和互关是两个不同的属性,任一方的关注行为都会影响这个属性)。

2023-07-30 16:30:17 471

原创 别再分库分表了,试试TiDB!

数据库发展至今已经有3代了:SQL,传统关系型数据库,例如 MySQLnoSQL,例如 MongoDB,RedisnewSQL。

2023-07-30 16:29:08 358

原创 从 7 分钟到 10 秒,Mybatis 批处理太强了!

这个时候我兴高采烈的收工了,直到过了一两天,导师问我,考虑过这个业务的性能嘛,后续量大了可能每天有十多万笔数据,问我现在每天要多久,我才发现 0.0 两三万条数据插入居然要7分钟(不完全是这个问题导致这么慢,还有Oracle插入语句的原因,下面会描述),,哈哈,笑不活了,简直就是Bug制造机,我就开始思考为什么会这么慢,肯定是批处理没生效,我就思考为什么会没生效?这里会判断是否是事务环境,不是的话会强制提交,如果是事务环境的话,这个commit设置force值是无效的,这个在前面的官网截图中有提到。

2023-07-27 20:45:22 233

原创 18 张图,总结 Java 容器化的最佳实践~

经过上面的一些测试后会发现, 在很多文章或文档中描述的参数出现了莫名其妙不好使的情况;这主要是因为容器化这两年一个很重要的更新:Cgroups v2;限于篇幅问题这里不在一一罗列测试截图, 下面仅说一下结论.基于 Spring Boot + MyBatis Plus + Vue 3.2 + Vite + Element Plus 实现的前后端分离博客,包含后台管理系统,支持文章、分类、标签管理、仪表盘等功能。GitHub 地址:https://github.com/weiwosuoai/WeBlog。

2023-07-27 20:44:34 103

原创 SpringBoot 快速实现IP地址解析

如果使用本地ip 解析的话,我们将会借助ip2region,该项目维护了一份较为详细的本地ip 地址对应表,如果为了离线环境的使用,需要导入该项目依赖,并指定版本,不同版本的方法可能存在差异。官方gitee:gitee.com/lionsoul/ip…

2023-07-26 17:10:17 623

原创 IntelliJ IDEA 2023.2 新版本,拥抱 AI

该服务将作为产品用户的您透明地连接到不同的大语言模型 (LLM),并在许多 JetBrains 产品中启用特定的 AI 驱动功能。IDE 将生成注释的静态已知部分(例如@paramJava 中的标签),AI 将为您生成实际的文档文本。生成式人工智能和大型语言模型正在迅速改变软件开发工具的格局,将这项技术集成到我们的产品中的决定对我们来说是理所当然的。单击它将您的更改的差异发送到 LLM,这将生成一条描述您的更改的提交消息。未来,我们计划将其扩展到更多提供商,让我们的用户能够获得最佳的选项和模型。

2023-07-26 17:09:09 1139 1

原创 九种分布式ID解决方案,总有一款适合你!

1、UUID2、数据库自增ID2.1、主键表2.2、ID自增步长设置3、号段模式5、雪花算法6、美团(Leaf)7、百度(Uidgenerator)8、滴滴(TinyID)总结比较。

2023-07-25 16:50:31 147

原创 数据脱敏的 3 种常见方案,好用到爆!

数据脱敏插件,目前支持地址脱敏、银行卡号脱敏、中文姓名脱敏、固话脱敏、身份证号脱敏、手机号脱敏、密码脱敏 一个是正则脱敏、另外一个根据显示长度脱敏,默认是正则脱敏,可以根据自己的需要配置自己的规则。mybatisplus 的新作,可以测试使用,生产需要收费。根据定义的策略类型,对数据进行脱敏,当然策略可以自定义。可参考:海强 / sensitive-plus。MYSQL(电话号码,身份证)数据脱敏的实现。3、Appliation启动类。4、配置类,自定义脱敏策略。

2023-07-25 16:48:42 1770

原创 面试官:Feign第一次调用为什么会很慢?

首先要了解 Feign 是如何进行远程调用的,这里面包括,注册中心、负载均衡、FeignClient 之间的关系,微服务通过不论是 eureka、nacos 也好注册到服务端,Feign 是靠 Ribbon 做负载的,而 Ribbon 需要拿到注册中心的服务列表,将服务进行负载缓存到本地,然后 FeignClient 客户端在进行调用,大概就是这么一个过程。GitHub 地址:https://github.com/weiwosuoai/WeBlog。

2023-07-24 17:45:57 227

原创 求求你们别再用 kill -9 了,这才是 Spring Boot 停机的正确方式!!!

则是等待应用关闭,执行阻塞操作,有时候也会出现无法关闭应用的情况(线上理想情况下,是bug就该寻根溯源)总之,进程强行终止会带来数据丢失或者终端无法恢复到正常状态,在分布式环境下还可能导致数据不一致的情况。再谈为了提醒明知故犯(在一坑里迭倒两次不是不多见),由于业务系统中大量使用了。则是为jvm中增加一个关闭的钩子,当jvm关闭的时候调用。指令,然而它的使用也有些讲究,要思考如何能做到优雅停机。可以模拟了一次系统宕机,系统断电等极端情况,而。,关闭jvm时触发对应的handle。

2023-07-24 17:44:41 76

原创 Java编程教程-Java Swing 教程

Java Swing 教程是 Java Foundation Classes (JFC) 的一部分,用于创建基于窗口的应用程序。它建立在 AWT (Abstract Windowing Toolkit) API 的基础上,完全使用 Java 编写。与 AWT 不同,Java Swing 提供了平台无关和轻量级的组件。

2023-07-23 14:56:23 553

原创 弃用 Nginx 后,成了最受欢迎 Web 服务器!来看看它有多牛逼。。

为什么要再建一个代理有了这些保证,我们可以更多地关注我们的服务更改将如何与其他服务或客户来源进行交互。我们能够以更高的节奏开发功能,而不用背负内存安全和难以诊断崩溃的问题。当崩溃确实发生时,工程师需要花时间来诊断它是如何发生的以及是什么原因造成的。自 Pingora 创立以来,我们已经处理了数百万亿个请求,至今尚未因为我们的服务代码而崩溃。事实上,Pingora 崩溃是如此罕见,当我们遇到一个问题时,我们通常会发现不相关的问题。最近,我们的服务开始崩溃后不久,我们发现了一个内核错误。

2023-07-23 14:55:11 119

原创 一行 log 日志,结果引发了 P1 的线上事故

来源:juejin.cn/post/7156439842958606349线上事故回顾情景还原源码分析JavaBeanSerizlier序列化原理序列化流程图示例代码代码规范三个频率高的序列化的情况前段时间同事新增了一个特别简单的功能,晚上上线前review代码时想到公司拼搏进取的价值观临时他加一行 log 日志,觉得就一行简单的日志基本上没啥问题,结果刚上完线后一堆报警,赶紧回滚了代码,找到问题删除了添加日志的代码,重新上线完毕。

2023-07-22 17:24:53 37

原创 多账号统一登录(实现方案)

来源:www.dustyblog.cn一、 自建的登陆体系1.2 引入第三方账户方案二、 优化账号体系2.1 原账号体系分析2.2 新的账号体系三、 一键登陆3.1 背景3.2 本机号码认证四、小结现在几乎大部分的App都支持使用多个第三方账号进行登录,如:微信、QQ、微博等,我们把此称为多账号统一登陆。而这些账号的表设计,流程设计至关重要,不然后续扩展性贼差。本文不提供任何代码实操,但是梳理一下博主根据我司账号模块的设计,提供思路,仅供参考。

2023-07-22 17:23:37 107

原创 瞧瞧别人家的API接口,那叫一个优雅

在实际工作中,我们需要经常跟第三方平台打交道,可能会对接第三方平台API接口,或者提供API接口给第三方平台调用。那么问题来了,如果设计一个优雅的API接口,能够满足:安全性、可重复调用、稳定性、好定位问题等多方面需求?今天跟大家一起聊聊设计API接口时,需要注意的一些地方,希望对你会有所帮助。

2023-07-19 18:19:37 961

原创 让人恶心的多线程代码,性能怎么优化!

Java 中最烦人的,就是多线程,一不小心,代码写的比单线程还慢,这就让人非常尴尬。通常情况下,我们会使用 ThreadLocal 实现线程封闭,比如避免 SimpleDateFormat 在并发环境下所引起的一些不一致情况。其实还有一种解决方式。通过对parse方法进行加锁,也能保证日期处理类的正确运行,代码如图。

2023-07-19 18:18:40 1003

原创 原来count(*)是接口性能差的真凶

最近我在公司优化过几个慢查询接口的性能,总结了一些心得体会拿出来跟大家一起分享一下,希望对你会有所帮助。我们使用的数据库是Mysql8,使用的存储引擎是Innodb。这次优化除了优化索引之外,更多的是在优化count(*)。通常情况下,分页接口一般会查询两次数据库,第一次是获取具体数据,第二次是获取总的记录行数,然后把结果整合之后,再返回。查询具体数据的sql,比如是这样的:`它没有性能问题。却存在性能差的问题。为什么会出现这种情况呢?

2023-07-18 20:43:43 101

原创 一次SQL调优 聊一聊 SQLSERVER 数据页

一般来说,对大块资源或者数据进行高效管理都会按照一定粒度来划分的,比如说 Windows 对内存的管理就是按照内存页 (4k)来进行划分,言外之意就是 SQLSERVER 对 mdf 的管理也是按照数据页 (8k)来划分的,画个图大概就是这样的。那如何来验证这个结论呢?刚才也说了数据都在数据页上,我们弄点数据然后在指定的数据页上提取出来就好了,这里用的是。GOGOGO。

2023-07-18 20:42:29 236

原创 秒懂 23 种设计模式!有点污,但真得秒啊...

跟 MM 交往时,一定要注意她的状态哦,在不同的状态时她的行为会有不同,比如你约她今天晚上去看电影,对你没兴趣的 MM 就会说 “有事情啦”,对你不讨厌但还没喜欢上的 MM 就会说 “好啊,不过可以带上我同事么?MM 最爱听的就是「我爱你」这句话了,见到不同地方的 MM,要能够用她们的方言跟她说这句话哦,我有一个多种语言翻译机,上面每种语言都有一个按键,见到 MM 我只要按对应的键,它就能够用相应的语言说出「我爱你」这句话了,国外的 MM 也可以轻松搞掂,这就是我的「我爱你」builder。

2023-07-17 20:35:33 75

原创 Spring Boot + minio 实现高性能存储服务,So Easy~!

MinIO是根据GNU Affero通用公共许可证v3.0发布的高性能对象存储。它与Amazon S3云存储服务兼容。使用MinIO构建用于机器学习,分析和应用程序数据工作负载的高性能基础架构。官网地址:文档地址:# 一. 使用docker 搭建minio 服务GNU / Linux和macOSwindowsMINIO_ROOT_USER:为用户keyMINIO_ROOT_PASSWORD:为用户密钥以上搭建的都是单机版的。想要了解分布式 的方式请查看官网文档。

2023-07-17 20:34:19 201

原创 为什么说IO密集型业务,线程数是CPU数的2倍?

如果I/O请求的速度比较快,和CPU的耗时对等的时候,我们把处理I/O的线程数,设置成 CPU 的 2倍,是合理的。但现实中并没有这么多如果,我们要处理秒成千上万的I/O请求,注定了它的耗时要比CPU多的多。对于一个Tomcat来说,它处理的大多数都是I/O密集型的业务,可以说是最好的实践场景。大部分I/O请求,在发起之后,就进入等待状态,这个等待状态不会浪费CPU,所以一台机器在同一时刻支持的I/O请求,可以很多。I/O请求不仅仅指的是磁盘读写,在互联网服务中更多指的是网络I/O请求。

2023-07-16 16:45:09 283

原创 如何用 Python 批量循环读取 Excel ?

所以,使用下面的代码可以实现自动读取当前文件夹下全部CSV数据,并将每个CSV赋给不同的变量。模块来循环遍历当前文件夹中的 CSV 文件,然后使用 Pandas 的。那如何自动读取当前文件夹下全部CSV数据,并将每个CSV赋给不同的变量。模块,可以实现将当前文件夹下的所有csv批量读取,并且合并到一个大的。当然,类似的方法还可以应用于读取Excel的不同sheet,例如假设。,但是这样依旧不够完美,调用的时候依旧需要手动从列表中提取。如果想要将每一个csv独立的进行读取,可以使用。中的每个元素都是一个。

2023-07-16 16:44:28 1843

原创 告别混乱代码:SpringBoot 后端接口规范

因为 HTTP 协议是无状态的,Token 的设计方案是用户在客户端使用用户名和密码登录后,服务器会给客户端返回一个 Token,并将 Token 以键值对的形式存放在缓存(一般是 Redis)中,后续客户端对需要授权模块的所有操作都要带上这个 Token,服务器端接收到请求后进行 Token 验证,如果 Token 存在,说明是授权的请求。如果在缓存中的签名失效的情况下,有人使用同一个 URL 再次访问,则会被时间戳超时机制拦截,这就是为什么要求 sign 的超时时间要设定为跟时间戳的超时时间一致。

2023-07-15 20:01:03 217

原创 53 张图详解防火墙的 55 个知识点

防火墙( Firewall )是防止火灾发生时,火势烧到其它区域,使用由防火材料砌的墙。后来这个词语引入到了网络中,把从外向内的网络入侵行为看做是火灾,防止这种入侵的策略叫做防火墙。后来,防火墙不但用于防范外网,例如:对企业内网的 DoS 攻击或非法访问等,也开始防范从内部网络向互联网泄露信息、把内部网络作为攻击跳板等行为。硬件防火墙可以实现CIA的机密性完整性可用性( Availability )这三种类型的对应策略。小企业会在局域网和互联网的边界部署防火墙。代理服务器是应用网关防火墙的一种。

2023-07-15 19:58:05 202

原创 支付系统就该这么设计(万能通用),稳的一批!

支付永远是一个公司的核心领域,因为这是一个有交易属性公司的命脉。那么,支付系统到底长什么样,又是怎么运行交互的呢?抛开带有支付牌照的金融公司的支付架构,下述链路和系统组成基本上符合绝大多数支付场景。其实整体可以看成是交易核心+支付核心 两个大系统。交易系统关联了业务场景和底层支付,而支付系统完成了调用支付工具到对账清算等一系列相关操作。下面我们就来一起看下各个系统的核心组成和交互。

2023-07-14 18:17:04 270

原创 如何设计一个 70w 在线人数的弹幕系统 ?

最终该服务在双十二活动中,在Redis出现短暂故障的背景下,高效且稳定的支撑了70w用户在线,成功完成了既定的目标。

2023-07-14 18:15:16 93

原创 一台服务器最大能支持多少条 TCP 连接

我们知道一条ESTABLISH状态的连接大约消耗【3.3KB内存】,那么通过计算得知一台4GB内存的服务器,【可以建立100w+的TCP连接】(当然这里只是计算所有的连接都只建立连接但不发送和处理数据的情况,如果真实场景中有数据往来和处理(数据接收和发送都需要申请内存,数据处理便需要CPU),那便会消耗更高的内存以及占用更多的CPU,并发不可能达到100w+)如果因为hard nofile参数值设置的低,那么soft nofile参数的值设置的再高也没有用,实际生效的值会按照二者最低的来。

2023-07-13 19:32:11 830 1

原创 HashMap 为什么不能一边遍历一遍删除

这里其实很简单,原因是我们的遍历操作底层确实是通过迭代器进行的,但是我们的 remove 等操作是通过直接操作 map 进行的,如上例子:map.put(4, "AA");这里 modCount 是表示 map 中的元素被修改了几次(在移除,新加元素时此值都会自增),而 expectedModCount 是表示期望的修改次数,在迭代器构造的时候这两个值是相等,如果在遍历过程中这两个值出现了不同步就会抛出 ConcurrentModificationException 异常。put 操作可能会抛出该异常。

2023-07-13 19:31:27 68

原创 数据库锁的12连问,抗住!

金三银四很快就要来啦,准备了数据库锁的12连问,相信大家看完肯定会有帮助的。什么是死锁?死锁是指两个或多个事务在同一资源上相互占用,并请求锁定对方的资源,从而导致恶性循环的现象。如何防止死锁?尽量约定固定的顺序访问表,因为交叉访问更容易造成事务等待回路。尽量避免大事务,建议拆成多个小事务。因为大事务占用的锁资源越多,越容易出现死锁。降低数据库隔离级别,比如RR降低为RC,因为RR隔离级别,存在GAP锁,死锁概率大很多。死锁与索引是密不可分的,合理优化你的索引,死锁概率降低。

2023-07-12 17:58:42 142

原创 关于无感刷新 Token,我是这样子做的

JWT是全称是,是一个开放标准,用于将各方数据信息作为JSON格式进行对象传递,可以对数据进行可选的数字加密,可使用RSA或ECDSA进行公钥/私钥签名。

2023-07-12 17:56:34 134

原创 完了完了完了!线上发生 OOM 了!

面对 OOM 问题如果代码不是有明显的问题,下面几个JVM参数相当有用,尤其是在容器化之后。另外提一个参数也很有用,正常来说如果程序出现 OOM 之后,就是有代码存在内存泄漏的风险,这个时候即使能对外提供服务,其实也是有风险的,可能造成更多的请求有问题,所以该参数非常有必要,可以让 K8S 快速的再拉起来一个实例。另外,针对这两个非常类似的问题,对于 SQL 语句,如果监测到没有where条件的全表查询应该默认增加一个合适的limit作为限制,防止这种问题拖垮整个系统。

2023-07-11 19:44:07 81

原创 面试官:从 MySQL 读取 100w 数据进行处理,应该怎么做?问倒一大片!

分库分表场景下,单个表的查询结果集虽然不大,但如果某个查询跨了多个库多个表,又要做结果集的合并、排序等动作,依然有可能撑爆内存;当查询百万级的数据的时候,还可以使用游标方式进行数据查询处理,不仅可以节省内存的消耗,而且还不需要一次性取出所有数据,可以进行逐条处理或逐条取出部分批量处理。如果没有流式查询,我们想要从数据库取 100w 条记录而又没有足够的内存时,就不得不分页查询,而分页查询效率取决于表设计,如果设计的不好,就无法执行高效的分页查询。流式查询:内存会保持稳定,不会随着记录的增长而增长。

2023-07-11 19:42:59 297

原创 系统调用和API有什么区别?

这是发动机给你提供的api,当你想让汽车前进时只需要将其挂到“D”档位,然后轻踩油门就可以前进了,当你挂挡时你根本就不需要关心汽油是怎么进到发动机的,进到发动机的油量有多少,这些油量被点燃后会产生多少热量,进而会产生多少推力,这些推力又是怎样作用到车轮上等等。同样的你的代码有一个很棒的功能模块,恰好我也想使用这个模块,但我又懒的去看你的代码,我只想使用你的代码,不像去关心实现细节,你想了想把所有的功能封装在了几个函数上,这几个函数就是这个功能模块对外提供的API。原因是很显而易见的,为了安全。

2023-07-10 20:47:05 260

原创 面试官:从 MySQL 读取 100w 数据进行处理,应该怎么做?问倒一大片!

分库分表场景下,单个表的查询结果集虽然不大,但如果某个查询跨了多个库多个表,又要做结果集的合并、排序等动作,依然有可能撑爆内存;当查询百万级的数据的时候,还可以使用游标方式进行数据查询处理,不仅可以节省内存的消耗,而且还不需要一次性取出所有数据,可以进行逐条处理或逐条取出部分批量处理。如果没有流式查询,我们想要从数据库取 100w 条记录而又没有足够的内存时,就不得不分页查询,而分页查询效率取决于表设计,如果设计的不好,就无法执行高效的分页查询。流式查询:内存会保持稳定,不会随着记录的增长而增长。

2023-07-10 20:46:04 2872

原创 系统上线前,SQL脚本的9大坑

系统上线时,非常容易出问题。即使之前在测试环境,已经执行过SQL脚本了。但是有时候,在系统上线时,在生产环境执行相同的SQL脚本,还是有可能出现一些问题。有些小公司,SQL脚本是开发自己执行的,有很大的风险。有些大厂,有专业的DBA把关,但DBA也不是万能的,还是有可能会让一些错误的SQL脚本被生产环境执行了,比如:update语句的顺序不对。今天跟大家一起聊聊,系统上线时SQL脚本的9大坑,以便于大家吸取教训,能够防微杜渐,希望对你会有所帮助。

2023-07-09 17:00:42 175

原创 为什么 Python、Go 和 Rust 都不支持三元运算符?

三元运算符通常指的是“?condition?,如果 condition 为真,则取 expression1,若不为真,则取 expression2。语法简化形式“a?b : c”,可以读成“如果 a 条件成立,则为 b,否则为 c”。三元运算符是对普通一重 if-else 结构的简化,常用于在一条语句中同时实现条件判断和取值操作。// 常规 if-elseresult = x;// 简化后的写法x : y;

2023-07-09 16:59:45 82

原创 一行代码搞定Http请求,强得离谱~

在Java的世界中,Http客户端之前一直是Apache家的HttpClient占据主导,但是由于此包较为庞大,API又比较难用,因此并不使用很多场景。而新兴的OkHttp、Jodd-http固然好用,但是面对一些场景时,学习成本还是有一些的。对于 Android App来说,OkHttp 现在几乎已经占据了所有的网络请求操作,对于服务器端请求外部接口也是必备的选择。是一套处理 HTTP 网络请求的依赖库,由 Square 公司设计研发并开源,目前可以在 Java 和 Kotlin 中使用。

2023-07-08 19:14:20 107

原创 MySQL 字段为 NULL 的5大坑,99%人踩过

本文我们讲了当某列为NULL时可能会导致的 5 种问题:丢失查询结果、导致空指针异常和增加了查询的难度。因此在最后提倡大家在创建表的时候尽量设置的约束,如果某列确实没有值,可以设置空值('')或 0 作为其默认值。

2023-07-08 19:12:49 439

原创 为什么感觉学完C/C++后写不出有用的东西?

当然,这些基础设施的实现也是有相当的难度的,不管是理论上还是工程上,就以操作系统来说,现在在理论上依然有宏内核与微内核的争论,工程实践上Linux内核进化也几乎永不停息,依然在开发中。在这种情况下我们只能把目光从基础设施转移到应用程序上,这里更加贴近我们的日常生活,比如写一个小程序、开发一个网站等,而在这些场景下其它语言的确更有优势,原因很简单,这可比从一个个小塑料块从头搭建快多啦,但我想没有任何一个人在用大模块快速搭建出汽车模型的同时会觉得一个个的小塑料块不重要没什么用,很简单,

2023-07-07 20:26:14 128

空空如也

空空如也

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

TA关注的人

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