Java
文章平均质量分 71
程序员杂谈
自我评价
诚实信用 勤奋刻苦 有较强的组织能力和团队意识
责任心强 有创新精神 自学能力较好
精通seo优化
展开
-
Redis缓存击穿、穿透、雪崩解决办法
1、缓存处理流程接收到查询数据请求时,优先从缓存中查询,若缓存中有数据,则直接返回,若缓存中查不到则从DB中查询,将查询的结果更新到缓存中,并返回查询结果,若DB中查不到,则返回空数据 Redis 缓存处理流程.png2、缓存穿透当缓存与数据库中都不存在该数据时,由于当数据库查询不到数据就不会写入缓存,这个时候如果用户不断的恶意发起请求,就会导致这个不存在的数据每...原创 2021-08-15 10:12:37 · 311 阅读 · 0 评论 -
SpringBoot 全局异常捕获
首先还是Maven的相关依赖: <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <java.version>1.8</java.version> <maven.compiler.source>1.8</maven.compiler.source>原创 2021-08-14 11:38:21 · 510 阅读 · 0 评论 -
rabbitmq的延迟消息队列实现
第一部分:延迟消息的实现原理和知识点使用RabbitMQ来实现延迟任务必须先了解RabbitMQ的两个概念:消息的TTL和死信Exchange,通过这两者的组合来实现上述需求。消息的TTL(Time To Live)消息的TTL就是消息的存活时间。RabbitMQ可以对队列和消息分别设置TTL。对队列设置就是队列没有消费者连着的保留时间,也可以对每一个单独的消息做单独的设置。超过了这个时间,我们认为这个消息就死了,称之为死信。如果队列设置了,消息也设置了,那么会取小的。所以一个消息如果被路由到不原创 2021-06-29 18:08:54 · 1649 阅读 · 1 评论 -
linux命令用来查看日志关键字
1、查看日志前 n行: cat 文件名 | head -n 数量 demo: cat test.log | head -n 200 # 查看test.log前200行2、查看日志尾 n行: cat 文件名 | tail -n 数量 demo: cat test.log | tail -n 200 # 查看test.log倒数200行3、根据关键词查看日志 并返回关键词所在行: 方法一:cat 路径/文件名 | grep 关键词 ...原创 2021-06-29 17:40:38 · 1093 阅读 · 0 评论 -
Netty原理-Reactor
1.原生 NIO 存在的问题NIO 的类库和 API 繁杂,使用麻烦:需要熟练掌握 Selector、ServerSocketChannel、 SocketChannel、ByteBuffer等。 需要具备其他的额外技能:要熟悉 Java 多线程编程,因为 NIO 编程涉及到 Reactor 模式,你必须 对多线程和网络编程非常熟悉,才能编写出高质量的 NIO 程序。 开发工作量和难度都非常大:例如客户端面临断连重连、网络闪断、半包读写、失败缓存、网络拥 塞和异常流的处理等等。 JDK NI原创 2021-06-29 13:55:45 · 445 阅读 · 0 评论 -
BIO、NIO、AIO的区别和原理
一、IO模型的知识JAVA BIO:同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程并处理,如果这个连接不做任何事情会造成不必要的开销,当然可以通过线程池机制改善JAVA NIO:同步非阻塞,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有IO请求时才启动一个线程进行处理JAVA AIO(NIO2):异步非阻塞,服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应原创 2021-06-29 12:23:09 · 1127 阅读 · 7 评论 -
《RabbitMQ》如何保证消息不被重复消费
一 重复消息为什么会出现消息重复?消息重复的原因有两个:1.生产时消息重复,2.消费时消息重复。1.1 生产时消息重复由于生产者发送消息给MQ,在MQ确认的时候出现了网络波动,生产者没有收到确认,实际上MQ已经接收到了消息。这时候生产者就会重新发送一遍这条消息。生产者中如果消息未被确认,或确认失败,我们可以使用定时任务+(redis/db)来进行消息重试。@Component@Slf4Jpublic class SendMessage { @Autowired pr原创 2021-06-11 16:14:19 · 351 阅读 · 1 评论 -
java 注解
@Documented在自定义注解的时候可以使用@Documented来进行标注,如果使用@Documented标注了,在生成javadoc的时候就会把@Documented注解给显示出来。@Target 说明了Annotation所修饰的对象范围:Annotation可被用于 packages、types(类、接口、枚举、Annotation类型)、类型成员(方法、构造方法、成员变量、枚举值)、方法参数和本地变量(如循环变量、catch参数)。在Annotation类型的声明中使用了target可更原创 2021-06-08 14:23:06 · 182 阅读 · 0 评论 -
Logstash介绍
简介 Elasticsearch是当前主流的分布式大数据存储和搜索引擎,可以为用户提供强大的全文本检索能力,广泛应用于日志检索,全站搜索等领域。Logstash作为Elasicsearch常用的实时数据采集引擎,可以采集来自不同数据源的数据,并对数据进行处理后输出到多种输出源,是Elastic Stack 的重要组成部分。本文从Logstash的工作原理,使用示例,部署方式及性能调优等方面...原创 2020-01-15 09:53:25 · 1355 阅读 · 0 评论 -
ElasticSearch集群
ES为什么要实现集群在单台ES服务器节点上,随着业务量的发展索引文件慢慢增多,会影响到效率和内存存储问题等。如果使用ES集群,会将单台服务器节点的索引文件使用分片技术,分布式的存放在多个不同的物理机器上,从而可以实现高可用、容错性等。es核心存放的是索引。什么是分片技术将数据拆分成多台节点进行存放。ElasticSearch集群中索引可能由多个分片构成,并且每个分片可以拥有多个...原创 2020-01-14 10:02:13 · 765 阅读 · 0 评论 -
ES分词及文档映射简介
文档(Document):一般搜索引擎的处理对象是互联网网页,而文档这个概念要更宽泛些,代表以文本形式存在的存储对象,相比网页来说,涵盖更多种形式,比如Word,PDF,html,XML等不同格式的文件都可以称之为文档。再比如一封邮件,一条短信,一条微博也可以称之为文档。 文档集合(Document Collection):由若干文档构成的集合称之为文档集合。比如海量的...原创 2020-01-10 10:16:40 · 1790 阅读 · 0 评论 -
Elasticsearch介绍
Lucene是一种高性能、可伸缩的信息搜索(IR)库,在2000年开源,最初由鼎鼎大名的Doug Cutting开发,是基于Java实现的高性能的开源项目。Lucene采用了基于倒排表的设计原理,可以非常高效地实现文本查找,在底层采用了分段的存储模式,使它在读写时几乎完全避免了锁的出现,大大提升了读写性能。 Elasticsearch (ES)是一个基于Lucene构建的开源、分布...原创 2020-01-06 17:13:57 · 407 阅读 · 0 评论 -
kafka消息队列
简介 Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。 对于像Hadoop一样的日志数据和离线分析系统,...原创 2020-01-03 14:08:02 · 448 阅读 · 0 评论 -
RabbitMQ介绍及应用
RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,而群集和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有与代理接口通讯的客户端库。ConnectionFactory、Connection、ChannelConnectionFactory、Connection、Channel都是Rab...原创 2019-12-25 10:55:52 · 418 阅读 · 0 评论 -
分布式事务解决框架(LCN)
事物概念事物特性(ACID)原子性(A)所谓的原子性就是说,在整个事务中的所有操作,要么全部完成,要么全部不做,没有中间状态。对于事务在执行中发生错误,所有的操作都会被回滚,整个事务就像从没被执行过一样。一致性(C)事务的执行必须保证系统的一致性,就拿转账为例,A有500元,B有300元,如果在一个事务里A成功转给B50元,那么不管并发多少,不管发生什么,只要事务执行成功了,那...原创 2019-12-23 14:17:09 · 938 阅读 · 0 评论 -
常见分布式事务解决方案
分布式一致性协议XA接口XA是由X/Open组织提出的分布式事务的规范。XA规范主要定义了(全局)事务管理器(Transaction Manager)和(局部)资源管理器(Resource Manager)之间的接口。XA接口是双向的系统接口,在事务管理器(Transaction Manager)以及一个或多个资源管理器(Resource Manager)之间形成通信桥梁。XA之所以需要引入事...原创 2019-12-20 09:06:28 · 240 阅读 · 1 评论 -
分布式事务基本解决思路
CAP原理由于对系统或者数据进行了拆分,我们的系统不再是单机系统,而是分布式系统,针对分布式系统的CAP原理包含如下三个元素。C:Consistency,一致性。在分布式系统中的所有数据备份,在同一时刻具有同样的值,所有节点在同一时刻读取的数据都是最新的数据副本。A:Availability,可用性,好的响应性能。完全的可用性指的是在任何故障模型下,服务都会在有限的时间内处理完成...原创 2019-12-19 17:49:05 · 245 阅读 · 0 评论 -
系统设计之类的划分
在系统设计过程中,类可以分为三种类型,分别是实体类、边界类和控制类。1. 实体类实体类映射需求中的每个实体,实体类保存需要存储在永久存储体中的信息,例如,在线教育平台系统可以提取出学员类和课程类,它们都属于实体类。实体类通常都是永久性的,它们所具有的属性和关系是长期需要的,有时甚至在系统的整个生存期都需要。实体类是对用户来说最有意义的类,通常采用业务领域术语命名,一般来说是一个名词,在...原创 2019-12-19 14:12:49 · 2354 阅读 · 0 评论 -
UML的结构
UML的结构包括构造块、规则和公共机制三个部分。(1)构造块。UML有三种基本的构造块,分别是事物(thing)、关系(relationship)和图(diagram)。事物是UML的重要组成部分,关系把事物紧密联系在一起,图是多个相互关联的事物的集合。(2)公共机制。公共机制是指达到特定目标的公共UML方法,主要包括规格说明(详细说明)、修饰、公共分类(通用划分)和扩展机制四种。规格说明...原创 2019-12-18 17:08:21 · 3395 阅读 · 0 评论 -
UML 2.0包括14种图
UML 2.0包括14种图,分别列举如下:(1)类图(class diagram)。类图描述一组类、接口、协作和它们之间的关系。在OO系统的建模中,最常见的图就是类图。类图给出了系统的静态设计视图,活动类的类图给出了系统的静态进程视图。(2)对象图(object diagram)。对象图描述一组对象及它们之间的关系。对象图描述了在类图中所建立的事物实例的静态快照。和类图一样,这些图给出系统...原创 2019-12-18 16:46:47 · 4521 阅读 · 0 评论 -
消息队列技术分类介绍
RabbitMQ是使用Erlang编写的一个开源的消息队列,本身支持很多的协议:AMQP,XMPP, SMTP, STOMP,也正是如此,使的它变的非常重量级,更适合于企业级的开发。同时实现了一个经纪人(Broker)构架,这意味着消息在发送给客户端时先在中心队列排队。对路由(Routing),负载均衡(Load balance)或者数据持久化都有很好的支持。Redis是一个Key-V...原创 2019-12-18 10:31:20 · 503 阅读 · 0 评论 -
SpringCloud与Dubbo对比
SpringCloud和Dubbo都是当下流行的RPC框架,各自都集成了服务发现和治理组件。SpringCloud用Eureka做注册中心,Dubbo用Zookeeper注册中心。注册服务Dubbo是基于java接口及Hession2序列化的来实现传输的,Provider对外暴露接口,Consumer根据接口的规则调用。也就是Provider向Zookeeper注册的是接口信息,Consu...原创 2019-12-18 10:13:22 · 659 阅读 · 0 评论 -
Dubbo注册中心简介
一款分布式服务框架,高性能和透明化的RPC远程服务调用方案。主要提供服务治理的解决方案。注册中心主要作用:1、动态加入,服务提供者通过注册中心动态的把自己暴露给消费者,无需消费者逐个更新配置文件。2、动态发现服务,消费者可以动态发现新的服务,无需重启生效。3、统一配置,避免本地配置导致每个服务配置不一致。4、动态调整,注册中心支持参数动态调整,新参数自动更新到所有相关的服务节点。5...原创 2019-12-11 09:44:55 · 378 阅读 · 0 评论 -
SpringCloud之分布式配置中心Spring Cloud Config
简单介绍当要将配置中心部署到生产环境中时,与服务注册中心一样,我们也希望它是一个高可用的应用。Spring Cloud Config实现服务端的高可用非常简单,主要有以下两种方式。传统模式:不需要为这些服务端做任何额外的配置,只需要遵守一个配置规则,将所有的Config Server都指向同一个Git仓库,这样所有的配置内容就通过统一的共享文件系统来维护。而客户端在指定Config Ser...原创 2019-12-09 11:02:32 · 220 阅读 · 0 评论 -
OAuth2.0简介
简介 OAuth2.0(开放授权)是一个关于授权的开放的网络协议。 允许用户让第三方应用访问该用户在某一网站上存储的的资源(如:照片,视频,联系人列表),而无需将用户名和密码提供给第三方应用。 OAuth是一个关于授权(Authorization)的开放网络标准,目前的版本是2.0版。注意是Authorization(授权),而不是Authentication(认证)。...原创 2019-12-04 16:59:48 · 297 阅读 · 0 评论 -
SpringClude--feign介绍
Feign是一个声明式的伪Http客户端,它使得写Http客户端变得更简单。使用Feign,只需要创建一个接口并注解。它具有可插拔的注解特性,可使用Feign 注解和JAX-RS注解。Feign支持可插拔的编码器和解码器。Feign默认集成了Ribbon,并和Eureka结合,默认实现了负载均衡的效果。feign是声明式的web service客户端,它让微服务之间的调用变得更简单了,类似cont...原创 2019-12-03 09:59:37 · 473 阅读 · 0 评论 -
Ribbon负载均衡的简单理解
Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。简单的说,就是在配置文件中列出Load Balancer(简称LB)后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随即连接等)去连接这些机器。我们也很容易使用Ribbon实现自定义的负载均衡...原创 2019-12-03 09:07:10 · 841 阅读 · 0 评论 -
服务网关
网关分类 开放网关 开放api(openApi) 企业需要将自身数据、能力等作为开发平台向外开放,通常会以rest的方式向外提供,最好的例子就是淘宝开放平台、腾讯公司的微信开放平台、蚂蚁金服开放平台。 Open API开放平台必然涉及到客户应用的接入、API权限的管理、调用次数管理等,必然会有一个统一的入口进行管理,这正是API网关可以发挥作用的时候。 微服务...原创 2019-12-02 16:22:24 · 348 阅读 · 0 评论 -
Spring Cloud Eureka 服务注册中心
Eureka注册中心是入门Spring Cloud微服务架构的必学组件,是学习所有其他组件的基础和基石。Eureka介绍Eureka,这里是 Spring Cloud Eureka 的简称,是 Spring Cloud Netflix 组件之一。 包含服务治理(Eureka)包括服务注册、服务发现和服务检测监控等。Eureka基本规则服务启动时会生成服务的基本信息对象Instance...原创 2019-11-29 11:32:36 · 394 阅读 · 0 评论 -
分布式和微服务技术介绍
分布式: 分布式计算是计算机科学中一个研究方向,它研究如何把一个需要非常巨大的计算能力才能解决的问题分成许多小的部分,然后把这些部分分配给多个计算机进行处理,最后把这些计算结果综合起来得到最终的结果。分布式网络存储技术是将数据分散地存储于多台独立的机器设备上。分布式网络存储系统采用可扩展的系统结构,利用多台存储服务器分担存储负荷,利用位置服务器定位存储信息,不但解决了传统集中式存储系统中单...原创 2019-11-29 11:10:57 · 725 阅读 · 0 评论 -
java内存模型
java内存模型(Java Memory Model,JMM)是java虚拟机规范定义的,用来屏蔽掉java程序在各种不同的硬件和操作系统对内存的访问的差异,这样就可以实现java程序在各种不同的平台上都能达到内存访问的一致性。可以避免像c++等直接使用物理硬件和操作系统的内存模型在不同操作系统和硬件平台下表现不同,比如有些c/c++程序可能在windows平台运行正常,而在linux平台却运行有...原创 2019-11-27 16:00:02 · 163 阅读 · 0 评论 -
代理模式
代理模式代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理访问目标对象。 这样好处: 可以在目标对象实现的基础上,增强额外的功能操作。(扩展目标对象的功能)。代理模式的关键点: 代理对象与目标对象。静态代理 1) 代理对象,要实现与目标对象一样的接口; 2) 举例: 保存用户(模拟) D...原创 2019-11-19 15:16:17 · 150 阅读 · 0 评论 -
Spring 简单介绍
什么是Springspring就是把每个bean(实体类)与bean的关系全部交给第三方容器进行管理。那么这个容器就是spring,整个对象的生命周期管理的。spring的核心 ioc(控制)、di(依赖)、aop(面向切面编程)di与ioc区别是什么?di做注入、ioc是创建对象。。spring 与其他框架整合Spring框架,可以解决对象创建以及对象之间依赖关系的一种框架。...原创 2019-11-18 15:54:10 · 249 阅读 · 0 评论 -
centos JDK 安装
安装JDKuname -r 查看系统是多少位 64或32tarxvfjdk-7u45-linux-x64.tar.gz 解压命令3、设置jdk环境变量vi /etc/profile保存配置环境source/etc/profile 保存配置环境运行tomcat# cd /usr/local/tomcat7# ./bin/startup.sh...原创 2019-03-05 18:25:45 · 172 阅读 · 0 评论 -
java应用故障的排查工具
java应用故障的排查 常用工具: 1.jps jps命令用来输出JVM虚拟机进行的一些信息,优点类似于Linux的PS命令,可以列出虚拟机当前正在执行的进程,并显示器主类(即main函数的所在class)和进程ID。使用频率很高,后续的大部分工具都需要进行ID,以确定监控的虚拟机进程。jps可以方便的找到进程主类对应的进程ID。 ...原创 2019-02-20 12:28:13 · 553 阅读 · 0 评论 -
编程接口设计规范
接口示例接口描述:用户登陆成功后,或进入首页时会获取一次用户信息。 URI 方法 /userinfo GET 请求参数 名称 必填 备注 id 是 用户id 响应参数 名称...原创 2019-03-01 09:17:57 · 1814 阅读 · 0 评论 -
restful接口设计规范总结
这篇 文章主要是借鉴他人,但是自己很想总结出一套规范,以供向我这样的新手使用,用来规范代码,如果有什么好的提议,请不吝赐教,本篇文章长期更新!一、重要概念:REST,即Representational State Transfer的缩写。我对这个词组的翻译是"表现层状态转化"。Resource(资源) :对象的单个实例。 例如,一只动物。它可以是一段文本、一张图片、一首歌曲、一种服务...转载 2019-03-01 08:32:59 · 534 阅读 · 0 评论 -
mybatis-generator-1.3.2 使用方法
在使用mybatis开发的过程中,通常我们会给数据库的每张表编写对应的domain、dao、mapping,很简单,但是工作很大,所以我们通常会使用代码生成器帮我们自动生成。具体方法如下:解压后目录结构如下:Running MyBatis Generator执行命令前,在lib目录下先创建 配置文件中targetProject指定的文件夹。执行命令:java -jar myba...转载 2019-02-14 14:51:02 · 439 阅读 · 0 评论 -
Mybatis之注解实现动态sql
通过注解实现动态sql一共需要三部:1.创建表,2.创建entity类,3.创建mapper类, 4.创建动态sql的Provider类。1.和2.可以参见该系列其他文章,这里主要对3和4进行演示,并编写测试。(单元测试是一个好习惯,可以减少bug,避免后期修复的时间损耗)创建mapper.javapackage com.blueStarWei.mappers;import java...原创 2019-02-28 17:53:52 · 7643 阅读 · 2 评论 -
在IDEA中使用MyBatis Generator逆向工程生成代码
本文介绍一下用Maven工具如何生成Mybatis的代码及映射的文件。一、配置Maven pom.xml 文件在pom.xml增加以下插件:<build> <finalName>zsxt</finalName> <plugins> <plugin> <</groupId> ...原创 2019-02-14 18:03:57 · 235 阅读 · 0 评论