自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(94)
  • 资源 (1)
  • 收藏
  • 关注

原创 让你的程序跑的更快更好

1. 代码相关遇到性能问题,首先应该做的是检查否与业务代码相关——不是通过阅读代码解决问题,而是通过日志或代码,排除掉一些与业务代码相关的低级错误。性能优化的最佳位置,是应用内部。譬如,查看业务日志,检查日志内容里是否有大量的报错产生,应用层、框架层的一些性能问题,大多数都能从日志里找到端倪(日志级别设置不合理,导致线上疯狂打日志);再者,检查代码的主要逻辑,如 for 循环的不合理使用、NPE、正则表达式、数学计算等常见的一些问题,都可以通过简单地修改代码修复问题。别动辄就把...

2020-06-28 11:08:09 417

原创 redis多维度排序实现

基于redis非关系型缓存数据库的多维度阅读排行榜实现。本发明属于JAVA语言集成redis缓存数据库解决在阅读系统中多维度分析客户排行的榜单排行名问题。背景技术(字数:500以上)定义:redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash(哈希类型)。这些数据类型都支持push/pop...

2020-05-18 17:06:22 2167

原创 如何正确设置Java线程池参数?

如何正确设置Java线程池参数? 前言:在上篇文章我已经给读者介绍了Java线程池的基本使用,以及参数的定义。你真的了解Java线程池参数的含义吗 本文我们更进一步,来聊聊在实际的工作中如何设置Java线程池参数的。当我们自定义线程池的时候 corePoolSize、maximum...

2020-04-24 16:26:17 2540

转载 能力&陷阱

和一位姐姐聊天,自从暑假开始,她就在和女儿的手机作斗争。女儿一天到晚捧着手机打游戏,一会儿是团战,一会儿是演奏大师。她说,最抓狂的就是看她手指飞快地在飞机上跳动,好像永远都停不下来似的。就算成年人也有这种体会,开始玩一个游戏,投入时间越多,操作越熟练,拿到的分数越多,你也就越难停下来。工作中也是如此,越熟练的事情,我们做的越是停不下来。上司同时交代你两件事,一件是你每天都在做的、对结果也很有把握的事;一件对你来说是陌生的、需要投入时间去学习、也不一定能达成目的的,你会

2021-08-10 17:36:46 238

转载 高并发秒杀细节

前言高并发下如何设计秒杀系统?这是一个高频面试题。这个问题看似简单,但是里面的水很深,它考查的是高并发场景下,从前端到后端多方面的知识。秒杀一般出现在商城的促销活动中,指定了一定数量(比如:10个)的商品(比如:手机),以极低的价格(比如:0.1元),让大量用户参与活动,但只有极少数用户能够购买成功。这类活动商家绝大部分是不赚钱的,说白了是找个噱头宣传自己。虽说秒杀只是一个促销活动,但对技术要求不低。下面给大家总结一下设计秒杀系统需要注意的9个细节。1 瞬时高并发一般在秒杀时间点(比

2021-08-10 11:00:29 1694 3

转载 “我愿意主动加班,不是为了钱”

最近关于大小周的讨论挺多。所谓大小周,即一周工作5天,下一周工作6天交替循环的工作制度。工作5天的为大周,工作6天的为小周。先是字节跳动发起员工内部调研,然后是快手直接宣布取消大小周,接着许多企业纷纷表示要认真研究这个议题。当字节跳动发起调研时,很多人觉得肯定是一边倒支持取消,毕竟互联网公司996的传统已经被口诛笔伐了这么久。但最后的结果让人惊讶:三分之一的人支持取消,还有三分之一的人不同意取消。是的,大家没有看错。超过30%的员工,坚决反对取消大小周。并且还在网络上发言,称自己热爱

2021-07-29 16:03:38 350

转载 redis怎么那么快?

Redis 为什么这么快?很多人只知道是 K/V NoSQl 内存数据库,单线程……这都是没有全面理解 Redis 导致无法继续深问下去。这个问题是基础摸底,我们可以从 Redis 不同数据类型底层的数据结构实现、完全基于内存、IO 多路复用网络模型、线程模型、渐进式 rehash…...到底有多快?我们可以先说到底有多快,根据官方数据,Redis 的 QPS 可以达到约 100000(每秒请求数),有兴趣的可以参考官方的基准程序测试《How fast is Redis?》,地址:https

2021-07-13 09:47:02 131

原创 阿里一面,给了几条SQL,问需要执行几次树搜索操作?

前言有位朋友去阿里面试,他说面试官给了几条查询SQL,问:需要执行几次树搜索操作?我朋友当时是有点懵的,后来冷静思考,才发现就是考索引的几个基础知识点~~ 本文我们分九个索引知识点,一起来探讨一下一、面试官考点之索引是什么? 索引是一种能提高数据库查询效率的数据结构。它可以比作一本字典的目录,可以帮你快速找到对应的记录。 索引一般存储在磁盘的文件中,它是占用物理空间的。 正所谓水能载舟,也能覆舟。适当的索引能提高查询效率,过多的索引会影响数据库表的插入和更新功能。

2021-03-15 15:18:33 146

原创 Redis不是一直号称单线程效率也很高吗,为什么又采用多线程了?

Redis是目前广为人知的一个内存数据库,在各个场景中都有着非常丰富的应用,前段时间Redis推出了6.0的版本,在新版本中采用了多线程模型。因为我们公司使用的内存数据库是自研的,按理说我对Redis的关注其实并不算多,但是因为Redis用的比较广泛,所以我需要了解一下这样方便我进行面试。总不能候选人用过Redis,但是我非要问人家阿里的Tair是怎么回事吧。所以,在Redis 6.0 推出之后,我想去了解下为什么采用多线程,现在采用的多线程和以前版本有什么区别?为什么这么晚才使用多线程?R

2021-03-15 11:01:30 136

原创 MySQL索引原理

索引,可能让好很多人望而生畏,毕竟每次面试时候 MySQL 的索引一定是必问内容,哪怕先撇开面试,就在平常的开发中,对于 SQL 的优化也而是重中之重。可以毫不夸张的说,系统中 SQL 的好坏,是能直接决定你系统的快慢的。但是在优化之前大家是否想过一个问题?那就是:我们优化的原则是什么?优化SQL的理论基础是什么?虽然说实践出真知,但是我更相信理论是支撑实践的基础,因为我们不可能毫无目的的去盲目的实践,因为这样往往事倍功半。所以说了这么多只想告诉大家,在真正的开始索引优化之前,我们需要彻底搞明白

2021-03-05 10:16:35 2076 2

原创 jedis和lettuce连接redis方案性能对比

针对redis连接池获取连接出现长时间等待问题虽然现在通过调整线程池大小和去掉调用是否联通号码逻辑暂时起到了一些作用,但是却是治标不治本的方案。因此秉着事情必须要有闭环的宗旨。今天花了一天时间做了如下的压力测测试。 知识储备: jedis客户端连接方式是基于tcp的阻塞式连接方式。 lettuce客户端连接方式是基于netty的多路复用异步非阻塞的连接方案。(目前业界解决高并发大数据的问题的思路) ...

2020-06-03 17:52:23 9769 6

原创 一文读懂 druid连接池

起因: 最近微服务项目组新增了一个工程newbusiness顾名思义新业务工程,可是项目上线以来每天都会出现关于新业务超时响应的监控告警。接口整整耗时26秒,由于微服务超时时间设置为2秒,所以响应超时。 问题分析: 通过对日志的分析发现接口的耗时全部集中在数据库连接的获取和销毁上,因此初步推断是数据库连接池的问题,项目组连接池组件用的是阿里的druid组件,配置如下: type: co...

2020-05-22 10:46:02 1357

原创 系统如何达到秒杀而不被薅羊毛

秒杀系统相信很多人见过,比如京东或者淘宝的秒杀,小米手机的秒杀。那么秒杀系统的后台是如何实现的呢?我们如何设计一个秒杀系统呢?对于秒杀系统应该考虑哪些问题?如何设计出健壮的秒杀系统?本期我们就来探讨一下这个问题:目录一:秒杀系统应该考虑的问题二:秒杀系统的设计和技术方案三:系统架构图四:总结一:秒杀应该考虑哪些问题1.1:超卖问题分析秒杀的业务场景,最重要的有一点就是超卖问题,假如备货只有100个,但是最终超卖了200,一般来讲秒杀系统的价格都比较低...

2020-05-19 10:56:36 800

原创 RabbitMQ延迟消息的极限是多少?

最近开发碰到了使用过程中发现,延迟消息没有效果,消息直接就被消费了的情况。因此就继续深入研究了一下问题原因,在此记录下来,给碰到类似问题的童鞋们参考。问题定位因为不是所有的消息都出现了没有延迟消息效果的因素,通过有问题的消息特征,大致猜测可能是延迟时间过长导致了消息延迟失败。为了验证这个原因,先拿之前文章中的例子,来测试一下延迟时间是否与问题直接相关。对之前的延迟消息使用样例(文末的Git仓库中可以获取完整代码)接口做一下微改,增加了一个请求参数delay来控制延迟时间: @GetM

2020-05-09 11:13:53 1530

转载 为何你一身本领,却还是逃不过写烂代码的命运?

编写高质量可维护的代码既是程序员的基本修养,也是能决定项目成败的关键因素,本文试图总结出问题项目普遍存在的共性问题并给出相应的解决方案。1. 程序员的宿命?程序员的职业生涯中难免遇到烂项目,有些项目是你加入时已经烂了,有些是自己从头开始亲手做成了烂项目,有些是从里到外的烂,有些是表面光鲜等你深入进去发现是个“焦油坑”,有些是此时还没烂但是已经出现问题征兆走在了腐烂的路上。...

2020-05-08 16:08:03 424 2

原创 一个现网bug让我彻底弄懂微服务日志链路追踪

一个现网bug让我彻底弄懂微服务日志链路追踪 需求: 异步帮批量用户订购话费套餐,成功发送短信,失败记录信息。 问题描述: 根据运营人员及测试反馈最近有一批500个账户的套餐开通中,失败数+成功数=499,还有一笔订单凭空消失了...

2020-04-29 14:57:45 722

原创 Nacos构建配置中心

Nacos构建配置中心我们已经学会了,如何利用Nacos实现服务的注册与发现。同时,也介绍了在Spring Cloud中,我们可以使用的几种不同编码风格的服务消费方式。接下来,我们再来学习一下Nacos的另外一个重要能力:配置管理。简介Nacos除了实现了服务的注册发现之外,还将配置中心功能整合在了...

2020-04-24 15:52:32 1377 2

转载 支付宝亿万级流量的高可用架构

自 2008 年双 11 以来,在每年双 11 超大规模流量的冲击上,蚂蚁金服都会不断突破现有技术的极限。2010 年双 11 的支付峰值为 2 万笔/分钟,到 2017 年双 11 时这个数字变为了 25.6 万笔/秒。2018 年双 11 的支付峰值为 48万笔/秒,2019 年双 11 支付峰值为 54.4 万笔/秒,创下新纪录,是 2009 年第一次双 11 的 1360倍。...

2020-04-24 15:52:02 658

原创 你真的了解Java线程池参数的含义吗

如何在Java中正确使用线程池1. 工作原理当一个任务提交至线程池之后,1. 线程池首先判断核心线程池里的线程是否已经满了。如果不是,则创建一个新的工作线程来执行任务。否则进入2.2. 判断工作队列是否已经满了,倘若还没有满,将线程放入工作队列。否则进入3.3. 判断线程池里的线程是否都在执行任务。如果...

2020-04-24 15:50:09 325

转载 96秒100亿!阿里到底做了什么?

双 11 刚过,1分36秒100亿,5分25秒超过300亿,12分49秒超500亿,最终当天交易额定格在2684亿元人民币,同比增长约25.7%……那么,阿里到底做了哪些技术方案,才有这样的的成绩呢?本文以设计淘宝网的后台架构为例,介绍从一百个并发到千万级并发情况下服务端的架构的演进过程同时列举出每个演进阶段会遇到的相关技术,让大家对架构的演进有一个整体的认知。文章最后汇总...

2020-01-03 11:24:58 167

原创 Spring Cloud Alibaba-Nacos构建共享配置

Nacos构建共享配置对于Nacos作为配置中心的使用,通过之前的几篇博文,我们已经介绍了如何在Nacos中创建配置内容、Nacos配置内容与Spring应用配置之间的对应关系以及实战中多环境下的配置管理方案。但是,我们实际应用过程中还会经常碰到这样的问题:有时候我们会对应用的配置根据具体作用做一些拆...

2019-11-11 10:09:50 186

原创 高并发编程(四)高并发解决方案从前端到数据库

1. 高并发和大流量解决方案高并发架构相关概念  并发:在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行;在互联网时代,所讲的并发,高并发通常是指并发访问,也就是在某个时间点,有多少个访问同时到来。通常一个系统的日PV在千万以上,有可能是一个高并发的系统。有的公司完全不走技术路线,全靠机...

2019-10-12 17:01:43 1871

转载 LongAdder原理解析

一般都是CAS对一个变量进行操作,但Doug Lea大神觉得不满足,又写了一个LongAdder先看下传统的AtomicLong的原理.png再来看下LongAdder的LongAdder原理图.png即将一个变量进一步拆分到一个base数组中,减少资源竞争@sun.misc.Contended static final class Cell { ...

2019-10-11 17:29:57 187

原创 高并发编程(三)如何编写线程安全的代码

高并发编程(三)如何编写线程安全的代码线程安全类线程安全性定义:当多个线程访问某个类的时候,不管运行环境采用何种调度方式或者这些进程如何交替执行,并且在主调代码中不需要采用额外的同步或者是协同,这个类都能表现出正确的行为,那么就称这个类是线程安全的原子性:提供了互斥访问,同一时刻只能有一个线程来对它进行操作。A...

2019-10-11 11:22:07 575

原创 Springboot整合Mybatis实现多数据源动态切换

Springboot整合Mybatis实现多数据源动态切换1 业务背景最近一个项目中需要在oracle数据库中读取用户信息,需要在mysql中读取业务数据。2 解决方案多数据源配置在比较大型的项目中,数据库可能会分布在多台服务器上,例如有若干个数据库服务是专门存放日志数据的,又有若干个数据库服务是专门存放业务数据、读写分离的等等.....

2019-10-09 16:37:26 977 1

原创 MyBatis-Plus结合Swagger实现接口代码及文档自动生成工具(实践篇)

MyBatis-Plus结合Swagger实现接口代码及文档自动生成工具(实践篇) 通过前面三篇文章的介绍自动化生成代码工具我们理论上是已经实现了,可是到底行不行好不好读者心里还是个大大的疑问?这篇文章我就来一步步带大家使用工具快速构建自己的项目。 第一步: 访问我...

2019-09-29 11:53:13 3387 2

原创 MyBatis-Plus结合Swagger实现接口代码及文档自动生成工具(终极篇-插件化工具)

MyBatis-Plus结合Swagger实现接口代码及文档自动生成工具(终极篇-插件化工具)插件(Plugin)是什么不用多说。常用的软件,例如Eclipse、Photoshop、VisualStudio,都支持插件扩展。插件可以动态给软件添加一些功能,也可以随时删除,这样的好处是任何人都可以给这个软件进行功能上的扩展,而不用去改软件本身的代码。适用场景...

2019-09-27 16:49:33 458

原创 MyBatis-Plus结合Swagger实现接口代码及文档自动生成工具(进阶篇-基于数据库)

MyBatis-Plus结合Swagger实现接口代码及文档自动生成工具(进阶篇-基于数据库) 在文章MyBatis-Plus结合Swagger实现接口代码及文档自动生成工具(基础篇-基于配置文件)中,已经实现的功能有基于excel配置文件自动生成基础接口代码(增删改查、分页)以及基于Swagger风格的接口文档。唯一需要使用者做的就是按章...

2019-09-27 15:17:24 732

原创 MyBatis-Plus结合Swagger实现接口代码及文档自动生成工具(基础篇-基于配置文件)

MyBatis-Plus结合Swagger实现接口代码及文档自动生成工具(基础篇-基于配置文件) 需求背景: 近日公司接到一个新项目,时间比较紧急,需求比较简单无非是简单的增删改查分页查询等等,业务复杂度不高。唯一的要求就是快速正常交付,并且需要提供文档给到客户端进行开发联调。 常规的需求分析步骤是: 1:根据需求...

2019-09-23 17:21:10 2086

原创 高并发编程(二)创建线程的12种姿势

高并发编程(二)创建线程的12种姿势 JDK1.5创建线程的6种姿势 姿势1、2: 继承Thread并重写run()方法,Thread类中的start方法会去调用系统的方法执行相应的线程。实际上Thread也是实现了Runable接口的,从该类的文档中我们能找到。 ...

2019-09-17 15:24:54 152

原创 高并发编程(一)

高并发编程(一) 概念: 并发:同时拥有两个或多个线程,如果程序在单核处理器上运行,多个线程将交替地换入或者换出内存,这些线程是同时“存在”的,每个线程都处于执行过程中的某个状态,如果运行在多核处理器上,此时,程序中的每个线程都将分配到一个处理器上,因此可以同时运行。...

2019-09-11 16:24:00 1120

原创 Liunx常用命令

系统信息监控/查看 ps是ProcessStatus的缩写,ps命令用来列出系统中当前运行的那些进程的快照。 -a显示同一终端下的所有程序 -A显示所有进程 -e等于“-A” -f显示程序间的关系,pid&ppid -H显示树状结构 -u指定(当前)用户的所有进程 示例 ps -ef ps -aux ...

2019-09-10 17:25:51 95

原创 设计模式之观察者模式

设计模式之观察者模式定义:  在对象之间定义了一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象会收到通知并自动更新。大白话:  其实就是发布订阅模式,发布者发布信息,订阅者获取信息,订阅了就能收到信息,没订阅就收不到信息。模式原理模式讲解:抽象被观察者角色:也就是一个抽象主题,...

2019-09-10 11:07:17 145

原创 设计模式之代理模式

设计模式之代理模式定义:代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。通俗的来讲代理模式就是我们生活中常见的中介。举个例子来说明:假如说我现在想买一辆二手车,虽然我可以自己去找车源,做质量检测等一系列的车辆过户流程,但是这确实太浪费我得时间和精力了。我只...

2019-09-09 17:58:33 152

原创 设计模式之建造者模式

设计模式之建造者模式 定义: 创建者模式又叫建造者模式,是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。创建者模式隐藏了复杂对象的创建过程,它把复杂对象的创建过程加以抽象,通过子类继承或者重载的方式,动态的创建具有复合属性的对象。 适用场景:隔离复杂对象的创建...

2019-09-09 14:51:14 124

原创 适配器模式在springMVC的应用

适配器模式在springMVC的应用 通过设计模式之适配器模式一文我们了解了适配器的三种模式以及它的简单实现,本文将简化springMVC的流程来讲述适配器模式的控制器转发实现。 用过springMVC的同志都知道,它的核心代码在于DispatcherServlet类中的doDispatch方...

2019-09-09 10:38:40 569

原创 设计模式之适配器模式

设计模式之适配器模式 1.适配器模式简介适配器模式:将一个类的转接口转换成客户希望的另外一个接口,适配器模式使得原来由于接口不兼容的而不能的工作的哪些类可以工作,主要作用就是兼容应用场景: 编码解码、 一拖三充电头、HDMI 转 VGA在spring的体现:Spring AOP 模块对 Bef...

2019-09-09 10:04:31 185

原创 设计模式之策略模式(如何优雅的去除if-else逻辑代码)

设计模式之策略模式(如何优雅的去除if-else逻辑代码) 项目要求: 新增一个数据接收的接口,接收来自不同渠道的数据进行个性化的处理。目前已知的渠道有360、百度,以后还会不断扩展渠道,要求必须在同一个接口处理所有数据接收请求。 大多数的实现是这样的: /** * 点击数据匹配接口 */ ...

2019-09-06 11:18:12 5559

转载 Zookeeper+Dubbo安装与搭建

Zookeeper+Dubbo安装与搭建本文有借鉴:https://www.cnblogs.com/UncleYong/p/10737119.html(一)zookeeper是什么?(动物园)ZooKeeper是一种分布式协调服务,用于管理大型主机。在分布式环境中协调和管理服务是一个复杂的过程。ZooKeeper通过其简单的架构和API解决了这个问题。ZooKeeper允许开发人员专注于核...

2019-09-03 14:42:02 1505

转载 Spark从零到一 (五)Spark 调优

Spark 调优正文摘抄自:https://tech.meituan.com/spark-tuning-basic.html前言在大数据计算领域,Spark已经成为了越来越流行、越来越受欢迎的计算平台之一。Spark的功能涵盖了大数据领域的离线批处理、SQL类处理、流式/实时计算、机器学...

2019-09-03 10:38:26 138

服务端并发分布式架构演进之路.ppt

服务端从单机到分布式的点点滴滴,一步步随着问题不断演化到如今的微服务、云计算再到淘宝阿里巴巴的亿万级高可用集群架构。从前端到后台知道数据库让你充分了解分布式架构。

2020-05-29

空空如也

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

TA关注的人

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