自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(97)
  • 收藏
  • 关注

原创 面经Java

使用MyBatis的ExecutorType.Batch执行器,手动控制事务与提交频率,利用批量SQL插入+合理分批(每次1000条防止内存溢出)。

2025-10-14 23:39:22 670

原创 秋招Day22 - Dubbo

Dubbo把序列化的过程已经内部封装好了,只需要poji类实现Serializable接口就行。POJO类和服务接口都另外定义在公共模块中,让生产者和消费者都依赖这些模块。

2025-07-28 02:56:30 391

原创 秋招Day21 - Linux

top:查看系统资源使用情况ps -ef | grep java:查看Java进程ping:测试网络联通性netstat:查看网络情况mkdir新建目录、rm删除文件、cp复制文件、mv移动文件find查找文件df查看磁盘空间chmod修改文件权限kill终止进程zip压缩文件、unzip解压文件。

2025-07-28 01:39:46 728

原创 秋招Day21 - 设计模式

工厂模式是一种创建对象的模式,不暴露创建的内部逻辑给客户端。定义一个抽象类或接口定义公共方法,由子类来进行不同的实现。策略模式是一种行为型设计模式,它定义了一系列的算法,将每个算法封装起来,使得它们可以相互替换。这种模式通常用于实现不同的业务规则,其中每种策略封装了特定的行为或算法。特别适合优化程序中的复杂条件分支语句(if-else上下文、策略接口和具体策略。策略接口:定义所有支持算法的公共接口。具体策略:实现策略接口的类,提供具体的算法实现。上下文:使用策略的类。

2025-07-27 05:07:13 779

原创 秋招Day20 - 微服务

一个服务节点出现故障,如果这时候上游服务还在不停的请求它或者重试,就会导致请求在下游堆积,导致故障进一步加剧服务高可用部署:确保各个服务都具备高可用性,通过冗余部署、故障转移等方式来减少单点故障的影响。限流和熔断:对服务之间的请求进行限流和熔断,以防止过多的请求涌入导致后端服务不可用。缓存和降级:合理使用缓存来减轻下游服务的负载压力,并在必要时进行服务降级,保证核心功能的可用性。服务熔断是微服务架构中的容错机制,用于保护系统免受服务故障或异常的影响。

2025-07-27 01:41:36 1156

原创 秋招Day20 - 微服务 - 概念

Dubbo是一个高性能、轻量级的Java微服务框架,它提供了服务的注册与发现(配合注册中心)、服务间调用(RPC)、负载均衡(权重)、容错(重试、快速失败)等功能Dubbo使用是基于RPC的通信模型,支持多种传输协议,比如HTTP、TCP和序列化方式。Dubbo的一些服务治理功能依赖第三方,比如Zookeeper,Apollo。

2025-07-26 22:09:31 341

原创 秋招Day19 - 分布式 - 限流

计数器比较简单粗暴,比如我们要限制 1s 能够通过的请求数,实现的思路就是,在接下来的,每个请求进来请求数就,超过最大请求数的请求会被,等到 1s 结束后计数,重新开始计数。这种方式有个很大的弊端:在一个极短的时间内(例如,从 999 毫秒到 1001 毫秒这 2 毫秒里),系统可能实际处理了。这远远超出了我们预期的“每秒 100 个请求”的限制。这种现象叫做“突刺现象”。

2025-07-26 21:08:16 2337

原创 秋招Day19 - 分布式 - 分布式设计

多次调用的效果和一次调用的效果一样,比如DELETE操作,执行多次的结果和执行一次的结果对数据库的影响是一样的。有些操作不满足幂等性,比如INSERT操作,用户点击了两次表单,数据库就有两条重复的记录。MQ消费者在读取消息的时候,也有可能读取到重复消息。在分布式系统里,只要下游服务有写操作(插入、更新),就有可能出现幂等性问题。

2025-07-26 19:23:23 910

原创 秋招Day19 - 分布式 - 分布式事务

在分布式环境下,会涉及到多个服务以及数据库,比如支付库、商品库、订单库。不同的服务节点针对各自不同的数据库做操作想要保证一起成功或者一起回滚,就叫分布式事务。

2025-07-26 18:59:10 1581

原创 秋招Day19 - 分布式 - 分布式锁

获取分布式锁的时候,向表中。

2025-07-25 20:07:35 492

原创 秋招Day19 - 分布式 - 理论

在一个分布式系统中,一致性,可用性、只能同时满足两个。

2025-07-25 19:36:30 535

原创 秋招Day18 - MyBatis - 原理

加载Mybatis的、加载定义SQL和结果映射的。最后生成一个。创建:根据所有配置信息创建创建:由会话工厂创建一个知道如何执行当前应用定义的所有SQL操作的会话对象会根据创建时制定的,关联对应的Executor实例,比如simple(默认)、BATCH(批量),这个Executor实例也负责缓存的查询和维护:通过SqlSession.getMapper()获取Mapper接口时,MyBatis使用JDK动态代理创建MapperProxy代理对象,。创建。

2025-07-25 04:36:12 362

原创 秋招Day18 - MyBatis - 基础

MyBatis是一个半自动ORM框架,它简化了JDBC操作,允许开发者直接编写原生SQL语句,具有灵活性和性能优势。相比全自动ORM工具Hibernate,MyBatis需要手动处理SQL映射,但更便于SQL优化。MyBatis通过XML/注解配置映射关系,支持动态SQL、延迟加载和缓存机制(一级缓存基于SqlSession,二级缓存跨Session共享)。它解决了JDBC的资源浪费、SQL维护困难等问题,提供多种参数传递方式(@Param、Map、JavaBean),并能处理枚举类型映射。MyBatis支

2025-07-24 21:48:55 949

原创 秋招Day17 - Spring - 补充

微服务是一种架构模式,强调将单体项目划分为一组小的服务,每个服务独立部署到生产环境中,降低服务之间的耦合,服务与服务之间采用轻量级的通信机制(比如HTTP或Dubbo。

2025-07-24 04:08:34 354

原创 秋招Day17 - Spring - Spring Boot

第一步,创建一个新的 Maven 项目,例如命名为 my-spring-boot-starter。在 pom.xml 文件中添加必要的依赖和配置。第二步,创建一个简单的服务类 MyService.java第三步,创建一个配置属性类 MyStarterProperties.java第四步,在下创建一个自动配置类,比如 MyServiceAutoConfiguration.java:(通常是 autoconfigure 包下)。第五步,在。

2025-07-23 18:03:39 1049

原创 秋招Day17 - Spring - MVC

处理器执行链。

2025-07-23 01:35:15 378

原创 秋招Day17 - Spring - 事务

通过编程的方式显式控制事务的开始、提交和回滚,一般使用的execute方法基于AOP,通过调用代理对象拦截目标方法,在方法执行前插入事务开始的横切逻辑,在方法执行后根据执行情况来选择提交还是回滚。不需要在业务逻辑中显式的编写事务相关的代码,Spring 推荐通过注解的方式来实现声明式事务管理,也是日常开发中最常用的。由于Spring AOP连接点类型的限制,最细粒度只能是方法级别。

2025-07-22 23:09:19 376

原创 秋招Day17 - Spring - AOP

AOP,也就是面向切面编程,是一种编程范式,旨在提高代码的模块化。比如说可以将日志记录、事务管理等分离出来,来提高代码的可重用性。AOP 的核心概念包括切面(Aspect)、连接点(Join Point)、通知(Advice)、切点(Pointcut)和织入(Weaving)等。① 像日志打印、事务管理等都可以抽离为切面,可以声明在类的方法上。像注解,就是一个典型的 AOP 应用,它就是通过 AOP 来实现事务管理的。我们只需要在方法上添加注解,Spring 就会在方法执行前后添加事务管理的逻辑。

2025-07-22 20:32:13 910

原创 秋招Day17 - Spring - IoC

自动装配就是Spring自动完成Bean之间的依赖关系注入,而不需要我们手动指定每个依赖的具体实例。原理是Spring容器启动时首先进行包扫描发现和注册哪些类是 Spring 要管理的 Bean,然后进行实例化初始化前再通过反射检查这些类中的字段有没有@Autowired或者@Resource注解,来判断哪些Bean需要被自动装配。然后Spring会分析Bean之间的依赖关系确定最合适的创建和注入顺序,从Spring容器中找出最匹配的Bean进行注入。

2025-07-21 09:28:36 813

原创 秋招Day17 - Spring - 基础

AOP就是面向切面编程,我们可以通过定义一个Spring的切面类,在切面类中配置好切入点和通知,就可以在不侵入原来的代码的情况下,增强某些模块的功能,Spring会自动帮我们生成代理对象。也可以将一些公共逻辑从业务代码中抽取出来放入切面。IOC就是控制反转,以前我们需要手动控制对象的创建、依赖管理和生命周期管理,现在Spring帮我们把这些事都做了,我们可以更专注于业务逻辑。

2025-07-17 01:01:56 901

原创 秋招Day16 - RocketMQ - 原理

Topic 路由信息负载均衡Producer 会在所有可用的 MQ 中进行选择,以实现消息的均匀分散。

2025-07-13 06:19:14 968

原创 秋招Day16 - RocketMQ - 进阶

消息丢失的三个阶段:生产阶段、存储阶段、消费阶段。

2025-07-13 03:14:55 632

原创 秋招Day16 - RocketMQ - 基础

过滤,也可以设置。

2025-07-12 01:42:48 987

原创 秋招Day15 - Redis - 场景题

我会用命令配合参数来解决。SCAN 的优势在于它是,每次服务器。可以从游标 0 开始,每次处理返回的 key 列表,然后用,直到游标回到。不能用KEYS命令,会阻塞整个Redis服务器直到遍历完所有key。

2025-07-06 03:38:29 850

原创 秋招Day15 - Redis - 底层结构

Redis的LinkedList是一个双向无环结构,类似于java的LinkedList。节点由listNode表示,每个节点都有指向其前置节点和后置节点的指针,头节点的前置和尾节点的后置均指向 null。本质上是一个多层链表最底层是一个包含所有元素的有序链表,之上的每一层作为索引链表,包含了下一层的部分节点,层数通过随机算法确定,理论上可以无限高。跳表节点包含分值score、成员对象obj、一个后退指针backward,以及一个层级数组level。每个层级数组里有前进指针forward。

2025-07-05 05:12:39 1061

原创 秋招Day15 - Redis - 应用

配合和。另外就是用 Redis 的来实现简单的消息广播和订阅。但是这两种方式都的,因为没有 ACK 机制所以不能保证订阅者一定能收到消息,也不支持消息持久化。

2025-07-04 00:45:20 872

原创 秋招Day15 - Redis - 运维

使用查看内存使用情况,看看是否达到了最大的内存使用限制。如果服务器还有可用内存的话,修改redis.conf中的限制也可以修改maxmemory-policy修改,比如策略,淘汰最近最久未使用。

2025-07-02 19:03:31 298

原创 秋招Day15 - Redis - 缓存设计

缓存击穿是特指数据虽然在缓存中过期了,但是在数据库中一定能查到,大量请求落库。但是缓存穿透是指数据压根就不存在,永远也查不到结果,仍然会有大量请求落库,也无法重建缓存。布隆过滤器和缓存空值。大范围的缓存失效或者缓存服务器宕机,导致大量请求落入数据库短时间内被频繁访问的key,比如618期间被频繁访问的爆款商品的详情信息由于Redis是单线程模型(Redis6.0之后的网络IO是多线程),大量请求集中到同一个键会导致对应Redis节点的CPU使用率飙升,响应时间变长,而其他节点相对空闲。

2025-07-02 02:50:55 983

原创 秋招Day15 - Redis - 高可用

主从复制允许从节点维护主节点的数据副本,主节点的。主节点负责处理写请求,从节点负责读请求。读写分离。

2025-07-01 00:32:03 1151

原创 秋招Day15 - Redis - 持久化

主要有两种:RDB(创建时间点的快照)和AOF(追加记录每个写操作命令到文件)保证Redis服务器重启后数据不至于全部丢失。

2025-06-27 04:27:07 650

原创 秋招Day15 - Redis - 基础

最常见的数据类型,存储文本、数字或二进制数据,最大容量是512MB适合存储单个对象,比如验证码、token、计数等。列表是一个有序的元素集合,支持从头部/尾部插入/删除元素,常见于消息队列或任务列表。LRANGE key start end范围查询key value的集合,适合存储对象,比如商品信息,用户信息。集合是无序且不重复的,支持交集并集操作,查询效率能达到O(1)级别,主要用于去重、标签、共同好友等场景。按照score排序的有序集合,支持范围查询,适合排行榜或优先级队列BitMap可以把一组。

2025-06-27 03:04:36 947

原创 秋招Day14 - MySQL - 场景题

深分页是指随着页号越来越大,比较靠后的页面的offset也随之变大,导致需要从头扫描并跳过的数据行越来越多,有严重的性能问题。延迟关联:可以先在子查询中借助主键索引查出页面的开头,然后开始查找页面中的元素或者可以用书签,记住上一次分页的最大主键id。

2025-06-24 19:43:47 530 1

原创 秋招Day14 - MySQL - 运维

这么大量的DELETE操作可能会导致长时间锁表可以进行,把要删除的数据分为多个小批次处理。也可以采用,把不需要删除的数据迁移过来,然后废弃旧表。需要检查新表空间是否足够、分批导入数据、验证数据一致性等步骤。

2025-06-24 02:41:24 225

原创 秋招Day14 - MySQL - 高可用

把处理,处理通过中间件实现,比如,将INSERT/DELETE/UPDATE请求发给主库,将SELECT请求发给从库。主库将数据变更通过同步到从库,从而保证数据一致性。主库线程通过TCP将binlog推送给从库,从库到线程接受主库的binlog,写入,从库线程读取relay log并按顺序语句,从而更新从库数据。

2025-06-24 02:22:47 724

原创 秋招Day14 - MySQL - 事务

原子性,隔离性(并发执行的事务之间不会相互干扰,解决脏读、不可重复读、幻读),一致性(数据库从一个一致性状态转变到另一个一致性状态,比如转帐后银行的总金额不变),持久性(一旦提交或回滚,对数据库造成的影响是永久的)。

2025-06-23 21:46:16 726

原创 秋招Day14 - MySQL - 锁

来分,有表锁、页锁和行锁。划分,有乐观锁和悲观锁。按划分,有共享锁和排他锁。按划分,有记录锁,间隙锁,next-key锁,意向锁、插入意向锁。

2025-06-23 00:36:58 723

原创 秋招Day14 - MySQL - 索引

索引可以理解为目录,通过索引可以快速定位数据,避免全表扫描一般是B+树结构,查找效率是。索引还能等操作。

2025-06-22 01:46:48 892

原创 秋招Day14 - MySQL - SQL优化

当不能利用索引的天然有序性生成排序结果的时候,MySQL需要自己进行排序,如果数据量比较小,会在内存中进行,但是如果数据量比较大就需要写临时文件到磁盘再排序,这叫filesort。

2025-06-21 21:56:21 830 1

原创 秋招Day14 - MySQL - 日志

有6大类,错误日志用于问题诊断,慢查询日志用于SQL 性能分析,general log用于记录所有的SQL语句的明文格式,binlog用于记录MySQL服务器的所有逻辑更改,二进制格式,用于主从复制和数据恢复,redo log用来保证持久性,记录物理更改,防止数据页还没刷盘就崩溃丢失,undo log用来保证原子性,事务失败回滚和MVCC。

2025-06-19 02:13:59 765

原创 秋招Day14 - MySQL - 存储引擎

最大表空间。

2025-06-18 23:28:34 858

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除