DFS & BFS 三维迷宫——地牢大师题目描述:2251 – 地下城主 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768import java.util.*;class PIIs { public 2025-03-08 Java #java
redis是否支持事务 写在前面高德测开一面,被问到mysql和redis的事务,mysql的ACID都回答的没有问题,但我当时想到redis好像没有回滚之类的操作,就回答redis不支持事务。 面试完上网搜才知道,Redis确实没有回滚机制,但是可以保证一组操作批量执行,只是无法做到“一个失败就恢复到初始状态”。 以下为一些不太完整的总结。 redis常用命令MULTI:开启一个事务。 执行成功返回OK。当开启事务后, 2025-02-20 redis #redis
为什么SQL语句走了索引,执行却很慢? 写在前面我们都知道,业务开发涉及到数据库的SQL操作时,一定要review是否命中索引。否则,会走“全表扫描”,如果表数据量很大时,会慢的要死。 但假如命中了索引,就一定不会出现慢查询吗? 慢查询MySQL的慢查询日志是MySQL提供的一种日志记录,用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。 Explain其 2025-02-20 mysql #mysql
为什么核心线程池满了后,不直接创建新的线程去执行新任务? 写在前面我们都知道线程池工作流程是先创建核心线程,核心线程满了之后将任务放入阻塞队列,阻塞队列满了之后才会创建非核心线程,直到线程数达到最大线程数了,才去采取相应的拒绝策略处理新来的任务。流程如下图所示: 问题本以为对线程池这块已经没有什么疑问了,直到面试被问到为什么是先放阻塞队列,而不是先创建非核心线程? 看了些回答,大致原因如下,总结下做个记忆: 核心线程执行完当前的任务之后,会从工作队 2025-02-20 Java #java
外部排序实现 写在前面本文记录自己实现外部排序所遇到的问题以及所有思考。 实现原理当数据量过大,内存无法一次性容纳所有数据时,我们就需要用到外部排序。既然内存无法容纳全部数据,那必然要涉及到磁盘的读写问题。 磁盘空间是以“块”为单位进行空间管理的。同样,读和写也是以“块”为单位。数据只有读入内存才能进行修改,修改完还需要写回磁盘。 第一阶段:部分排序阶段 根据内存大小,将待排序的文件拆成多个部分,使得每个部分都 2025-02-11 Java #java
HashMap源码分析 写在前面HashMap的实现原理、扩容机制在jdk1.7以前和jdk1.8以后有着很大的区别,由于我的电脑上的版本是jdk21,所以以下近针对jdk1.8以后。 底层实现123456789101112131415static class Node<K,V> implements Map.Entry<K,V> { final int hash; fina 2025-01-25 Java #java