深智城面经-1/2面

1.缓存一致性怎么保证

1.使用延迟双删:先更新数据库,不立即删除缓存中的数据,而是等待一段时间,以便让缓存中的数据在这段
              时间内继续提供服务。同时,在等待期间,异步执行两次删除操作,以确保数据一致
步骤:
(1)首先更新数据库中的数据
(2)不立即删除缓存中的数据,而是等待一个较短的时间,例如1s
(3)启动一个异步任务,在等待期间的一段时间内,执行两次删除缓存的操作。这两次删除操作之间可以有一定
     的时间间隔
(4)确保异步任务在等待期间不会阻塞主线程,以避免影响系统的性能

2.如果延迟双删失败该怎么做?
(1)增加重试机制:多次尝试执行延迟双删操作,直到操作成功为止。
(2)引入分布式事务
(3)异步处理:将操作记录到消息队列中,并使用异步处理来执行延迟双删操作。可以将失败的操作留到后续
             进行处理。

2.10个G的数据中,查询出现频率最高的三个,现在只有1G的内存,怎么做

使用二分

海量数据处理问题

3.java中的泛型

泛型是一种强类型编程机制,它允许在编写代码时指定一种通用的类型,以增加代码的灵活性和重用性。
泛型的主要目标是实现类型安全性和减少类型转换错误

泛型的优点:
(1)类型安全性:泛型允许在编译时检测类型错误,减少运行时类型转换错误的机会
(2)代码重用:可以编写通用的泛型代码,以适应多种类型的数据
(3)可读性更高:使用泛型可以使代码更易读,因为它提供了更明确的类型信息
(4)减少类型转换:泛型可以减少需要进行显示类型转换的情况,示代码更简洁

分类:
(1)泛型类:是使用泛型参数的类,用于表示一般的数据结构或数据容器,它们通常在类名后面使用尖括号
           来指定类型参数。如 public class Node<T> {...}
(2)泛型方法:是在方法声明中使用类型参数的方法,用于实现能够处理多种类型的数据
             如 public <T> T getLength(T arg) {...}
(3)泛型接口:使用类型参数的接口,允许实现类指定具体的类型参数
             如 public interface Node<T> {...}
(4)通配符:通配符使用 ? 表示,用于表示未知类型。它通常用于方法参数,使方法能够接受不同类型的
           泛型参数。如 public void processList(List<?>list) {...}
(5)有界类型参数:可以为类型参数指定上限或下限,以限制允许的类型范围
                如 public <T extends Number> void printNumber(T number) {...}
(6)泛型通配符上限:使用 ? extends T 表示通配符的上限,表示泛型类型必须是指定类型或其子类
                  如 public void processList<List<? extends Number> list> {...}
(7)泛型通配符下限:使用 ? super T 表示通配符的下限,表示泛型类型必须是指定类型或其父类型
                  如 public void addToList(List<? super Integer> list) {...}

4.java中有哪些队列

1.linkedList:可以用作队列,通过 add() remove() 来实现队列的先进先出行为,也可以作为双端队列或栈来使用

2.ArrayDeque:是双端队列实现,是由一个可调整大小的数组实现,支持在两端进行高效插入和删除

3.PriorityQueue:优先级队列,默认是小根堆

4.BlockingQueue:阻塞队列,适用于多线程编程,内部实现了线程安全的操作

5.ConcurrentLinkedQueue:线程安全的无界队列,适用于多线程环境

5.springboot加载自己定义的某个config怎么做

1.创建配置类:首先创建一个java类,用于存储自定义配置的属性。这个类要使用@ConfigurationProperties
            注解来指定配置属性的前缀,并为每个属性提供 setter getter 方法

2.配置文件:在yml配置文件中自定义配置属性,前缀与配置类中指定的前缀相同

3.启用配置类:在springboot主类中启用@EnableConfigurationProperties

6.mybatisplus的分页查询怎么实现的

 使用Page对象进行分页查询,然后将Page对象传入selectPage中进行查询

7.mybatis的延迟加载怎么实现的

mybatis的延迟加载底层是依赖于代理模式和动态代理技术。当你查询一个包含延迟加载属性的对象时,
mybatis并不会立即加载这些属性的数据,而是创建一个代理对象,
等到你访问这些属性时,才会触发实际的数据加载

步骤:
(1)查询操作:当执行一个包含延迟加载属性的查询操作时,mybatis会查询主对象的数据,
             但不会立即加载延迟加载属性的数据
(2)代理对象:mybatis会创建一个代理对象,代理对象具有与主对象相同的接口,但在访问延迟加载属性时,   
             会触发代理对象的方法
(3)触发加载:当你访问代理对象中的延迟加载属性时,代理对象会检查该属性是否已经加载,如果没有加载,
             代理对象会触发实际的数据加载
(4)实际加载:实际的数据加载通常是通过执行一个额外的查询操作,获取延迟加载属性的数据
(5)缓存:加载的数据通常会被缓存,以避免重复加载相同的数据
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cw旧巷

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值