自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux下jvm命令

Jinfo –flags [pid]:查询jvm参数Jinfo –sysprops [pid]:查询java系统参数Jstat –class [pid]:类加载统计Jstat –gc [pid]:垃圾回收统计Jstat –gccapacity [pid]:堆内存统计Jstat –gcnew [pid]:新生代垃圾回收统计Jstat –gcnewcapacity [pid]:新生...

2019-10-08 17:19:28 323

原创 Linux命令积累

service iptables status:查看防火墙状态service iptables stop:关闭防火墙service iptables start:开启防火墙rm -f :强行删除rm -r :提柜删除rm -i:删除前询问tcpdump -i eth0 -nn -s 300 -w /usr/local/123.pcap src host 204.7.1.49 and p...

2019-10-08 17:19:21 162

原创 Spring 循环依赖和解决方法

问:什么是循环依赖?答:A依赖于B,B依赖于C,C依赖于D,最终形成了闭环;Spring的循环依赖场景有:(1) 构造器依赖:依赖发生在构造函数的参数中,无法解决(2) 属性的依赖:解决方法:通过一个递归方法找出当前Bean所依赖的Bean,然后提前缓存chche中,通过提前暴露的方式...

2020-10-27 19:32:13 339 1

原创 事务消息的设计思想、使用方式、原理过程

设计思想(1) 两阶段提交分为parpare准备消息和commit提交消息;准备消息不会被消费;第一阶段:生产者向Broker发送准备消息,发送成功, 开始执行本地事务;消息通过transactionID进行标记唯一;准备消息存在HALF_TOPIC中第二阶段:生产者执行完成本地事务,根据结果,返回状态码,状态码包括Commit/RollBack/UnKnown;Broker收到Commit状态码,则将准备消息变为确认消息,确认消息可以被消费;Broker收到RollBack状态码,则丢弃准备

2020-10-27 14:59:28 569

原创 接口幂等性实现方案

唯一标识;订单ID状态标识:标记订单是否已处理Token:提交请求先获取Token,成功后更新Token,用Token标识请求是否重复

2020-10-22 17:17:36 218

原创 Redis 大Key问题和应对方案

大Key:1、单个简单的key存储的value体积大;2、hash, set,zset,list 中存储过多的元素3、Key的数量太多应对方案:1、单个简单的key存储的value很大(1)对象需要每次都整存整取可以尝试将对象分拆成几个key-value, 使用multiGet获取值,这样分拆的意义在于分拆单次操作的压力,将操作压力平摊到多个redis实例中,降低对单个redis的IO影响;(2)该对象每次只需要存取部分数据可以像第一种做法一样,分拆成几个key-value, 也可以将这个

2020-10-22 17:13:00 619

原创 Redis事务

1.Redis事务的概念:Redis 事务的本质是一组命令的集合。事务支持一次执行多个命令,一个事务中所有命令都会被序列化。在事务执行过程,会按照顺序串行化执行队列中的命令,其他客户端提交的命令请求不会插入到事务执行命令序列中。总结说:redis事务就是一次性、顺序性、排他性的执行一个队列中的一系列命令。2.Redis事务没有隔离级别的概念:批量操作在发送 EXEC 命令前被放入队列缓存,并不会被实际执行,也就不存在事务内的查询要看到事务里的更新,事务外查询不能看到。3.Redis不保证原子性:

2020-10-22 17:05:19 156

原创 Redis LUA

问:Redis中使用Lua的好处减少网络开销:可以将多个请求通过脚本的形式一次发送,减少网络时延原子操作:redis会将整个脚本作为一个整体执行,中间不会被其他命令插入。因此在编写脚本的过程中无需担心会出现竞态条件,无需使用事务。复用:客户端发送的脚步会永久存在redis中,这样,其他客户端可以复用这一脚本而不需要使用代码完成相同的逻辑。Redis Lua脚本与事务从定义上来说, Redis 中的脚本本身就是一种事务, 所以任何在事务里可以完成的事, 在脚本里面也能完成。 并且一般来说, 使用脚本

2020-10-22 17:03:53 143

原创 MYSQL索引类型和索引优化

问:索引的数据结构类型有哪些?答:普通索引:仅加速查询唯一索引:加速查询 + 列值唯一(可以有null)主键索引:加速查询 + 列值唯一(不可以有null)+ 表中只有一个组合索引:多列值组成一个索引,专门用于组合搜索,其效率大于索引合并全文索引:对文本的内容进行分词,进行搜索问:索引优化思路有哪些?答:索引优化规则:1)如果MySQL估计使用索引比全表扫描还慢,则不会使用索引。返回数据的比例是重要的指标,比例越低越容易命中索引。记住这个范围值——30%,后面所讲的内容都是建立在返回数

2020-10-22 16:59:15 136

原创 Redis和数据库的一致性问题

问题背景:在高并发场景下,更新缓存中和数据和更新数据库中的数据,都会存在并发性问题。情况:(1) 删除了Redis的某条数据,还没来得及删除数据库中的数据;此时一个线程来读,发现Redis中没有这条数据,它就从数据库中读取出的尚未删除的数据,重新写回Redis中,造成Redis删除失效且脏数据(2) 如果先更新数据库,还没来得及更新Redis,那么一个线程来读Redis,读到的不一致的数据;难点:不论是先更新Redis还是更新数据库都会存在高并发不一致的问题,需要结合场景看是否能容忍;思路:

2020-10-22 16:41:37 194

原创 RocketMQ主从同步、消费进度同步、读写分离

数据同步过程:RocketMQ 的主从同步机制如下:(1) slave启动,跟master建立连接(2) slave 以5秒的间隔,向master拉取消息,如果是第一次拉取的话,先获取本地commitlog文件中最大的偏移量,以该偏移量向服务端拉取消息;(3) master将数据返回给slave(4) slave将数据写入自身commitLog中,更新偏移量;重复以上步骤读写分离机制:(1) 首先读写分离都是,写master,读slave;搭配主从同步机制(2) RocketMQ 有属于自己

2020-10-22 15:54:31 982

原创 RocketMQ的Consumer创建启动流程

(1) Push和Pull这两种方式,本质都是Pull实现的,所以DefaultMQPullConsumerImpl的start方法启动(2) 配置通知方式:广播/集群(3) 配置消息队列分配策略:默认都是平均,此外还有循环平均、配置分配等。(4) 根据Topic创建这个消费者对应的SubscriptionData,包括:TAG。(5) DefaultMQPullConsumerImpl里面的rebalanceImpl将会把topic和SubscriptionData作为键值对存放在里面。(6)

2020-10-22 15:27:18 470

原创 RocketMQ TAG原理和导致数据没有被消费的原因

11111

2020-10-22 15:11:45 1741

原创 Redis key的删除策略

123

2020-10-22 13:01:28 796

原创 Mysql索引和索引优化

123123

2020-10-22 12:40:29 79

原创 RocketMQ各个消息原理

问:顺序消息实现原理?答:取模运算,MessageQueueSelector获取Topic中的指定的Broker问:事务消息实现分布式事务的案例?答:转账:先扣钱再加钱;正常流程:发送准备消息,不能被消费,生产者执行扣钱,扣钱成功,发送成功消息,原先的准备消息就可以被消费,消费者订阅到消息,做加钱动作;异常情况1:发送准备消息失败,不会执行扣钱动作;异常情况2:扣钱失败,准备消息不会被消费,没有关系;异常情况3:扣钱成功,发送成功消息丢失,通过消息回查,检查扣钱事务结果失败则将准备消息转回滚

2020-10-21 14:46:43 233

原创 线程并发3

问:什么是Monitor?答:Monitor是每个java对象内置的,是实现sync的基础。Sync 加锁实际上要获取到指定对象的Monitor,通过Monitor Enter指令获取,释放时通过Monitor Exit指令;问:什么时候用sync,什么时候用lock?答:lock支持状态判断和中断,sync不支持。需要公平锁那么只能用Lock。需要读写锁,也只能ReadWriteLock。问:synchronized和ReentrantLock的性能对比?答:ReentrantLock底层是Ab

2020-10-19 21:17:25 196 2

原创 JAVA8-15 新特性

JAVA8:JAVA9:JAVA10:JAVA11:JAVA12:JAVA13:JAVA14:JAVA15:

2020-10-19 09:34:32 337

原创 java线程并发问答2

问:wait ()、await()、notify()、notifyAll() 的用法、区别?答:wait:Object的方法,线程调用该方法后,进入无限期阻塞等待notify:Object的方法,线程调用该方法后,基于该对象等待的其中一个线程会被唤醒notifyall:Object的方法,线程调用该方法后,基于该对象等待的所有线程会被唤醒问:FutureTask的用法?答:问:CountDownLatch的用法?...

2020-10-15 12:50:12 81

原创 Nginx

功能:反向代理,负载均衡Nginx线程模型:单线程多路复用;负载均衡算法:

2020-10-15 12:49:06 179 1

原创 分布式一致性算法

RAFT:PAXOS:区别简述:

2020-10-14 13:37:43 134

原创 Linux用户态和内核态的作用和区别

地点

2020-10-14 13:35:11 496

原创

B树:平衡树,查找树,所有叶子节点在同一层B+树:B树的变形,基于B树和叶子节点顺序访问指针进行实现;B+树有两种节点,非叶子节点和叶子节点,非叶子节点存放索引,叶子节点存放数据;B+树数据结构适合于操作系统和数据库,数据有序,插入修改时间复杂度低,元素从下往上插入;B+树特点:每个子节点,都会有父节点的元素;子节点有下一个节点的指针,叶子节点有相邻叶子节点的指针,形成有序链表左边的子树的元素小于等于父节点的最小值,右边的子树大于等于父节点最小值;时间复杂度 O(Lgn)B+数的查询、新增

2020-10-14 11:42:48 62

原创 设计模式

代理责任链适配器

2020-10-13 21:08:19 65

原创 JAVA 9-14新特性

手动的

2020-10-13 21:07:43 117

原创 数据库问答

问:数据库事务?答:问:Mysql存储引擎和区别?答:问:Mysql索引结构?答:问:Postgres索引结构答:问:数据库调优经验?答:

2020-10-13 12:34:20 224

原创 Spring和SpringBoot问答

1111

2020-10-13 12:33:09 146

原创 Java集合问答

问:HashMap线程安全吗,为什么不安全?答:不安全,Map类安全的有HashTable,ConCurrentHashMap。问:说一下ConCurrentHashMap的原理?答:问:说一下阻塞队列的原理?答:问:除了阻塞队列,其他还有哪些队列?答:...

2020-10-13 12:24:32 81

原创 JVM问答

问:JVM内存结构答:堆、栈、本地方法栈、程序计数器、方法区堆:存放的核心区域栈:函数变量指针本地方法栈:同上,用于本地方法方法区:常量池;程序计数器:线程私有,记录线程运行的位置,上下文切换;问:Linux下常用的JVM命令答:jmap:打印堆的使用、类加载器的使用、输出堆dump快照文件;jstack:生成线程快照jinfo:jvm运行参数问:怎么判断一个对象是否存活,GC对象判定答:有两种,引用计数和可达性;引用计数:引用的地方进行计数,0就是待回收对象,无法应对互相引用的

2020-10-12 21:57:08 70

原创 网络

问:TCP和UDP的区别答:TCP是基于连接的UDP无连接;TCP基于数据流UDP基于报文;TCP具备可靠性、确认应答、重传等UDP不可靠不具备;TCP具备流量控制、拥塞控制等机制UDP不具备;TCP传输效率不如UDP且占用资源相对多一些问:TCP的三次握手和四次挥手答:三次握手:客户端发起连接,服务端响应确认,客户端再确认后建立连接三次握手的原因:如果只有两次的话, 那么如果客户端发起连接请求网络延迟,服务端很久之后收到并响应,那么这就直接建立连接了,但实际上这个连接是不需要的。四次挥手:客

2020-10-12 11:55:49 166

原创 Eureka、Zookeeper、Nacos的区别

Eureka和Zookeeper还有Consul的区别:答:Eureka遵从AP原则,追求可用性;Zookeeper遵从CP原则,追求一致性;体现在获取服务注册列表上,当ZK的master挂掉后,会触发选举,选举期间无法从ZK获取服务列表信息,这就是为了一致性放弃了可用性;Eureka则追求可用性,只存在Eureka Server,就可以获取到服务注册列表信息,但是可能获取到不是最新的,这就是为了可用性放弃了一致性;Eureka和Nacos的区别:答: Eureka只能遵从AP原则,Nacos同时支

2020-10-10 14:35:36 6638

原创 CAP原理

C:Consistency 一致性;A:Availability 可用性;P:Partition 分区性;CAP理论就是在分布式系统中只能满足C、A、P三种特性中的两种,无法三种都满足,在分布式中P分区性是肯定满足的,因此C一致性和可用性就只能选用一种满足。问:一致性和可用性无法同时满足的原因?答:...

2020-10-10 13:52:18 74

原创 死锁、活锁、排它锁、共享锁

问:什么是死锁?答:死锁的概念是多个线程因竞争共享资源而陷入了僵局,永远的僵持在互相等待中。问:形成死锁的必要条件?答:互斥条件:某资源只能被1个线程占有不剥夺条件:线程使用完资源前,不能被其他线程强行夺走请求和保持条件:某线程已经持有了某个共享资源,但是未释放该资源前又请求了另一个共享资源循环等待:等待资源的线程形成了一种循环链;问:如何解决死锁?答:破坏上述的任意一个条件即可。比如破坏不可剥夺,抢占锁即可。请求保持、循环都需要通过业务才能去避免这样的动作;问:共享锁和排它锁的区别

2020-10-10 11:39:22 468

原创 公平锁和非公平锁、互斥锁、可重入锁、类锁、对象锁、

问:什么是公平锁和非公平锁?答:公平锁是指所有申请锁的线程,可以按照申请顺序排队的获取到锁,这样对于每个线程都是公平的;非公平就是申请锁的线程没有排队,随机一个线程获取到锁,不公平,可以被抢占。在JAVA中ReentrantLock可以支持非公平和公平锁,sync只能非公平。问:什么是互斥锁?答:一个线程上锁后,其他线程无法进入上锁的区域;什么是可重入锁?答:又叫做递归锁;一个对象定义了一把锁,A和B两个函数都有获取锁的动作,一个线程进入A函数后获取到锁后可以再进入B函数再次获取到锁,这就是可重入

2020-10-10 10:44:48 215

原创 自旋锁

什么是自旋锁,作用是什么?答:一种非阻塞锁,如果持有锁的线程在短时间内能够释放锁,让其他竞争锁的线程等待一下,无需做用户态到内核态之间的转换开销。当持有锁的线程释放后,其他线程能够马上获取到锁,作用主要是为了避免线程用户态和内核态之间的转换开销。自旋锁的优点和缺点,适合什么场景下使用?答:自旋锁适合锁占用时间短,锁的竞争不激烈的情况下使用。因为自旋锁会占用CPU,如果占用锁时间较长,那么则长期占用了CPU,浪费较大,且这种情况下自旋的消耗已经大于了线程阻塞、切换带来的消耗。因此需要给自旋锁设定时间阈值

2020-10-10 09:55:34 134

原创 RocketMQ 顺序消息

什么是消息有序?答:按照消息的发送的顺序来消费,比如生产者按序发送的A、B消息,那么消费者必须先消费A再消费B;这个顺序只能是分区顺序不是全局顺序,除非全局只有1个分区;消息顺序问题的原因:答:逻辑上的TOPIC分布在多个物理Broker上,这时Producer往Topic发送数据,默认使用轮询策略,发送不同的消息到不同的Broker的分区中上,由于中间传输网络、Broker写入效率等原因,无法保障Producer先发送的数据,一定在Borker中的先写入的。 对于Consumer而已,他的消费队列是

2020-10-09 16:37:42 576

原创 Redis分布式锁和使用场景

分布式锁介绍分布式锁是保护分布式系统中的多个进程对于某个共享资源的使用分布式锁所需的特点高可用的获取锁和释放锁;高性能的获取锁和释放锁;具备可重入性;具备锁失效机制,防止死锁;具备非阻塞锁特性,即没有获取到锁也不会阻塞;Redis分布式锁使用setnx指令 获取锁;使用del指令 释放锁;使用expire 指令 设置锁的过期时间;在Redis 2.8版本之后,通过给set指令拓展了ex 指令,将setnx和expire合并为一条原子性的指令,解决了之前setnx和expire指令

2020-10-01 18:29:13 1127

原创 Netty(三) TCP粘包问题和解码器

TCP粘包和半包问题我们已知TCP全双工的流传输协议,且TCP会将数据写入内核的缓冲区中,再由应用程序读取出数据。在异步传输的场景下,应用程序无法保证读取出的数据是期望的数据内容。比如我们想要的数据是ABC123,那么应用程序从缓冲区读取出可能是ABC12 ,这时3还没被写入缓冲区;也可能是23ABC123,这是上次23没有被读取走,跟下一条数据一起被读取出来;当应用程序读取的数据多于正常数据,23ABC123,这就是粘包;当应用程序读取的数据少于正常数据,ABC12,这就是半包;粘包和半包都会导

2020-09-25 17:28:31 165

原创 Netty (二) Channel

Channel 概述简介在Netty中,Channel相当于Socket的抽象,给用户提供了Socket的状态、Socket的读写等操作使用。每当建立一个连接,都创建一个连接对应的Channel 实例;不同的连接类型,对应的Channel类型也不同Channel类型说明NioSocketChannel异步非阻塞的TCP客户端连接NioServerSocketChannel异步非阻塞的TCP服务端连接NioDatagramChannel异步非阻塞UDP连接Ni

2020-09-22 11:23:34 668

原创 容器化技术 (一) Docker和K8s概述

虚拟机虚拟机一般通过安装虚拟化软件,通过这个软件模拟出一个操作系统Docker的作用Docker的含义:集装箱、容器;虚拟机的缺点是,它必须虚拟出一个操作系统,导致一个虚拟机非常的大,而且启动缓慢;Docker恰好解决了这个问题,docker依赖于操作系统,只包含运行所需环境,因此它占用空间较小,启动速度块,非常轻量级;Docker本身不是容器,它是创建容器的工具,应用容器引擎;关于Docker有两句总结:(1) Build、Ship、Run:搭建、发送、运行(2) Build Once

2020-09-21 13:44:42 1545

空空如也

空空如也

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

TA关注的人

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