自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(23)
  • 收藏
  • 关注

原创 Java开发者每天都在用的验证码功能,竟然是这么实现的「已开源」

今天给大家推荐的这个项目是「Happy Captcha」,一款易于使用的 Java 验证码软件包,旨在花最短的时间,最少的代码量,实现 Web 站点的验证码功能。Happy Captcha 提供了图片和动画两种展现形式,验证码内容包括:中文(收录 3500 个常用汉字)阿拉伯数字 (09)中文数字 (零至九)中文大写数字 (零至玖)数字与字母混合 (09-az-AZ)数字与小写字母混合 (09-az)数字与大写字母混合 (09-AZ)纯小写字母纯大写字母大小写字母混合运算表达式(阿拉

2020-05-31 21:06:33 280

原创 一次漫长的dubbo网关内存泄露排查经历

背景介绍在微服务架构中,不同的微服务有不同的网络地址,而客户端则是通过统一的地址进行调用,在客户端与服务端之间需要有一个通信的桥梁,这就产生了微服务网关。微服务网关可以连接客户端与微服务,提供统一的认证方式,管理接口的生命周期,做更好的负载均衡、熔断限流,提供方便的监控,提供统一的风控入口。今天要介绍的主角是dubbo微服务网关,来自公司内部自研的提供http协议到dubbo协议转换的微服务网关,跟本文相关的就是它的核心点:dubbo泛化调用。dubbo官网对泛化调用的描述为“泛化接口调用方式主要用于

2020-05-30 21:29:15 418

原创 Redis 的缓存穿透、缓存击穿和缓存雪崩

NoSQL 开发中或多或少都会用到,也是面试必问知识点。最近这几天的面试每一场都问到了。但是感觉回答的并不好,还有很多需要梳理的知识点。这里通过几篇 Redis 笔记整个梳理一遍,后面再加上面试题。1、Redis可能的问题Redis 缓存的使用,极大的提升了应用程序的性能和效率,特别是数据查询方面。但同时,它也带了一些问题。其中,最要害的是问题,就是数据一致性的问题,从严格意义上讲,这个问题无解。如果对数据的一致性要求很高,那么久不能使用缓存。另外一些典型的问题就是,缓存穿透、缓存雪崩缓存击穿,目前,

2020-05-28 17:08:04 491

原创 如何预防 Elasticsearch 服务器入侵事件的发生

如果您身在技术圈,很可能在某个时刻已经正面遭遇过“服务器入侵”。即使您身处圈外,也可能会对致使私密个人数据最终落入不法之手的服务器/数据入侵和安全漏洞有所耳闻。此类数据可能包括信用信息、社会安全号码,以及其他您想要保密且不希望落入暗网的信息。所有软件都必须应对可能出现的入侵或攻击。Elasticsearch,这个由 Elastic 开发的开源软件项目也不例外。未在 Elasticsearch 中安全存储的数据也曾发生过泄露、丢失或被盗的情况。#如何预防 Elasticsearch 服务器入侵事件的发生

2020-05-28 16:24:47 547

原创 没错,你离分布式搜索只差一个Elasticsearch入门

学习真的是一件令人开心的事情,上次分享了 Redis 入门的文章后,收到了很多小伙伴的鼓励,比如说:“哎呀,不错呀,二哥,通俗易懂,十分钟真的入门了”。瞅瞅,瞅瞅,我决定再接再厉,入门一下 Elasticsearch,因为我们公司的商城系统升级了,需要用 Elasticsearch 做商品的搜索。不过,我首先要声明一点,我对 Elasticsearch 并没有进行很深入的研究,仅仅是因为要用,就学一下。但作为一名负责任的技术博主,我是用心的,为此还特意在某某时间上买了一门视频课程,作者叫阮一鸣。

2020-05-27 16:52:12 247 1

原创 并不复杂,只需4步搞定Shiro集成redis实现会话共享

集群的分布式场景中,我们需要把众多服务的会话状态保持一致,常见的就是把会话信息保存到redis中实现共享,那么你知道shiro集成redis实现会话共享有多简单吗?真的只需要4步!在一些分布式场景中,比如一个简单负载均衡场景,一个nginx,反向代理到两个tomcat,tomcat运行这同样的项目,那么这时候,服务的会话需要共享,因为我们已经使用了shiro来完成我们的认证授权逻辑,那么shiro完成登录之后,如何让另外一个服务同时也是登录状态呢?我们延用上篇文章的项目代码,使用两个端口8080、80

2020-05-23 21:46:55 739 1

转载 面试官:你读过Dubbo的源码,能给我说一下它的路由机制是如何实现的吗?

转自:ytaohttps://mp.weixicn.qq.com/s/d9mGYZW5oNiSgpcuOD-5dgDubbo 路由机制是在服务间的调用时,通过将服务提供者按照设定的路由规则来决定调用哪一个具体的服务。#路由服务结构Dubbo 实现路由都是通过实现 RouterFactory 接口。当前版本 dubbo-2.7.5 实现该接口类如下:路由实现工厂类是在 router 包下由于 RouterFactory 是 SPI 接口,同时在获取路由 RouterFactory#getRou

2020-05-22 17:26:20 372

原创 权限系统控制到按钮级别开源推荐 Spring Boot-Shiro-Vue

大伙再搞权限系统的时候,权限控制到菜单很容易,但是很多情况要控制到按钮接口级别,这个时候设计就要研究下了。方案好几种,锋哥这里推荐一个不错的开源方案,大伙可以参考学习下。Spring Boot-Shiro-Vue实现;github开源地址:https://github.com/Heeexy/SpringBoot-Shiro-Vue系统演示地址:http://g.heeexy.com/Spring Boot-Shiro-Vue提供一套基于SpringBoot-shiro-vue的权限管理思路

2020-05-21 16:58:35 1802

原创 前华南谷歌架构师讲的SpringIOC和AOP就是不同,这回我是真的理解了

我们是在使用Spring框架的过程中,其实就是为了使用IOC(Inversion of Control)和AOP(Aspect-Oriented Programming),这两个是Spring的核心。Spring是什么Spring框架是一个开放源代码的J2EE应用程序框架,是一个开放源代码的设计层面框架,它解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用。Spring是一个开源容器框架,它集成各类型的工具,通过核心的Bean factory实现了底层的类的实例化和生命

2020-05-20 22:21:47 398

原创 面试造飞机系列:面对Redis持久化连环Call,你还顶得住吗?

本文脑图Redis是一个基于内存的非关系型的数据库,数据保存在内存中,但是内存中的数据也容易发生丢失。这里Redis就为我们提供了持久化的机制,分别是RDB(Redis DataBase)和AOF(Append Only File)。Redis在以前的版本中是单线程的,而在6.0后对Redis的io模型做了优化,io Thread为多线程的,但是worker Thread仍然是单线程。在Redis启动的时候就会去加载持久化的文件,如果没有就直接启动,在启动后的某一时刻会继续持久化内存中产生的数据。

2020-05-20 16:49:18 104

原创 抓包神器:Wireshark 实例分析TCP三次握手过程

目录wireshark介绍wireshark不能做的wireshark VS Fiddler同类的其他工具什么人会用到wiresharkwireshark 开始抓包wireshark 窗口介绍wireshark 显示过滤保存过滤过滤表达式封包列表(Packet List Pane)封包详细信息 (Packet Details Pane)wireshark与对应的OSI七层模型TCP包的具体内容实例分析TCP三次握手过程这篇文章介绍另一个好用的抓包工具 Wireshark,

2020-05-19 21:09:08 616

原创 Kafka/RocketMQ 多线程消费时如何保证消费顺序?

之前在讨论顺序消息的一些知识,看到有个读者的留言如下:这个问题问得非常棒,由于在之前的文章中并没有提及到,因此我在这篇文章中单独讲解,本文将从消费顺序性这个问题出发,深度剖析 Kafka/RocketMQ 消费线程模型。Kafkakafka 的消费类 KafkaConsumer 是非线程安全的,因此用户无法在多线程中共享一个 KafkaConsumer 实例,且 KafkaConsumer 本身并没有实现多线程消费逻辑,如需多线程消费,还需要用户自行实现,在这里我会讲到 Kafka 两种多线程消费模

2020-05-18 17:49:17 4145 1

原创 RabbitMQ 死信机制真的可以作为延时任务这个场景的解决方案吗?

关于延时任务,在业务场景中实在是太常见了。比如订单,下单 xx 分钟未支付就要将订单关闭。比如红包, XX 分钟未抢,则红包失效。那么说起延时任务的实现方案的话,可能有很多人第一时间会想到轮询,即设置定时任务,而稍有经验的开发者就知道。轮询这机制会给数据库带来很大压力,小业务当然无所谓。如果是大量数据要处理的业务用轮询肯定是不行的。而且你如果要保证高可用,就又得牵扯出分布式定时任务。怎么搞都很麻烦。很多小机灵鬼知道可以用消息队列来实现。确实,MQ 的异步性和解耦性在延时任务的这种场景下可以爆发出很强的战

2020-05-15 11:40:32 230

原创 dubbo微服务之间流水号的隐式传递

做开发的人都知道流水号这个概念,有业务流水号,交易流水号,请求流水号等等,各种流水号。无论是啥名字的流水号,目的都是为了在某个维度,让一系列动作有一个唯一的标识。后面方便查日志,查问题。系统间交互可以防止扯皮。比如交易流水号,唯一标识一笔交易,这边所说的交易可以是无业务含义的请求,也可以是账务交易。如果是标识无业务含义的请求。一般会在交易开始时生成一个32位或者64位的唯一编码。这个编码会在交易的纵向流程中传递,可以用参数传递,也可以放到上下文 Context 中,还可以放到&nbs

2020-05-14 18:00:40 222

原创 dubbo微服务之间流水号的隐式传递

做开发的人都知道流水号这个概念,有业务流水号,交易流水号,请求流水号等等,各种流水号。无论是啥名字的流水号,目的都是为了在某个维度,让一系列动作有一个唯一的标识。后面方便查日志,查问题。系统间交互可以防止扯皮。比如交易流水号,唯一标识一笔交易,这边所说的交易可以是无业务含义的请求,也可以是账务交易。如果是标识无业务含义的请求。一般会在交易开始时生成一个32位或者64位的唯一编码。这个编码会在交易的纵向流程中传递,可以用参数传递,也可以放到上下文 Context 中,还可以放到&nbs

2020-05-14 14:20:43 348

原创 Redis的自白:我为什么在单线程的这条路上越走越远?

我是 Redis,今年 11 岁了~曾几何时我是辣么的单纯,辣么的可爱,而如今我竟背叛了当初“誓言”,决心在多线程这条路上义无反顾的一路狂奔,没错我就是你们口中那个既可爱又迷人的 Redis,你可以叫我小 R…R ????。一波骚操作结束,我们开始今天的正文。我们知道在 Redis 4.0 之后就陆陆续续添加了一些多线程的功能,难道单线程不香了吗?单线程慢吗?Redis 的单线程曾几何时还是我们炫耀的资本,优雅又不失高效的设计,让无数的追求者为之着迷。你要问我排第几?Nginx 是我大哥,Nod

2020-05-14 11:05:51 196 1

原创 你必须要知道的Java 异常的捕获与处理(详解附源码)

一、异常的产生异常是程序之中导致程序中断的一种指令流,异常一旦出现并且没有进行合理处理的话,那么程序就将中断执行。下面,通过两个程序来进行异常产生问题的对比。(1)不产生异常的程序:public class Test { public static void main(String args[]) { System.out.println("1、除法计算开始。"); int result = 10 / 2; System.out.printl

2020-05-13 10:41:17 142

原创 Java 多线程启动为什么调用 start() 方法而不是 run() 方法?

多线程在工作中多多少少会用到,启动 多线程调用的是 start() 方法,而不是 run() 方法,这是为什么呢?在探讨这个问题之前,先来了解(复习)一些多线程的基础知识~线程的状态Java 中,定义了 6 种线程状态,在 Thread 类可以找到:// 为了节约空间,我删除了注释public enum State { NEW,//初始状态 RUNNABLE,//运行状态 BLOCKED,// 阻塞状态 WAITING,//等待状态

2020-05-12 10:50:46 914

原创 注意,GitHub发布重大更新,关系到所有程序员!

本周,GitHub 举行了虚拟 GitHub Satellite 活动,微软旗下的 GitHub 公司在会上宣布了其开发者平台的几个新功能,包括两个主要的新功能:GitHub讨论区和GitHub Codespaces。1.GitHub DiscussionsGitHub Discussions是给项目的论坛。尽管GitHub已经允许通过问题和围绕代码进行某种程度的对话,但Discussions旨在实现非结构化的线程对话。他们还提供了问答环节,GitHub指出,它们是维护常见问题解答和其他文档的好地方。.

2020-05-09 11:47:41 272

原创 JAVA并发编程三大Bug源头(可见性、原子性、有序性),彻底弄懂

某日,胖滚猪写的代码导致了一个生产bug,奋战到凌晨三点依旧没有解决问题。胖滚熊一看,只用了一个volatile就解决了。并告知胖滚猪,这是并发编程导致的坑。这让胖滚猪坚定了要学好并发编程的决心。。于是,开始了我们并发编程的第一课。序幕BUG源头之一:可见性刚刚我们说到,CPU缓存可以提高程序性能,但缓存也是造成BUG源头之一,因为缓存可以导致可见性问题。我们先来看一段代码:priva...

2020-05-08 11:55:37 251 1

原创 一个颜值超高,方便使用的开源redis桌面客户端程序

我以前一般建议粉丝用RedisDesktopManager这个工具连接redis;今天介绍一款开源的redis工具-redis-desktop-client,不一定说是推荐用吧,主要还是学习下人家的源码和开源精神。gitee开源地址:https://gitee.com/hedavid/redis-desktop-clientRedis Desktop ClientRedisDeskto...

2020-05-07 11:49:18 567

原创 某生鲜平台面试题:如何保证库存在高并发的场景下是安全的?

一、 问题一件商品只有100个库存,现在有1000或者更多的用户来购买,每个用户计划同时购买1个到几个不等商品。如何保证库存在高并发的场景下是安全的?(1)不多发(2)不少发二、 下单的步骤(1)下单(2)下单同时预占库存(3)支付(4)支付成功真正减扣库存(5)取消订单(6)回退预占库存三、 什么时候进行预占库存?(1)方案一:加入购物车的时候去预占库存(2)方案二:...

2020-05-06 17:45:39 1575

原创 常用的 7 款 MySQL 客户端工具,你值得拥有!

MySQL的管理维护工具非常多,除了系统自带的命令行管理工具之外,还有许多其他的图形化管理工具,这里我介绍几个经常使用的MySQL图形化管理工具,供大家参考。1、phpMyAdminhttp://www.phpmyadmin.net/phpMyAdmin是最常用的MySQL维护工具,是一个用PHP开发的基于Web方式架构在网站主机上的MySQL管理工具,支持中文,管理数据库非常方便。不...

2020-05-06 11:54:46 571

空空如也

空空如也

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

TA关注的人

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