- 博客(9)
- 收藏
- 关注
原创 Redis面试
Redis事务,用于将多个命令打包成一个原子操作MULTI:用于开启一个事务块,表示接下来的命令都属于该事务。EXEC:用于执行事务块中的所有命令。DISCARD:用于取消当前事务,放弃事务块中的所有命令。WATCH:乐观锁,watch某个key,如果在exec前,key的值变化了,则exec失败保证事务中的所有命令都按顺序序列化和执行。另一个客户端发送的请求永远不会在Redis事务的执行过程中提供服务。这保证了命令作为单个隔离操作执行。EXEC 命令。
2024-08-08 10:49:33
497
1
原创 Mysql面试
这些类型可以存储不同范围的整数值,并且每种类型都可以是有符号的或无符号的。当一个事务请求获取行锁时,如果该事务已经获取了表上的意向锁,那么就可以直接获取行锁,而不需要再去检查表上是否有其他事务持有锁。#{} 的特点:#{} 会将传入的参数值进行预编译,生成一个带有参数占位符的SQL语句,然后将参数值通过PreparedStatement设置到占位符上,从而保证了参数的安全性。的特点: {} 的特点: 的特点:{} 不会对传入的参数进行预编译,而是直接将参数值替换到 ${} 的位置上。
2024-08-08 10:20:03
555
原创 Java常见的设计
ElasticSearch:es 是分布式的,可以随便扩容,分布式天然就可以支撑高并发,因为动不动就可以扩容加机器来扛更高的并发。输入验证:对用户输入进行严格的验证和过滤,以防止常见的安全漏洞,如 SQL 注入、跨站脚本攻击(XSS)和跨站请求伪造(CSRF)。例如,Redis提供了基于令牌桶和漏桶算法的限流功能,可以使用Redis的计数器和定时器来实现限流。缓存:大部分的高并发场景,都是读多写少,那你完全可以在数据库和缓存里都写一份,然后读的时候大量走缓存不就得了。避免在数据库中存储明文密码。
2024-08-08 10:19:19
647
原创 Java设计模式面试
选择合适的列:选择经常用于查询、连接、排序和分组的列作为索引列。这些列通常是主键、外键、唯一键或经常用于筛选数据的列。避免过度索引:过多的索引会增加数据插入、更新和删除的开销,并且会占用更多的存储空间。只在必要的列上创建索引。考虑索引的选择性:索引的选择性是指索引列中不同值的数量与总行数的比例。选择性越高,索引的效果越好。对于选择性较低的列,可以考虑不创建索引或使用其他优化方法。组合索引:如果经常需要同时使用多个列进行查询,可以考虑创建组合索引。组合索引可以提高查询的效率,但要注意索引列的顺序,
2024-08-08 10:18:29
1269
原创 Java设计模式面试
观察者模式(Observer Pattern):定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。具体实现:创建一个支付方式的抽象类,定义支付的基本操作。观察者模式(Observer Pattern):定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。当需要避免大量的条件语句:如果一个类中有大量的条件语句来选择不同的算法,使用策略模式可以将这些条件语句替换为对策略对象的调用,使代码更简洁和易于理解。
2024-08-08 10:17:57
535
原创 Java线程面试
用于修饰变量保证可见性:当一个线程修改了一个volatile变量的值,其他线程能够立即看到这个修改。volatile关键字可以防止编译器和处理器对代码进行重排序,从而保证代码的执行顺序与预期一致。原理线程 1 将修改后的值写入到自己的工作内存中。线程 1 向主内存发送写入信号,通知其他线程A的值已经被修改。内存屏障确保其他线程在读取A之前,必须先从主内存中获取最新的值。当线程 2 读取volatile变量A时,它会直接从主内存中获取最新的值,而不是从自己的工作内存中读取可能已经过期的数据。
2024-08-08 10:17:16
691
原创 Java集合面试
当元素数量超过当前数组的容量时,Vector 会创建一个更大的数组,并将原数组中的元素复制到新数组中。扩容后,原来的元素会重新计算哈希值,并重新分布到新的哈希桶中,从而减少哈希冲突的发生。插入操作:当插入一个键值对时,首先计算键的哈希值,然后将其存储在数组的相应位置。查找操作:查找一个键值对时,同样计算键的哈希值,然后在数组的相应位置查找。链表:当发生哈希冲突时,即多个键映射到数组的同一个位置时,使用链表来存储冲突的键值对。删除操作:删除一个键值对时,计算键的哈希值,找到相应的位置和链表。
2024-08-08 10:16:31
382
原创 JVM面试
执行Java字节码的抽象机器,主要负责解释执行编译后的Java程序代码,提供一个平台无关的运行环境,“一次编写,到处运行”。内存管理:JVM 负责管理 Java 程序的内存使用。它将内存划分为不同的区域,如堆、栈、方法区等。堆内存用于存储对象实例,是垃圾回收的主要区域。栈用于存储方法调用的局部变量和执行上下文。方法区存储类信息、常量池等。JVM 通过垃圾回收机制自动回收不再使用的对象,以释放内存空间。不同的垃圾回收算法和策略可根据应用需求进行配置。垃圾回收:垃圾回收是 JVM 的重要功能之一。
2024-08-08 10:15:48
1462
原创 Java面试基础
函数式编程的优点:函数式编程强调函数的独立性、无副作用和高阶函数等概念,具有简洁、可组合、易于测试和并发编程等优点。与其他技术的集成:许多现代的技术和框架,如响应式编程、流处理和函数式库,都基于函数式编程的理念。多继承支持:虽然 Java 不支持类的多继承,但通过接口的默认方法,可以在某种程度上模拟多继承的效果。一个类可以实现多个接口,并且可以从多个接口中继承默认方法的实现。执行效率高,无需内存管理,在“栈”内运行:栈的操作是基于栈指针的移动,并且基本数据类型的大小是固定的,所以栈的分配和释放速度非常快。
2024-08-08 10:14:57
216
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人