- 博客(220)
- 资源 (1)
- 收藏
- 关注

原创 Trie树实现前缀自动补全 + AC自动机实现敏感词过滤
文章目录背景扩展AC自动机背景最近参与了某业务系统的开发, 需要根据城市的名字简称,找到其官方的完整名称。比如云南的大理,其实其完整的名称是大理白族自治州。可以参考官方的行政区划,点这里。通常来说,城市的简称,都是其完整名称的前缀。所以任务就转化成了:根据前缀,在一堆字符串中,找出满足条件的字符串。Trie树可以派上用场,只需要对全国所有城市的完整名称,建一颗Trie树即可。这种前缀补全的功能,也有其他的一些经典应用,比如在命令行下,输入一个命令的前缀,或文件名的前缀,敲下 Tab,能够进行自动补全
2022-04-26 14:31:51
2154

原创 重学Java并发 - 手写并发工具类
最近再重学Java多线程的内容,Java中线程的同步基本是靠两种方式,一是Object自带的Monitor机制,通过Object上的wait/notify实现的等待/通知模式;二是JUC并发包下的Lock系列API,底层是通过LockSupport的park/unpark来实现的等待通知(park和unpark是native方法,由JVM实现,在Linux下是借助pthread_cond_wait和pthread_cond_signal实现)现使用Object的wait/notify机制,自实现一个简易的
2022-04-20 16:57:34
794

原创 RabbitMQ学习笔记(持续更新ing)
文章目录快速入门进阶消息确认机制消息持久化消息公平分发扩展消息安全性Prefetch快速入门首先安装rabbitmq(单机版)rabbitmq的安装(官网文档)在我自己租的云服务器上,直接用docker进行安装(一行命令搞定)docker run -it --rm --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:3.9-management然后在阿里云的控制台,放开5672和15672端口随后,可以直接登录rabbitmq的管理后
2021-12-14 16:49:28
2510

原创 通过Shell脚本自动化提取日志并上传文件到SFTP服务器
服务器环境:CentOS 6.9前言先前做了个系统,按照接口调用次数进行计费。每次的接口调用,会在日志中记录该次接口调用的详细信息(一行日志),包括:商户:发起该次调用的是哪个商户接口:该次调用的是哪个接口个人信息:该次调用传递的个人信息结果:该次调用的结果,是调用成功还是失败(成功才会计费)时间:调用发生的时间唯一id:标识该次调用的唯一id是否计费:YES/NO某个商户对某个接口的调用次数,以权益的形式进行预充值,随后调用则在总次数中进行扣减。后来,由于每个月需要和上下游商户进
2021-10-21 16:54:51
3170
1

原创 微服务架构之 —— RPC框架
RPC简介RPC是什么Remote Procedure Call,远程过程调用。首先来说本地方法调用,假设在main方法中调用一个本地的方法multiply(同一个进程内的方法调用)。无非是做了内存寻址和一些堆栈操作。而假设main方法和multiply方法不在同一个进程中,两者则通过RPC的方式进行调用(通信)。由于是跨网络通信,需要考虑将方法调用和参数,如何变成网络上可传输的二进制流(涉及到参数和结果的序列化,反序列化,socket网络编程等细节)。而这就是RPC框架的意义,它帮助开发人员,
2021-09-23 15:12:32
3990

原创 一文看懂KMP(看毛片)算法
一文看懂KMP算法KMP是一种模式匹配算法。常用于在一个较长的字符串中查找一个较短的字符串。通常称较长的字符串为主串,较短的待匹配的字符串为模式串。比如给定一个主串S = ababacd,一个模式串P = abac,那么最终能够在主串中成功匹配到模式串通常,针对某一些算法问题,我们可以首先考虑一个暴力的解法,随后通过寻找规律,来省略掉一些无效的步骤,从而完成优化。对于字符串匹配,很容易想到的暴力解法就是使用双指针。如主串S的长度为n,模式串P的长度为m(n > m)。定义指针i和j,i初始
2021-05-11 17:22:21
21722
11

原创 Spring系列开篇 — 核心功能 IoC, AOP (附事务管理,spring与mybatis整合等)
文章目录概述重要概念快速入门基本使用纯XMLIoC配置DI配置构造函数注入set方法注入c命名空间和p命名空间XML+注解IoC配置DI配置纯注解IoC配置Spring整合JUnit4SpringAop术语介绍JDK动态代理示例CGLib动态代理示例使用快速上手切入点指示器AOP参数传递事务支持XML方式XML+注解纯注解小结附录IoCAOPbean的生命周期这篇文章是Spring系列笔记的开篇,介绍了Spring的两大核心功能:IoC和AOP。以及基于AOP的事务管理,Spring与mybatis的整合
2021-04-09 00:32:52
1113
9

原创 Mybatis Plus 看这篇就够了,通俗易懂,一发入魂
文章目录快速入门注解小结mp的默认行为排除非表字段核心功能CRUD接口Mapper CRUD接口Service CRUD 接口条件构造器使用示例其他Condition构造Wrapper时传入实体allEq方法lambda条件构造器其他CRUD接口说明selectMapsselectObjsselectCount自定义SQL原生mybatisMybatis-plus分页查询更新操作反思删除操作AR模式主键策略主键策略小结配置基本配置进阶配置小结代码生成器Mybatis plus 是一款Mybatis增强工具
2021-03-24 23:30:49
12266
25

原创 mybatis看这一篇就够了,简单全面一发入魂
文章目录Mybatis概述快速入门原生开发示例基于Mapper代理的示例基于注解的示例应用场景主键返回批量查询动态SQL缓存关联查询延迟加载逆向工程PageHelper分页插件Mybatis PlusMybatis概述mybatis是什么?有什么特点?它是一款半自动的ORM持久层框架,具有较高的SQL灵活性,支持高级映射(一对一,一对多),动态SQL,延迟加载和缓存等特性,但它的数据库无关性较低什么是ORM?Object Relation Mapping,对象关系映射。对象指的是Java
2020-05-27 22:32:30
293395
158
转载 WINDOWS下MySQL的安装
解压,并以管理员权限打开CMD,进入安装目录下的。前往官网,下载社区版(这里下载ZIP包),(这一步会给出初始密码)将MySQL安装为服务。目录,执行初始化命令。
2023-01-09 21:43:10
274
原创 LeetCode 324 周赛
很遗憾没有参加这场周赛,痛失一次AK的机会!T1是暴力模拟(可以留意一下使用位运算提取特征的技巧);T2是数论(分解质因数);T3是分类讨论;T4是一道简单的图论,找最近公共祖先。
2022-12-27 17:17:34
563
原创 LeetCode 323周赛
holy shit!本场周赛太拉跨了,只做出2题。T1是排序+模拟;T2是排序+递推(有点动态规划的意味);T3可以直接暴力做;T4是连通块问题。本次周赛,T3其实没有T2难,但T3我一直没通过。一是没注意到数据范围,也没想到可以直接用数组对内存分配进行暴力模拟;二是coding熟练度还不够,一些细节的处理不是特别好,coding中容易写错变量或者判断条件,然后需要花大量时间才能找到问题所在。比较可惜。T4听完并消化一些大佬的讲解后,发现难度不算大;做不出来,主要还是练的题不够多。
2022-12-26 16:56:36
674
原创 LeetCode 322 周赛
T1是简单模拟;T2是哈希表,也可以找规律;T3是个简单的并查集;T4是并查集+BFS求最短路径树的最深层次。没想到T4可以直接暴力枚举所有点作为BFS的起点,我一开始可高估了时间复杂度,就在往贪心的方向上想,而没想到暴力可以做。
2022-12-22 12:53:11
896
原创 LeetCode 92 双周赛
就开始想,由于回文长度为5,且回文具有对称性,那么只需要计算某个位置的字符作为回文串的第一个,第二个字符即可。作为回文序列的第一个字符,那么我们需要找到其对称的最后一个字符,只要确定最后一个字符的位置,我们就可以把问题转变为求解中间区间内,长度为3的回文子序列的个数。作为中点的回文子序列有多少个,由于回文子序列长度为5,左右两侧是对称的,那么只需要枚举一侧的两位数字,对于每种组合。对于枚举中点来说,看以当前元素作为回文序列的中间点,能构成的长度为5的回文序列,那么只要看当前位置之前的。的回文子序列的个数。
2022-12-20 14:44:38
684
原创 每日一题 —— LC. 1687 从仓库到码头运输箱子(难度很大,但值得好好消化的一道题)
这道题目还是非常的有难度的,难度估分达到了2600分。我花了2天才把这道题搞明白,太不容易了!(TAT此题考察的知识点也比较多,需要将多种经典算法组合起来,包含了动态规划,前缀和,单调队列或贪心。值得好好消化理解。单调队列的优化思路尤其难想,需要对等式,不等式进行变换,以及观察规律。
2022-12-09 11:38:58
788
原创 每日一题 —— LC. 1774 最接近目标价格的甜点成本
你打算做甜点,现在需要购买配料。目前共有 种冰激凌基料和 种配料可供选购。而制作甜点需要遵循以下几条规则:给你以下三个输入:你希望自己做的甜点总成本尽可能接近目标价格 。返回最接近 的甜点成本。如果有多种方案,返回 成本相对较低 的一种。提示示例思路由于自己还比较菜,所以当时的思路一通乱飞。但是记录下自己思考的过程我觉得挺好还原一下我当时的脑子:(真是个猪脑子,怎么推出来 2302^{30}230的?)我仔细回想了下当时的情景,2302^{30}230 大概是这么来的 →真是个猪脑子 × 2其实暴
2022-12-07 16:12:04
467
原创 LeetCode 320 周赛
本场周赛太拉跨了!T1做完后,T2一直被卡住,还好后面暂时跳过了T2去做T3,T3做完后又回过头来继续调试T2。在最后10分钟调过了(虽然后来看运行时长达到了1400ms(差点就过不了))。这周被T2搞了,差点就是一题选手。T1是暴力模拟;T2是预处理+二分;T3是图的遍历;T4是动态规划+前缀和优化。T4还是具有一些思维难度的。
2022-11-23 16:53:58
401
原创 LeetCode 319 周赛
第三次AK,还是有点小激动的!T1是模拟;T2是数论;T3是层序遍历+选择排序/置换环;T4是回文串题目,其实是2个问题的组合,1是求回文串,2是求不重叠回文子串的最大数目;可以用中心开花求回文串,并用贪心求答案;也可以用更为朴素的动态规划。
2022-11-22 16:38:31
752
原创 LeetCode 318 周赛
T1是双指针模拟;T2是滑动窗口;T3是双指针+堆;T4是动态规划这次周赛是在周日上午,由于前一周拔了牙,当天周日早上去医院拆线,所以这场周赛没有参加。后来做了下虚拟比赛,只做出3题,T4还差点思维。
2022-11-18 10:40:11
741
原创 每日一题 —— LC. 790 多米诺和托米诺
有两种形状的瓷砖:一种是2 x 1的多米诺形,另一种是形如 “L” 的托米诺形。两种形状都可以旋转。给定整数n,返回可以平铺2 x n的面板的方法的数量。返回对10^9 + 7取模 的值。平铺指的是每个正方形都必须有瓷砖覆盖。两个平铺不同,当且仅当面板上有四个方向上的相邻单元中的两个,使得恰好有一个平铺有一个瓷砖占据两个正方形。
2022-11-17 16:08:14
480
原创 每日一题 —— LC. 805 数组的均值分割
然后对后15个数再做一次暴力搜索,对于后15个数的每种方案,我们看一下能否和前15个数的某个方案组合在一起,形成满足条件的方案。不过我们的判断条件就变得更为简单了,假设存在满足条件的划分,那么我们找到的A数组的和一定为0,B数组的和也一定为0。假设数的总个数为30,我们可以先对前15个数做一次暴力搜索,找出前15个数的所有组合方案,这时的复杂度为。既然是选取某些数,那么容易想到,每个数都有选或者不选两种情况,根据题目的数据范围,数组的总长度最大为30,那么总的方案数就是。),若有,则找到一种有效划分。
2022-11-16 21:16:14
513
原创 每日一题 —— LC. 775 全局倒置与局部倒置
根据上面的分析,要局部倒置等于全局倒置,则数组整体来看是要单调递增的,如果出现递减,则一定是相邻两个数。仔细审题,由于每个局部倒置,一定是一个全局倒置。而要局部倒置和全局倒置的数量相等,则说明所有的全局倒置就是所有的局部倒置。局部倒置的数量可以通过一次遍历求出,全局倒置的数量等同于求逆序对数量,可以用归并排序来做。右侧的数不必考虑,因为在遍历到右侧某个数时,会往左看,是会把。若没有这个特殊的条件,则思路二才是更加通用的做法。,所以A一定是大于等于A左侧的所有数的(),B也一定是小于等于B右侧的所有数的(
2022-11-16 11:34:54
343
原创 LeetCode 317 周赛
这场比赛一雪昨晚只做出2题的耻辱!但这场比赛总的来说难度感觉不是很大。T1是模拟;T2是模拟+哈希表;T3是贪心;T4是图论DFS,树的遍历;
2022-11-01 14:48:22
301
原创 LeetCode 90 双周赛
本场比赛很拉跨。只做出两题。最近准备换租,当天晚上去楼上新的房子里打扫了卫生,有点累,做题的时候有点心不在焉,边做边和朋友聊天。哈哈哈,结果第一题花了45分钟才做出来。第三题也是在临近12点比赛结束时才发现规律, 等到提交通过时已经是12点4分了。T1可以模拟,也可以用哈希表;T2暴力;T3是数学问题,需要察觉到规律就是模运算,同余;T4是单调栈的变形运用,注意,如果扩展一下,求右侧第k大,那么y总的那种下标排序+有序列表是比较有效的。另外,这里再次看到了,
2022-10-31 16:38:48
389
原创 每日一题 - LeetCode 907.子数组的最小值之和
并不能取到第一个3的位置以及更左侧的位置,所以,对于那些左端点在第一个3左侧,右端点在第二个3右侧的子数组,在第一个3的时候已经被算过,且在第二个3时不会再次被计算,对于后续再出现相同的3也一样。我们计算所有子数组的最小值的和,肯定是不能通过子数组来算了,因为只要通过枚举子数组来算,子数组的个数就一定是。,由于重复的子数组需要满足的条件是,左端点在第一个3左侧,右端点在第二个3右侧。],容易看到,这是同一个子数组。对于第一个3,左侧第一个小于等于3的位置是0,右侧第一个小于3的位置是6,那么其辐射范围为。
2022-10-28 17:15:27
733
Java Swing 实现的迷宫生成和寻路
2020-02-17
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人