- 博客(89)
- 资源 (7)
- 收藏
- 关注
原创 线程池中多余的线程是如何回收的?
线程池是如何回收工作线程的?简单分析了一下,加深对线程池的理解吧。下面以JDK1.8为例进行分析1.runWorker(Worker w)工作线程启动后,就进入runWorker(Worker w)方法。里面是一个while循环,循环判断任务是否为空,若不为空,执行任务;若取不到任务,或发生异常,退出循环,执行processWorkerExit(w, completedAbruptly); 在这个方法里把工作线程移除掉。取任务的来源有两个,一个是firstTask,这个是工作线程第一次.
2020-10-31 10:11:57
3483
1
原创 delete 后加 limit
在业务场景要求高的数据库中,对于单条删除和更新操作,在 delete 和 update 后面加 limit 1 绝对是个好习惯。比如,在删除执行中,第一条就命中了删除行,如果 SQL 中有 limit 1;这时就 return 了,否则还会执行完全表扫描才 return。效率不言而喻。那么,在日常执行 delete 时,我们是否需要养成加 limit 的习惯呢?是不是一个好习惯呢?在日常的 SQL 编写中,你写 delete 语句时是否用到过以下 SQL?delete from t where
2020-10-23 09:30:09
10259
原创 总结java中的“锁”
一、介绍首先, java 的锁分为两类: 第一类是synchronized同步关键字,这个关键字属于隐式的锁,是 jvm 层面实现,使用的时候看不见; 第二类是在 jdk5 后增加的Lock接口以及对应的各种实现类,这属于显式的锁,就是我们能在代码层面看到锁这个对象,而这些个对象的方法实现,大都是直接依赖 CPU 指令的,无关 jvm 的实现。 接下来就从synchronized和Lock两方面来讲。二、synchronized2.1 synchronized...
2020-09-19 11:46:11
355
原创 封装redis分布式锁
分布式锁通常有很多选择,基于 Redis 的,基于 Zookeeper 的,基于数据库等等方案。Redis 用于缓存数据,在项目中都有使用,所以使用 Redis 来做分布式锁的会稍微多些。如果用 Redis 来做锁,可以直接用开源的方案,比如redisson。最常见的使用方式如下所示:RLock lock = redisson.getLock("anyLock");lock.lock();run();lock.unlock();获取锁对象,调用 lock()加锁,执行业务逻辑,调
2020-09-17 15:57:29
437
原创 事务实现原理
一、前言相信大家都用过事务以及了解他的特点,如原子性(Atomicity),一致性(Consistency),隔离型(Isolation)以及持久性(Durability)等。今天想跟大家一起研究下事务内部到底是怎么实现的,在讲解前我想先抛出个问题:事务想要做到什么效果?按我理解,无非是要做到可靠性以及并发处理 可靠性:数据库要保证当insert或update操作时抛异常或者数据库crash的时候需要保障数据的操作前后的一致,想要做到这个,我需要知道我修改之前和修改之后的状态,所以就有
2020-07-27 10:06:41
1308
原创 解决幂等性问题方法大全
我们实际系统中有很多操作,是不管做多少次,都应该产生一样的效果或返回一样的结果。例如 1. 前端重复提交选中的数据,应该后台只产生对应这个数据的一个反应结果;2. 我们发起一笔付款请求,应该只扣用户账户一次钱,当遇到网络重发或系统 bug 重发,也应该只扣一次钱;3. 发送消息,也应该只发一次,同样的短信发给用户,用户会哭的;4. 创建业务订单,一次业务请求只能创建一个,创建多个就会出大问题等等很多重要的情况都需要幂等的特性来支持。幂等(idempotent、idempotence)是一个数学与计算机学
2020-05-08 20:24:07
9752
原创 小小理解悲观锁和乐观锁
Java 按照锁的实现分为乐观锁和悲观锁,乐观锁和悲观锁并不是一种真实存在的锁,而是一种设计思想,乐观锁和悲观锁对于理解 Java 多线程和数据库来说至关重要,那么本篇文章就来详细探讨一下这两种锁的概念以及实现方式。悲观锁悲观锁是一种悲观思想,它总认为最坏的情况可能会出现,它认为数据很可能会被其他人所修改,所以悲观锁在持有数据的时候总会把资源或者数据锁住,这样其他线程想要请求这个资源...
2020-04-01 20:42:32
6303
原创 互联网公司常用分库分表方案汇总
一、数据库瓶颈不管是IO瓶颈,还是CPU瓶颈,最终都会导致数据库的活跃连接数增加,进而逼近甚至达到数据库可承载活跃连接数的阈值。在业务Service来看就是,可用数据库连接少甚至无连接可用。接下来就可以想象了吧(并发量、吞吐量、崩溃)。1、IO瓶颈第一种:磁盘读IO瓶颈,热点数据太多,数据库缓存放不下,每次查询时会产生大量的IO,降低查询速度 -> 分库和垂直分表。第二种:网...
2020-03-28 20:12:18
8641
原创 Kafka快的原因
在过去的几年里,软件架构领域发生了巨大的变化。人们不再认为所有的系统都应该共享一个数据库。微服务、事件驱动架构和CQRS(命令查询的责任分离 Command Query Responsibility Segregation)是构建当代业务应用程序的主要工具。除此以外,物联网、移动设备和可穿戴设备的普及,进一步对系统的近实时能力提出了挑战。首先让我们对“快”这个词达成共识,这个词是多方面的、复杂...
2020-03-28 17:02:38
8707
原创 rabbit死信队列出现TTL时间超过但是进入不了死信队列情况
原因是线上一场时间不精准问题导致的。总的来说,为了让消息队列消息更加健壮,于是配置了超时时间和死信队列。但是出现的问题是,配置队列的TTL,总有一些消息在超过TTL时间后,进入不了死信队列,影响及时的业务通知系统。问题在什么地方呢?prefetch: 1属性配置上。以下是问题重现,与解决过程1.环境搭建1.1rabbit服务器略1.2springboot工程略...
2020-02-24 17:25:43
40852
2
原创 面试题:如何让线程顺序执行?
一、实现本文使用了8种方法实现在多线程中让线程按顺序运行的方法,涉及到多线程中许多常用的方法,不止为了知道如何让线程按顺序运行,更是让读者对多线程的使用有更深刻的了解。使用的方法如下:[1] 使用线程的join方法[2] 使用主线程的join方法[3] 使用线程的wait方法[4] 使用线程的线程池方法[5] 使用线程的Condition(条件变量)方法[6] 使用线程的Coun...
2019-09-22 10:28:30
43068
原创 HashMap问题汇总
就比如问你:HashMap 是不是有序的?你回答不是有序的。那面试官就会可能继续问你,有没有有序的Map实现类呢?你如果这个时候说不知道的话,那这块问题就到此结束了。如果你说有TreeMap和LinkedHashMap。那么面试官接下来就可能会问你,TreeMap和LinkedHashMap是如何保证它的顺序的?如果你回答不上来,那么到此为止。如果你说TreeMap是通过实现...
2019-09-18 09:25:01
36916
原创 为什么Spring默认把 Bean 设计成单例的?
熟悉Spring开发的朋友都知道Spring提供了5种scope分别是singleton、prototype、request、session、global session。如下图是官方文档上的截图,感兴趣的朋友可以进去看看这五种分别有什么不同。今天要介绍的是这五种中的前两种,也是Spring最初提供的bean scope singleton 和 prototype。Spring官方文档介绍...
2019-09-08 16:33:05
52502
原创 深度剖析-Spring 如何解决循环依赖?
在关于Spring的面试中,我们经常会被问到一个问题:Spring是如何解决循环依赖的问题的。这个问题算是关于Spring的一个高频面试题,因为如果不刻意研读,相信即使读过源码,面试者也不一定能够一下子思考出个中奥秘。本文主要针对这个问题,从源码的角度对其实现原理进行讲解。1. 过程演示关于Spring bean的创建,其本质上还是一个对象的创建,既然是对象,读者朋友一定要明白一点...
2019-09-08 16:27:38
41976
1
原创 层层递进打造你的重试机制
重试机制在分布式系统中,或者调用外部接口中,都是十分重要的。重试机制可以保护系统减少因网络波动、依赖服务短暂性不可用带来的影响,让系统能更稳定的运行的一种保护机制。为了方便说明,先假设我们想要进行重试的方法如下:@Slf4j@Componentpublic class HelloService { private static AtomicLong helloTimes...
2019-08-25 15:49:32
48609
原创 秒杀系统架构分析与实战
1、秒杀业务分析正常电子商务流程(1)查询商品;(2)创建订单;(3)扣减库存;(4)更新订单;(5)付款;(6)卖家发货;秒杀业务的特性(1)低廉价格;(2)大幅推广;(3)瞬时售空;(4)一般是定时上架;(5)时间短、瞬时并发量高;2、秒杀技术挑战假设某网站秒杀活动只推出一件商品,预计会吸引1万人参加活动,也就说最大并发请求数是10000,秒杀系统需要...
2019-06-24 17:33:37
76906
1
原创 千万级调用的电商服务架构实现总览
618相信有不少小伙伴也参加了这场促销抢购吧,但作为一个程序员,你又知道促销期千万级别访问量背后的架构及实现吗?电商是典型的促销拉动式场景,也是价格战驱动的场景。618和双11都是典型的促销活动。其实都是在抢用户、扩市场占有率。在这样的场景之下,对秒杀、抢购是很热衷的玩法。促销式的拉动对系统的挑战是什么呢?从上图可以看到:对系统的高可用要求非常高的,需要99.99%的高可用性。快速...
2019-06-21 10:48:11
70090
原创 千万并发,阿里淘宝的 14 次架构演进之路!
写在前面本文以淘宝为例,介绍从一百个并发到千万级并发情况下服务端的架构的演进过程,同时列举出每个演进阶段会遇到的相关技术,让大家对架构的演进有一个整体的认知,文章最后汇总了一些架构设计的原则。 在介绍架构之前,为了避免部分读者对架构设计中的一些概念不了解,下面对几个最基础的概念进行介绍: 分布式 系统中的多个模块在不同服务器上部署,即可称为分布式系统,如Tomcat和数据库分别部...
2019-06-19 12:32:59
89598
原创 值得记录的真实面试经验(for 高级)
在此感谢minus同学分享自己的面经供广大同学参考写在前面本文是楼主前两个月 N 家公司的面试经历,总结复盘了面试现场,个人认为干货还是不少,在此和大家分享。ps:至于标题所说的薪资,是面试过程中一个有意思的小插曲,但是确有其事,不是标题党。。。这里先卖个关子,请各位看官往后看!^_^自报家门先做个自我介绍,楼主坐标帝都,5年经验,跳槽之前在一家...
2019-06-12 11:18:46
83274
原创 设计权限管理模块
我们比较常见的就是基于角色的访问控制,用户通过角色与权限进行关联。简单地说,一个用户拥有多个角色,一个角色拥有多个权限。这样,就构造成“用户-角色-权限”的授权模型。在这种模型中,用户与角色之间、角色与权限之间,通常都是多对多的关系。如下图:基于这个,得先了解角色到底是什么?我们可以理解它为一定数量的权限的集合,是一个权限的载体。例如:一个论坛的“管理员”、“版主”,它们都是角色。但是...
2019-05-15 12:25:58
89217
原创 计算机是如何运算的
1.问题 1、键盘输入一个数字计算机背后发生了什么? 2、计算机如何实现加法运算? 3、计算机如何在庞大的内存里面找数据? 4、计算机如何执行代码? 5、编程的本质是什么? 2.关键词继电器,串联,并联,振荡器,计数器,地址,内存,RAM阵列,锁存器,累加器,触发器,开关3.全文概要计算机编码技术,从理论上论述了如何用最简单的0和1来表...
2019-04-29 10:38:05
143792
5
原创 JVM虚拟机实现机制
1.问题 1、JAVA文本文件如何被翻译成CLASS二进制文件? 2、如何理解CLASS文件的组成结构? 3、虚拟机如何加载使用类文件的生命周期? 4、虚拟机系列诊断工具如何使用? 5、虚拟机内存淘汰机制? 6、虚拟机指令集架构? 2.关键词编译,魔数,常量池,字面量,数据表,堆栈,方法区,程序计数器,内存引用,内存溢出,垃圾回收器,...
2019-04-29 10:24:41
118951
原创 spring容器的本质探究下
5.8对象实例化到了这一步,我们已经完整的把所有xml配置文件里面定义的对象转化到BeanFactory里面的beanDefinitionMap,但是此时IOC容器还没开始实例化这些对象,接下来就是实例化的过程。回顾一下我们分析入口的refresh()方法,里面的finishBeanFactoryInitialization(beanFactory)就是对象的实例化过程,我们重点来分析这个方法...
2019-04-24 12:37:11
128535
原创 spring容器的本质探究上
1.问题 1、什么是spring容器? 2、spring容器如何启动? 3、spring容器的本质是什么? 4、spring容器在spring家族中扮演什么地位? 5、spring容器设计思想? 2.关键词容器,会话,上下文,工厂,注册表,解析,定义,初始化,懒加载BeanFactory,BeanDefinition,ApplicationCo...
2019-04-22 15:09:47
200849
原创 分布式架构知识梳理
1.问题 1、何为分布式何为微服务? 2、为什么需要分布式? 3、分布式核心理论基础,节点、网络、时间、顺序,一致性? 4、分布式是系统有哪些设计模式? 5、分布式有哪些类型? 6、如何实现分布式? 2.关键词节点,时间,一致性,CAP,ACID,BASE,P2P,机器伸缩,网络变更,负载均衡,限流,鉴权,服务发现,服务编排,降级,熔...
2019-04-21 18:55:01
152144
4
原创 高并发编程知识梳理
1.问题 1、什么是线程的交互方式? 2、如何区分线程的同步/异步,阻塞/非阻塞? 3、什么是线程安全,如何做到线程安全? 4、如何区分并发模型? 5、何谓响应式编程? 6、操作系统如何调度多线程? 2.关键词同步,异步,阻塞,非阻塞,并行,并发,临界区,竞争条件,指令重排,锁,amdahl,gustafson3.全文概要由于...
2019-04-21 17:00:27
136360
原创 IDEA 阅读源码绝技
1、定位到方法实现类publicstaticObjectgetBean(String name){ returnapplicationContext.getBean(name);}如以上代码,IDEA如何跳转到getBean方法的实现类?在IDEA中,CTRL+鼠标左击默认会跳到方法所在的接口,如getBean就会跳到BeanFactory接口...
2019-04-17 12:11:39
151970
1
原创 JVM核心知识体系
1.问题 1、如何理解类文件结构布局? 2、如何应用类加载器的工作原理进行将应用辗转腾挪? 3、热部署与热替换有何区别,如何隔离类冲突? 4、JVM如何管理内存,有何内存淘汰机制? 5、JVM执行引擎的工作机制是什么? 6、JVM调优应该遵循什么原则,使用什么工具? 7、JPDA架构是什么,如何应用代码热替换? 8、JVM...
2019-04-15 13:26:06
155940
1
原创 偏向锁
流程讲解当JVM启用了偏向锁模式(JDK6以上默认开启),新创建对象的MarkWord中的ThreadId为0,说明此时处于可偏向但未偏向任何线程,也叫做匿名偏向状态(anonymouslybiased)。偏向锁逻辑1.线程A第一次访问同步块时,先检测对象头MarkWord中的标志位是否为01,依此判断此时对象锁是否处于无所状态或者偏向锁状态(匿名偏向锁);2...
2019-04-15 13:07:37
155059
13
原创 锁原理之synchronized
蜀国有一个皇帝叫蜀道难,他比较难伺候,别的皇帝早朝都是在大殿上同时接见所有大臣,共商国是。他不一样,他说早朝你们不要有事没事都跑过来叽叽喳喳,有事则来,无事则该干啥干啥去,然后安排太监每天早上在大门口守着,每次只允许一个大臣进来汇报情况。“你敢多放进来一个就砍脑袋的干活。”太监赶紧下跪,说“谪!”。第一天,太监传话钦天监求见,皇帝允了,钦天监上殿报曰:“臣禀报,昨日我司夜观星象,西方忽现王星...
2019-04-15 13:03:06
129849
1
原创 每秒1.28万亿行,最快的分布式关系数据库MemSQL又破记录了!
众所周知,如果交互式响应时间小于四分之一秒,那么人们会获得令人难以置信的满意度。当你提供的响应时间下降到大约四分之一秒时,交互对用户而言是即时的。但是,由于大数据集和并发需求,给所有客户提供的速度水平似乎无法实现。因此,开发人员有时会采用快捷方式,例如预计算。这可能会导致严苛的用户体验,如果稍微调整一些查询,例如添加一个额外的分组列,则它会突然变慢几个数量级。这也意味着你的交互不是实时的,即不...
2019-03-29 14:27:41
139259
原创 为什么Map桶中个数超过8才转为红黑树
因为,大部分的文章都是分析链表是怎么转换成红黑树的,但是并没有说明为什么当链表长度为8的时候才做转换动作。本人第一反应也是一样,只能初略的猜测是因为时间和空间的权衡。要弄明白这个问题,我们首先要明白为什么要转换,这个问题比较简单,因为Map中桶的元素初始化是链表保存的,其查找性能是O(n),而树结构能将查找性能提升到O(log(n))。当链表长度很小的时候,即使遍历,速度也非常快,但是当链表长...
2019-03-29 09:47:17
167006
17
原创 据说一个比Spring Boot快44倍的Java框架!
官方号称可以比 Spring Boot 快 44 倍,居然这么牛逼,有这么神奇吗?今天带大家来认识一下。这个框架名叫:light-4j。官网简介:A fast, lightweight and more productive microservices framework很简单,翻译过来就是:一个快速、轻量级和更高效的微服务框架。为什么叫light-4j?全称应...
2019-03-28 12:38:43
129610
原创 基于SpringBoot微服务异常处理最佳实践
本文通过对RESTful WebService中异常处理的几个关键点如自定义错误码、定制错误消息、自定义异常、全局异常处理进行介绍,分享本人对Spring异常处理和对RESTful API设计的思考和实践。随着前后端分离,前端工程化,后端微服务化,越来越多的应用都开始倾向于使用 RESTful API 为各种各样的客户端提供服务。设计一套优雅的 API 服务,需要诸多考量,而异常处理往往被忽视...
2019-03-27 09:21:09
153045
4
原创 HTTP协议知识梳理
面试一年多,每当我问起面试者对HTTP的了解时,个个回答令我瞠目结舌,这些开发者都有3-5年的经验。请不要让我叫你野生程序员,是时候了解HTTP了,让我们当个正规军。起因面试官:请问你了解HTTP协议吗?前端开发:这不是应该后端清楚的吗?后端开发:这不是前端知道的吗?面试官:……我们先一本正经的来了解下HTTP(不包含传输层TCP),然后总结其中的精华回复面试官。...
2019-03-27 09:08:38
126511
原创 系统运行缓慢,CPU 100%,以及Full GC次数过多问题的排查思路
处理过线上问题的同学基本上都会遇到系统突然运行缓慢,CPU 100%,以及Full GC次数过多的问题。当然,这些问题的最终导致的直观现象就是系统运行缓慢,并且有大量的报警。本文主要针对系统运行缓慢这一问题,提供该问题的排查思路,从而定位出问题的代码点,进而提供解决该问题的思路。对于线上系统突然产生的运行缓慢问题,如果该问题导致线上系统不可用,那么首先需要做的就是,导出jst...
2019-03-20 16:51:46
101450
原创 一些有用的资源分享(工具+电子书)
一、 工具类1、 图片相关工具TinyPNG:https://tinypng.com/免费的在线图片压缩工具,压缩率高,无损画质,直接拖拽使用,很方便。picdiet:https://www.picdiet.com/zh-cn独特且强悍的JavaScript 算法,能极速压缩 80% 的图片大小,而不损害其质量。SmartResize:https://www.smar...
2019-03-06 17:23:58
104039
原创 现在java面试这么变态了吗?——记2019年3月初某次面试
都说金三银四是跳槽的好时间,这不就有同事准备出去试试。结果,面试java工程师,做的题目笔试直接拿着硕士研究生复试笔试卷上来刚了。我想说,现在java工程师的入行都必须是硕士了?我想说的是,某所招人,也是很随意了。研究生复试的,是不是关注我博客的就有福了呢...
2019-03-06 17:14:56
144352
4
dartsdk-windows-x64-2.9.0-release.zip
2020-09-07
dartsdk-windows-ia32-release.zip
2020-09-06
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人