- 博客(53)
- 资源 (16)
- 问答 (2)
- 收藏
- 关注
原创 LeetCode每日一题-验证二叉搜索树
题目给定一个二叉树,判断其是否是一个有效的二叉搜索树。假设一个二叉搜索树具有如下特征:节点的左子树只包含小于当前节点的数。节点的右子树只包含大于当前节点的数。所有左子树和右子树自身必须也是二叉搜索树来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/validate-binary-search-tree分析这道题不细心的话容易踩坑,一般惯性思维都会只比较当前节点与左右子节点的值,一开始我认为这是一道简单题,快速
2021-07-27 20:23:03
92
原创 LeetCode每日一题-接雨水-执行时间击败100%的用户
题目给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]输出:6解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水),详细见下图。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/trapping-rain-wat
2021-07-26 13:10:31
278
原创 LeetCode每日一题-滑动窗口最大值
题目给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。示例 1:输入:nums = [1,3,-1,-3,5,3,6,7], k = 3输出:[3,3,5,5,6,7]分析这道题先用暴力求解演练一遍对解题是有帮助的,因为它并没其它奇思妙想,都是在暴力法上加速。先过一遍暴力法的过程:窗口每向前滑动一格,剔除最左边元素后再求窗口内最大值,过程
2021-07-25 21:31:37
359
原创 spring源码解析-aop下篇
引子上一篇 spring源码解析-aop第一篇 主要是为读aop代码做技术准备, 一方面了解spring aop与aspectJ之间的关系,另一方面通过多种使用示例了解spring aop工作方式,接下来我们开始分析spring aop的代码。示例老规矩,读源码从用例断点开始,虽然spring实现aop有多种方式,但由于springboot使用越来越广泛,开发者也越来越喜欢用注解进行开发,所以我们例子也是纯注解。//创建一个被代理类,spring aop将它称作为advicepack..
2021-07-23 00:27:39
150
3
原创 spring源码解析-aop第一篇
引子上一篇spring源码解析-启动流程与循环依赖分析了spring ioc部分的源码,这一篇则分析aop源码,但aop需要先准备面向切面编程的相关知识,否则学起来会很吃力,所以aop第一篇是先看一下spring aop用到的面向切面的相关知识,为下篇读源码做准备。aspectJ与spring aop区别spring核心包里引入aspectJ,而aspectJ是一个完整的aop框架,那是不是spring直接使用aspectJ来实现aop相关功能呢?我们先简单了解一下aspectJ..
2021-07-22 20:20:58
170
1
原创 spring ioc源码解析-启动流程与循环依赖
使用示例读源码先从最简单的使用示例入手,然后一层一层往下探索,下面先写一个典型的spring小例子,来看一下它的入口与使用方法://创建User类public class User { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; }}
2021-07-22 20:19:48
132
1
原创 Caffeine源码解读-缓存过期淘汰相关算法
引子:上一篇通过使用示例讲解了Caffeine的框架部分 Caffeine源码解读-架构篇,这一篇继续通过示例讲解缓存过期相关算法部分,来看看它与guava cache有什么不一样的设计。使用示例:继续使用相同的例子,不过是从PUT、GET开始说起,了解了它的工作流程自然会知道它的缓存过期逻辑://初始化 Cache<String, String> cache = Caffeine.newBuilder().maximumSize(100) .expireA
2021-07-11 18:09:18
3092
原创 flink1.12通过sql实时写redis
插件名称:flink-connector-redis插件地址:https://github.com/jeff-zou/flink-connector-redis.git项目介绍基于bahir-flink二次开发,使它支持SQL直接定义写入redis,用户通过DDL指定自己需要保存的字段。使用方法:命令行执行 mvn package -DskipTests=true打包后,将生成的包flink-connector-redis_2.12-1.11.1.jar引入flink lib中即可,无需
2021-07-07 16:59:46
1746
原创 LeetCode每日一题-三数之和
题目:给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。示例 1:输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]示例 2:输入:nums = []输出:[]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/3sum
2021-07-05 20:34:41
136
原创 LeetCode每日一题-三数之和
题目:给你一个包含 n 个整数的数组nums,判断nums中是否存在三个元素 a,b,c ,使得a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。注意:答案中不可以包含重复的三元组。示例 1:输入:nums = [-1,0,1,2,-1,-4]输出:[[-1,-1,2],[-1,0,1]]示例 2:输入:nums = []输出:[]来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/3sum...
2021-07-05 20:27:05
132
原创 mybatis insert后返回主键ID实现方法及源码分析
引子:mybatis这类ORM在往数据库insert对象后,会顺带将数据库中的自增主键值赋值给对象的id,这个功能给我们的开发带来了很多方便,那它是怎么实现的呢?源码分析:利用mybatis实现这一功能非常简单,网络上有一大把资料,今天我们主要看它是怎么实现的?通过断点insert可以跟踪到这个类:PreparedStatementHandler.java的update方法。public int update(Statement statement) throws SQLExcepti
2021-07-02 13:28:18
1131
2
原创 LeetCode每日一题-盛最多水的容器
题目:给你 n 个非负整数 a1,a2,...,an,每个数代表坐标中的一个点 (i, ai) 。在坐标内画 n 条垂直线,垂直线 i 的两个端点分别为 (i, ai) 和 (i, 0) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。说明:你不能倾斜容器。示例 2:输入:height = [1,1]输出:1示例 3:输入:height = [4,3,2,1,4]输出:16来源:力扣(LeetCode)链接:https://leetcod
2021-07-01 22:52:51
149
1
原创 flink 1.11 基于SQL向redis更新多维度状态(多字段)
在实时计算平台接入业务过程中,经常遇到这样一个问题: 第一个任务获得的最新状态需要提供给后续一个或者多个任务使用。解决这个问题有很多方法,将状态序列化到消息队列中或者持久化到数据库中,但这些方法要么实时性不足要么使用上有oom问题,当这些最新状态数量达到亿级或者更大时,有比较合适一点的方法来解决这个问题吗? 我的解决方案是将状态存入redis-cluster中,这样在容量上及速度上满足了业务的需求,当然容量大小还是有限制的,不过现有大部分业务需求可以完全满足,当然这个方案还是有几个关键问题的,具体...
2020-11-15 23:32:25
1426
2
Keepalived+HAProxy配置高可用负载均衡,解决keepalived无法安装问题
2012-03-15
Linux下TOMCAT SSL支持设置
2012-02-15
Oracle11g安装文档_SUSE_11_server_sp1
2011-09-15
MLDN (我的智囊团)源代码
2009-04-26
求正则表达式, 发30 C币
2016-06-29
求shell正则表达式, 发C币
2016-06-24
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅