- 博客(29)
- 收藏
- 关注
原创 面试官:你确定 Redis 是单线程的进程吗?
之所以 Redis 为「关闭文件、AOF 刷盘、释放内存」这些任务创建单独的线程来处理,是因为这些任务的操作都是很耗时的,如果把这些任务都放在主线程来处理,那么 Redis 主线程就很容易发生阻塞,这样就无法处理后续的请求了。关于线程数的设置,官方的建议是如果为 4 核的 CPU,建议线程数设置为 2 或 3,如果为 8 核 CPU 建议线程数设置为 6,线程数一定要小于机器核数,线程数并不是越大越好。图中的蓝色部分是一个事件循环,是由主线程负责的,可以看到网络 I/O 和命令处理都是单线程。
2024-10-31 16:05:37 996
原创 分库分表方案中出现数据倾斜问题怎么解决?
数据倾斜是指在分布式计算或数据库环境中,数据分布不均匀的现象。在理想的分布式系统中,数据和计算负载应该均匀分布在所有节点上。然而,由于各种原因,某些节点可能承载比其他节点更多的数据或计算负载,这就是数据倾斜。比如一个系统中共有500万数据,但是属于同一个商家付款方的数据就有400万,那么如果数据库按照商家做分库分表,就会导致出现严重的数据倾斜。一般来说,数据倾斜发生在分库分表的场景中比较多,因为主要是因为分表字段选择的不够合适导致的。你比如说我之前做过一个定价系统,然后我们是按照付款方做的分库分表。
2024-10-18 17:30:40 248
原创 nacos是怎么推送配置到本地的?新增和修改有区别吗?
Nacos 作为一个强大的配置管理平台,通过长轮询和增量推送机制,能够高效地将配置推送到客户端,并保证客户端始终使用最新的配置。通过合理使用 Nacos 提供的配置管理功能,开发者可以确保配置的可靠性、一致性和安全性。在新增和修改配置时,需要充分了解它们对系统的不同影响,特别是在分布式系统中,配置推送的及时性和可靠性直接影响到服务的稳定性。
2024-10-18 17:26:59 721
原创 如果外部接口的RT无法保证,如何处理?
响应时间是指从发出请求到收到响应的时间。对于系统的调用链而言,外部接口的RT对系统整体的性能至关重要。如果外部接口的响应时间过长或波动剧烈,可能会导致调用方出现超时、队列积压,甚至引发系统宕机。外部接口的RT无法保证问题在各种场景中频繁出现,特别是在以下场景中:支付系统:与第三方支付网关通信时,响应时间可能因为高并发和网络问题而变得不可预测。电商系统:商品库存、物流查询等依赖外部接口的系统,面临较大的RT波动风险。消息推送系统:短信和邮件推送服务调用第三方接口,RT可能受服务提供商的负载影响。
2024-10-16 17:37:12 776
原创 (JVM)安全点了解吗?如果有一段代码进不了安全点怎么办?
STW操作时为了方便线程中断管理,提出了安全点的概念,所有的线程在安全点位置挂起等待。所以HotSpot虚拟机用OopMap(Ordinary Object Pointer map集合)来记录对象内的引用关系,只有在特殊的指令或者特定的位置才会产生或者更新OopMap,这个特定的位置即为安全点。我们知道,CPU资源是时间片段,如果在占用cpu时间比较小的指令位置设置安全点,线程的中断操作导致的全局暂停会效果会被放大;安全点的作用是为了在垃圾收集时暂停所有用户线程,确保垃圾收集过程的安全进行。
2024-10-15 16:50:36 237
原创 CMS回收过程,为啥初始标记和重新标记需要STW?
总体来说,CMS 回收过程通过并发标记和并发清除的方式来减少垃圾回收时的停顿时间,但在进行垃圾回收的同时,可能会产生内存碎片问题,需要额外的处理。另外,由于 CMS 是基于标记-清除算法,会产生大量的空闲列表碎片,可能会影响到大对象的分配。初始标记(Initial Mark)和重新标记(Remark)阶段需要 Stop-The-World(STW) 操作,而并发标记(Concurrent Mark)阶段不需要的主要原因是为了减少对应用程序的影响,提高系统的吞吐量和响应性能。
2024-10-15 16:10:33 465
原创 CMS的垃圾回收过程详解:为什么要分成4步?
垃圾回收的核心目标是回收不再使用的内存对象,并使其内存空间可供新对象使用。不同的垃圾回收算法根据性能、停顿时间、吞吐量等要求设计了不同的内存回收策略。常见的垃圾回收器包括:Serial GC:单线程执行垃圾回收,适用于小型应用。Parallel GC:多线程并行执行,适合高吞吐量应用。G1 GC:控制停顿时间的垃圾回收器,适用于大内存应用。
2024-10-14 11:22:14 527 1
原创 什么东西可以当作GC Root,跨代引用怎么处理?
GC Root是Java虚拟机垃圾回收(GC)过程中追踪活动对象的起点。GC Root用于标识存活对象,它们是垃圾回收器在执行标记-清除或其他回收算法时,首先检查的对象。GC Root本身始终被认为是存活的对象,任何直接或间接被GC Root引用的对象也会被视为存活对象。在Java虚拟机中,垃圾回收器通过从GC Root开始遍历对象图(通常采用可达性分析算法),来判断哪些对象是存活的,哪些对象可以被回收。这一过程称为“根可达性分析”。
2024-10-14 11:20:50 611
原创 Redis事务
watch指令类似于乐观锁,在事务提交时,如果watch监控的多个KEY中任何KEY的值已经被其他客户端 更改,则使用EXEC执行事务时,事务队列将不会被执行,同时返回Nullmulti-bulk应答以通知调用者事 务执行失败。一但执行 EXEC 开启事务的执行后,无论事务使用执行成功, WARCH 对变量的监控都将被取消。若在事务队列中存在语法性错误(类似于java的1/0的运行时异常),则执行EXEC命令时,其他正确 命令会被执行,错误命令抛出异常。事务中任意命令执行失败,其 余的命令仍会被执行。
2024-04-05 00:08:21 375
原创 Redis的持久化
1、RDB 持久化方式能够在指定的时间间隔内对你的数据进行快照存储2、AOF 持久化方式记录每次对服务器写的操作,当服务器重启的时候会重新执行这些命令来恢复原始 的数据,AOF命令以Redis 协议追加保存每次写的操作到文件末尾,Redis还能对AOF文件进行后台重 写,使得AOF文件的体积不至于过大。3、只做缓存,如果你只希望你的数据在服务器运行的时候存在,你也可以不使用任何持久化4、同时开启两种持久化方式。
2024-04-04 23:57:11 1403
原创 Redis入门
Redis是什么Redis:REmote DIctionary Server(远程字典服务器)是完全开源免费的,用C语言编写的,遵守BSD协议,是一个高性能的(Key/Value)分布式内存数据 库,基于内存运行,并支持持久化的NoSQL数据库,是当前最热门的NoSQL数据库之一,也被人们称为 数据结构服务器Redis与其他key-value缓存产品有以下三个特点Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使 用。
2024-04-04 23:26:12 572
原创 NoSQL概述
NoSQLNoSQL = Not Only SQL,意思:不仅仅是SQL;泛指非关系型的数据库,随着互联网Web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的社交网络服务类型的Web2.0纯动态网站已经显得力不从心,暴露了很多难以克服的问题,而非关系型的数据库则由于其本身的特点得到了非常迅速的发展,NoSQL数据库的产生就是为了解决大规模数据集合多种数据种类带来的挑战,尤其是大数据应用难题,包括超大规模数据的存储。
2024-04-03 18:07:50 831
原创 Java8新特性 (jdk1.8)
JDK 8 中增加了一套全新的日期时间 API ,这套 API 设计合理,是线程安全的。新的日期及时间 API 位于 java.time 包 中,下面是一些关键类。
2024-04-02 00:24:14 1094
原创 8 个线程池最佳实践和坑!使用不当直接生产事故!!
一般建议是不同的业务使用不同的线程池,配置线程池的时候根据当前业务的情况对当前线程池进行配置,因为不同的业务的并发以及对资源的使用情况都不同,重心优化系统性能瓶颈相关的业务。
2024-04-01 14:21:34 869
原创 为什么不建议直接使用@async
配置其线程池的实例名称为myselfExecutor,线程为myThread-开头的系列@Slf4j@Override20,30,
2024-04-01 14:09:19 546 1
原创 设计模式之状态模式
【例】通过按钮来控制一个电梯的状态,一个电梯有开门状态,关门状态,停止状态,运行状态。每一种状态改变,都有可能要根据其他状态来更新处理。例如,如果电梯门现在处于运行时状态,就不能进行开门操作,而如果电梯门是停止状态,就可以执行开门操作。类图如下://电梯的4个状态//开门状态//关门状态//运行状态//停止状态//设置电梯的状态//电梯的动作@Override//执行关门动作@OverrideSystem.out.println("电梯关门了。。。");
2024-04-01 10:17:32 1176
原创 设计模式之建造者模式
1、要知道一点就是不使用设计模式照样可以进行软件的开发,以上的代码完全可以不使用建造者模式,可以直接使用构造函数或者setter方法进行注入,如果有注入的多种情况需要创建很多的构造方法,在使用中你要顾忌传入参数的顺序,以及setter方法的连续性等问题。2、文章最开始使用@lombok里使用的链式建造者模式是传统的建造者模式的改进,二者原理是相同的,只是链式建造者模式将Director直接交给了Client, 将建造者以静态内部类的形式构建在了产品里面。里面的一些注解,但是并没有去关注注解的实现。
2024-04-01 09:24:03 490
原创 设计模式之责任链模式
责任链模式是一种行为设计模式, 允许你将请求沿着处理者链进行发送。收到请求后, 每个处理者均可对请求进行处理, 或将其传递给链上的下个处理者。责任链的使用场景还是比较多的:多条件流程判断:权限控制ERP 系统流程审批:总经理、人事经理、项目经理Java 过滤器的底层实现 Filter如果不使用该设计模式,那么当需求有所改变时,就会使得代码臃肿或者难以维护,例如下面的例子。
2024-04-01 00:41:17 586
原创 设计模式之模板方法模式详解
为了提高代码的复用性和系统的灵活性,可以使用一种称之为模板方法模式的设计模式来对这类情况进行设计,在模板方法模式中,将实现功能的每一个步骤所对应的方法称为基本方法 ,而调用这些基本方法同时定义基本方法的执行次序的方法称为模板方法。在模板方法模式中,由于面向对象的多态性,子类对象在运行时将覆盖父类对象,子类中定义的方法也将覆盖父类中定义的方法,因此程序在运行时,具体子类的基本方法将覆盖父类中定义的基本方法,子类的钩子方法也将覆盖父类的钩子方法,从而可以通过在子类中实现的钩子方法对父类方法的执行进行约束,
2024-03-31 23:50:32 686
原创 设计模式之策略模式详解
先看下面的图片,我们去旅游选择出行模式有很多种,可以骑自行车、可以坐汽车、可以坐火车、可以坐飞机。作为一个程序猿,开发需要选择一款开发工具,当然可以进行代码开发的工具有很多,可以选择Idea进行开发,也可以使用eclipse进行开发,也可以使用其他的一些开发工具。在软件开发中,我们也常常会遇到类似的情况,实现某一个功能有多条途径,每一条途径对应一种算法,此时我们可以使用一种设计模式来实现灵活地选择解决途径,也能够方便地增加新的解决途径。策略模式定义。
2024-03-31 23:18:58 987
原创 分布式事务
2、单点故障问题:各个本地事务的提交和回滚全部由XA的server端控制,server端一旦宕机各个本地事务都会处于阻塞状态,解决方案:做集群,但集群只能保证重新选出新的server端控制者,本地事务阻塞的问题是无法解决的。4、AT模式的隔离级别:读未提交,因为当一阶段本地事务提交之后,其他的分布式事务已经可以看到提交后的数据,但因为有全局锁的存在,此时全局锁还没有释放,只能读到数据不能写数据。5、全局锁带来的性能问题:因为有全局的存在,所有的分布式事务只能串行执行,不能并发的操作数据库中的数据。
2024-03-28 18:03:09 312
原创 consul怎么在Linux Centos7上安装?
1、[root@localhost bin]# cd /usr/local/bin2、[root@localhost bin]# yum install -y unzip3、[root@localhost ~]#yum install iproute ftp bind-utils net-tools wget -y4、[root@localhost ~]# ...
2019-09-09 17:52:30 220
原创 推荐一个超级棒的Java学习网站
http://how2j.cn?p=16567这是网址,网站里有Java基础,Java常用框架、Maven项目管理、Git版本管理、Redis缓存、Nginx负载均衡等,另外站长怕大家不理解,更是一步一步,采用视频讲解的方式,带着大家完成天猫商城项目。以及量化投资项目。实践项目:手把手教你怎么开发一个完整的天猫商城项目:还有趋势投资量化项目,喜欢量化投资的可以学习这部分。Ja...
2019-08-30 17:56:33 259
转载 JavaScript面试题(2019)
示例 1 : 9种隐式对象,以及他们的用途示例 2 : 3种JSP的指令示例 3 : 2种JSP的动作示例 4 : doGet()和 doPost的区别,分别在什么情况下调用示例 5 : servlet的init方法和service方法的区别示例 6 : servlet的生命周期示例 7 : 页面间对象传递的方法示例 8 : Request常见方法示例 9 : J2...
2019-08-29 18:05:32 193 1
转载 Java最常被问的面试题(2018)
示例1:面向对象的特征有哪些方面?示例2:String是最基本的数据类型吗?示例3:int 和 Integer 有什么区别?示例4:String 和StringBuffer的区别? 示例5:运行时异常与一般异常有何异同?示例6:说出ArrayList,Vector, LinkedList的存储性能和特性。示例7:Collect...
2019-08-29 17:23:43 120
原创 最有用的Java免费自学网站
一.HOW2J.cn这个网站的站长可以说是很良心了,所有我把他放在了第一个.为啥呢?我们登入这个网站,首先干净的界面就让我的心情好了不少,再一看,我的天.JAVA基础,中级,高级,应用全都有.而且只要是跟JAVAweb带点关系的,我在他那里,几乎到看到了,真的很良心!网站:http://how2j.cn?p=19866二.w3cschoolw3c,,整齐的列表一览无余.内...
2019-08-29 15:27:40 1405
原创 实现前后端分离登录状态、有效时间的校验
业务场景:项目需要把Spring+ibatis+dubbo改为SpringBoot+Mybatis+SpringCloud,并且后台要前后端分离,所以在项目改进过程中遇到:运营后台怎样控制用户有效登录时间,并作相关处理;一般我们的做法是通过拦截器拦截请求接口,再通过token从redis中获取用户的登录信息,以及登录时长,最后通过代码:response.sendRedirect(req...
2019-08-29 12:49:38 2296
原创 解决request.getInputStream()只能获取一次问题
业务场景:使用Filter做接口的登录状态Token验证,使用request.getInputStream()获取Body体内流数据,发现再次在Cotroller层获取参数值,一直为null,导致无法获取;查找原因:一个InputStream对象在被读取完成后,将无法被再次读取,始终返回-1; InputStream并没有实现reset方法(可以重置首次读取的位置),无法实现重置操作;...
2019-08-22 11:52:39 971
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人