- 博客(18)
- 收藏
- 关注
原创 JAVA普通对象内存布局
一般markword大小为 8 bytes,class pointer 大小为 4 bytes,实例数据大小根据成员变量来对齐就是上面的字节数加起来必须能被8整除,不能整除补齐如 new object:markword大小为 8 bytes,class pointer 大小为 4 bytes,实例数据大小 0,补齐就应该是:4 Bytes最后大小为16 Bytes...
2022-02-22 11:50:52
288
原创 DCL是否需要加volatile
首先什么是DCL,就是单例的一种模式,double check lock缩写 private static volatile Mrg INSTANCE; private Mrg(){} public static Mrg getInstance(){ if (INSTANCE == null){ synchronized (Mrg.class) { if (INSTANCE == null) {
2022-02-22 09:42:01
216
原创 三次握手,以及为什么tcp安全
明白三次握手,以及为什么tcp安全,首先得明白上面4个字母含义SYN: 等于1 表示申请建立连接ACK: 是否已成功接收,等于0 表示没有成功接收, 等于1 表示已成功接收,TCP以后每次成功接收都要发送ACK = 1seq: 序列号,首次随机生成,这是确保TCP及其重要的参数,后面详说ack:与ACK不同,是表示应该发给我的下个数据包的编号详细说下:PS:以下的1001表示x,2001表示y。因为x和y都是随机生成的第一次握手:客户端发起连接申请,所以SYN = 1但是现.
2021-12-23 09:59:41
2769
原创 mysql是如何确保事务隔离的?MVCC
首先要明白快照读和当前读:快照读: 正常的不加锁的select语句,如 select * from …当前读: 会加锁的语句,如update, delete, insert, select * from … for update … 这种表字段后面会有3个隐藏字段,其中row_id只要设置了主键就不会有。另外两个id分别是事务id,trx_id 和 roll_pointer 用于记录上一条undolog的位置。每次执行快照读的时候,会生成一个readView对象,包含4个变量如果被访问版本的
2021-11-15 11:14:50
706
原创 mysql是如何保证持久性的?
通过redo log,重做日志。mysql不会在每次sql之后就写入磁盘,这样每次一个小变动都可能会导致页的改动。mysql会先写入缓存,然后定时刷入磁盘。这样如果中途断电,就可能会导致数据丢失。所以在每次commit前,会写入redolog file中,这样就可以根据redolog复盘...
2021-11-15 10:13:46
990
原创 mysql是如何保证原子性的?
undo log 回滚日志。每次执行sql,都会记录一条对应用于回滚的日志,比如insert会记录一条对应的delete。就可以根据undo log进行回滚
2021-11-14 22:52:39
551
原创 JVM指针碰撞和空闲列表
以下是深入理解Java虚拟机第三版原话:假设Java堆中内存是绝对规整的,所有被使用过的内存都被放在一 边,空闲的内存被放在另一边,中间放着一个指针作为分界点的指示器,那所分配内存就仅仅是把那 个指针向空闲空间方向挪动一段与对象大小相等的距离,这种分配方式称为“指针碰撞”(Bump The Pointer)。自己话说就是如果内存完全连续,将已使用内存与未使用内存分开放到两边,中间是指针,每次使用多少内存,就将指针移动大小相等的距离。如下图以下是深入理解Java虚拟机第三版原话:但如果Java堆中的
2021-11-10 15:00:44
487
原创 为什么线程调用使用start()而不是run()
调用run方法,只是一次普通的方法调用,并不会开启线程。调用start方法,它会去调用本地方法start0开启一个线程,然后在线程中调用run方法。
2021-11-07 18:03:19
59
原创 IOC容器创建Bean的生命周期,以及注解
主要关注主流程,中间那条线,其它只是对主流程的扩充。Aware是lnstantiationAwareBeanPostProcessor的简写,是个类,然后before是该类方法postProcessBeforeInstantiation的简写,after是postProcessAfterInstantiation的简写。是该类的两个方法。BeanPostProcesser的before和after也是简写,分别是postProcessBeforeInitialization和postProcessAft
2021-11-01 20:51:23
115
原创 String str = new String(“ab“); 创建了几个对象
String str = new String(“ab”); 创建了几个对象2个或者1个会先去字符串常量池查看是否有 “ab” 对象,没有则先在字符串常量池创建。然后再在堆中创建一个对象,返回引用给str。堆中String对象的char[] 指向字符串常量。...
2021-11-01 16:25:08
113
原创 JVM哪些内存区域会发生内存溢出(OOM),以及报错信息
JVM哪些内存区域会发生内存溢出(OOM)栈报错:StackoverflowError堆报错:outofMemoryError: Java heap space方法区报错:outofMemoryError: Metaspace本机直接内存报错:outOfMemoryError: Direct buffer memory
2021-11-01 15:52:23
60
原创 JVM运行时内存区
JVM运行时内存区左边线程共享,右边线程私有。堆:线程共享。栈:线程私有,有些是指针,指向堆中对象。程序计数器:记录每个线程执行的位置。方法区:存放常量,静态变量,类信息等。本地方法栈:和栈相同,但是栈是为Java服务,而本地方法栈是为用到的Native方法服务。...
2021-11-01 15:34:20
76
原创 什么是线程,什么是进程
进程是操作系统分配资源的最小单元线程是操作系统调度的最小单元一个程序至少有一个进程,一个进程至少有一个线程举个例子:双击QQ,进程会把QQ加载在内存,分配磁盘,网络端口等资源执行QQ,比如给某个人发信息,就至少需要一个线程...
2021-11-01 15:29:44
66
原创 git 在当前目录有内容时候如何与远程仓库建立连接
git 在当前目录有内容时候如何建立连接git init 会在目录下生成.git文件,用来管理文件git add . 添加在临时目录git add commit -m "first commit" 第一次提交会默认创建一个master分支git remote add origin https://git... 添加远程仓库地址,origin是该远程仓库别名git push -u origin master 当前分支和别名为origin的远程master分支建立关联并push,-u主要是为了建立关
2021-10-30 00:33:31
132
原创 springMVC使用multipart实现Ctrl建批量上传图片
springMVC使用multipart实现Ctrl建批量上传图片,包括上传大小,格式的判断//引入了jqeury.form.js插件,该插件可以很好的封装form表单的信息。//因为上传文件需要用到 所以想要ajax实现异步上传需要用到上面提到的插件前端://html:<form id="form_addphoto" action="/photo" method="post" e...
2019-02-24 21:51:15
180
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人