- 博客(60)
- 资源 (5)
- 收藏
- 关注
翻译 玩转 JVM 中的对象及引用
玩转 JVM 中的对象及引用前言一、JVM 中对象的创建过程2、对象的内存分配1).检查加载2).分配内存3、指针碰撞4、空闲列表5、并发安全6、CAS 机制7、分配缓冲二、对象的内存布局1、句柄2、直接指针3、判断对象的存活4、引用计数法5、可达性分析三、各种引用1、强引用2、软引用 SoftReference3、弱引用 WeakReference4、虚引用 PhantomReference四、对象的分配策略1、栈上分配2、逃逸分析3、对象优先在 Eden 区分配4、大对象直接进入老年代五、长期存活对象.
2021-08-16 15:23:59
590
原创 深入理解JVM的内存区域
JVM知识点二前言一、深入理解 JVM 的内存区域1、深入理解运行时数据区2、总结一下 JVM 运行内存的整体流程二、从底层深入理解运行时数据区1、堆空间分代划分2、GC 概念3、JHSDB 工具三、从底层深入理解运行时数据区1、深入辨析堆和栈(1)、功能(2)、线程独享还是共享(3)、空间大小2、虚拟机内存优化技术(1)、栈的优化技术——栈帧之间数据的共享3、内存溢出(1)、栈溢出(2)、堆溢出(3)、本机直接内存溢出四、常量池(1)、Class 常量池(静态常量池)1)、字面量2)、符号引用(2)、运.
2021-08-08 21:13:39
797
翻译 虚拟机的前世今生和JVM内存区域
JVM知识一前言一、JVM 基础知识1. Java 程序的执行过程2. JVM、JRE、JDK 的关系二、JVM 的内存区域1.运行时数据区域2.JAVA 方法的运行与虚拟机栈3.虚拟机栈(1).局部变量表:(2).操作数据栈:(3).动态连接:(4).返回地址:4.程序计数器三、运行时数据区及 JVM 的整体内存结构1.本地方法栈2.方法区3.符号引用四.常量池与运行时常量池五.元空间六.堆七.直接内存(堆外内存)总结前言JVM从基础到精通,玩转JVM一、JVM 基础知识1. Java 程序.
2021-08-02 18:08:58
288
原创 dubbo 的简单认识 1
1.在微服务的环境下,存在大量的跨jvm进行方法调用的场景,其实是不可以的 但是有反射的存在,就可以进行调用的。比如我们可以通过jdk的rmi实现一个简单的 反射机制。2.dubbo的使命,除了要实现RPC过程的调用,那么其实在实际工作中,服务节点中的RPC 调用是非常普遍以及复杂的。 服务方是集群时,如何选一个机器在响应客户端 因为网络抖动调用引起的调用失败,如何重试弥补呢?、 服务方机器的动态增减,如何让客户端及时了解并作出调整呢? 所以此时的服务治理即为关键。3.dub...
2021-03-31 15:02:50
172
1
原创 分布式任务调度
1.@scheduled(spring-task) 和quartz的 区别 scheduled默认是单线程的,任务多会出现问题,(两个任务,配置时间0点) trigger 触发器,触发线程,跑job类(时间长,1小时(定时30分钟)) 解决是要配置线程池的2.quartz的用法 如果业务中,需要一些平台调度参数,使用job接口,耦合性较高 解耦合的方式(普通的bean)3.quartz框架,主体功能集中在任务的触发 一个trigger只能绑定一个任务,多个trigger绑定一个任...
2021-02-20 10:52:53
119
原创 消息中间件 rocketMq 1
1.nameServer vs zk, 比zk简单,性能比较高,几十rocketmq的大脑 高效,I/O存储,文件顺序读写,内存映射机制 容忍设计缺陷,MQ中消息只消费一次(幂等性问题),rocketmq自身不确保,交给客户端去做2.nameserver 和broker之间保持着长连接,,默认是128秒3.设计目标 顺序消息 消息过滤:(客户端实现,增加带宽,它可以服务端实现) 消息存储,MQ的核心就是,(除了kafka,基于内存),从两个维度:消息堆积(顺序写在一个文件,存储空间预...
2021-01-29 14:27:58
125
1
原创 一个无名小白的自述
一个无背景,无名校的回忆~大家好,我是一名it男,目前做开发已经6年了。很高兴能在csdn平台发布我的想法,想说说我这一路的过程。毕业到现在几乎一直做着码农的工作。15年毕业, 14年就去北漂。在大三的时候人生开始迷茫,不知道做什么好,朋友推荐做了it这一行。从oc入手,就是苹果手机app端开发。毕业有幸去了一个特别有钱的公司,xxx,毕业就12k。我这边主要负责游戏sdk的对接,工作其实简单的一p,每天就是对对参数,打个包之类的工作。就这样大概持续了一年,就这样混着。当时就觉得自己...
2021-01-28 10:46:40
666
16
原创 消息中间件 kafka 1
1.简单介绍 天然分布式 存储系统(磁盘,持久化) 流式处理(聚合,统计) Stream 大数据 Hadoop1,大数据文件系统,数据分析上 kafka 实时版,核心业务上2.消息,字节数据 批次,支持批量,吞吐量,相应时间之间的权衡 主题,就是表,分区,就是分表,Partition1,p2,文件可以放在不同的服务器上 生产者,消费者,偏移量,消费者群组3.Broker和集群 分区复制,消息冗余,有一个首领4.优点 多生产者和消费者 基于磁盘的数据存储...
2021-01-18 15:37:39
122
1
原创 消息中间件 rabbitmq 3
1.虚拟主机怎么理解,vhost 就是权限,命名空间,就像一个tomcat绑定多个应用一样2.启动,关闭rabbitmq的 rabbitmq-server 和rabbitmqclt3.集群注意点 弱鸡,不是为了高可用,是高吞吐 允许生产者,消费者,在单个节点崩溃的情况下继续运行 通过节点的扩展提高吞吐量 某台机器挂了的情况下,消息是不进行转移的 元数据:队列名称,属性(可以持久化,是否自动删除) 交互器名称,类型,属性,绑定关系4.为什么队里的中的消息,不进行复制呢? ...
2021-01-18 14:05:43
90
原创 消息中间件 RabbitMq 2
1.消息生产者的权衡 生产者,可以在信道加事务 生产者发消息确认,一般确认,批量确认,异步监听确认 备用交换器模式2.消息消费者的权衡 消息拉取,推送,一般使用推送3.消费者的拒绝,有reject,nack两种形式,拒绝的这个消费者,还是可以被轮训到的 nack支持批量拒绝4.死信消息,消费者拒绝,时间过期,超过队列的最大长度 DLX死信交换器5.死信交换器,和备用交换器的区别? 备用交换器针对的是生产者,消息还没有到队列中 死信交换器针对的是消费者,消费者拒绝放到了...
2021-01-15 11:12:47
62
原创 消息中间件 RabbitMQ1
1.为什么要使用消息中间件,解耦,异步处理能力,缓冲能力,伸缩性,扩展性2.与rpc有什么区别,一个同步,一个异步,一个强耦合,一个松耦合3.场景,削峰填谷4.AMQP,协议,连接,信道。5.生产者,消费者,消息,交换器,队列,绑定,路由键6.交换器常用的是4种,direct,是完全匹配7.路径键*和#的区别,#是通配键8.队列可以和交换器多重绑定,就是一个交换器和多个队列绑定9.一个连接多个信道10.多个消费者,轮训的算法11.fannot 交换器的使用,其实就是广播的作用,和路由ke
2021-01-13 09:28:24
132
1
原创 zookeeper 1
1.分布式的特点,分布性,对等性,并发性,缺乏全局时钟,故障随时会发生2.分布式系统带来的问题,通信异常,网络分区(脑裂,一个区出现多个管理者),三态(超时),节点故障3.分布式系统协调方法论,cap理论,c是一致性,a是可用性,p是分布式,网络分区 现在的问题要么是cp,要么是ap4.base理论,基本可用(降级),软状态,最终一致性5.分布式一致性算法,常见算法,2p,3p,paxos,zab6.zookeeper 设计的目标,简单的数据结构,可以构建集群,顺序访问,高性能7.分布式环境.
2021-01-08 10:07:33
111
1
原创 tomcat 2 源码答题解读
1.bootstrap server,service,connection,engine,context,这些组件声明周期如何管理,用lifecycle管理启动,停止,关闭2.连接器,connector->container,连接器就是处理ip,分开就是为了解耦,为了servlet升级,容器模块不用改变3.管道模式4.jvm中类加载,和类加载器, 启动类加载器,bootStrap classload,extension 扩展类加载器,application 应用程序类加载器,customer.
2020-12-28 17:20:48
113
1
原创 tomcat1 1 tomcat整体结构
1.现在稳定的版本的是8.52.启动,一般启动,startup.bat, IDE中启动,嵌入式启动,Debug启动3.部署,隐式部署,就是war包直接扔到webapps下面,一般是不建议这么玩的,tomcat要和war分开的,也就是常说的抗灾难 显式部署,就在在server.xml中添加context元素,这种方式是需要重启tomcat的 还有就是在catalina 文件夹下面的localhost文件夹下,创建一个xml文件,里面也是一个context的标签,访问 的路径就是这个xml文件的...
2020-12-23 15:43:46
130
1
原创 redis 4 高可用
1.redis的主从(一主一从),一般是主备的模式,从节点是不工作的,只开启aof的。有的人会主节点去写,从节点去读,开启多数据 源的情况下,当主节点挂了的话,从节点变成了主节点,这样的话改动的代码是很多的,不建议这么使用 一主多从,会影响带宽,也加重主节点的稳定 树型主从模式,可以减少主节点的压力 slave of 命令 主从复制的原理,以从节点开始,保存主节点的信息,主从建立socket的连接,发送ping命令 权限验证,同步数据集,命令持续复制 数据同步,版本2.8以上使用...
2020-12-22 15:49:24
114
原创 redis 3 实战
1.expire 自动清除,会带来什么问题呢?雪崩2.www.miguo.com,哈哈,实战,redis的文章发布,投票,积分增加,完全可以通过redis实现3.redis+lua脚本实现抢红包,lua脚本的介绍,是c语言开发的,类似存储过程 使用lua脚本的好处,减少网络开销,使用lua脚本可以把多个命令放在同一个脚本中执行 原子操作,不用担心出现竞态条件。复用性,客户端发送的脚本,会永久存储在redis中,这意味着其它客户端可以复用这一脚本4.加载lua脚本,有两种方法,一种是代码中字符串..
2020-12-22 13:44:09
73
原创 redis 2 你要了解的东东,还有后续,哈哈
1.redis string 常见的应用场景 计数功能,incr get 各类场景下(单机或者分布式)的标识号 集群环境下的session共享 使用spring session 和redis完成session共享2.string 实现分布式锁 锁的场景,多任务环境下,多对一 有状态的资源-会不一样的(有状态的)1+1+1=33.锁的实现是通过setnx 来实现的4.redis加锁的正确的姿势,通过setnx向特定的key写入一个随机值,并同时设置失效时间,写值成功及加锁成功...
2020-12-21 11:10:33
107
原创 redis 又来了,1,还有后续~
redis 你要了解的东东1.reidis有什么特点,速度快,键值对,丰富的功能,简单稳定,持久化,主从复制 ,高可用,分布式转移,客户端多语言 redis这么快,内存,单线程,多路复用,协议简单 和memcache的区别,它只能存字符串 因为单线程,所以简单2.应用场景,缓存数据库,排行榜,计数器应用,社交网络,消息队列,其它场景3.redis的配置,redis-server,启动redis,redis-cli,redis命令行客户端,redis-benchmark 基准测试工具...
2020-12-18 15:56:17
204
3
原创 nginx 你确定不看吗?这么好的东西~
nginx 了解1.nginx为什么这么快?多进程模式,master进程,woker进程2.nginx的路由规则 有=精准匹配:直接走这个流程返回 普通匹配(非正则匹配):得到多个location命中,3个命中,最长的被命中(不忙,现在还不走) 得到普通匹配里最长的那个location,分情况,非正则的,直接执行流程返回 最长匹配不是非正则,走正则匹配 正则匹配就不分最长原则了,是最先匹配原则,代码从上往下执行,匹配到就结束3.openresty就是对nginx的封装,支持lua...
2020-12-17 14:06:18
107
1
原创 Seata sage模式及ID发号器
Seata sage模式1.主要是通过状态机,流程去执行,状态机说白了,就是工作流,主要配置json文件,代码往下执行 也存在TCC模式中的问题,空回滚,悬挂问题,幂等性问题2.seata 3中模式的对比 AT模式,效率不高,事务的实时性比价好,使用比较简单,兼容所有的基于jdbc规范 的orm框架,RM是使用dataSourceProxy来做处理的 TCC模式,RM不需要代理数据源,跟TC通讯,注册分支事务,调用try方法 try接口主要做的事情,冻结资源,不是真正的去操作目...
2020-12-08 14:51:55
282
1
原创 这么详细的tomcat你值得拥有~
第一节 Tomcat 体系架构 什么是 Web 服务器? Web 服务器的定义 其实并没有标准定义。一般认为,Web 服务器一般指网站服务器,是指驻留于因特网上某种类型计算机的程序,可以向浏览器等 Web 客户端提供文 档,也可以放置网站文件,让全世界浏览;可以放置数据文件,让全世界下载。。WEB 服务器的介绍 Web 服务器的特点。 1、服务器是一种被动程序:只有当 Internet 上运行其他计算机中的浏览器发出的请求时,服务器才会响应。 2、服务器一般使用 HTTP(超文本
2020-12-07 16:21:15
423
原创 Seata 的TCC 模式问题分析(待续)
Seata 后续:1.TCC模式,t-try prepare c-confirm c-cancel,2.除了TM 上面的@GloadTansational,注解外,各个的RM的接口上面要有@TwoPhaseBusinessAction(name=,commitMethod=, rollbackMethod=)3.如果t,出现问题,则回滚执行rollback方法,如果c,出现问题了,就不回滚4.T-papare-尝试去做,不真正的操作业务sql,或者业务字段,第一阶段的try,只是对目标字段的尝..
2020-12-07 15:21:53
972
原创 RabbitMq 生成订单后续,简单说点
1.预生成订单id,订单信息存到redis中,订单id 返回给前端。提到吞吐量。2.消费到死信队列中的消息话,lua脚本库存+13.微信支付有预支付,先生成二维码,然后扫码支付。4.延迟队列->死信队列里面的消息是必须消费的,消费的时候去判断状态,未支付的话 库存+1。支付的话,不做什么操作。5.支付的话,微信是会有一个回调的,回调是会调用我们自己的系统的,去修改支付状态, 库存去真正的减1,同时还会去增加积分,发物流等等,这点涉及分布式事务的操作6.当微信回调的时候,有可能超时,...
2020-12-04 10:11:17
661
原创 RabbitMq 去下订单,这么多细节你不看吗?
先来个题外话~servlet 3.0规范1.其实提高并发请求,就是减少tomcat线程池中,线程的执行时间,说白了就是提高利用率。而servlet 3.0就是,一个用户请求过来了,访问servlet拿到一个线程之后去处理了业务逻辑,这时候业务逻辑块开启了 一个新的线程去处理自己的业务逻辑,处理完之后,在此调用 servlet.虽说次数增多了,但是两次时间都是比较短,整体的并发量也就上去了。rabbitMQ 下订单1.有两种模式,一种是推,一种是拉,默认是推,拉是,消息执行完主动去拉,...
2020-12-02 19:07:22
676
原创 扣减库存,redis你值得拥有
扯扯犊子并发知识点总结:1.秒杀,物理业务隔离,抽成单独的服务器2.接口设计,防止洪流访问数据库。3.加redis缓存。4.缓存雪崩,一个请求,多个key同时失效,避免同时失效。多个请求,一个key失效。加锁5.热点数据,缓存预热。6.超过10w+的时候,增加本地缓存ehchache,redis作为二级缓存7.缓存,ehcache,现在有了大堆得概念,毕竟是本地缓存,减少io,加快速度扣减库存逻辑,你值得拥有~1.基于DB做数据库的扣减库存2.基于redis扣减库存 incr.
2020-11-30 10:02:59
1005
转载 这么详细的docker你能不看吗?
DockerDocker简介文字描述的东西,百度去~Docker安装与启动(1)yum 包更新到最新sudo yum update(2)安装需要的软件包,yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的sudo yum install -y yum-utils device-mapper-persistent-data lvm2(3)设置yum源为阿里云sudo yum-config-manager --.
2020-11-19 17:16:09
145
原创 秒杀系统的设计,你值得拥有
常见的解决方案:1.将秒杀系统独立部署,甚至使用独立域名,使其与网站完全隔离。物理业务隔离2.重新设计秒杀商品页面,不使用网站原来的商品详细页面,页面内容静态化,用户请求不需要经过应用服务3.因为秒杀新增的网络带宽,必须和运营商重新购买或者租借。为了减轻网站服务器的压力,需要将秒杀商品页面缓存在 CDN,同样需要和 CDN 服务商临时租借新增的出口带宽。秒杀架构原则1.尽量将请求拦截在系统上游,传统秒杀系统之所以挂,请求都压到了后端数据层,数据 读写锁冲突严重,并发高响应慢,..
2020-11-18 15:59:43
191
1
原创 RPC 和 HTTP
RPC 和 HTTPrpc 字面意思就是远程过程调用,只是对不同应用间相互调用的一种描述, 一种思想。具体怎么调用?实现方式可以是最直接的 tcp 通信,也可以是 http 方式,在很多的消息中间件的技术书籍里,甚至还有使用消息中间件来实现 RPC 调用的,我们知道的 dubbo 是基于 tcp 通信的,gRPC 是 Google 公布的开源软件, 基于最新的 HTTP2.0 协议,底层使用到了 Netty 框架的支持。所以总结来说,rpc 和 http 是完全两个不同层级的东西,他们之间并没有.
2020-09-18 17:16:35
107
原创 网络协议,tcp,udp(1)
TCP/IP 模型OSI 模型比较复杂且学术化,所以我们实际使用的 TCP/IP 模型,共分 4 层, 链路层、网络层、传输层、应用层。两个模型之间的对应关系如图所示:TCP/IP三次握手TCP 的三次握手的漏洞在 TCP 三次握手中是有一个缺陷的,就是如果我们利用三次握手的缺陷 进行攻击。这个攻击就是 SYN 洪泛攻击。三次握手中有一个第二次握手,服务端 向客户端应道请求,应答请求是需要客户端 IP 的,服务端是需要知道客户端 IP 的,攻击...
2020-09-17 20:09:57
98
原创 Mysql 架构(1)
1.连接层+当 MySQL 启动(MySQL 服务器就是一个进程),等待客户端连接,每一个客户端连接请求, 服务器都会新建一个线程处理(如果是线程池的话,则是分配一个空的线程),每个线程独 立,拥有各自的内存处理空间 show VARIABLES like '%max_connections%'2.认证层连接到服务器,服务器需要对其进行验证,也就是用户名、IP、密码验证,一旦连接成功, 还要验证是否具有执行某个特定查询的权限(例如,是否允许客户端对某个...
2020-09-15 20:00:21
92
原创 Nacos 简单认识
Nacos 服务发现产品对比Nacos是阿里的一个开源产品,它是针对微服务架构中的服务发现、配置管理、服务治理的综合型解决方案。Nacos特性Nacos主要提供以下四大功能:服务发现与服务健康检查 Nacos使服务更容易注册,并通过DNS或HTTP接口发现其他服务,Nacos还提供服务的实时健康检查,以防 止向不健康的主机或服务实例发送请求。动态配置管理 动态配置服务允许您在所有环境中以集中和动态的方式管理所有服务的配置。Nacos消除了在更新配置时重新 部署应用程序,这使配置的更改更加高效和
2020-09-01 09:06:50
576
原创 常规面试
阿里巴巴一面:redis 为什么这么快?redis完全基于数据库处理网络请求使用的是单线程,避免了不必要的上下文切换和锁的竞争维护使用了I/O多路复用模型。秒杀的整个场景是什么?前端页面使用CDN,页面静态化js层面,限制用户在x秒内只能提交一次同一个uid,限制访问频度,做页面缓存,x秒内,都是一个请求流量过大可以使用验证码请求链接独立部署,使用令牌通算法缓存数据库同步?...
2020-05-08 10:09:10
170
原创 如何编写高效优雅的代码?
如何编写高效优雅的代码?面向对象的:构造器参数过多怎么办使用JavaBean,有get,set方法,会导致线程安全的问题,一般使用Builde模式不需要实例化的类,构造器应该私有不要创建不必要的对象避免无意中创建对象,比如自动装箱避免使用终结方法finalizer方法,jdk不能保证何时执行,也不能保证一定执行,如果确实有要释放的资源使用try-finally使类和成员的可访问性...
2020-04-28 16:51:19
143
原创 JVM性能优化下
JVM性能优化下:jvm调优的本质:并不是显著提高系统的性能,不是说你调了,性能能提升几倍或者上百倍,jvm调优主要调的是稳定GC调优原则:1.大多数java应用不需要调优2.大部分需要GC调优的,不是参数的问题,是代码的问题3.在实际使用中,分析GC情况优化代码比优化GC参数多的多4.GC调优是最后的手段目的:GC的时间够少GC的次数够少发生Full GC的周期足够长,时间...
2020-04-27 15:49:53
115
原创 JVM性能优化
JVM性能优化:内存溢出:程序在申请内存时,没有足够的空间栈溢出:方法死循环调用,不断建立线程堆溢出:不断创建对象,分配对象大于最大堆的大小方法区溢出:在经常动态生产大量Class的应用中内存泄漏:程序在申请内存后,无法释放已申请的内存空间长声明周期的对象持有短生命周期对象的引用链接未关闭变量作用域不合理内部类持有外部类Hash值改变内存泄漏与内存溢出的区别内存溢...
2020-04-27 15:49:11
85
原创 JVM垃圾回收算法和回收器
JVM垃圾回收算法和垃圾回收器判断对象的存活:引用计数法,优点,快方便,简单,缺点对象互相引用,很难判断该对象是否回收可达性分析(java中使用):通过GCRoots,当一个对象到GCRoots没有任何引用链相连,则证明此对象不可用finalize,使对象不被jvm回收,但是jvm不能保证各种引用强引用:=赋值的软引用SoftReference:垃圾回收器在内存充足的情况下不去回...
2020-04-22 14:26:52
135
原创 JVM中的对象
JVM中的对象对象的分配检查加载:先执行相应类的加载过程分配内存:根据方法区的信息确定为该类分配的内存空间大小指针碰撞(java堆内存空间规整的情况下使用)空闲列表(java堆空间不规整的情况下使用)上面两点存在的问题:并发安全解决:cas操作,分配缓存内存空间初始化:虚拟机需要把分配到的内存空间都初始化为零值(int 为0 boolean 为false)设置:虚拟机要对对象进...
2020-04-21 18:20:20
92
原创 JVM内存结构
JVM内存结构运行时数据区域:线程私有:程序计数器:指明当前线程执行的字节码行数,如果是native方法这个计数器是null栈:是一种数据结构,先进后出虚拟机栈:一个线程中如果有多个方法时,一个有一个栈帧局部变量表:用于存放局部变量操作数栈:就是一个栈动态链接:java语言多态性返回地址:正常返回本地方法栈:本地方法栈native方法调用JNI到了底层线程共享:堆/方法区...
2020-04-21 11:15:07
88
原创 java8线程方面新特性
java8->线程方面的新特性LongAdder 在高并发的场景下比AtomicLong,具有更高的性能代价是消耗更多的内存空间AtomicLong是利用cas操作,在高并发场景下,会出现大量失败并不断自旋的情况longAdder基本思路就是分散热点,其内部有一个base变量,和cell[]数组base变量:非竞争条件下,直接累加到该变量cell[]数组:竞态条件下,累加各个线程...
2020-04-20 16:41:48
299
原创 线程中的高逼格词汇
final的内存语意是什么呢?可以保证构造方法初始化完之后在继续往下进行也是防止重排序,java的内存模型锁的内存语意?当线程释放锁的时候,JVM会把该线程对应的本地内存中的共享变量刷新到主内存中当线程获取锁的时候,JVM会把该线程的本地内存置为无效,必须从主内存读取共享变量当在打印的时候println,为什么能够读到共享变量,这个println底层也是使用的synchronized关...
2020-04-20 14:07:15
150
nginx 详细的教学,你不会只想crud操作吧
2020-12-15
gc调优,和jvm调优,特别详细,这是本人花人民币买的
2020-12-08
thoughtwork 面试二问题正确解答,Problem Two: Conference Track Management
2020-12-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人