- 博客(75)
- 收藏
- 关注
原创 真实项目中,由于内存泄漏(OOM),导致1W多次full gc,最终项目宕机
真实项目中,由于内存泄漏(OOM),导致1W多次full gc,最终项目宕机
2024-02-27 16:04:07
513
原创 Git常用命令总结与实践
1.创建文件夹mkdir learngit2.初始化learngit变为仓库git init3.把文件添加到仓库git add reademe.txt 或者添加所有 git add .4.提交到仓库git commit -m "xxx"5.配置用户名和e-mail地址(提交的时候要用到)git config --global user.name "XXX"git config --global user.email XXX6.查看用户名和邮箱git config user
2022-02-13 22:18:59
467
原创 大量NullPointExcepiton导致老年代被打满,引起巨量Full GC使应用程序停止
一、前言我们线上有个应用程序,大约每隔一个星期左右就会出现假死现象,也就是进程在,但是实际程序已经挂掉了,开始排查没有发现什么问题,然后就写了一个每周重启进程的脚本,定时重启进程,好了一段时间。大约在一周前,发现重启脚本也不好使了,每次重启后,大约不到十五分钟进程就会挂掉,意识到问题的严重性了,故开始以下的排查:二、正文1、首先通过jmap命令看下堆中各个区域信息是否正常,命令如下:jmap -heap pid结果如下:我去,这年轻代、老年代和永久代都已经炸了。。。我首先想到的是永久代空间
2021-12-03 10:35:00
1051
原创 MySQL存储引擎不能使用索引中范围条件右边的列
一、前言对于range查询,在一条组合索引里面,range字段后面的列是不生效的,不会使用索引,range列自身仍是生效的。二、正文(1)首先建立一个学生表:(2)建立一个联合索引(name,age,class_id)测试Case1:只有 name 且是等于explain select * from student where name = 'Mitsunari' 结果如下:注意:ken_len字段长度和ref字段使用了索引中的第一列,也就是name。Case2:name和ag
2021-10-29 16:30:52
1593
原创 Mysql之Using filesort优化
一、前言在使用 explain 命令优化SQL语句的时候常常会在Extra列的描述中发现 Using filesort 选项,其实这个名字很容易造成误解,一开始我以为是“文件排序”的意思,进一步说可能就是使用了磁盘空间来进行排序,但是这个理解是错误的,Using filesort 真正含义其实只有 sort 这一个单词,和 file 没有什么关系,仅仅表示没有使用索引的排序。filesort使用的算法是QuickSort,即对需要排序的记录生成元数据进行分块排序,然后再使用mergesort方法合并块。其
2021-10-29 10:14:55
7680
1
原创 String值为什么不能被修改以及对StringBuff和StringBuilder的理解
一、String值为什么不能被修改1.1、首先我们来看个例子:public class testString { public static void main(String[] args) { String str = "abc"; str = "123"; System.out.println(str); }}看到上面的例子,你们会认为str的值改变了啊,从“abc”变为“123”了啊。表面上看确实是这个样子的,但让我们来看下在
2021-10-24 10:02:34
1482
2
原创 ArrayList源码解析
一、前言ArrayList我们在实际开发中是一个很常用的数据结构,可以称它为动态数组。我们平常用的这个形式的:int[] a = new int[size]称为普通数组,在new时候需要指定其大小(size),不能够动态的增加其大小,那么接下来我们来看看ArrayList为什么称之为动态数组。二、正文1.ArrayList有用过嘛?它是一个什么东西?用来干什么的?有用过,ArrayList就是数组列表,主要用来装载数据,当我们装载的是基本类型的数据int、long、boolean、short、b
2021-07-11 20:07:23
227
1
原创 Redis集群的三种模式
一、前言在实际生产中,如果 redis 只部署一个节点,当机器故障时,整个服务都不能提供服务了。这就是我们常说的单点故障。如果 redis 部署了多台,当一台或几台故障时,整个系统依然可以对外提供服务,这样就提高了服务的可用性。今天我们就聊聊 redis 高可用的三种模式:主从模式,哨兵模式,集群模式。二、正文1.主从复制模式主从复制的作用通过持久化功能,Redis保证了即使在服务器重启的情况下也不会丢失(或少量丢失)数据,因为持久化会把内存中数据保存到硬盘上,重启会从硬盘上加载数据。 但
2021-07-11 19:57:07
575
原创 Redis基础及其高级用法
一、前言传统的关系型数据库如Mysql、Oracle等已经不能适用所有的场景了,比如秒杀的库存扣减,APP首页的访问流量高峰等等,都很容易把数据库打崩,所以引入了缓存中间件,目前市面上比较常用的缓存中间件有Redis和Memcached,当然还有基于内存的缓存,比如Ehcache 。下面先讲一下上面三种缓存区别已经优缺点。二、正文缓存是高并发场景下提高热点数据访问性能的一个有效手段,在开发项目时会经常使用到。1.缓存类型有哪些?缓存的类型分为:本地缓存、分布式缓存和多级缓存。本地缓存:本
2021-07-11 16:02:38
597
1
原创 Mysql数据库事务
一、前言MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说:银行系统,一个人转钱给另外一个人,这个过程应该放到一个事务中,不能因为其中一个环节失败,而导致钱的丢失,要么全部成功,要么全部失败。下面带大家了解下数据库事务的特点、事务的隔离级别以及并发事务所带来的问题等等。二、正文1.事务的四个特性?从业务角度出发,对数据库的一组操作要求保持4个特征:Atomicity(原子性):一个事务必须被视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么全部失败回滚,对
2021-07-10 20:00:24
340
原创 MVCC详解
多版本并发控制(MultiVersion Concurrency Control,简称 MVCC )详解一、前言全称Multi-Version Concurrency Control,即多版本并发控制,主要是为了提高数据库的并发性能。以下文章都是围绕InnoDB引擎来讲,因为myIsam不支持事务。同一行数据平时发生读写请求时,会上锁阻塞住。但mvcc用更好的方式去处理读—写请求,做到在发生读—写请求冲突时不用加锁。这个读是指的快照读,而不是当前读,当前读是一种加锁操作,是悲观锁。那它是怎么做到读
2021-07-09 17:02:01
23362
16
原创 Mysql数据库优化
一、前言在Mysql数据库索引详解章节中,我们介绍了数据库索引结构和各种索引的概念及其作用。我们知道,对数据库优化可以加索引,但是我们怎么知道加了是什么索引呢?就是说,具体这条sql走的是哪个索引呢?这就需要我们运行执行计划—explain ,通过执行计划来看是否按照我们的意愿走了对的索引,还是走的全表扫描,而且还需要先排除缓存的干扰,还有就是哪些情况会导致索引失效等等。下面先带大家了解下数据库缓存的知识点。二、正文1.Mysql基础架构数据库调优其实一般情况都是我们的SQL调优,SQL的调优
2021-07-07 20:54:06
403
3
原创 Mysql数据库索引详解
一、前言随着我们业务量不断的增大,会发现查询数据库的时间变的越来越长,其实就是数据库到达了性能的瓶颈,这时候需要我们对其进行优化操作,可能我们第一时间就会想到:加索引。没错,这是优化的一个方向,但是我们不能只知道加索引,还应该知道索引都有哪些类型啊,索引是怎样的一种结构啊,聚合索引和非聚合索引的区别啊等等一系列相关的问题。下面我就来分别介绍下这些知识点二、正文1.Mysql索引都有哪几种类型,分别有什么特点?主要有两种类型:哈希索引B+ Tree索引哈希索引:哈希索引能以 O(1)
2021-07-06 17:19:14
2814
4
原创 Java线程间的协作以及创建线程的四种方式
一、前言线程间的协作方法主要有:wait、notify、notifyAll、sleep、yield、join,本文首先介绍下线程的状态有哪些,然后解释下各个方法的含义以及作用,最后从底层原理解释下它们之间的区别。二、正文1.线程的状态Java中线程中状态可分为六种:初始(NEW):新创建了一个线程对象,但还没有调用start()方法。运行(RUNNABLE):Java线程中将就绪(ready)和运行中(running)两种状态笼统的称为“运行”。线程对象创建后,其他线程(比如mai
2021-05-30 17:25:33
332
原创 Java线程池详解
前言线程池(Thread Pool)是一种基于池化思想管理线程的工具,经常出现在多线程服务器中,如MySQL。线程过多会带来额外的开销,其中包括创建销毁线程的开销、调度线程的开销等等,同时也降低了计算机的整体性能。线程池维护多个线程,等待监督管理者分配可并发执行的任务。这种做法,一方面避免了处理任务时创建销毁线程开销的代价,另一方面避免了线程数量膨胀导致的过分调度问题,保证了对内核的充分利用。而本文描述线程池是JDK中提供的ThreadPoolExecutor类。当然,使用线程池可以带来一系列好处:
2021-05-30 17:12:14
675
原创 CountDownLatch-CyclicBarrier-Semaphore解析
一、前言CountDownLatch、CyclicBarrier、Semaphore是JUC包下常用的同步锁,其中CountDownLatch、Semaphore是基于AQS(AbstractQueuedSynchronizer)实现的共享锁。下面来看下这三个锁的具体区别。二、正文1.CountDownLatch解析先看下官方源码解释:A synchronization aid that allows one or more threads to wait until a set of op
2021-05-30 16:58:07
227
原创 AQS-ReentrantLock解析
前言AQS( AbstractQueuedSynchronizer )是一个用来构建锁和同步器(所谓同步,是指线程之间的通信、协作)的框架,Lock 包中的各种锁(如常见的 ReentrantLock, ReadWriteLock), concurrent 包中的各种同步器(如 CountDownLatch, Semaphore, CyclicBarrier)都是基于 AQS 来构建,所以理解 AQS 的实现原理至关重要,AQS 也是面试中区分侯选人的常见考点。正文1.AQS实现原理AQS 全称
2021-05-30 16:41:39
176
原创 ThreadLocal源码解析
前言ThreadLocal提供了线程的本地实例,它与普通变量的区别在于,每个使用该变量的线程都会初始化一个完全独立的实例副本。主要的作用是做数据隔离,填充的数据只属于当前线程,变量的数据对别的线程而言是相对隔离的。总的来说,ThreadLocal适用于每个线程需要自己独立的实例且该实例需要在多个方法中被使用,也即变量在线程间隔离而在方法或类间共享的场景。正文1.ThreadLocal底层原理?首先我先说下它的使用:ThreadLocal<String> localName =
2021-05-30 16:34:06
390
原创 Synchronized应用及其底层原理解析
一、前言在涉及到多线程同步的问题时,可能第一时间会想到用Synchronized,在jdk1.6以前Synchronized属于重量锁,就是同一时间只允许一个线程获取锁,其他线程都要阻塞等待,但这对于多线程效率问题有很大影响。在jdk1.6之后,Java团队对Synchronized做了优化,进行了锁升级,升级方向:无锁—>偏向锁—>轻量级锁—>重量级锁。下面我们来详细解析下Synchronized的使用和源码。二、正文1.Synchronized的使用场景?Synchron
2021-05-27 22:29:48
378
2
原创 Volatile应用及其底层原理解析
Volatile应用及其底层原理解析前言Volatile在面试的时候算是多线程篇必问的一个问题了,我们先通过几个栗子,看看得到的结果是不是我们想像的一样,然后在引出Volatile,以及其作用。正文我们先来看一个栗子:public class volatileDemo { public static void main(String[] args) { Jason jason = new Jason(); jason.start(); for
2021-05-26 21:38:04
392
3
原创 ConcurrentHashMap源码详解
ConcurrentHashMap源码详解一、前言在HashMap源码解析篇中,我们对HashMap源码部分进行了详细透彻的分析,提出了连环追命16连问,算是把HashMap所涉及到的知识点在源码层面都分析完了。但是HashMap在多线程环境下有线程安全的问题,这篇文章,我们讲下有什么集合可以保证在多线程的环境中线程安全。二、正文1.HashMap在多线程环境中存在线程安全的问题,那应该如何处理呢?通常我们会有三方替代方式:使用Collections.synchronizedMap(Map
2021-05-25 21:40:17
979
23
原创 HashMap源码解析
一、前言HashMap这个数据结构,不管是在实际应用中还是面试中,都是很重要的知识点。例如:在实际应用中,我们需要在O(1)时间内查找到相关的元素,假如遍历数据找其相关元素,那时间复杂度就是O(n)了,不符合我们需要在O(1)时间复杂度里找到其元素,这时我们就想到用HashMap这个数据结构来进行查找,通过匹配key和value值,可以在O(1)时间内快速找到。再比如,在面试中,面试官对HashMap底层原理会进行全方位的考察,如:HashMap 1.7,1.8底层原理有什么区别?扩容机制?线程是否安全?
2021-05-24 19:23:40
271
4
原创 Java数据结构之Deque(双端队列)
一、Queue和Deque异同介绍我们知道,Queue是队列,只能一头进,另一头出。如果把条件放松一下,允许两头都进,两头都出,这种队列叫双端队列(Double Ended Queue),学名Deque。Java集合提供了接口Deque来实现一个双端队列,它的功能是:既可以添加到队尾,也可以添加到队首;既可以从队首获取,又可以从队尾获取。首先我们比较下Queue和Deque出队和入队的方法:QueueDeque添加元素到队尾add(E e) / offer(E e)
2021-02-28 17:23:24
34666
1
原创 SQL state [nu11];error code [17410]: 无法从套接字读取更多的数据(Oracle dblink相关的错误)
下图是我工作时,现网出现的错误:就是在我在查询一个数据库的时候出现个一个错误 “无法从套接字读取更多的数据”,其含义就是和数据库的连接中断。但是要注意我这个用的是oracle 的dblink,也就是访问另外一个数据库,而不是访问自己的数据库。(1)先说一个不用dblink时,出现错误的原因,可能是的jdbc连接池配置的有问题,具体配置如下:正常情况下,只要配置没问题是不会出现这个错误的。其中 testOnBorrow=false,这个选项意思是:不检测池里连接的可用性。当时把这个选项设置为tru
2020-10-24 15:38:56
5798
原创 redis缓存雪崩、击穿、穿透详解及其应对办法
redis作为高并发的基石,在各大互联网存储技术中拥有广泛的应用。而缓存雪崩、击穿、穿透这三个概念也许我们都听说过,但这三个概念具体含义及其却别是什么呢?让我们一起来揭开他们的神秘面纱。一、缓存雪崩1、概念目前电商的首页以及热点数据都会做缓存,一般缓存都是定时任务去刷新,或者查不到后去更新,定时刷新就会存在一个问题:比如:如果所有首页key的失效时间是12小时,中午12点刷新,零点秒杀活动有大量的用户涌入,假设每秒6000个请求,本地缓存能抗住每秒5000个请求,但是所有的key都失效了,每秒400
2020-10-12 17:17:51
832
原创 java更加优雅并且主动控制线程中断
一、stop()方法说到中断线程,我们首先会想到用stop()方法,但是这个方法已经被官方废弃了,下面是官方的解释:《Why are Thread.stop, Thread.suspend and Thread.resume Deprecated?》为什么弃用stop:调用 stop() 方法会立刻停止 run() 方法中剩余的全部工作,包括在 catch 或 finally 语句中的,并抛出ThreadDeath异常(通常情况下此异常不需要显示的捕获),因此可能会导致一些清理性的工作的得不到完成
2020-09-22 23:32:20
870
原创 AMQP(RabbitMQ) Could not deserialize object, ClassNotFoundException,及其衍生出的问题
AMQP(RabbitMQ) Could not deserialize object, ClassNotFoundException,及其衍生出的问题场景是:一个应用把封装的对象发送到mq队列,另一个应用监听这个队列,拿到对象进行入库操作,过程很简单,但是在构建的过程中出现了如下的错误。大概的意思就是在这个路径下没有找到这个model(红框部分)。 图1引用stackoverflow中的回答::https://stackoverflow.com/questions/38300784/amqpr
2020-09-21 21:06:35
1508
1
原创 mina框架详解(二)
上一章我们讲解了mina框架的基础部分(mina框架详解(一)),包括:mina的整体结构、TCP的主要接口、日志配置等。这一章讲解mina框架的过滤器。1.过滤器 前面我们看到了LoggingFilter、ProtocolCodecFilter 两个过滤器,一个负责日志输出,一个负责数据的编解码,通过最前面的Mina 执行流程图,在IoProcessor 与IoHandler 之间可以有...
2020-04-06 10:32:48
693
原创 mina框架详解(一)
mina框架详解 Apache Mina Server 是一个网络通信应用框架,也就是说,它主要是对基于TCP/IP、UDP/IP协议栈的通信框架(当然,也可以提供JAVA 对象的序列化服务、虚拟机管道通信服务等),Mina 可以帮助我们快速开发高性能、高扩展性的网络通信应用,Mina 提供了事件驱动、异步(Mina 的异步IO 默认使用的是JAVA NIO 作为底层支持)操作的编程模型。M...
2020-03-18 23:22:00
2159
原创 QT随笔记录
1.QByteArray类 提供一个字节数组,QByteArray可用于存储原始字节(包括“\ 0” )和传统的8位 “\ 0” 端接字符串 . 使用QByteArray比使用const char *更方便.除了QByteArray之外,Qt还提供了QString类来存储字符串数据。对于大多数用途,QString是您要使用的类。它存储16位Unicode字符,使您可以轻松地在应用程序中存储非...
2018-08-13 14:33:07
432
原创 vs2015 使用Qt语言家及其使用过程中遇到的问题
1.首先点击Qt VS Tools中的 create new translator file如下所示: 2.然后更改Filename的名字,比如release_zh.ts,这是中文的,release_en.ts,这是英文的 3. (1)在代码中加载上面两个.ts文件 我这个demo中是用了一个comboBox实现的中英文切换,也即使ui.comboBox。这是绑定信号槽conn...
2018-07-19 16:36:28
3753
1
转载 机器学习随笔五—十大经典算法—KNN (K最近邻)
1. K-近邻算法原理K最近邻(kNN,k-NearestNeighbor)分类算法,见名思意:找到最近的k个邻居(样本),在前k个样本中选择频率最高的类别作为预测类别,什么?怎么那么拗口,没图说个JB,下面举个例子,图解一下大家就会显而易见了,如下图: 我们的目的是要预测某个学生在数学课上的成绩。。。 先来说明几个基本概念:图中每个点代表一个样本(在这里是指一个学生),横纵坐标代表...
2018-04-21 15:51:34
831
转载 机器学习随笔四—谱聚类(spectral clustering)原理总结
谱聚类(spectral clustering)是广泛使用的聚类算法,比起传统的K-Means算法,谱聚类对数据分布的适应性更强,聚类效果也很优秀,同时聚类的计算量也小很多,更加难能可贵的是实现起来也不复杂。在处理实际的聚类问题时,个人认为谱聚类是应该首先考虑的几种算法之一。下面我们就对谱聚类的算法原理做一个总结。1. 谱聚类概述谱聚类是从图论中演化出来的算法,后来在聚类中得到了广泛的...
2018-04-21 15:08:21
4117
转载 机器学习随笔三—再生核Hilbert空间
我们做的非线性映射 ,它将原始特征空间中的数据点映射到另一个高维空间中,之前我们没有提过,其实这个高维空间在这里有一个华丽的名字——“再生核希尔伯特空间 (Reproducing Kernel Hilbert Space, RKHS)”。“再生核”就是指的我们用于计算内积的核函数,再说“再生”之前,我们先来简单地介绍一下 Hilbert Space ,它其实是欧氏空间的一个推广。首先从基本的向量空
2018-04-21 13:54:33
2630
转载 机器学习随笔二——核函数
1. 核函数Kernel1.1 特征空间的隐式映射:核函数事实上,大部分时候数据并不是线性可分的,这个时候满足这样条件的超平面就根本不存在。对于非线性的情况,SVM 的处理方法是选择一个核函数 κ(⋅,⋅) ,通过将数据映射到高维空间,来解决在原始空间中线性不可分的问题。具体来说,在线性不可分的情况下,支持向量机首先在低维空间中完成计算,然后通过核函数将输入空间映射到高维特征空间,...
2018-04-21 13:25:29
1084
原创 机器学习随笔一
1. 半正定矩阵半正定与正定矩阵同意用半正定矩阵来事例: 首先半正定矩阵定义为: 其中X 是向量,M 是变换矩阵 我们换一个思路看这个问题,矩阵变换中,MX代表对向量 X进行变换,我们假设变换后的向量为Y,记做Y=MX。于是半正定矩阵可以写成: 这个是不是很熟悉呢? 他是两个向量的内积。 同时我们也有公式: ||X||, ||Y||代表向量 X,Y的长度,\theta是他们之间...
2018-04-17 15:28:12
684
1
原创 Win10下MongoDB安装和配置
MongoDB的安装下载地址:https://www.mongodb.com/download-center#community下载后,我们点击mongodb-win32-x86_64-2008plus-ssl-3.6.2-signed.msi(为2018.1.25更新的最新版本)进入安装安装过程(这里不做图解): next ——> custom ——> 选择你的安装目录,新建一个目录,最好配置为
2018-01-25 13:50:46
3297
原创 web项目的构建流程及webpack3.10.0的使用
项目准备工具: (1)NodeJs版本是V4.4.7,作为使用webpack的运行环境. (2)Git我是用的windows下的Git,以后的项目是在Git Brash Here界面进行的操作.Git远程仓库的建立 如果你是从头开始一个新项目的话在Github建立远程仓库在本地新建项目的结构git初始化git init与远程库建立关联 //在Github上添加了你的主机公钥 git
2017-12-18 21:54:43
1661
转载 Ubuntu 登录后图形化界面蓝屏问题
Ubuntu 版本:16.04 64bit启动 Ubuntu 可以进入登录界面,说明系统是可以运行起来的。没有发生大块的核心数据损坏,linux 系统一般都可以修复,一定要淡定。问题是之前的暴力关机损坏了 Ubuntu 的图形系统配置,导致图形界面无法正常起来。所以就看到能够登录,却只有一片蓝色。问题解决这次要求助古老的字符界面了。为了“大展拳脚”,先
2017-11-19 13:45:53
6498
5
转载 C/C++ 关于数组的指针和数组元素首地址的一道经典题
#include int main(void) { int a[5] = {1, 2, 3, 4, 5}; int *ptr = (int *)(&a+1); int *p1 = a; int *p2 = &a[0]; int *p3 = (int *)(&a); if(p1 == p2){
2017-09-22 22:03:09
1255
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人