自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 利用生产者与消费者模型实现线程池Java

实际编码中经常遇到处理并发的场景,下面是一种用生产者-消费者模型实现的线程池,可以实现并发处理功能。也可以不使用wait(),notify(),而是直接用BlockingQueue来实现。import java.util.LinkedList;import java.util.Queue; public class WorkerPool { // 线程池Worker数量 private static final int WORKER_COUNT = 10; /

2021-11-08 16:17:29 286

转载 如何检测MySQl的健康状况

https://blog.csdn.net/devin223/article/details/46455243?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault

2021-11-07 21:50:24 1302

转载 Redis热点key的解决方案

1.什么是热点Key就是短时间会有几十万甚至更多去访问Redis上的某个特定的key,那么,这样会造成流量过于集中。2.怎么发现热点Key1.根据业务确定比如锁秒杀,商品就是热点key2.客户端收集在操作redis之前,加入代码进行数据统计3.在Proxy层收集Proxy层就行收集,但是不是所有Redis集群都有proxy4.用redis自带命令收集4.1monitor4.2hotkeys参数在redis 4.0.3之后提供了redis-cli的热点key发现功能3.怎么解决1.

2021-09-22 22:59:54 1550

转载 JVM出现了OOM异常如何解决

1.异常出现位置堆溢出、永久代/元空间溢出、方法栈溢出2.堆溢出java.lang.OutOfMemory : Java heap space原因:1.代码中可能存在大对象分配2.可能存在内存泄漏,多次GC之后,还是无法找到一块足够大的内存容纳当前对象解决方法:1.检查是否存在大对象的分配,最有可能是大数组的分配2.通过jmap命令,把堆内存dump下来,使用mat工具分析一下,检查是否存在内存泄漏问题3.如果没有找到明显的内存泄漏,使用-Xmx加大堆内存4.检查是否有大量的自定义的F

2021-09-22 22:22:19 194

转载 三个箱子中先打开了一个没有奖品,你会重新选吗

https://zhuanlan.zhihu.com/p/45695892会。换之后成功率变成2/3,不换的话变成1/3如果不换Step1:随机打开一个箱子,选每个箱子的概率都是1/3Step2:假设现金在A里面,第一步选了A,主持人随机打开B或者C。如果第一步选了B或者C,那么主持人只能打开C或者B。Setp3.1不换:拿到的A的概率为1/6+1/6=1/3Step3.2换:我们拿到A的概率为1/3+1/3 = 2/3...

2021-09-22 20:17:14 631

转载 100万份数据抽奖(秒杀)

https://www.jianshu.com/p/cad0ecd7562b?utm_campaign=hugo如何避免几天的活动一下子结束将奖品分发到每一天,每天有一定额度的奖品,这样不会导致奖品提前发完。如何避免超卖问题1.可以用Redis预件库存。比如我在Redis中存储一个k、v。每个线程进来,key就减去1,等减到0时候,全部拒绝剩下的请求。也就是只有100个线程会进入到后续操作,所以一定不会出现超卖问题。2.版本号控制100个线程,如果有个线程先更新了数据,另外99个线程采用C

2021-09-12 17:38:14 126

原创 为什么出现虚拟地址

虚拟地址、物理地址、映射,这些名词出现的根本原因:程序是一行一行的往下执行的,当程序执行完后,PC会自动加1,然后程序会自动往下执行,所以要求我们的程序要放在连续的地址空间上。但是,这个要求很难达到,根据,任何问题都可以通过添加一个层次来解决这个定论,我们可以在物理地址和CPU之间添加一个虚拟地址层次,当CPU访问的时候,他还是一条一条的指令往下走,执行完PC+1,执行下一条指令。但是通过MMT、CPU使用的线性地址就可以不放在...

2021-09-11 10:27:01 147

转载 多线程下i++和++i操作如何保证线程安全

https://blog.csdn.net/zbw18297786698/article/details/53420780volaitilevolatile关键字解决的是多线程间共享变量的可见性问题,而保证不了多线程共享变量原子性问题,对于多线程的i++、++i依然会存在多线程问题,volatile是无法解决的。Thred1 Thread2:r1 = i; r3 = i; //读取i值r2 = r1+1; r4 = r3+1; //i值加1i = r2;

2021-09-11 10:14:16 967

转载 Topk问题

http://www.199it.com/archives/149583.html哈希,然后小顶堆

2021-09-01 11:44:42 110

原创 Join和左连接和右连接

left join(左连接)是以A表的记录为基础的,A可以看成左表,B可以看成右表,left join是以左表为准的。换句话说,左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录。right join(右连接),返回右表中所有记录和左表中连接字段相等的记录,即返回的记录数和右表的记录数一样。join(等值连接),只返回两个表中连接字段相等的记录...

2021-08-31 23:22:32 1127

转载 在TCP传输过程中,客户端突然端口会导致服务端的send函数奔溃

在Linux下编写TCP socket程序时候,如何客户端突然退出,导致连接中断这时候服务端用send函数发送数据的话,会导致整个进程退出。如果是服务端端口,客户端调用send不会导致进程退出。为什么会这样?因为服务端尝试调用disconnected socket进行send数据时,会让底层抛出一个信号SIGPIPE,这个信号的默认处理方法就是退出进程。解决方法:1.重新定义一个信号处理方法,覆盖系统默认处理方法。2.修改send函数的最后一个参数,将最后一位flags设置为MSG_NOSIGN

2021-08-31 11:20:42 431

转载 TCP三次握手时ACK丢失怎么办

服务端服务端有个重发时间,如果在发送SYN+ACK指令之后,如果重发时间到了,会继续重发SYN+ACK,并且如果达到指定重发次数之后,仍然还没收到客户端的ACK请求,那么服务端就会自动关闭这个连接。客户端客户端收到SYN+ACK请求后,就已经处于Established状态,如果这时候给客户端发送数据,就会收到RST指令,就知道了ACK指令丢失,然后重传ACK包。...

2021-08-31 11:13:28 915

转载 Java的进程间同步模型(生产者消费者、读写者、哲学家就餐)

https://blog.csdn.net/qq_40550018/article/details/87859399//商品类public class Goods { private int id; private String name; public Goods(int id, String name) { this.id = id; this.name = name; }}//消费者类public class Producer

2021-08-25 11:59:08 97

转载 为什么需要HashCode()方法,并且为什么需要重写。

为什么需要HashCode()使用hashcode方法提前校验,可以避免每一次比对都调用equals方法,提高效率例如 HashSet是具有不可重复性的,每次往里面添加数据时,都会先计算该数据的 哈希值(即在哈希表中的存放位置),然后与set中已经存在的数据的 哈希值进行比较,如果都不同则添加在计算出的位置进行添加,如果相同则调用 equals方法进行判断,相同则不添加,不相同则散列到其他位置添加。因为不同对象出现 哈希值相同的概率是比较低的,所以重写了 hashcode方法可以减少 equals方法

2021-08-24 23:21:06 242

转载 Redis和MySQL数据如何保存一致性

https://blog.csdn.net/weixin_45127309/article/details/104253328?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.base&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogC

2021-08-23 12:01:04 96

转载 SQL中where in走索引吗

看情况:1.in条件过多,会导致索引失效,走索引扫描(类似全表扫描)2.in的条件过多,返回数据过多,可能会导致应用堆诶长溢出。https://blog.csdn.net/chengqujin8086/article/details/100910623

2021-08-20 22:59:30 1352

原创 Java如何退出多层循环

每层break通过冒号标记,跳出a:for(int i = 0;i<n;i++){ for(int j = 0;j<m;j++){ break a; }}

2021-08-20 22:53:06 63

原创 如何实现Redis和MySQL数据一致性

https://blog.csdn.net/weixin_45127309/article/details/104253328

2021-08-20 22:46:10 58

原创 MySQL Hash索引真的不能进行范围查找吗

其实是可以的,他会借助与其他索引。https://blog.csdn.net/a1229323056/article/details/108380644

2021-08-20 22:32:41 657

原创 B树和B+树的区别

单一节点存储的元素更多,使得查询的IO次数更少,所以也就使得它更适合做为数据库MySQL的底层数据结构了。所有的查询都要查找到叶子节点,查询性能是稳定的,而B树,每个节点都可以查找到数据,所以不稳定。所有的叶子节点形成了一个有序链表,更加便于查找。...

2021-08-20 22:21:56 53

原创 Kafka消费者是拉取还是推消息

https://blog.csdn.net/qq_38294275/article/details/108373946

2021-08-20 22:16:29 809

原创 Spring的循环依赖如何解决和多级缓存

https://zhuanlan.zhihu.com/p/84267654bean的使用要实例化和初始化两步。在实例化的时候会递归实例所有要用到的对象。然后反过来初始化。

2021-08-19 22:38:44 52

原创 Redis实现唯一ID、分布式锁

1.如何实现分布式ID因为Redis 是单线程的,所以没有线程安全问题。1.选取适当的id规则,比如年月日+序列2.利用Redis的String类型,incr my_seque3.如果需要月内或者年内递增,就可以设置Redis的过期时间。2.分布式锁https://juejin.cn/post/6844904126288150542...

2021-08-19 22:01:42 390

转载 如何计算B+树的高度呢

一个千万量级别,且存储引擎是MyISAM或者InnoDB的表,其索引树的高度在3-5之间。B+树的索引树的高度就是logNB(logN/logB)N表示记录数,B表示每个节点有B个索引。假设有3000W条数据,每个节点保存64个索引。那么索引的高度就是(log2^25)/log64=25/6=4...

2021-08-05 21:17:05 2833

原创 kafka和RocketMQ的区别

https://blog.csdn.net/handong106324/article/details/105444137/

2021-08-02 22:15:07 43

原创 分布式缓存常见的技术选型方案有哪些

分布式缓存的话,使用的比较多的是Memcached和Redis。不过现在基本没有用Memcached来做缓存,都是直接用Redis。Memcached是分布式缓存最开始兴起的那会,比较常用的。后来,随着Redis的发展,大家慢慢转而使用更加强大的Redis了。Redis和Memcached的区别和共同点共同点:都是基于内存的数据库,一般都用来当做缓存使用。都有过期策略两者的性能非常高区别:Redis支持更丰富的数据类型(支持更复杂的应用场景)。Redis不仅仅支持简单的k/v类型的数

2021-08-01 20:29:27 308

转载 锁优化的思路

锁优化的思路和方法减少锁持有的时间减小锁粒度锁分离锁粗化锁消除1.减少锁持有的时间public synchronized void syncMethod(){ othercode1(); mutexMethod(); othercode2();}像上述代码这样,在进入方法前就要得到锁,其他线程就要在外面等待。这里优化的一点在于,要减少其他线程等待的时间,所以,只需要在有线程安全要求的程序代码上加锁。public void syncMethod(){ othercode1(

2021-07-31 20:30:04 98

转载 常量池、字符串常量池问题

String类型的比较https://segmentfault.com/a/1190000009888357面试题:String str4 = new String(“abc”) 创建多少个对象?1.在常量池中查找是否有“abc”对象1.1有则返回对应的引用实例1.2没有则创建对应的实例对象2.在堆中new一个String(“abc“)对象3.将对象地址赋值给str4,创建一个引用所以常量池中没有“abc”则创建两个对象,否则创建一个对象,以及创建一个引用。String str1 = n

2021-07-31 20:02:43 95

转载 零拷贝了解吗

什么是零拷贝零拷贝(Zero-Copy)技术是指计算机执行操作时,CPU不需要先将数据从某处内存复制到另一个特定区域。这种技术通常用于网络传输文件时节省CPU周期和内存带宽。零拷贝技术可以减少数据拷贝和共享总线操作的次数,消除传输数据在存储器之间不必要的中间拷贝次数,从而有效地提高数据传输效率。零拷贝技术减少了用户进程空间和内核空间之间因为上下文切换带来的开销。注意:没有说不需要拷贝,只是减少冗余(不必要)的拷贝。Java支持哪些零拷贝NIO提供的内存映射MappedByteBuffer首

2021-07-31 19:50:42 72

转载 写时复制了解吗(并发场景下)

写时复制(Copy On Write)核心思想是,如果有多个调用者同时请求相同资源(如内存或磁盘上的数据存储),会共同获取相同的指针指向相同的资源,直到某个调用者视图修改资源的内容时,系统才会真正复制一份专用副本给该调用者,而其他调用者所见到的最初的资源仍然保持不变,这个过程对其他调用者是透明的。此作法的主要优点是如果调用者没有修改该资源,就不会该副本被建立,因此多个调用者只是读取操作时可以共享同一份资源。Java中的COWJDK中的CopyOnWriteArrayList/CopyOnWriteA

2021-07-31 19:27:49 251

原创 String类中的compareTo()方法和equals()方法比较

https://blog.csdn.net/ted_cs/article/details/82712248String类代表字符串。Java程序中的所有字符串字面值(如“abc”)都作为此类的实例实现。字符串是常量,他们的值在创建之后不能更改。字符串缓冲区支持可变的字符串。因为String对象是不可变的,所以可以共享。compareTo()public int compareTo(String anotherString)按字典顺序比较两个字符串。该比较基于字符串中各个字符的Unicode值。按字

2021-07-26 19:18:46 348

原创 comparable和comparator接口的区别

https://www.cnblogs.com/williamjie/p/11164313.htmlComparable接口Java提供了一个包含compareTo()方法的comparable接口。这个方法可以给两个对象排序,具体来说,它返回负数,0正数来表面已经存在的对象小于、等于、大于输入对象。compareTo()方法是按照字典序排序。Comparator接口Java提供了包含compare()和equals()两个方法的Comparator接口。compare()方法用来给两个输入参

2021-07-26 19:03:44 64

转载 快速排序的稳定性分析

https://blog.csdn.net/gaoxueyi551/article/details/89413936快排之后的数组可能会出现失衡,算法复杂度可能上升到O(N2)。程序恶化的原因:当游标所指向的元素同枢纽元相等时选择了继续前进,而不是停留在原地,这导致游标肆无忌惮的一路向前,根本没有顾忌到左右两个数组是否均衡,因此触发了大忌。避免:当游标所指向的元素同枢纽元相等时,待在原地不动,左右游标指向的元素进行交换,再各自向前移动。这样子进行了很多交换操作,这样枢纽元能够出现在数组中间位置,左右

2021-07-18 10:57:19 268

原创 ReentrantReadWriteLock

1.什么是读写锁读写锁维护了一对锁,一个读锁和一个写锁,通过分离读锁和写锁,使得并发性比一般的排他锁有了很大提升2.读写锁的特性公平性:支持非公平和公平的获取方式,吞吐量还是非公平由于公平。重进入:该锁支持重进入,以读写线程为例,读线程在获取了读锁之后,能够再次获取读锁,而线程在获取了写锁之后能够再次获取读写锁,同时也可以获取读锁。锁降级:遵循获取写锁,获取读锁在释放写锁的次序,写锁能够降级成读锁。3.读写锁的实现int变量按位切割使用。高16位表示读,低16表示写。4.锁降级

2021-07-17 22:45:10 33

原创 双重检查实现单例模式

public class Singleton{ private static volatile Singleton singleton; private Singleton(){} public Singleton getInstance(){ if(singleton==null){ synchronized(Singleton.class){ if(singleton==null){ singleton = new Singleton(); } } }

2021-07-08 16:32:30 112

原创 手写单例模式

1.为什么要有单例模式实际编程应用场景中,有一些对象其实我们只需要一个,比如线程池对象、缓存、系统全局配置对象等。这样可以保证一个在全局使用的类不被频繁地创建与销毁,节省系统资源。2.实现单例模式的几个要点首先要保证全局只有一个类的实例要保证这一点,至少类的构造器要私有化。单例的类只能自己创建自己的实例因为,构造器私有了,但是要一个实例,只能自己创建。单例类必须提供自己唯一实例给其他类就是要一个有公共方法返回该单例类的唯一实例。3.单例模式的6种实现1.饿汉式——静态变量方式(线程

2021-07-08 16:13:47 44

原创 volatile了解吗?(面试)

1.什么是volatile呢volatile是Java虚拟机提供的最轻量级的同步机制2.volatile的两大特性(两大语义)可见性和有序性,没有原子性。3.volatile的可见性如何实现volatile定义:当volatile执行写操作后,JMM会把工作内存中的最新变量值强制刷新到主内存中并且写操作会让其他线程中的变量缓存无效化这样,其他线程使用缓存时,发现本地工作内存中此变量无效,便从主内存中获取,这样获取到的变量就是最新的值,实现了线程的可见性。4.volatile如何实现有序

2021-07-07 17:29:36 133

原创 Java内存模型(JMM)了解吗

1. Java的内存模型是什么Java的内存模型JMM是一个抽象概念,实际上并不存在。它涵盖了缓存、写缓冲区、寄存器以及其他硬件和编译器优化。2.JMM的作用是什么并发编程中需要解决两个关键问题就是通信和同步。线程的通信机制有两种:共享内存和消息传递。Java的并发模型采用是共享内存模型。所以JMM主要解决的是多线程之间的通信问题。3.JMM的通信过程了解吗如果线程A和B之间要通信,必须经历下面两个步骤:线程A把本地内存A中更新过的共享变量刷新到主内存中线程B到主内存中去读取线程A

2021-07-07 16:28:28 58

原创 为什么要使用多线程呢,已经多线程遇到的挑战

1.为什么要使用多线程多线程可以减少上下文切换的开销多线程机制可以大大提高系统整体的并发能力和性能单核时代:提高CPU和IO设备的综合利用率多核时代:提高CPU利用率2.使用多线程会带来什么问题呢?内存泄漏、上下文切换、死锁。3.什么是内存泄漏内存泄漏即该释放的内存没有被及时的释放,一直被某个或某些实例所持有却不在再使用导致GC不能回收。4.什么是上下文切换当前任务执行完CPU时间片切换到另一个任务之前会先保存自己的状态,以便下次再切换回这个任务时,可以再加载这个任务的状态。任务从保

2021-07-06 11:33:09 146

原创 ConcurrentHashMap有什么了解

1.ConcurrentHashMap的实现原理是什么?JDK1.7中的ConcurrentHashMap是由Segment数组结构和HashEntry数组结构组成,即ConcurrentHashMap把哈希桶切成小数组(Segment),每个小数组有n个HashEntry组成。其中,Segment继承了ReetrantLock,所以Segment是一种可重入锁,扮演锁的角色,HashEntry用于存储键值对数据。首先将数据分为一段一段的存储,然后给每一段数据配一把锁,当一个线程占用锁访问其中一个段

2021-07-06 10:12:57 89

空空如也

空空如也

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

TA关注的人

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