Java基础
文章平均质量分 79
遇见更好的自己、
勤奋是改变命运的唯一途径
展开
-
Mybaits面试题整理
1、MyBatis是什么?MyBatis 是一款优秀的持久层框架,一个半 ORM(对象关系映射)框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生类型、接口和 Java 的 POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。2.传统JDBC开发存在的问题频繁创建数据库连接对象、释放,容易造成系统资源浪费,.转载 2021-08-24 22:04:43 · 253 阅读 · 0 评论 -
AQS原理解析及源码分析
待更新原创 2021-06-20 10:37:57 · 195 阅读 · 0 评论 -
BlockingQueue、ArrayBlockingQueue、LinkedBlockingQueue原理分析
待更新原创 2021-06-21 22:53:04 · 189 阅读 · 0 评论 -
ReentrantLock源码解析
待更新原创 2021-06-20 18:18:03 · 63 阅读 · 0 评论 -
Java面试题整理-高并发篇
1. synchronized的实现原理以及锁优化?synchronized原理分析_遇见更好的自己、的博客-CSDN博客Java 高并发专题之synchronized关键字1、synchronized作为jvm关键字有三个作用域synchronized作用于实例方法锁住的当前对象。只有当前对象被锁住。新new出来的对象不会被锁住。synchronized作用于静态方法锁住的是当前的是类对象:只要是new出来的对象都会被锁住。synchronized同步代码块锁住代码块所对应的对象方法、2、Java对象原创 2021-12-20 20:17:30 · 2424 阅读 · 0 评论 -
Java高并发基础知识
Java高并发基础知识什么是上下文切换?多线程编程中一般线程的个数都大于 CPU 核心的个数,而一个 CPU 核心在任意时刻只能被一个线程使用,为了让这些线程都能得到有效执行,CPU 采取的策略是为每个线程分配时间片并轮转的形式。当一个线程的时间片用完的时候就会重新处于就绪状态让给其他线程使用,这个过程就属于一次上下文切换。概括来说就是:当前任务在执行完 CPU 时间片切换到另一个任务之前会先保存自己的状态,以便下次再切换回这个任务时,可以再加载这个任务的状态。任务从保存到再加载的过程就是一.转载 2021-05-27 21:52:29 · 99 阅读 · 0 评论 -
CAS原理和CAS引发的问题及解决方案
111待更新原创 2021-06-16 22:20:41 · 666 阅读 · 0 评论 -
synchronized原理分析
Java 高并发专题之synchronized关键字1、synchronized作为jvm关键字有三个作用域synchronized作用于实例方法锁住的当前对象。只有当前对象被锁住。新new出来的对象不会被锁住。synchronized作用于静态方法锁住的是当前的是类对象:只要是new出来的对象都会被锁住。synchronized同步代码块锁住代码块所对应的对象方法、2、Java对象头与monitor指令作用于代码块:同步语句块的实现使用的是monitore.翻译 2021-05-26 21:20:21 · 435 阅读 · 0 评论 -
ReentrantReadWriteLock原理分析
待更新原创 2021-06-24 23:08:40 · 147 阅读 · 0 评论 -
CountDownLatch、CyclicBarrier、Semaphore源码解析
待更新原创 2021-06-20 18:36:06 · 82 阅读 · 0 评论 -
ThreadPoolExecutor源码解析
ThreadPoolExecutor源码解析 一、新建线程池的是构造方法 public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, ...原创 2021-06-10 22:55:17 · 157 阅读 · 0 评论 -
ThreadLocal源码解析
待更新原创 2021-06-28 22:23:14 · 509 阅读 · 0 评论 -
wireshark抓包简易入门
一、前言由于分析需要一个MQ的问题,生产者发送MQ,MQ basic.ack 一直失败,所以想通过抓包工具看 下具体发生了什么,分析下原因。找到一篇非常nice的文章,故转载,收藏一波原文地址:手把手教你用 wireshark 抓包_MClink的博客-CSDN博客_wireshark抓浏览器包不少人觉得抓包是一个很高级的东西,感觉涉及到了网络的知识,相信不少从业互联网行业的人对抓包是没有概念的,做web开发的同学可能比较熟悉使用 chrome 的开发者面板来进行抓包,但是对于 wireshar转载 2022-04-29 14:56:04 · 3548 阅读 · 0 评论 -
FullGC问题分析
一、常见的FullGC场景分析频繁的大对象,大对象直接被分配到老年代。 系统高负载运行,请求量很大,jvm来不及将对象转移到老年代,直接到老年代分配对象。 系统内存泄漏,导致对象长时间在老年代,得不到释放。二、 产生FullGC的原因System.gc()方法的调用 在代码中调用System.gc()方法会建议JVM进行Full GC,但是注意这只是建议,JVM执行不执行是另外一回事儿,不过在大多数情况下会增加Full GC的次数,导致系统性能下降,一般建议不要手动进行此方法的...原创 2022-04-29 09:31:32 · 868 阅读 · 0 评论 -
Callable和Future原理解析
待更新原创 2021-06-21 21:58:25 · 317 阅读 · 0 评论 -
JVM之内存模型分析
Java 内存模型的抽象在 java 中,所有实例域、静态域和数组元素存储在堆内存中,堆内存在线程之间共享。局部变量(Local variables),方法定义参数和异常处理器参数不会在线程之间共享,它们不会有内存可见性问题,也不受内存模型的影响。Java 线程之间的通信由 Java 内存模型(本文简称为 JMM)控制,JMM 决定一个线程对共享变量的写入何时对另一个线程可见。从抽象的角度来看,JMM 定义了线程和主内存之间的抽象关系:线程之间的共享变量存储在主内存(main memory)中,每个原创 2021-09-07 22:09:31 · 91 阅读 · 0 评论 -
Jvm之垃圾回收机制
判断一个对象是否可被回收1. 引用计数算法给对象添加一个引用计数器,当对象增加一个引用时计数器加 1,引用失效时计数器减 1。引用计数为 0 的对象可被回收。两个对象出现循环引用的情况下,此时引用计数器永远不为 0,导致无法对它们进行回收。正因为循环引用的存在,因此 Java 虚拟机不使用引用计数算法。2. 可达性分析算法通过 GC Roots 作为起始点进行搜索,能够到达到的对象都是存活的,不可达的对象可被回收。Java 虚拟机使用该算法来判断对象是否可被回收,在 Java 中原创 2021-09-08 22:20:52 · 162 阅读 · 0 评论 -
JVM之类加载机制
类的生命周期其中类加载的过程包括了加载、验证、准备、解析、初始化五个阶段。在这五个阶段中,加载、验证、准备和初始化这四个阶段发生的顺序是确定的,而解析阶段则不一定,它在某些情况下可以在初始化阶段之后开始,这是为了支持Java语言的运行时绑定(也成为动态绑定或晚期绑定)。另外注意这里的几个阶段是按顺序开始,而不是按顺序进行或完成,因为这些阶段通常都是互相交叉地混合进行的,通常在一个阶段执行的过程中调用或激活另一个阶段。类加载 类加载简单来讲就是:讲Java文件编译的c...原创 2021-09-06 23:15:11 · 71 阅读 · 0 评论 -
HashMap底层原理分析
HashMap的实现原理在Jdk1.7之前底层实现是基于数组+链表的形式。即通过HashMap的key值进行Hash。然后对容量(默认16)负载因子(默认是0.75)进行取余获取到其桶的位置:比如某一个key的hash值是18,容量为为16 ,那么他就会存放在第2个桶的位置、如果放生Hash碰撞。那么存放在同一个桶位置的数据将以链表的形式铺开。JDK1.8以后,针对HashMap做过一次优化。防止在同一个桶位置上链表数量过大时,导致的查询效率慢的问题。当链表的数量大于8时,那么自动将链表的替换成红黑树。原创 2021-07-05 22:58:07 · 140 阅读 · 1 评论 -
Java 集合之Collection
待更新原创 2021-07-04 11:22:10 · 79 阅读 · 0 评论 -
ConcurrentHashMap实现原理及源码解析
我们都知道ConcurrentHashMap是线程安全的HashMap,我们学习之前得搞清楚这样几个问题。1.为什么HashMap是线程不安全的,在高并发的情况下,会引发什么样的问题。ConcurrentHashMap又是怎么样去解决问题的。2.ConcurrentHashMap 与HashTable、HashMap之间的区别:同样是线程安全,为什么要选择ConcurrentHashMap而不是HashTable。首先我们来看第一个问题:HashMap在1.7的时候线程不安全是指,当并发..原创 2021-07-08 22:31:01 · 326 阅读 · 0 评论 -
Java IO流 缓冲流-BufferedInputStream、BufferedOutputStream
首先抛出一个问题,有了InputStream为什么还要有BufferedInputStream?BufferedInputStream和BufferedOutputStream这两个类分别是FilterInputStream和FilterOutputStream的子类,作为装饰器子类,使用它们可以防止每次读取/发送数据时进行实际的写操作,代表着使用缓冲区。我们有必要知道不带缓冲的操作,每读一个字节就要写入一个字节,由于涉及磁盘的IO操作相比内存的操作要慢很多,所以不带缓冲的流效率很低。带缓冲的流,可转载 2021-07-10 11:27:58 · 318 阅读 · 0 评论 -
SpringBoot自动装配原理
之前的文章、介绍过SpringMvc的自动装配原理:基于Tomcat容器启动的时候、Spring的contentLoadListener监听Tomcat的启动事件、然后去加载xml或者注解中的Bean信息到Spring容器中、那么SpringBoot和SpringMVC之间又有什么不同点了、我们知道SpringBoot是自带Tomcat的容器的、SpringBoot是如何自动装配的、首先我们看到我们项目中启动类:@SpringBootApplicationpublic class JavaL原创 2021-09-27 21:22:38 · 98 阅读 · 0 评论 -
Jvm内存结构
内存是非常重要的系统资源,是硬盘和 CPU 的中间仓库及桥梁,承载着操作系统和应用程序的实时运行。JVM 内存布局规定了 Java 在运行过程中内存申请、分配、管理的策略,保证了 JVM 的高效稳定运行。不同的 JVM 对于内存的划分方式和管理机制存在着部分差异。下图是 JVM 整体架构,中间部分就是 Java 虚拟机定义的各种运行时数据区域。线程私有:程序计数器、虚拟机栈、本地方法区 线程共享:堆、方法区, 堆外内存(Java7的永久代或JDK8的元空间、代码缓存)一、程序计数器...原创 2021-09-06 22:12:53 · 84 阅读 · 0 评论 -
Java反射机制
转载大佬的文章:将反射的原理和使用方式分析的很透彻,欢迎大家学习、交流。https://blog.csdn.net/javazejian/article/details/70768369转载 2021-07-29 22:17:58 · 75 阅读 · 0 评论 -
Java NIO详解及源码分析
在介绍NIO之前,我们需要来接两组概念:1.阻塞与非阻塞的概念2.同步与非同步的概念阻塞与非阻塞是指:例如当我们建立内存与磁盘的通道时,假设是将内存中的数据写入到磁盘中。当建立通道的时候。表示读写就绪。这时候阻塞指的时:当通道一旦建立的时候,线程就会一直阻塞等待IO操作完成。 但是非阻塞是指:通道建立了,不需要等到IO操作是否完成、立即返回。此时线程可以去执行其他的事情。同步和非同步的概念是指:同步操作是否需要应用程序参与执行。同步是需要的。非同步是不需要的,非同步是操作系统直接操作IO原创 2021-07-15 22:25:17 · 567 阅读 · 0 评论 -
Java IO流之ByteArrayInputStream、ByteArrayOutputStream
ByteArrayInputStream可以将字节数组转化为输入流 。ByteArrayOutputStream可以捕获内存缓冲区的数据,转换成字节数组。ByteArrayInputStream构造函数 public ByteArrayInputStream(byte buf[])public ByteArrayInputStream(byte buf[], int offset, int length) 核心方法:void close() // 关闭该流并释放与之关联.转载 2021-07-12 21:51:33 · 3076 阅读 · 0 评论 -
Java IO流之转换流-InputStreamReader、OutputStreamWriter
InputStreamReader简介InputStreamReader 是字符流Reader的子类,是字节流通向字符流的桥梁。你可以在构造器重指定编码的方式,如果不指定的话将采用底层操作系统的默认编码方式,例如 GBK 等。要启用从字节到字符的有效转换,可以提前从底层流读取更多的字节,使其超过满足当前读取操作所需的字节。一次只读一个字符。InputStreamReader构造函数 InputStreamReader(Inputstream in) //创建一个使用默认字符集的 Input.转载 2021-07-12 21:40:09 · 895 阅读 · 0 评论 -
Java IO流、输入流和输出流总结
待更新转载 2021-07-10 10:56:04 · 352 阅读 · 0 评论 -
Java 代理模式
首先我们需要明白Java的代理模式能做什么?给我们带来的好处是什么?代理模式:一个最大的优点就是隐藏目标类、对目标类的访问都是通过代理类来实现。带来的好处:通过代理访问目标对象,那么在代理中就可以对目标对象进行扩展。 在不修改目标对象源码的基础上,通过代理可以实现对目标对象进行扩展。比如Spring AOP就是基于代理模式的思想实现的。在切面前,切面后去实现一些逻辑处理比如日志打印,或者是对目标对象一些功能的扩展等。我们无需修改目标对象。接下来我们看下:Java代理模式实现的3种方式1.静态原创 2021-07-03 11:35:18 · 154 阅读 · 0 评论 -
Java基础面试题
JVM、JRE和JDK的关系JVMJava Virtual Machine是Java虚拟机,Java程序需要运行在虚拟机上,不同的平台有自己的虚拟机,因此Java语言可以实现跨平台。JREJava Runtime Environment包括Java虚拟机和Java程序所需的核心类库等。核心类库主要是java.lang包:包含了运行Java程序必不可少的系统类,如基本数据类型、基本数学函数、字符串处理、线程、异常处理类等,系统缺省加载这个包如果想要运行一个开发好的Java程序,计算机中只需要安装转载 2021-06-30 07:34:29 · 156 阅读 · 0 评论