- 博客(12)
- 收藏
- 关注
原创 HashMap源码逐行手撕 JDK11
HashMap基本介绍文章主要基于B站小刘老师讲解 以及 一些博客对HashMap的重要执行逻辑和流程进行分析(红黑树的细节部分并不包括)。源码基于JDK11。如有错误欢迎指正继承体系属性可以被设置为 true 或 false。只读的缓存会给所有调用者返回缓存对象的相同实例。 因此这些对象不能被修改。这就提供了可观的性能提升。而可读写的缓存会(通过序列化)返回缓存对象的拷贝。 速度上会慢一些,但是更安全,因此默认值是 false。也就是说,默认情况下,出于安全考虑,Mybatis将缓存设置成可读写的,然后通过序列化的方式返回给我们缓存的对象拷贝。如果我们的对象没有实现可序列化的接口就会抛出 org.apache.ibat
2021-06-13 00:23:27
856
原创 栈?队列?Java ArrayDeque常用首尾操作方法整理
对于用Java刷leetcode的同学一定很眼熟ArrayDeque这个数据结构,因为它既可以作为队列也可以作为栈,解题时使用频率很高。补充一嘴,Stack也能作为栈来用,但是作为存在设计缺陷的Vector类的子类,已经不推荐使用了。ArrayDeque提供了作为栈的一套读写方式(pop/push/…),也提供了一套作为队列的读写方式(poll/offer/…),因此首尾操作方法非常多且从功能的角度看是重复的。使用时经常分不清到底该用哪个方法取数。到底这方法是对首操作还是对尾操作?读取的时候只是读取还是同
2021-05-30 08:24:13
572
原创 JDK11 源码阅读 报错:Java:找到太多的模块声明的报错
为了方便撕源码,把核心包都复制出来到项目下,这样方便写注释和DEBUG。具体的配置方法参考:https://blog.youkuaiyun.com/jiangxiayouyu/article/details/112888309 这篇文章,写的很清楚。 但是有个问题,我在跑的时候提示Java:找到太多的模块声明。解决方案:不要把源码文件放在src路径下,放在和src同一级即可。...
2021-05-29 22:41:59
983
2
原创 快慢指针法判断环入口位置 LeetCode142 环形链表2
快慢指针如何寻找环入口通过快慢指针思路来判断链表是否有环时,我们可以通过判断两个指针最终是否会相遇来确定。但是问题在于,这样得到的相遇点并不是环的入口,想要通过快慢指针来寻找环入口还需要做一些额外的处理。思路:参考LeetCode142题,在第一次相遇后,重新设置一个指向head的指针,然后重新让新指针与慢指针开始行动,每次移动距离都为1,这样一来下次相遇的点就是环入口了。代码实现见底部具体解释为什么两个指针再次相遇的地方就是环入口:将存在环的链表长度理解为a+b;a为非环的链表部分,b为环的长度
2021-05-20 04:04:09
608
原创 快速了解Cookie/Session/Token,以及CSRF跨站攻击
快速了解Cookie/Session/Token,以及CSRF跨站攻击本文主要介绍Cookie、Session以及Token的工作机制,以及CSRF跨站攻击,并不涉及到具体以及细节的属性。希望能帮助大家快速了解这几种不同的浏览器用户身份跟踪的会话方式。无状态的HTTPHttp协议本身是无状态的,也就是说每一次请求都是相互独立的,服务器并不能分辨请求是不是来自同一个用户。这样的好处是处理起来迅速,缺点就是在很多场景中,用户的每一步操作都是上下文关联的,比如网购往购物车里加东西,即使没有登录帐号,服务器也
2021-04-13 06:09:39
529
原创 JavaScript学习笔记 - 对象的继承(基于原型链(prototype chain)的继承,基于构造函数的继承,组合继承)
理解基于原型链的JS继承,什么是prototype,什么是constructor?在ES5中,与其他大部分面向对象语言(如Java,C#)通过类来创建实例或者是继承不同,JavaScript的继承是通过直接调用构造函数来创建实例、prototype来实现继承的。构造函数的缺点以及prototype的使用在JavaScript中,我们通过new关键字调用构造函数来创建实例,实例的属性以及方法都通过this关键字被定义在构造函数的内部。但是这有一个缺点,多个实例之间无法共享属性/方法,每次创建实例的时候,
2021-04-04 23:15:51
366
原创 Python可变对象与不可变对象,以及深拷贝与浅拷贝
Python可变对象与不可变对象,以及深拷贝与浅拷贝本文主要内容为Python中可变对象以及不可变对象的概念,以及使用深拷贝与浅拷贝复制对象的区别。所有代码都基于Python3.8运行。可变对象(mutable objects)与不可变对象(immutable objects)首先来看一段代码:class StrangeList: def __init__(self, init_list=[]): self._list = init_list def
2021-04-02 22:01:11
229
原创 如何理解Python装饰器
在Python中,当需要对某个函数的功能进行增强,又不修改其代码,而是在运行期间动态为其添加功能的方式,便是装饰器。本质上,装饰器其实就是一个返回函数的高阶函数,所以在学习装饰器之前要理解Python中一切皆为对象的思想。def print_log(func): def wrapper(*args, **kw): print(f'call {func.__name__}') return func(*args, **kw) return wrapper
2021-04-02 19:55:46
104
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人