![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
面试宝典
文章平均质量分 86
book多得
努力努力再努力
展开
-
聊一聊分库分表(是什么?怎么分?有什么坑?)
数据库数据会随着业务的发展而不断增多,因此数据操作,如增删改查的开销也会越来越大。再加上的资源有限(CPU、磁盘、内存、IO 等)。最终数据库所能承载的数据量、数据处理能力都将遭遇瓶颈。换句话说需要合理的数据库架构来存放不断增长的数据,这个就是分库分表的设计初衷。目的就是为了缓解数据库的压力,最大限度提高数据操作的效率。原创 2024-04-12 16:04:20 · 648 阅读 · 0 评论 -
面试官:CPU狂飙666%,该怎么处理?
常见容易发生CPU飙升200%的场景场景:1:MySQL进程飙升900%大家在使用MySQL过程,想必都有遇到过CPU突然过高,或者达到200%以上的情况。数据库执行查询或数据修改操作时,系统需要消耗大量的CPU资源维护从存储系统、内存数据中的一致性。并发量大并且大量SQL性能低的情况下,比如字段是没有建立索引,则会导致快速CPU飙升,如果还开启了慢日志记录,会导致性能更加恶化。生产上有MYSQL 飙升900% 的恶劣情况。场景2:Java进程飙升900原创 2024-04-10 16:19:23 · 633 阅读 · 0 评论 -
聊聊Redis消息队列stream
Redis Stream 是 Redis 5.0 版本中引入的一种数据结构,用于存储和处理消息流。它类似于消息队列,但具有更高的性能和更丰富的特性。ACK 操作用于确认消息已经被消费,从而避免重复消费。原创 2024-04-10 16:18:32 · 1270 阅读 · 0 评论 -
面试官:聊一下OOM场景,有什么解决方案?
JDK8 HotSpot JVM 将移除永久区,使用本地内存来存储类元数据信息并称之为:元空间(Metaspace);这与Oracle JRockit 和IBM JVM’s很相似,如下图所示元空间Metaspace(Java7叫永久代或持久代):用于存放JDK自身携带的Class,Interface的元数据(结构信息),也就是运行环境必须的类信息。被装载进此区域的数据不会被GC,关闭JVM才会释放此区域所占用的内存对应方法区,虽然逻辑上JVM规范将方法区描述为堆的一个逻辑部分,但物理上不包含在堆里。原创 2024-03-11 10:48:20 · 1006 阅读 · 0 评论 -
面试官:MySQL的七种日志
error log主要记录MySQL在启动、关闭或者运行过程中的错误信息,在MySQL的配置文件my.cnf中,可以通过log-error=/var/log/mysqld.log 执行mysql错误日志的位置。MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。原创 2024-03-11 10:35:49 · 1146 阅读 · 0 评论 -
Redis分段锁,如何设计?
一个分布式系统中,存在客户端多个用户,同时通过多个业务微服务,发起一个数据修改。如果没有分布式锁机制保证,在那多台机器上的多个服务可能进行并发修改操作,导致数据修改的不一致,出现脏读脏写,这就会造成问题。而分布式锁机制就是为了解决类似这类问题,保证多个服务之间互斥的访问共享资源,如果一个服务抢占了分布式锁,其他服务没获取到锁,就不进行后续操作。上图中,哪个客户端的服务抢占了分布式锁,就可以去扣减库存。其他服务没获取到分布式锁,就不进行后续操作。原创 2024-03-07 17:02:51 · 1372 阅读 · 1 评论 -
常见四种限流算法详解(附:javaDemo)
现代互联网很多业务场景,比如秒杀、下单、查询商品详情,最大特点就是高并发,而往往我们的系统不能承受这么大的流量,继而产生了很多的应对措施:CDN、消息队列、多级缓存、异地多活。但是无论如何优化,终究由硬件的物理特性决定了我们系统性能的上限,如果强行接收所有请求,往往造成雪崩。这时候限流熔断就发挥作用了,限制请求数,快速失败,保证系统满负载又不超限。极致的优化,就是将硬件使用率提高到100%,但永远不会超过100%原创 2024-03-07 17:01:22 · 1092 阅读 · 1 评论 -
面试官:如何设计幂等性接口
什么是幂等性?所谓幂等性,就是一次操作和多次操作同一个资源,所产生的影响均与一次操作的影响相同。"幂等(idempotent、idempotence)是一个数学与计算机学概念,常见于抽象代数中。幂等函数,或幂等方法,是指可以使用相同参数重复执行,并能获得相同结果的函数。原创 2024-02-20 09:43:59 · 962 阅读 · 0 评论 -
从底层理解MySQL-字符类型
MySQL中除了数值类型外,另一个用的比较多的就是字符类型了。字符类型有很多不同种类:VARCHAR,CHAR,BLOB,TEXT原创 2024-02-20 09:42:58 · 1081 阅读 · 0 评论 -
接口性能优化常见12式
本文将给小伙伴们分享一下接口优化的常用方案。原创 2024-01-25 17:27:53 · 1551 阅读 · 0 评论 -
面试官:请问泛型擦除、泛型上界、泛型下界、PECS原则 是什么?
泛型的本质是 类型参数化,解决类型爆炸的问题。所谓泛型是指将类型参数化,以达到代码复用提高软件开发工作效率的一种数据类型。原创 2024-01-25 17:26:55 · 874 阅读 · 1 评论 -
RocketMQ详解+实战+常见面试题
在发布-订阅模型中,消息的发送方称为发布者(Publisher),消息的接收方称为订阅者(Subscriber),服务端存放消息的容器称为主题(Topic)。生产者往某个队列里面发送消息,一个队列可以存储多个生产者的消息,一个队列也可以有多个消费者,但是消费者之间是竞争关系,也就是说每条消息只能被一个消费者消费。总的来说,RocketMQ是一个功能强大的消息中间件系统,具备高吞吐量、可靠性、分布式支持和灵活的消息模型等特点,适用于构建可靠的分布式系统和实时数据处理系统。这是RocketMQ特有的一个功能。原创 2023-06-06 14:21:58 · 2646 阅读 · 0 评论 -
布隆过滤器
值得注意的是,4 这个 bit 位由于两个值的哈希函数都返回了这个 bit 位,因此它被覆盖了。目前我们知道布隆过滤器可以支持 add 和 isExist 操作,那么 delete 操作可以么,答案是不可以,例如上图中的 bit 位 4 被两个值共同覆盖的话,一旦你删除其中一个值例如 “tencent” 而将其置位 0,那么下次判断另一个值例如 “baidu” 是否存在的话,会直接返回 false,而实际上你并没有删除它。它的优点是空间效率和查询时间都远远超过一般的算法,缺点是有一定的误识别率和删除困难。原创 2023-05-31 14:57:12 · 602 阅读 · 0 评论 -
ThreadLocal八股文
1. 为什么要⽤ ThreadLocal?答:为了解决并发编程时,公共资源数据安全问题。(也可使⽤锁的⽅式)并发编程是⼀项⾮常重要的技术,它让我们的程序变得更加⾼效。但在并发的场景中,如果有多个线程同时修改公共变量,可能会出现线程安全问题,即该变量最终结果可能出现异常。为了解决线程安全问题JDK出现了很多技术⼿段,⽐如:使⽤或Lock,给访问公共资源的代码上锁,保证了代码的 原⼦性。原创 2023-05-15 14:37:05 · 600 阅读 · 1 评论 -
ReentrantLock 原理
ReentrantLock是Lock接⼝的默认实现,是⼀种独占锁。相对synchronized⽽⾔,ReentrantLock 提供了更多的操作⽅式以及更细粒度的加锁⽅式。主要特性:1.可重⼊。ReentrantLock是可重⼊锁,因为它会记录之前获得锁线程对象,保存在exclusiveOwenerThread变量中,当⼀个线程要获取锁时,会先判断当前线程是不是已经获取锁的线程。synchronized也是可重⼊锁。12。原创 2023-05-14 15:03:17 · 698 阅读 · 2 评论 -
Spring Boot自动装配
Spring Boot自动装配(Automatic Configuration)是指Spring Boot框架中的一种特性,它可以根据应用程序中的依赖关系和配置来自动配置Spring应用程序的各个部分。在Spring Boot中,自动装配通过使用条件化的配置和智能配置来实现(如:condition),这样可以根据应用程序的环境和需要来自动配置不同的组件,例如spring-boot-starter-redis等。自动装配能够大大减少Spring应用程序的配置量,并且使得应用程序更易于维护和升级。原创 2023-04-25 16:27:26 · 522 阅读 · 0 评论 -
JVM垃圾回收GC 详解(java1.8)
目录垃圾判断算法(你是不是垃圾?)引用计数法可达性算法对象的引用强引用软引用弱引用虚引用对象的自我救赎垃圾回收算法--分代标记清除算法复制算法标记整理法垃圾处理器最容易想到的一种方式是引用计数法,啥叫引用计数法,简单地说,就是对象被引用一次,在它的对象头上加一次引用次数,如果没有被引用(引用次数为 0),则此对象可回收以上代码 ref 引用了右侧定义的对象,所以引用次数是 1 如果在上述代码后面添加一个 ref = null,则由于对象没被引用,引用次数置为 0,由于不被任何变量引用,此时即被回收,原创 2023-04-22 17:13:34 · 1406 阅读 · 0 评论 -
Mysql整数类型的长度设置究竟有何用?
int后面的数字不能表示字段的长度,int(num)一般加上zerofill,才有效果。zerofill的作用一般可以用在一些编号相关的数字中,比如学生的编号 001 002 ... 999这种,如果mysql没有零填充的功能,但是你又要格式化输出等长的数字编号时,那么你只能自己处理了。原创 2023-04-20 10:36:52 · 274 阅读 · 0 评论 -
Redis 持久化八股文
Redis的持久化机制Redis 提供两种持久化机制: RDB(默认) 和 AOF 机制,在 Redis4.0 之后还提供了混合持久化1. RDB:是指内存快照,指内存中的数据在某一个时刻的状态记录。2. AOF:AOF日志 里记录的是 Redis 收到的每一条命令,这些命令是以文本形式保存的。3. 混合持久化:RDB 以一定的频率执行,在两次快照之间,使用 AOF 日志记录这期间的所有命令操作。原创 2023-04-20 10:24:17 · 503 阅读 · 0 评论 -
java十五种锁思维导图
原创 2023-03-28 11:51:26 · 132 阅读 · 0 评论 -
volatile 详解
有什么用?volatile是一个特征修饰符(type specifier). volatile的作用是作为指令关键字,确保本条指令不会因编译器的优化而省略,且要求每次直接读值。 volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。一句话:主要用于解决变量在多个线程之间的可见性原创 2023-03-13 13:55:01 · 265 阅读 · 0 评论 -
mysql锁分类大全
前言为什么会出现锁MySQL中的锁是为了保证并发操作的正确性和一致性而存在的。当多个用户同时对同一份数据进行操作时,如果不加控制地进行读写操作,就可能导致数据不一致的问题。例如,当多个用户同时对同一行数据进行写操作时,就可能出现数据被覆盖的情况。这时,通过使用锁,可以控制用户对数据的访问,保证同一时间只有一个用户对数据进行修改或者读取操作,从而避免数据的不一致。原创 2023-03-10 16:04:09 · 814 阅读 · 0 评论 -
redis 五大类型学习笔记(业务场景+精美截图)
目录简单复习一下一、String简介常用个性命令常见业务场景1.秒杀商品的扣库存2.热点微博点赞数量二、Hash简介常用个性命令常见业务场景1.热点明星资料2.双十一上架的商品属性三、List简介常用个性命令常见业务场景1.热点明星的粉丝列表四、Set简介常用个性命令常见业务场景1、微信抽奖小程序2、微博共同关注/共同好友五、zset / sorted set简介常用个性命令常见业务场景1.微博热搜榜单原创 2022-05-18 15:09:49 · 215 阅读 · 0 评论 -
Spring事务学习笔记
目录什么是事务?一、事务的四大特性(ACID)原子性(Atomicity):一致性(Consistency):隔离性(Isolation):持久性(Durability):二、事务隔离级别数据并发问题1.脏写(Dirty Write)2.脏读(Dirty Read)3.不可重复读(Non-Repeatable Read)4.幻读(Phantom)sql中的四种隔离级别小结三、Spring事务的传播特性是什么?spring事务的七种传播特性表原创 2022-05-24 12:07:18 · 161 阅读 · 0 评论 -
线性数据结构:数组 Array
数组是数据结构还是数据类型?数组只是个名称,它可以描述一组操作,也可以命名这组操作。数组的数据操作,是通过 idx->val 的方式来处理。它不是具体要求内存上要存储着连续的数据才叫数组,而是说,通过连续的索引 idx,也可以线性访问相邻的数据。那么当你定义了数据的存储方式,也就定义了数据结构。所以它也是被归类为数据结构。原创 2023-02-24 15:24:28 · 631 阅读 · 0 评论 -
System.arraycopy详解
System.arraycopy这个方法之前用得很少,前段时间在一个项目需要对很多字节的处理,使用这个方法是非常有用的。这个方法的作用大家应该都是知道的吧:就是把一个数组中某一段字节数据放到另一个数组中。至于从第一个数组中取出几个数据,放到第二个数组中的什么位置都是可以通知这个方法的参数控制的。原创 2023-02-24 15:01:55 · 448 阅读 · 0 评论 -
线性数据结构:链表 LinkList
链表的历史于1955-1956年,由兰德公司的Allen Newell、Cliff Shaw和Herbert A. Simon开发了链表,作为他们的信息处理语言的主要数据结构。链表的另一个早期出现是由 Hans Peter Luhn 在 1953 年 1 月编写的IBM内部备忘录建议在链式哈希表中使用链表。到 1960 年代初,链表和使用这些结构作为主要数据表示的语言的实用性已经很好地建立起来。原创 2023-02-24 11:52:37 · 657 阅读 · 0 评论