- 博客(26)
- 收藏
- 关注
原创 阿里面试官:你了解过延迟队列DelayQueue的底层实现原理吗?
这篇文章讲解了DelayQueue阻塞队列的核心源码,了解到DelayQueueDelayQueue实现了接口,提供了四组放数据和读数据的方法,来满足不同的场景。DelayQueue底层采用组合的方式,复用的按照延迟时间排序任务的功能,实现了延迟队列。DelayQueue是线程安全的,内部使用加锁。今天一起分析了DelayQueue队列的源码,可以看到DelayQueue的源码非常简单,没有什么神秘复杂的东西,下篇文章再一起接着分析其他的阻塞队列源码。
2024-12-02 08:30:00
944
原创 被面试官PUA了:创建索引时一定会锁表?
DDL(Data Definition Language,数据库定义语言)CREATE:用于创建数据库、表、索引、视图等对象。ALTER:用于修改数据库、表、索引、视图等已存在的对象的结构。DROP:用于删除数据库、表、索引、视图等对象。TRUNCATE:用于删除表中的所有数据,但保留表的结构。RENAME:用于重命名数据库、表等对象。DML (Data Manipulation Language,数据操作语言)INSERT:用于向表中插入新的数据行。UPDATE:用于更新表中已存在的数据行。
2024-12-01 11:00:00
891
原创 使用 @Transactional引起P1级事故分析
首先,定义一个自定义注解,并添加一个lockName参数,用于动态传递锁的名称。在需要使用分布式锁的服务方法上添加自定义注解。使用 SpEL 表达式来动态传递锁的名称。自定义注解定义注解,并添加lockName参数,用于传递动态的锁名称。支持 SpEL 表达式。注解处理器使用 Spring AOP 的@Aspect处理注解。在方法执行前,通过 SpEL 解析锁名称。在事务提交后 () 或事务完成 () 时释放锁。服务方法在需要分布式锁的服务方法上添加注解。
2024-12-01 08:15:00
940
原创 百度面试:如何用Redis实现限流?
限流是指在各种应用场景中,通过技术和策略手段对数据流量、请求频率或资源消耗进行有计划的限制,以避免系统负载过高、性能下降甚至崩溃的情况发生。限流的目标在于维护系统的稳定性和可用性,并确保服务质量。保护系统稳定性:过多的并发请求可能导致服务器内存耗尽、CPU 使用率饱和,从而引发系统响应慢、无法正常服务的问题。防止资源滥用:确保有限的服务资源被合理公平地分配给所有用户,防止个别用户或恶意程序过度消耗资源。优化用户体验:对于网站和应用程序而言,如果任由高并发导致响应速度变慢,会影响所有用户的正常使用体验。
2024-11-30 15:38:11
850
原创 FastAPI 入门教学
在当今快速迭代的软件开发环境中,选择一个高效且易用的框架至关重要。Python 的 FastAPI 正是这样一个集速度与灵活性于一身的现代化 Web 框架。本文将带你初步了解 FastAPI 的基本用法,并通过一些实例加深理解。首先,确保你已经安装了 Python 和 pip。接下来,创建一个简单的 FastAPI 应用。新建一个 Python 文件,比如main.py这段代码定义了一个简单的 API,当访问根路径时,返回 JSON 格式的数据。参数表示在代码更改时自动重新加载服务器,方便开发调试。
2024-11-30 15:26:46
366
原创 面试官:为什么threadLocal有自动清除机制还存在内存泄漏么?
ThreadLocal中设置的值仅属于当前线程,该值对其他线程而言是隔离的,所以在同一时间并发修改一个属性的值也不会互相影响。
2024-11-30 14:54:23
1239
原创 效率工具:Hutool 嘎嘎香,被秀到了
/ 输出结果:ni hao hString pinyin = engine.getPinyin("你好h", " ");
2024-11-30 14:33:42
1043
原创 微信也在用的消息时序性技术,你知道多少?
首先,我们来简单解释一下什么是消息时序性。在聊天应用中,我们发送的每一条消息都有明确的时间顺序。例如,在你和朋友的对话中,理想情况下,A发的第一条消息应该显示在B发的消息之前。但在实际的网络环境中,由于延迟、丢包等问题,消息的传输顺序并不总是和发送顺序一致,这就出现了消息乱序的问题。如何解决这个问题呢?其实可以借助几种技术手段来保证消息时序性,下面我们来逐步拆解这些方案。
2024-11-29 13:30:00
960
原创 10W QPS高并发,如何防止重复下单?
想象一下啊,你正在网上买东西,在点那个“下单”按钮的时候,可能因为手滑啊,或者网络不太给力,你就多点了几次。再或者呢,有些系统它会自动帮你重试下单,就是因为这些原因,订单服务那边就收到了两次一模一样的下单请求。这种情况,咱们就管它叫“重复下单”。简单来说,就是你买了一个东西,但订单系统以为你买了两次。幂等性,简单来说,就是你做一个操作,无论是做一次还是做很多次,最后得到的结果都是一样的。就像你点了一份披萨,点一次和点十次,最后送来的披萨数量还是一份,不会变成十份。幂等性在计算机里也是个很重要的概念。
2024-11-29 12:00:00
753
原创 Mysql中Varchar(50)和varchar(500)区别是什么?
为什么这么规定,我在网上查了一下,主要基于两个方面网上说Varchar(50)和varchar(500)存储空间上是一样的,真的是这样吗?基于性能考虑,是因为过长的字段会影响到查询性能?本文我将带着这两个问题探讨验证一下。
2024-11-29 10:00:00
628
原创 面试官:假如有几十个请求,如何去控制并发?
先进先出就是队列,push一个的同时就会有一个被shift。我们看下面的动图可能就会更加的理解:我们接下来的操作就是要模拟上图的队列行为。定义请求池主函数函数reqs // 请求数量) => {}接受一个参数reqs,它是一个数组,包含需要发送的请求。函数的主要目的是对这些请求进行队列管理,确保并发请求的数量不会超过设定的上限。定义dequeue函数current++;const requestPromiseFactory = queue.shift() // 出列。
2024-11-29 08:00:00
322
原创 多租户看这一篇就够了
XaaS(IaaS、PaaS和SaaS)三种模式的概念及区别?多租户是什么?多租户可以用来干什么?有哪些租户隔离方案?这些方案的适用场景有哪些,它们各有什么优缺点?XaaS(IaaS、PaaS和SaaS)三种模式的概念及区别?IaaS(Infrastructure as a Service),中文名叫基础架构即服务。通过即用即付的方式为用户提供网络、存储和计算等基础设施资源。IaaS可以节约用户成本,也更加灵活易扩展,适合全栈开发者。
2024-11-28 15:08:43
1939
1
原创 SQL中为什么不要使用1=1
1=1”在SQL语句中可能看起来无害,但实际上它是一种不良的编程习惯,可能会导致性能下降。就像在做饭时不会无缘无故地多加调料一样,我们在编写SQL语句时也应该避免添加无意义的条件。每一行代码都应该有它存在的理由,不要让人和数据库浪费时间在不必要的事情上。
2024-11-28 14:37:04
982
转载 别让 Docker 毁了你的 MySQL
近年来,随着 Docker 容器技术的火热,越来越多的应用开始被"装箱"。我们这些开发者享受着 Docker 带来的便捷和灵活,几乎恨不得把所有东西都塞进容器里。于是,连 MySQL 这样的有状态服务,也开始频频出现在 Docker 的舞台上。但是,?是否会给系统稳定性和数据安全带来隐患?这个问题在社区里引发了激烈的讨论。
2024-11-28 14:29:35
915
原创 阿里 P7二面:Redis 执行 Lua,能保证原子性吗?
原子性需要区分具体使用的载体,在关系型数据库(比如 MySQL))和 No SQL(比如Redis)中,原子性的概念是不相同的;Redis的事务(MULTI/ESXEC)和关系型数据库(比如 MySQL)的事务(ACID)也是不相同的;ACID的原子性指:命令要么全部执行,要么全部不执行;Redis执行 Lua脚本的原子性指:Lua脚本会当作一个整体被执行且不被其他事务打断,但是 Lua 脚本里面的命令无法保证“要么全部执行,要么全部不执行”;
2024-11-28 14:17:29
1168
原创 mysql到底是join性能好,还是in一下更快呢?
实验结论:数据量不到万级别,join 和 in 差不多;数据量达到万级别,非并发场景,in 更快,并发场景 join 更快;数据量达到十万/百万级别,非并发场景,in 过长,并发场景 join 更快。下面是小编给出的一些建议。当数据量比较小时,建议用 in,虽然两者的性能差不多,但是 join 会增加 sql 的复杂度,后续再变更,会非常麻烦。当数据量比较大时,建议用 join,主要还是出于查询性能的考虑。
2024-11-27 15:31:46
1012
原创 别再用tcpdump抓包了,用 kyanos 只需1秒一键排查网络问题
啊其实有些标题党了~😄, kyanos 其实还不能真正取代 tcpdump,一方面是 kyanos 目前支持的应用层协议比较有限,对于网络环境更加复杂的部署的支持还有待改进,另外一方面 tcpdump 和 kyanos 的定位不太一样, kyanos更加侧重于问题排查。但总的来说,其确实能提高咱们业务开发的排查效率👍。
2024-11-27 15:18:31
716
原创 只因把 https 改成 http,带宽减少了 70%
是一个高并发的采集服务上线后,100m的上行很快就被打满了。因为这是一条专线,并且只有这一个服务在使用,所以可以确定就是它导致的。但是!这个请求只是一个 GET 请求,同时并没有很大的请求体,这是为什么呢?于是使用 charles 重新抓包后发现,一个 request 的请求居然要占用 1.68kb 的大小!其中TLS Handshake 就占了 1.27kb。这种情况下,需要的上行带宽就是:1.68*20000/1024*8=262.5mbps也就说明100mbps的上行为何被轻松打满。
2024-11-27 15:08:04
324
原创 我用两个方法就将接口响应时间从2s优化到了100ms
在本文中,我们深入探讨了接口性能优化的多种策略,从技术细节到实践应用,讲解了接口优化的9种方式:1、加索引。2、禁止嵌套for循环。3、分库分表。4、数据异构。5、缓存。6、异步。7、避免大事务。8、减小锁粒度。9、优化SQL。通过这些优化措施,我们可以显著提高接口的响应速度和系统的整体性能,为用户提供更流畅的体验。最后也欢迎你评论区交流沟通,说说你在接口优化的过程中都用到了哪些优化方式。
2024-11-26 14:25:18
1054
原创 mysql到底是join性能好,还是in一下更快呢?
数据量不到万级别,join 和 in 差不多;数据量达到万级别,非并发场景,in 更快,并发场景 join 更快;数据量达到十万/百万级别,非并发场景,in 过长,并发场景 join 更快。下面是楼仔给出的一些建议。当数据量比较小时,建议用 in,虽然两者的性能差不多,但是 join 会增加 sql 的复杂度,后续再变更,会非常麻烦。当数据量比较大时,建议用 join,主要还是出于查询性能的考虑。
2024-11-26 14:10:52
872
原创 当我用 CompletableFuture 当作 SpringMVC 返回值,会发生什么?
如果这篇文章对您有所帮助,或者有所启发的话,帮忙关注一下,您的支持是我坚持写作最大的动力。关注公众号:【我不是架构师】,在公众号中回复:"面试",可以免费获取我最近整理的10万字的面试宝典,好多小伙伴靠这个宝典拿到了多家大厂的offer。
2024-11-26 13:35:12
853
原创 透彻理解SpringBoot 启动原理,架构师必备知识,不为应付面试
下图代码说明了,Spring在初始化全部 单例Bean以后,会执行SmartInitializingSingleton 接口。SpringBoot 会在Spring完全启动完成后,才开启Http流量。应该在Spring启动完成后开启入口流量。Rpc和 MQ流量 也应该如此,所以建议大家 在 SmartLifecype 或者 ContextRefreshedEvent 等位置 注册服务,开启流量。例如 Spring Cloud Eureka 服务发现组件,就是在 SmartLifecype中注册服务的。
2024-11-25 15:40:52
993
1
原创 Java基础类必读篇
这些都是java开发都用过得API,对于常用的API需要了解其原理,才能抗得住面试官得拷问。希望这篇博客能帮助你加深对Java基础知识的掌握,继续学习,实践编程,你会发现Java的魅力无穷!如果这篇文章对您有所帮助,或者有所启发的话,帮忙关注一下,您的支持是我坚持写作最大的动力。关注公众号:【我不是架构师】,在公众号中回复:"面试",可以免费获取我最近整理的10万字的面试宝典,好多小伙伴靠这个宝典拿到了多家大厂的offer。
2024-11-25 14:44:02
1153
原创 B站 1面:手撕一个 Java Agent
Java Agent 是一种特殊的 Java程序,从 Java5 开始支持,它可以在 Java虚拟机(JVM)启动时或运行时加载,并且能够在不修改原始源代码的情况下对字节码进行操作。Java AgentInstrumentation 接口Premain() 和 Agentmain()方法。
2024-11-25 14:32:42
1373
原创 MySQL千万级数据从190秒优化到1秒全过程
如果这篇文章对您有所帮助,或者有所启发的话,帮忙关注一下,您的支持是我坚持写作最大的动力。关注公众号:【我不是架构师】,在公众号中回复:"面试",可以免费获取我最近整理的10万字的面试宝典,好多小伙伴靠这个宝典拿到了多家大厂的offer。
2024-11-25 14:17:49
1048
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅