- 博客(60)
- 收藏
- 关注
原创 更多笔记~
个人习惯用md做总结,将md都上传到了git上https://gitee.com/hejinde123/self-study-note.git
2021-08-06 20:20:03
170
原创 LongAdder为什么快
AtomicLong与LongAdder同样是原子Long类的加1操作,LongAdder运行速度比AtomicLong速度要快,因为LongAdder使用Base+西格玛Cell累积单元。如果想使用Long的其他运算,使用LongAccumulator具体实现LongBinaryOperator接口(1.8函数式编程)。为什么LongAdder比较快?理论:通过分散热点的思想,将value值分散到Cell数组中,不同线程通过hash的分配方式到不同的Cell中,各个线程对自己的cell进行
2021-07-27 23:23:41
255
原创 Java #垃圾回收相关算法
标记阶段:引用计数算法原理:对于每一个对象,保存一个整型的引用计数器属性,有任何对象引用了该对象,引用计数器值加1,当引用失效时,引用计数器值减1。当引用计数器值为0时,表示对象不在被使用,可以进行回收。有致命的缺点:无法解决循环引用的问题。如图1:当外部指针p断开时,发现next对象的引用计数器值永远不会为0,对象无法被回收,造成内存泄漏。导致Java虚拟机中没有使用该算法。图1可达性分析算法(根搜索算法)原理:以根对象集合(GC Roots)为起始点,从上至下搜索对象,判断对象是否被根对
2021-07-05 17:25:43
252
原创 Java #对象的finalization机制
对象的finalization机制当对象将被垃圾回收器回收时,在回收之前,先执行对象的 finalization()方法。所以一般不主动调用finalization()方法。如果该对象没有机会被回收,finalization()方法一般没有机会执行。finalization()是Object类的方法,可以被子类重写。finalization()方法的执行原理:1、当obj对象到GC Roots没有引用链时,被标记一次。2、判断是否执行finalization()方法,如果该对象没有重写f
2021-07-05 17:24:34
151
原创 Java #对象实例化的过程及内存布局
创建对象的过程:1、类加载,加载该对象所相关的类。2、计算对象大小并分配内存。3、对象属性进行默认初始化4、显示初始化、代码块初始化(自上而下进行赋值)5、构造器初始化注:4、5步在字节码中为<init>方法的执行...
2021-06-24 09:21:48
173
原创 Java #JVM(HotSpot) 运行时数据区 #程序计数器(PC寄存器)#虚拟机栈(栈帧:局部变量表、操作数栈……)#堆……
运行时数据区可以分为五大部分(如下图):其中方法区和堆空间是每个线程共享的 虚拟机栈 每个线程独有一份 虚拟机栈是当前线程所需要执行的方法以栈的数据结构进行存储 程序计数器 每个线程独有一份 程序计数器是存放当前线程执行的方法中的某一行指令的地址 (为了在线程之间切换后找到之前该线程执行的位置)程序计数器...
2021-06-20 23:29:01
494
1
原创 Java中运行并且自定义本地方法 #native
如何在Java中运用并且自定义本地方法?可以使用本地C/C++的类库,如何使用:定义本地方法native方法 public class Example { static { System.load("E:/project_java/OO(Object-Orientde)/IDEAproject/JVMDemo/chapter4/resources/example.dll"); } public native static void hello();}
2021-05-30 20:20:08
474
原创 Java #类的加载过程 #类加载子系统
阶段一(加载阶段 Loading):通过一个类的获取定义此类的二进制字节流 转化为方法区的运行时数据结构 在内存中生成一个代表这个类的 java.lang.Class 对象,作为该类的访问入口阶段二(链接阶段 Linking):验证:目的在于确保Class文件的字节流包含信息符合当前虚拟机要求,保证被加载类的正确性,不会危害虚拟机自身安全 准备:为类变量分配内存并且设置该类变量的默认初始值,即零值。注:在链接阶段如果变量被final修饰,则直接被赋值private static .
2021-05-24 21:29:12
175
1
原创 Java #引导类加载器、扩展类加载器、系统类加载器 #双亲委派机制、沙箱安全机制
引导类加载器(启动类加载器,Bootstrap ClassLoader)使用C/C++语言实现的,嵌套在JVM内部。 它用来加载Java的核心库(String类……)(JAVA_HOME/jre/lib/rt.jar、resource.jar或sun.boot.class.path路径下的内容),包括加载扩展类加载器和应用程序加载器 没有父加载器。 出于安全考虑,Bootstrap启动类加载器只加载包名为java、javax、sun等开头的类扩展类加载器(Extension ClassLoade
2021-05-24 12:25:38
437
原创 正则表达式的基本用法
常用的元字符代码 说明 . 匹配除换行符以外的任意字符 \w 匹配字母或数字或下划线或汉字 \s 匹配任意的空白符 \d 匹配数字 量词{n} 表达式重复n次(如:表达式 \d{6} 为匹配6个数字) {m,n} 表达式至少重复m次,最多重复n次 {m,} 表达式至少重复m次 ? 表达式0次或者1次 + 表达式至少出现了1次,相当与{1,} * 表达式出现任意次,相当于{0,..
2021-04-10 22:37:44
463
原创 WEB应用是如何运用Spring的?#Spring的IOC容器如何在WEB中创建和获取?
Spring的IOC容器如何在WEB中创建?①非WEB应用在main方法中直接创建 IOC 容器②WEB应用中,IOC应该在服务器加载时就创建 IOC 容器所以我们需要用到ServletContextListener监听器类,在初始化服务器方法 contextInitialized(ServletContextEvent sce) 中创建 IOC 容器③在WEB应用的其他组件中如何来访问 IOC 容器呢?我们只需要在监听器中将创建好的IOC容器放入到 ServletContext 域对象
2021-01-01 14:52:53
396
原创 Spring如何配置Bean以及配置AOP
如何创建一个基础的Spring工程?先建立一个java工程 导入Spring所依赖的基础包:spring-aop-3.2.13.RELEASE.jar、spring-beans-3.2.13.RELEASE.jar、spring-context-3.2.13.RELEASE.jar、spring-core-3.2.13.RELEASE.jar 配置xml文件 <?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://
2020-11-07 14:51:22
941
原创 二叉树的性质
二叉树:每个结点的最多只有2个孩子总结点n,n0是度为0的结点(叶子节点),n1是度为1的结点,n2是度为2的结点如何求出: n0 = n2 + 1(叶子结点数 = 度为2的结点数 + 1 )B为分支数n=n0+n1+n2 B=n-1 B=2*n2+n1n0 = (n - n1 + 1) / 2如果是完全二叉树 n1只有0或1两种情况可以得到:n0 = (n+ 1) / 2 或n0 = n/ 2...
2020-10-30 22:00:25
278
原创 算法-贪心算法-集合覆盖问题
应用场景:有5个广播台K1,K2,K3,K4,K5每个广播台都有限定的播放地区,如图:广播台 播放地区 K1 北京、上海、天津 K2 广州、北京、深圳 K3 成都、上海、杭州 K4 上海、天津 K5 杭州、大连 问题:如何选取数量最少的广播台,覆盖北京、上海、天津、广州、深圳、成都、杭州、大连这8个城市?贪心算法:HashSet存放未覆盖城市,北京、上海、天津、广州、深圳、成都、杭州、大连 遍历广播台找出含未覆盖城市最多的广播台
2020-10-27 20:06:19
326
原创 算法-动态规划-背包问题
应用场景:一个已知容量为4的背包,有3种商品分别为A、B、C,不同的商品有不同的价格,且重量也不相等商品 重量 价格 A 1 1500 B 4 3000 C 3 2000 问题1:如何存放商品到背包中,使得背包中的商品价值最大。(商品不能重复)动态规划算法在这个应用中可以理解为:先求出背包容量为1的最优解,在这个基础上去尝试求出背包容量为2的最优解,……一直求出背包容量为4的解。接下来用一张表格来说明:容量
2020-10-23 20:34:56
171
原创 Session技术与Cookie技术之间的内幕
我们现已知:session是servlet中的一个会话级的域对象,cookie是浏览器上的用来本地储存数据对象session的生成:session在浏览器访问服务器时,该浏览器对应的session对象就创建在服务器内存中(一个浏览器对应一个session对象)cookie的生成:cookie的生成是经过服务器的响应后,携带cookie信息保存在了浏览器中...
2020-09-09 22:57:27
125
原创 持久层框架MyBatis的源码粗略分析#图解myBatis的运行原理
大家都晓得MyBatis是一个很好的持久层框架,可以方便地对数据库进行增删改查操作,那么它究竟是什么运行原理呢?我粗略的看了一下源码MyBatis可以分为两大部分,一、首先是解析mybatis配置文件,如下图:从build开始debug进入源码到下图:从build()方法中可以看出,SqlSessionFactoryBuilder对象对mybatis-config.xml文件用XMLConfigBuilder进行解析,并将他封装在Configuration对象...
2020-08-05 02:22:01
186
原创 Java#面试题总结
目录1.抽象类为什么不能创建对象2.SQL查询语句关键字的执行顺序3.Statement和PreparedStatement的区别1.抽象类为什么不能创建对象抽象类不能表示一个具体的类,为了集合一些具有相同行为或属性的类创建的类 抽象类中含有抽象方法,这些方法就等着被继承,被子类重写,不同的子类方法的功能具体实现是不同的 如果抽象类能创建对象,该对象调用其抽象方法就没有意义2.SQL查询语句关键字的执行顺序优先级 关键字 关键字作用 1 FROM 定
2020-07-10 18:53:18
124
原创 Java #反射机制
什么是反射机制?在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法。常用反射机制的场景当需要访问一个类中的私有成员,私有构造方法,私有方法时,可以用反射机制获取该类的属性、构造方法、成员方法,一般首先构造一个该类的对象,将对象的属性、方法的权限修改为可访问的。代码:例:被访问的类Role:public class Role { private int roleId ; pri
2020-07-05 17:48:52
125
原创 MySQL表内字段的五种约束
非空约束not null表示该字段不可为null null 表示该字段可以为null主键约束(primary key)每一张表都会存在一个主键,主键是这张表唯一标识,可以用来代表这张表的所有数据,主键不能重复 主键自动为not null关键字auto_increment(只能用在主键上)自动编号,和主键同时使用(primary key)唯一约束(unique key)表示该字段唯一 唯一字段可以为null 一张数据表可以有多个唯一字段默认约束(default '默认值.
2020-07-04 22:20:43
415
原创 Leetcode栈题(java作答)
155.最小栈设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。push(x) —— 将元素 x 推入栈中。pop()—— 删除栈顶的元素。top()—— 获取栈顶元素。getMin() —— 检索栈中的最小元素。示例:输入:["MinStack","push","push","push","getMin","pop","top","getMin"][[],[-2],[0],[-3],[],[],[],[]]输出:[null,nul...
2020-07-02 16:12:26
205
原创 Java #Collection四大子接口Deque,List,Queue,Set及其实现的类
Collection为一组对象,这些对象也称为 collection 的元素,常用的四大子接口为Deque,List,Queue,Set。四个子接口的异同:接口(常用) List(序列) Queue(队列) Deque(双端队列) (继承Queue) Set(集合) 元素是否存在重复 存在重复 不存在重复 操作 任意...
2020-07-02 16:12:01
759
原创 Leetcode链表题(Java作答)
83.删除排序链表中的重复元素给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。示例1:输入: 1->1->2输出: 1->2示例2:输入: 1->1->2->3->3输出: 1->2->3来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list/** * Definition for...
2020-06-11 16:23:01
191
原创 Java #网络编程#TCP编程# 计算机之间是如何传输信息的?
计算机是如何将信息传输到另一台计算机上的?举个例子:当我们将QQ中的一个笑脸表情发送给好友时首先计算机会将笑脸转为二进制 二进制 选择传输协议TCP/UDP 二进制+TCP/UDP 将数据从端口传输到网卡 二进制+TCP/UDP+端口号 网卡通过IP地址传输 ...
2020-05-06 12:27:28
212
原创 Java #多线程技术#线程安全问题#Thread类、Runnable接口、synchronized关键字
多线程的目的就是为了让多个任务同时执行真的是同时进行吗?CPU在执行多线程进程时,会切换线程执行,只不过切换速度非常快,让我们感觉是在同时执行进程正在运行的程序,当一个程序进入内存运行时,即变成了一个进程,具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位线程是进程中的执行单元,一个进程中至少有一个线程也可以存在多个线程在Java中mian()所在的线程为主线程...
2020-05-02 18:09:58
171
原创 Java #I/O流#字节流、字符流、缓冲流
FileInputStream 类(字节输入流)创建一个文件输入流 FileInputStream(Filefile) 通过打开一个到实际文件的连接来创建一个 FileInputStream,该文件通过文件系统中的 File 对象 file 指定。 FileInputStream(Stringname) 通过打开一个到实际文件的连接来创建一个 ...
2020-04-26 16:10:53
226
原创 Leetcode哈希表题(java作答)
目录136.只出现一次的数字202.快乐数219.存在重复元素II136.只出现一次的数字给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?示例 1:输入: [2,2,1]输出: 1示例2:输入: [4,1,2,1,2]输...
2020-04-23 19:59:53
571
原创 Java #File类的常用方法
从持久化存储设备将数据读取到内存 Input操作 输入流从内存将数据写入到持久化设备 Output操作 输出流数据在设备中是以文件(File)的形式体现,所以Java中以File类来描述文件和目录(文件和目录都可以是一个File对象)public class FileDemo { public static void main(String[] args) {...
2020-04-22 17:38:39
275
原创 #牛客网#Java专项练习题2
下面代码的输出是什么?public class Base{ private String baseName = "base"; public Base(){ callName(); } public void callName(){ System. out. println(baseName); } ...
2020-04-17 13:02:16
257
原创 #牛客网#Java专项练习题1
设有下面两个赋值语句:a = Integer.parseInt("1024");b = Integer.valueOf("1024").intValue();下述说法正确的是()正确答案: DA.a是整数类型变量,b是整数类对象。B.a是整数类对象,b是整数类型变量。C.a和b都是整数类对象并且它们的值相等。D.a和b都是整数类型变量并且它们的值相等。...
2020-04-17 11:57:33
215
原创 Java #列表LinkedList方法
LinkedList可以当做列表、队列、栈、双端队列除了实现了List的功能之外 还实现了Queue(Deque)队列接口LinkedList本质上就是一个【双向循环链表】LinkedList的方法1.LinkedList当做双端队列去用(都是对头尾操作的)void addFirst(E e)void addLast(E e) E removeFirst() E rem...
2020-04-13 14:50:40
156
原创 Java 异常类在继承中的语法规则
在继承当中使用异常的一些情况(不去管运行时异常)父类的函数如果没有声明任何编译时异常,那么子类重写的函数也不能声明就算子类当中出现了编译时异常 也只能进行捕获 不能声明 父类的函数如果声明了编译时异常,那么子类重写的函数只能声明该异常或该异常的子类的子集 父类的函数如果声明了多个编译时异常,那么子类重写的函数只能声明这些异常或其子类的子集public class Fu { pub...
2020-04-12 19:05:49
175
原创 Java 浅谈String类的内存分配
String是引用数据类型,但是内存又与我们所知的引用数据类型不同有人提问:引用数据类型存放在内存哪?回答:在堆中(所谓的引用数据类型,其实就是对象)但是String的内存图解有稍稍的不同:String str1 = "hello";String str2 = "hello";String str1 = new String("hello");Stri...
2020-04-05 18:00:42
177
原创 Java 一分钟了解#值类型#引用类型
Java 提供两种不同的类型:引用类型和原始类型(内置类型、值类型、基本数据类型)Int是java的原始数据类型,Integer是java为int提供的封装类。 Java为每个原始类型提供了封装类。 原始类型封装类 boolean(Boolean)、char(Character)byte(Byte)、short(Short)、int(Integer)、long(Long)、float(Flo...
2020-04-05 17:29:30
189
原创 Java 自定义异常类(RuntimeException的子类)
RuntimeException的父类为Exception类,该类为运行时异常类
2020-04-05 11:10:24
2455
原创 Java 自定义异常类(Exception的子类)
什么时候该自定义异常类?举个例子:定义了一个Word类,该类是单词类,根据单词的业务逻辑,单词中只能含有a~z、A~Z里的字符,但是在初始化Word对象可能会有含有其他字符,当含有其他字符时,就让程序报错。如何自定义异常类?所有异常的最终父类为Throwable类,自定义异常...
2020-04-04 15:42:10
4781
原创 Java 查看StringBuilder类源码
public final class StringBuilder extends AbstractStringBuilder implements java.io.Serializable, CharSequence{ ......}继承AbstractStringBuilder抽象类,继承java.io.Serializable, CharSequence...
2020-03-27 11:05:25
197
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人