- 博客(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
394
原创 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
214
原创 Spring 循环依赖和解决方法
问:什么是循环依赖? 答:A依赖于B,B依赖于C,C依赖于D,最终形成了闭环; Spring的循环依赖场景有: (1) 构造器依赖:依赖发生在构造函数的参数中,无法解决 (2) 属性的依赖: 解决方法:通过一个递归方法找出当前Bean所依赖的Bean,然后提前缓存chche中,通过提前暴露的方式 ...
2020-10-27 19:32:13
420
1
原创 事务消息的设计思想、使用方式、原理过程
设计思想 (1) 两阶段提交 分为parpare准备消息和commit提交消息; 准备消息不会被消费; 第一阶段:生产者向Broker发送准备消息,发送成功, 开始执行本地事务;消息通过transactionID进行标记唯一;准备消息存在HALF_TOPIC中 第二阶段:生产者执行完成本地事务,根据结果,返回状态码,状态码包括Commit/RollBack/UnKnown; Broker收到Commit状态码,则将准备消息变为确认消息,确认消息可以被消费; Broker收到RollBack状态码,则丢弃准备
2020-10-27 14:59:28
686
原创 接口幂等性实现方案
唯一标识;订单ID 状态标识:标记订单是否已处理 Token:提交请求先获取Token,成功后更新Token,用Token标识请求是否重复
2020-10-22 17:17:36
273
原创 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
752
原创 Redis事务
1.Redis事务的概念: Redis 事务的本质是一组命令的集合。事务支持一次执行多个命令,一个事务中所有命令都会被序列化。在事务执行过程,会按照顺序串行化执行队列中的命令,其他客户端提交的命令请求不会插入到事务执行命令序列中。 总结说:redis事务就是一次性、顺序性、排他性的执行一个队列中的一系列命令。 2.Redis事务没有隔离级别的概念: 批量操作在发送 EXEC 命令前被放入队列缓存,并不会被实际执行,也就不存在事务内的查询要看到事务里的更新,事务外查询不能看到。 3.Redis不保证原子性:
2020-10-22 17:05:19
200
原创 Redis LUA
问:Redis中使用Lua的好处 减少网络开销:可以将多个请求通过脚本的形式一次发送,减少网络时延 原子操作:redis会将整个脚本作为一个整体执行,中间不会被其他命令插入。因此在编写脚本的过程中无需担心会出现竞态条件,无需使用事务。 复用:客户端发送的脚步会永久存在redis中,这样,其他客户端可以复用这一脚本而不需要使用代码完成相同的逻辑。 Redis Lua脚本与事务 从定义上来说, Redis 中的脚本本身就是一种事务, 所以任何在事务里可以完成的事, 在脚本里面也能完成。 并且一般来说, 使用脚本
2020-10-22 17:03:53
201
原创 MYSQL索引类型和索引优化
问:索引的数据结构类型有哪些? 答: 普通索引:仅加速查询 唯一索引:加速查询 + 列值唯一(可以有null) 主键索引:加速查询 + 列值唯一(不可以有null)+ 表中只有一个 组合索引:多列值组成一个索引,专门用于组合搜索,其效率大于索引合并 全文索引:对文本的内容进行分词,进行搜索 问:索引优化思路有哪些? 答: 索引优化规则: 1)如果MySQL估计使用索引比全表扫描还慢,则不会使用索引。 返回数据的比例是重要的指标,比例越低越容易命中索引。记住这个范围值——30%,后面所讲的内容都是建立在返回数
2020-10-22 16:59:15
194
原创 Redis和数据库的一致性问题
问题背景: 在高并发场景下,更新缓存中和数据和更新数据库中的数据,都会存在并发性问题。 情况: (1) 删除了Redis的某条数据,还没来得及删除数据库中的数据;此时一个线程来读,发现Redis中没有这条数据,它就从数据库中读取出的尚未删除的数据,重新写回Redis中,造成Redis删除失效且脏数据 (2) 如果先更新数据库,还没来得及更新Redis,那么一个线程来读Redis,读到的不一致的数据; 难点: 不论是先更新Redis还是更新数据库都会存在高并发不一致的问题,需要结合场景看是否能容忍; 思路:
2020-10-22 16:41:37
252
原创 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
1182
原创 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
560
原创 RocketMQ各个消息原理
问:顺序消息实现原理? 答:取模运算,MessageQueueSelector获取Topic中的指定的Broker 问:事务消息实现分布式事务的案例? 答: 转账:先扣钱再加钱; 正常流程:发送准备消息,不能被消费,生产者执行扣钱,扣钱成功,发送成功消息,原先的准备消息就可以被消费,消费者订阅到消息,做加钱动作; 异常情况1:发送准备消息失败,不会执行扣钱动作; 异常情况2:扣钱失败,准备消息不会被消费,没有关系; 异常情况3:扣钱成功,发送成功消息丢失,通过消息回查,检查扣钱事务结果失败则将准备消息转回滚
2020-10-21 14:46:43
287
原创 线程并发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
277
2
原创 JAVA8-15 新特性
JAVA8: JAVA9: JAVA10: JAVA11: JAVA12: JAVA13: JAVA14: JAVA15:
2020-10-19 09:34:32
397
原创 java线程并发问答2
问:wait ()、await()、notify()、notifyAll() 的用法、区别? 答: wait:Object的方法,线程调用该方法后,进入无限期阻塞等待 notify:Object的方法,线程调用该方法后,基于该对象等待的其中一个线程会被唤醒 notifyall:Object的方法,线程调用该方法后,基于该对象等待的所有线程会被唤醒 问:FutureTask的用法? 答: 问:CountDownLatch的用法? ...
2020-10-15 12:50:12
155
原创 树
B树:平衡树,查找树,所有叶子节点在同一层 B+树:B树的变形,基于B树和叶子节点顺序访问指针进行实现;B+树有两种节点,非叶子节点和叶子节点,非叶子节点存放索引,叶子节点存放数据;B+树数据结构适合于操作系统和数据库,数据有序,插入修改时间复杂度低,元素从下往上插入; B+树特点: 每个子节点,都会有父节点的元素; 子节点有下一个节点的指针,叶子节点有相邻叶子节点的指针,形成有序链表 左边的子树的元素小于等于父节点的最小值,右边的子树大于等于父节点最小值; 时间复杂度 O(Lgn) B+数的查询、新增
2020-10-14 11:42:48
98
原创 数据库问答
问:数据库事务? 答: 问:Mysql存储引擎和区别? 答: 问:Mysql索引结构? 答: 问:Postgres索引结构 答: 问:数据库调优经验? 答:
2020-10-13 12:34:20
292
原创 Java集合问答
问:HashMap线程安全吗,为什么不安全? 答:不安全,Map类安全的有HashTable,ConCurrentHashMap。 问:说一下ConCurrentHashMap的原理? 答: 问:说一下阻塞队列的原理? 答: 问:除了阻塞队列,其他还有哪些队列? 答: ...
2020-10-13 12:24:32
129
原创 JVM问答
问:JVM内存结构 答:堆、栈、本地方法栈、程序计数器、方法区 堆:存放的核心区域 栈:函数变量指针 本地方法栈:同上,用于本地方法 方法区:常量池; 程序计数器:线程私有,记录线程运行的位置,上下文切换; 问:Linux下常用的JVM命令 答: jmap:打印堆的使用、类加载器的使用、输出堆dump快照文件; jstack:生成线程快照 jinfo:jvm运行参数 问:怎么判断一个对象是否存活,GC对象判定 答:有两种,引用计数和可达性; 引用计数:引用的地方进行计数,0就是待回收对象,无法应对互相引用的
2020-10-12 21:57:08
103
原创 网络
问:TCP和UDP的区别 答:TCP是基于连接的UDP无连接;TCP基于数据流UDP基于报文;TCP具备可靠性、确认应答、重传等UDP不可靠不具备;TCP具备流量控制、拥塞控制等机制UDP不具备;TCP传输效率不如UDP且占用资源相对多一些 问:TCP的三次握手和四次挥手 答: 三次握手:客户端发起连接,服务端响应确认,客户端再确认后建立连接 三次握手的原因:如果只有两次的话, 那么如果客户端发起连接请求网络延迟,服务端很久之后收到并响应,那么这就直接建立连接了,但实际上这个连接是不需要的。 四次挥手:客
2020-10-12 11:55:49
246
原创 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
6753
原创 CAP原理
C:Consistency 一致性; A:Availability 可用性; P:Partition 分区性; CAP理论就是在分布式系统中只能满足C、A、P三种特性中的两种,无法三种都满足,在分布式中P分区性是肯定满足的,因此C一致性和可用性就只能选用一种满足。 问:一致性和可用性无法同时满足的原因? 答: ...
2020-10-10 13:52:18
103
原创 死锁、活锁、排它锁、共享锁
问:什么是死锁? 答:死锁的概念是多个线程因竞争共享资源而陷入了僵局,永远的僵持在互相等待中。 问:形成死锁的必要条件? 答: 互斥条件:某资源只能被1个线程占有 不剥夺条件:线程使用完资源前,不能被其他线程强行夺走 请求和保持条件:某线程已经持有了某个共享资源,但是未释放该资源前又请求了另一个共享资源 循环等待:等待资源的线程形成了一种循环链; 问:如何解决死锁? 答:破坏上述的任意一个条件即可。比如破坏不可剥夺,抢占锁即可。请求保持、循环都需要通过业务才能去避免这样的动作; 问:共享锁和排它锁的区别
2020-10-10 11:39:22
536
原创 公平锁和非公平锁、互斥锁、可重入锁、类锁、对象锁、
问:什么是公平锁和非公平锁? 答:公平锁是指所有申请锁的线程,可以按照申请顺序排队的获取到锁,这样对于每个线程都是公平的;非公平就是申请锁的线程没有排队,随机一个线程获取到锁,不公平,可以被抢占。在JAVA中ReentrantLock可以支持非公平和公平锁,sync只能非公平。 问:什么是互斥锁? 答:一个线程上锁后,其他线程无法进入上锁的区域; 什么是可重入锁? 答:又叫做递归锁;一个对象定义了一把锁,A和B两个函数都有获取锁的动作,一个线程进入A函数后获取到锁后可以再进入B函数再次获取到锁,这就是可重入
2020-10-10 10:44:48
267
原创 自旋锁
什么是自旋锁,作用是什么? 答:一种非阻塞锁,如果持有锁的线程在短时间内能够释放锁,让其他竞争锁的线程等待一下,无需做用户态到内核态之间的转换开销。当持有锁的线程释放后,其他线程能够马上获取到锁,作用主要是为了避免线程用户态和内核态之间的转换开销。 自旋锁的优点和缺点,适合什么场景下使用? 答:自旋锁适合锁占用时间短,锁的竞争不激烈的情况下使用。因为自旋锁会占用CPU,如果占用锁时间较长,那么则长期占用了CPU,浪费较大,且这种情况下自旋的消耗已经大于了线程阻塞、切换带来的消耗。因此需要给自旋锁设定时间阈值
2020-10-10 09:55:34
188
原创 RocketMQ 顺序消息
什么是消息有序? 答:按照消息的发送的顺序来消费,比如生产者按序发送的A、B消息,那么消费者必须先消费A再消费B;这个顺序只能是分区顺序不是全局顺序,除非全局只有1个分区; 消息顺序问题的原因: 答:逻辑上的TOPIC分布在多个物理Broker上,这时Producer往Topic发送数据,默认使用轮询策略,发送不同的消息到不同的Broker的分区中上,由于中间传输网络、Broker写入效率等原因,无法保障Producer先发送的数据,一定在Borker中的先写入的。 对于Consumer而已,他的消费队列是
2020-10-09 16:37:42
638
原创 Redis分布式锁和使用场景
分布式锁介绍 分布式锁是保护分布式系统中的多个进程对于某个共享资源的使用 分布式锁所需的特点 高可用的获取锁和释放锁; 高性能的获取锁和释放锁; 具备可重入性; 具备锁失效机制,防止死锁; 具备非阻塞锁特性,即没有获取到锁也不会阻塞; Redis分布式锁 使用setnx指令 获取锁; 使用del指令 释放锁; 使用expire 指令 设置锁的过期时间; 在Redis 2.8版本之后,通过给set指令拓展了ex 指令,将setnx和expire合并为一条原子性的指令,解决了之前setnx和expire指令
2020-10-01 18:29:13
1204
原创 Netty(三) TCP粘包问题和解码器
TCP粘包和半包问题 我们已知TCP全双工的流传输协议,且TCP会将数据写入内核的缓冲区中,再由应用程序读取出数据。在异步传输的场景下,应用程序无法保证读取出的数据是期望的数据内容。 比如我们想要的数据是ABC123,那么应用程序从缓冲区读取出可能是ABC12 ,这时3还没被写入缓冲区;也可能是23ABC123,这是上次23没有被读取走,跟下一条数据一起被读取出来; 当应用程序读取的数据多于正常数据,23ABC123,这就是粘包; 当应用程序读取的数据少于正常数据,ABC12,这就是半包; 粘包和半包都会导
2020-09-25 17:28:31
243
原创 Netty (二) Channel
Channel 概述简介 在Netty中,Channel相当于Socket的抽象,给用户提供了Socket的状态、Socket的读写等操作使用。每当建立一个连接,都创建一个连接对应的Channel 实例; 不同的连接类型,对应的Channel类型也不同 Channel类型 说明 NioSocketChannel 异步非阻塞的TCP客户端连接 NioServerSocketChannel 异步非阻塞的TCP服务端连接 NioDatagramChannel 异步非阻塞UDP连接 Ni
2020-09-22 11:23:34
756
原创 容器化技术 (一) Docker和K8s概述
虚拟机 虚拟机一般通过安装虚拟化软件,通过这个软件模拟出一个操作系统 Docker的作用 Docker的含义:集装箱、容器; 虚拟机的缺点是,它必须虚拟出一个操作系统,导致一个虚拟机非常的大,而且启动缓慢;Docker恰好解决了这个问题,docker依赖于操作系统,只包含运行所需环境,因此它占用空间较小,启动速度块,非常轻量级; Docker本身不是容器,它是创建容器的工具,应用容器引擎; 关于Docker有两句总结: (1) Build、Ship、Run:搭建、发送、运行 (2) Build Once
2020-09-21 13:44:42
1702
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅