后端
文章平均质量分 89
差点儿码不动
这个作者很懒,什么都没留下…
展开
-
程序员不可不知的Linux性能工具
前言在实际开发中,有时候会收到一些服务的监控报警,比如CPU飙高,内存飙高等,这个时候,我们会登录到服务器上进行排查。本篇博客将涵盖这方面的知识:Linux性能工具。一次线上问题排查模拟背景:服务在平稳运行一段时间后,CPU突然飙高。通过top命令,可以确认下,到底是哪个进程导致CPU飙高了(也许是误报呢?)。可以看到图中PID是2816的进程,CPU使用率非常高。使用top -Hp 2816来对进程下的线程进行观察。图中可以发现,2825这个线程CPU非常原创 2022-01-23 15:22:09 · 283 阅读 · 0 评论 -
架构师才需要知道的知识:如何做容量预估和调优
为了构建高并发、高可用的系统架构,压测、容量预估必不可少,在发现系统瓶颈后,需要有针对性地扩容、优化。结合楼主的经验和知识,本文做一个简单的总结,欢迎探讨。1、QPS保障目标一开始就要明确定义QPS保障目标,以此来推算所需的服务、存储资源。可根据历史同期QPS,或者平时峰值的2到3倍估算。压测目标示例:qps达到多少时,服务的负载正常,如平均响应时间、95分位响应时间、cpu使用率、内存使用率、消费延迟低于多少 不要让任何一个环节成为瓶颈,需考虑服务实例、数据库、Redis、ES、Hbas原创 2022-01-22 16:06:18 · 337 阅读 · 0 评论 -
SpringCloud组件:Ribbon负载均衡策略及执行原理
大家好,我是磊哥。今天我们来看下微服务中非常重要的一个组件:Ribbon。它作为负载均衡器在分布式网络中扮演着非常重要的角色。本篇主要内容如下:在介绍 Ribbon 之前,不得不说下负载均衡这个比较偏僻的名词。为什么说它偏僻了,因为在面试中,聊得最多的是消息队列和缓存来提高系统的性能,支持高并发,很少有人会问负载均衡,究其原因,负载均衡的组件选择和搭建一般都是运维团队或者架构师去做的,开发人员确实很少接触到。不过没关系,我们不止有 CRUD,还要有架构思维。简单来说,负载均衡...原创 2022-01-21 15:18:39 · 998 阅读 · 0 评论 -
Java反射机制实现无关键字执行命令
新建maven项目 + tomcatpom.xml引入servlet<dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>4.0.1</version> </dependency>代码cmd.jsp&l原创 2022-01-13 13:42:54 · 3849 阅读 · 0 评论 -
深入理解Java虚拟机之图解Java内存区域与内存溢出异常
Java内存区域与内存溢出异常运行时数据区域程序计数器用于记录从内存执行的下一条指令的地址,线程私有的一小块内存,也是唯一不会报出OOM异常的区域Java虚拟机栈Java虚拟机栈(Java Virtual Machine Stack)是线程私有的,它的生命周期与线程相同。虚拟机栈描述的是Java方法执行的线程内存模型:每个方法被执行的时候,Java虚拟机都会同步创建一个栈帧(Stack Frame)用于存储局部变量表、操作数栈、动态连接、方法出口等信息。每一个方..原创 2022-01-12 22:08:21 · 304 阅读 · 0 评论 -
Go 分布式令牌桶限流 + 兜底策略
上篇文章提到固定时间窗口限流无法处理突然请求洪峰情况,本文讲述的令牌桶线路算法则可以比较好的处理此场景。工作原理单位时间按照一定速率匀速的生产 token 放入桶内,直到达到桶容量上限。 处理请求,每次尝试获取一个或多个令牌,如果拿到则处理请求,失败则拒绝请求。优缺点优点可以有效处理瞬间的突发流量,桶内存量 token 即可作为流量缓冲区平滑处理突发流量。缺点实现较为复杂。代码实现core/limit/tokenlimit.go分布...原创 2022-01-12 14:28:15 · 4444 阅读 · 0 评论 -
简单了解下类加载过程
类加载器什么是类加载器类加载器是java运行环境的一部分,主要负责动态加载Java类到Java虚拟机的内存空间中,学习类加载器需要掌握java的委派原理(双亲委派机制)。Java语言是一种具有动态性的解释语言,类(CLASS) 只有被加载到 JVM 中后才能运行。当运行指定程序时,JVM会将编译生成的.class文件按照需求和一定的规则加载到内存中,组织成为一个完整的Java应用程序。这个加载的过程是由类加载器来完成的,具体来说,就是由ClassLoader和它的子类来实现的。类加载器本身也是原创 2022-01-11 13:53:32 · 244 阅读 · 0 评论 -
Java中方法重写和方法重载的6个区别?
方法重写(Override)和方法重载(Overload)都是面向对象编程中,多态特性的不同体现,但二者本身并无关联,它们的区别犹如马德华之于刘德华的区别,除了名字长得像之外,其他的都不像。接下来咱们就来扒一下二者的具体区别。1.方法重写方法重写(Override)是一种语言特性,它是多态的具体表现,它允许子类重新定义父类中已有的方法,且子类中的方法名和参数类型及个数都必须与父类保持一致,这就是方法重写。1.1 基本用法方法重写的基本用法如下:/** * 父类中有...原创 2022-01-11 13:42:30 · 1087 阅读 · 0 评论 -
为什么微服务一定要有API网关?
要知道,采用微服务架构的系统本身是由很多的独立服务单元组合起来的。而客户端要调用系统,则必须通过系统提供的各种对外开放的 API 来实现。微服务不能没有网关,就如同 Java 程序员不能没有IDEA、Eclipse。为什么呢?之所以网关对微服务这么重要,主要有以下几点原因:1. 解决 API 放哪里的问题要知道,采用微服务架构的系统本身是由很多的独立服务单元组合起来的。而客户端要调用系统,则必须通过系统提供的各种对外开放的 API 来实现。问题来了,这些 API 要放在哪里呢?.原创 2022-01-10 16:16:42 · 1246 阅读 · 0 评论 -
聊聊索引失效的10种场景,太坑了
前言今天咱们更进一步聊聊索引的相关问题,因为索引是大家都比较关心的公共话题,确实有很多坑。不知道你在实际工作中,有没有遇到过下面的这两种情况:明明在某个字段上加了索引,但实际上并没有生效。 索引有时候生效了,有时候没有生效。今天就跟大家一起聊聊,mysql数据库索引失效的10种场景,给曾经踩过坑,或者即将要踩坑的朋友们一个参考。1. 准备工作所谓空口无凭,如果我直接把索引失效的这些场景丢出来,可能没有任何说服力。所以,我决定建表和造数据,给大家一步步演示效果,尽量做到有理有据原创 2022-01-10 16:03:45 · 125 阅读 · 0 评论 -
程序员,你也该懂系统集成之服务集成交互技术——网络协议了吧?
本文给大家讲解的内容是系统集成服务集成交互技术:网络协议;系统集成系统集成是相对拆分而言的,当巨石型应用拆分为细粒度的微服务后,错综复杂的代码可以分解为独立的模块加以治理。然而,传统应用内部原本基于方法的调用方式可能会转变为跨进程的分布式网络调用方式,网络的不可靠性给服务模块之间的交互带来了复杂性。所以,微服务系统的集成对微服务架构能否成功落地至关重要。微服务架构强调基于HTTP的轻量级的服务交互模式,这一章我们将这种基于请求/响应模式的交互模式与RESTful架构结合,介绍微服务“声明原创 2022-01-10 15:52:49 · 519 阅读 · 0 评论 -
Spring Security 和 Shiro 该如何选择?
要知道Shiro和Spring Security该如何选择,首先要看看两者的区别和对比ShiroApache Shiro是一个强大且易用的Java安全框架,能够非常清晰的处理认证、授权、管理会话以及密码加密。使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。执行流程图片特点易于理解的 Java Security API; 简单的身份认证(登录),支持多种数据源(LDAP,JDBC,Kerberos,Acti原创 2022-01-10 15:50:25 · 107 阅读 · 0 评论 -
替代 Postman + Swagger ~Apifox 才是 YYDS
作为一个后端开发者,我做的大部分项目一般都是基于 Swagger 来管理 API 文档,基于 Postman 来做接口调试,基于 JMeter 来做接口性能测试,基于 RAP 等工具 Mock API 数据。我经常在想:“要不要这么麻烦?有没有一款工具能够直接提供这些功能?经常在不同的工具之间切换来切换去真的很烦呢!”。我在网上找了很久,终于让我找到了一款游戏 API 文档、API 调试、API Mock、API 自动化测试一体化协作平台 —Apifox。Apifox 介绍官方对 Apif.原创 2022-01-10 15:48:29 · 3108 阅读 · 1 评论 -
探究Spring的Bean生命周期~~
源码下载本章节源码github什么是 Spring Bean 的生命周期对于普通的 Java 对象,当 new 的时候创建对象,然后该对象就能够使用了。一旦该对象不再被使用,则由 Java 自动进行垃圾回收。而 Spring 中的对象是 bean,bean 和普通的 Java 对象没啥大的区别,只不过 Spring 不再自己去 new 对象了,而是由 IoC 容器去帮助我们实例化对象并且管理它,我们需要哪个对象,去问 IoC 容器要即可。IoC 其实就是解决对象之间的耦合问题,Sprin..原创 2022-01-08 20:00:48 · 111 阅读 · 0 评论 -
ThreadPoolExecutor系列之状态详解
状态定义线程池ThreadPoolExecutor有两种属性:运行状态和线程数。线程数很好理解,就是池子中有多少线程;运行状态共有5种,分别是RUNNING:运行中, 为初始状态,即刚创建的线程池就是此状态。SHUTDOWN:停工状态,不再接收新任务,但会继续处理队列中的任务。STOP:停止状态,不再接收新任务,不再处理已有任务,且会中断正在执行的任务。TIDYING:清理中,所有任务都停止了,且线程数量也降为0。TERMINATED,终止状态,钩子函数terminated()已经执行原创 2022-01-08 19:56:17 · 1891 阅读 · 0 评论 -
IO系列3-详解IO多路复用(select、poll、epoll)
1.重要概念1.1 IO多路复用I/O多路复用在英文中其实叫 I/O multiplexing。就是我们说的select,poll,epoll,有些地方也称这种IO方式为event driven IO事件驱动IO。就是通过一种机制,一个进程可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。可以基于一个阻塞对象,同时在多个描述符上等待就绪,而不是使用多个线程(每个文件描述符一个线程,每次new一个线程),这样可以大大节省系统资源。所以,I/O 多路复用的原创 2022-01-08 19:51:35 · 865 阅读 · 0 评论 -
Protobuf 为啥比 JSON、XML 牛?
今天,我带大家更深层次的认识认识 Protobuf,如果你对 Protobuf 的用法还不熟悉,直接前往:developers.google.com/protocol-bu…。当对 Protobuf 有了基本的认识后,就会明白了 Protobuf 序列化的数据会比 JSON、XML 传输效率更高。那为啥会高呢?本篇就带着这个问题一探究竟。看表面对于 JSON、XML,为了便于数据传输时的可阅读性,会保留数据的结构化信息,举个 JSON 例子,如下:{ "name": "laomi原创 2022-01-08 19:32:00 · 131 阅读 · 0 评论 -
偷天换日,用 JavaAgent 欺骗你的 JVM
熟悉Spring的小伙伴们应该都对aop比较了解,面向切面编程允许我们在目标方法的前后织入想要执行的逻辑,而今天要给大家介绍的Java Agent技术,在思想上与aop比较类似,翻译过来可以被称为Java代理、Java探针技术。Java Agent出现在JDK1.5版本以后,它允许程序员利用agent技术构建一个独立于应用程序的代理程序,用途也非常广泛,可以协助监测、运行、甚至替换其他JVM上的程序,先从下面这张图直观的看一下它都被应用在哪些场景:看到这里你是不是也很好奇,究竟是什么神仙..原创 2022-01-08 16:38:00 · 279 阅读 · 0 评论 -
为什么?Mybatis的一级和二级缓存都不建议使用?
缓存是在哪起作用的?个人认为mybatis一级缓存和二级缓存并不是一个很好的设计,工作中我基本上也不会使用一级缓存和二级缓存,因为一旦使用不当会造成很多问题,所以我们今天就来看看到底会有什么问题?上一节我们介绍了Executor会调用StatementHandler执行sql,起一个承上启下的作用。Executor的设计是一个典型的装饰者模式,SimpleExecutor,ReuseExecutor是具体实现类,而CachingExecutor是装饰器类。可以看到具体组件实现类有一个原创 2022-01-08 14:57:09 · 255 阅读 · 0 评论 -
Spring Security 和 Shiro 该如何选择?
要知道Shiro和Spring Security该如何选择,首先要看看两者的区别和对比ShiroApache Shiro是一个强大且易用的Java安全框架,能够非常清晰的处理认证、授权、管理会话以及密码加密。使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。执行流程图片特点易于理解的 Java Security API; 简单的身份认证(登录),支持多种数据源(LDAP,JDBC,Kerberos,Acti原创 2022-01-08 14:51:04 · 6286 阅读 · 1 评论 -
探讨-SpringBoot 热部署神器快速重启的秘密
今天咱们来聊聊这个热部署神器spring-boot-devtools的运行原理,看看它是怎么用这个ClassLoader来实现快速重启,帮我们节省时间的!????文章概要文章的主旋律如下????spring.factories我们直接打开spring-boot-devtools源码 ,找到spring.factories文件:我们一般都本地开发调试的,所以就直接看这个LocalDevToolsAutoConfiguration类啦????LocalDevToo...原创 2022-01-08 14:47:09 · 109 阅读 · 0 评论 -
业务系统性能问题分析诊断和性能优化怎么做?
- 前言 -今天谈下业务系统性能问题分析诊断和性能优化方面的内容。这篇文章重点还是谈已经上线的业务系统后续出现性能问题后的问题诊断和优化重点。系统性能问题分析流程我们首先来分析下如果一个业务系统上线前没有性能问题,而在上线后出现了比较严重的性能问题,那么实际上潜在的场景主要来自于以下几个方面。 业务出现大并发的访问,导致出现性能瓶颈 上线后的系统数据库数据日积月累,数据量增加后出现性能瓶颈 其它关键环境改变,比如我们常说的网络带宽影响...原创 2022-01-07 21:57:29 · 301 阅读 · 0 评论 -
7000字和你聊聊如何设计一款高并发架构(快快收藏)
高并发经常会发生在有大活跃用户量,用户高聚集的业务场景中,如:秒杀活动,定时领取红包等。为了让业务可以流畅的运行并且给用户一个好的交互体验,我们需要根据业务场景预估达到的并发量等因素,来设计适合自己业务场景的高并发处理方案。在电商相关产品开发的这些年,我有幸的遇到了并发下的各种坑,这一路摸爬滚打过来有着不少的血泪史,这里进行的总结,作为自己的归档记录,同时分享给大家。服务器架构业务从发展的初期到逐渐成熟,服务器架构也是从相对单一到集群,再到分布式服务。一个可以支持高并发的服务少不了好的服原创 2022-01-07 21:44:47 · 169 阅读 · 0 评论 -
String 既然能做性能调优,我直呼内行
码哥,String 还能优化啥?你是不是框我?莫慌,今天给大家见识一下不一样的 String,从根上拿捏直达 G 点。并且码哥分享一个例子:通过性能调优我们能实现百兆内存轻松存储几十 G 数据。String对象是我们每天都「摸」的对象类型,但是她的性能问题我们却总是忽略。爱她,不能只会简单一起玩耍,要深入了解String的内心深处,做一个「心有猛虎,细嗅蔷薇」的暖男。通过以下几点分析,我们一步步揭开她的衣裳,直达内心深处,提升一个 Level,让String直接起飞:字...原创 2022-01-07 21:13:49 · 111 阅读 · 0 评论 -
Java应用在架构设计时该考虑什么
前言最近公司因业务发展需要建设一个新应用,在架构设计时我也有机会能在提供一些建议,这个过程还是比较有趣的,要找到符合业务场景和用户需求的技术,并且要考虑未来的扩展性,相对来说还是比较困难的。涉及到后端、前端、开发规范、运维等多个方面的大量技术内容,为了以后能在类似的工作中变得更容易,我决定在本期内容中进行整理,列出一些在新项目建设时需要考虑的一些问题。提前声明一下,本期内容在大多数问题下只提供一些解决该问题的技术,对于实现细节不是这期内容的重点;可能存在不完整的地方,主要的技术栈为Java;希望原创 2022-01-04 16:10:56 · 1675 阅读 · 0 评论 -
一篇文章彻底讲明JDBC
1. 啥是 JDBC ?JDBC 全称:Java DataBase Connection复制代码意思就是使用 java 代码连接数据库。但是问题来了,世界上有一堆数据库例如 Mysql、Oracle、mongodb 等,他们的使用方法都不太一样。难道我要连不同的数据库就需要写不同的 java 程序吗?这也太麻烦了。为了解决这个问题,SUN 公司(开发JDK的公司)就决定指定一套接口,这套接口就是使用 java 连接数据库的规范,其实就是 JDBC。而 JD...原创 2022-01-04 16:09:30 · 127 阅读 · 0 评论 -
白话linux操作系统原理
虽然计算机相关专业,操作系统和计算机组成原理是必修课。但是大学时和真正从事相关专业工作之后,对于知识的认知自然会发生变化。还很有可能,一辈子呆在学校的老师们只是照本宣科,自己的理解也不深。所以今天我站在真正排查解决问题时的需要层面,用白话说一说linux操作系统的那些知识。本文整体采用的是类似递归调用的递进式结构。linux内核的本质简单来说如上图所示,咱们平时的应用程序或者linux命令要和操作系统打交道,都要经过一个叫做linux内核的软件。所有的硬件操作都需要通过他。就像古代女子出原创 2022-01-04 16:06:30 · 125 阅读 · 0 评论 -
单点登录(SSO)看这一篇还不够~ 这次不慌了
阅读收获✔️1. 了解单点登录实现原理✔️2. 掌握快速使用xxl-sso接入单点登录功能一、早期的多系统登录解决方案单系统登录解决方案的核心是cookie,cookie携带会话id在浏览器与服务器之间维护会话状态。但cookie是有限制的,这个限制就是cookie的域(通常对应网站的域名),浏览器发送http请求时会自动携带与该域匹配的cookie,而不是所有cookie 既然这样,为什么不将web应用群中所有子系统的域名统一在一个顶级域名下,例如“*.baidu.com”,然后...原创 2022-01-04 16:04:47 · 4069 阅读 · 0 评论 -
加权轮询算法(wrr),这个考点,概率有点高
朝不同往昔,卖惨成为主流旋律,也加剧了从业人员的焦虑。很多人,工作了十来年没碰过算法,如今却不得不像蹲自习室一样,捧起大头书死命去看。呜呼哀哉。最近和不少参加面试的小伙伴交流了一下,发现出现了一个比较高频的算法题。不同于链表、树、动态规划这些有规律可循的算法题,加权轮询算法有很多小的技巧,在实际应用中也比较多。最平滑的Nginx轮询算法,如果你没有见过的话,那自然是永远无法写出来的。所谓的加权轮询算法,其实就是Weighted Round Robin,简称wrr。在我们配置Nginx的upstr原创 2022-01-04 16:02:00 · 1184 阅读 · 0 评论 -
「技术原理」Spring Security的核心功能和加载运行流程的原理分析
SpringSecurity的架构总览Spring Security的简介说明Spring Security对认证、授权和常见漏洞保护提供了全方位支持。使用的版本为:Spring Security 5.5.2。概念释义认证(Authentication):认证就是对试图访问资源的用户进行验证。认证的场景就是 登录 流程,常见的方式就是要求提供用户名和密码,当验证通过的时候,就可以执行授权操作。 授权(Authority):授权就是对资源进行权限设置,只有用户具备相应权限...原创 2022-01-04 15:59:00 · 295 阅读 · 0 评论 -
连接字符串除了“+”还有哪些方法,进来看
在Java中进行字符串连接有各种方法,但是如果在进行连接时,如果我们不注意空对象,那么最后的结果可能会包含不是我们预期的值。在本期内容中,我讲给大家讲述一些在连接字符串时处理空字符串对象的方法。存在的问题假设我们要对一个字符串数据中的元素进行连接,数组中的元素有可能为空,我们先用“+”进行简单的拼接:String[] values = { "小黑 ", null, "", "说 ", "Java!" };String result = "";for (String value...原创 2022-01-04 15:57:01 · 329 阅读 · 0 评论 -
Java锁与非阻塞算法的性能比较与分析+原子变量类的应用
15.原子变量与非阻塞同步机制在java.util.concurrent 包中的许多类, 比如Semaphore 和ConcurrentLinkedQueue, 都提供了比使用Synchronized 更好的性能和可伸缩性. 本部分将介绍这种性能提升的利器:原子变量和非阻塞的同步机制.近年来很多关于并发算法的研究都聚焦在非阻塞算法 (nonblocking algorithms),这种算法使用底层的原子机器指令取代锁 ,比如比较并交换 (compare-and-swap),从而保证数据在并.原创 2022-01-04 15:55:40 · 142 阅读 · 0 评论 -
Protobuf 为啥比 JSON、XML 牛?
今天,我带大家更深层次的认识认识 Protobuf,如果你对 Protobuf 的用法还不熟悉,直接前往:developers.google.com/protocol-bu…。当对 Protobuf 有了基本的认识后,就会明白了 Protobuf 序列化的数据会比 JSON、XML 传输效率更高。那为啥会高呢?本篇就带着这个问题一探究竟。看表面对于 JSON、XML,为了便于数据传输时的可阅读性,会保留数据的结构化信息,举个 JSON 例子,如下:{ "name": "laomi原创 2022-01-04 15:51:35 · 206 阅读 · 0 评论