2023 07 12
Java基础¶
- Java基本数据类型有哪些?分别占多少字节存储?
- char 占2字节,因为表示的是UTF-16编码的字符
- 对应包装类的
BYTES
字段写了占几个字节,如Integer.BYTES
- Java中的权限修饰符有哪些?权限范围分别是什么?
- Java中的线程有哪几种创建方式?
- 4种
- Java中的反射作用是什么?
- Java中的异常分为哪几种?
- 讲一下你对静态代码块的理解?
- 只会执行一次;在类加载的时候执行;基本上是做一些初始化工作
- java有哪些锁?共享锁是什么?CAS?乐观锁和悲观锁?synchronied的底层原理?锁升级?死锁怎么形成的?如何破解死锁?
- String StringBuilder StringBuffer三者之间的区别
- HashTable和HashMap的区别
- 假设线程有一个线程池,线程池当中有个线程,7个线程执行失败,3个线程执行成功,请问怎么获取线程的返回值
408相关¶
- 线程之间的通信有哪几种方式?
- 讲一下计算机网络中OSI的七层模型?
- 链表增删快,那如何提高其查询效率,有没有什么想法?
- LinkedHashMap
- B+树了解吗?B+树如何范围查询?B+树退化的极端情况是什么?
- 跳表了解吗?
- 大顶堆、小顶堆了解吗?
- LRU算法了解吗?你会如何实现它?这个算法可以应用在哪些场景下?
- TCP为什么是三次握手?两次行不行?多次行不行?
- TCP的安全性是如何实现的?两台服务器之间可以同时建立多条TCP链接吗?怎么实现的?
- 校验,序号,确认,重传
- 客服端输入一个网址后,是如何拿到想要的数据的,是怎样在网络中传输的?
- cookie和session
数据库相关¶
- MySQL数据库有几种数据引擎?
SHOW ENGINES;
- 谈谈你对数据库事务的了解?除了数据库事务可以保证原子性之外,在代码的应用层能不能实现?
- 锁机制:使用锁来保证代码块的原子性。可以使用互斥锁(mutex)或其他类型的锁,确保在某个时间点只有一个线程可以执行关键代码段。这样可以防止并发访问导致的数据不一致性。
- 事务管理器:在应用层实现一个简单的事务管理器来保证一系列操作的原子性。事务管理器可以定义一个操作序列,并在执行操作之前创建一个保存点(savepoint)。如果其中任何一个操作失败,可以回滚到保存点,撤销之前的所有操作。这需要针对应用程序的特定需求自行实现。
- 两个MySQL数据库中的数据,能够保持事务吗?
- 可以,使用2PC或者TCC
- innoDB有什么特性?为什么要选择innoDB作为引擎?
- 泛讲一下你对Redis的理解?
- 如何处理 Redis缓存 与 数据库 数据一致性问题?
- 读写双写(Read-Through and Write-Through):在访问Redis缓存和数据库时,使用读写双写的模式。当读取数据时,首先从Redis缓存中查询,如果未命中,则从数据库中获取,并将数据存储到Redis缓存中,以供下一次查询使用。在写入数据时,首先将数据写入数据库,然后更新或删除Redis缓存中相应的数据。这样可以保证读取时的高性能和数据的一致性。
- 当数据库中的数据发生变化时,及时更新Redis缓存,以避免数据不一致
- Redis集群了解吗?如何处理宕机的情况?Redis的同步策略?
- MyBatis用到了哪些设计模式
- 建造者模式(SqlSessionFactoryBuilder)
- 工厂模式(SqlSessionFactory)
- 单例模式(LogFactory)
- 适配器模式(Log的Mybatis接口和它对jdbc、log4j等各种日志框架的适配实现)
- MyBatis用到了哪些Java的机制
- 反射、注解
- 索引失效的场景
- 不使用索引列:当查询条件中没有使用到索引列时,MySQL无法使用索引来加速查询,导致索引失效。
- 使用函数或表达式:当查询条件中使用了函数或表达式,会导致索引失效。因为MySQL无法直接在索引上执行函数或表达式,它必须先计算函数或表达式的结果,然后再应用索引。例如,对于索引列
date
,如果查询条件是WHERE YEAR(date) = 2022
,那么索引将失效。 - 数据类型不匹配:当查询条件中的数据类型与索引列的数据类型不匹配时,索引将失效。例如,如果索引列是整型,而查询条件是字符串类型,那么索引将无法使用。
- 模糊查询以通配符开头:当使用模糊查询(如
LIKE
)并以通配符(如%
)开头时,索引将失效。 - 数据量过小:当表中的数据量非常小(通常是几个记录),MySQL优化器可能会决定不使用索引,而选择全表扫描,因为全表扫描的代价更低。
Spring相关¶
-
谈一谈Spring AOP?有哪些应用场景?如何实现的
-
Spring AOP通过在程序运行期间动态地将额外的行为(称为切面)织入到目标对象的方法中,实现了横切关注点的模块化和重用。
应用场景: Spring AOP在以下场景中常被使用:
- 日志记录:通过AOP,在方法执行前后记录日志,可以避免在每个方法中都手动添加日志记录的代码。
- 事务管理:通过AOP,在方法执行前后添加事务处理逻辑,例如开启事务、提交事务、回滚事务等,以保证数据的一致性和完整性。
- 安全性检查:通过AOP,在方法执行前后进行权限验证或安全性检查,确保只有具备相应权限的用户能够执行敏感操作。
- 性能监控:通过AOP,在方法执行前后记录方法的执行时间,以便对系统性能进行监控和优化。
- 缓存管理:通过AOP,在方法执行前检查缓存,如果缓存中存在数据,则直接返回缓存结果,避免执行昂贵的计算或数据库查询。
实验方式:JDK动态代理或者CGLIB代理
-
其他¶
- 设计模式的好处有什么?用和不用设计模式有什么本质区别吗?
- 实现长地址请求到服务端,然后服务端重定向短地址给客户端,如何实现长短地址的互相映射?
- 我现在有10份数据,有1000个线程来争抢,你要怎么处理?
- 使用同步机制保证数据的一致性,比如加锁,或者使用线程安全的数据结构来存储数据
- 分布式是什么?为什么要分布式?分布式又会有哪些问题?分布式系统是如何实现事物的?