自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(77)
  • 资源 (1)
  • 收藏
  • 关注

原创 G1 垃圾回收器

G1 物理上不分代,默认会将整个内存区域分为2048个region,region的大小为1MB-32MB,且为2的N次幂。适合内存大的jvm。region可分为四种类型,且region并不是固定的,运行时会改变Eden Space 新生代Survivor Space 存活区Old Generation 老年代humongous 存储大对象,如果超过0.5个region,就放入humongous,但是如果它是。为了解决这个问题,G1划分了一个Humongous区, 它用来专门存放大对象。。

2022-11-21 19:06:10 1795

原创 Mysql(五) MVCC机制

之前提到过隔离机制在可重复读下可以解决不可重复读。简单来说就是事务一旦开始查询,那么查询到的结果,即使别的事务已经对查询到的行提交了,那么再次查询依旧是没有发生改变。这个隔离性就是用过**MVCC(Multi-Version Concurrency Control)**机制实现的,是不会通过加锁互斥来保证隔离性,避免了频繁加锁互斥,而在串行化隔离级别为了保证较高的隔离性是通过将所有操作加锁互斥来实现的。Mysql在读已提交和可重复读隔离级别下都实现了MVCC机制。那么mvcc是怎么实现的呢,需要先解释两个

2022-07-04 10:18:55 227

原创 Mysql(四) mysql锁介绍

锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除了传统的计算资源(如CPU、RAM、I/O等)的争用以外,数据也是一种供需要用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。每次操作锁住整张表。开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低;一般用在整表数据迁移的场景。每次操作锁住一行数据。开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度最高。Inn

2022-07-04 10:16:45 159

原创 Mysql(三) mysql事务和隔离级别

事务是由一组SQL语句组成的逻辑处理单元如果事务并发操作会导致以下问题:更新丢失(Lost Update)或脏写事务A和事务B都要对同一条记录修改,如果事务A先提交,事务B再提交,那么事务A提交的数据被覆盖,就是脏写脏读(Dirty Reads)事务A对一条记录进行修改,但还未提交,此时事务B读到这条被A修改的数据,如果此时事务A回滚,那么这条数据就是脏数据不可重复读(Non-Repeatable Reads)事务内读取了一条数据,一段时间后(期间另一个事务修改了这条数据并提交),再次读取这条数据,但这条数

2022-07-04 10:16:14 117

原创 Mysql(二) explain详解

explain介绍使用explain关键字可以模拟优化器执行SQL,分析sql查询的性能返回如下结果explain出来的信息有12列,分别是id、select_type、table、partitions、type、possible_keys、key、key_len、ref、rows、filtered、Extraid 查询的序列号返回结果中执行的优先级,值越大,越先执行,相同时,由上到下顺序执行select_type 查询的类型table 查询的表要查询的表,当 from 子句中有子查询时,table列是 .

2022-07-04 10:15:48 281

原创 Mysql(一) 索引底层数据结构

先了解一下索引常用的数据结构http://www.rmboot.com/优点:能够快速插入二分查找,时间复杂度是 O(logn)缺点:没有平衡能力,最差情况下可能会成单只树,这时候查找的时间复杂度是 O(n)特点:是二叉平衡搜索树。红黑树能够以O(log2 n)的时间复杂度进行搜索、插入、删除操作特点:查找树,每个节点节点可以有多个子树,中间节点和叶子节点的数据不会重复特点:查找树,每个节点节点可以有多个子树,叶子节点存储了全部数据,和中间节点的数据会有重复了解下数据结构之后,我们再来思考以下问题简单来说,

2022-07-04 10:14:48 177

原创 Kafka 三、线上问题及优化

1、消息丢失情况:消息发送端:(1)acks=0: 表示producer不需要等待任何broker确认收到消息的回复,就可以继续发送下一条消息。性能最高,但是最容易丢消息。大数据统计报表场景,对性能要求很高,对数据丢失不敏感的情况可以用这种。(2)acks=1: 至少要等待leader已经成功将数据写入本地log,但是不需要等待所有follower是否成功写入。就可以继续发送下一条消息。这种情况下,如果follower没有成功备份数据,而此时leader又挂掉,则消息会丢失。(3)acks=-1或all:

2022-07-01 18:55:57 190

原创 Kafka 二、集群搭建与实战

在一台虚拟机内创建三个kafka实例修改配置启动集群集群创建topic[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-G2UcOM22-1656672658410)(1654768088189.png)]可以看到同一个topic下的不同分区的leader是会均匀的在各个broker上,这样会发挥集群的作用,提高kafka的吞吐量[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-DG2Z84rY-1656672658411)(C:\Us

2022-07-01 18:51:15 278

原创 Kafka 一、介绍与使用

kafka是一个消息中间件,是一个分布式的,支持分区的,多副本的,基于zookeeper的分布式消息系统。kafka依赖jvm和zookeeper,需要先安装zookeeper中存放了kafka broker的元数据信息Kafka基本使用创建topic删除topic发送消息消费消息以上命令如果开启多个客户端的话,是都可以消费到生产者发来的消息的,默认不指定组的话,就是广播消息。如果我们希望启动多个客户端,只能有一个客户端去消费,就需要指定group单播消费多播消费生产者发送消息查看消费组的

2022-07-01 18:50:48 372

原创 Zookeeper 三、zookeeper原理

zookeeper集群尽可能的使用二阶段提交保证强一致性,但最终保证的是最终一致性什么场景下 Zookeeper 需要选举?当 Zookeeper 集群中的一台服务器出现以下两种情况之一时,需要进入 Leader 选举。(1)服务器初始化启动。(2)服务器运行期间 Leader 故障​ zookeeper只有在集群下才可以选举,集群节点的数量一般是2n+1,n>0。选举机制的要素zookeeper集群节点角色zookeeper启动时配置文件中并没有指定主从节点,而是在启动后进行选举。每个集群节点都维护了一个

2022-06-08 16:45:25 203

原创 Zookeeper 二、集群搭建

在一台虚拟机内创建三个zookeeper实例{zookeeperurl}表示zookeeper的安装路径,比如我的是"/data/zookeeper/apache-zookeeper-3.6.3-bin/"创建myid文件修改配置文件启动集群验证执行命令:可以看到server1:Mode: follower可以看到server2:Mode: leader可以看到server3:Mode: follower打开三个命令行客户端分别连上三个server连上之后,在三个客户端执行可以分

2022-06-08 16:44:02 252 1

原创 Zookeeper 一、介绍与使用

是分布式协调框架,主要解决分布式应用中的数据问题:可以把zookeeper当成一个数据库,不过存储的数量少,并且是基于内存的数据库。两个核心概念:文件系统数据结构,监听通知机制文件系统数据结构zookeeper文件存储结构类似linux文件系统,每个节点既是一个目录,节点下可以拥有数据部分和子节点持久化目录节点 PERSISTENT客户端zk断开连接之后,节点仍然会存在。只要不删除就一直会存在持久化顺序编号目录节点 PERSISTENT_SEQUENTIAL创建顺序节点默认会创建一个编号,顺序递

2022-06-08 16:42:48 469 1

原创 Java诊断工具 - Arthas

Arthas(阿尔萨斯) 能为你做什么?Arthas 是Alibaba开源的Java诊断工具,深受开发者喜爱。当你遇到以下类似问题而束手无策时,Arthas可以帮助你解决:这个类从哪个 jar 包加载的?为什么会报各种类相关的 Exception?我改的代码为什么没有执行到?难道是我没 commit?分支搞错了?遇到问题无法在线上 debug,难道只能通过加日志再重新发布吗?线上遇到某个用户的数据处理有问题,但线上同样无法 debug,线下无法重现!是否有一个全局视角来查看系统的运行状况?

2022-02-10 14:47:10 184

原创 java线程池

java线程池四种常用的线程池Excutors.newSingleThreadExecutor 单个线程的线程池。Excutors.newFixedThreadPool 固定数量的线程池,处理的任务超过线程数量会进行等待。Excutors.newCacheThreadExecutor 可缓存线程池。Excutors.newScheduleThreadExecutor 主要完成定时或者周期的执行线程任务。无论以上哪一种线程池,内部都是使用的ThreadPoolExecutor这个类,我

2020-10-22 17:36:05 125

原创 AQS

AQS在java中有两种锁机制,一种是Synchronized关键字,这个java自带的内置锁,其中的加锁和解锁的逻辑不用我们去实现。还有一种是JUC包下面的Lock,这是一种显示锁,需要我们手动完成加锁和解锁(其中解锁的逻辑一定要在try/catch中的finally中编写,不然可能会出现死锁问题),这种显示锁就需要用到AQS。全称AbstractQueuedSynchronizer(抽象队列同步器),对比Synchronized,要实现线程同步,有三点必须要满足:1.线程获取锁的过程。AQS中大量

2020-10-22 17:34:57 125

原创 CAS和Synchronized

CASCAS(compare and sawp)比较并且交换,是一种实现线程安全的无锁技术。在我们多线程情况下对一个变量进行修改时,首先要保证该变量的可见性,就要使用volatile关键字来修饰该变量,在修改该变量之前会先读取一下,计算一下得到修改后的预期值,然后进行CAS把读取的变量值修改为预期值,这一步操作是原子性的,所以如果读取值发生了变化,就会返回false,这样就可以一直while循环去修改值。看一下jdk中AtomicInteger.getAndIncrement()方法:public fi

2020-10-22 17:34:24 1332 1

原创 JMM内存模型和volatile

JMM内存模型JMM内存模型是java内存模型,又叫java线程内存模型。首先理解一下并发和并行的概念。​ 并发:是一种逻辑架构,指的是在同一时刻只能由一条指令执行,在宏观意义上看起来是多个进程或者线程同时执行,但是在微观意义上,只是把时间分成若干段,多个进程之间快速交替的执行。可以在单核或者多核上执行。​ 并行:在同一时刻,有多条指令在多个处理器上同时执行,无论是在宏观或者微观来看,二者都是在一块执行的。只会在多核处理器上发生。JMM是一种逻辑架构,每个线程都有自己的本地方法栈,本地方法栈中局部

2020-10-22 17:32:58 169

原创 线程安全的ArrayList CopyOnWriteArrayList

线程安全的ArrayList CopyOnWriteArrayList​ Vector 和 Collections.synchronizedList(new ArrayList<>()) 都是线程安全的list集合,但是他们在多线程的情况下虽然保证了线程安全,但是效率太低,因为在读取和插入元素的时候都会锁住整个对象,CopyOnWriteArrayList :特性基本与arrayList一致,底层也是数组结构,使用比较灵活的ReentrantLock对写入加锁。用于读多写少的并发场景。

2020-09-13 17:43:22 171

原创 java垃圾回收

java垃圾回收​ 参考:https://blog.csdn.net/yrwan95/article/details/82829186​ Java程序在运行过程中会产生大量的对象,但是内存大小是有限的,如果光用而不释放,那内存迟早被耗尽。如C、C++程序,需要程序猿手动释放内存,Java则不需要,是由垃圾回收器去自动回收。​ 垃圾回收器回收内存至少需要做两件事情:标记垃圾、回收垃圾。垃圾判断算法​ 即判断JVM中的所有对象,哪些对象是存活的,哪些对象可回收的算法引用计数算法最简单的垃圾判断算法

2020-09-07 09:49:18 226

原创 OOP模型、计算java对象大小

OOP模型oop是java对象在jvm中的存在形式。一个oop对象分为 对象头区域,实例数据区域,对其填充这三部分。对象头对象头区域分为三部分,Mark Word,类型指针,数组长度。Mark Word:标记字。主要用来表示对象的线程锁状态,存放对象hashCode、GC次数​ 32bit占用:4B​ 64bit占用:8B类型指针(Klass pointer):指向Class信息的指针,表示该对象是哪个Class的实例​ 开启指针压缩:4B​ 关闭指针压缩:8B数组长度

2020-08-29 17:09:53 414

原创 逃逸分析

通过逃逸分析来决定某些实例或者变量是否要在堆中进行分配,如果开启了逃逸分析,即可将这些变量直接在栈上进行分配,而非堆上进行分配。这些变量的指针可以被全局所引用,或者其其它线程所引用。JDK1.6之后默认是开启的逃逸的方式方法逃逸:在一个方法体内,定义一个局部变量,而它可能被外部方法引用,比如作为调用参数传递给方法,或作为对象直接返回。或者,可以理解成对象跳出了方法。线程逃逸:这个对象被其他线程访问到,比如赋值给了实例变量,并被其他线程访问到了。对象逃出了当前线程。逃逸分析的好处如果一个对象不会在

2020-08-29 16:56:44 134

原创 jvm内存模型

jvm内存模型参考 https://www.cnblogs.com/newAndHui/p/11168791.htmlJVM内存模型其实就是JVM在启动的时候从操作系统内存中要了一块大内存,然后将这个大内存分成五个区域:方法区、堆区、虚拟机栈、本地方法栈、程序计数器。 ​ 其中方法区、堆区是线程共享的​ 虚拟机栈、本地方法栈、程序计数器是线程私有的程序计数器维护的只是下一条待执行命令的地址,所以不会OOM虚拟机栈​ 虚拟机栈描述的方法执行的内存模型。在每个方法执行的同时会创建一个栈帧,用

2020-08-29 16:41:14 586

原创 .class字节码解析

.class字节码解析参考: https://www.jianshu.com/p/e5062d62a3d1一个.class文件有这么些部分组成u4 表示4个字节,一个字节是两个16进制。!表示不确定大致分为7个部分:1.魔数和class文件版本(次版本号,主版本号)2.常量池3.访问标志4.类索引,父类索引,接口索引5.字段表集合6.方法表集合7.属性表集合随机找了个.class文件为例:cafe babe 0000 0034 003a 0a00 0d00 2009000c 0

2020-08-29 16:22:36 835

原创 JVM类加载

JVM类加载​ 本文基于OpenJDK8,OpenJDK默认使用的是HotSpot虚拟机(JVM),而HotSpot是基于c++实现的Klass模型​ 一个java的class在jvm中是怎么存储的?用的就是Klass模型。​ java中的对象都是由jvm进行管理的,而HotSpot是基于c++实现的,c++本身也是一个面向对象编程语言,所以每一个class都有一个Klass模型(是一个c++的类,和spring中的beanDefinition类似)来存放类的元数据信息:属性信息,常量池,方法信息

2020-08-29 15:49:34 171

原创 Docker 常用命令

docker pull tomcat:8.5 从镜像仓库中拉取或者更新指定镜像 :是指定版本 否则下载默认的latest版本docker image list 查看本地的所有镜像docker rmi -f tomcat:8.5 删除指定的镜像 如果指定了版本 必须带:版本 才可以删除docker rm -f tomcat1 删除指定的容器 -f代表强制删除docker inspect tomcat:8.5 查看镜像的详细信息docker run --name 容器名 -i -t -p..

2020-07-06 16:23:15 1317

原创 java 实现 websocket消息推送

业务场景是后台触发某个事件(比如后台执行一条insert语句前台就要刷新界面),每一个用户都对应着一个界面,所以这里用wxId作为一个用户页面的唯一标识js代码var websocket=new WebSocket("ws://localhost/voucher/"+wxId); //接收到消息的回调方法 websocket.onmessage = function (ev...

2019-03-20 09:25:51 1052

原创 linux 学习 更新ing.....

参考bilibili视频https://www.bilibili.com/video/av21303002Linux目录结构 linux的世界里,一切皆文件/dev 管理设备 好比windows的设备管理器 /bin 常用指令 /etc 配置文件 /home 家目录 创建一个用户就会形成一个文件夹 /media 自动识别一些设备,例如U盘,光驱,会挂在到这个目录下 /mnt ...

2019-01-26 17:59:27 313

原创 idea 配置 gradle 环境

1.配置jdk环境(略)2.配置gradle环境 2.1首先下载gradlehttps://download.csdn.net/download/l577125882/10893228 2.2解压  不要带中文路径2.3配置环境新建系统环境变量在path变量中加入2.4验证gradle版本gradle -v3.配置idea环境3.1新建仓...

2019-01-03 15:56:10 2758

原创 select 上使用onchange函数失效 解决办法

&lt;select name="qualifications" style="width: 100%; height: 27px;" onChange="changeQualifications(this)"&gt;&lt;option value="1" &gt;销售数量&lt;/option&gt;&lt;option value="2"&

2019-01-03 10:54:39 15134 2

转载 eclipse 快捷键大全 收藏起来慢慢看

https://www.cnblogs.com/mq0036/p/4995390.html

2018-12-20 14:42:27 135

转载 HashMap, ConcurrentHashMap 原理及源码,一次性讲清楚!

网上关于 HashMap 和 ConcurrentHashMap 的文章确实不少,不过缺斤少两的文章比较多,所以才想自己也写一篇,把细节说清楚说透,尤其像 Java8 中的 ConcurrentHashMap,大部分文章都说不清楚。终归是希望能降低大家学习的成本,不希望大家到处找各种不是很靠谱的文章,看完一篇又一篇,可是还是模模糊糊。阅读建议: 四节基本上可以进行独立阅读,建议初学者可按照...

2018-12-19 20:53:46 138

转载 redis实现分布式锁

前言分布式锁一般有三种实现方式:1. 数据库乐观锁;2. 基于Redis的分布式锁;3. 基于ZooKeeper的分布式锁。本篇博客将介绍第二种方式,基于Redis实现分布式锁。虽然网上已经有各种介绍Redis分布式锁实现的博客,然而他们的实现却有着各种各样的问题,为了避免误人子弟,本篇博客将详细介绍如何正确地实现Redis分布式锁。可靠性首先,为了确保分布式锁可用,我们至少要确保锁的...

2018-11-30 21:20:59 97

转载 https原理通俗了解

摘要:本文尝试一步步还原HTTPS的设计过程,以理解为什么HTTPS最终会是这副模样。但是这并不代表HTTPS的真实设计过程。在阅读本文时,你可以尝试放下已有的对HTTPS的理解,这样更利于“还原”过程。我们先不了聊HTTP,HTTPS,我们先从一个聊天软件说起,我们要实现A能发一个hello消息给B:如果我们要实现这个聊天软件,本文只考虑安全性问题,要实现A发给B的hello消...

2018-11-27 15:13:50 422

转载 PowerDesigner oracle逆向生成物理模型

https://jingyan.baidu.com/article/19192ad8f68c21e53e5707eb.html

2018-11-03 20:58:34 403

原创 oracle 导入导出dmp文件

导出 dmp 文件数据库用户:shsystem密码:ok导出文件路径:d:\daochu.dmpexp shsystem/ok@orcl file="d:\daochu.dmp" full=y导入dmp文件sysdba 登录 创建用户并授权开始导出:imp shsystem/tok@localhost/orcl file="d:\daochu.dmp"  f...

2018-11-03 09:04:22 445

转载 适配器模式

假设系统存在一个现有的类UserInfo:class UserInfo { private Map&lt;String, String&gt; userBaseInfo; public Map getUserBaseInfo() { return userBaseInfo; } public void setUserBaseInfo(Ma...

2018-10-25 20:55:41 101

转载 CentOS7安装MySQL

1 下载并安装MySQL官方的 Yum Repository[root@localhost ~]# wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm  使用上面的命令就直接下载了安装用的Yum Repository,大概25KB的样子,然后就可以直接yum安装了。[root...

2018-10-24 17:43:21 115

原创 linux 安装 jdk1.8

自己在阿里云买了个linux服务器,首先要安装jdk环境,在网上搜了一堆,自己再总结一遍1.oracle下载linux的jdk版本 https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html2.下载 Xftp 5 和 Xshell 63.用Xshell 登录账号,登录成功后...

2018-10-22 09:24:06 318

转载 从兄弟到父子:CGLIB动态代理的玩法

前言:本文为《Java帝国之动态代理》的姊妹篇, 讲述动态代理的另外一种实现即CGLib的设计过程。当IO大臣绞尽脑汁地在府中设计Java动态代理的时候,他并不知道,在帝国的一个小小的部落,一个年轻的小伙子正在为同样的问题而苦恼。师傅刚刚给小伙子下达了任务:在运行时对一个类进行扩展, 例如有个类叫HelloWorld,要在运行时给他加点日志输出的代码。师傅特别告诉年轻人:“大胖, ...

2018-10-15 21:59:27 549

原创 javaweb 支付宝接入(思想)

支付宝接入思路:首先要有支付宝的partenterID和key,通过jsp界面,向支付宝的gateway.do发送请求,带上一些参数,一定要有partenterID和key,商家支付宝账号,returnURL,还有一些关于商品的基本信息,请求servlet时将这些参数用md5进行加密,得到sign,然后将sign+parmas带给gateway.do,servlet接受之后对parmas进行m...

2018-10-14 11:46:34 514

gradle-5.1

gradle 5.1 版本

2019-01-03

空空如也

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

TA关注的人

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