微观技术

其他

25 张图 | Xxl-Job 源码总结!

}}XxlJobSpringExecutor这个类的作用,后面会着重讲通过@XxlJob指定一个名为TestJob的任务,这个任务名需要跟前面页面配置的对应上@Componentpublic
2023年12月1日
其他

24 个常见的 Docker 疑难杂症处理技巧

中的进程,都没有。这种情况的可能原因是容器启动之后,主机因任何原因重新启动并且没有优雅地终止容器。剩下的文件现在阻止你重新生成旧名称的新容器,因为系统认为旧容器仍然存在。#
2023年10月25日
其他

聊聊 13 种锁的实现方式

问题,我们可以引入递增版本号来解决。6、独享锁独享锁,也有人叫它排他锁。无论读操作还是写操作,只能有一个线程获得锁,其他线程处于阻塞状态。缺点:读操作并不会修改数据,而且大部分的系统都是
2022年8月5日
其他

阿里面试题 | 进一线大厂,可下载 pdf

也非常喜欢结交朋友,维护一个技术交流群,经常帮群内的朋友大厂内推、技术答疑、职场分析。你可以扫描下方的二维码,加他好友,受微信限制,坑位不多,感兴趣的朋友请抓紧时间,围观朋友圈,做个点赞之交
2022年7月11日
其他

聊聊异步编程的 7 种实现方式

Future,可以在任务执行完毕之后得到任务执行结果。当然也提供了其他功能,如:取消任务、查询任务是否完成等Future类位于java.util.concurrent包下,接口定义:public
2022年7月1日
其他

阿里一面:SQL 优化有哪些技巧?

等操作index:索引全表扫描,此时遍历整个索引树ALL:表示全表扫描,需要遍历全表来找到对应的行possible_keys:可能用到的索引key:实际用到的索引key_len:索引长度ref:关联
2022年5月10日
其他

朋友们,想去一线大厂?卷起来...

大家好,我是Tom哥计算机研究生,校招进阿里,P7技术专家,出过专利,CSDN博客专家。负责过电商交易、社区团购、流量营销、金融等业务,多年一线团队管理经验。多年的大厂浸染,参加多次淘宝双11大促活动,在系统架构方面有丰富经验。为了帮助大家更好的冲击一线互联网大厂,以及日常的架构研发工作能得心应手。Tom哥花了一年多时间,将后端各个领域知识做了分门别类,并对每个分类下的核心技术做了提炼总结,都是面试官喜欢问的。希望能为各位小伙伴的升职加薪助上一臂之力。
2022年4月11日
其他

聊聊高可用的 11 个关键技巧

大家好,我是Tom哥大型互联网架构设计,讲究一个四件套组合拳玩法,高并发、高性能、高可用、高扩展。如果能掌握这四个方面,应付大厂面试以及日常工作中的架构方案设计基本不是什么难题。今天,Tom哥就带大家学习下高可用都有哪些设计技巧?一、系统拆分有句古话
2022年4月7日
其他

聊聊缓存

地址是有可能能够提供多份不同版本的资源,比如,一段文字的不同语言版本,一个文件的不同编码格式版本,一份数据的不同压缩方式版本,等等。因此针对请求的缓存机制,也必须能够提供对应的支持。为此,HTTP
2022年4月4日
其他

京东二面:高并发设计,都有哪些技术方案?

"双拳难敌四手,恶虎还怕群狼",现在早已经是分布式时代,靠的是shu量取胜,也称之为水平伸缩方案这么多的系统,如何流量调度,这里的第一道入口就是负载均衡负载均衡,它的职责是将网络请求
2022年3月31日
其他

腾讯三面:40亿个QQ号码如何去重?

大家好,我是Tom哥今天,我们来聊一道常见的考题,也出现在腾讯面试的三面环节,非常有意思。具体的题目如下:文件中有40亿个QQ号码,请设计算法对QQ号码去重,相同的QQ号码仅保留一个,内存限制1G.
2022年3月29日
其他

10 张图搞懂服务注册发现机制

大家好,我是Tom哥在微服务架构或分布式环境下,服务注册与发现技术不可或缺,这也是程序员进阶之路必须要掌握的核心技术之一,本文通过图解的方式带领大家轻轻松松掌握。引入服务注册与发现组件的原因先来看一个问题,假如现在我们要做一个商城项目,作为架构师的你应该怎样设计系统的架构?你心里肯定在想:这还不容易直接照搬淘宝的架构不就行了。但在现实的创业环境中一个项目可能是九死一生,如果一开始投入巨大的人力和财力,一旦项目失败损失就很大。作为一位有经验的架构师需要结合公司财力、人力投入预算等现状选择最适合眼下的架构才是王道。大型网站都是从小型网站发展而来,架构也是一样。任何一个大型网站的架构都不是从一开始就一层不变的,而是随着用户量和数据量的不断增加不断迭代演进的结果。在架构不断迭代演进的过程中我们会遇到很多问题,技术发展的本质就是不断发现问题再解决问题,解决问题又发现问题。单体架构在系统建立之初可能不会有特别多的用户,将所有的业务打成一个应用包放在tomcat容器中运行,与数据库共用一台服务器,这种架构一般称之为单体架构。在初期这种架构的效率非常高,根据用户的反馈可以快速迭代上线。但是随着用户量增加,一台服务的内存和CPU吃紧,很容易造成瓶颈,新的问题来了怎么解决呢?应用与数据分离随着用户请求量增加,一台服务器的内存和CPU持续飙升,用户请求响应时间变慢。这时候可以考虑将应用与数据库拆开,各自使用一台服务器,你看问题又解决了吧。突然有一天扫地阿姨不小心碰了电线,其中一台服务器掉电了,用户所有的请求都报错,随之而来的是一系列投诉电话。集群部署单实例很容易造成单点问题,比如遇到服务器故障或者服务能力瓶颈,那怎么办?聪明的你肯定想到了,用集群呀。集群部署是指将应用部署在多个服务器或者虚机上,用户通过服务均衡随机访问其中的一个实例,从而使多个实例的流量均衡,如果一个实例出现故障可以将其下线,其他实例不受影响仍然可以对外提供服务。随着用户数量快速增加,老板决定增加投入扩大团队规模。开发团队壮大后效率并没有得到显著的提高,以前小团队可以一周迭代上线一次,现在至少需要两到三周时间。业务逻辑越来越复杂,代码间耦合很严重,修改一行代码可能引入几个线上问题。架构师意识到需要进行架构重构。微服务架构当单体架构演进到一定阶段后开发测试的复杂性都会成本增加,团队规模的扩大也会使得各自工作耦合性更严重,牵一发而动全身就是这种场景。单体架构遇到瓶颈了,微服务架构就横空出世了。微服务就是将之前的单体服务按照业务维度进行拆分,拆分粒度可大可小,拆分时机可以分节奏进行。最佳实践是先将一些独立的功能从单体中剥离出来抽成一个或多个微服务,这样可以保障业务的连续性和稳定性。如上图将一个商用应用拆分为六个独立微服务。六个微服务可以使用Docker容器化进行多实例部署。架构演化到这里遇到了一个难题,如果要查询用户所有的订单,用户服务可能会依赖订单服务,用户服务如何与订单服务交互呢?订单服务有多个实例该访问哪一个?通常有几种解决办法:(1)服务地址硬编码服务的地址写死在数据库或者配置文件,通过访问DNS域名进行寻址路由。服务B的地址硬编码在数据库或者配置文件中,服务A首先需要拿到服务B的地址,然后通过DNS服务器解析获取其中一实例的真实地址,最后可以向服务B发起请求。如果遇到大促活动需要对服务实例扩容,大促完需要对服务实例进行下线,运维人员要做大量的手工操作,非常容易误操作。(2)服务动态注册与发现服务地址硬编码还有一个非常致命的问题,如果一台实例挂了,运维人员可能不能及时感知到,导致一部分用户的请求会异常。引入服务注册与发现组件可以很好解决上面遇到的问题,避免过多的人工操作。架构演进总结在单体架构中一个应用程序就是一个服务包,包内的模块通过函数方法相互调用,模型足够简单,根本没有服务注册和发现一说。在微服务架构中会将一个应用程序拆分为多个微服务,微服务会部署在不同的服务器、不同的容器、甚至多数据中心,微服务间要相互调用,服务注册和发现成为了一个不可或缺的组件。服务注册与发现基本原理服务注册与发现是分为注册和发现两个关键的步骤。服务注册:服务进程在注册中心注册自己的元数据信息。通常包括主机和端口号,有时还有身份验证信息,协议,版本号,以及运行环境的信息。服务发现:客户端服务进程向注册中心发起查询,来获取服务的信息。服务发现的一个重要作用就是提供给客户端一个可用的服务列表。服务注册服务注册有两种形式:客户端注册和代理注册。客户端注册客户端注册是服务自己要负责注册与注销的工作。当服务启动后注册线程向注册中心注册,当服务下线时注销自己。这种方式的缺点是注册注销逻辑与服务的业务逻辑耦合在一起,如果服务使用不同语言开发,那需要适配多套服务注册逻辑。代理注册代理注册由一个单独的代理服务负责注册与注销。当服务提供者启动后以某种方式通知代理服务,然后代理服务负责向注册中心发起注册工作。这种方式的缺点是多引用了一个代理服务,并且代理服务要保持高可用状态。服务发现服务发现也分为客户端发现和代理发现。客户端发现客户端发现是指客户端负责向注册中心查询可用服务地址,获取到所有的可用实例地址列表后客户端根据负载均衡算法选择一个实例发起请求调用。这种方式非常直接,客户端可以控制负载均衡算法。但是缺点也很明显,获取实例地址、负载均衡等逻辑与服务的业务逻辑耦合在一起,如果服务发现或者负载平衡有变化,那么所有的服务都要修改重新上线。代理发现代理发现是指新增一个路由服务负责服务发现获取可用的实例列表,服务消费者如果需要调用服务A的一个实例可以直接将请求发往路由服务,路由服务根据配置好的负载均衡算法从可用的实例列表中选择一个实例将请求转发过去即可,如果发现实例不可用,路由服务还可以自行重试,服务消费者完全不用感知。心跳机制如果服务有多个实例,其中一个实例出现宕机,注册中心是可以实时感知到,并且将该实例信息从列表中移出,也称为摘机。如何实现摘机?业界比较常用的方式是通过心跳检测的方式实现,心跳检测有主动和被动两种方式。被动检测是指服务主动向注册中心发送心跳消息,时间间隔可自定义,比如配置5秒发送一次,注册中心如果在三个周期内比如说15秒内没有收到实例的心跳消息,就会将该实例从列表中移除。上图中服务A的实例2已经宕机不能主动给注册中心发送心跳消息,15秒之后注册就会将实例2移除掉。主动检测是注册中心主动发起,每隔几秒中会给所有列表中的服务实例发送心跳检测消息,如果多个周期内未发送成功或未收到回复就会主动移除该实例。一定要点击👇🏻的
2022年3月28日
其他

京东二面:MySQL 主从延迟,读写分离 7 种解决方案

要求非常高,比如金融类业务。我们可以在客户端代码标记下,让查询强制走主库。二、从库延迟查询由于主从库之间数据同步需要一定的时间间隔,那么有一种策略是延迟从从库查询数据。比如:select
2022年3月24日
自由知乎 自由微博
其他

10000字 | 深入理解 OpenFeign 的架构原理

地址:"study/studytime/member/list/test/{id}"@RestController@RequestMapping("study/studytime")public
2022年3月22日
其他

【故障演练】 Redis Cluster集群,当master宕机,主从切换,客户端报错 timed out

clusterConfiguration.setMaxRedirects(redisProperties.getCluster().getMaxRedirects());
2022年3月19日
其他

淘宝超时确认收货 是 如何实现?

redisMessageListenerContainer.setConnectionFactory(redisConnectionFactory);
2022年3月17日
其他

不会一致性hash算法,劝你简历别写搞过负载均衡

大家好,我是Tom哥这两天看到技术群里,有小伙伴在讨论一致性hash算法的问题,正愁没啥写的题目就来了,那就简单介绍下它的原理。下边我们以分布式缓存中经典场景举例,面试中也是经常提及的一些话题,看看什么是一致性hash算法以及它有那些过人之处。构建场景假如我们有三台缓存服务器编号node0、node1、node2,现在有3000万个key,希望可以将这些个key均匀的缓存到三台机器上,你会想到什么方案呢?我们可能首先想到的方案,是取模算法hash(key)%
2022年3月16日
其他

【万字长文】电商系统架构, 常见的 9 个大坑 | 库存超卖、重复下单、物流单ABA...

大家好,我是Tom哥~做为一名程序员,发展方向大致可以分为两个方面:一个是业务架构,一个是技术架构(中间件方向)。业务架构,取其核心关键词,主要是围绕这不同的业务场景、业务规则,完成业务系统的落地建设,为用户提供在线化的信息服务。既然说到业务,那方向可就多了去了,如:出行、外卖、充电宝、O2O、内容、社交、生鲜、电商,不同的业务有不同的特点。面对这么多的业务域,有没有通用技术经验可以抽取,让我们可以以一应百。这里,首推电商业务,电商系统的复杂性很高,对高并发、高性能、高可用、高扩展,等方面要求很高。你在其他业务中可能遇到的问题,在电商系统中基本都会遇到。作为开发,希望自己成为某几个业务领域的技术专家,最好能先精通电商领域,有很强的借鉴意义。对于你后续拓展熟悉其他业务领域的个性化玩法有很大帮助。那么,电商领域的技术架构有哪些常见问题?一、避免重复下单用户快速点了两次
2022年3月15日
其他

Mybatis 源码解读,引入 9 种设计模式

transactionFactory.newTransaction(environment.getDataSource(),
2022年3月14日
其他

干货总结!Kafka 面试大全(万字长文,37 张图,28 个知识点)

默认提供的分区策略。轮询策略有非常优秀的负载均衡表现,它总是能保证消息最大限度地被平均分配到所有分区上,故默认情况下它是最合理的分区策略,也是平时最常用的分区策略之一。(2)随机策略也称
2022年3月11日
其他

京东一面:MySQL 主备延迟有哪些坑?主备切换策略

场景一客户端读、写,访问的是主库主库通过某种机制,将数据实时同步给备库当主库突然发生故障(如:磁盘损坏等),无法正常响应客户端的请求。此时会自动主备切换,进入
2022年3月9日
其他

生产故障|Kafka消息发送延迟达到几十秒的罪魁祸首竟然是...

表示连接被客户端主动关闭。那为什么客户端会主动关闭心跳呢?心跳处理的套路就是客户端需要定时向服务端发送心跳包,服务端在指定时间内没有收到或处理心跳包,则会超时。要想一探究竟,唯一的办法:阅读源码
2022年3月8日
其他

聊聊并发编程的10个坑

大家好,我是Tom哥前言对于从事后端开发的同学来说,并发编程肯定再熟悉不过了。说实话,在java中并发编程是一大难点,至少我是这么认为的。不光理解起来比较费劲,使用起来更容易踩坑。不信,让继续往下面看。今天重点跟大家一起聊聊并发编程的10个坑,希望对你有帮助。1.
2022年3月7日
其他

一下说出了 Redis 16 个常见使用场景,惊呆面试官!

的一些业务场景,(文末有技术书免费送~)1、缓存String类型例如:热点数据缓存(例如:报表、明星出轨),对象缓存、全页缓存、可以提升热点数据的访问数据。2、数据共享分布式String
2022年3月4日
其他

消息队列经典十连问

的数据,是分散放在多个机器上的,每个机器就放一部分数据。有些伙伴可能有疑问,每个partition放一部分数据,如果对应的broker挂了,那这部分数据是不是就丢失了?那还谈什么高可用呢?Kafka
2022年3月1日
其他

阿里二面:外部接口大量超时,把整个系统拖垮,引发雪崩!如何解决?熔断...

时代,业务数字化已经蔓延到你能想到的各个行业。各种业务功能、营销玩法越来越多,系统也越来越复杂。面对不断复杂的业务系统,脑子越来越不够用了于是
2022年2月25日
其他

领域驱动设计(DDD)中简单易用的10种技巧

大家好,我是Tom哥~领域驱动设计(DDD),因非常适合与微服务进行配合而闻名,因《领域驱动设计》那本书的难懂而让人望而却步。其实《领域驱动设计》这本书讲的是:以领域为核心,在代码中体现领域的思想,开发人员和领域专家要紧密沟通。这也侧面给出了公司划分组织结构的建议。开始之前,我要声明一点:领域驱动设计不是万能药,它适合于实时系统,而对于分析汇总的场景,则不必使用领域驱动设计。技术是在进步的,现在大家对领域驱动设计抽象的越来越好。今天就来总结一下领域驱动设计简单易用的技巧。首先声明一下:提到的技巧不一定是领域驱动设计提出来的,但是这些技巧可以帮助我们更好的进行领域驱动设计。限界上下文画架构图尽量简单易懂。但是项目本身很复杂怎么办呢?那就要按问题域划分子域。每一个子领域架构是很简单的,想看到全貌可以将它们之间的关联形成上下文地图。这就是限界上下文的作用。DDD建议区分场景来划分子领域,通过依赖接口而不是具体实现解耦。使用微服务实现限界上下文中的低耦合。微服务不是简单的拆分,而是对设计提出了更高的要求。举个常用的例子:SOA架构中建议进行数据库操作单独提供服务进行,使用方通过接口依赖实现低耦合。这个思想和DDD的思想异曲同工:DDD建议将领域对象与数据库映射,把数据表的增删改查采用接口调用实现。底层数据表结构的修改对上层屏蔽。这就是将软件对象进行持久化操作,并且形成独立的限界上下文。DDD还要求数据库表设计以领域模型为核心,并且推荐不要在sql中进行join操作,而是通过逻辑层来进行,让表与表之间的关系直接转化为软件对象之间的关系。如果看到这里你还是觉得限界上下文很抽象,不用担心,其他的技巧就是来帮忙咱们划分独立的子领域。聚合与聚合根聚合体现的是整体与部分的关系。部分与整体有相同的生命周期。一旦将对象间的关系设计成聚合,外部对象只能访问“聚合根”。充血模型就是一种聚合的实现。我在《CURD系统怎么做出技术含量--怎样引导面试》里用实例介绍过充血模型。白话来说,就是一个普通的POJO,如:“人”对象,里面有对应属性,如姓、名、年龄、学历、出生年月。贫血模型中“人”对象只包含可以通过lombok自动生成的方法。而充血模型则可以包含由各个属性组成的一个完整简历的方法,或者是直接返回星座的方法。外部只能通过这些方法,也就是“聚合根”来操作“人”这个对象,不能直接访问其内部属性。因为部分和整体有相同的生命周期,意味着人这个对象被销毁,它的属性和方法也同时消失。DDD工厂与装载DDD工厂与设计模式中的工厂有较大的差别。设计模式中的工厂,是将被调用方设计成一个接口下的多个实现,并装配到工厂中。工厂负责通过key值找到对应的实现类,创建出来,返回给调用方。这样就降低了调用方与被调用方的耦合度。DDD工厂是通过工厂创建领域对象,作为对象生命周期的起点。它的核心在于装配这个环节,比如订单工厂需要将订单对象是要将订单概述、订单明细统一封装到订单对象中。举个例子:漫画中的超级英雄在设计模式工厂中,工厂创建出来的时候可能是个小菜鸟,在业务逻辑运行过程中,他可能会需要升级打怪才变成超级英雄。而在DDD工厂中,工厂会负责给超级英雄披上钢铁侠的盔甲,装配好美国队长的盾牌。他从工厂里出来就可以拯救世界了。DDD仓库DDD工厂和DDD仓库都是聚合的实现。通过DDD工厂装配好的领域对象会返回到DDD仓库中。事实上Spring上下文就是一个DDD仓库底座。它包含了程序需要的各种领域对象。有些领域对象如DAO是从数据库中取的,有些是从缓存中取的,还有些如POJO是直接创建的。但是业务逻辑不关心领域对象的来源,只需要在需要的时候直接使用,就与领域对象的具体实现之间做了解耦。事件风暴法在领域设计之初的需求分析阶段,需求分析的基本思路就是统一语言建模。它是我们的指导思想。但落实到实践层面可以采用的方法是事件风暴法。它是一种基于工作坊的DDD实践方法,可以帮助我们发现业务领域中正在发生的事件,指导领域建模以及程序开发。事件风暴中的风暴是头脑风暴的意思,我在《复联4里用到的方法论》中详细解释过头脑风暴法,这里不再赘述。事件即事实,已经发生,不会更改。信息管理系统可以将这些事实以信息的形式存储,即信息就是事实。信息管理系统的作用就是将信息存储,管理与跟踪。对事件可以采用上游发布、下游订阅的方式进行解耦,按照业务流程来梳理领域事件。举个例子:把大象装冰箱分成三步,每个步骤都是一个事件,每个事件之间要解耦。打开冰箱门涉及冰箱领域对象、人领域对象等。这个事件完成将会触发一个信息存储:冰箱状态变成已打开。这些都是围绕着打开冰箱门这个事件展开。这个事件完成后,只要对第二步把大象装冰箱进行通知即可。之后的事情再不会和第一步发生关系。防腐层防腐层(Anti-corruption
2022年2月24日
其他

锁记——偏向锁注定过不好这一生

0如果只是一个线程获取锁,再加上「偏心」的机制,是没有理由撤销偏向的,所以偏向的撤销只能发生在有竞争的情况下想要撤销偏向锁,还不能对持有偏向锁的线程有影响,所以就要等待持有偏向锁的线程到达一个
2022年2月22日
其他

面试阿里,看这一篇就够了!

来回答:Situation、Task:项目当时的背景是怎样的,自己的任务和目标是啥?Action:要解决上述问题和实现目标,自己具体做了什么事情,怎样做的,为什么要这样做?Result:最
2022年2月20日
其他

【硬核】年底绩效面谈,涨薪,老板给加了1万块

《我想去大厂》(包含Java、MySQL、Redis、MQ消息队列、TCP网络、项目亮点、团队管理等)推荐阅读👍:
2022年2月19日
其他

Redis夺命十二问,你能扛到第几问?

大家好,我是Tom哥~Redis是面试中绕不过的槛,只要在简历中写了用过Redis,肯定逃不过。今天我们就来模拟一下面试官在Redis这个话题上是如何一步一步深入,全面考察候选人对于Redis的掌握情况。小张:面试官,你好。我是来参加面试的。面试官:你好,小张。我看了你的简历,熟练掌握Redis,那么我就随便问你几个Redis相关的问题吧。首先我的问题是,Redis是单线程还是多线程呢?小张:Redis不同版本之间采用的线程模型是不一样的,在Redis4.0版本之前使用的是单线程模型,在4.0版本之后增加了多线程的支持。在4.0之前虽然我们说Redis是单线程,也只是说它的网络I/O线程以及Set
2022年2月17日
其他

Spring Cloud Alibaba Nacos路由策略之保护阈值!

个实例都宕机了,只剩下一个健康的实例,这个时候如果把所有的请求都转发到这一个健康实例上就会造成雪崩效应,最终导致业务系统崩溃。为了防止这种极端情况,于是就有了“保护阈值”,保护阈值一旦被触发,那么
2022年2月16日
其他

京东到家程序员删库跑路 ! 讲一讲 MySQL 数据备份杀手锏 binlog

:mysql实例端口号MASTER_USER:用户名MASTER_PASSWORD:密码MASTER_AUTO_POSITION:如果进行change
2022年2月14日
其他

高并发整体可用性:一文详解降级、限流和熔断

大家好,我是Tom哥~水满则溢,月盈则亏,任何事物都不可能无限制的发展,我们的系统服务能力也一样。当随着流量的不断增长,达到或超过服务本身的可承载范围,系统服务的自我保护机制的建立就显得很重要了。本文希望可以用最通俗的解释和贴切的实例来带大家了解什么是限流、降级和熔断。Part1限流
2022年2月11日
其他

【四万字】Java并发六十问,图文详解,快来看看你会多少道!

大家好,我是Tom哥~今天我们来盘一盘另一个面试必问知识点——Java并发。这篇文章有点长,四万字,图文详解六十道Java并发面试题。人已经肝麻了,大家可以点赞、收藏慢慢看!扶我起来,我还能肝!基础1.并行跟并发有什么区别?从操作系统的角度来看,线程是CPU分配的最小单位。并行就是同一时刻,两个线程都在执行。这就要求有两个CPU去分别执行两个线程。并发就是同一时刻,只有一个执行,但是一个时间段内,两个线程都执行了。并发的实现依赖于CPU切换线程,因为切换的时间特别短,所以基本对于用户是无感知的。并行和并发就好像我们去食堂打饭,并行就是我们在多个窗口排队,几个阿姨同时打菜;并发就是我们挤在一个窗口,阿姨给这个打一勺,又手忙脚乱地给那个打一勺。并行并发和食堂打饭2.说说什么是进程和线程?要说线程,必须得先说说进程。进程:进程是代码在数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位。线程:线程是进程的一个执行路径,一个进程中至少有一个线程,进程中的多个线程共享进程的资源。操作系统在分配资源时是把资源分配给进程的,
2022年2月10日
其他

【万字长文】创业公司就应该技术选型 Spring Cloud Alibaba , 开箱即用

封装的负载均衡框架。内部集成了多种负载算法,如:随机、轮询等。与注册中心打通,能自动获取服务提供者的地址列表。结合自身的负载算法,选择一个目标实例发起服务调用。Ribbon
2022年2月8日
其他

聊聊索引失效的10种场景,太坑了

大家好,我是Tom哥~前言之前写的一篇文章《聊聊sql优化的15个小技巧》,自发表之后,在全网广受好评,被很多大佬转载过,说明了这类文章的价值。今天我接着上一期数据库的话题,更进一步聊聊索引的相关问题,因为索引是大家都比较关心的公共话题,确实有很多坑。不知道你在实际工作中,有没有遇到过下面的这两种情况:明明在某个字段上加了索引,但实际上并没有生效。索引有时候生效了,有时候没有生效。今天就跟大家一起聊聊,mysql数据库索引失效的10种场景,给曾经踩过坑,或者即将要踩坑的朋友们一个参考。1.
2022年2月7日
其他

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

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

阿里P7专家:如何画出优秀的架构图?

架构图的作用一图胜千言。要让干系人理解、遵循架构决策,就需要把架构信息传递出去。架构图就是一个很好的载体。那么,画架构图是为了:解决沟通障碍达成共识减少歧义4.
2022年2月4日
其他

1万字拿下Maven的核心概念和最佳实践

这个在多模块项目里面非常重要。dependencyManagement里配置并不会实际引入,只是为了版本管理。整个项目用到的依赖包的版本都应该在父项目pom的dependencyManagement
2022年1月27日
其他

【复盘】2021年,帮助了很多伙伴晋级阿里、字节等一线大厂!

微信红包说明:只点赞无留言,中奖资格顺延下一位小伙伴最后,马上要过新年了,很多伙伴已经提前开启假期模式Tom哥祝小伙伴们虎年虎虎生威,拿到满意的offer,2022年,一起加油!!!
2022年1月26日
其他

深度剖析 Seata TCC 模式【图解 + 源码分析】

tccResource.setRollbackMethod(interfaceClass.getMethod(twoPhaseBusinessAction.rollbackMethod(),
2022年1月25日
其他

《大厂面试》之JVM篇21问与答

分区;大对象直接进入老年代,大对象就是需要大量连续内存空间的对象(比如:字符串、数组),为了避免为大对象分配内存时由于分配担保机制带来的复制而降低效率。老年代满了而无法容纳更多的对象,Minor
2022年1月23日
其他

推荐几个实用小工具

大家好,我是Tom哥~大家有没有这种感觉,理论知识虽然比较干货,但学起来确实会比较枯燥。如果搭配一些图解或者动画的形式,可能会比纯文字更好理解,学起来也更加有趣。所以在学习新技术时,我会有意无意的去搜索是否有在线动画或者练习的平台,你还别说,有的大神真就做了很不错的在线练习平台。下面就根据小贺实际使用情况,介绍几个平台,分别是学习
2022年1月19日
其他

1.3w字,一文详解死锁!

Lock)指的是两个或两个以上的运算单元(进程、线程或协程),都在等待对方停止执行,以取得系统资源,但是没有一方提前退出,就称为死锁。1.死锁演示死锁的形成分为两个方面,一个是使用内置锁
2022年1月18日
其他

阿里一面:讲一讲 Spring、SpringMVC、SpringBoot、SpringCloud 之间的关系?

客户端spring-boot-starter-data-elasticsearch:支持ElasticSearch搜索和分析引擎spring-boot-starter-data-jpa:支持
2022年1月17日
其他

字节一面:事务还没提交的时候,redolog 能不能被持久化到磁盘呢?

大家好,我是Tom哥~首先,咱需要明白的是,啥是持久化?听起来高大上,换句简单的话来说,就是把数据写到磁盘上,也成为落盘。那为啥要做持久化到磁盘?目的就是可以在数据丢失后进行恢复,保证数据不丢失。那么对于
2022年1月13日
其他

线程池如何监控,才能帮助开发者快速定位线上错误?

如何监控运行数据设想一下,如果想监控线程池的运行数据,你会怎么操作?这里提供两种常规思路线程池运行时埋点,每一次运行任务都进行统计定时获取线程池的运行数据这里我推荐第二种,因为线程池的监控
2022年1月12日
其他

拉取 binlog,自动数据同步,老板要给涨工资....

mysql主库链接时起始的binlog的时间戳canal.instance.master.timestamp=canal.instance.master.gtid=#
2022年1月10日
其他

幂等设计,都有哪些技术方案?

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