JavaSE
文章平均质量分 71
超级码里喵
这个作者很懒,什么都没留下…
展开
-
保证通信的机制有哪些
应用数据被分割成TCP认为最适合发送的数据块。这和UDP完全不同,应用程序产生的数据报长度将保持不变。:Internet 的传输层有两个主要协议,互为补充。无连接的是 UDP,它除了给应用程序发送数据包功能并允许它们在所需的层次上架构自己的协议之外,几乎没有做什么特别的事情。面向连接的是 TCP,该协议几乎做了所有的事情。...原创 2022-08-04 10:45:32 · 950 阅读 · 0 评论 -
进程间通信方式
管道:速度慢,容量有限,只有父子进程能通讯;FIFO:任何进程间都能通讯,但速度慢;消息队列:容量受到系统限制,且要注意第一次读的时候,要考虑上一次没有读完数据的问题;共享内存:能够很容易控制容量,速度快,但要保持同步,比如一个进程在写的时候,另一个进程要注意读写的问题;信号:有入门版和高级版两种,区别在于入门版注重动作,高级版可以传递消息。只有在父子进程或者是共享内存中,才可以发送字符串消息;信号量:不能传递复杂消息,只能用来同步。......原创 2022-08-04 10:08:02 · 607 阅读 · 0 评论 -
进程与线程的区别
线程是进程中执行运算的最小单位,是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程,同一进程中的多个线程之间可以并发执行。好处(1)易于调度。(2)提高并发性。通过线程可方便有效地实现并发性。进程可创建多个线程来执行同一程序的不同部分。(3)开销少。创建线程比创建进程要快,所需开销很少。(4)利于充分发挥多处理器的功能。...原创 2022-07-21 08:57:31 · 9312 阅读 · 0 评论 -
【Java基础】类与接口
1.类与类的关系继承关系,只能单继承,不能多继承;但是可以多层继承2.类与接口的关系实现关系,可以单实现,也可以多实现,还可以继承一个类的同时实现多个接口3.接口与接口的关系继承关系,可以单继承也可以多继承1.成员区别抽象类:变量;常量;有构造方法;有抽象方法,也有具体方法接口:只有常量;只有抽象方法2.关系区别类与类:继承、单继承类与接口:实现:可以单实现,也可以多实现接口与接口:继承:单继承,多继承3.设计理念区别抽象类:对类抽象,包括属性、行为接口:对行为抽象,主要是行为...原创 2022-06-27 14:35:57 · 680 阅读 · 0 评论 -
深入理解JMM内存模型
JMM(Java内存模型)源于物理机器CPU架构的内存模型,最初用于解决MP(多处理器架构)系统中的缓存一致性问题,而JVM为了屏蔽各个硬件平台和操作系统对内存访问机制的差异化,提出了JMM的概念。Java内存模型是一种虚拟机规范,JMM规范了Java虚拟机与计算机内存是如何协同工作的:规定了一个线程如何和何时可以看到由其他线程修改过后的共享变量的值,以及在必须时如何同步的访问共享变量。通过这种方式来保证多线程下变量的缓存一致性问题,下图是一个CPU多级缓存图:Java内存模型(Java Memory M原创 2022-06-14 12:02:45 · 1010 阅读 · 2 评论 -
Lock与Synchronized区别
先说结论,后面详解synchronized是关键字,Lock是接口synchronized是隐式的加锁,lock是显式的加锁synchronized可以作用于方法上,lock只能作用于方法块synchronized是阻塞式加锁,lock是非阻塞式加锁支持可中断式加锁,支持超时时间的加锁synchronized底层采用的是objectMonitor,lock采用的AQSsynchronized在进行加锁解锁时,只有一个同步队列和一个等待队列, lock有一个同步队列,可以有多个等待队列synchr原创 2022-06-13 10:17:54 · 473 阅读 · 0 评论 -
偏向锁、轻量级锁和重量级锁
为什么会有偏向锁、轻量级锁和重量级锁?并发锁总共有4种状态:无锁状态、偏向锁状态、轻量级锁状态和重量级锁状态,每种状态在并发竞争情况下需要消耗的资源由低到高,性能由高到低。重量级锁需要通过操作系统在用户态与核心态之间切换,就像它的名字是一个重量级操作,这也是synchronized效率不高的原因,JDK1.6对synchronized进行了优化,引入了偏向锁与轻量级锁,提高了性能降低了资源消耗。什么是偏向锁?通过对大量数据的分析可以发现,大多数情况下锁竞争是不会发生的,往往是一个线程多次获得同一个锁,原创 2022-05-19 09:45:13 · 5301 阅读 · 0 评论 -
【Java中的四种线程池】
目录1、CachedThreadPool - 可缓存线程池2、FixedThreadPool - 定长线程池3、SingleThreadExecutor - 单线程池4、ScheduledThreadPool - 调度线程池在Java.util.concurrent中,提供了工具类Executors(调度器)对象来创建线程池,可创建的线程池有四种:1、CachedThreadPool - 可缓存线程池特点:无限大,如果线程池中没有可用线程就会自动创建,有的话就自动利用起来。2、FixedThre原创 2022-05-17 10:00:18 · 5751 阅读 · 2 评论 -
【CurrentHashMap源码详解】
目录1. 红黑树定律:2. HashMap的总结:3. CurrentHashMap代码(带注释)3.1 分析new CurrentHashMap时它在做什么(三个参数的暂时不讨论,大家可以自己去看)3.2 分析put代码的过程3.3 初始化方法 initTable3.4 转红黑树方法 :treeifyBin3.5 扩容方法: tryPresize (注意,核心重点)3.6 数据迁移:transfer (难点)1. 红黑树定律:(1)每个节点或者是黑色,或者是红色。(2)根节点是黑色。(3)每个叶原创 2022-05-16 22:30:36 · 322 阅读 · 0 评论 -
【HashMap底层实现原理】
目录1. 基于Arraylist集合方式实现2. 基于数组+链表方式实现(Jdk)3. HashMap底层是有序存放的吗?4. LinkedHashMap实现缓存淘汰框架5. HashMap如何降低Hash冲突概率6. HashMap源码解读6.1 modCount的作用6.2 HashMap7扩容产生死循环问题6.3 HashMap8扩容底层原理6.4 HashMap加载因子为什么是0.75而不是1或者0.56.5 HashMap如何存放1万条key效率最高6.6 为什么JDK官方不承认Jdk7扩容死循环原创 2022-05-16 22:16:11 · 663 阅读 · 0 评论 -
【HashMap源码解读】(注释版本,超级详细)
目录1. 属性2. Node结点类3. Hash静态方法4. HashMap构造方法5. put方法7. get方法8. 扩容方法9. remove方法10. 其他方法1. 属性public class HashMap<K, V> extends AbstractMap<K, V> implements Map<K, V>, Cloneable, Serializable { /** * 序列号 */ private stati原创 2022-05-16 19:47:13 · 304 阅读 · 0 评论 -
【2022最新Java面试宝典】—— Java并发编程面试题(123道含答案)
目录一、基础知识1. 为什么要使用并发编程2. 多线程应用场景3. 并发编程有什么缺点4. 并发编程三个必要因素是什么?5. Java 程序中怎么保证多线程的运行安全?6. 并行和并发有什么区别?7. 什么是多线程8. 多线程的好处9. 多线程的劣势:10. 线程和进程区别11. 什么是上下文切换?12. 守护线程和用户线程有什么区别呢?13. 如何在 Windows 和 Linux 上查找哪个线程cpu利用率最高?14. 什么是线程死锁15. 形成死锁的四个必要条件是什么16. 如何避免线程死锁17. 创原创 2022-05-03 08:00:00 · 19806 阅读 · 1 评论 -
【2022最新Java面试宝典】—— Java基础知识面试题(91道含答案)
目录一、Java概述1. 何为编程2. 什么是Java3. jdk1.5之后的三大版本4. Jdk和Jre和JVM的区别5. 什么是跨平台性?原理是什么6. Java语言有哪些特点7. 什么是字节码?采用字节码的最大好处是什么8. 什么是Java程序的主类?应用程序和小程序的主类有何不同?9. Java应用程序与小程序之间有那些差别?10. Java和C++的区别11. Oracle JDK 和 OpenJDK 的对比二、基础语法数据类型12. Java有哪些数据类型13. switch 是否能作用在 by原创 2022-04-29 08:00:00 · 32273 阅读 · 4 评论 -
深入理解Java设计模式——代理模式
目录一、什么是代理模式二、为什么使用代理模式三、代理模式实现原理四、代理模式应用场景五、代理模式创建的方式六、静态代理1. 基于接口实现方式2. 接口继承方式实现七、动态代理1. JDK动态代理1.1 原理分析2. CGLIB动态代理2.1 CGLIB原理2.2 CGLIB优缺点2.4 CGLIB 代理实现2.5 Maven依赖3. 静态代理与动态代理区别4. 使用AOP拦截Controller所有请求日志5. Maven依赖信息八、纯手写JDK动态代理1. JDK动态代理原理分析2. 纯手写动态代理分析3原创 2022-04-18 00:32:02 · 439 阅读 · 0 评论 -
多线程入门到精通
多线程入门到精通目录多线程入门到精通一、多线程基本概念1. 什么是CPU2. 什么是线程/进程3. 为什么在进程中还需要线程4. 为什么需要使用到多线程5. 并行/串行区别6. 使用多线程一定提高效率吗7. 同步与一部的区别8. CPU调度时间片9. CPU密集型/IO密集型10. CPU调度算法原理11. 程序计数器12. CPU上下文切换13. 多线程的应用场景二、多线程的快速入门三、多线程线程安全问题四、多线程线程之间通讯五、多线程知识高级部分一、多线程基本概念1. 什么是CPU2. 什么是线原创 2022-04-15 22:45:14 · 1012 阅读 · 1 评论 -
反射与自定义注解底层实现原理
反射与自定义注解底层实现原理目录反射与自定义注解底层实现原理一、反射机制1. 什么是反射2. 反射机制的优缺点3. 反射的用途4. 反射技术的使用4.1 反射常用的API4.1.1 运行期间,一个类,只有一个Class对象产生4.1.2 反射执行构造函数4.1.2.1 执行无参数构造函数4.1.2.1 执行有参数构造函数4.1.3 反射执行给属性赋值4.1.3.1 反射执行给公有属性赋值4.1.3.2 反射执行给私有属性赋值4.1.4 反射执行调用方法4.1.4.1 反射调用公有方法4.1.4.2 反射调原创 2022-04-13 22:24:47 · 180 阅读 · 0 评论 -
报错:java.lang.IllegalThreadStateException
同一个Thread启动第二次会报错java.lang.IllegalThreadStateException解决办法:只要每次都new 一个新的线程对象,就不会报错。原创 2018-11-13 15:05:02 · 1299 阅读 · 1 评论 -
Thread和Runnable的区别
如果一个类继承Thread,则不适合资源共享。但是如果实现了Runable接口的话,则很容易的实现资源共享。总结:实现Runnable接口比继承Thread类所具有的优势:1):适合多个相同的程序代码的线程去处理同一个资源2):可以避免java中的单继承的限制3):增加程序的健壮性,代码可以被多个线程共享,代码和数据独立4):线程池只能放入实现Runable或callable类线程,不...原创 2018-11-13 15:07:58 · 251 阅读 · 0 评论 -
wait和sleep区别
sleep()方法:sleep()使当前线程进入停滞状态(阻塞当前线程),让出CUP的使用、目的是不让当前线程独自霸占该进程所获的CPU资源,以留一定时间给其他线程执行的机会; sleep()是Thread类的Static(静态)的方法;因此他不能改变对象的机锁,所以当在一个Synchronized块中调用Sleep()方法是,线程虽然休眠了,但是对象的机锁并木有被释放,其他线程无法访问这...原创 2018-11-13 17:29:38 · 191 阅读 · 0 评论 -
线程常见名词解释
主线程:JVM调用程序main()所产生的线程。当前线程:这个是容易混淆的概念。一般指通过Thread.currentThread()来获取的进程。后台线程:指为其他线程提供服务的线程,也称为守护线程。JVM的垃圾回收线程就是一个后台线程。用户线程和守护线程的区别在于,是否等待主线程依赖于主线程结束而结束。前台线程:是指接受后台线程服务的线程,其实前台后台线程是联系在一起,就像傀儡和幕后操...原创 2018-11-13 17:35:54 · 1348 阅读 · 0 评论 -
线程类的一些常用方法汇总
sleep(): 强迫一个线程睡眠N毫秒。isAlive(): 判断一个线程是否存活。join(): 等待线程终止。activeCount(): 程序中活跃的线程数。enumerate(): 枚举程序中的线程。currentThread(): 得到当前线程。isDaemon(): 一个线程是否为守护线程。setDaemon(): 设置一个线程为守护线程。(用户线程和守护线程的区别在...原创 2018-11-13 17:38:09 · 481 阅读 · 0 评论 -
简析String、StringBuilder、StringBuffer三者之间的区别
1. 首先说运行速度(执行速度),运行速度快慢排序:StringBuilder &amp;gt; StringBuffer &amp;gt; StringString 最慢的原因:String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后,该对象是不可更改的,但StringBuilder和StringBuffer是可以更改的。1. Str...原创 2018-11-08 16:18:10 · 210 阅读 · 0 评论 -
StringUtils.isEmpty用法
StringUtils 方法的操作对象是 Java.lang.String 类型的对象,是 JDK 提供的 String 类型操作方法的补充,并且是 null 安全的**(即如果输入参数 String 为 null 则不会抛出 NullPointerException ,而是做了相应处理,例如,如果输入为 null 则返回也是 null 等,具体可以查看源代码)**。...原创 2019-03-07 10:46:08 · 3183 阅读 · 0 评论 -
log4j2配置说明(JavaWeb项目日志配置)
1.关于配置文件的名称以及在项目中的存放位置log4j 2.x版本不再支持像1.x中的.properties后缀的文件配置方式,2.x版本配置文件后缀名只能为".xml",".json"或者".jsn".系统选择配置文件的优先级(从先到后)如下:(1).classpath下的名为log4j2-test.json 或者log4j2-test.jsn的文件.(2).classpath下的名为l..原创 2019-03-07 17:47:31 · 649 阅读 · 0 评论 -
简析进程、线程以及多线程
进程(Process)狭义定义:进程就是一段程序的执行过程。**广义定义:**进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。**进程状态:进程有三个状态,就绪、运行和阻塞。**就绪状态其实就是获取了出cpu外的所有资源,只要处理器分配资源就可以马上执行。就绪状态有排队序列什么的...原创 2018-11-09 16:20:20 · 199 阅读 · 0 评论