自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 资源 (2)
  • 收藏
  • 关注

原创 Java8 Stream:2万字20个实例,玩转集合的筛选、归约、分组、聚合

Java8 Stream先贴上几个案例,水平高超的同学可以挑战一下:从员工集合中筛选出salary大于8000的员工,并放置到新的集合里。统计员工的最高薪资、平均薪资、薪资之和。将员工按薪资从高到低排序,同样薪资者年龄小者在前。将员工按性别分类,将员工按性别和地区分类,将员工按薪资是否高于8000分为两部分。用传统的迭代处理也不是很难,但代码就显得冗余了,跟Stream相比高下立判。Java 8 是一个非常成功的版本,这个版本新增的,配合同版本出现的 ,给我们操作集合(Collection)提供了极大的便

2022-07-07 00:24:33 183

原创 全网最详细的 Maven 教程,安排

前言:目前所有的项目都在使用maven,可是一直没有时间去整理学习,这两天正好有时间,好好的整理一下。① 一个项目就是一个工程如果项目非常庞大,就不适合使用package来划分模块,最好是每一个模块对应一个工程,利于分工协作。借助于maven就可以将一个项目拆分成多个工程② 项目中使用jar包,需要“复制”、“粘贴”项目的lib中同样的jar包重复的出现在不同的项目工程中,你需要做不停的复制粘贴的重复工作。借助于maven,可以将jar包保存在“仓库”中,不管在哪个项目只要使用引用即可就行。③ jar包需要

2022-07-07 00:23:46 146 1

原创 小白都能看懂的 Spring Boot 单元测试

单元测试的目的: 测试当前所写的代码是否是正确的, 例如输入一组数据, 会输出期望的数据; 输入错误数据, 会产生错误异常等. 在单元测试中, 我们需要保证被测系统是独立的( 没有任何的 DOC), 即当被测系统通过测试时, 那么它在任何环境下都是能够正常工作的. 而不需要关注例如数据库服务, Web 服务等组件。进行过开发的同学都了解,在进行后台开发时不仅需要完成系统功能的开发,为了保证系统的健壮性还要同步编写对应的单元测试类。基于开发的项目中的test包用于存放单元测试类,同时也提供了对应的注解来进行

2022-07-05 00:58:55 174

原创 面试官问:消息被重复消费,怎么避免?有什么好的解决方案?

消息中间件是分布式系统常用的组件,无论是异步化、解耦、削峰等都有广泛的应用价值。我们通常会认为,消息中间件是一个可靠的组件——这里所谓的可靠是指,只要我把消息成功投递到了消息中间件,消息就不会丢。即消息肯定会至少保证消息能被消费者成功消费一次,这是消息中间件最基本的特性之一。也就是我们常说的“AT LEAST ONCE”,即消息至少会被“成功消费一遍”。一个消息 M 发送到了消息中间件,消息投递到了消费程序 A。A 接受到了消息,然后进行消费。但在消费到一半的时候程序重启了,这时候这个消息并没有标记为消费成

2022-07-05 00:58:02 276

原创 消息幂等(去重)通用解决方案

消息中间件是分布式系统常用的组件,无论是异步化、解耦、削峰等都有广泛的应用价值。我们通常会认为,消息中间件是一个可靠的组件——这里所谓的可靠是指,只要我把消息成功投递到了消息中间件,消息就不会丢失,即消息肯定会至少保证消息能被消费者成功消费一次,这是消息中间件最基本的特性之一,也就是我们常说的“AT LEAST ONCE”,即消息至少会被“成功消费一遍”。举个例子,一个消息M发送到了消息中间件,消息投递到了消费程序A,A接受到了消息,然后进行消费,但在消费到一半的时候程序重启了,这时候这个消息并没有标记为消

2022-07-05 00:56:43 166

原创 基于Nginx实现灰度发布与AB测试

背景单位的云办公相关系统没有成熟的平滑发布方案,导致每一次发布都是直接发布,dll文件或配置文件的变更会引起站点的重启。 云办公系统的常驻用户有10000+,即使短短半分多钟,也会收到一堆投诉。基于此,我们梳理了一套平滑发布的方案。1、跟nginx代理服务器约定了一个健康检查的接口2、通过接口返回的http状态码来让ngx是否分流用户请求(这个我们单位的技术部那边有标准的做法)3、根据提供的这个服务健康检查的接口:nginx判断只要某个实例的接口返回5xx的状态码,即把该实例下线(nginx不会把流量转发到

2022-07-05 00:55:46 254

原创 Java 内存泄漏排查,新技能Get

大家好,我是鸭哥。背景前些日子小组内安排值班,轮流看顾我们的服务,主要做一些报警邮件处理、Bug 排查、运营 issue 处理的事。工作日还好,无论干什么都要上班的,若是轮到周末,那这一天算是毁了。不知道是公司网络广了就这样还是网络运维组不给力,网络总有问题,不是这边交换机脱网了就是那边路由器坏了,还偶发地各种超时,而我们灵敏地服务探测服务总能准确地抓住偶现的小问题,给美好的工作加点料。好几次值班组的小伙伴们一起吐槽,商量着怎么避过服务保活机制,偷偷停了探测服务而不让人发现(虽然也并不敢)。前些天我就在周末

2022-07-05 00:54:41 64

原创 19 张图秒懂 Spring Cloud 全家桶

大家好,我是后端架构师。本文用 19 张思维导图描述微服务相关的概念和架构,建议收藏。包括什么是微服务、架构演进、微服务架构、微服务解决方案、SpringCloud概览、Eureka、Ribbon、Feign、Hystrix、Zuul、Gateway、Config、Bus、OAuth2、Sleuth、什么是SpringCloud、SpringCloud主要组件。1.1、架构演进架构的发展历程是从单体式架构,到分布式架构,到SOA架构,再到微服务架构。图1:架构演进单体架构:未做任何拆分的Java W

2022-07-05 00:53:38 139

原创 Java 开发常用的 Linux 命令知识积累

写在前面基本操作Linux关机,重启查看系统,CPU信息建立软连接rpm相关sshkey命令重命名同步服务器时间后台运行命令强制活动用户退出查看命令路径查看进程所有打开最大fd数配置dnsnslookup,查看域名路由表last, 最近登录信息列表设置固定ip查看进程内加载的环境变量查看进程树找到服务器进程查看进程启动路径添加用户, 配置sudo权限强制关闭进程名包含xxx的所有进程vim操作打开只读文件,修改后需要保存时(不用切换用户即可保存的方式)查看磁盘, 文件目录基本信息wc命令常用压缩, 解压缩命

2022-07-05 00:51:20 73

原创 [精选] 设计数据表时,时间类型 datetime、bigint、timestamp,你会用哪个?

数据库中可以用datetime、bigint、timestamp来表示时间,那么选择什么类型来存储时间比较合适呢?通过程序往数据库插入50w数据数据表:其中time_long、time_timestamp、time_date为同一时间的不同存储格式实体类usersdao层接口 测试类往数据库插入数据sql查询速率测试 通过datetime类型查询:耗时:0.171通过timestamp类型查询耗时:0.351通过bigint类型查询耗时:0.130s

2022-07-05 00:50:04 191

原创 分库分表:入门必备

大家好,我是松哥,今天给大家分享分库分表系列的第1篇:入门篇当一张表的数据达到几千万时,查询一次所花的时间会变长。业界公认MySQL单表容量在 1千万 以下是最佳状态,因为这时它的索引树高在3~5之间。不管是IO瓶颈,还是CPU瓶颈,最终都会导致数据库的活跃连接数增加,进而逼近甚至达到数据库可承载活跃连接数的阈值。在业务Service来看就是,可用数据库连接少甚至无连接可用。接下来就可以想象了吧(并发量、吞吐量、崩溃)。第一种:磁盘读IO瓶颈,热点数据太多,数据库缓存放不下,每次查询时会产生大量的IO,降低

2022-07-05 00:48:57 84

原创 20 个最常用的 Git 命令,你都会用吗?

在这篇文章中,我将介绍在使用 Git 时最常使用的 20 个命令。以下是这些Git命令:git configgit initgit clonegit addgit commitgit diffgit resetgit statusgit rmgit loggit showgit taggit branchgit checkoutgit mergegit remotegit pushgit pullgit stash下面让我们逐一介绍。Git 命令git config[用法:git config –globa

2022-07-05 00:46:48 80

原创 Spring Boot 实现各种参数校验,写得太好了,建议收藏

简单使用引入依赖requestBody参数校验requestParam/PathVariable参数校验统一异常处理进阶使用分组校验嵌套校验集合校验自定义校验编程式校验快速失败(Fail Fast)@Valid和@Validated区别实现原理requestBody参数校验实现原理方法级别的参数校验实现原理之前也写过一篇关于Spring Validation使用的文章,不过自我感觉还是浮于表面,本次打算彻底搞懂Spring Validation。本文会详细介绍Spring Validation各种场景下的最

2022-07-03 10:29:08 142

原创 图解 23 种设计模式

就一个类而言,应该仅有一个引起它变化的原因。如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱他的设计,当变化发生时,设计会遭受到意想不到的破坏;软件设计真正要做的许多内容就是发现职责并把那些职责相互分离。软件实体应该可以扩展,但不可修改。该原则是面向对象设计的核心所在,遵循这个原则可以带来面向对象技术所声称的可维护、可扩展、可复用、灵活性好。设计人员必须对于他设计的模块应该对哪种变化封闭做出选择,必须先猜测出最有可能发生的变化

2022-07-03 10:27:34 84

原创 微服务下分布式事务模式的详细对比

作为 Red Hat 咨询架构师,我有幸参与了大量客户项目。虽然每个客户都面临自己特有的挑战,但是我发现其中有一些共同点。大多数项目都想知道如何协调对多个记录系统的写入。要回答这个问题,一般会涉及长篇累牍的解释,包括双重写入(dual write)、分布式事务、现代化的替代方案以及每种方式可能出现的故障情况和缺点。这样做通常会让客户意识到,将单体应用拆分为微服务架构是一个漫长和复杂的过程,而且通常都需要权衡。本文不会深入介绍事务的细节,而是总结了向多个数据源协调写入操作的主要方式和模式。我知道,你可能对这些

2022-07-03 10:24:48 94

原创 我司Spring Boot 项目打包 + Shell 脚本部署详细总结,太有用了

本篇和大家分享的是 Spring Boot 打包并结合 Shell 脚本命令部署,重点在分享一个shell 程序启动工具,希望能便利工作;profiles指定不同环境的配置maven-assembly-plugin打发布压缩包分享shenniu_publish.sh程序启动工具linux上使用shenniu_publish.sh启动程序profiles指定不同环境的配置通常一套程序分为了很多个部署环境:开发,测试,uat,线上 等,我们要想对这些环境区分配置文件,可以通过两种方式:通过applicat

2022-07-03 10:23:01 115

原创 SpringBoot + Redis:模拟 10w 人的秒杀抢单

本篇内容主要讲解的是redis分布式锁,这个在各大厂面试几乎都是必备的,下面结合模拟抢单的场景来使用她;本篇不涉及到的redis环境搭建,快速搭建个人测试环境,这里建议使用docker;本篇内容节点如下:如何删除锁模拟抢单动作(10w个人开抢)jedis的nx生成锁对于java中想操作redis,好的方式是使用jedis,首先pom中引入依赖:对于分布式锁的生成通常需要注意如下几个方面:创建锁的策略: redis的普通key一般都允许覆盖,A用户set某个key后,B在set相同的key时同样能成功,

2022-07-03 10:20:51 287

原创 Spring Boot 项目鉴权的 4 种方式

文章介绍了spring-boot中实现通用auth的四种方式,包括 传统AOP、拦截器、参数解析器和过滤器,并提供了对应的实例代码,最后简单总结了下他们的执行顺序。最近一直被无尽的业务需求淹没,没时间喘息,终于接到一个能让我突破代码舒适区的活儿,解决它的过程非常曲折,一度让我怀疑人生,不过收获也很大,代码方面不明显,但感觉自己抹掉了 java、Tomcat、Spring 一直挡在我眼前的一层纱。对它们的理解上了一个新的层次。好久没输出了,于是挑一个方面总结一下,希望在梳理过程中再了解一些其他的东西。由于 J

2022-07-03 10:14:30 198

原创 一口气说出 Redis 16 个常见使用场景

目录缓存数据共享分布式分布式锁全局ID计数器限流位统计购物车用户消息时间线timeline消息队列抽奖点赞、签到、打卡商品标签商品筛选用户关注、推荐模型排行榜String类型例如:热点数据缓存(例如报表、明星出轨),对象缓存、全页缓存、可以提升热点数据的访问数据。String 类型,因为 Redis 是分布式的独立服务,可以在多个应用之间共享例如:分布式Session org.springframework.session ...

2022-07-03 10:10:01 57

原创 负载均衡 LVS vs Nginx 对比,还傻傻分不清?

今天总结一下负载均衡中LVS与Nginx的区别,好几篇博文一开始就说LVS是单向的,Nginx是双向的,我个人认为这是不准确的,LVS三种模式中,虽然DR模式以及TUN模式只有请求的报文经过Director,但是NAT模式,Real Server回复的报文也会经过Director Server地址重写:首先要清楚的一点是,LVS是一个四层的负载均衡器,虽然是四层,但并没有TCP握手以及分手,只是偷窥了IP等信息,而Nginx是一个七层的负载均衡器,所以效率势必比四层的LVS低很多,但是可操作性比LVS高,后

2022-07-03 10:04:06 232

原创 Java集合类框架详解

集合可以看作是一种容器,用来存储对象信息。所有集合类都位于java.util包下,但支持多线程的集合类位于java.util.concurrent包下。Java集合类主要由两个根接口Collection和Map派生出来的,Collection派生出了三个子接口:List、Set、Queue,因此Java集合大致也可分成List、Set、Queue、Map四种接口体系(注意:Map不是Collection的子接口)。其中:List代表了有序可重复集合,可直接根据元素的索引来访问;Set代表无序不可重复集合,只

2022-07-03 10:00:45 86

原创 Java 中的 BigDecimal 正确用法,80% 的人都用错了

一、BigDecimal概述二、BigDecimal常用构造函数三、BigDecimal常用方法详解四、BigDecimal格式化五、BigDecimal常见异常六、BigDecimal总结Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数,但在实际应用中,可能需要对更大或者更小的数进行运算和处理。一般情况下,对于那些不需要准确计算精度的数字,我们可以直接使用Float和Double处理,但是Doub

2022-07-03 09:57:23 471

原创 SpringBoot+Nginx实现负载均衡

前言本篇文章主要介绍的是Nginx如何实现负载均衡。负载均衡介绍介绍在介绍Nginx的负载均衡实现之前,先简单的说下负载均衡的分类,主要分为硬件负载均衡和软件负载均衡 ,硬件负载均衡是使用专门的软件和硬件相结合的设备,设备商会提供完整成熟的解决方案,比如F5,在数据的稳定性以及安全性来说非常可靠,但是相比软件而言造价会更加昂贵;软件的负载均衡以Nginx这类软件为主,实现的一种消息队列分发机制。简单来说所谓的负载均衡就是把很多请求进行分流,将他们分配到不同的服务器去处理。比如我有3个服务器,分别为A、B、C

2022-06-21 01:13:54 377

原创 MySQL 这 6 个文件,90% 的人都没认全

我们都知道 MySQL 是基于磁盘存储的数据库,因此其配置及数据肯定是存在磁盘中的。但 MySQL 到底有哪些相关的磁盘文件,它们的作用又是什么呢?相信不少人还不是很了解,今天我们就来介绍一下 MySQL 文件体系的六大文件。内容有点多,可以点赞收藏再看,方便下次查看哦!MySQL 相关的配置及数据文件主要有如下 6 个,分别是:参数配置文件日志文件socket 文件pid 文件MySQL 表结构文件存储引擎文件参数配置文件即 MySQL 实例启动时,数据库会去读取的一个配置参数文件,用来寻找数据库的各种文

2022-06-20 13:40:54 705

原创 改造BeanUtils,优雅实现List数据拷贝

BeanUtils.copyProperties();确实为我们做了很多事情,虽然不能完美完成深拷贝,但是对于 po、vo、dto 的拷贝已经足够用了。但是其还是有一些不够完美的地方。不足几点如下:不能拷贝 list,而拷贝 list 的情况又大量存在,因此会有许多重复代码。 有一些简单的查询,仅仅需要转换一下 vo 也需要 new Vo()。 这种拷贝方式是没有返回值的,jdk8 支持 stream() 操作之后,支持不是很友好,不方便 lambda 表达式的使用,因此我们决定通过

2022-06-20 13:32:24 281

原创 面试必问:Redis 如何实现库存扣减操作?

Java后端精选专注于Java技术,MySQL,JavaWeb,Git,Linux,Nginx,IDEA,数据结构,高并发,多线程,面试题,GitHub项目精选等相关内容,欢迎关注。在日常开发中有很多地方都有类似扣减库存的操作,比如电商系统中的商品库存,抽奖系统中的奖品库存等。使用mysql数据库,使用一个字段来存储库存,每次扣减库存去更新这个字段。还是使用数据库,但是将库存分层多份存到多条记录里面,扣减库存的时候路由一下,这样子增大了并发量,但是还是避免不了大量的去访问数据库来更新库存。将库存放到redi

2022-06-19 13:50:31 730

原创 SpringBoot 集成 WebSocket,实现后台向前端推送信息

前言在一次项目开发中,使用到了Netty网络应用框架,以及MQTT进行消息数据的收发,这其中需要后台来将获取到的消息主动推送给前端,于是就使用到了MQTT,特此记录一下。2什么是websocket?WebSocket协议是基于TCP的一种新的网络协议。它实现了客户端与服务器全双工通信,学过计算机网络都知道,既然是全双工,就说明了服务器可以主动发送信息给客户端。这与我们的推送技术或者是多人在线聊天的功能不谋而合。为什么不使用HTTP 协议呢?这是因为HTTP是单工通信,通信只能由客户端发起,客户端请求一下,服

2022-06-19 13:38:06 551

原创 BigDecimal使用不当,造成P0事故

我们在使用金额计算或者展示金额的时候经常会使用BigDecimal,也是涉及金额时非常推荐的一个类型,BigDecimal自身也提供了很多构造器方法,这些构造器方法使用不当可能会造成不必要的麻烦甚至是金额损失,从而引起事故资损。接下来我们看下收银台出的一起事故。收银台计算商品金额报错,导致订单无法支付。P013:44 接到报警,订单支付失败,支付可用率降至60%13:50 迅速回滚上线代码,恢复正常;14:20 review代码,预发布验证发现问题点14:58 修改问题代码上线,线上恢复首先我们先用一段代码

2022-06-19 13:35:07 234

原创 有了HTTP,为什么还要RPC?

很长时间以来都没有怎么好好搞清楚 RPC(即 Remote Procedure Call,远程过程调用)和 HTTP 调用的区别,不都是写一个服务然后在客户端调用么?这里请允许我迷之一笑~Naive!本文简单地介绍一下两种形式的 C/S 架构,先说一下他们最本质的区别,就是 RPC 主要是基于 TCP/IP 协议的,而 HTTP 服务主要是基于 HTTP 协议的。我们都知道 HTTP 协议是在传输层协议 TCP 之上的,所以效率来看的话,RPC 当然是要更胜一筹啦!下面来具体说一说 RPC 服务和 HTTP

2022-06-19 13:29:11 56

原创 几行代码,解决 SpringBoot 接口恶意刷新和暴力请求

在实际项目使用中,必须要考虑服务的安全性,当服务部署到互联网以后,就要考虑服务被恶意请求和暴力攻击的情况,下面的教程,通过和针对在一定时间内访问的次数来将ip禁用,可以根据自己的需求进行相应的修改,来打打自己的目的;首先工程为springboot框架搭建,不再详细叙述。首先创建一个自定义的拦截器类,也是最核心的代码:代码中redis的使用的是分布式锁的形式,这样可以最大程度保证线程安全和功能的实现效果。代码中设置的是1S内同一个接口通过同一个ip访问5次,就将该ip禁用1个小时,根据自己项目需求可以自

2022-06-19 13:21:09 101

原创 如何保证 Redis 缓存与数据库双写一致性?

在做系统优化时,想到了将数据进行分级存储的思路。因为在系统中会存在一些数据,有些数据的实时性要求不高,比如一些配置信息。 基本上配置了很久才会变一次。而有一些数据实时性要求非常高,比如订单和流水的数据。所以这里根据数据要求实时性不同将数据分为三级。第1级:订单数据和支付流水数据;这两块数据对实时性和精确性要求很高,所以不添加任何缓存,读写操作将直接操作数据库。第2级:用户相关数据;这些数据和用户相关,具有读多写少的特征,所以我们使用redis进行缓存。第3级:支付配置信息;这些数据和用户无关,具有数据量小,

2022-06-19 12:54:36 188

单词速记秘籍(1200词)

单词速记秘籍,英文语音口语,和发音入门,音语单词拼读规则,英语元音和辅音读音规则,让你3小时快速掌握一门语言!!

2022-07-03

微服务架构分布式课程pdf

微服务架构分布式课程,包括分布式事务和分布式架构全套教程和解决方案,微服务架构的分布式事务解决方案,包括springboot , springcloud 全家桶5大组件的使用和源码教程,Spring Cloud Eureka , Spring Cloud Ribbon , Spring Cloud Feign, Spring Cloud Hystrix , Spring Cloud Config , Spring Cloud Zuul , Spring Cloud Bus 帮你快速掌握java 分布式架构工程,快速提升薪水绝对超值!!

2022-07-03

空空如也

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

TA关注的人

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