- 博客(12)
- 收藏
- 关注
原创 图文详解HashMap和ConcurrentHashMap
HashMap底层数据结构为:数组+链表链表长度>7的时候,采用红黑树支持查找、插入等操作,时间复杂度为O(log(n))hashmap初始容量为16当put的时候,才真正地初始化数组,分配了内存(16)。为什么hashmap的大小为2的N次幂首先我们要明白hashmap的hash计算是如何进行的。我们拿到一个key值,假设他的hash值为87992,那么在hashmap进行定位处理的时候,为了使其更散列化,会进行一系列的异或运算,最终再与16进行一个与运算,获得的值必定在00
2020-07-04 14:51:46
122
原创 线程池在springboot中的使用
线程池的概念线程池是线程的一个缓存,可以提供线程重用,避免了线程重复地进行创建销毁,更加科学地管理线程,对线程进行统一地优化,调度和监控。适用于任务时间短、任务量大。如果一个线程任务时间非常 长,可以忽略到线程的创建和销毁时间,那么使用线程池反而不合适阻塞队列概念阻塞队列在任意时刻,不管并发有多高,只有一个一个线程能够进行队列的入队或者出队操作。线程安全。队列满,只能进行出队,入队被阻塞。队列空,只能进行入队,出队被阻塞。线程池的几个重要参数corePoolSize:核心线程数核心
2020-07-04 14:42:32
923
原创 Java对象锁升级过程详解
Java对象的锁升级过程在JDK1.7版本之后,对Sunchronized关键字进行了优化,如果对对象进行Synchronized进行加锁,那么针对资源的竞争情况不同,锁会有一个升级的过程,以保证资源是最佳的利用状况。过程可以概括为:无锁(new对象)-偏向锁-轻量级锁(无锁,自旋锁如CAS,自适应锁)-重量级锁刚new对象,是无锁状态,加锁编程偏向锁,有人征用,升级为轻量锁,竞争频繁,升级为重量级锁。上一篇我们介绍了对象的内存布局,结合它我们来进一步分析。刚new时,25位没用;identi
2020-06-27 11:09:42
792
原创 Java对象在内存中的布局详解
Java普通对象在内存中的布局markword(对象头)markword一共8个字节。共64位。里面存储的内容包括hash值,分代年龄,锁的相关信息等。classpoint(类型指针)对象指向类元数据的指针(32位操作系统–>4字节,64位操作系统–>8字节(未开启压缩指针),4字节(开启压缩指针))JVM通过这个指针来确定这个对象是哪个类的实例(根据对象确定其Class的指针)instancedata(实例数据)实例的成员变量、方法等数据。大小跟类对象里面数据大小有关。padd
2020-06-27 11:03:01
177
原创 Mysql数据库--索引解析以及sql优化
索引的本质索引—是帮助MYSQL高效获取数据的排好序的数据结构每次在节点上的的查找都是一次磁盘I/O,很费时间,索引在本质上帮助mysql减少了I/O的次数。索引的数据结构选择史二叉树最多只能提高50%的性能不适用场景,当作为一个主键递增的值的索引的时候,会退化成链表形式。红黑树可以自动改变根节点,平衡二叉树。比二叉树更优秀一点但是当数据量非常庞大的时候,会导致树太高,层级太多。试想一下,假如我们拥有几百万条数据,每次插入,可能都要进行一次平衡,每次查找都需要Log(N)的时间复杂
2020-06-22 16:53:34
97
原创 JVM的详细介绍,以及调优实例
JVM虚拟机介绍JVM虚拟机从大体上来说,可以分为5大模块。1、栈(虚拟机栈、也可称为线程栈)2、堆 (对象存放的内存)3、方法区 (静态变量、静态方法、运行时常量)4、程序计数器(在线程启动时,会给每个线程分配)5、本地方法栈(本地方法)栈每当一个线程开始的时候,jvm就会给该线程分配一个栈内存。(因此也可称为线程栈)每个栈内存都会有一个程序计数器,用来表示程序运行到第几行(这个第几行指的是在java字节码里的行数),例如CPU被抢占的时候,这个线程会挂起,那重新获得cpu的时候,需
2020-06-22 16:43:04
135
原创 Druid数据库连接池
Jdbc-java-connector需换成低版本引用手动初始化druid在yml里面配置druid#数据库类型为mysqlspring.datasource.dbType=mysql#启动时初始化5个连接spring.datasource.initialSize=5#最小空闲连接5个spring.datasource.minIdle=5#最大连接数量20spring.d...
2019-12-10 11:22:28
146
原创 springboot三大特性
spring核心思想分三大类:控制反转(IOC),依赖注入(DI)和面向切面(AOP)。IOC和DI控制反转通俗讲,控制权由应用代码中转到了外部容器,控制权的转移,是所谓反转。也就是说,正常我们都是新建对象,才可以调用对象。现在不需要了,交给容器来管理,我们只需要通过一些配置来完成把实体类交给容器这么个过程。这样可以减少代码量,简化开发的复杂度和耦合度。—统统交给Spring管理这里,我要...
2019-12-10 11:18:06
1567
原创 ognl对象导航图语言
功能:解决复杂map对象下数据获取处理的问题。依赖:用旧版的话不多说 直接上代码,对于不同类型的值的获取:public class OgnlUtils {/** * @return java.lang.Boolean * @throws * @author zhengwentao * @Description 获取String类型 * @date 2019/11/8 10:3...
2019-12-10 11:12:36
81
原创 HTTPS证书制作手册
话不多说,直接上干货。运行环境Linux系统(须安装openssl)Https证书制作CA与自签名进入Linux系统以后,建立一个存在证书的文件夹(任意路径)。#mkdir key#cd key制作CA私钥openssl genrsa -out ca.key 2048制作CA公钥/根证书openssl req -new -x509 -days 3650 -key ca.key...
2019-12-10 11:08:23
102
原创 nacos安装
nacos的安装下载:官网地址https://nacos.io/zh-cn/安装将下载好的文件解压后,上传至服务器。启动在服务器有对应版本JDK的情况下,无需更改任何配置,运行文件中bin/startup.shcd到…/nacos/bin/目录下,命令为sh startup.sh稍等一会,此时不要shutdown,可能会引起nacos服务崩溃。如果一切顺利,访问#ip:8848...
2019-12-09 16:29:52
205
原创 Linux修改时间时区
查看当前系统时间:date[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s7TIhXjV-1575879866344)(/uploads/nbnbpluse/images/m_0d63c4083b85211376e442fd67c13dba_r.png)]设置系统时区:export TZ=‘Asia/Shanghai’再次查看当前时间:date修改硬...
2019-12-09 16:25:39
55
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人