随笔分类 -  Java 学习

Java 学习
摘要:内部类在实例化时,会将用到的外部局部变量作为constructor的参数用引用传递的方式传递进来 如果外部更改了这个值的引用,内部类不会变,所以外部的必须设为final,避免更改 阅读全文
posted @ 2023-02-15 13:13 PraveZ 阅读(20) 评论(0) 推荐(0)
摘要:简介 ThreadLocal的作用是在指定线程内存储数据,可以在对应的指定线程获取到数据,相当于是给线程提供了变量存储的能力。 类似于MC里面的末影箱子。。 用法 定义时,使用泛型指定要存入的变量类型,然后通过get和set即可获取数据。 原理 看起来好像Java是在全局设置了一个以Thread为k 阅读全文
posted @ 2020-11-09 12:44 PraveZ 阅读(148) 评论(0) 推荐(0)
摘要:在Spring中,当一个请求到来,我们可以对其进行预处理,以及对返回的结果进行再加工。Spring提供了三个不同的工具来实现这个功能,分别对应不同的场景,刚好有个项目里都用到了,总结一下。 三种功能简介 过滤器 实现方法 需要实现 javax.servlet.Filter 接口,或者继承 org.s 阅读全文
posted @ 2020-08-17 10:30 PraveZ 阅读(2211) 评论(0) 推荐(1)
摘要:自己实现了一个类似AtomicInteger的原子类功能,反复比较并交换,主要用到 反射获取Unsafe及对象的静态成员变量 Unsafe获取地址偏移量 CAS public class MyStudy { public static int data = 0; public static void 阅读全文
posted @ 2020-07-20 09:33 PraveZ 阅读(487) 评论(0) 推荐(0)
摘要:看了个视频讲可重入锁,但是总是没讲清楚,自己写代码试了一下,贴上来记录好理解。 可重入锁的概念 视频中说线程A调用带锁的function1()时,如果function1()又调用了另一个带锁的function2(),那么就自动获取到了function2()的锁,但是这样理解很绕,我自己理解是:当一个 阅读全文
posted @ 2020-07-15 10:51 PraveZ 阅读(322) 评论(0) 推荐(0)
摘要:面试时遇到一个问题,泛型如何获取真实的类型?GG,下来以后查了相关资料,看了几遍才懂是啥意思,写在这里牢记! 泛型 泛型——就是将类型的明确推迟到创建对象或执行方法时再进行。泛型相当于一个参数,修饰这个类实际上是什么。 举例来说: ArrayList中,E就是一个未定的参数,而ArrayList中, 阅读全文
posted @ 2020-03-21 20:58 PraveZ 阅读(137) 评论(0) 推荐(0)
摘要:Java 中常见的Map类大概就这些吧,汇总一下,如果漏掉了什么以后再补上。 类|线程安全|key排序|内部结构|特性|不足处 | | | | | HashMap|不安全|乱序|hash数组+拉链法(红黑树)处理冲突| |乱序,不安全 LinkedHashMap|不安全|插入顺序(默认)/访问顺序| 阅读全文
posted @ 2020-03-21 19:13 PraveZ 阅读(189) 评论(0) 推荐(0)
摘要:实习面试好几次都被问到单例模式,每次都差点事儿,决定自己再手写一遍,不能再出错了!!!! 阅读全文
posted @ 2020-03-21 16:18 PraveZ 阅读(579) 评论(0) 推荐(0)
摘要:Java 中的输入/输出流一共有2种4个类。分别为字节类型的输入——InputStream、输出——OutputStream,字符类型的输入——Reader、输出——Writer。 四种输入输出流都是抽象类,在读取不同的内容时,分别使用对应的实现类去读取即可。 以读写文件为例,使用这四种类如下。 字 阅读全文
posted @ 2020-03-21 15:59 PraveZ 阅读(335) 评论(0) 推荐(0)
摘要:Java中,子类在继承父类的方法时,各种限定词的继承情况总结如下: 权限限定符 限定符 | 作用域 | 子类可用 | | private | 仅在该类中可用 | 不可被继承 | 仅在同包中可用 | 可被修改权限为protected和public protected|同包及子类可用|可被修改权限为pu 阅读全文
posted @ 2020-03-19 17:00 PraveZ 阅读(542) 评论(0) 推荐(0)
摘要:一、内存模型 Java中的内存分为五个部分,分别是方法区、虚拟机栈、堆、程序计数器和本地方法区。 1.方法区 存放运行时加载的类信息、静态变量、常量等信息。 2.虚拟机栈 存放对象的引用、方法的返回地址等。 每个线程都有一个栈。 3.堆 主要存放对象的实例。 所有线程共享同一个堆。 4.程序计数器 阅读全文
posted @ 2020-03-18 20:34 PraveZ 阅读(293) 评论(0) 推荐(0)
摘要:对一个变量添加volatile修饰,可以实现以下功能: 对这个变量的修改都会即时被写回内存,保证任何其他线程在读取的都是都读到的是实时值; Java中,变量都是保存在主内存中的,当线程访问变量时,都是从主内存拷贝一份到自己的工作内存,修改完值后再写回主内存。使用volatile可以保证线程在修改后, 阅读全文
posted @ 2020-03-18 17:58 PraveZ 阅读(149) 评论(0) 推荐(0)
摘要:生产者一边在生产,消费者一边消耗。当库存满的时候生产者暂停生产,直到有空位;当库存空的时候消费者暂停消费,直到有产品。 关键点: 1. 生产者和消费者都是在不断生产和消费的,是同时并发的,不应该等满了再消费 / 空了再生产。 2. 前提条件是生产速度和消费速度不同。 设计方法: 1. 生产者和消费者 阅读全文
posted @ 2020-03-18 16:16 PraveZ 阅读(496) 评论(0) 推荐(1)
摘要:synchronized作用在不同位置,使用的锁不同,但是作用是一样的。被synchronized修饰的部分,必须持有锁,才能运行,否则就要等待。 作用位置 作用在静态方法上,将整个类作为锁,同时只能有一个线程访问这个类。锁 = Class.class 作用在普通方法上,将类作为锁,锁 = this 阅读全文
posted @ 2020-03-16 20:12 PraveZ 阅读(254) 评论(0) 推荐(0)
摘要:加载过程 加载 将class文件加载入内存 连接 1. 验证。防止传入错误数据弄脏JVM。 2. 准备。给静态变量分配内存空间。 3. 解析。将符号引用转为直接引用。 符号引用: A引用B,此时是A引用了B的CONSTANT_Class_info(类似字符串)。 直接引用: A引用B,那么A直接指向 阅读全文
posted @ 2020-03-16 14:28 PraveZ 阅读(188) 评论(0) 推荐(0)