![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
面试
文章平均质量分 73
面试题
拿了桔子跑啊1
美人鱼的眼泪是一个连伤心都透明的世界
展开
-
线程池源码和CompletableFuture使用总结
线程池源码和CompletableFuture使用总结原创 2023-02-28 19:06:15 · 680 阅读 · 0 评论 -
AQS、ReentrantLock源码解读
AQS、ReentrantLock源码解读原创 2023-02-28 18:53:37 · 66 阅读 · 0 评论 -
AQS实现原理-AbstractQueuedSynchronizer原理解析
文章目录模板方法模式AQS中的模板方法模式AQS是什么自己实现一个独占式的AQS的Lock锁AQS结构同步队列中的Node节点主要内容如下节点加入和退出同步队列过程Condition的原理和作用独占式AQS-获取锁源码解析独占式AQS-释放锁源码解析ReentrantLock原理可重入实现原理公平锁实现原理模板方法模式由于AQS是采用了模板方法模式,所以先了解学习设计模式中的模板方法模式。官方解释模板方法模式:定义一个操作中的算法框架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定原创 2020-08-10 19:47:55 · 347 阅读 · 0 评论 -
java线程池学习总结
利用Executors创建不同的线程池满足不同场景的需求newFixedThreadPool(int pThreads)指定工作线程数量的线程池newCachedThreadPool()处理大量短时间工作任务的线程池,(1) 试图缓存线程并重用,当无缓存线程可用时,就会创建新的工作线程;(2) 如果线程闲置的时间超过阈值,则会被终止并移出缓存;(3) 系统长时间闲置的时候,不会消耗什么资源newSingleThreadExecutor()创建唯一的工作者线程来执行任务,如果线程异常结束,原创 2020-07-27 11:49:15 · 268 阅读 · 0 评论 -
synchronized深入理解和探究
synchronized线程安全问题的主要原因是:➢ 存在共享数据(也称临界资源)➢ 存在多条线程共同操作这些共享数据解决问题的根本方法:同一时刻有且只有一个线程在操作共享数据,其他线程必须等到该线程处理完数据后再对共享数据进行操作互斥锁的特性互斥性:即在同一时间只允许一个线程持有某 个对象锁,通过这种特性来实现多线程的协调机制,这样在同-时间只有一个线程对需要同步的代码块(复合操作)进行访问。互斥性也称为操作的原子性。可见性:必须确保在锁被释放之前,对共享变量所做的修改,对于随后获得该锁的原创 2020-07-26 10:42:00 · 380 阅读 · 0 评论 -
异常体系、集合概述、JUC包、IO机制
Error和Exception的区别Error:程序无法处理的系统错误,编译器不做检查。是系统致命错误,程序无法处理的,一般指与jvm相关的错误,如:栈溢出、系统崩溃、虚拟机错误等。1.NoClassDefFoundError -找不到class定义的异常2.StackOverflowError -深递归导致栈被耗尽而抛出的异常3.OutOfMemoryError -内存溢出异常Exception:程序可以处理的异常,铺货后可能恢复。遇见这样的问题,应该尽可能处理,使程序恢复正确。R.原创 2020-07-19 10:25:41 · 181 阅读 · 0 评论 -
再谈java多线程
线程与进程进程正在运行的程序,是系统进行资源分配和调用的独立单位。每一个进程都有它自己的内存空间和系统资源。线程是进程中的单个顺序控制流,是一条执行路径一个进程如果只有一条执行路径,则称为单线程程序。一个进程如果有多条执行路径,则称为多线程程序。关系➢Java对操作系统提供的功能进行封装,包括进程和线程➢运行一个程序会产生一个进程,进程包含至少一个线程➢每个进程对应一个JVM实例,多个线程共享JVM里的堆➢Java采用单线程编程模型,程序会自动创建主线程➢主线程可以创建子线程,原创 2020-07-11 20:13:56 · 390 阅读 · 0 评论 -
day11-栈的相关面试题
举例栈溢出的情况?StackOverflowError,通过-Xss设置大小,1.局部数组过大。当函数内部的数组过大时,有可能导致堆栈溢出。2.递归调用层次太多。递归函数在运行时会执行压栈操作,当压栈次数太多时,也会导致堆栈溢出。3.指针或数组越界。这种情况最常见,例如进行字符串拷贝,或处理用户输入等等。调整栈大小,就能保证不出现溢出吗?不能,如果说一个执行6000次递归就结束的程序,在可执行递归5000次的内存空间中会出现StackOverflowError,而在调整为可递归7000次的内存空原创 2020-06-02 22:45:22 · 195 阅读 · 0 评论 -
day10-类成员加载顺序
类成员加载顺序class A { private static int numA; private int numA2; static { System.out.println("A的静态字段 : " + numA); System.out.println("A的静态代码块"); } { System.out.println("A的成员变量 : " + numA2); System原创 2020-05-19 21:46:44 · 149 阅读 · 0 评论 -
day09(二)-ConcurrentHashMap原理-CAS
文章目录ConcurrentHashMap原理细节初始化添加元素扩容源码执行图ConcurrentHashMap原理我们都知道HashMap不是线程安全的,所以在处理并发的时候会出现问题。而HashTable虽然是线程安全的,但是是通过整个来加锁的方式,当一个线程在写操作的时候,另外的线程则不能进行读写。而ConcurrentHashMap则可以支持并发的读写。跟1.7版本相比,1.8版本又...转载 2020-04-12 18:38:42 · 540 阅读 · 0 评论 -
day09-HashMap原理-1.8优化
文章目录Hashmap底层数据结构HashMap原理初始化添加元素扩容机制源码执行图Hashmap底层数据结构jdk1.7之前,Hashmap底层数据结构是数组+链表实现的,1.8之后采用了红黑树对Hashmap进行了优化。jdk1.8后HashMap采用数组+链表+红黑树的数据结构。HashMap原理在1.7之前,HashMap底层采用数组加链表的数据结构,当在数据量大的时候,出现ha...原创 2020-04-12 14:21:05 · 216 阅读 · 0 评论 -
day08-ConcurrentHashMap原理-1.7
文章目录背景分段锁SegmentConcurrentHashMap原理初始化参数添加元素源码执行图背景HashMap线程不安全:在https://blog.csdn.net/ym15229994318ym/article/details/105436994中提到多线程环境下,使用HashMap进行put操作时存在丢失数据、死锁的情况,为了避免这种bug的隐患,官方建议使用Concurrent...原创 2020-04-11 18:15:30 · 120 阅读 · 0 评论 -
day07-HashMap原理-1.7死锁
Hashmap底层数据结构jdk1.7之前,Hashmap底层数据结构是数组+链表实现的,1.8之后采用红黑树对Hashmap进行了优化。数组使用一-段连续存储单元存储数据。对于指定下标的查找,时间复杂度为O(1),对于一般的插入删除操作, 涉及到数组元素的移动,其平均复杂度为O(n)链表链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的...原创 2020-04-10 18:10:05 · 969 阅读 · 0 评论 -
day06-Object的几个方法
Object类中的几个方法toString()hashCode()getClass()finalize()和clone()ArrayList的toString()源码解析HashSet保证元素唯一性的源码解析TreeSet保证元素排序的源码解析TreeSet保证元素唯一性和比较器排序的原理及代码实现TreeSet的add()源码解析...原创 2020-04-04 13:55:32 · 126 阅读 · 0 评论 -
day05-hashCode理解
感谢作者:https://blog.csdn.net/fenglibing/article/details/8905007感谢作者:https://www.cnblogs.com/dolphin0520/p/3681042.html感谢作者:http://blog.csdn.net/chinayuan/article/details/3345559hashCode理解以下是关于HashCo...转载 2020-04-03 16:20:16 · 144 阅读 · 0 评论 -
day04-String-StringBuffer-StringBuilder
String、StringBuffer、StringBuilder三者联系区别都是final类,不能再被继承String长度不可变,StringBuffer、Stringbuilder长度可变StringBuffer是线程安全的、Stringbuilder是线程不安全的,两个类的方法都是相同的,StringBuffer在方法上加了Synchronized修饰,保证线程安全。String...原创 2020-04-02 16:37:00 · 153 阅读 · 0 评论 -
day03-面对对象2
多态再谈java创建对象的四种方法1. 使用new关键字)(构造方法构造)2. 使用反射 Class.forName.newInstance()(构造方法构造)3. 使用clone()方法,对象.clone() ,生成对象和原对象并不是同一个。(非构造方法构造)4. 反序列化(非构造方法构造)java四大特性* 抽象:抽象是将一类对象的共同特 征总结出来构造类的过程,包括数据抽...原创 2020-04-01 11:35:55 · 151 阅读 · 0 评论 -
day02-面对对象
一.继承A:子类只能继承父类所有非私有的成员(成员方法和成员变量)B:子类不能继承父类的构造方法,但是可以通过super关键字去访问父类构造方法。二.继承中构造方法的关系 A:子类中所有的构造方法默认都会访问父类中空参数的构造方法 B:为什么呢? 因为子类会继承父类中的数据,可能还会使用父类的数据。 所以,子类初始化之前,一定要先完成父类数据的初始化。 注意:子类每一...原创 2019-11-02 19:57:08 · 2029 阅读 · 12 评论 -
day01-数据类型、运算符
数据类型java中的数据类型分为四类八种,类型字节byte1short2int4long8float4double8char2boolean1思考题float f1 = (float)11.11;float f2 = 11.11f;这两种定义数据有什么不同吗?f1其实是通过一个double类型转换过来...原创 2019-09-18 22:35:18 · 366 阅读 · 0 评论