51CTO首页
AI.x社区
博客
学堂
精品班
软考社区
免费课
企业培训
鸿蒙开发者社区
WOT技术大会
IT证书
公众号矩阵
移动端
短视频
免费课程
课程排行
直播课
软考学堂
全部课程
厂商认证
IT技术
25年5月软考
PMP项目管理
免费题库
在线学习
文章
资源
问答
课堂
专栏
直播
51CTO
鸿蒙开发者社区
51CTO技术栈
51CTO官微
51CTO学堂
51CTO博客
CTO训练营
鸿蒙开发者社区订阅号
51CTO软考
51CTO学堂APP
51CTO学堂企业版APP
鸿蒙开发者社区视频号
51CTO软考题库
鸿蒙开发者社区
首页
帖子
问答
资源
课堂
直播
发现
登录/注册
51CTO
中国优质的IT技术网站
51CTO博客
专业IT技术创作平台
51CTO学堂
IT职业在线教育平台
活动
短视频
专栏
极客Show
鸿蒙技术特刊
我的关注
全部帖子
操作系统
OpenHarmony
HarmonyOS
其他
应用开发
卡片开发
三方库
IDE
其他
设备开发
海思开发板
树莓派
其他
框架语言
C/C++
Java
JavaScript
ArkUI / eTS
其他
其他
物联网
云原生
数据库
操作系统
大数据
人工智能
开发语言
其他
社区版务
社区公告
社区生活
意见反馈
社区规则
社区活动
默认
发布时间
热度
原创
精华
热门标签
鸿蒙
HarmonyOS NEXT
华为
没想到,为了一个限流我写了1万字!(三)
填充令牌的逻辑如下:拿到当前的时间,然后去掉毫秒数,得到的就是秒级时间判断时间小于这里就是为了控制每秒丢一次令牌然后就是coolDownTokens去计算我们的冷启动预热是怎么计算填充令牌的后面计算当前剩下的令牌数这个就不说了,减去上一次消耗的就是桶里剩下的令牌protectedvoidsyncToken(longpassQps){longcurrentTimeTimeUtil.currentTimeMillis();去掉当前时间的毫秒currentTimecurrentTimecurrentTime%1000;longoldLastF...
wg204wg
0回复
5385浏览
限流
又碰到一个奇葩的BUG,注意标题
最近线上发生了一个问题,同事找我说有个用户名字不对,正则验证不通过。于是我就去数据库查询看了下这个用户的名字信息,就长这个样子。没仔细看好像没啥问题啊,但是认真看了两遍发现好像不太对,怎么这个字这么宽呢?我靠,这塔喵的是好像是全角啊!具体原因就是因为插入的名字是全角的,导致其他地方调用接口取名字用正则判断不通过。修复这个问题很简单,重新用半角的字体更新一下名字就可以了,另外前端是有校验的,后端...
wg204wg
0回复
4555浏览
Java
拿捏!隔离级别、幻读、Gap Lock、Next-Key Lock(一)
前面我写了很多Mysql相关的知识点,到这一篇稍微可以串一下了,从SQL执行流程、MVCC到锁,很多时候可能觉得对于间隙锁和NextKeyLock好像已经理解了,但是好像又觉得理解差那么一点意思,这篇文章从头来梳理一下概念,明确一下这些知识。锁首先,对于Mysql来说实现了两种行级锁:共享锁:允许事务读一行数据,一般记为S,也称为读锁排他锁:允许事务删除或者更新一行数据,一般记为X,也称为写锁关于读写锁的互斥性,应该都很清...
wg204wg
0回复
6572浏览
Mysql
没想到,为了一个限流我写了1万字!(一)
限流作为现在微服务中常见的稳定性措施,在面试中肯定也是经常会被问到的,我在面试的时候也经常喜欢问一下你对限流算法知道哪一些?有看过源码吗?实现原理是什么?第一部分先讲讲限流算法,最后再讲讲源码的实现原理。限流算法关于限流的算法大体上可以分为四类:固定窗口计数器、滑动窗口计数器、漏桶(也有称漏斗,英文Leakybucket)、令牌桶(英文Tokenbucket)。固定窗口固定窗口,相比其他的限流算法,这应该是最简单的一种...
wg204wg
0回复
6022浏览
限流
没想到,为了一个限流我写了1万字!(二)
privateintcalculateTimeIdx(ValidlongtimeMillis){longtimeIdtimeMilliswindowLengthInMs;Calculatecurrentindexsowecanmapthetimestamptotheleaparray.return(int)(timeId%array.length());}protectedlongcalculateWindowStart(ValidlongtimeMillis){returntimeMillistimeMillis%windowLengthInMs;}publicWindowWrap<T>currentWindow(longtimeMillis){当前时间如果小于0,返回空if(timeMillis<0){returnnull;}计算时间窗口的...
wg204wg
0回复
5094浏览
限流
拿捏!隔离级别、幻读、Gap Lock、Next-Key Lock(二)
搞一张表说明一下,user表有4个字段,id是主键索引,name是唯一索引,age是普通索引,city没有索引,然后插入一些测试数据,下面区分一下几种情况来说明是怎么加NextKeyLock的,然后就知道为啥会没有幻读的问题了。没有索引更新语句updateusersetcity'nanjing'wherecity'wuhan'会发生什么?因为city是没有索引的,所以存储引擎只能给所有的记录都加上锁,然后把数据都返回给Server层,然后Server层把city改成nanjing,再更新数...
wg204wg
0回复
4728浏览
Mysql
听说你对explain 很懂?(二)
MATERIALIZED物化子查询是Mysql对子查询的优化,第一次执行子查询时会将结果保存到临时表,物化子查询只需要执行一次。比如上述DERIVED就是物化的一种体现,与之对应的就是DEPENDENT,每次子查询都需要重新调用。这个结果无法直观的看出来,可以用FORMATJSON命令查看materializedfromsubquery字段。table显示表名,从上述的一些图中可以观察到UNIONRESULT和DERIVED显示的表名都有一些自己的命名规则。比如UNIONRESULT产生的是<u...
wg204wg
0回复
5722浏览
explain
面试官:你说说一条查询SQL的执行过程?
为了理解这个问题,先从Mysql的架构说起,对于Mysql来说,大致可以分为3层架构。第一层作为客户端和服务端的连接,连接器负责处理和客户端的连接,还有一些权限认证之类。比如客户端通用用户名密码连接到Mysql服务器,还有对于数据库表的执行权限。第二层是核心层,基本上Mysql大部分的核心功能都在这一层,包括查询缓存、解析器、优化器之类,比如SQL解析、优化、索引选择,到最后生成执行计划。第三层则是存储引擎了,Mysql通...
wg204wg
0回复
5297浏览
Mysql
索引下推,这个点你肯定不知道!
索引下推(IndexConditionPushdown)ICP是Mysql5.6之后新增的功能,主要的核心点就在于把数据筛选的过程放在了存储引擎层去处理,而不是像之前一样放到Server层去做过滤。虽然这是一个比较简单的概念,但是可能很多不细心的同学对于索引下推会存在一个小小的误区,至于是什么,请看下文。什么是索引下推首先,我们创建一张user表,同时建立agename的联合索引,同时插入3条测试数据。然后,我们执行查询explainSELECTfromuserwhere...
wg204wg
0回复
4971浏览
Java
听说你对explain 很懂?(一)
explain所有人都应该很熟悉,通过它我们可以知道SQL是如何执行的,虽然不是100%管用,但是至少大多数场景通过explain的输出结果我们能直观的看到执行计划的相关信息。早一些的版本explain还只能查看select语句,现在已经能支持delete,update,insert,replace了。刚开始我想写这个的时候只是因为这个东西经常性不用就忘记,写了发现其实这个东西真的挺麻烦的,要把每个场景都整出来麻烦的很。id查询编号,如果没有子查询或者联...
wg204wg
0回复
4319浏览
explain
一个单例还能写出花来吗?(一)
单例可以说是最简单的一个设计模式了,单例模式要求只能创建一个对象实例。通常的写法是声明私有的构造函数,提供静态方法获取单例的对象实例。常见的单例写法就是饿汉式、懒汉式、双重加锁验证、静态内部类和枚举的方式,写法可能大家都知道,不过针对不同的写法还是有可以继续深挖一下的地方,让我们从最简单的几种写法开始回顾单例,不想看前面的话直接往后翻好了。回顾几种实现方式饿汉式饿汉式的写法通常静态成员变量已经...
wg204wg
0回复
5462浏览
Java
一个单例还能写出花来吗?(二)
为了看到更详细的内容,我们执行javapcSingleton。通过最终生成的字节码,我们其实发现本质上枚举的初始化通过static代码块来进行初始化。考虑下类加载的几个步骤,加载>验证>准备>解析>初始化,最终初始化就是执行static代码块,而static代码块是绝对线程安全的,只能由JVM来调度,这样保证了线程安全。枚举的实现方式好处还不止于此,除了一目了然的实现简单之外,还能防止其他几种实现方式避免不了的几个问题。再说几种方式...
wg204wg
0回复
4636浏览
Java
男人要慢,SQL要快:记一次慢SQL优化
问题这是一个线上问题,从日志平台查询到的SQL执行情况,该SQL执行的时间为11.146s,可以认定为是一个慢查询,美化后的SQL如下:先找到这个表的定义以及索引情况如下:可见,主要有两个联合索引:status,toaccountid和status,fromaccountid问题分析我们先用explain查看执行计划:先看看explain的含义吧。id:没什么就是ID而已,如果没有子查询的话,通常就一行。selecttype:大致分为简单查询和复杂查询两类,复杂查询又分为简...
wg204wg
0回复
5587浏览
MySQL
听说你对explain 很懂?(三)
eqref通常通过主键索引或者唯一索引查询时会看到eqref,它最多只返回一条数据。userid是唯一索引,为了测试就关联以下主键索引。ref也是通过索引查找,但是和eqref不同,ref可能匹配到多条符合条件的数据,比如最左前缀匹配或者不是主键和唯一索引。最简单的办法,随便查一个普通索引就可以看到。fulltext使用FULLTEXT索引refornull和ref类似,但是还要进行一次查询找到NULL的数据。这相当于是对于ISNULL查询的优化,如果表数据...
wg204wg
0回复
4846浏览
explain
为什么数据库字段要使用NOT NULL?(一)
最近刚入职新公司,发现数据库设计有点小问题,数据库字段很多没有NOTNULL,对于强迫症晚期患者来说,简直难以忍受,因此有了这篇文章。基于目前大部分的开发现状来说,我们都会把字段全部设置成NOTNULL并且给默认值的形式。通常,对于默认值一般这样设置:整形,我们一般使用0作为默认值。字符串,默认空字符串时间,可以默认1970010108:00:01,或者默认0000000000:00:00,但是连接参数要添加zeroDateTimeBehaviorconvertToNul...
wg204wg
0回复
5168浏览
Mysql
Arm多个开源项目从GitHub迁移到GitLab
根据GitLab官网消息,ArmOpenSource已决定将公司的多个开源项目从GitHub迁移到GitLab。GitLab概述了ArmOpenSource选择其平台的重要原因:最大化选择和成本效益,最小化供应商锁定。Arm所创建的软件扮演着赋能件(enablementpieces)的角色,能够在其架构上集成其他软件。目前超过95%的移动设备都采用Arm处理器,而这些开源项目覆盖从传感器到云计算的诸多领域。Arm公司的杰出工程师和软件社区高级主管AndrewWafaa解释说:“就其...
开源news
0回复
6933浏览
开源
github
开源项目
【修正版】QPS、TPS、RT、并发数、吞吐量理解和性能优化深入思考
吞吐量在了解qps、tps、rt、并发数之前,首先我们应该明确一个系统的吞吐量到底代表什么含义,一般来说,系统吞吐量指的是系统的抗压、负载能力,代表一个系统每秒钟能承受的最大用户访问量。一个系统的吞吐量通常由qps(tps)、并发数来决定,每个系统对这两个值都有一个相对极限值,只要某一项达到最大值,系统的吞吐量就上不去了。QPSQueriesPerSecond,每秒查询数,即是每秒能够响应的查询次数,注意这里的查询是指用户发出...
wg204wg
0回复
1.8w浏览
QPS
TPS
RT
面试官:缓存一致性问题怎么解决?| 文末送书
关于Redis的其他的一些面试问题已经写过了,比如常见的缓存穿透、雪崩、击穿、热点的问题,但是还有一个比较麻烦的问题就是如何保证缓存一致性。对于缓存和数据库的操作,主要有以下两种方式。先删缓存,再更新数据库先删除缓存,数据库还没有更新成功,此时如果读取缓存,缓存不存在,去数据库中读取到的是旧值,缓存不一致发生。解决方案延时双删延时双删的方案的思路是,为了避免更新数据库的时候,其他线程从缓存中读取不到...
wg204wg
0回复
1.3w浏览
Redis
《我想进大厂》之分布式事务篇(二)
SAGASaga源于1987年普林斯顿大学的Hecto和Kenneth发表的如何处理longlivedtransaction(长活事务)论文。主要思想就是将长事务拆分成多个本地短事务。如果全部执行成功,就正常完成了,反之,则会按照相反的顺序依次调用补偿。SAGA模式有两种恢复策略:向前恢复,这个模式偏向于一定要成功的场景,失败则会进行重试向后恢复,也就是发生异常的子事务依次回滚补偿由于这个模式在国内基本没看见有谁用的,不在赘述。消息队列基于...
wg204wg
0回复
6263浏览
事务
不管卷不卷,面试还是得问问你G1原理!
所有的垃圾回收器的目的都是朝着减少STW的目的而前进,G1(GarbageFirst)回收器的出现颠覆了之前版本CMS、Parallel等垃圾回收器的分代收集方式,从2004年Sun发布第一篇关于G1的论文后,直到2012年JDK7发布更新版本,花了将近10年的时间G1才达到商用的程度,而到JDK9发布之后,G1成为了默认的垃圾回收器,CMS也变相地相当于被淘汰了。G1结构G1抛弃了之前的分代收集的方式,面向整个堆内存进行回收,把内存划分为多个大小相等的独...
wg204wg
0回复
5783浏览
G1
暂无内容
1
127
128
129
130
131
132
133
134
135
151
精选
客服
订阅鸿蒙技术特刊,精选内容抢先看
微信扫码关注,即刻订阅