三分恶

其他

如何防止重复下单?

redissonClient.getBucket(RedisConstant.PLACE_ORDER_LOCK_KEY+reqVO.getRequestId());
2022年7月25日
其他

我有 7种 实现web实时消息推送的方案,7种!

我有一个朋友~做了一个小破站,现在要实现一个站内信web消息推送的功能,对,就是下图这个小红点,一个很常用的功能。不过他还没想好用什么方式做,这里我帮他整理了一下几种方案,并简单做了实现。什么是消息推送(push)推送的场景比较多,比如有人关注我的公众号,这时我就会收到一条推送消息,以此来吸引我点击打开应用。消息推送(push)通常是指网站的运营工作等人员,通过某种工具对用户当前网页或移动设备APP进行的主动消息推送。消息推送一般又分为web端消息推送和移动端消息推送。上边的这种属于移动端消息推送,web端消息推送常见的诸如站内信、未读邮件数量、监控报警数量等,应用的也非常广泛。在具体实现之前,咱们再来分析一下前边的需求,其实功能很简单,只要触发某个事件(主动分享了资源或者后台主动推送消息),web页面的通知小红点就会实时的+1就可以了。通常在服务端会有若干张消息推送表,用来记录用户触发不同事件所推送不同类型的消息,前端主动查询(拉)或者被动接收(推)用户所有未读的消息数。消息推送无非是推(push)和拉(pull)两种形式,下边我们逐个了解下。短轮询轮询(polling)应该是实现消息推送方案中最简单的一种,这里我们暂且将轮询分为短轮询和长轮询。短轮询很好理解,指定的时间间隔,由浏览器向服务器发出HTTP请求,服务器实时返回未读消息数据给客户端,浏览器再做渲染显示。一个简单的JS定时器就可以搞定,每秒钟请求一次未读消息数接口,返回的数据展示即可。setInterval(()
2022年7月22日
其他

如何防止订单重复支付?

大家好,我是老三,想必大家对在线支付都不陌生,今天和大家聊聊如何防止订单重复支付。关注公众号「三分恶」,回复「666」,领取七百多页独家原创面试手册!面渣逆袭手册看看订单支付流程我们来看看,电商订单支付的简要流程:订单钱包支付流程从下单/计算开始:下单/结算:这一步虽然不是直接的支付起点,但是支付相关的金额等等信息都来自结算,此时订单的状态是未支付申请支付:用户选择申请支付,客户端调用支付服务,此时在系统内产生一笔支付流水,这笔流水的状态是未支付发起支付:支付服务调用三方支付,通常这种钱包类的支付,在发起支付这一步,会响应一些支付的链接,客户端会对链接进行对应的处理。钱包支付:用户进行支付,通常是通过对应的钱包进行的,大家可以回忆一下自己在购物中,支付的过程,不同的端,对钱包支付的处理是不太一样的:京东PC端支付页APP端:
2022年7月11日
其他

面渣逆袭:Redis连环五十二问!三万字+八十图详解!

大家好,我是老三,面渣逆袭系列继续,这节我们来搞定Redis——不会有人假期玩去了吧?不会吧?基础1.说说什么是Redis?Redis图标Redis是一种基于键值对(key-value)的NoSQL数据库。比一般键值对数据库强大的地方,Redis中的value支持string(字符串)、hash(哈希)、
2022年5月5日
其他

面渣逆袭:Spring三十五问,四万字+五十图详解!建议收藏!

}}BeanRegister.java对象注册器,这里用于单例bean的缓存,我们大幅简化,默认所有bean都是单例的。可以看到所谓单例注册,也很简单,不过是往HashMap里存对象。public
2022年4月19日
其他

面渣逆袭:RocketMQ二十三问

逆袭:基础1.为什么要使用消息队列呢?消息队列主要有三大用途,我们拿一个电商系统的下单举例:解耦:引入消息队列之前,下单完成之后,需要订单服务去调用库存服务减库存,调用营销服务加营销数据……引入消息队列之后,可以把订单完成的消息丢进队列里,下游服务自己去调用就行了,这样就完成了订单服务和其它服务的解耦合。消息队列解耦异步:订单支付之后,我们要扣减库存、增加积分、发送消息等等,这样一来这个链路就长了,链路一长,响应时间就变长了。引入消息队列,除了更新订单状态,其它的都可以异步去做,这样一来就来,就能降低响应时间。消息队列异步削峰:消息队列合一用来削峰,例如秒杀系统,平时流量很低,但是要做秒杀活动,秒杀的时候流量疯狂怼进来,我们的服务器,Redis,MySQL各自的承受能力都不一样,直接全部流量照单全收肯定有问题啊,严重点可能直接打挂了。我们可以把请求扔到队列里面,只放出我们服务能处理的流量,这样就能抗住短时间的大流量了。消息队列削峰解耦、异步、削峰,是消息队列最主要的三大作用。2.为什么要选择RocketMQ?市场上几大消息队列对比如下:四大消息队列对比总结一下:选择中间件的可以从这些维度来考虑:可靠性,性能,功能,可运维行,可拓展性,社区活跃度。目前常用的几个中间件,ActiveMQ作为“老古董”,市面上用的已经不多,其它几种:RabbitMQ:优点:轻量,迅捷,容易部署和使用,拥有灵活的路由配置缺点:性能和吞吐量不太理想,不易进行二次开发RocketMQ:优点:性能好,高吞吐量,稳定可靠,有活跃的中文社区缺点:兼容性上不是太好Kafka:优点:拥有强大的性能及吞吐量,兼容性很好缺点:由于“攒一波再处理”导致延迟比较高我们的系统是面向用户的C端系统,具有一定的并发量,对性能也有比较高的要求,所以选择了低延迟、吞吐量比较高,可用性比较好的RocketMQ。3.RocketMQ有什么优缺点?RocketMQ优点:单机吞吐量:十万级可用性:非常高,分布式架构消息可靠性:经过参数优化配置,消息可以做到0丢失功能支持:MQ功能较为完善,还是分布式的,扩展性好支持10亿级别的消息堆积,不会因为堆积导致性能下降源码是Java,方便结合公司自己的业务二次开发天生为金融互联网领域而生,对于可靠性要求很高的场景,尤其是电商里面的订单扣款,以及业务削峰,在大量交易涌入时,后端可能无法及时处理的情况RoketMQ在稳定性上可能更值得信赖,这些业务场景在阿里双11已经经历了多次考验,如果你的业务有上述并发场景,建议可以选择RocketMQRocketMQ缺点:支持的客户端语言不多,目前是Java及c++,其中c++不成熟没有在
2022年4月7日
其他

Bean容器生命周期,好像人的一生。。

大家好,我是老三,上节我们手撸了一个简单的IOC容器五分钟,手撸一个Spring容器!,这节我们来看一看Spring中Bean的生命周期,我发现,和人的一生真的很像。简单说说IoC和BeanIoC,控制反转,想必大家都知道,所谓的控制反转,就是把new对象的权利交给容器,所有的对象都被容器控制,这就叫所谓的控制反转。控制反转Bean,也不是什么新鲜玩意儿,它们就是一帮身不由己的Java对象,生命周期受到容器控制。Bean生命周期和人生Bean生命周期四大阶段我们知道,bean的作用域有好几种,这篇文章只讨论完全被IoC容器控制的单例Bean。对于普通的Java对象来说,它们的生命周期就是:实例化对象不再被使用时通过垃圾回收机制进行回收这就像是生活在大自然里的动物,悄然出生,悄然死亡。大象-图片来源网络而对于Spring
2022年3月14日
其他

五分钟,手撸一个Spring容器!

大家好,我是老三,Spring是我们最常用的开源框架,经过多年发展,Spring已经发展成枝繁叶茂的大树,让我们难以窥其全貌。这节,我们回归Spring的本质,五分钟手撸一个Spring容器,揭开Spring神秘的面纱!从什么是IOC开始?Spring——春天,Java编程世界的春天是由一位音乐家——Rod
2022年2月28日
其他

面渣逆袭:二十二图、八千字、二十问,彻底搞定MyBatis!

大家好,我是老三,面渣逆袭系列继续,这节我们的主角是MyBatis,作为当前国内最流行的ORM框架,是我们这些crud选手最趁手的工具,赶紧来看看面试都会问哪些问题吧。基础1.说说什么是MyBatis?MyBatis
2022年2月23日
其他

你有被代理过吗?讲讲开源框架都在用的代理模式

大家好,我是老三。这节我们来看一个非常重要的设计模式——代理模式,尽管我们工作中可能很少用到,但它是很多框架重要功能的基石,肘,我们开始吧。引言节假日的地铁站,你是否见过有人掏出电脑,原地输出,原来是群里被疯狂@……告诉自己不准哭用户提问题,客服@我们解决,可能很多开发同学都经历过这样的场景。用户找到客服,提出问题,客服又找到开发同学,让开发同学去解决问题,开发同学解决完,最后反馈给客服,客服再反馈到用户。站在用户的视角,感觉就是客服解决了这个问题,这其实就是一种代理。用户向客服提问题我们以这个例子,来看看Java怎么实现代理模式的吧。Java的三种代理模式实现代理模式的定义:Provide
2022年2月18日
其他

面渣逆袭:相亲十五问,蚌埠住了!

大家好,我是老三,面渣逆袭系列已经出了好多期。说实话,挺肝的,动不动就是xx五十问、xx六十问,群里都在表示“不要卷了,不要卷了,学不动了。”老三回答:“我不管你学不学得动,我就是要卷。”结果六哥来一句给我破防了:“你啥时候整个相亲六十问?”但是六哥自己过年被问麻了……哈哈哈哈……六六相亲相麻了伤不起,伤不起!话又说回来,要是相亲是场面试,那么面试官常问哪些问题呢?我整理了一些,咱们看看:你多少岁了?你是什么学校毕业的?你在哪工作?工作是干什么的?工资大概多少啊?未来有没有什么打算?有在北京/上海/深圳定居的想法吗?还是回老家?老家是哪的?家里就你一个孩子吗?爸妈是干啥的?你喜欢小孩吗?平时喜欢干什么?喜欢吃什么菜?什么口味?喜欢什么样的女孩子?感觉我怎么样?——哦吼,原来相亲的本质是人口普查……十五问写完,老三的脚已经快扣穿地板了,如果真的有六十问,老三能扣到西半球。成年人的世界有很多不容易,“成家立业”四个字,里面是多少酸甜苦辣!作为普通人,只能且行且努力。最后……各位读者朋友,假如你拥有爱情,恭喜你,祝福你!白头偕老,美满幸福!假如你还在路上,那么祝愿我们,拿到心仪岗位邀约、通过面试考验、收获甜蜜Offer!假如你有更多故事,欢迎找我交流!
2022年2月7日
其他

面渣逆袭:计算机网络六十二问,三万字图文详解!速收藏!

大家好,我是老三,开工大吉,虎年第一篇,面渣逆袭系列继续!这次给大家带来了计算机网络六十二问,三万字,七十图详解,大概是全网最全的网络面试题。建议大家收藏了慢慢看,新的一年一定能够跳槽加薪,虎年“豹”富!基础1.说下计算机网络体系结构计算机网络体系结构,一般有三种:OSI
2022年2月7日
其他

面渣逆袭:Java基础五十三问,快来看看有没有你不会的!

Machine,Java虚拟机,Java程序运行在Java虚拟机上。针对不同系统的实现(Windows,Linux,macOS)不同的JVM,因此Java语言可以实现跨平台。JRE:Java
2022年1月24日
其他

面渣逆袭:Java并发六十问,图文详解,快来看看你会多少道!

}}上面两种都是没有返回值的,但是如果我们需要获取线程的执行结果,该怎么办呢?实现Callable接口,重写call()方法,这种方式可以通过FutureTask获取任务执行的返回值public
2022年1月13日
其他

面渣逆袭:JVM经典五十问,这下面试稳了!

大家好,我是老三,“面渣逆袭“系列继续,这节我们来搞定JVM。说真的,JVM调优什么的一个程序员可能整个职业生涯都碰不到两次,但是,一旦用到的时候,那就是救命了,而且最重要的是——面试必问,所以,还能怎么办?整!引言1.什么是JVM?JVM——Java虚拟机,它是Java实现平台无关性的基石。Java程序运行的时候,编译器将Java文件编译成平台无关的Java字节码文件(.class),接下来对应平台JVM对字节码文件进行解释,翻译成对应平台匹配的机器指令并运行。Java语言编译运行同时JVM也是一个跨语言的平台,和语言无关,只和class的文件格式关联,任何语言,只要能翻译成符合规范的字节码文件,都能被JVM运行。JVM跨语言内存管理2.能说一下JVM的内存区域吗?JVM内存区域最粗略的划分可以分为堆和栈,当然,按照虚拟机规范,可以划分为以下几个区域:Java虚拟机运行时数据区JVM内存分为线程私有区和线程共享区,其中方法区和堆是线程共享区,虚拟机栈、本地方法栈和程序计数器是线程隔离的数据区。1、程序计数器程序计数器(Program
2021年12月29日
其他

面渣逆袭:Java集合连环三十问

大家好,我是老三。上期发布了一篇:面渣逆袭:HashMap追魂二十三问,反响很好!围观群众纷纷表示👇不写,是不可能不写的,只有卷才能维持了生活这样子。当然,我写的这一系列,不是背诵版,是理解版,很多地方都是在讲原理,内容也比较充足,死记硬背很难,大家一定要去理解性地去记忆。这一篇,除了把之前的HashMap一些小错误进行修正,我还把相对“比较”简单的List也给请了进来,帮大家降降曲线,找找信心——用谢,关注点赞就行。😀引言1.说说有哪些常见集合?集合相关类和接口都在java.util中,主要分为3种:List(列表)、Map(映射)、Set(集)。其中Collection是集合List、Set的父接口,它主要有两个子接口:List:存储的元素有序,可重复。Set:存储的元素不无序,不可重复。Map是另外的接口,是键值对映射结构的集合。ListList,也没啥好问的,但不排除面试官剑走偏锋,比如面试官也看了我这篇文章。2.ArrayList和LinkedList有什么区别?(1)数据结构不同ArrayList基于数组实现LinkedList基于双向链表实现(2)多数情况下,ArrayList更利于查找,LinkedList更利于增删ArrayList基于数组实现,get(int
2021年12月13日
其他

面渣逆袭:HashMap追魂二十三问

大家好,我是老三。HashMap作为我们熟悉的一种集合,可以说是面试必考题。简单的使用,再到原理、数据结构,还可以延伸到并发,可以说,就一个HashMap,能聊半个小时。1.能说一下HashMap的数据结构吗?JDK1.7的数据结构是数组+链表,JDK1.7还有人在用?不会吧……说一下JDK1.8的数据结构吧:JDK1.8的数据结构是数组+链表+红黑树。数据结构示意图如下:jdk1.8
2021年12月2日
其他

手写HashMap,快手面试官直呼内行!

手写HashMap?这么狠,面试都卷到这种程度了?第一次见到这个面试题,是在某个不方便透露姓名的Offer收割机大佬的文章:手写HashMap,快手一面卒这……我当时就麻了,我们都知道HashMap的数据结构是数组+链表+红黑树,这是要手撕红黑树的节奏吗?后来,整理了一些面经,发现这道题在快手的面试出现还比较频繁,分析这道题应该在快手的面试题库。那既然频繁出,肯定不能是手撕红黑树——我觉得面试官也多半撕不出来,不撕红黑树,那这道题还有点救,慢慢往下看。认识哈希表HashMap其实是数据结构中的哈希表在Java里的实现。哈希表本质哈希表也叫散列表,我们先来看看哈希表的定义:哈希表是根据关键码的值而直接进行访问的数据结构。就像有人到公司找老三,前台小姐姐拿手一指,那个墙角的工位就是。简单说来说,哈希表由两个要素构成:桶数组和散列函数。桶数组:一排工位散列函数:老三在墙角桶数组我们可能知道,有一类基础的数据结构线性表,而线性表又分两种,数组和链表。哈希表数据结构里,存储元素的数据结构就是数组,数组里的每个单元都可以想象成一个桶(Bucket)。假如给若干个程序员分配工位:蛋蛋、熊大、牛儿、张三,我们观察到,这些名字比较有特色,最后一个字都是数字,我们可以把它提取出来作为关键码,这些一来,就可以把他们分配到对应编号的工位,没分配到的工位就让它先空着。元素映射那么在这种情况下,我们查找/插入/删除的时间复杂度是多少呢?很明显,都是O(1)。但咱们也不是葫芦娃,名字不能都叫一二三四五六七之类的,假如来的新人叫南宫大牛,那我们怎么分配他呢?这就引入了我们的第二个关键要素——散列函数。散列函数我们需要在元素和桶数组对应位置建立一种映射映射关系,这种映射关系就是散列函数,也可以叫哈希函数。例如,我们一堆无规律的名字诸葛钢铁、刘华强、王司徒、张全蛋……我们就需要通过散列函数,算出这些名字应该分配到哪一号工位。散列函数散列函数构造散列函数也叫哈希函数,假如我们数据元素的key是整数或者可以转换为一个整数,可以通过这些常见方法来获取映射地址。直接定址法直接根据key来映射到对应的数组位置,例如1232放到下标1232的位置。数字分析法取key的某些数字(例如十位和百位)作为映射的位置平方取中法取key平方的中间几位作为映射的位置折叠法将key分割成位数相同的几段,然后把它们的叠加和作为映射的位置除留余数法H(key)=key%p(p=
2021年11月23日
其他

面渣逆袭:线程池夺命连环十八问

}线程池特点最大线程数为Integer.MAX_VALUE,也有OOM的风险阻塞队列是DelayedWorkQueuekeepAliveTime为0scheduleAtFixedRate()
2021年11月16日
其他

Executors:为什么阿里不待见我?

阿里巴巴《Java开发手册》最近建了一个技术交流群,里面大厂大佬云集,技术、面试、生活聊的热火朝天,我还会不定期分享精品技术资料,添加微信ThirdFighter,拉你入群。
2021年11月10日
其他

要是以前有人这么讲线程池,我早就该明白了!

大家好,我是老三,很高兴又和大家见面,最近降温,大家注意保暖。这节分享Java线程池,接下来我们一步步把线程池扒个底朝天。引言:老三取钱有一个程序员,他的名字叫老三。老三兜里没有钱,匆匆银行业务办。这天起了一大早,银行姐姐说早安。老三一看柜台空,卡里五毛都取完。直接办理老三这天起的晚,营业窗口都排满。只好进入排队区,摸出手机等空闲。老三排队等待老三睡到上三杆,窗口排队都爆满。经理一看开新口,排队同志赶紧办。排队区满这天业务太火爆,柜台排队都用完。老三一看急上火,经理你说怎么办。窗口,排队都爆满经理挥手一笑间,这种场面已见惯。四种办法来处理,你猜我会怎么办。小小银行不堪负,陈旧系统已瘫痪。我们庙小对不起,谁叫你来找谁办。看你情况特别急,来去队里加个塞。今天实在没办法,不行你看改一天。四种策略对,没错,其实这个流程就和JDK线程池ThreadPoolExecutor的工作流程类似,先卖个关子,后面结合线程池工作流程,保证你会豁然开朗。实战:线程池管理数据处理线程光说不练假把式,show
2021年11月2日
其他

面试官:如何实现扫码登录功能?

二维码在我们这个场景里面是一个重要的媒介,服务端必须给这个数据生成惟一的标识作为二维码ID,同时还应该设置过期的时间。PC端根据二维码ID等数据生成二维码。
2021年10月21日
其他

面试字节,被操作系统问挂了

最短作业优先的抢占式版本,按剩余运行时间的顺序进行调度。当一个新的作业到达时,其整个运行时间与当前进程的剩余时间作比较。如果新的进程需要的时间更少,则挂起当前进程,运行新的进程。否则新的进程等待。
2021年10月2日
其他

华强买瓜•程序员版

最近小破站老给我推“华强买瓜”,整的各种活让我目瞪口呆,突然灵感上来,忍不住整个程序员版的——纯属玩梗,请勿与任何现实挂钩。
2021年9月19日
其他

不就是分布式事务,这下彻底清楚了

在Try阶段,是对业务系统进行检查及资源预览,比如订单和库存操作,需要检查库存剩余数量是否够用,并进行预留,预留操作的话就是新建一个可用库存数量字段,Try阶段操作是对这个可用库存数量进行操作。
2021年9月18日
其他

分布式必备理论基础:CAP和BASE

在分布式系统中,不同的节点分布在不同的子网络中,由于一些特殊的原因,这些子节点之间出现了网络不通的状态,但他们的内部子网络是正常的。从而导致了整个系统的环境被切分成了若干个孤立的区域,这就是分区。
2021年9月16日
其他

缓存一致性?get!

最终一致性强调的是系统中所有的数据副本,在经过一段时间的同步后,最终能够达到一个一致的状态。因此,最终一致性的本质是需要系统保证最终数据能够达到一致,而不需要实时保证系统数据的强一致性。
2021年9月15日
其他

单例模式的七种写法,你都知道吗?

Singleton类被装载时并不会立即实例化,而是在需要实例化时,调用getInstance方法,才会加载静态内部类InnerSingleton类,从而完成Singleton的实例化。
2021年9月13日
其他

十分钟彻底掌握缓存击穿、缓存穿透、缓存雪崩

在了解这三大问题之前,我们要理解,常用的分布式缓存Redis单机并发量能达到万级,常用的关系型数据库MySQL一般并发量是千级,他们支持的并发量可能差十倍,所以要尽可能把流量拦截在缓存层。
2021年9月10日
其他

五分钟搞懂MySQL索引下推

[一文读懂什么是MySQL索引下推(ICP)](https://www.jianshu.com/p/31ceadace535)
2021年9月9日
其他

万字长文|十大基本排序,一次搞定!

它的思路:首先在未排序的序列中找到最小或者最大的元素,放到排序序列的起始位置,然后再从未排序的序列中继继续寻找最小或者最大元素,然后放到已经排序序列的末尾。以此类推,直到所有元素排序完毕。
2021年9月5日
其他

LeetCode通关:连刷三十九道二叉树,刷疯了!四万字长文搞定二叉树,建议收藏!

大家好,我是拿输出博客来督促自己刷题的老三,这一节我们来刷二叉树,二叉树相关题目在面试里非常高频,而且在力扣里数量很多,足足有几百道,不要慌,我们一步步来。我的文章很长,你们
2021年9月3日
其他

LeetCode通关:栈和队列六连,匹配问题有绝招

https://leetcode-cn.com/problems/remove-k-digits/solution/yi-diao-kwei-shu-zi-zhan-by-booooo_-01nh/
2021年8月20日
其他

LeetCode通关:哈希表六连,这个还真有点简单

hashCode右移16位,正好是32bit的一半。与自己本身做异或操作(相同为0,不同为1)。就是为了混合哈希值的高位和地位,增加低位的随机性。并且混合后的值也变相保持了高位的特征。
2021年8月11日
其他

LeetCode通关:数组十七连,真是不简单

这道题的滑动窗口略有区别,上一道题的窗口是活动的,这个是固定的滑动窗口,维护一个长度为k的固定窗口,如果窗口内含有目标值,返回。如果窗口进入新的元素,就需要把头部的元素移除掉,保持窗口的长度。
2021年8月7日
其他

LeetCode通关:求次数有妙招,位运算三连

在处理整型数值时,位运算符可以直接对组成整型数值的各个位进行操作。这些位运算符在位模式下工作。位运算符包括:&、|、~、^
2021年8月3日
其他

LeetCode通关:听说链表是门槛,这就抬脚跨门而入

MyLinkedList();linkedList.addAtHead(1);linkedList.addAtTail(3);linkedList.addAtIndex(1,2);
2021年7月26日
其他

刷算法,这些api不可不知!

如果你在调用了sublist返回了子list之后,如果修改了原list的大小,那么之前产生的子list将会失效,变得不可使用集合工具Collections是集合工具类,提供了一些操作集合的方法。
2021年7月16日
其他

十二张图,踹开消息队列的大门

“程序员单身,不算单身……new个对象的事,能算单身么?”接连着便是什么难懂的话,什么“没有妹子”,什么“哲学”之类,引得众人都哄笑起来,群里充满了快活的空气。
2021年7月8日
其他

假如我是超级躺王

老板也很器重我,他再也不用夜里挠破头想谁该背着个绩效D呢,公司这么稳定的员工不多了,老板应该希望我再接在励吧。有了我每年背着这个绩效D,同事们的工作热情都上涨了不少呢,公司离职率也降低了很多。
2021年7月3日
其他

假如程序员的一天变得无厘头

门口有个星巴克,有个西装革履的白领正细细品着星巴克咖啡,几片泪水飘进了杯子里,白领啜一小口,眉头一皱,又舒展开来——是盐巴,我喝到了加了盐巴的星巴克,掏出了手机,对着杯子一阵猛拍。
2021年6月17日
其他

程序员与年龄:四十岁普通开发、三十五岁首席架构、三十岁基层Leader

淘淘干外包的第三年,他想离开了,不是受不了外包的苦——是太闲了。对,那时候的我厂还像一个国企。领导为了留下他,给他两个承诺:1、一定给他转正;2、让他有活干(??哈哈,不知道他会不会后悔年少无知)。
2021年6月5日
其他

“三次握手,四次挥手”这么讲,保证你忘不了

通过第三次握手的数据告诉服务端,客户端有没有收到服务器“第二次握手”时传过去的数据,以及这个连接的序号是不是有效的。若发送的这个数据是“收到且没有问题”的信息,接收后服务器就正常建立
2021年5月24日
其他

【Redis破障之路】四:Jedis基本使用

Jedis中的方法调用是比较底层的暴露的Redis的API,也即Jedis中的Java方法基本和Redis的API保持着一致,了解Redis的API,也就能熟练的使用Jedis。
2021年5月19日
其他

高并发,我把握不住啊!

Java时代3.0的最大特点就是淘宝开始从商用转为“自研”,开始真正创造自己的核心技术,例如缓存存储引擎Tair,分布式存储系统TFS。搜索引擎iSearch也进行了升级。引入了自研技术的淘宝架构:
2021年5月12日
其他

【Redis破障之路】三:Redis单线程架构

单线程也会有一个问题:对于每个命令的执行时间是有要求的。如果某个命令执行过长,会造成其他命令的阻塞,对于Redis这种高性能的服务来说是致命的,所以Redis是面向快速执行场景的数据库。
2021年4月26日
其他

【Redis破障之路】二:Redis安装和基本数据结构

entries配置(默认128个),同时每个元素的值都小于zset-max-ziplist-value配置(默认64字节)时,Redis会用ziplist来作为有序集合的内部实现,ziplist
2021年4月23日
其他

【Redis破障之路】一:强大的Redis

计数器在网站中的作用至关重要,例如视频网站有播放数、电商网站有浏览数,为了保证数据的实时性,每一次播放和浏览都要做加1的操作,如果并发量很大对于传统关系型数据的性能是一种挑战。Redis天然支持计数
2021年4月20日
其他

MYSQL提升笔记(1):MySQL逻辑架构

深入学习MySQL,从概览MySQL逻辑架构开始。首先来看一下MySQL的逻辑架构图:MySQL逻辑架构MySQL逻辑架构大概可以分为三层:客户端:最上层的服务并不是MySQL所独有的,大多数基于网络的客户端/服务器的工具或者服务都有类似的架构。比如连接处理、授权认证、安全等等。Server层:大多数MySQL的核心服务功能都在这一层,包括查询解析、分析、优化、缓存以及所有的内置函数(例如,日期、时间、数学和加密函数),所有跨存储引擎的功能都在这一层实现:存储过程、触发器、视图等。存储引擎层:第三层包含了存储引擎。存储引擎负责MySQL中数据的存储和提取。Server层通过API与存储引擎进行通信。这些接口屏蔽了不同存储引擎之间的差异,使得这些差异对上层的查询过程透明。值得一提的是在MySQL8.0中取消了查询缓存,大概的理由是查询缓存存在严重的可伸缩性问题,并且很容易成为严重的瓶颈缓存,将缓存移动到客户端能收获更好的性能。MySQL查询缓存通过一条查询语句的执行过程,来了解一些关键的部件:mysql>
2021年4月13日
其他

【JVM进阶之路】七:垃圾收集器盘点

在前面,我们已经了解了JVM的分代收集,知道JVM垃圾收集在新生代主要采用标记-复制算法,在老年代主要采用标记-清除和标记-整理算法。接下来,我们看一看JDK默认虚拟机HotSpot的一些垃圾收集器的实现。1、常见垃圾回收器首先来看一下JDK
2021年3月30日