java基础
_JZWen
学习,总能是你进步。
展开
-
Guava Cache 介绍 GET 源码解析
基本介绍 —— Guava Cache 的作用 我们的系统需要依赖一些数据,但是哪些数据在别的应用程序上,比如第三方服务、DB 、ES 等等持久性存储,然后我们访问数据每次都要发起请求访问数据,而且这些第三方服务等等不一定能扛得住我们的访问量。特别是DB。所以我们会采用 Cache 他会保存当前JVM 的缓存中去。一般他的有效期会比较短,一两分钟啥的。当然如果你的系统需要访问的数据必须保证准确无误。那最好还是不要用cache,这种适合那种能承担着一小段时间数据不准确。 ...原创 2020-12-26 21:41:22 · 1049 阅读 · 0 评论 -
几行代码实现限流,实用又简单
场景 依赖系统脆弱 自己的系统依赖别人的系统很脆弱,支持不了高qps的请求,比如一下高计算量的AI系统,或者一个高计算量的数据系统。这里都是作者经历过的。悄悄告诉你,你要是把别人系统打挂了,锅是你背的。哈哈哈哈。所以一些基本的限流操作要学会。 自己系统计算量大,逻辑复杂还需要防止恶意请求 作者也经历过,自己的系统真的太复杂了,毕竟需要一定的安全性,不能直接让别人请求,这个时候一般会在前面加一个服务,并且加上限流操作以及一些权限校验什么的,成功了之后再去请求后面服务。 ...原创 2020-11-26 19:16:01 · 487 阅读 · 0 评论 -
简单快捷优雅的实现一个定时任务
什么场景 获取token 最近也是遇到了一些烦恼,比如获取 token ,一天内获取的次数有限,每次获取到的 token 也是有一定的有效期。针对这种情况,其实需要我们定时的去获取token,并且刷新到缓存中,但是如果在多台机子的情况下,我们需要去做一个分布式锁,每次只保证有一台机子去获取token。 单机实现生产消费 自己生产自己消费,其实就是一端往一个队列丢数据,另一端往队列里面消费数据,当然是阻塞队列。当然这种情况下肯定不好的,因为操作都是基于内存的,重启机子的时候会丢失...原创 2020-11-26 11:28:50 · 209 阅读 · 0 评论 -
堆排序算法
前置知识: 我们的一个最大最小堆可以构成一个数组。以最大堆为例。 当前节点下标是i,那么可以知道 父节点:parent = (i - 1)/ 2 左孩子:left = 2 * i + 1 右孩子:right = 2 * i + 2 //直接看代码吧 package data_strust; /** * 堆排序 */ public class Heap_sort { ...原创 2019-04-19 17:42:53 · 105 阅读 · 0 评论 -
java内存溢出场景
栈溢出 :其实就是虚拟机栈内存满了,虚拟机栈就是存方法的,一个虚拟机栈帧中有 操作数 参数列表 动态链接 返回值 stackoverflow情况 1、方法递归没有出口,或者方法回调太长,也就是栈帧太多了,虚拟机栈存满了。 2、定义的数组太大了,在栈中存不下 3、指针或数组越界。这种情况最常见,例如进行字符串拷贝,或处理用户输入等等。 OutOfMemoryError 堆溢出 ...原创 2019-03-29 16:02:08 · 299 阅读 · 0 评论 -
集合迭代器_Iterator
他是集合类的顶层类。 每个集合都有一个 Iterator(); 这个方法。 当你迫于无奈的时候你去看源码,你就会发现一切都恍然大悟。后悔自己没有看源码。难受。 我就贴上重要的几个方法。我这里就只介绍list集合 , 首先你一定要明白底层是使用数组存储元素。 使用的是一个Itr() 对象,好,我们往下走 public Iterator<E> iterator() { ...原创 2019-03-16 15:00:05 · 245 阅读 · 2 评论 -
带我重新认识HashCode和equals
介绍一下equals equals 比较两个对象是不是相同,问题来了,equals比较的是地址,引用,这也是最准确的方法。 介绍一下HashCode hashcode() 返回的是当前对象的物理地址转换成的一个int类型数据,看清楚这里是转换,不是等于。所以不能唯一确定对象是不是同一个对象。 他们之间的关系. 看到了吗,区域就是hashcode 每一个值就是equals ...原创 2019-03-11 21:18:36 · 123 阅读 · 1 评论 -
解析_装箱拆箱
不要做一个任人宰割的绵羊,需要自己强大起来。加油!!! 1、装箱 通俗的说就是将基本类型转换成包装类 int-------Integer 2、拆箱 大白话:就是将包装类转换成基本类型 装箱: Integet会调用一个Valueof(); 进行装箱 源码 public static Integer valueOf(int i) { if(i >= -...原创 2019-03-14 13:53:12 · 192 阅读 · 0 评论 -
大白话 java动态代理——秒懂系列
代理模式分为动态代理和静态代理,重点是动态代理 什么叫做代理? 首先要有一个接口,定义了我们的服务(标准) 然后是一个实现类(继承上面那个接口) 还有有一个代理类也会去实现这个那个接口。 然后重点: 代理就是我们不能直接去访问这个实现类,只能通过代理类去访问实现类,先说一下这个访问是通过invoke这个方法实现,参数有 实例对象、方法对象、参数列表。 大概就是下面这个样子 public...原创 2019-03-01 12:45:32 · 779 阅读 · 2 评论 -
java集合
Collection 集合 :全部都只能存储应用类型并且是单个存储。 List:有序可重复存储,有序的意思就是存进去什么顺序出来就是取出来就是什么顺序 Set:无序不可重复,无序的意思出进去顺序与取出来的顺序不一定一样。同时保证内部元素唯一性。 SortedSet : 无序不可重复,但是存进去的元素可以进行排序。(可不可以存不同类型的数据,不同类型的数据怎么排序) A...原创 2018-08-02 16:00:47 · 100 阅读 · 0 评论 -
java反射机制
Java反射机制 https://www.cnblogs.com/Eason-S/p/5851078.html Class 这是一个类 他可以去得到其他类的引用,也就相当于得到其他类 三种方式获得类 Employee e = new Employee(); Class c1 = Class.forName(“Employee”); Class c2 = Employee....原创 2018-08-01 11:27:47 · 156 阅读 · 0 评论