自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

沉默的夏虫

小时候的那只铅笔盒

  • 博客(164)
  • 收藏
  • 关注

原创 JVM中的java 对象【创建过程(6步)&以及对象内存布局&对象大小&对象头&对象定位&对象分配过程】

1.类装载 装载class文件形成Class对象2.类链接 检验 是否符合jvm规范、准备 为静态属性开辟空间并赋默认值、解析 将符号变量换为真正得地址3.类初始化 静态赋初始值,执行静态代码块----------至此Class对象创建完毕----------------4.是申请对象内存成员属性赋默认值5.调用构造方法成员属性赋初始值,执行构造中的代码...

2020-04-12 22:21:17 209

原创 volitail 带来的伪共享问题以及内存屏障

关于volitail小知识:伪共享问题:volitail 会触发缓存一致性[intel用的是MESI协议],缓存一致性每次都是按照行为单位触发的(缓存行的概念),行内可能有多个变量比如A,B 一旦A失效整个行的变量都将失效,(所以如果线程1只用了volitail A,线程2只用了volitail B 但是两个线程的缓存行却都是A和B,那就会触发不必要的缓存一致性同步)...

2020-04-12 17:08:58 679

原创 JVM笔记

类加载器启动类加载器 rt.jar resouce.jar...扩展类加载器 ext/下应用类加载器自定义类加载器类加载的过程双亲委派简单来讲:1.从下向上问一遍“爸爸,你加载过这个class没?”(加载过直接返回)2.若到了顶级都没加载过,再从上到下“我看看是不是该我加载的部分,是的话我来加载,不是的话交给儿子去加载”,儿子也执行同样的过程意义:1防止重复加...

2020-04-12 15:48:12 79

原创 多线程只有自己能看懂的学习笔记

reentrantlock和synchronized区别reentrantlock:实现了AQS(一系列cas操作+volatile int state同步状态标识+用LockSupport.park LockSupport.unpark 休眠和激活队内线程)trylock有等待队列公平锁,非公平锁状态锁synchronized锁升级 偏向锁 自旋...

2020-04-10 19:17:32 157

原创 CAS Compare And Swap 原理

ABA问题

2020-04-09 23:36:18 242

原创 解读并发多线程中dcl(double check lock)的时候被操作共享变量需要使用volatile进行修饰

下边那单例模式进行举例说明:public class Singleton { private int num=100; private static Singleton singleton; private Singleton (){} public static Singleton getSingleton() { if (singl...

2020-04-09 23:14:55 535

原创 synchronized总结

无锁,偏向锁(对象头记录线程id),自旋锁(有竞争),重量级锁 理解他们可参考https://www.jianshu.com/p/b43b7bf5e052 和 https://www.jianshu.com/p/16c8b3707436 这里面说的很形象属于可重入锁锁针对对象markword:gc年龄 锁标识 类指针...

2020-04-09 16:44:31 110

原创 阻塞(sleep等等)区别 中断(interrupt)+ 中断的意义

可以直接看最后的红字结论不客气地说,至少有一半人认为,线程的"中断"就是让线程停止。如果你也这么认为,那你对多线程编程还没有入门。  在java中,线程的中断(interrupt)只是改变了线程的中断状态,至于这个中断状态改变后带来的结果,那是无法确定的,有时它更是让停止中的线程继续执行的唯一手段。不但不是让线程停止运行,反而是继续执行线程的手段。  对于执行一般逻辑的线程,如果调用它的i...

2020-04-09 12:05:33 1278

转载 BIO、NIO、AIO 区别和应用场景

IO对于IO我们应该非常熟悉了,IO不仅仅针对文件的操作,网络编程socket的通信,就是IO操作。输入、输出流(InputStream、OutputStream)用于读取或写入字节,如操作图片、视频等。Reader和Writer 则用于操作字符,增加了字符编码功能。本质上计算机操作都是字节,不管是网络或者文件,Reader和Writer等于构建了应用逻辑和原始数据的另一层通道。B...

2020-04-08 11:22:22 182

原创 jvm误区--动态对象年龄判定和分配担保机制

学习jvm的人,基本都阅读过上面这段话,这里讲的是动态年龄的判定。对于动态的判定的条件就是相同年龄所有对象大小的总和大于Survivor空间的一半,然后算出的年龄要和MaxTenuringThreshold的值进行比较,以此保证MaxTenuringThreshold设置太大(默认15),导致对象无法晋升。问题的提出场景假设如果说非得相同年龄所有对象大小总和大于Survivo...

2020-04-07 20:41:28 1951

原创 HashMap,Hashtable,ConcurrentHashMap 原理区别 以及ArrayList 和 Vector区别 fail-fast、fail-safe

jdk1.8发生了一些改变,请参看最新版:http://yuanrengu.com/2020/ba184259.html如果你去面试,面试官不问你这个问题,你来找我^_^下面直接来干货,先说这三个Map的区别:HashTable底层数组+链表实现,无论key还是value都不能为null,线程安全,实现线程安全的方式是在修改数据时锁住整个HashTable,效率低,Concurre...

2020-04-06 09:51:13 344

原创 HashMap底层实现原理及面试问题

参考视屏链接:https://www.bilibili.com/video/BV1kJ411C7hC?t=5804HashMap是基于Map接口的实现,采用key-value形式存储,在项目开发中,这种容器使用是非常广泛的,本文主要就是对HashMap的底层原理做个剖析,首先对比HashMap与HashTable的区别,然后以jdk1.7为例介绍HashMap的实现,再介绍jdk1.8做的改动...

2020-04-06 09:40:14 241

原创 红黑树原理

首先,在阅读文章之前,我希望读者对二叉树有一定的了解,因为红黑树的本质就是一颗二叉树。所以本篇博客中不在将二叉树的增删查的基本操作了,需要了解的同学可以到我之前写的一篇关于二叉树基本操作的博客:https://www.cnblogs.com/rainple/p/9970760.html;有随机数节点组成的二叉树的平均高度为logn,所以正常情况下二叉树查找的时间复杂度为O(logn)。但是,根...

2020-04-06 09:11:41 290

原创 ThreadPoolExecutor简述

线程池优点1线程的复用减少了创建和销毁对系统资源的开销2没有了现用现创建过程的过程,增加了线程的执行响应速度3方便线程的统筹管理threadpoolexcutor参数含义流程核心线程数阻塞队列长度最大线程数非核心线程闲置时间上个参数的时间单位超出最大线程数➕阻塞队列时的任务执行方式流程先核心,上一步满再进阻塞,上一步满再开启非核心线程,上一步满执行超出逻辑...

2020-03-31 09:18:55 270

转载 Lua脚本在redis分布式锁场景的运用

redis分布式锁,Lua,Lua脚本,lua redis,redis lua 分布式锁,redis setnx ,redis分布式锁, Lua脚本在redis分布式锁场景的运用。目录锁和分布式锁 锁是什么? 为什么需要锁? Java中的锁 分布式锁 redis 如何实现加锁 锁超时 retry redis 如何释放锁 不该释放的锁 通过Lua脚...

2020-03-25 22:01:19 318

转载 分布式事务之Seata中间件原理及流程详细分析

在分布式系统中,分布式事务是一个必须要解决的问题,目前使用较多的是最终一致性方案。自年初阿里开源了Fescar(目前更名为Seata)后,该项目受到了极大的关注度。Seata以高性能和零侵入的方式为目标解决微服务领域的分布式事务难题,目前正处于快速迭代中,近期小目标是生产可用的Mysql版本。关于Seata的总体介绍,可以查看官方WIKI获得更多更全面的内容介绍。本文主要基于spring cl...

2020-03-25 21:58:20 742

原创 jvm垃圾回收之如何判定变量是否可以被回收-引用计数法,可达性分析法

从年轻代空间(包括 Eden 和 Survivor 区域)回收内存被称为 Minor GC。 Major GC 是清理永久代。Full GC 是清理整个堆空间—包括年轻代和永久代。引言JVM中的堆和方法区主要用来存放对象(方法区中也储存了一些静态变量和全局变量等信息),那么我们要使用GC算法对其进行回收时首先要考虑的就是该对象是否应该被回收。即判断该对象是否还有其他的引用或者关...

2020-03-24 21:17:07 258

原创 Runnable和Callable的区别

创建线程的四种方式Java多线程实现方式主要有四种:继承Thread类、实现Runnable接口、实现Callable接口通过FutureTask包装器来创建Thread线程、使用ExecutorService、Callable、Future实现有返回结果的多线程。其中前两种方式线程执行完后都没有返回值,后两种是带返回值的。Runnable和Callable的区别Runnable接口...

2020-03-23 10:56:01 764

原创 Java中的CAS及其实现原理

一、理解CAS什么是CAS?CAS:Compare and Swap,即比较再交换。jdk5增加了并发包java.util.concurrent.*,其下面的类使用CAS算法实现了区别于synchronouse同步锁的一种乐观锁。JDK 5之前Java语言是靠synchronized关键字保证同步的,这是一种独占锁,也是是悲观锁。CAS算法理解对CAS的理解,CAS是一种...

2020-03-23 09:02:01 1523

原创 Spring5.0.x源码调试环境搭建

一、实验环境1.jdk1.8.0_1712.gradle-5.3.1(Spring源码使用gradle构建的,关于gradle的安装和配置使用,请读者自行上网搜一下,这里不再赘述)3.IntelliJ IDEA 2019.24.Spring-5.0.x二、环境搭建1.进入到GitHub官网并搜索spirng,找到对应的spring-framework工程,点击链接进入,如下...

2020-03-09 10:10:07 918

原创 Java并发编程:JMM和volatile关键字

Java内存模型随着计算机的CPU的飞速发展,CPU的运算能力已经远远超出了从主内存(运行内存)中读取的数据的能力,为了解决这个问题,CPU厂商设计出了CPU内置高速缓存区。高速缓存区的加入使得CPU在运算的过程中直接从高速缓存区读取数据,在一定程度上解决了性能的问题。但也引起了另外一个问题,在CPU多核的情况下,每个处理器都有自己的缓存区,数据如何保持一致性。为了保证多核处理器的数据一致性,...

2020-03-03 12:21:09 188

原创 mysql数据脏读、幻读、可重复读

1、数据脏读事务a修改了某条数据,然后事务b读取了事务a修改的该条数据,然后事务a由于某些原因,事务a回滚了,这样事务b读到的数据就和回滚的数据不同了,这时事务b读取的数据就是脏数据。概况一句话就是一个事务读取了另一个事务未提交的数据。2、数据幻读事务a按一定条件读取了该表的一些数据,然后事务b想该表插入了一些满足事务a查询条件的数据,当事务a再次以相同条件查询数据时,会发现多出来一些数据...

2020-02-26 09:11:33 729

原创 电商商品先关表结构设计

一般是:一级分类,二级分类,三级分类,(为三级分类维护)商品属性,(为商品属性维护)属性值spu商品单位,指定三级分类sku库存单位,指定所属spu,绑定多个对应分类下的属性值一级分类表,二级分类表,三级分类表,商品属性表,属性值表,spu商品表,sku库存商品表,以及相关的关系表...

2020-01-22 14:00:07 487

原创 Idea中超实用的插件

学习使用一些插件,可以提高平常工作中的开发效率。对于我们开发人员很有帮助!插件安装IDEA里面,依次选择打开 File --> Settings --> Plugins,在Plugins里面可以搜索需要的插件,然后安装(安装完插件,一定要重启Idea,不然插件不生效)在这里插入图片描述Alibaba Java Coding Guidelines阿里巴巴代码规范检查插件功...

2020-01-21 08:23:08 4779

原创 利用ssh代理访问远程linux服务器上的服务(例如数据库)

在有些情况下我们想要访问的服务例如数据库,只能在linux服务器上才能访问,不对远程端开放,但是我们却有ssh登录到服务器的权限时,我们就能通过代理转发的方式在本地访问到其上的服务就拿访问数据库为例:使用的工具:BvSshClient-Inst.exe1.安装代理工具,一路next2.启动软件,在Login配置窗口下配置建立ssh连接信息:红框中选择password方式3....

2020-01-13 18:02:26 1817

转载 HBase之rowkey设计原则和方法

rowkey设计原则和方法rowkey设计首先应当遵循三大原则:rowkey长度原则rowkey是一个二进制码流,可以为任意字符串,最大长度为64kb,实际应用中一般为10-100bytes,它以byte[]形式保存,一般设定成定长。一般越短越好,不要超过16个字节,注意原因如下:1、目前操作系统都是64位系统,内存8字节对齐,控制在16字节,8字节的整数倍利用了操作系统的最佳特...

2020-01-10 15:52:34 291

原创 hive关联hbase

hdfs上hive关联hbase实际上是最终存到的位置是hbase所在的hdfs上的路径位置,无论是操作的hive的表还是hbase的表最终落盘都是到hbase的位置,所以只能对现有的hbase的表关联hive新表,而不能将现有的hive表关联到一个hbase新表;其实关联表的初衷就是通过hive为hbase中的数据进行分析计算,所以就是hive查询自己的hive表其实内部是转化为hb...

2020-01-08 22:34:28 249

原创 SpringBoot自带的Scheduled(并行执行配置)

1. 定时任务实现方式定时任务实现方式:Java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务。使用这种方式可以让你的程序按照某一个频度执行,但不能在指定时间运行。一般用的较少,这篇文章将不做详细介绍。 使用Quartz,这是一个功能比较强大的的调度器,可以让你的程序在指定时间执行,也可以按照某一个频度执行,配置起来稍显复杂,有空介...

2020-01-08 17:49:34 2334

原创 druid连接池的时候,报错误:java.sql.SQLException: sql injection violation, syntax error: syntax error, error

因为项目中使用的是Oracle数据库,由于用到了Oracle中的over开窗函数导致sql语法在过druid连接池的 wall 拦截器时被拦截报错:java.sql.SQLException: sql injection violation, syntax error: syntax error, error解决办法:1.优化你的SQL;2.关闭wall拦截器关闭wall拦截器:我没有...

2020-01-07 15:22:51 5866 1

转载 Spark Streaming实现实时流处理

Spark Streaming实现实时流处理一、Streaming与Flume的联调Spark 2.2.0 对应于 Flume 1.6.0两种模式:1. Flume-style push-based approach:Flume推送数据給StreamingStreaming的receiver作为Flume的Avro agentSpark w...

2019-12-30 18:47:53 645

原创 spark RDD&DataFrame&DataSet

RDD加每一列结构变为DataFrame,DataFrame添加每一行的类型变为DataSet装换方式如图

2019-12-26 15:57:53 92

原创 spring 开发 测试 线上环境切换以及动态配置方法

配合maven pom配置<profiles> <profile> <id>local</id> <properties> <profile.active>local</profile.active> </properties> ...

2019-12-20 17:25:07 498

原创 SpringBoot+baomidou配置多数据源

项目中用到了jeecg框架,但是新需求需要使用多数据源,了解到jeecg2.0使用的持久层框架式baomidou,学习了一下如何配置其相关的多数据源的配置方式如下:1.yml配置spring: datasource: dynamic: #默认就是master可以不指定 primary: master datasource: ...

2019-12-18 15:45:18 15928 1

原创 spark on yarn 为何只需一个spark客户端即可

搭建spark on yarn的集群框架时,我们只需要启动yarn集群和hdfs集群(hdfs作为数据存取介质),然后只需在某一个机器上安装spark客户端,进行spark任务的提交即可在yarn集群上以spark引擎计算任务;之前一直有个疑问就是yarn集群上的机器根本没安装spark为何能使用spark引擎呢?后来一点点的搜找资料,整理出了一点头绪。所谓的spark引擎其实无外乎就是一堆的...

2019-12-18 10:05:13 843

转载 SparkOnYarn环境搭建

hadoop版本: 2.8.0spark 版本: 2.2.0前提:hdfs的集群环境已经搭建完毕,这里不详表。集群环境:3台机器规模192.168.8.11hdp-01192.168.8.12hdp-02192.168.8.13hdp-03hdp-01上安装:NameNodeR...

2019-12-17 23:02:59 533

原创 Spark基于Yarn提交任务两种方式

yarn-client提交任务方式 客户端提交一个Application,在客户端启动一个Driver进程 Driver进程会向RS(ResourceManager)发送请求,启动AM(ApplicationMaster)的资源 RS收到请求,随机选择一台NM(NodeManager)启动AM。这里的NM相当于Standalone中的Worker节点 AM...

2019-12-17 16:18:08 183

转载 sql优化课程记录

1.MySQL版本: 5.x: 5.0-5.1:早期产品的延续,升级维护 5.4 - 5.x : MySQL整合了三方公司的新存储引擎 (推荐5.5) 安装:rpm -ivh rpm软件名 如果安装时 与某个软件 xxx冲突,则需要将冲突的软件卸载掉: yun -y remove xxx 安装时 有日志提示我们可以修改密...

2019-12-10 11:20:03 156

原创 了解mysql的BTree索引特性,进而知道了部分优化的原理

由第一个图(二叉树,可以想象为只有两个分支的Btree)可知索引创建后本生就排好序了,这个排序特性决定了等值查询或者非等值的查询可以快速定位数据范围位置,模糊搜索时的varchar类型的排序BTree索引,在like 'asd%'时也是能快速锁定范围的,但是如果%在前边例如:like '%asd' 是无法利用索引的下图是BTree树很多时候我们可能还会用到符合索引,使用时要注意满足...

2019-12-06 17:38:07 278 1

原创 MySQL开启慢查询

MySQL慢查询—开启慢查询一、简介开启慢查询日志,可以让MySQL记录下查询超过指定时间的语句,通过定位分析性能的瓶颈,才能更好的优化数据库系统的性能。二、参数说明slow_query_log 慢查询开启状态slow_query_log_file 慢查询日志存放的位置(这个目录需要MySQL的运行帐号的可写权限,一般设置为MySQL的数据存放目录)long_query_tim...

2019-12-06 11:48:15 146

原创 jvm配置调优总结

先简单的说一下,jvm的调优主要针对的是堆内存的调优和相应的gc垃圾回收机制调优,新生代:Eden区(一般新来的变量都会存往Eden区,如果是个占大量内存的变量会直接存往老年代)+两个Survivor区(每次Eden区满之后开始回收,回收方式是将Eden+某个Survivor区中的存活内存值刷新到另一个Survivor中【stop-copy机制】,以此类推,如果在此过程中某些内存经过了数次还活着,...

2019-12-06 10:21:22 224

空空如也

空空如也

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

TA关注的人

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