自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 收藏
  • 关注

原创 HashMap看这一遍就够了

/确定了数组拓容阈值为capacity*loadFactor=16*0.75=12。//this(数组初始长度:16,负载因子:0.75)//capacity最终结果一定是2的n次幂。//确定了负载因子为0.75。//数组初始长度为16。

2023-07-13 12:04:47 97

原创 CAS,AQS,volatile,native,synchronized,lock关键字解读以及它们之间的联系(高频面试)

lfence:load | 在lfence指令前的读操作当必须在lfence指令后的读操作前完成。缓存一致性协议:现代CPU的数据一致性实现 = 缓存锁(MESI ...) + 总线锁(据说是拉高北桥芯片上的一根电容,把通往资源的通道堵死,达到资源独占的目的)astore_1,指令重排乱序,先执行了m=0默认值,然后赋值给Instance(astore_1这个操作),然后才赋的初始值m=8。底层是基于AQS实现的,有一个基于CAS维护的state变量来实现锁的操作,而ReentrantLock是;

2023-07-12 18:11:47 175

原创 多线程,并发编程(一)

不同的硬件和不同的操作系统在内存上的操作有一定差异的。Java为了解决相同代码在不同操作系统上出现的各种问题,用JMM屏蔽掉各种硬件和操作系统带来的差异。让Java的并发编程可以做到跨平台。JMM规定所有变量都会存储在主内存中,在操作的时候,需要从主内存中复制一份到线程内存(CPU内存),在线程内部做计算。然后再写回主内存中(不一定!原子性的定义:原子性指一个操作是不可分割的,不可中断的,一个线程在执行时,另一个线程不会影响到他。i < 100;i++) {

2023-07-11 16:35:43 400 1

原创 Runtime Data Area(运行时数据区)

为了提高io的访问速度,1.7之后jvm新增了直接内存,jvm可以直接访问操作系统管理的内存,用户空间可以直接访问内核空间,归操作系统管(NIO,零拷贝)1.7(永久代 permanert space).启动前必须指定内存大小,不能更改,字符串常量在这,在1.8之后位于堆,FGC不会清理。栈遵循先进后出的原则,一个java线程对应一个栈,每一个方法对应一个栈帧,方法执行完之后出栈。每一个局部便变量表操作时,都会进栈,用完出栈,在赋值给局部变量表。符号引用转直接引用,找到调用的方法。堆的内存划分之后再说。

2023-07-05 17:32:08 51 1

原创 对象创建过程?

初始化:将静态成员变化赋初始值,执行静态代码块。为new出来的对象申请内存。

2023-07-05 10:38:47 39 1

原创 GarBage Collector And GC tuning垃圾回收和调优(二)

设置新生代大小为10M,最小堆大小40M,最大堆大小60M,打印 这个文件运行jvm的命令 行参数,打印GC信息。永久代:必须指定限定大小,常常产生内存溢出,元数据不需要指定,也可以指定,上限取决于物理内存大小。1.6,.1.7传统行业CMS(1.4之后就有了),1.7才有的G1,一般1.8才用G1,1.9默认G1。内存泄漏指对象用完没有回收,一直占着这块地,内存溢出是指不断产出对象,内存撑不住了,暴了。Time:user(用户时间),sys(内核时间),real(总时间)堆之内:新生代,老年代。

2023-07-03 18:10:14 148 1

原创 GarBage Collector And GC tuning垃圾回收和调优(一)

没有引用指向的一个对象或一堆对象。

2023-06-30 17:31:31 77 1

原创 Mysql数据库Sql优化

循环插入io消耗过大,也不建议一次批量操作太多的数据,如果数据太多数据库响应也会很慢。临时表会被自动删除,从而保证数据库整齐、高效,使用union来创建查询的时候,我们只需要用UNION作为关键字把多个select语句连接起来就可以了。使用union关键字后,可以获取排重后的数据。而如果使用union all关键字,可以获取所有数据,包含重复的数据。如果没有走索引,排除没有创建,那么就是失效了,检查sql原因改就行。这样即使误操作,比如把id搞错了,也不会对太多的数据造成影响。

2023-06-27 17:34:33 449 1

原创 Mysql索引

索引是帮助MySQL高效获取数据的数据结构。

2023-06-27 15:56:48 56 1

原创 Mysql常见的锁类型

排他其它操作(InnoDB进行DDL操作时,会默认加上)Mysql中的共享锁和排他锁都属于悲观锁。:共享读,解决了脏读问题。

2023-06-26 18:02:46 106 1

原创 MySql事务隔离级别

问题:当别人新增一条数据时(读到了新的一行数据,产生幻觉:幻读)解决:具体情况具体分析,学会合理使用事务隔离级别。介绍:可以重复读(中间过程不可以修改数据)问题:必须等到提交后才能读,不可以重复读。介绍:顾名思义,读到了未提交的事务。介绍:串行执行事务,保证事务原子性。介绍:顾名思义,读取已提交的事务。问题:读到了脏数据(脏读)问题:效率低下,造成阻塞。解决:读已提交的数据。

2023-06-26 17:22:07 58 1

转载 MySQL 索引底层为什么选择B+Tree

MySQL 索引底层为什么选择B+Tree

2023-06-26 15:28:22 96 1

原创 MySql存储引擎看这一篇就够了

基于 MySQL 5.7.28 版本介绍(CSV、Archive、Memory、InnoDB、MyISAM。其它引擎就不过多介绍)

2023-06-25 17:16:09 251 1

原创 Mysql的底层结构?

MySQL通过识别字符串中列名、表名、where、select/update/insert 等MySQL关键字,在根据语法规则判断sql是否满足语法,最终会生成一个抽象语法树(AST)。逻辑优化主要进行等价谓词重写、条件化简、子查询消除、连接消除、语义优化、分组合并、选择下推、索引优化查询、表查询替换视图查询、Union替换or操作等。存储引擎是可插拔式的,常见的存储引擎有MyISAM、InnoDB、Memory等,MySQL5.5之前默认的是MyISAM,之后默认的是InnoDB。

2023-06-25 15:37:48 272

原创 使用Canal实现mysql binlog增量订阅数据

是由公司业务改造搜索功能,使用ES搜索引擎中间件,那么我们需要将mysql中的数据同步至ES服务中,最总选择使用alibaba的canal增量订阅和解析工具。

2023-06-25 15:12:25 246

原创 怎样实现redis持久化?

RDB,就是把内存数据以快照的形式保存到磁盘上。和AOF相比,它记录的是某一时刻 的数据,并不是操作。RDB持久化,是指在指定的时间间隔内,执行指定次数的写操 作,将内存中的数据集快照写入磁盘中,它是Redis默认的持久化方式。执行完操作 后,在指定目录下会生成一个dump.rdb文件,Redis 重启的时候,通过加载dump.rdb 文件来恢复数据。

2023-06-25 14:59:48 59

原创 如何保持mysql和redis数据一致性?

在进行写操作时,先更新 MySQL 里的数据,再删除 Redis 里该数据对应的缓存。在读操作时,先从 Redis 缓存中获取数据,若没有则从 MySQL 查找,然后将查找到的数据写入 Redis 缓存中。例如,使用 Binlog 和 Canal 进行 MySQL 数据的订阅和读取,并将订阅到的数据写入 Redis 缓存中。在进行写操作时,同时更新 MySQL 和 Redis 中的相应数据。这种方式保持了 MySQL 和 Redis 数据的强一致性,但可能会降低写操作的性能和增加系统的复杂度。

2023-06-25 14:52:22 2661

原创 多线程如何保证线程安全

3调用ThreadLocal的set()方法时,实际上就是往ThreadLocalMap设置值,key是ThreadLocal对象本身,值是传递进来的对象 4.调用ThreadLocal的get()方法时,实际上就是从ThreadLocalMap获取值,key是ThreadLocal对象本身。3.使用ThreadLocal保证每个线程对同一个对象只创建一次==>较好的方法。(ThreadLocal提供了线程的局部变量,每个线程都可以通过​。​来对这个局部变量进行操作,但不会和其他线程的局部变量进行冲突,

2023-06-25 14:50:34 323

原创 Date和LocalDate和LocalDateTime和·LocalTime(date和datetime)的区别:

Date可读性差,使用SimpleDateFormate进行转换会有线程安全问题(共享变量多线程同时使用该对象会造成乱套),所以使用LocalDateTime代替(缺点:设置时间效率低一点,线程安全),LocalDateTime(yyyy-MM-dd hh:mm:ss),LocalTime(hh:mm:ss),LocalDate(yyyy-mm-dd)

2023-06-25 14:42:16 680

原创 char和varchar的区别

varchar更适用于可变长度字符串的存储,char属于固定长度字符串类型存储。对于未知长 度的字符串存储varchar更适合。

2023-06-25 14:39:37 406

原创 @responsebody注解的作用

在Springboot中根本不需要做什么,主要返回值是一个对象,传递给浏览器后,都会将这个对象转换成json字符串,key对应对象字段名称,value对应字段值。

2021-07-08 20:32:24 1000

原创 JSONObject详解

结构),可以使用put方法给json对象添加元素。JSONObject可以很方便的转换成字符串,也可以很方便的把其他对象转换成JSONObject对象。JSONObject只是一种数据结构,可以理解为JSON格式的数据结构(阿里的json很好用,还有一个谷歌Gson也不错。

2021-06-26 13:13:37 2286

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除