自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(21)
  • 收藏
  • 关注

原创 那些场景产生OOM?怎么解决?

1、堆内存溢出堆内存用来存储对象实例,只要不停的创建对象,并且保证GC Roots和对象之间有可达路径避免垃圾回收,那么在对象数量超过最大堆的大小限制后很快就能出现这个异常。2、方法区和元空间溢出方法区和堆一样,是线程共享的区域,包含class文件信息、运行时常量池、常量池。不一定非要是class文件中的常量池中的内容才能进入运行时常量池,运行期间也可以将新的常量放入池中,比如String的intern()方法。intern()本身是一个native方法,它的作用是:如果字符串常量池中已经包含一个等

2020-09-26 19:53:47 317

转载 分布式之坑

分布式的理解是一种工作方式若干独立计算机的集合,这些计算机对于用户来说就像单个相关系统将不同的业务分不到不同的地方分布式的优势宏观层面:使得多个模块糅合在一起的系统进行服务拆分,解耦服务间的调用。微观层面:将模块提供的服务分布到不同的机器或容器中,扩大服务力度。分布式的问题使得成本增加多服务间链路变长,开发排查难度加大环境高可靠性问题数据幂等性问题数据的顺序问题1、分布式的基础1.1 CAP定理一致性(consistency):在分布式系统的所有数据备份,在同一

2020-09-26 18:50:43 112

原创 CAS机制的ABA问题及解决

1、什么是ABA问题ABA问题:就是说一个线程把数据A变成了B,然后又重新变成了A。此时另一个线程读取的时候发现A没有变化,就误以为还是原来的A。一个ABA例子public class testABA { private static AtomicInteger index=new AtomicInteger(10); public static void main(String[] args) { new Thread(()->{ ind

2020-09-26 16:55:14 215

原创 数据库高并发的处理方法

1、增加缓存在web层和db层之间加一层缓存。减少数据库读取负担,提高数据读取速度。2、业务拆分分库:以电商平台为例,包含了用户、商品、评价、订单等几大模块,最简单的是在一个数据库中创建四张表。随着业务规模的增大,需要对业务进行拆分。每个表都使用单独的数据库进行存储,将原本对一个数据库的依赖拆分成对4个数据库同时承担压力,提高系统吞吐量。3、Mysql主从复制、读写分离当数据库的写压力增加,cache只能缓解数据库的读取压力。使用主从复制技术达到读写分离,以提高读写性能和读库的可扩展性。读写

2020-09-23 12:31:07 9162

原创 JDK8的lambda、Stream

https://www.zhihu.com/question/20125256/answer/324121308https://zhuanlan.zhihu.com/p/200709900https://zhuanlan.zhihu.com/p/1965575681、Lambda1.1 简介对于一个Java变量,我们可以赋给其一个“值”。如果你想把“一块代码”赋给一个Java变量,应该怎么做呢?比如,我想把右边那块代码,赋给一个叫做aBlockOfCode的Java变量:在Java 8之

2020-09-20 16:28:00 92

转载 Redis缓存穿透、缓存击穿、缓存雪崩

1、缓存穿透查询一个数据库一定不存在的数据。解决方法1、布隆过滤器布隆过滤器是一个bit向量或者bit。对于一个key,我们要映射到布隆过滤器,使用多个不同的哈希函数生成多个哈希值,并把每个生成的哈希值指向的bit设置为1。原理:当查询时,把key使用不同的哈希函数进行计算,若对应的bit均为1,则布隆过滤器判断该key存在。从上图可以看到,不同的词对应的bit位置可能相同,当词比较多的时候,可能大部分bit位置都是1。布隆过滤器判断不存在的词一定不存在,判断存在的可能不存在。2、缓存空

2020-09-20 13:59:03 129

原创 随机打乱数组顺序代码测试

给定一个数组,需要打乱其顺序,保证每个元素在任意位置出现的概率相等?对于A[i],i=0,1,2,…N,随机在数组A[i,i+1,…N]中挑选一个数字交换到A[i]。证明算法随机,只需证明每个数字分配到每个位置的概率是相等的。易得,数组0-N位置的任意一个数字到位置0的概率都是1/n;到位置1的概率是(1-1/n)*(1/(n-1))=1/n解释:P(到位置1)=P(第一次调用随机算法的时候没交换到位置0)P(第二次到位置1|第一次调用随机算法的时候没交换到位置0)到位置2的概率是(1-1/n)

2020-09-20 10:56:28 493

转载 设计模式2:单例模式

1、version1class Singleton1{ private Singleton1() { } private static Singleton1 instance=null; public static Singleton1 getInstance(){ if(instance==null) instance=new Singleton1(); return instance; }}一个类只能创建

2020-09-17 18:02:30 95

原创 设计模式1:工厂模式

0 序言当创建对象需要一系列复杂的初始化操作如关联其他成员对象、查配置文件、查数据库表的时候,把这些功能放在构造函数就不太合适了。这时候就需要使用工厂帮助我们创建对象。1、简单工厂模式有唯一的工厂类,工厂类的创建方法根据传入的参数做if-else判断,决定最终创建什么样的对象。interface Mask{ void showMask();}class LowEndMask implements Mask{ @Override public void showMask(

2020-09-17 16:54:55 84

转载 操作系统:调度算法

1、进程调度算法又叫做CPU调度算法。当CPU空闲时,操作系统就选择内存的某个就绪状态的进程将其分配给CPU。发生CPU调度的情况:运行态到等待状态。运行态到就绪状态等待状态到就绪状态运行状态到终止态。非抢占式调度:当进程正在运行时,它就会一直运行,直到该进程完成或发生某个事件而被阻塞时,才会把 CPU 让给其他进程。如1和4抢占式调度:进程正在运行的时,可以被打断,使其把 CPU 让给其他进程,如2和3。抢占的原则有时间片原则、优先权原则、短作业优先原则。第三种情况发生CPU调.

2020-09-17 13:45:32 1254

原创 count(1)、count(*)、count(column)

有where条件的count,会根据扫码结果count一下所有的行数,其性能更依赖于where条件,所以仅仅针对没有where的情况进行说明;Myisam会把一个表的总行数记录下来,在执行count(*)时直接返回数量执行效率很高。InnoDB 因为增加了版本控制(MVCC)的原因,同时有多个事务访问数据并且有更新操作的时候,每个事务需要维护自己的可见性,那么每个事务查询到的行数也是不同的,所以不能缓存具体的行数,他每次都需要 count 一下所有的行数。在InnoDB下,COUNT(1)和COU

2020-09-17 12:08:24 379

原创 自旋锁和互斥锁的区别

序言最底层的两种锁实现就是互斥锁和自旋锁,许多高级的锁都是基于他们实现的。加锁的目的是保证共享资源在任意时间内,只有一个线程访问,这样就可以避免多线程导致共享数据错乱的问题。当有一个线程加锁成功后,其他线程就会加锁失败。1、互斥锁互斥锁是一种独占锁,当线程A加锁成功后,此时互斥锁已经被线程A独占了,只要线程A没有释放手中的锁,线程B就会失败,就会释放掉CPU给其他线程,线程B加锁的代码就会被阻塞。互斥锁加锁失败而阻塞是由操作系统内核实现的,当加锁失败后,内核将线程置为睡眠状态,等

2020-09-17 08:28:10 12357

原创 java并发题

先凑合看吧,等我有时间再画个。。。1、Java的四种线程池newSingleThreadExecutor通俗:创建只有一个线程的线程池,且线程的存活时间是无限的;当该线程正繁忙时,对于新任务会进入阻塞队列中(无界的阻塞队列)适用:一个任务一个任务执行的场景public static ExecutorService newSingleThreadExecutor() { return new FinalizableDelegatedExecutorService .

2020-09-08 09:20:41 131

原创 Java内存泄漏的情况

静态集合类  如HashMap、LinkedList等等。如果这些容器为静态的,那么它们的生命周期与程序一致,则容器中的对象在程序结束之前将不能被释放,从而造成内存泄漏。简单而言,长生命周期的对象持有短生命周期对象的引用,尽管短生命周期的对象不再使用,但是因为长生命周期对象持有它的引用而导致不能被回收各种连接,数据库连接、网络连接、IO连接  在对数据库进行操作的过程中,首先需要建立与数据库的连接,当不再使用时,需要调用close方法来释放与数据库的连接。只有连接被关闭后,垃圾回收器才会回收对应的对象

2020-09-06 22:32:03 107

原创 数据库连接池

什么是连接池数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个。连接池好处不使用连接池不使用数据库连接池的步骤:TCP建立连接的三次握手MySQL认证的三次握手真正的SQL执行MySQL的关闭TCP的四次握手关闭可以看到,为了执行一条SQL,却多了非常多我们不关心的网络交互。网络IO较多数据库的负载较高响应时间较长及QPS较低应用频繁的创建连接和关闭连接,导致临时对象较多,GC频繁在关闭连接后,会出现大量TIME_

2020-09-06 21:52:41 134

转载 深入理解内部类

# 1、内部类初探内部类是指在一个外部类的内部再定义一个类。内部类作为外部类的一个成员,并且依附于外部类而存在的。内部类可为静态,可用protected和private修饰(而外部类只能使用public和缺省的包访问权限)。内部类主要有以下几类:成员内部类、局部内部类、静态内部类、匿名内部类。(1)内部类仍然是一个独立的类,在编译之后内部类会被编译成独立的.class文件,但是前面冠以外部类的类名和$符号 。(2)内部类不能用普通的方式访问。(3)内部类声明成静态的,就不能随便的访问外部类的成员变

2020-09-06 20:55:15 240

原创 sleep和wait和yield

1、sleep()  sleep()方法需要指定等待的时间,它可以让当前正在执行的线程在指定的时间内暂停执行,进入阻塞状态,该方法既可以让其他同优先级或者高优先级的线程得到执行的机会,也可以让低优先级的线程得到执行机会。但是sleep()方法不会释放“锁标志”,也就是说如果有synchronized同步块,其他线程仍然不能访问共享数据。2、wait()  wait()方法需要和notify()及notifyAll()两个方法一起介绍,这三个方法用于协调多个线程对共享数据的存取,所以必须在synchro

2020-09-06 18:29:32 227

原创 Java的CopyOnWrite机制

序言  Copy-on-write简称COW,是一种延时懒惰策略。当我们王一个容器添加元素时,不直接往当前容器添加,而是将当前容器copy,复制出一个新的容器,在新容器中添加元素,添加之后,将原容器堆得引用指向新的容器。  这样就可以对CopyOnWrite容器进行并发的读,而不需要加锁。CopyOnWrite也是一种读写分离的思想,读和写使用不同的容器。  Java并发包里提供了两个使用CopyOnWrite机制实现的并发容器,CopyOnWriteArrayList 、CopyOnWriteArr

2020-09-06 10:36:36 693

转载 kafka基本概念

参考:https://www.cnblogs.com/sujing/p/10960832.htmlhttps://www.cnblogs.com/terry-love/p/11492397.html1、消息队列的好处解耦看这么个场景。A 系统发送数据到 BCD 三个系统,通过接口调用发送。如果 E 系统也要这个数据呢?那如果 C 系统现在不需要了呢?A 系统负责人几乎崩溃…在这个场景中,A 系统跟其它各种乱七八糟的系统严重耦合,A 系统产生一条比较关键的数据,很多系统都需要 A 系统将这个数据

2020-09-03 14:27:45 165

原创 ElasticSearch基本概念

1、核心概念索引index:数据库doc_type:tablemapping:db_schema(有点类似于表的定义)primary shard(主分片)replica shard(副分片)2、数据组织2.1 逻辑组织Elasticsearch同样具有这样的概念,如下图所示,使用index和doc_type来组织数据。doc_type中的每条数据称为一个document,是一个JSON Object,相关的schema信息通过mapping来定义。mapping不仅仅包括数据类型的定义

2020-09-03 09:47:04 1989

原创 Elasticearch和Kafka概念对比

1、概念对比kafka集群包含多个broker,每个broker都是一个kafka实例。每个服务器会有多个broker,我们暂且认为每个服务器包含一个broker。ElasticSearch集群包含多个Node,一个ElasticSearch实例称为一个Node。对于kafka来说,每个broker包含多个Topic,kafka的数据保存在Topic中。ElasticSearch来说,每个Node包含多个shard。每个Topic划分成多个分区partition,分区的作用

2020-09-03 09:13:37 1672

空空如也

空空如也

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

TA关注的人

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