- 博客(20)
- 收藏
- 关注
转载 Java IO,BIO,NIO,netty详解
基本概念Java网络IO的演化,从最开始JDK1.4之前是基于阻塞的IO;发展到1.4发布后的Nio提供了selector多路复用的机制以及channel和buffer,再到1.7的NIO升级提供了真正的异步api;经常听人提起,同步阻塞服务器或者异步非阻塞服务器,网上有很多的文章针对这个概念作出了讲解,每个人理解的貌似都不太一样。最容易把异步和非阻塞搞混…我这里简单的说下自己的理解:同步synchronous、异步asynchronous,他们的区别就是发起任务后,本身的一个状态——如果是一直等待结
2021-06-30 16:28:02
306
原创 敏感词过滤util
import com.bngrp.security.dao.CcSensitiveWordMapper;import org.apache.commons.lang3.StringUtils;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component;import java.util.*;/**敏感词检查工具类,采用DFA算法*/
2021-04-01 16:06:16
307
原创 CAP详解及应用
什么是cap:先套用百度百科上的说法。CAP原则又称CAP定理,指的是在一个分布式系统中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可得兼。一致性(C):在分布式系统中的所有数据备份,在同一时刻是否同样的值。(等同于所有节点访问同一份最新的数据副本)可用性(A):保证每个请求不管成功或者失败都有响应。分区容忍性(P):系统中任意信息的丢失或失败不会影响系统的继续运作。一致性和可用性还好理解。分区容忍性是什
2021-03-18 18:01:08
3497
1
原创 Dubbo和SpringCloud对比
比较spring cloud和dubbo,各自的优缺点是什么dubbo由于是二进制的传输,占用带宽会更少,性能更优springCloud是http协议传输,带宽会比较多,同时使用http协议一般会使用JSON报文,消耗会更大dubbo的开发难度较大,原因是dubbo的jar包依赖问题很多大型工程无法解决。依赖配合,对开发人员要求高,需要慢工出细活,代码改动影响较大,灵活性不足。对微服务的划分要求较高,建议服务提供者必须是变动较少,长期稳定的服务。springcloud的接口协议约定比较自由且松散,需
2021-03-18 14:59:56
1847
原创 OAuth2.0自定义授权模式
spring boot OAuth2.0默认自带了授权码模式,密码模式等。实际生产过程中,往往不容易满足要求,所以就需要自定义一些授权模式。第一步:添加新的模式如果是基于数据库保存的客户端信息,需要在要使用这种模式的客户端的authorized_grant_types字段添加一个模式类型,每种模式是按照逗号隔开。本文作为教学,添加一个my_type证码模式。authorization_code,refresh_token,password,my_type 如此,前三种是框架自带的模式,my_type是
2021-03-09 16:45:44
2049
原创 spring boot配置knife4j
1.pom文件加入knife4j依赖#包含spring mvc依赖< dependency>< groupId>org.springframework.boot< artifactId>spring-boot-starter-web< /dependency>#knife4j依赖< dependency>< groupId>com.github.xiaoymin< artifactId>knife4j-sp
2021-03-08 17:56:31
1120
原创 OAuth2.0 认证
OAuth2.0简介:OAuth(开放授权)是一个开放标准,允许用户授权第三方应用访问他们存储在另外的服务提供者上的信息,而不需要将用户名和密码提供给第三方应用或分享他们数据的所有内容。OAuth2.0是OAuth协议的延续版本,但不向后兼容OAuth 1.0即完全废止了OAuth1.0。很多大公司如Google,Yahoo,Microsoft等都提供了OAUTH认证服务,这些都足以说明OAUTH标准逐渐成为开放资源授权的标准。Oauth协议目前发展到2.0版本,1.0版本过于复杂,2.0版本已得到广
2020-11-20 10:10:03
306
原创 spring cloud简介及部分组件介绍
简介Spring cloud是一个基于Spring Boot实现的服务治理工具包,在微服务架构中用于管理和协调服务的微服务:就是把一个单体项目,拆分为多个微服务,每个微服务可以独立技术选型,独立开发,独立部署,独立运维.并且多个服务相互协调,相互配合,最终完成用户的价值.Spring Cloud是一系列框架的有序集合。它利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做
2020-09-07 22:38:56
184
原创 redis 简介
什么是redisredis是nosql(也是个巨大的map) 单线程,但是可处理1秒10w的并发(数据都在内存中)使用java对redis进行操作类似jdbc接口标准对mysql,有各类实现他的实现类,我们常用的是druid其中对redis,我们通常用Jedis(也为我们提供了连接池JedisPool)在redis中,key就是byteredis的数据结构(value):String,list,set,orderset,hash数据结构1.String 字符串类型是redis中最基本的数据
2020-09-07 09:43:20
126
原创 spring
为什么使用spring,因为spring使java简单Spring Aop那么Spring的AOP也就是面向切面编程,就是基于动态代理来实现的,通过代理原始类增加额外功能,我们可以将额外功能一次定义然后配合切点达到多次使用的效果。默认是使用jdk的动态代理,如果未实现接口则会使用cglb动态代理。前者是基于接口,后者是使用继承。Jdk动态代理步骤:1.创建一个实现接口InvocationHandler的类,它必须实现invoke方法2.创建被代理的类以及接口3.通过Proxy的静态方法newP
2020-08-27 20:21:51
139
原创 消息队列
消息队列Kafka、ActiveMQ、RabbitMQ、RocketMQ RocketMQ api地址https://help.aliyun.com/document_detail/144834.html?spm=a2c4g.11174283.6.681.26dd537c4US8nP1作用解耦在项目启动之初来预测将来项目会碰到什么需求,是极其困难的。消息系统在处理过程中间插入了一个隐含的、基于数据的接口层,两边的处理过程都要实现这一接口。这允许你独立的扩展或修改两边的处理过
2020-08-21 16:43:15
107
原创 java多线程和锁
1.进程与线程进程是程序的一次动态执行过程,它需要经历从代码加载,代码执行到执行完毕的一个完整的过程,这个过程也是进程本身从产生,发展到最终消亡的过程。多进程操作系统能同时达运行多个进程(程序),由于 CPU 具备分时机制,所以每个进程都能循环获得自己的CPU 时间片。由于 CPU 执行速度非常快,使得所有程序好像是在同时运行一样。多线程是实现并发机制的一种有效手段。进程和线程一样,都是实现并发的一个基本单位。线程是比进程更小的执行单位,线程是进程的基础之上进行进一步的划分。所谓多线程是指一个进程在执行
2020-08-20 17:49:24
137
原创 分布式事务
1.什么是分布式系统?部署在不同结点上的系统通过网络交互来完成协同工作的系统。比如:充值加积分的业务,用户在充值系统向自己的账户充钱,在积分系统中自己积分相应的增加。充值系统和积分系统是两个不同的系统,一次充值加积分的业务就需要这两个系统协同工作来完成。2.什么是事务?事务是指由一组操作组成的一个工作单元,这个工作单元具有原子性(atomicity)、一致性(consistency)、隔 离性(isolation)和持久性(durability)。 原子性:执行单元中的操作要么全部执行成功,要么全
2020-08-19 17:52:02
108
原创 java hashMap分解
1.Hash 算法散列算法(Hash Algorithm),又称哈希算法,杂凑算法,是一种从任意文件中创造小的数字「指纹」的方法。与指纹一样,散列算法就是一种以较短的信息来保证文件唯一性的标志,这种标志与文件的每一个字节都相关,而且难以找到逆向规律。因此,当原有文件发生改变时,其标志值也会发生改变,从而告诉文件使用者当前的文件已经不是你所需求的文件。一个优秀的 hash 算法,将能实现:正向快速:给定明文和 hash 算法,在有限时间和有限资源内能计算出 hash 值。逆向困难:给定(若干) has
2020-08-18 18:26:52
280
原创 mysql优化
1.索引的使用索引是数据库优化最常用也是最重要的手段之一, 通过索引通常可以帮助用户解决大多数的MySQL的性能优化问题。create index 索引名 on tb_seller(name,status,address);创建好索引之后可以通过explain , 查看执行计划,查看查询语句是否会使用索引。注意事项1.如果索引了多列,要遵守最左前缀法则。指的是查询从索引的最左前列开始,并且不跳过索引中的列。2.范围查询,不能使用索引3.不要在索引列上进行运算操作,索引将失效。4.字符串不加单
2020-08-17 16:40:56
97
原创 mysql 储存引擎
存储引擎存储引擎概述和大多数的数据库不同, MySQL中有一个存储引擎的概念, 针对不同的存储需求可以选择最优的存储引擎。存储引擎就是存储数据,建立索引,更新查询数据等等技术的实现方式 。存储引擎是基于表的,而不是基于库的。所以存储引擎也可被称为表类型。Oracle,SqlServer等数据库只有一种存储引擎。MySQL提供了插件式的存储引擎架构。所以MySQL存在多种存储引擎,可以根据需要使用相应引擎,或者编写存储引擎。MySQL5.0支持的存储引擎包含 : InnoDB 、MyISAM 、B
2020-08-13 18:31:01
130
原创 java常用设计模式
设计模式的六大原则1、开闭原则(Open Close Principle)开闭原则的意思是:对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。简言之,是为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类,后面的具体设计中我们会提到这点。2、里氏代换原则(Liskov Substitution Principle)里氏代换原则是面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。LSP 是
2020-08-13 17:09:42
165
原创 java 常用算法
1.冒泡排序(Bubble Sort)算法描述:(从小到大排序)● 比较相邻的元素。如果第一个比第二个大,就交换它们两个;● 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;● 针对所有的元素重复以上的步骤,除了最后一个;● 重复步骤1~3,直到排序完成。如果两个元素相等,不会再交换位置,所以冒泡排序是一种稳定排序算法。Public static int[] bubbleSort(int[] arr) {int arrSize = arr.len
2020-08-13 11:35:03
347
原创 JVM内存模型
1、程序计数器程序计数器(Program Counter Register)是一块较小的内存空间,它可以是看作当前线程所执行的字节码的行号指示器。说简单一点就是一个计数器,当字节码解释器工作是能够通过改变这个计数器的值来选取下一条需要执行的字节码指令。在说明一点,各条线程之间计数器互不影响,独立存储,程序计数器器内存区域为 线程私有 的。类比汇编语言中的程序计数器:在汇编语言中,程序计数器是指CPU中的寄存器,它保存的是程序当前执行的指令的地址(也可以说保存下一条指令的所在存储单元的地址),当CPU需.
2020-08-11 17:06:20
129
原创 JAVA垃圾回收算法
JAVA垃圾回收算法常见的垃圾回收算法有:引用计数法、标记清除法、标记压缩法、复制算法、分代算法等。1.引用计数法引用计数是历史最悠久的一种算法,最早George E. Collins在1960的时候首次提出,50年后的今天,该算法依然被很多编程语言使用。1.1原理采用引用计数的方式,每有一个地方引用,记为引用加一。如果一个对象的引用计数为零,表明此对象可被回收。1.2 优缺点优点:1.实时性较高,无需等到内存不够的时候,才开始回收,运行时根据对象的计数器是否为0,就可以直接回收。2.在垃
2020-08-07 14:51:52
146
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人