Java基础
文章平均质量分 88
Moon_xuan
To the Moon.
展开
-
ConcurrentHashMap
ConcurrentHashMap1.ConcurrentHashMap的出现我们最常用的集合框架一定包括HashMap,但是都知道它不是线程安全的。在并发插入元素的时候,有可能出现带环链表,让下一次读操作出现死循环。而想要次避免HashMap的线程安全问题有很多办法,比如改用HashTable或者Collections.synchronizedMap。但是,这两者有着共同的问题:性能。无论读操作还是写操作,它们都会给整个集合加锁,导致同一时间的其他操作为之阻塞。因此,ConcurrentHa原创 2022-01-13 20:30:27 · 2304 阅读 · 0 评论 -
HashMap源码剖析
1.HashMap源码剖析1.1.HashMap的底层实现1.1.1.JDK1.8之前JDK1.8之前HashMap底层是数组和链表结合在一起使用也就是链表散列。HashMap通过key的hashCode经过扰动函数处理过后得到hash值,然后通过(n - 1) & hash判断当前元素存放的位置(这里的n指的是数组的长度),如果当前位置存放元素的话,就判断该元素要与存入的元素的hash值以及key是否相同,如果相同的话,直接覆盖,不相同就通过拉链法解决冲突。所谓扰动函数指的就是HashM原创 2022-01-12 15:19:29 · 272 阅读 · 0 评论 -
Java并发机制的底层实现原理
1.Java并发机制的底层实现原理首先,我们都知道,Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节码,最终需要转换成汇编指令在CPU上执行。那么我们想一下,我们Java代码中的并发操作是在哪里处理的呢?答案是在JVM的实现和CPU的指令。那我们带着好奇来探索下Java并发机制的底层实现原理。1.1.volatile的应用在我们平时的并发编程中使用的最多应该就是synchronized和volatile。volatile是轻量级的synchronized,它原创 2022-01-01 15:48:14 · 467 阅读 · 0 评论 -
并发带来的问题
1.并发带来的问题并发编程的目的是为了让程序运行的更快的,但是,是不是启动更多的线程就能让程序最大幅度地并发执行?这个问题值得我们深思。而我们一旦通过多线程去使得程序运行的更快,那么就会遇到几个问题:上下文切换死锁硬件和软件的资源限制那么当我们出现这些问题的时候,该如何去解决或者是避免呢?1.1.上下文切换1.1.1.解释上下文切换并说明其问题首先,想一个问题,为什么当我们使用多个线程并发执行的时候,为什么感觉到像是同时执行呢?通过我们学习的操作系统的知识来看,当进程从就绪到执行状态原创 2022-01-01 09:41:21 · 2223 阅读 · 0 评论 -
设计模式
23种设计模式策略模式策略模式(Strategy):它定义了算法家庭,分别封装起来,让他们之间可以相互替换,此模式让算法的变化,不会影响到使用算法的客户。Strategy类,定义所有支持的算法的公共接口//抽象算法类abstract class Strategy{ //算法方法 public abstract void AlgorithmInterface();}ConcreteStrategy,封装了具体的算法或行为,继承于Strategy//具体算法Aclass Concr原创 2021-02-24 10:09:29 · 133 阅读 · 0 评论 -
Java集合框架源码分析
集合框架Collection(单列)结构图:分析:Collection接口继承了Iterator,而List又继承了Collection,因此实现List的类都具有Iterator和Collection的相关方法。List特点:有序,可重复ArrayList底层:是一个数组分析源码字段 //默认的初始化容量 private static final int DEFAULT_CAPACITY = 10; //空数组 private static final Object[] EM原创 2021-09-23 14:38:25 · 373 阅读 · 0 评论 -
IO流面试题
NIO1、介绍几个概念同步与异步同步:同步就是发起一个调用后,被调用者未处理完请求之前,调用不返回。异步:异步就是发起一个调用后,立刻得到被调用者的回应表示已接收到请求,但是被调用者并没有返回结果,此时我们可以处理其他的请求,被调用者通常依靠时间,回调等机制来通知调用者其返回结果。同步和异步的区别最大在于异步的话调用者不需要等待处理结果,被调用者会通过回调等机制来通过调用者其返回结果。阻塞和非阻塞阻塞:阻塞就是发起一个请求,调用者一直等待请求结果返回,也就是当前线程会被挂起,无法从事其他原创 2021-04-27 23:26:42 · 577 阅读 · 0 评论 -
四大函数式接口和流式计算
四大函数式接口java.util.function,Java内置核心四大函数式接口,可以使用lambda表达式函数型接口,有一个输入,有一个输出public static void main(String[] args) { //函数式接口,可以改为lambda表达式 //Function<String, Integer> function = new Function<String, Integer>() { //原创 2021-04-21 11:36:47 · 160 阅读 · 0 评论 -
IO流
IO流IO流的分类根据处理数据类型的不同分为:字符流和字节流根据数据流向不同分为:输入流和输出流输入流和输出流对输入流只能进行读操作,对输出流只能进行写操作,程序中需要根据待传输数据的不同特性而使用不同的流输入流:InputStream(字节流),Reader(字符流)输出流:OutPutStream(字节流),Writer(字符流)这四个类都是抽象类,可以把这四个类想象成四根不同的管道。一端接着你的程序,你可以通过输出管道从数据源里面往外读数据,也可以通过输入管道往数据源里面输入数据,总之转载 2021-04-06 09:31:29 · 138 阅读 · 0 评论 -
java基础
Java基础三高高可用、高性能、高并发java特性和优势简单性、面向对象、可移植性(跨平台性)、高性能、分布式、动态性、多线程、安全性、健壮性java程序运行机制计算机的高级编程语言类型:编译型、解释型,而java语言是两种类型的结合数据类型...原创 2021-03-21 22:15:50 · 134 阅读 · 0 评论 -
多线程
多线程死锁的四个条件死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。这是一个严重的问题,因为死锁会让你的程序挂起无法完成任务,死锁的发生必须满足以下四个条件:互斥条件:一个资源每次只能被一个进程使用。请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系...原创 2021-03-18 16:04:38 · 213 阅读 · 0 评论