- 博客(37)
- 收藏
- 关注
原创 Python画图
柱状图import matplotlib.pyplot as pltfrom matplotlib.pyplot import MultipleLocatorimport matplotlib as mplimport numpy as np# 中文解码mpl.rcParams["font.sans-serif"] = ["SimHei"]mpl.rcParams["axes.unicode_minus"] = False#Datay = [92.5, 95.0, 91.0, 93.5,
2022-03-24 17:54:57
3043
1
原创 快速搭建k8s集群(kubeadm方式)
1.集群配置k8s-master1 192.168.43.210 内存-4G,CPU-2核,硬盘-40Gk8s-node1 192.168.43.211 内存-4G,CPU-2核,硬盘-40Gk8s-node2 192.168.43.212 内存-4G,CPU-2核,硬盘-40G2.前期准备(所有节点都需要)修改主机名# master节点,node节点省略[root@k8s-master1 ~]# vi /etc/hostname k8s-master1修
2021-05-09 15:44:48
235
原创 paascloud——JWT续租
开源项目paascloud,JWT续租实现方法实现原理用户登录成功,生成token保存在redis中,过期时间和token过期时间相同。用户携带token访问,如果redis中存在该token,用户正常访问,如果没有则直接返回。在token快过期的时候,如果用户还在正常操作,则重新生成token返回给前端,实现续租。长时间没有访问的话,则token过期。源码解析在网关中添加post类型过滤器,判断token是否快要过期(20分钟内),快要过期则在响应头中添加续租标志 Renew-Heade
2021-04-12 19:57:33
300
原创 设计模式(三)——行为型模式
行为型模式核心作用:关注系统中对象之间的相互交互,研究系统在运行时对象之间的相互通信和协作,进一步明确对象的职责,共有11种模式。分类:责任链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式、访问者模式。责任链模式 chain of responsibility定义将能够处理同一类请求的对象连成一条链,所提交的请求沿着链传递,链上的对象逐个判断是否有能力处理该请求,如果能则处理,不能,则传递给链上的下一个对象。迭代器
2020-09-03 12:14:12
205
原创 设计模式(二)——结构型模式
结构型模式核心作用:是从程序上实现松耦合,从而可以扩大整体的类结构,用来解决更大的问题。分类:适配器模式、代理模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、适配器模式什么是适配器模式将一个类的接口转换成客户希望的另一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。模式中的角色目标接口(target):客户所期待的接口。目标可以是具体的或抽象的类,也可以是接口。需要适配的类(adaptee):需要适配的类或适配者类。适配器(Adapte
2020-09-01 11:44:29
277
原创 设计模式(一)——创建型模式
单例模式核心作用 :保证一个类只有一个实例,并且提供一个访问该实例的全局访问点单例模式的优点由于单例模式只生成一个实例,减少了系统性能开销,当一个对象的产生需要比较多的资源时,如读取配置、产生其他依赖对象时,则可以通过在应用启动时直接产生一个单例对象,然后永久驻留内存的方式来解决单例模式可以在系统设置全局的访问点,优化环共享资源访问,例如可以设计一个单例类,负责所有数据表的映射处理常见的五种单例模式实现方式主要:饿汉式:线程安全,调用效率高。但是,不能延时加载。懒汉式
2020-08-28 12:04:56
150
原创 Java 基础 (一)
Java 常用类String、StringBuilder 、StringBufferString 不可变字符序列Sting str = "";for(int i=0;i<5000;i++){ str = str + i; //相当于创建了10000个对象,大大影响了性能}StringBuilder 可变字符序列,线程不安全StringBuffer 可变字符序列,线程安区参考文章:StringBuilder和StringBuffer的区别DateFormat和S
2020-08-26 10:05:36
129
原创 基于JWT实现SSO单点登录
实现原理用户访问应用A 时,需要到认证服务上进行认证。认证成功后,再去访问应用B,仍然需要到认证服务器认证,只不过这次不用再重新登录了,只需要授一下权就可以了。代码结构sso-server :认证服务器sso-client1:应用Asso-client2:应用B <groupId>com.imooc.sso</groupId> <artif...
2020-04-20 21:24:18
2087
原创 SpringSecurityOAuth核心源码解析
上一篇文章,实现了一个简单的SpringSecurityOAuth 应用,这一章,学习一下SpringSecurityOAuth的核心源码。如上图所示首先进入TokenEndpoint,来看一下源码public ResponseEntity<OAuth2AccessToken> postAccessToken(Principal principal, @RequestParam...
2020-04-18 21:42:20
355
原创 Spring Social 开发QQ登录
可先参考SpringSocial基本原理Spring Social 认证流程源码详解授权流程主要接口代码结构获取用户信息Api(个性化第六步),实际上没有一个明确的接口,因为每一个服务提供商对于用户基本信息的调用都是有区别的。SpringSocial其实也提供了一个抽象类叫AbstractOauth2ApiBinding帮助我们快速开发第六步的实现。public class Q...
2020-04-16 15:38:31
221
原创 Spring Social 认证流程源码详解
Spring Security 过滤链认证流程源码详解SocialAuthenticationFilter会将请求拦截下来然后将整个流程走完。进而去实现第三方登录。详细流程如下。我们来看一下SocialAuthenticationFilter的源码 private Authentication attemptAuthService(SocialAuthenticationService...
2020-04-16 12:50:41
462
转载 Spring Social 基本原理
官网地址:https://projects.spring.io/spring-social/Spring Social的基础是什么?Spring Social实现第三方应用的登录,是根据OAuth协议来提供功能的。OAuth协议是一个授权协议,其目的是让用户不将服务提供商的用户名密码,提供给第三方应用的情况下,让第三方应用能够访问服务提供商的资源。常见的应用场景有:第三方应用通过QQ登录、微...
2020-04-16 00:52:29
812
原创 Spring 依赖搜索
Spring 依赖搜索即在开发过程中通过 Spring的依赖注入机制,对所需求的Bean进行查找。下面通过一个例子来学习一下。首先定义一个接口public interface HelloService { void sayHello();}然后接口有两个实现,并通过@Component 注解实例化到Spring容器中@Componentpublic class TomHel...
2020-04-14 15:13:18
348
原创 以增量的方式去适应变化
在开发过程中,有时需要别人在你开发的基础上实现一些其它的功能,这时如何让别人在使用你的代码时,最大程度减少原始代码的修改呢?这里提供一种思路:以增量的方式去适应变化实现思路所谓以增量的方式去适应变化,就是在开发过程中,如果有新的需求,可以增加一些代码来无缝替换掉已有的业务逻辑。下面通过一个图片验证码生成器的例子来一起看看。首先提供一个默认的图片验证码生成器/** * 默认的图片验证码生...
2020-04-14 14:27:15
310
转载 Spring Security 短信登录开发
前面已经介绍了 Spring Security 的认证流程和验证码的实现架构,短信登录则是在这两个的基础上进行开发的,这里有一篇文章已经介绍很好了,我就不写了。Spring Security 短信登录开发: https://www.cnblogs.com/bug9/p/11449573.html...
2020-04-14 13:50:46
143
原创 Spring Security 认证流程源码详解
Spring Security 过滤链认证流程源码详解UsernamePasswordAuthenticationFilter会拦截用户登录请求,整体流程如下图我们来看一下 UsernamePasswordAuthenticationFilter 的源码public class UsernamePasswordAuthenticationFilter extends AbstractA...
2020-04-13 23:04:46
181
原创 使用Callable、DeferredResult 提高REST服务性能
官方文档对Callable、DeferredResult 的解释DeferredResult and Callable return values in controller methods and provide basic support for a single asynchronous return value大致意思是说:在控制器中,可以用Callable或DeferredRes...
2020-04-11 15:05:42
344
原创 Spring Security 控制授权
Spring Security 控制授权基本原理Spring Security 在安全认证的过程中,通过一系列的过滤器一层层对登录用户的身份进行认证。而关于权限认证的过滤器则在整个过滤器链的最后,是Spring Security整个认证过程的最后一道关卡,这个过滤器就是 FilterSecurityInterceptor。控制授权流程源码解析服务请求被 FilterSecurityInte...
2020-04-05 00:19:18
218
原创 初步认识 kubernetes
kubernetes集群描述master 节点:安装kubernetes核心组件的主机node 节点:work 工作节点,每个工作节点上运行一个 kubelet 服务,<kubelet相当于 Mesos Slave 节点>,也就是当前节点的运行时总管,会管理当前节点运行的所有服务。pod:运行在 node 节点上面,是 k8s 最小单元,而所有的容器都运行在 pod 里面,一个...
2020-04-01 15:04:51
191
原创 Spring Security 添加验证码
直接上代码生成验证码工具类这个工具类很常见,网上也有很多,就是画一个简单的验证码,通过流将验证码写到前端页面public class VerificationCode { private int width = 100;// 生成验证码图片的宽度 private int height = 30;// 生成验证码图片的高度 private String[] fontNa...
2020-03-18 20:42:18
317
原创 RabbitMQ消息重复消费问题
业务背景当添加一名员工时,给其发送入职欢迎邮件。上一章解决了消息的可靠性问题,但这又会带来新的问题,就是消息可能会被重复投递。一个员工入职了,结果收到两封入职欢迎邮件解决思路大致的思路是这样,首先将 RabbitMQ 的消息自动确认机制改为手动确认,然后每当有一条消息消费成功了,就把该消息的唯一 ID 记录在Redis 上,然后每次收到消息时,都先去 Redis 上查看是否有该消息的 I...
2020-03-18 20:16:28
2466
2
原创 提高RabbitMQ消息可靠性
业务背景当添加一名员工时,给其发送入职欢迎邮件,但在复杂环境下,如何保障消息的可靠性?本章将采取一定的技术手段去处理解决思路添加员工时,把消息的消费情况记录到mail_send_log表中,然后通过定时任务扫描该表,对发送未成功的消息进行重新投递实体类@Datapublic class MailSendLog { private String msgId; /** ...
2020-03-18 19:59:05
217
原创 Linux部署springboot项目脚本编写
Linux部署springboot项目步骤及脚本编写首先确保Linux服务器上已安装jdk及其它项目中所需要的服务,如数据库,消息队列等一、打包项目通过maven插件可以快速的打包项目引入依赖<build> <plugins> <plugin> <groupId>o...
2020-03-12 16:41:06
2115
原创 Redis学习
Redis学习一、Redis简介Redis 专栏二、Redis 常用命令1.命令手册网址http://doc.redisfans.com2.Redis 数据类型三、Redis 几个常用概念Redis 默认有16384个solts(哈希槽),每个槽可以放3个hash 值,当需要在Redis集群中放置一个key-value时,Redis先对key使用crc16算法算出一个结果,...
2019-08-26 11:35:59
115
原创 Git学习
Git学习git clone url.gitgit remote add url.gitgit status // 查看工作区代码相对于暂存区的差别git pull origin mastergit add :将要提交的文件的信息添加到索引库中(将修改添加到暂存区)$ git add . # 将所有修改添加到暂存区$ git add * # Ant风格添加...
2019-08-02 13:02:43
132
原创 Java-Reflect
Java-Reflect 专题第1章 Class类的使用1.1 Class类的使用类是对象,任何一个类都是java.lang.Class的实例对象,这个实例对象有三种表达方式 Fool fool =new Fool(); //Fool的实例对象 //Fool这个类也是一个实例对象,为Class类的实例对象Class c1 = Fool.class; //实际告诉...
2019-08-02 12:33:46
91
原创 北邮2019计算机院机试真题回忆版
Problem A 二进制题目描述32位二进制数X,对其进行X+1,X+3 操作,并输出。注意不能忽略前导0输入第一行,一个整数T,代表测试数据组数。接着T行,输入32为二进制数输出对每组测试数据,输出两行,第一行为X+1,第二行为X+3.测试样例输入2000000000000000000000000000000000000000000000000000000000000...
2019-03-31 12:56:39
1611
1
原创 北邮OJ—272.网络的核
题目描述给定一个无向网络G,共有N个节点(1到N),M条边,求网络的核。网络的核:到网络中其他节点距离之和最小的节点,且对于不连通的两点,他们之间的距离为N,若有多组解,输出编号最小的节点输入第一行是一个整数T表示测试数据的组数(<26)对于每组测试数据:第一行有两个整数N,M,表示N个点M条边接下来M行,每行两个整数u,v(<=N),表示点u和v之间有一条距离为一的边,...
2019-03-27 15:56:24
196
原创 北邮OJ—268. 进程管理-网研14
进程管理题目描述在操作系统中,进程管理是非常重要的工作,每个进程都有唯一的进程标识(PID)。每个进程都可以启动子进程,此时我们称它为其子进程的父进程,除了 PID 为 0 的进程之外,每个进程有且只有一个父进程,在这个任务中,你需要实时维护操作系统运行中的三个基本操作:1.FORK PID1 PID2:标识为 PID1 的进程启动了一个标识为 PID2 的子进程。2.KILL PID:结...
2019-03-08 15:38:53
368
原创 北邮OJ 91.文件系统
北邮OJ 91.文件系统题目描述输入格式输出格式输入样例输出样例解题思路代码题目描述现在很多操作系统的文件系统都是基于树形结构设计的。即一个目录下可以有若干个目录和文件,而每个目录和文件都可以通过一条从根目录出发的唯一路径来唯一确定。我们希望你实现对这样的一个文件系统的简单管理。为了简化问题,我们做出如下假设:假设文件系统初始时只有一个根目录root。假设所有出现的文件和目录的名字都是唯...
2019-03-07 20:57:06
354
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人