自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 收藏
  • 关注

原创 k个有序序列的合并,用小根堆解决

LeetCode第23题,这里如果会了,堆排序包括常见的对链表的处理肯定没问题了。

2024-07-23 00:54:14 497

原创 复习:归并排序

最好时间复杂度、最坏时间复杂度、平均时间复杂度都是o(nlog2n)* 和堆排序、快速排序的时间复杂度一样。* 空间复杂度:o(n)

2024-07-22 23:31:55 157

原创 堆排序:最复杂的排序算法之一,但也没那么难

个人认为主要的麻烦在于一些临界条件的判断,比如是i还是i-1,是size还是size-1?快排的话数据集中在一起,更满足缓存的局部性原理?时间复杂度和快速排序一样也是o(nlog2n)据说是因为有很多不必要的交换。其实跑一下调式一下也就好了。但实际表现往往不如快排。最复杂的排序算法之一。

2024-07-21 17:07:08 100

原创 简单选择排序

注意此算法不稳定;即不能保证两个相同大小的元素在排序前后的顺序一致。* 时间复杂度,无论初始序列为顺序、逆序、乱序,都是o(n^2)

2024-07-21 12:28:14 52

原创 动态规划2:计算最大连续子序列和

【代码】动态规划2:计算最大连续子序列和。

2024-07-21 11:39:50 266

原创 动态规划-1:穷举遍历->map缓存->取消递归

【代码】动态规划-1:穷举遍历->map缓存->取消递归。

2024-07-21 10:15:38 190

原创 复习:快速排序

【代码】复习:快速排序。

2024-07-20 22:54:23 381

原创 复习:冒泡排序

【代码】复习:冒泡排序。

2024-07-20 21:39:14 60

原创 复习插入排序

【代码】复习插入排序。

2024-07-20 20:46:41 106

原创 二分查找复习

【代码】二分查找复习。

2024-07-20 18:27:28 103

原创 KMP算法完整版 包括求next数组的算法及其优化

【代码】KMP算法完整版 包括求next数组的算法及其优化。

2024-07-20 17:29:57 394

原创 字符串算法之一:朴素算法找子串

【代码】字符串算法之一:朴素算法找子串。

2024-07-20 12:32:31 168

原创 分布式缓存复习

这里存在一个问题,就是比如A机器修改数据库数据为1,他刚要改缓存,可能因为机器卡顿、网络卡顿等各种原因,改的比较慢,他还没改,B机器把数据库数据改为2,并且把缓存改为2了,这时候A机器又把缓存改为1了。首先,显然这也数据不一致的问题,其次,先写数据库,后写缓存,缓存跟着数据库走,稍微有点延迟,这叫最终一致。更严重的情况是,一般写操作在更新数据库之后都会更新缓存,或者先使缓存失效再更新数据库,无论怎么做,如果使用本地缓存,都只能保证当前机器的混存一致性,而其他机器则会继续缓存错误的数据。

2024-07-16 00:29:15 745

原创 RabbitMQ复习

路由键与队 列名完全匹配,如果一个队列绑定到交换 机要求路由键为“dog”,则只转发 routing key 标记为“dog”的消息,不会转发 “dog.puppy”,也不会转发“dog.guard” 等等。它是完全匹配、单播的模式。为了保证可靠传输,除了上述的消息确认机制外,还需做好容错方法(try-catch),因为网络波动等原因直接在发送端就没能发送消息是常有的情况,这时候需要有重试机制。multiple为true表示批量确认,即确认此消息的tag号及其之前的所有消息,有的想TCP通信中的确认。

2024-07-15 20:48:00 673

原创 基础回顾:啥叫前后端分离

你可以把这种vue项目叫做前端项目,但是把浏览器当做前端的话,那他这个相对而言也是一个。你后端用java写,用python写,用C写等等,我不care,反正我就是请求某个。如果你把vue项目跑起来,他可以提供各种页面及其跳转逻辑,这个也是在服务器上跑的,比如vue的路由就可以实现。至于你前端拿到这个数据怎么展示那是你的事,你可以用特别炫酷好看的页面来展示,这个页面的跳转,显然还是要发请求,但是这个请求不是发给java等后端工程了,给你这个数据(注意,我只给你数据,不给你页面,不会给你返回html啥的),

2024-07-15 16:09:12 378

原创 学习笔记:java的23种设计模式总结

学习笔记

2024-07-10 21:43:12 1262

原创 Springboot引入依赖自动注入bean的实现

注意:通常来说一个第三方包都会注册很多的bean到容器中,因此spring.factories中可以写一个标注了@Configuration的类,引入了这个类,他下面所有的@Bean标注的方法注册的bean都会放到容器中了。2、使用者主动用@Import引入,这个也没能实现自动注册,可以直接引入(比如)User.class,也可引入@Configuration加@Bean的类。3、用自定义的@Enable封装一下第二步的@Import结果,好处是更好看点,缺点是还是需要使用者主动引入。

2024-07-09 18:41:17 272

原创 分布式系统的CAP定理

如果比如某个从节点和主节点之间的通信断掉了,系统出现了分区(partition),这个时候一致性C和可用性A就只能选一个了。比如更新主库x=1变为x=2,如果主库更新后不等从库更新(比如只是通过binlog异步更新从库的数据),立即返回成功,这样保证了可用性,但如果有人访问到还没更新的从库,就会得到旧数据,这就不满足一致性了。分区容错性是说,即使网络有故障,比如某个从节点和主节点之间的通信断掉了,系统出现了分区(partition),整个系统仍能正常运行(partition tolerance)。

2024-06-19 22:46:52 408

原创 utf8和utf8 bom的区别以及由此产生的对字符编码的思考

在UCS 编码中有一个叫做 "Zero Width No-Break Space" ,中文译名作“零宽无间断间隔”的字符,它的编码是 FEFF。感觉还是没太明白,先简单理解就是(本文后面会再来研究这个问题),BOM这个标记是用来表示文件编码信息的。查阅资料可知,BOM是Byte Order Mark的缩写,是用来标记文件编码的大小端的(这个后面讲),UTF8是不需要标记大小端的。utf8编码的只占0个字节,而utf8 bom编码的,虽然文本内容为空白,但已经占用了3个字节。用notepad看下,果然是你!

2024-05-25 10:21:12 1062

原创 安全研发总结(二):XSS攻击及其防御

攻击成功后,攻击者可能获取用户的敏感信息,如Cookie、会话信息等,甚至执行更高权限的操作,如劫持用户会话、插入恶意内容、重定向用户到恶意网站等。攻击者通过利用网页开发时留下的漏洞,注入恶意代码到网页中。仔细看看会发现,xss攻击其实和sql注入攻击很像,都是通过输入一些未预期的参数来扭曲原本的语义,只不过前者扭曲的sql语句,后者扭曲的是html便签。在过滤器中加上一个全局的输入转义或输入转义即可,由于post请求中可能带有 < > & 等符号,为了防止正常输入被转义后无法识别,建议只对输出转义即可。

2024-05-20 21:46:34 397

原创 安全研发总结(一):SQL注入漏洞及其防御

(1)使用预编译的sql,即PreparedStatement,这是最好的办法。的sql就已经被数据库编译、优化了,后续传入的参数不会被认为是sql指令,而只是当做一个值注入占位符,由于不存在sql的重新编译,因此也不可能改变其原有的语义,不存在sql注入的可能。这里注意,转义是对传入的参数转义,而非对整个sql语句转义。SQL注入是一种安全漏洞,攻击者通过影响Web应用程序的后端数据库执行未授权的SQL命令。这通常是通过将恶意SQL代码注入到应用程序的输入字段中实现的,例如通过在搜索框中输入。

2024-05-19 21:25:07 426 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除