主题
华顺信安 已完结
版权声明
来源自互联网,仅供学习。如有侵权,请联系删除。
MySQL
❓MySQL 事务特征和事务隔离级别
SQL 语句执行优先级
- FROM:首先从指定的表中获取数据。
- JOIN:如果有连接操作,会在 FROM 之后进行。
- WHERE:对获取的数据进行过滤。
- GROUP BY:在过滤后的数据上进行分组。
- HAVING:对分组后的数据进行过滤。
- SELECT:选择需要的列。
- DISTINCT:去除重复的结果。
- ORDER BY:对结果进行排序。
- LIMIT/OFFSET:限制返回的行数。
Java
常量怎么声明?
使用 static final
声明
static 修饰方法的特点
- 方法属于类,而不是某一个对象。
- 可以使用类调用,也可以使用对象调用。
- 不能使用非 static 的成员变量,不能调用非 static 的成员方法。
接口能有具体实现吗?能多继承吗?
JDK 1.8 以后,接口可以有具体实现,分为默认方法和静态方法。默认方法使用 default
关键字,静态方法使用 static
关键字。
接口可以多继承。
多态怎么实现的?
- 方法重载:同一个类中,可以定义多个同名但参数不同的方法
- 方法重写:子类中重新定义父类的方法
- 接口和抽象类:接口和抽象类可以定义行为,但不提供具体实现
Java 集合框架
介绍 ArrayList 和 HashMap,能动态扩容吗?
- ArrayList 是动态数组。可以实现动态扩容,当数组容量已满仍需添加,会扩容到原来的 1.5 倍。
- HashMap 基于哈希表,可以存储键值对。有自动扩容机制,当已存储元素大于 "容量 * 负载因子" 时,会扩容到原来的 2 倍。
HashMap 为什么扩容到 2 倍?
哈希表使用哈希值取模运算来确定元素存储的位置,当 HashMap 长度是 2 的幂次方时,取模操作能转化为位运算,提高操作效率。
JVM
为什么有双亲委派机制?
- 避免核心类被篡改
- 保证每个类只被加载一次
SSM
SpringBoot 的常用注解?
@SpringBootApplication
@Configuration
@RestController
@Component
@Autowire
Spring AOP 使用场景
- 记录日志
- 鉴权
❓什么是 CAS ?
计算机网络
描述一下 TCP 握手和挥手
TCP 三次握手:
- 客户端 -> 服务端:【SYC】syc = 1, seq = x
- 服务器 -> 客户端:【SYC + ACK】syc = 1, ack = x + 1, seq = y
- 客户端 -> 服务端:【ACK】ack = y + 1
TCP 四次挥手
- 客户端 -> 服务端:【FIN】fin = 1, seq = x, ack = y
- 服务器 -> 客户端:【ACK】ack = x + 1, seq = y
- 服务端 -> 客户端:【FIN】fin = 1, seq = y, ack = x
- 客户端 -> 服务端:【ACK】ack = y + 1, seq = x
tcp 和 udp 的适用场景
tcp:可靠性较高,比如消息传输、文件下载
upd:实时性较高,比如视频电话、直播、游戏
Socket 和 WebSocket 之间的区别
- Socket 是一种底层的网络通信机制,提供了一种在网络中进行数据传输的接口。
- WebSocket 是一个基于 TCP 协议,为在浏览器和服务器之间提供全双工网络通讯的协议。
说一下 osi 七层模型
- 应用层
- 表示层
- 会话层
- 传输层
- 网络层
- 链路层
- 物理层
Redis
什么是缓存穿透?怎么解决?
缓存穿透:请求一个 Redis 和数据库都不存在的数据,请求会直接到达数据库,且不会重建缓存。大量的请求会导致数据库压力。
解决方法:
- 缓存空对象:方法简单,但是会造成内存浪费。
- 布隆过滤器:用于查询数据是否存在,对于不存在的数据直接返回,不再查询数据库。
- 限流策略:限制对数据库的请求频率。
Redis 分布式锁怎么实现的
使用 setnx
命令,保证只有一个线程能够成功设置值,相当于这个线程获取到了锁。