自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 BIO,NIO,AIO

1. I/O 模型基本说明I/O 模型:就是用什么样的通道或者说是通信模式和架构进行数据的传输和接收,很大程度上决定了程序通信的性能,Java 共支持 3 种网络编程的/IO 模型:BIO、NIO、AIO实际通信需求下,要根据不同的业务场景和性能需求决定选择不同的I/O模型Java BIO同步并阻塞(传统阻塞型),服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销Java NIOJava NIO : 同步非

2021-05-23 21:22:45 201

原创 MessagePack编解码

1.介绍MessagePack是一种有效的二进制序列化格式。它使您可以在多种语言(如JSON)之间交换数据。但是它更快,更小。小整数被编码为一个字节,典型的短字符串除字符串本身外仅需要一个额外的字节。它的数据格式与json类似,但是在存储时对数字、多字节字符、数组等都做了很多优化,减少了无用的字符,二进制格式,也保证不用字符化带来额外的存储空间的增加2.案例 <dependency> <groupId>org.msgpack</grou

2021-05-09 21:25:32 592

原创 编解码

1.什么是编解码对于java提供的对象输入输出流ObjectInputStream与ObjectOutputStream,可以直接把java对象作为可存储 的字节数组写入文件,也可以传输到网络上去。对与java开放人员来说,默认的jdk序列化机制可以避免操作底层的字节数组,从而提升开发效率。1.为什么需要序列化网络传输与对象序列化2.java编解码技术指的什么netty nio是基于网络传输,当进行远程跨进程服务调用时,需要把被传输的对象编码为字节数组或者bytebuffer对象。而当远程服务读取

2021-05-09 18:40:52 404

原创 MongoTemplate使用

package com.mongo.springbootmongo;import com.mongo.springbootmongo.model.Status;import com.mongo.springbootmongo.model.User;import com.mongodb.client.ListIndexesIterable;import com.mongodb.client.model.Filters;import com.mongodb.client.model.IndexOpt

2021-05-05 21:57:39 1336

原创 TCP粘包和拆包

1.什么是TCP粘包和拆包粘 / 黏TCP是一个字节流协议,所谓流,就像流水一样,是连成一片的,没有分割线,你没法知道什么时候开始,什么时候结束,也就是我们通过TCP传输的数据是一连串没有界限的数据,TCP底层并不了解上层要传输的业务数据的具体含义,TCP只会根据缓冲区的大小及实际情况进行数据包的分割,那么我们一个完整的业务数据,可能会被TCP拆分成多个包进行发送,也有可能业务上的多条完整数据被合并成一个包发送,这就是TCP的粘包和拆包问题;一个TCP协议传输的过程:发送端的字节流都会先传入缓冲区

2021-05-05 17:36:43 1599

原创 MongoDB集群

1.MongoDB集群介绍MongoDB集群搭建有三种方式:1、Master-Slave模式2、Replica-Set方式3、Sharding方式在MongoDB 2.x系列的版本,有一个主从复制模式,但是MongoDB官方也不推荐使用,而从MongoDB 3.2开始,主从复制模式已经被标记成过时了,不推荐使用;从MongoDB 4.0 开始已经完全移除了主从复制模式,推荐使用副本集和分片集群模式;副本集就是有自动故障转移功能的主从复制模式;主从复制和副本集最大的区别就是副本集没有固定的“

2021-04-18 20:18:11 156

原创 MongoDB权限认证

1、MogoDB默认没有账号和密码,只要连上了就可以增删改查任何操作;2、启动mongodb服务时候,首先不要加–auth参数;3、首先分配一个超级管理员,创建管理员,切换到admin数据库,然后创建;(默认admin、config、local)use admin;db.createUser({user:“root”, pwd:“123456”, roles:[{role:“root”, db:“admin”}]});1、切换到admin数据库下,执行:db.system.users.find

2021-04-18 17:30:02 257

MongoDB(一)

1.什么是MongoDB为现代应用程序研发的数据库;MongoDB是为现代应用程序开发人员和云时代构建的通用的、基于文档的分布式数据库。没有哪一个数据库能更有效地使用。MongoDB属于NoSQL数据库中的一种,NoSQL = Not Only SQL ,意即"现代开发不仅仅局限于基于SQL的关系型数据库,还应该有一些别的数据库,比如非关系型的数据库",NoSQL数据库叫非关系型数据库;MongoDB 使用C++开发;MongoDB诞生于2007,2009年2月首度推出;MongoDB现在分为企

2021-04-17 22:26:59 245

原创 Kafka介绍(一)

1.kafka介绍官网:http://kafka.apache.org/kafka是一个开源的,分布式的,高吞吐量的、消息发布和订阅系统,也是大数据中用作数据交换的核心组件之一,以高性能,社区活跃备受广大开发者喜爱;kafka最初由LinkedIn(领英,全球最大的面向职场人士的社交网站)设计开发,是为了解决LinkedIn的数据管道问题,用于LinkedIn网站的活动流数据和运营数据处理工具,这其中活动流数据是指页面访问量、被查看页面内容方面的信息以及搜索情况等内容,运营数据是指服务器的性能数据(C

2021-04-17 15:50:11 1303

原创 Spring Security 退出登录(三)

一般登录后,服务端会给用户发一个凭证(1)基于 Session 客户端会存 cookie 来保存一个 sessionId ,服务端存一个 Session 。(2)基于 token 客户端存一个 token 串,服务端会在缓存中存一个用来校验此 token 的信息1.退出逻辑1.当前的用户登录状态失效。这就需要我们清除服务端的用户状态。2. 退出登录接口并不是 permitAll , 只有携带对应用户的凭证才退出。3. 将退出结果返回给请求方。4. 退出登录后用户可以通过重新登录

2021-04-08 20:43:34 721

原创 spring security基于数据库的认证和授权(二)

1.创建数据表CREATE TABLE `resources` ( `id` int(11) NOT NULL AUTO_INCREMENT, `pattern` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;CREATE TABLE `role` ( `id` int(11) NOT NULL AUTO_INCREMENT, `

2021-04-08 20:31:03 129

原创 spring security 介绍及登录(一)

1.spring security 基本介绍相对于Apache Shiro,Spring Security提供了更多的诸如 LDAP 、 OAuth2.0 、 ACL 、 Kerberos 、SAML 、 SSO 、 OpenID 等诸多的安全认证、鉴权协议,可以按需引用。对认证/鉴权更加灵活,粒度更细。可以结合你自己的业务场景进行更加合理的定制化开发。在最新的Spring Security 5.x中更是提供了响应式应用(reactive application)提供了安全控制支持。从语言上来讲,支

2021-04-08 16:26:01 285

原创 Shell

Shell 编程入门走进 Shell 编程的大门为什么要学Shell?什么是 Shell?Shell 编程的 Hello WorldShell 变量Shell 编程中的变量介绍Shell 字符串入门Shell 字符串常见操作Shell 数组Shell 基本运算符算数运算符关系运算符逻辑运算符布尔运算符字符串运算符文件相关运算符shell流程控制if 条件语句for 循环语句while 语句shell 函数不带参数没有返回值的函数有..

2020-08-02 21:12:23 140

原创 jdk8

1.Lambda表达式Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。(parameters) -> expression或(parameters) ->{ statements; }可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。可选的大括号:如果主体包含了一个语句,就不需要使用大括号。可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定明表达

2020-08-01 22:47:14 134

原创 使用zookeeeper实现节点监听

/** * * @author liulei * @since 2020-06-17 * @see ZookeeperUtils */public class ZookeeperUtil extends ZookeeperUtils { private static Logger logger = LoggerFactory.getLogger(ZookeeperUtil.class); /** * 同步创建持久化有序节点 * * @param path 节点路径 *

2020-06-20 11:36:17 195

原创 Redis Cluster集群搭建

1.搭建1. 在/usr/local/redis-5.0.5/目录创建目录cluster,然后在它下面创建7001至7006六个文件夹;2. 在六个文件夹下新建redis.conf文件,内容如下:port 7001cluster-enabled yescluster-config-file nodes.confcluster-node-timeout 5000appendonly yesdaemonize yesprotected-mode no端口分别是7001、7002、7003、

2020-06-13 13:22:23 334

原创 nginx 安装

下载免费开源版的官方网站:http://nginx.org商业版本的Nginx:http://www.nginx.com安装Nginx的安装需要Linux安装相关的几个库,否则配置和编译会出现错误;yum install gcc openssl openssl-devel pcre pcre-devel zlib zlib-devel -yNginx可以进行二次开发,你可以修改它里面的...

2020-04-25 13:38:06 112

原创 java中finalize方法

垃圾回收器要回收对象的时候,首先要调用这个类的finalize方法(你可以 写程序验证这个结论),一般的纯Java编写的Class不需要重新覆盖这个方法,因为Object已经实现了一个默认的,除非我们要实现特殊的功能(这 里面涉及到很多东西,比如对象空间树等内容)。不过用Java以外的代码编写的Class(比如JNI,C++的new方法分配的内存),垃圾回收器并不能对这些部分进行正确的回收,这时...

2020-04-12 09:47:29 207

原创 maven的依赖范围和依赖传递

非compile范围依赖不能传递

2020-03-13 17:48:33 691

原创 maven库

在Maven构建项目的过程中如果需要某些构件,首先会到Maven的本地仓库中查找,如果找到则可以直接使用;如果找不到,它会自动连接外网,到远程中央仓库中查找;如果远程仓库中能找到,则先把所需要的插件下载到本地仓库,然后再使用,并且下次再用到相同的插件就可以直接使用本地仓库的;如果没有外网或者远程仓库中也找不到,则构建失败。1.使用profile配置远程仓库在settings.xml中 &lt...

2020-03-13 15:49:24 124

原创 MyBatis的SQL注入攻击和动态SQL

SQL注入的危害:1、数据库被拖库(把数据从数据库拉取出来);2、重要信息被泄露等;注入攻击的本质,是把用户输入的数据当做有效代码执行;举例:当用户发送GET请求:https://ke.qq.com/course.jsp?id=1这是一个课程详情页面,会显示出课程的title和content,程序会接收id参数传递给SQL语句,SQL如下:SELECT title, content...

2020-02-06 22:00:57 1396 1

原创 Dubbo集群容错

Failover失败自动切换,当出现失败,重试其它服务器。通常用于读操作,但重试会带来更长延迟。可通过 retries=“2” 来设置重试次数 (不含第一次);Failfast快速失败,只发起一次调用,失败后立即报错,通常用于写操作,比如新增记录;Failsafe失败安全,当调用出现异常时,直接忽略掉,通常用于记录日志等允许失败的操作;Failback失败自动恢复,后台记录失败请求,...

2020-02-05 20:07:17 82

原创 Dubbo常用标签

七大常用标签<dubbo:service/>用于配置服务提供者暴露自己的服务<dubbo:reference/>用于配置服务消费者引用服务<dubbo:protocol/>用于配置服务提供者的访问协议<dubbo:registry/>用于配置注册中心<dubbo:application/>用于配置应用信息<dubbo:p...

2020-02-04 20:26:50 120

原创 Dubbo配置覆盖

1、消费者配置优先;2、最小配置优先;上图从上到下分别是方法级别,类级别,和配置级别:上面会覆盖下面的配置

2020-02-04 20:18:59 277

原创 dubbo启动时检查和超时重试

1.启动时检查Dubbo默认会在启动时检查依赖的服务是否可用,不可用时会抛出异常,阻止Spring初始化完成,以便上线时,能及早发现问题,默认check=true。通过check="false"关闭检查,比如,测试时,有些服务不关心,或者出现了循环依赖,必须有一方先启动。关闭某个服务的启动时检查<dubbo:reference interface="com.bjpowernode.U...

2020-02-03 22:05:21 466

原创 Zookeeper监控与运维

1.Zookeeper四字监控Zookeeper提供了一些4字命令用来监控自己的运行状态;在zoo.cfg文件最下面加上如下配置开启四字命令白名单:4lw.commands.whitelist=stat, ruok, conf或者4lw.commands.whitelist=* --所有4字命令都可以用(1)输出server的详细配置信息,(如果没有nc,需要安装:yum ins...

2020-02-02 18:23:31 1745

原创 Zookeeper集群

zookeeper有两种工作的模式,一种是单机方式,另一种是集群方式;Zookeeper作为一个服务,它本身也可能发生故障,所以我们需要将Zookeeper进行集群,避免单点故障问题,以保证zookeeper本身的高可用性;Zookeeper集群特点Zookeeper集群有三个角色,一个leader(领导者),一个follower(跟随者),一个observer(观察者);集群中只要有 超...

2020-02-02 15:19:20 894

原创 Zookeeper分布式全局唯一ID生成

在大型分布式系统中,经常有生成全局唯一标识的需求,支付、订单、红包、优惠券、跟踪号等等;分布式ID生成系统全局唯一,不能重复,(基本要求);递增,下一个ID大于上一个ID;(某些需求)信息安全,非连续ID,避免恶意用户/竞争对手发现ID规则,从而猜出下一个ID或者根据ID总量猜出业务总量;高可用,不能故障,可用性4个9或者5个9;(99.99%、99.999%)高QPS,性能...

2020-02-01 21:05:36 2193

原创 Zookeeper之ACL

1.介绍ACL (Access Control List),Zookeeper作为一个分布式协调框架,其内部存储的都是一些关于分布式系统运行时状态的元数据,默认情况下,所有应用都可以读写任何节点,在复杂的应用中,这不太安全,ZK通过ACL机制来解决访问权限问题。Zookeeper节点权限模式:即Scheme;开发人员最多使用的如下四种权限模式:ip: ip模式通过ip地址粒度进行权限控制模...

2020-02-01 20:27:51 248

原创 Zookeeper编程客户端

Zookeeper服务器有三种Java客户端;Zookeeper: Zookeeper官方提供的原生java客户端;Zkclient: 在原生zookeeper基础上进行扩展的开源第三方Java客户端;Curator:Netflix公司在原生zookeeper基础上开源的Java客户端;1.Curator编程客户端API文档: https://zookeeper.apache.org/d...

2020-02-01 16:39:23 151

原创 Zookeeper 介绍

1、Zookeeper 数据结构ZooKeeper是一个类似操作系统的文件系统数据结构,如下图:每个节点被称为znode,这个znode是可以存数据的;可以增加、删除、查询、修改znode,也可以在一个znode下增加、删除子znode;有四种类型的znode:(大类分为两类)PERSISTENT 持久化目录节点;客户端与zookeeper断开连接后,该节点依旧存在;PERSIST...

2020-01-31 21:59:49 166

原创 Zookeeper安装和介绍

先认识几个概念:1、分布式架构分布:在一定的范围内散布开;反义词:集中;集中式架构:就是把所有的程序、功能、模块都集中到一个项目中,部署在一台服务器上,从而对外提供服务(单体架构、单体服务、单体应用)。直白一点:就是只有一个项目,只有一个war;分布式架构:就是把所有的程序、功能、模块拆分成不同的子项目,部署在多台不同的服务器上,这些子项目相互协作共同对外提供服务。直白一点:就是有很多...

2020-01-31 21:18:24 177

原创 优先级队列

就像在日常生活中,事情有轻重缓急一样,对于需要处理的消息也有这样的需求,我们可以设置消息的优先级,优先级大的消息优先得到处理。在RabbitMQ中想要使用优先级特性需要的版本为3.5+。然后我们只需做两件事情:1. 将队列声明为优先级队列,即在创建队列的时候添加参数 x-max-priority 以指定最大的优先级,值为0-255(整数)。// 设置队列最大优先级Map<Strin...

2020-01-31 20:22:13 145

原创 RabbitMQ设置TTL(Time To Live)过期消息

消息的过期时间有两种设置方式:(1)通过队列属性设置消息过期时间; //TTL队列 (queue的扩展参数) Map<String, Object> arguments = new HashMap<String, Object>(); arguments.put("x-message-ttl", 6000); //6秒消息...

2020-01-31 19:43:34 1051

原创 linux中安装RabbitMQ

1.安装Erlang1、下载安装 erlang语言运行环境,从erlang的官网下载:Erlang官网:https://www.erlang.org/wget http://erlang.org/download/otp_src_21.3.tar.gz2、安装erlang前先安装Linux依赖库:yum -y install make gcc gcc-c++ kernel-devel ...

2020-01-30 21:46:44 172

原创 Redis Cluster集群概念

使用哨兵模式可以达到redis高可用目的,但是此时的每个Redis存有集群中的所有数据,从而导致集群的总数据存储量受限于可用存储内存最小的节点,形成了木桶效应。在redis3.0之前,我们需要通过客户端(写代码)去做分片(数据拆分成多份),通过hash方式对key进行分片存储,客户端分片虽然能够解决各个节点的存储压力,但维护成本较高、增加、移除节点比较繁琐。因此在redis3.0版本开始提供了...

2020-01-30 16:52:24 210

原创 redis高可用Sentinel哨兵

Sentinel哨兵是Redis官方提供的高可用方案,使用Sentinel哨兵可以监控多个Redis服务实例的运行情况;哨兵的基本原理Sentinel哨兵用来监视Redis的主从服务器,它会不断检查Master和Slave是否正常;如果Sentinel挂了,就无法监控,所以需要多个哨兵,组成Sentinel网络,监控同一个Master的各个Sentinel哨兵会相互通信,组成一个分布式的S...

2020-01-30 16:15:28 1424

原创 Redis主从复制

通过持久化功能,Redis保证了即使在服务器重启的情况下也不会丢失(或少量丢失)数据,但是由于数据是存储在一台服务器上的,如果这台服务器出现故障,比如硬盘坏了,也会导致数据丢失。所以为避免单点故障,我们需将数据复制多份到多台不同的服务器上,即使有一台服务器出现故障了,其他服务器依然可以继续提供服务。那么这就要求当一台服务器上的数据更新后,自动将更新的数据同步到其他服务器上;如何实现?Red...

2020-01-30 14:43:03 126

原创 redis持久化之AOF

Append-only File(AOF)Redis每次接收到一条改变数据的命令时,它将把该命令写到一个AOF文件中(只记录写操作,不记录读操作),当Redis重启时,它通过执行AOF文件中所有的命令来恢复数据。AOF是在RDB之后出现的一种技术,这种方式的持久化让redis的数据不会丢失;当使用Redis存储非临时数据时,一般需要开启AOF持久化来降低Redis故障导致的数据丢失,AOF可以...

2020-01-29 21:24:31 145

原创 redis持久化RDB

Redis的数据存储在内存中,内存是瞬时的,如果linux宕机或重启,又或者Redis崩溃或重启,所有的内存数据都会丢失,为解决这个问题,Redis提供两种机制对数据进行持久化,便于恢复数据。一种是RDB方式、另一种是AOF方式;1.RDB方式Redis Database(RDB),是指在指定的时间间隔内将内存中的数据集快照写入磁盘,数据恢复时将快照文件直接再读到内存。RDB方式的数据持久化...

2020-01-29 21:15:34 219

dubbo入门工程案例

Dubbo ['dʌbəu] 是一个分布式服务治理框架,提供高性能的RPC远程服务调用及服务治理。 Dubbo是阿里巴巴开源的产品(2012),2018年捐献给了apache,现在是apache下的一个顶级开源项目,国内大量企业都在使用Dubbo框架。 (hsf taobao内部的dubbo) Dubbo的官方网站:http://dubbo.apache.org

2020-02-02

dubbo-demo.zip

Dubbo ['dʌbəu] 是一个分布式服务治理框架,提供高性能的RPC远程服务调用及服务治理。 Dubbo是阿里巴巴开源的产品(2012),2018年捐献给了apache,现在是apache下的一个顶级开源项目,国内大量企业都在使用Dubbo框架。 (hsf taobao内部的dubbo) Dubbo的官方网站:http://dubbo.apache.org

2020-02-02

空空如也

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

TA关注的人

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