- 博客(12)
- 收藏
- 关注
原创 jvm内存模型&面试
jvm概念jvm是运行java程序的虚拟机。jvm内存结构1.8之前:1.8之后:内存结构说明:1)堆:存储所有创建的对象;2)方法区(元空间):存储类加载后的元数据、静态变量、常量;3)虚拟机栈:方法运行时内存区域;4)本地方法栈:存储native方法;5)程序计数器:存储运行字节码行号;是否共享:堆和方法区(元数据)是线程共享区域,其他事线程私有。类加载过程加载在加载阶段,通过全类名来获取描述该类的二进制字节流,也就是.class文件,这个过程被称为加载;类加
2022-01-17 23:06:41 876
原创 redis进阶
redis持久化Redis虽然是定义为一个内存数据库,但是其也支持数据的持久化,在Redis中提供了两种持久化机制:RDB持久化和AOF持久化。RDB概念RDB全称Redis Database,若设置持久化方式为rdb,redis默认会生成dump.rdb文件,保存当前数据副本dump.rdb触发方式RDB有两种触发方式,手动触发和自动触发;1)手动触发:使用save和bgsave命令手动触发RDB,save是工作线程执行持久化操作,会阻塞其他客户端请求;bgsave是主线程会foce一个
2022-01-03 18:04:46 321
原创 redis基础
redis为什么快redis存在内存中,内存读写ns级,磁盘读写ms级;redis 是k,v,没有关系操作;value是有类型的,每种类型都有自己的本地方法,计算向数据移动,计算发生在内存;io多路复用,epoll;redis数据结构先上一张图string二进制安全,可以存字符串、整数、图片、序列化json对象,底层数据结构SDS(动态字符串)主要命令:hashmapmap,value也是k,v形式存储,底层数据结构ziplist + hashtable为什么要有ziplis
2021-12-28 15:48:45 615
原创 什么是IO多路复用
前景概念IO在linux操作系统中,一切皆文件,就是一串二进制字符流;在信息交换的过程中,我们都是对这些流进行的收发操作,简称IO(input and output);流的读写,用程序和内核发生的系统调用来实现,read() write()。socketSocket可以看成在两个程序进行通讯连接中的一个端点,一个程序将一段信息写入Socket中,该Socket将这段信息发送给另外一个Socket中,使这段信息能传送到其他程序中文件描述符文件描述符就是fd文件,创建socket系统调用会生成一个
2021-12-25 21:25:38 1403
原创 volatile关键字
概念volatile是轻量级同步机制(低配synchronized)特性内存可见性不保证原子性(n++)禁止指令重排序内存可见性要理解内存可见性先得了JMM内存模型(非JVM)JMM是java并发编程使用的内存模型,是一种规范:线程之间的共享变量存储在主内存(Main Memory)中,每个线程都有一个私有的本地内存(Local Memory),本地内存中存储了该线程以读/写共享变量的副本。本地内存是JMM的一个抽象概念,并不真实存在。它涵盖了缓存、写缓冲区、寄存器以及其他的硬件和编译
2021-07-16 15:15:41 132 1
原创 OAuth2使用场景及用法
oauth2协议生活中你遇到过oauth2授权吗?其实生活中有很多oauth2的场景:1、比如我们使用微信小程序,其实就有oath2的过程,不过是隐式的,用户无感知;2、再说一个比较直观的,当我们使用滴滴出行或者美团app进行登录时,可以选择微信授权登录,并不需要输入密码,如图:只需要点同意,美团就可以使用微信登陆,这中间其实就是oath2的过程。在美团的系统中,是没有存储微信的用户信息,但是授权过后就可以使用到微信的部分权限。这操作过程就是基于OAuth2协议实现的。OAuth2是当前授
2021-07-07 18:39:21 1662
原创 java策略模式
什么是策略模式春节回家我们可以选择步行、骑行、火车、飞机、火箭等等方式;每个出行方式具体实现方式和体验都是有差异的,但是最终我们都可以到家。一句话:殊途同归。有了这个例子,我相信你应该对其思想有了一个基本的认识,下面看一下其正式的概念介绍:定义一系列的算法,把每一个算法封装起来, 并且使它们可相互替换为什么要使用策略模式举个简单的例子,春节回家我们可以选择步行、骑行、火车、飞机、火箭等等方式;每个出行方式具体实现方式和体验都是有差异的,那么之前我们的代码可能是这样:public void g
2021-06-01 16:27:18 2681 4
原创 线程池参数理解
线程池各参数含义先来看看源代码,线程池创建都需要传哪些参数,上代码 public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit,
2021-04-22 19:37:10 161 1
原创 偏向锁
偏向锁概念偏向锁是Java 6之后加入的新锁,它是一种针对加锁操作的优化手段,经过研究发现,在大多数情况下,锁不仅不存在多线程竞争,而且总是由同一线程多次获得,因此为了减少同一线程获取锁(会涉及到一些CAS操作,耗时)的代价而引入偏向锁。mark word 和 monitormark word (实现偏向锁、轻量级锁关键)如图可以看出,对象头中的Mark Word(标记字)主要用来表示对象的线程锁状态,另外还可以用来配合GC、存放该对象的hashCode;monitor (重量锁实现
2021-04-12 16:46:12 284
原创 mq
投递流程消息投递到exchang,根据路由key路由到对应queenexchang类型direct、topic、fanout、heardersdirect精确匹配,topic模糊匹配通常使用fanout(不用路由,效率最快,默认使用)可靠性投递方案消息落库,本地db存储(业务存储、消息存储),投递返回成功,修改数据状态,状态长时间未改,补偿策略重新投递;BIZ DB:订单数据库(或其他具体业务)MSG DB:消息数据库第1步:将订单入库,创建一条MSG(状态为0) 入MSG DB库第
2020-05-27 19:01:49 147
原创 jdk1.8 hashmap
与1.7对比数据结构:1.7是hash数组 + 链表;1.8采用hash数组 + 链表 + 红黑树;数据插入:1.7头插法;1.8尾插法;扩容后数据分布方式:1.7是对所有key重新hash(key的hash值的二进制 & length-1的二进制);1.8是原位置或者(原位置+oldlen)...
2020-03-31 15:41:47 356 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人