- 博客(66)
- 资源 (1)
- 收藏
- 关注
原创 互联网大厂Java面试实录:严肃面试官与搞笑谢飞机的三轮对决
本文通过一个真实感的面试故事,展现了互联网大厂Java求职者谢飞机与面试官之间的提问与回答,涵盖Java核心知识、JUC、多线程、线程池、集合框架、Spring、MyBatis、Dubbo、RabbitMQ、xxl-job、Redis、MySQL、Linux、Docker、设计模式及DDD等热点技术。文章最后附有详细技术解答,帮助小白系统学习。
2025-12-30 10:20:43
726
原创 内网穿透(FRP)部署小结,服务器上xxl-job 调度本机任务
别人访问这个公网地址,就能看到你家里的网站了。你在家里的电脑上搭了一个网站(比如运行在。,外面的人根本访问不到。
2025-12-02 09:48:24
1128
原创 docker、Docker-Compose、Portainer和1Panel安装部署、docker部署mysql、redis、rabbitmq、xxl-job、Prometheus
这样对国内服务器拉取Docker仓库影响比较大。不过得亏国内有Docker Hub镜像平台。有付费的,有免费的!文件,并将国内源的配置写入其中。然后你只需要重启 Docker 服务即可使配置生效,可以通过运行。进入修改添加 registry-mirrors 内容后重启 Docker。使用以下命令来设置 Docker 国内源:- 或者你可以通过。“不知” 何种原因国内均无法正常访问了。注意:可能会更新失败,那就操作以下指令。:如果是阿里云服务器,还需要先执行。命令来重启 Docker 服务。
2025-11-21 16:25:04
1252
5
原创 Day02 广度优先搜索(BFS) | 200. 岛屿数量、433. 最小基因变化
记录了所有有效的基因变化,只有基因库中的基因才是有效的基因序列。(变化后的基因必须位于基因库。岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。一次基因变化就意味着这个基因序列中的一个字符发生了变化。基因序列可以表示为一条由 8 个字符组成的字符串,其中每个字符都是。所需的最少变化次数。如果无法完成此基因变化,返回。(水)组成的的二维网格,请你计算网格中岛屿的数量。默认是有效的,但是它并不一定会出现在基因库中。此外,你可以假设该网格的四条边均被水包围。,请你找出并返回能够使。
2025-09-29 15:52:01
184
原创 Day01 深度优先搜索(DFS) |17. 电话号码的字母组合、51. N 皇后
用 DFS 枚举所有可能的字母组合,递归过程中逐步构建字符串,直到用完所有数字。按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。的字符串,返回所有它能表示的字母组合。的棋盘上,并且使皇后彼此之间不能相互攻击。的棋子放置方案,该方案中。每一种解法包含一个不同的。分别代表了皇后和空位。
2025-09-28 17:23:10
301
原创 Day07 图 | 684. 冗余连接
中间,且这条附加的边不属于树中已存在的边。图的信息记录于长度为。) 的树中添加一条边后获得。添加的边的两个不同顶点编号在。请找出一条可以删去的边,删除后可使得剩余部分是一个有着。如果有多个答案,则返回数组。图的深度优先遍历,使用出边数组。树可以看成是一个连通且。给定一个图,该图从一棵。
2025-09-25 17:24:11
341
原创 Day06 递归& 树| 236. 二叉树的最近公共祖先
采用标记法,先递归记录所有 父节点的映射,再通过移动p点,标记所有p点经过的root节点,最后移动q点,找到最近的标记的root即是他们最近公共祖先。中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。
2025-09-23 17:39:33
282
原创 Day05 递归 & 树| 94. 二叉树的中序遍历、589. N 叉树的前序遍历、429. N 叉树的层序遍历
使用队列完成广度优先搜索,层序遍历:一层一层遍历,示例1 就是按照 1 – 3 — 2 — 4 — 5 ----6 顺序遍历。树的序列化输入是用层序遍历,每组子节点都由 null 值分隔(参见示例)。n 叉树 在输入中按层序遍历进行序列化表示,每组子节点由空值。递归深度优先,按“左-根-右”顺序把二叉树节点值收集到列表。前序遍历:根 – 左 — 右。给定一个 N 叉树,返回其节点值的。给定一个 n 叉树的根节点。(即从左到右,逐层遍历)。给定一个二叉树的根节点。分隔(请参见示例)。
2025-09-22 15:49:35
370
原创 Day03 递归 | 98. 验证二叉搜索树、104. 二叉树的最大深度、111. 二叉树的最小深度
先拿到左右子树的深度,再取最大值加 1,空树深度为 0。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。是指从根节点到最远叶子节点的最长路径上的节点数。**说明:**叶子节点是指没有子节点的节点。只有两边都不空时才取。,判断其是否是一个有效的二叉搜索树。给定一个二叉树,找出其最小深度。给你一个二叉树的根节点。,遇到单边为空时不能取。
2025-09-19 16:34:13
355
原创 Day02 递归 | 46. 全排列、226. 翻转二叉树
—每个节点只管 swap 自己的左右,剩下的交给递归。,翻转这棵二叉树,并返回其根节点。给你一棵二叉树的根节点。
2025-09-18 22:53:39
196
原创 Day07 前缀和 | 560. 和为 K 的子数组
2、再通过hashmap统计 ,子段和 = sum[r] - sum[l-1],即sum[l-1] = sum[r] - 子段和。
2025-09-16 21:32:41
149
原创 Day06 双指针扫描 | 11. 盛最多水的容器
2、发现关键 – 盛多少水由短的那根决定的,短的算完了就没用了。3、双指针 – 两个指针从头尾向中间移动,每次移动短的那根。1、两重循环枚举,找冗余。
2025-09-15 22:25:10
205
原创 Day05 双指针 | 167. 两数之和 II - 输入有序数组 、15. 三数之和
三数之和可以转换为两数之和的问题,三数之和为零,则可以找出两数之和为 a+b = -c,取i位数 c 双指针扫描(前提数组递增),i+1位 与 nums.length - 1向中间靠拢找出两数相加为 -c 的,即是需要的数。双指针,左端不变,右端逐渐减小,逐渐计算是否等于目标值,如果不等,则左端移动一位,右端逐渐减小,直到相等,返回索引。
2025-09-14 13:07:14
207
原创 Day04 前缀和&差分 1109. 航班预订统计 、304. 二维区域和检索 - 矩阵不可变
原数组A为[0,1,-1,-1,0] 需要 对 2 到 4 个数+1 最终应该为:【0,2,0,0,0】这类问题可以先得出差分,对差分计算,再求前缀和即可以得到答案。1、差分数组B的前缀和数组就是原数组A。
2025-09-13 14:40:13
260
原创 Day03 前缀和 | 1248. 统计「优美子数组」、53. 最大子数组和
需要了解前缀和与子段和,奇数看作1,偶数看作 0,求前缀和数组S连续子数组[l,r]中的奇数个数为 S[r]-S[l- 1] = k。先获取前缀和集合,然后再转换为两数之差, 找出s[r] -k 的数据有多少个即可。1、一样先枚举前缀和数组,S[i] = S[i-1 ] + A[i]; sum(l,r) 需要最大值,则 s[l- 1] 需要最小。 子段和 sum(l,r) = s[r] - s[l- 1]解法一:前缀和,熟悉前缀和解法。3、最后比较取最大值。
2025-09-12 17:38:27
267
原创 Day02 集合 | 30. 串联所有单词的子串、146. LRU 缓存、811. 子域名访问计数
将字符串数组存入map,key为每个元素,value为元素个数, 遍历字符串,每次截取字符串数组长度,将截取后的字符串再次分段截取并存入map1中,最后比对2个map,相同则添加索引到list中。HashMap + 链表 ,map方便查找,链表方便头插和去尾部,以及删除。使用hashmap存储相同数据 以及次数,使用递归拆解域名。
2025-09-11 11:20:15
342
原创 Day01 集合 | 1. 两数之和、874. 模拟行走机器人、49. 字母异位词分组
将障碍物hash存储到set集合中,然后将左转右转 转换为每次获取当前位置(在新建的一维数组中的位置) 新建2个一维数组,分别表示北 东 南 西 向前一步的数据,然后,每次累加坐标值,并获取最大值。遍历数组,对每个字符串进行排序,map判断是否存在排序后的key,若存在,则将该元素放入map value中,否则新增数组,也放入数组中,最后将map的所有values取出放入数组中返回。遍历数组,使用map存储target 与元素之差,value存储数组下标。
2025-09-09 15:02:02
284
原创 Day06 单调队列 | 239. 滑动窗口最大值
单调队列题目代码模板for循环遍历每个元素 while(队头过期){队头出列} 取队头为最佳选项,计算答案 while(队尾与新元素不满足单调性{队尾出列} 新元素入队。
2025-09-07 11:18:14
145
原创 Day05 单调栈 | 84. 柱状图中最大的矩形、42. 接雨水
确定递增递减 --------关键在于考虑前面不能影响后面条件柱状图中最大的矩形题目中若 h[i-1] > h[i] ,则h[i-1] 这个高度就无法影响到更后面,自然可以单独计算单调栈题目代码模板for循环遍历每个元素 while(栈顶与新元素不满足单调性){弹栈 ,更新答案,累加宽度} 入栈。
2025-09-06 15:55:58
337
原创 Day04 栈| 20. 有效的括号、155. 最小栈、150. 逆波兰表达式求值
使用栈,遇到左括号则入栈,如果为右括号则判断栈是否为空,为空则说明当前右括号无效,不为空,则取出栈顶数据,看看是否匹配,不匹配,则返回false,匹配则继续遍历,当遍历完成后,最后判断栈是否为空,为空则说明全部匹配,返回true,否则返回false。,也称为波兰式(Polish notation),是一种没有括号的算术表达式,其运算符位于操作数之前。示例:中缀表达式“(3+4)×5-6”转换为前缀表达式为“- × + 3 4 5 6”。示例:3 + 2 的后缀表达形式为 3 2 +
2025-09-05 14:39:30
311
原创 Day03 链表 | 206. 反转链表、25. K 个一组翻转链表
遍历链表,构建前节点,头节点下一步需要临时存储起来,然后头节点链接指向前一个节点,前一个节点向前移动,头节点也向前移动一步(即头节点赋值临时节点,注意顺序)
2025-09-04 13:05:58
222
原创 Day02 数组&链表 | 66.加一、141.环形链表、21. 合并两个有序链表
倒序遍历数组,过滤器判断,如果元素不为9,则加1直接返回,如果为9,则将元素更新为0,遍历完成后还未结束,则说明 出现类似 999、9999等数据,新构建一个数组,首位更新为1即可。遍历链表,过滤器判断,判断1:谁链表已遍历完成则不用管,判断2:都没遍历完,谁小取谁。注意构建一个保护节点(和合并数组解法类似)快慢指针,遍历链表,慢指针每次走一步,快指针每次走2步,如果快指针和慢指针数据相等,则说明相遇了,即证明有环,否则,无环。
2025-09-03 11:41:57
237
原创 Day01 数组 | 26.删除有序数组中的重复项、283.移动零、88.合并有序数组
遍历数组,过滤器判断,第一个元素先赋值数组,k加1,比较当前元素是否与上一个不同,不同则更新到数组中,k++。遍历数组,过滤器判断,判断当前元素是否为0,不为0,更新数组对应下标元素,最后再给数组补充0。倒序遍历数组,过滤器判断,判断1:谁出界则不用管,判断2:都不出界,谁大取谁。遍历数组,过滤器比较,更新数组。
2025-09-02 17:01:28
142
原创 如何保证接口幂等性
客户端会先发送一个请求去获取 token,服务端会生成一个全局唯一的 ID 作为 token 保存在 redis 中,同时把这个 ID 返回给客户端。如果校验失败,说明 redis 中已经没有对应的 token,则表示重复操作,直接返回指定的结果给客户端。服务端会校验这个 token,如果校验成功,则执行业务,并删除 redis 中的 token。因为表中某个字段带有唯一索引,如果插入成功,证明表中没有这次请求的信息,则执行后续的业务逻辑。如果设置成功,证明这是第一次请求,则执行后续的业务逻辑。
2024-07-05 15:42:56
1045
原创 自定义注解+aop实现接口限流
自定义注解+aop实现接口限流一、自定义注解@Target(ElementType.METHOD) //指定注解在方法上@Retention(RetentionPolicy.RUNTIME) //指定新注解保留到程序运行时期@Inherited // 指定新注解标注在父类上时可以被子类继承@Target({ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)public @interface RateLimiterQry { /
2021-07-19 21:23:25
808
原创 反射与注解
反射与注解一、反射使用反射机制可以动态的获取当前class的信息,比如方法的信息、注解信息、方法的参数、属性反射目的:方便开发者对框架的拓展,缺点:消耗一定资源、破坏封装性二、字节码对象创建方式 Class class1 = 类名.class Class class2 = Class.forName(包路径) //使用最多 Class class3 = 对象.getClass() // class1 == class2 == class3 三、反射常用api
2021-07-19 21:17:42
520
原创 Spring是什么?
Spring是什么?一.spring是什么?Spring是一个轻量级的IoC/DI和AOP容器的开源框架二.spring的优点1.Spring 能帮我们低侵入/低耦合地根据配置文件创建及组装对象之间的依赖关系 //解耦2.Spring 面向切面编程能帮助我们无耦合的实现日志记录,性能统计,安全控制等 //提高代码重用性3.Spring 能非常简单的且强大的声明式事务管理 //使用xml或注解的方法,底层用到动态代理4.Spring 提供了与第三方数据访问框架(如JPA)无缝集成
2020-09-10 17:42:08
7934
1
原创 将cookie响应给浏览器(携带token)
将cookie响应给浏览器(携带token)CookieUtil工具类public class CookieUtil { public static void addCookie(String cookieName, String cookieValue , int expireTime, HttpServletResponse response){ //通过cookie名字,cookie值创建对象 Cookie cookie = new
2020-09-07 14:27:54
2075
原创 JSR303参数校验
JSR303参数校验一.JSR303是什么? JSR303 是一套JavaBean参数校验的标准,它定义了很多常用的校验注解, 我们可以直接将这些注解加在我们JavaBean的属性上面,就可以在需要校验的时候进行校验了。二.业务模块 member-server封装类(添加限制条件)@Getter@Setterpublic class LoginVo { //使用注解,限制条件,并规定错误信息 @Pattern(regexp = "1[345678]\\d{9}",messa
2020-09-07 14:21:21
792
原创 分布式项目统一异常处理
分布式项目统一异常处理公共模块shop-common1.异常后返回给前端的封装类@Setter@Getterpublic class CodeMsg implements Serializable { private int code; //状态码 private String msg; //异常信息或成功信息 public CodeMsg(int code, String msg) { this.code = code; this.m
2020-09-07 14:00:47
1658
1
原创 分布式项目中的跨域问题
分布式项目中的跨域问题一.什么时候产出跨域?当浏览器访问服务时(网关),ip 端口 协议一个不同就会产生跨域问题二.跨域请求原理三.解决跨域问题在Zuul网关启动类加上以下配置即可@SpringBootApplication@EnableZuulProxypublic class ZuulServerAPP { public static void main(String[] args) { SpringApplication.run(ZuulServerAPP.cla
2020-09-05 17:16:02
1078
原创 SpringCloud之Config(分布式配置中心)
SpringCloud之Config(分布式配置中心)一.SpringCloud config是什么?简单来说,Spring Cloud Config就是能将各个 应用/系统/模块 的配置文件存放到统一的地方然后进行管理(Git 或者 SVN),客户端通过接口去获取这些配置文件。 SpringCloud config 为微服务架构中的微服务提供集中化的外部配置支持, 配置服务器为各个不同微服务应用的所有环境提供了一个中心化的外部配置二.SpringCloud config怎么用?SpringC
2020-09-04 23:26:29
487
SpringCloud是什么.md
2020-09-01
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅