
JAVA基础知识
文章平均质量分 76
番茄1223
这个作者很懒,什么都没留下…
展开
-
HashMap和ConcurrentHashMap
Map这种映射关系的集合,由于它继承了数组和双向链表的优势,适合增删改查,在平时的编程中使用的还是比较多的。所以有必要很清楚的了解map集合在使用时的一些坑。 本文基于常用的jdk版本1.7和1.8来分析下常用的两种类型map集合:hashMap和ConcurrentHashMap。一、HashMap...原创 2021-08-22 23:03:13 · 6375 阅读 · 0 评论 -
Spring之AOP
AOP,即Aspect Oriented Programming,面向切片的编程,是通过动态代理技术,在功能程序在不修改功能代码情况下,实现功能的扩展的能力。和代理功能一样,其实看内在实现,AOP就是dynamic proxy的封装,AOP内部通过Java或者cglib实现代理的生产,通过继承InvocationHandler()接口或者MethodInterceptor()接口,并在实现接口的方法中调用Method.invoke()实现目标方法的调用,并在目标方法前和后...原创 2021-08-15 23:00:12 · 136 阅读 · 0 评论 -
ThreadLocal原理
ThreadLocal变量,字面意思理解是"线程局部变量"的意思,它实现的功能是:一个线程内部共享,不同线程之间是隔离的,每个线程只能get()到自己的变量。看下面的ThreadLocal变量的使用代码public class ThreadLocalTest { private static ThreadLocal<Integer> num = new ThreadLocal<>(); public static void...原创 2021-08-12 10:30:10 · 986 阅读 · 0 评论 -
Java的代理模式
代理,是一种设计模式,提供了对目标对象的一种访问方式,即通过代理访问目标对象。 代理,从实现方式来分,可以分为两大类:静态代理和动态代理。动态代理根据实现的方式,可以分为:jdk动态实现和cglib动态实现。一、静态代理 实现一个对象的静态代理,需要该对象继承一个接口,同时代理类也继承该接口。主要包括三个部分组成:代理目标接口:代理类和目标实现类的基本模板,代理类和目标类都需要实现接口方法。 目标对象:实现代理目标接口的实现类。 代理类:持有目...原创 2021-08-10 22:43:01 · 135 阅读 · 0 评论 -
泛型学习笔记
1原创 2021-08-09 23:30:28 · 132 阅读 · 0 评论 -
NIO学习笔记
一、学习背景 最近在做监控系统,前端页面数据通过socket长连接的方式,后端定时分用户推送数据到前端页面。在做的过程中,深感此实现方案的不爽,每个页面的打开,需要后台启动一个线程,实现长连接,线程阻塞。所以想学习下NIO的socketChannel方式,非阻塞的方式,实现前后端socket连接,并实现数据的推送。二、NIO概述 NIO主要有三大核心:Channel(通道)、Buffer(缓冲区)、Selector(选择器)。传统的IO基于字节流和字符流进行操作,一条...原创 2021-08-01 17:38:40 · 133 阅读 · 0 评论 -
java中的强引用、软引用、弱引用
在内存空间不足的情况下,针对对象是否被回收,分为强引用、软引用、弱引用和虚引用。一、强引用 大部分引用都是强引用,比如下面的例子,object和str都是强引用, 当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不回收这种对象。Object object = new Object();String str = "chenchao";二、软引用 软引用是用来描述一些有用但不是必须的对象,在Java中用java.lang.ref....原创 2021-07-23 19:16:50 · 176 阅读 · 0 评论 -
JAVA复制,重点分析下浅拷贝和深拷贝
将一个对象的引用复制给另一个对象,Java提供了三种复制方式,即:直接赋值、浅拷贝、深拷贝。1、直接赋值 直接使用=赋值,即A a1 = a2,复制的是对象的引用,a1和a2指向的是同一个对象,当a1发生变化时,a2也会随之变化。public class CopyTest { public static void main(String[] args){ Person p1 = new Person(); Person p2 = p1;...原创 2021-07-23 19:15:46 · 144 阅读 · 0 评论 -
JAVA内部类
一、内部类定义 将一个类定义在另一个类里面或者一个方法里面,称之为内部类,内部类分为四种类型:成员内部类、局部内部类、匿名内部类和静态内部类。二、内部类详细介绍2.1 成员内部类 成员内部类看起来是外部类的一个变量,可以访问外部类的变量和方法,即使是private权限的变量或者方法。内部类作为外部类的成员变量,可以使用static修饰(class类唯一可以用static修饰符的方法)。使用static修改的内部类,为静态内部类。 未使用static修饰的内部类,为非静态内部...原创 2021-07-23 19:14:21 · 177 阅读 · 0 评论 -
JAVA程序计数器理解
JVM在运行时,内存区域中属于程序私有的区域包括:程序计数器、虚拟机栈、本地方法栈。本片文章主要理解程序计数器的相关概念以及工作原理。一、什么是程序计数器 程序计数器是记录着当前线程所执行的字节码的行号指示器。二、为什么需要程序计数器 Java在编译后的字节码未经过JIT(实时编译器)编译前,其执行方式是通过“字节码解释器”解释执行。可以简单理解为解释器读取装入内存的字节码,按照顺序读区字节码指令,并翻译成指定的操作,并根据这些操作进行计算、跳转、循环等操作。 ...原创 2021-07-23 19:13:28 · 1824 阅读 · 0 评论 -
JAVA线程以及线程池
一、实现线程方式1.1 类继承Thread类 Thread本质上是实现了Runnable接口的实例,自己类继承Thread类,等于重写了Thread对Runnable接口的实现。启动线程的唯一方法就是通过Thread类的start()方法./** * @Description * @Date 2021/07/15 17:11 * @Created by cc */public class MyThread extends Thread{ @Override p..原创 2021-07-23 19:12:54 · 101 阅读 · 0 评论 -
JAVA锁学习
一、JAVA锁的分类 JAVA锁可以分为乐观锁、悲观锁、自旋锁。1.1 乐观锁 乐观锁是认为共享对象读多写少,遇到并发写的可能性很低的乐观心态,每次去拿对象的时候,都认为别人不会修改,所以不会上锁,但是在更新的时候,会先获取共享对象的版本号,比较跟上一次的版本号是否一致,如果不一致,则需要重复“读取对象-比较-写“的操作,如果一致,就直接更新。 java中乐观锁基本都是通过CAS操作实现的,CAS是一种更新的原子操作,比较当前值和传入值是否一样,一样则成功,不一样则失败。...原创 2021-07-23 19:12:12 · 223 阅读 · 0 评论 -
JAVA集合
一、Java集合分类 Java结合在包java.util中,主要分为,set(集)、list(列表,包含Queue)、Map(映射) 其中、set、list、queue的基本接口是Collection,Map是映射表的基础接口。 Iterator是迭代器,可以通过集合的迭代器,遍历集合中的数据。list集合包括ArrayList、Vector、LinkedList。 set集合包括HashSet、TreeSet、LinkedHashSet。 Queue——两端出入的li...原创 2021-07-23 19:10:14 · 90 阅读 · 0 评论 -
JVM原理理解——类的加载过程和GC原理
一、类开始加载 如上图所示,一直到初始化部分,JVM完成了一个类的加载过程。过程中要点梳理如下:双亲委派加载 类加载时,首先都不要自己尝试去加载,都是委托给父类加载,父类找不到,在尝试自己加载。好处是:使用不同的类加载器,最终得到的都是同样的Object对象。 加载流程图如下:准备阶段的初始化和初始化阶段区别 准备阶段的初始化,是JVM为static变量分配好内存空间后,系统的初始化值,而运行前的初始化阶段,是将static变量设置成程序中指定的值。举个...原创 2021-07-23 19:11:01 · 296 阅读 · 0 评论