深入理解JVM——案例实战(一)
本文概述 排查Full Gc的套路是什么,这里用一个电商案例来进行说明。 spilt()方法是如何造成内存泄露的?如何通过可视化图形分析出问题。以及如何从源代码层面发现根本问题思维导图:电商案例-排查Full GC套路主要业务:在日常场景进行发邮箱,短信以及APP 的推送消息一些特别活动。这种业务的特点是短时间之内会有大量的用户进入APP进行参与,这时候系统的压力会突然增加。问
27岁985土木工程研究生,半路出家进军Java,打拼三年后,现在月收入30k+
背景27岁从某985研究生毕业,专业学的是土木工程相关的。在一家央企工作半年后,存款4000元,之后调到上海总部,一年时间存款差不多有小几万,顿感前途渺茫,于是下定决心转行。 实话说,转行其实就是冲着挣钱去的。一开始其实想的是金融,但入坑一段时间后,发现原来还有金融农民工二八定律,也就是二成人暴富,八成人GG……深感顿挫。 后来听说IT工资高,觉得自己好歹也过了计算机二级,也会些mat
Redis进阶-Redisson分布式锁实现原理及源码解析
前言一、分布式锁的概念和使用场景整理了一张redis知识图谱分享给大家:分布式锁是控制分布式系统之间同步访问共享资源的一种方式。在分布式系统中,常常需要协调他们的动作。如果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源,那么访问这些资源的时候,往往需要互斥来防止彼此干扰来保证,这个时候,便需要使用到分布式锁。二、将redis官网对于分布式锁(红锁)的定义和Redisson实
刨根问底Redis——Redis的持久化机制
一、持久化我们前两章已经讲了,redis是内存型的数据库,他之所以快是因为数据存储在内存。那么数据存储在内存会有什么问题呢?当然就是当服务重启或者服务器宕机内存数据就被清除,我们就无法访问之前存储的数据了。那么怎么解决这个问题呢?当然就是使用持久化技术持久化(Persistence),即把数据(如内存中的对象)保存到可永久保存的存储设备中(如磁盘)。持久化是将程序数据在持久状态和瞬时状
Spring-JDBCTemplate & 声明式事务
Spring的JdbcTemplateJdbcTemplate是什么?JdbcTemplate是spring框架中提供的一个模板对象,是对原始繁琐的Jdbc API对象的简单封装。核心对象JdbcTemplate jdbcTemplate = new JdbcTemplate(DataSource dataSource);核心方法int
JDK8锁机制深度详解——再有面试官要拿锁方面的问题来为难你,让他小心点,别翻车
本文故事这是一个面试向的文章,所以我不会讲得太过正统,争取把枯燥的理论知识讲得浅显易懂一点。另外,我会尽量把知识点整理得全面完整,所以篇幅会比较长。但是只要你耐心看完,保证以后不管遇到什么java锁机制方面的问题,都可以玩玩全全游刃有余。下次再有面试官要拿锁方面的问题来为难你,嘿嘿,让他小心点,别翻车。什么是锁?为什么要用锁?只要有资源竞争,就需要有锁。为了引出锁问题,先看下面一段简单
MySQL 是怎样运行的 - InnoDB数据页结构
数据页结构的快速浏览数据页代表的这块16KB大小的存储空间可以被划分为多个部分,不同部分有不同的功能,各个部分如图所示:一个InnoDB数据页的存储空间大致被划分成了7个部分一、记录在页中的存放 存储的记录会按照我们指定的行格式存储到User Records部分 一开始生成页的时候,其实并没有User Records这个部分,每当我们插入一条记录,都会从Free Space部分
一文读懂Zookeeper数据同步流程
前言在Zookeeper集群中,客户端会随机连接到Zookeeper集群中 的一个节点。如果是读请求,就直接从当前节点中读取数据,如果是写请求,那么请求先会被转发给leader提交事务。然后leader再广播事务,只要有超过半数节点写入成功, 那么写请求就会被提交(类2PC事务)。整个过程如下图所示: 整套数据同步机制是通过ZAB协议实现的,下面我们重点了解一下ZAB协议的实现原理。Z
mysql进阶系列:mysql中MyISAM和InnoDB有什么区别
一. 面试官:mysql中MyISAM和InnoDB有什么区别1. 存储结构MyISAM:每张表被存放在三个文件:frm-表格定义、MYD(MYData)-数据文件、MYI(MYIndex)-索引文件。Innodb:所有的表都保存在同一个数据文件中(也可能是多个文件,或者是独立的表空间文件),InnoDB表的大小只受限于操作系统文件的大小,一般为2GB。2. 存储空间MyISAM:My
Redis分布式方案及一致性Hash算法精讲
为什么Redis需要分布式高性能我们知道Redis本身的QPS已经很高了,但是在一些并发量非常高的情况下,性能还是会受到影响的。这个时候我们希望更多的Redis服务来分摊压力,实现负载均衡。高可用如果只有一个Redis服务,一但服务发生了宕机,那么所有的客户端都无法访问,会对业务造成很大的影响。另外,如果硬件损坏了,那上面的所有数据也是无法恢复的,我们需要个备份。可扩展第三点是出于存储
Spring中Bean的声明周期
1.Bean的一生可以简述为下面9个 实例化Bean对象(通过Bean工厂或者构造方法)设置对象属性(Setter方法注入) 如果Bean实现了BeanNameAware,工厂调用Bean的setBeanName()方法传递Bean的ID。(和下面一条均属于检查aware接口) 如果Bean实现了BeanNameAware,工厂调用setBeanFactory()方法传入工
LVS+Keepalived+Nginx高可用实现
前言本文搭建LVS+Keepalived+Nignx高可用,搭建之前,先看下以下几种方案架设示意图的演进。方案一起初是一个Nginx服务器,但是当Nginx挂掉后,用户就直接访问不了网站,进而演进第二种方案。方案二这个方案通过Keepalived解决了Nginx主节点挂掉后,从节点的Nginx会启用,实现了双机主备,这样虽然解决了第一种方案的弊端,但是高迸发场景下,一个Nginx承受不
普通院校毕业的Java开发,该怎样进入阿里、字节等一线大厂?需要做哪些准备?
一、序言 最早将入职阿里立为目标是在看了网上的校园宣讲会的时候,那时我就关注到了阿里巴巴。我关注的点是这个公司无论是从愿景、理念、还是薪酬福利,都是我们年轻人心目中渴望的充满活力的样子。但是出身双非院校的我,心中还是没有什么信心。虽然网上各个渠道投了阿里不少简历,但是一直石沉大海,不过当时刚好有一个学长在阿里,于是就联系了那位学长帮
含泪劝告:Java开发程序员从大厂出来后千万别想不开去小公司,不然追悔莫及
序言前段时间我在网上看见过一个段子:甲:我应聘上一家中型软件公司了,今天上班的时候,全公司的人都来欢迎我。乙:牛掰啊大佬,都来了哪些人呀?甲:我想想……CEO、COO、CTO、All of 程序员,还有财务、司机。总之,老板说的是都来了。乙:你这待遇也太好了吧,太受重视了吧,这么多人迎接你!甲:没有啊,他们公司就一个人!招聘网站写的是中型公司……乙:????? 上
30岁以后的程序员该何去何从?是继续打拼还是安居一隅
前言前段时间,我收到了一位30多岁已婚已育男程序员的私信(这描述怎么感觉怪怪的……),对方表示现在很迷茫,希望我能给他指点一下迷津。听完他的自述,我感觉他的问题也应该是很多学Java的朋友们的共同心声。于是我决定写下这篇文章,记录下来,希望也能给同样身处迷雾之中的朋友们一个参考。是继续打拼还是安居一隅我能感觉得到,这位大哥当时心里非常的混乱,也可能是因为受到了凌晨十二点网抑云的影响。他
用Docker来解决LetsEncrypt证书失效
前言起因是因为 Let's Encrypt 的管理证书协议 ACMEv1 要在今年废弃掉,导致一台老服务器上的 https 失效。Let's Encrypt 官方推荐的方法是更新到支持 ACMEv2 的 certbot 版本。服务器是Ubuntu 14.04,支持ACMEv2的客户端需要更新到Ubuntu 16.04 ,因为更新系统的不确定性,所以想到了使用 Docke
谈谈关于MySQL explain 的详解
当我们写下一条复杂的sql时,不是盲目去执行,选择提前explain分析sql,是一个不错的选择,避免没用到索引或者用到错误的索引导致mysql大量的扫表,造成线上不好的后果。mysql提供的explain命令可以获取select语句的执行计划,通过explain我们可以知道:表的读取顺序,数据读取操作的类型,哪些索引可以使用,哪些索引实际使用了等等。mysql> ex
微服务架构:Nacos本地缓存 PK 微服务优雅下线
前言今天聊聊正常关闭服务时如何让微服务优雅下线。为什么说是优雅下线?我们知道在分布式应用中为了满足CAP原则中的A(可用性),像Nacos、Eureka等注册中心的客户端都会进行实例列表的缓存。当正常关闭应用时,虽然可以主动调用注册中心进行注销,但这些客户端缓存的实例列表还是要等一段时间才会失效。上述情况就有可能导致服务请求到已经被关闭的实例上,虽然通过重试机制可以解决掉这个问题,但这
Java中的volatile关键字
概要如果不存在并发同步情况时,编译器或运行时或处理器会应用各种优化。而缓存和重排序则是并发上下文中的优化手段,Java和JVM提供了许多控制内存顺序的方法,volatile关键字就是其中之一。没有volatile会怎么样?看下面的一个例子:public class TaskRunner { privat
【建议收藏】Java并发之AQS与ConditionObject
AQS大致结构图 前面讲解的可重入锁和可重入读写锁都是围绕着阻塞队列讲解的。 没有提到AQS中的另一个重要内容:等待队列,也称之为条件(condition)队列。 AQS有Node对象,其有两个用途:形成等待队列和阻塞队列。 虽然是Node,挺像链表的,但是jdk的注释中只用了queues这个单词,所以都称之为队列,毕竟它倾向于FIFO。以ReentrantLock中的