- 博客(66)
- 收藏
- 关注
原创 java并发编程面试题精讲——day02
AQS的话,其实就一个jdk提供的类AbstractQueuedSynchronizer(抽象队列同步器),是阻塞式锁和相关的同步器工具的框架。内部有一个属性 state 属性来表示资源的状态,默认state等于0,表示没有获取锁,state等于1的时候才标明获取到了锁。通过cas 机制设置 state 状态在它的内部还提供了基于 FIFO 的等待队列,是一个双向列表,其中tail 指向队列最后一个元素head 指向队列中最久的一个元素。
2025-11-18 21:00:50
312
原创 java并发编程面试题精讲——day01
执行monitorexit指令时则会把计数器-1,当计数器值为0时,则锁释放,处于等待队列中的线程再继续竞争锁。synchronized是排它锁,当一个线程获得锁之后,其他线程必须等待该线程释放锁后才能获得锁,而且由于Java中的线程和操作系统原生线程是一一对应的,线程被阻塞或者唤醒时时会从用户态切换到内核态,这种转换非常消耗性能。在此之后,如果同一个线程再次获取锁,计数器会再次加1。从内存语义来说,加锁的过程会清除工作内存中的共享变量,再从主内存读取,而释放锁的过程则是将工作内存中的共享变量写回主内存。
2025-11-18 21:00:04
815
原创 Java SE核心面试题总结——day 02
允许类、接口和方法在定义时使用一个或多个类型参数,这些类型参数在使用时可以被指定为具体的类型。Java在运行时动态获取类的信息(如字段、方法、构造方法),并操作类或对象(创建实例、调用方法、修改字段)的能力。异常体系结构Throwable。子类:①Error(错误,如,JVM 层面错误,不可恢复,无需捕获);②Exception(异常,可处理)。Checked Exception(受检异常):编译时必须处理(捕获或抛出),如。Unchecked Exception(非受检异常)
2025-11-17 21:04:07
914
原创 Java SE核心面试题总结——day 01
Java 8 接口新增特性default方法:带方法体,子类可直接使用或重写。static方法:带方法体,通过接口名直接调用(如。
2025-11-17 21:03:01
757
原创 java集合常见高频面试题
数组(Array)是一种用连续的内存空间存储相同数据类型数据的线性数据结构。我们定义了这么一个数组之后,在内存的表示是这样的:现在假如,我们通过arrar[1],想要获得下标为1这个元素,但是现在栈内存中指向的堆内存数组的首地址,它是如何获取下标为1这个数据的?二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只有左子节点,有的节点只有右子节点。二叉树每个节点的左子树和右子树也分别满足二叉树的定义。
2025-11-03 20:52:28
1023
原创 RabbitMQ消息中间件高频考点
我们项目中使用RabbitMQ实现延迟队列,主要通过死信交换机和TTL(消息存活时间)来实现。ISR(In-Sync Replicas)指与leader保持同步的follower副本。使用仲裁队列,主从模式,基于Raft协议实现强一致性数据同步,简化配置,提高数据安全性。我们项目在生产环境使用RabbitMQ集群,采用镜像队列模式,一主多从结构。
2025-11-03 20:50:28
903
原创 微服务高频面试题
候选人创建一个类实现IRule接口,这将定义全局的负载均衡策略。在客户端配置文件中指定特定服务调用的负载均衡策略,这将仅对该服务生效。候选人服务雪崩是指一个服务的失败导致整个链路的服务相继失败。服务降级:在请求量突增时,主动降低服务的级别,确保核心服务可用。服务熔断:当服务调用失败率达到一定阈值时,熔断机制会启动,防止系统过载。候选人CAP理论是分布式系统设计的基础理论,包含一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)
2025-11-02 21:26:11
665
原创 SSM框架高频考点
候选人AOP,即面向切面编程,在Spring中用于将那些与业务无关但对多个对象产生影响的公共行为和逻辑抽取出来,实现公共模块复用,降低耦合。常见的应用场景包括公共日志保存和事务处理。
2025-11-02 21:24:57
510
原创 MySQL必考面试题——高频考点全解析
隔离性体现在A向B转账时,不受其他事务干扰。可以在MySQL的系统配置文件中开启慢查询日志,并设置SQL执行时间超过多少就记录到日志文件,比如我们之前项目设置的是2秒,超过这个时间的SQL就会记录在日志文件中,我们就可以在那里找到执行慢的SQL。:在使用索引时,我们遵循索引创建原则,确保索引字段是查询频繁的,使用复合索引覆盖SQL返回值,避免在索引字段上进行运算或类型转换,以及控制索引数量。5).尽量使用联合索引,减少单列索引,查询时,联合索引很多时候可以覆盖索引,节省存储空间,避免回表,提高查询效率。
2025-10-31 20:15:12
989
原创 一篇文章快速上手安装虚拟机
首先,我们要准备一个Linux的系统,成本最低的方式就是在本地安装一台虚拟机。首先建议设置一下默认编辑器,这样我们通过MobarXterm的FTP工具打开文件时会以指定的编辑器打开,方便修改。启动后需要选择安装菜单,将鼠标移入黑窗口中后,将无法再使用鼠标,需要按上下键选择菜单。过一会儿后,会进入语言选择菜单,这里可以使用鼠标选择。在虚拟机安装完成后,最好立刻设置一个快照,这样一旦将来虚拟机出现问题,可以快速恢复。Centos7是比较常用的一个Linux发行版本,在国内的使用比例还是比较高的。
2025-10-31 20:06:15
623
原创 Docker从入门到实战——含容器部署、docker基础、项目部署
要想让Docker帮我们安装和部署软件,肯定要保证你的机器上有Docker. 由于大家的操作系统各不相同,安装方式也不同。为了便于大家学习,我们统一在CentOS的虚拟机中安装Docker,统一学习环境。注意:使用MacBook的同学也请利用 VMwareFusion来安装虚拟机,并在虚拟机中学习Docker使用。安装方式参考文档:《安装Docker》首先,我们利用Docker来安装一个MySQL软件,大家可以对比一下之前传统的安装方式,看看哪个效率更高一些。如果是利用传统方式部署MySQL,大概的步骤有:
2025-10-28 20:44:42
765
1
原创 一篇文章深入理解Elasticsearch高级用法
query:查询条件from和size:分页条件sort:排序条件highlight:高亮条件创建对象准备,也就是DSL。来构建查询条件传入的query()方法发送请求,得到结果解析结果(参考JSON结果,从外到内,逐层解析)@Test// 1.创建Request// 2.组织请求参数// 3.发送请求// 4.解析响应// 1.获取总条数System.out.println("共搜索到" + total + "条数据");// 2.遍历结果数组。
2025-10-28 20:38:48
1024
原创 一篇文章带你理解微服务高频面试考点
TCC模式的每个阶段是做什么的?Try:资源检查和预留Confirm:业务执行和提交Cancel:预留资源的释放TCC的优点是什么?一阶段完成直接提交事务,释放数据库资源,性能好相比AT模型,无需生成快照,无需使用全局锁,性能最强不依赖数据库事务,而是依赖补偿操作,可以用于非事务型数据库TCC的缺点是什么?有代码侵入,需要人为编写try、Confirm和Cancel接口,太麻烦软状态,事务是最终一致。
2025-10-27 21:06:42
821
原创 一篇文章带你速通Redis高频考点
Sentinel的三个作用是什么?集群监控故障恢复状态通知Sentinel如何判断一个redis实例是否健康?每隔1秒发送一次ping命令,如果超过一定时间没有相向则认为是主观下线(sdown如果大多数sentinel都认为实例主观下线,则判定服务客观下线(odown故障转移步骤有哪些?首先要在sentinel中选出一个leader,由leader执行failover选定一个slave作为新的master,执行,切换到master模式然后让所有节点都执行slaveof新master。
2025-10-27 21:05:12
1009
原创 一篇文章带你快速了解Elasticsearch高级篇
query:查询条件from和size:分页条件sort:排序条件highlight:高亮条件创建对象准备,也就是DSL。来构建查询条件传入的query()方法发送请求,得到结果解析结果(参考JSON结果,从外到内,逐层解析)@Test// 1.创建Request// 2.组织请求参数// 3.发送请求// 4.解析响应// 1.获取总条数System.out.println("共搜索到" + total + "条数据");// 2.遍历结果数组。
2025-10-26 13:55:20
987
原创 快速入门elasticsearch
分词器的作用是什么?创建倒排索引时,对文档分词用户搜索时,对输入的内容分词IK分词器有几种模式?ik_smart:智能切分,粗粒度:最细切分,细粒度IK分词器如何拓展词条?如何停用词条?利用config目录的文件添加拓展词典和停用词典在词典中添加拓展词条或者停用词条索引库操作有哪些?创建索引库:PUT /索引库名查询索引库:GET /索引库名删除索引库:DELETE /索引库名修改索引库,添加字段:PUT /索引库名/_mapping。
2025-10-26 13:52:59
1343
原创 一篇文章带你深入理解RabbitMQ高级篇
每个只能配置一个,因此我们可以在配置类中统一设置。我们在publisher模块定义一个配置类:@Slf4j@Overridelog.error("触发return callback,");});由于每个消息发送时的处理逻辑不一定相同,因此ConfirmCallback需要在每次发消息时定义。具体来说,是在调用RabbitTemplate中的convertAndSend方法时,多传递一个参数:id:消息的唯一标示,MQ对不同的消息的回执以此做判断,避免混淆。
2025-10-25 16:08:57
1266
原创 一篇文章带你快速了解RabbitMQ基础
多个消费者绑定到一个队列,同一条消息只会被一个消费者处理通过设置prefetch来控制消费者预取的消息数量交换机的作用是什么?接收publisher发送的消息将消息按照规则路由到与之绑定的队列不能缓存消息,路由失败,消息丢失FanoutExchange的会将消息路由到每个绑定的队列描述下Direct交换机与Fanout交换机的差异?Fanout交换机将消息路由给每一个与之绑定的队列Direct交换机根据RoutingKey判断路由给哪个队列。
2025-10-25 16:07:15
1171
原创 一篇文章带你学会服务保护和分布式事务
Sentinel是阿里巴巴开源的一款服务保护框架,目前已经加入SpringCloudAlibaba中。官方网站:核心库(Jar包):不依赖任何框架/库,能够运行于 Java 8 及以上的版本的运行时环境,同时对 Dubbo / Spring Cloud 等框架也有较好的支持。在项目中引入依赖即可实现服务限流、隔离、熔断等功能。控制台(Dashboard):Dashboard 主要负责管理推送规则、监控、管理机器信息等。为了方便监控微服务,我们先把Sentinel的控制台搭建出来。1)下载jar包。
2025-10-24 09:45:00
693
原创 微服务——day02
无论是还是都支持自定义,只不过编码方式、使用方式略有差别。自定义不是直接实现,而是实现。@Component@Override@Override// 获取请求// 编写过滤器逻辑System.out.println("过滤器执行了");// 放行注意:该类的名称一定要以为后缀!spring:cloud:gateway:- PrintAny # 此处直接以自定义的GatewayFilterFactory类名称前缀类声明过滤器@Component。
2025-10-24 09:42:36
1065
原创 微服务day01——拆分作业参考
其中,查询商品、扣减库存都是与商品有关的业务,在item-service中有相关功能;清理购物车商品是购物车业务,在cart-service中有相关功能。因此交易服务要调用他们,必须通过OpenFeign远程调用。我们需要将上述功能抽取为FeignClient.因此交易服务要调用他们,必须通过OpenFeign远程调用。我们需要将上述功能抽取为FeignClient.请求参数:1654779387523936258,交易服务测试通过。注意,创建订单接口无法测试,因为无法获取登录用户信息。
2025-10-23 09:59:23
913
原创 微服务——day01
什么时候需要拆分微服务?如果是创业型公司,最好先用单体架构快速迭代开发,验证市场运作模型,快速试错。当业务跑通以后,随着业务规模扩大、人员规模增加,再考虑拆分微服务。如果是大型企业,有充足的资源,可以在项目开始之初就搭建微服务架构。如何拆分?首先要做到高内聚、低耦合从拆分方式来说,有横向拆分和纵向拆分两种。纵向就是按照业务功能模块,横向则是拆分通用性业务,提高复用性服务拆分之后,不可避免的会出现跨微服务的业务,此时微服务之间就需要进行远程调用。微服务之间的远程调用被称为RPC,即远程过程调用。
2025-10-23 09:56:38
831
原创 一篇文章带你速通Docker
要想让Docker帮我们安装和部署软件,肯定要保证你的机器上有Docker. 由于大家的操作系统各不相同,安装方式也不同。为了便于大家学习,我们统一在CentOS的虚拟机中安装Docker,统一学习环境。注意:使用MacBook的同学也请利用 VMwareFusion来安装虚拟机,并在虚拟机中学习Docker使用。安装方式参考文档:如何快速安装docker-优快云博客首先,我们利用Docker来安装一个MySQL软件,大家可以对比一下之前传统的安装方式,看看哪个效率更高一些。如果是利用传统方式部署MySQ
2025-10-20 20:58:48
1171
原创 如何快速安装docker
镜像地址可能会变更,如果失效可以百度找最新的docker镜像。首次可能需要选择立刻开通,然后进入控制台。最后,执行命令,安装Docker。在首页的产品中,找到阿里云的。这里以阿里云镜像加速为例。首先要安装一个yum工具。更新yum,建立缓存。
2025-10-20 20:57:23
178
原创 MybatisPlus
在刚刚的入门案例中,我们仅仅引入了依赖,继承了BaseMapper就能使用MybatisPlus,非常简单。也就是说我们在扣减用户余额时,需要对用户剩余余额做出判断,如果发现剩余余额为0,则应该将status修改为2,这就是说update语句的set部分是动态的。但是基于自定义SQL结合Wrapper的玩法,我们就可以利用Wrapper来构建查询条件,然后手写SELECT及FROM部分,实现多表查询。其中缺少的仅仅是分页条件,而分页条件不仅仅用户分页查询需要,以后其它业务也都有分页查询的需求。
2025-10-19 20:40:29
476
原创 Redis最佳实践
Key的最佳实践固定格式:[业务名]:[数据名]:[id]足够简短:不超过44字节不包含特殊字符Value的最佳实践:合理的拆分数据,拒绝BigKey选择合适数据结构Hash结构的entry数量不要超过1000设置合理的超时时间并不是很慢的查询才是慢查询,而是:在Redis执行时耗时超过某个阈值的命令,称为慢查询。
2025-10-19 20:36:58
757
原创 一篇文章带你解决Redis原理篇
Redis会确保Intset中的元素唯一、有序具备类型升级机制,可以节省内存空间底层采用二分查找方式来查询类似java的HashTable,底层是数组加链表来解决哈希冲突Dict包含两个哈希表,ht[0]平常用,ht[1]用来rehash当LoadFactor大于5或者LoadFactor大于1并且没有子进程任务时,Dict扩容当LoadFactor小于0.1时,Dict收缩扩容大小为第一个大于等于used + 1的2^n收缩大小为第一个大于等于used 的2^n。
2025-10-16 21:38:29
745
原创 MySQL数据库精通——mysql高级、mysql优化全囊括
在tb_user表中有一个联合索引 idx_user_pro_age_sta,该索引关联了三个字段 profession、age、status,而这个索引也是一个二级索引,所以叶子节点下面挂的是这一行的主键id, 所以当我们查询返回的数据在 id、profession、age、status 之中,则直接走二级索引直接返回数据了。当字段类型为字符串(varchar,text,longtext等)时,有时候需要索引很长的字符串,这会让索引变得很大,查询时,浪费大量的磁盘IO, 影响查询效率。
2025-10-13 23:19:53
887
原创 一篇文章带你搞定Mysql基础
概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据。目的:保证数据库中数据的正确、有效性和完整性。分类:注意:约束是作用于表中字段上的,可以在创建表/修改表的时候添加约束。**5.2.2 概述 **多表查询就是指从多张表中查询数据。**5.2.3 分类 **连接查询内连接:相当于查询A、B交集部分数据外连接:左外连接:查询左表所有数据,以及两张表交集部分数据右外连接:查询右表所有数据,以及两张表交集部分数据自连接:当前表与自身的连接查询,自连接必须使用表别名。
2025-10-11 15:46:51
282
原创 MySQL基础篇
概念:约束是作用于表中字段上的规则,用于限制存储在表中的数据。目的:保证数据库中数据的正确、有效性和完整性。分类:注意:约束是作用于表中字段上的,可以在创建表/修改表的时候添加约束。**5.2.2 概述 **多表查询就是指从多张表中查询数据。**5.2.3 分类 **连接查询内连接:相当于查询A、B交集部分数据外连接:左外连接:查询左表所有数据,以及两张表交集部分数据右外连接:查询右表所有数据,以及两张表交集部分数据自连接:当前表与自身的连接查询,自连接必须使用表别名。
2025-10-11 15:41:42
679
原创 代码随想录——数组——移除元素——双指针
进行截取字符串,注意不要用 s.tocharAarry() 这个是将字符数组转化成字符串的地址。思路:这里对每个数进行平方进行排序,可以利用双指针,最左指针和最右指针,两边指针所指向的平方数进行比较,大的一方放到一个新的数组里。采用双指针,0是比较条件,可以把步骤分解为1.覆盖0元素 2.覆盖完后剩下的从slow 进行补零。slow>0防止出现开头就是#的情况,不然slow会变成-1。这里slow--就是#的前一位,把他作为覆盖位,自己理解:双指针通过两个指针对数组进行覆盖。还是利用双指针的思路,
2025-07-29 16:23:13
667
原创 代码随想录——数组——二分查找
学完了这个二分,重要的是就是抓住区间的到底是开区间还是闭区间,循环体整体的循环要知道自己在做什么,还有除了循环外,要注意题目中的要求,分成哪几种情况。t=P4F534. 在排序数组中查找元素的第一个和最后一个位置https://leetcode.cn/problems/find-first-and-last-position-of-element-in-sorted-array/
2025-07-23 18:09:21
638
原创 #Redis多级缓存# ——《一篇文章带你深入了解缓存架构》
传统的缓存策略一般是请求到达Tomcat后 ,先查询Redis,如果未命中则查询数据库,如图:存在下面的问题:•请求要经过Tomcat处理,Tomcat的性能成为整个系统的瓶颈•Redis缓存失效时,会对数据库产生冲击多级缓存就是充分利用请求处理的每个环节,分别添加缓存,减轻Tomcat压力,提升服务性能:浏览器访问静态资源时,优先读取浏览器本地缓存访问非静态资源(ajax查询数据)时,访问服务端请求到达Nginx后,优先读取Nginx本地缓存。
2025-07-18 00:35:30
880
原创 #Redis分布式缓存# ——4.Redis分片集群
主从和哨兵可以解决高可用、高并发读的问题。但是依然有两个问题没有解决:使用分片集群可以解决上述问题,如图: 分片集群需要的节点数量较多,这里我们搭建一个最小的分片集群,包含3个master节点,每个master包含一个slave节点,结构如下:这里我们会在同一台虚拟机中开启6个redis实例,模拟分片集群,信息如下:删除之前的7001、7002、7003这几个目录,重新创建出7001、7002、7003、8001、8002、8003目录:注意:这里自己要仔细看一下之前的7001,7002 ,7003 后台启
2025-07-15 13:34:35
844
原创 #Redis分布式缓存# ——2.Redis主从
如果slave的offset小于master的offset,说明slave数据落后于master,需要更新。因为slave原本也是一个master,有自己的replid和offset,当第一次变成slave,与master建立连接时,发送的replid和offset是自己的replid和offset。全量同步需要先做RDB,然后将RDB文件通过网络传输个slave,成本太高了。限制一个master上的slave节点数量,如果实在是太多slave,则可以采用主-从-从链式结构,减少master压力。
2025-07-10 21:52:16
662
原创 #Redis黑马点评# 12、UV统计
UV统计在服务端做会比较麻烦,因为要判断该用户是否已经统计过了,需要将统计过的用户信息保存。PV:全称Page View,也叫页面访问量或点击量,用户每访问网站的一个页面,记录1次PV,用户多次打开页面,则记录多次PV。Hyperloglog(HLL)是从Loglog算法派生的概率算法,用于确定非常大的集合的基数,而不需要存储其所有值。通常来说UV会比PV大很多,所以衡量同一个网站的访问量,我们需要综合考虑很多因素,所以我们只是单纯的把这两个值作为一个参考值。作为代价,其测量结果是概率性的,
2025-06-25 21:44:18
299
原创 10、附近商户
我们要做的事情是:将数据库表中的数据导入到redis中去,redis中的GEO,GEO在redis中就一个menber和一个经纬度,我们把x和y轴传入到redis做的经纬度位置去,但我们不能把所有的数据都放入到menber中去,毕竟作为redis是一个内存级数据库,如果存海量数据,redis还是力不从心,所以我们在这个地方存储他的id即可。GEORADIUS:指定圆心、半径,找到该圆内包含的所有member,并按照与圆心之间的距离排序后返回。GEODIST:计算指定的两个点之间的距离并返回。
2025-06-24 17:37:14
440
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅