- 博客(135)
- 资源 (5)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 最艰难的时刻
现在是我人生中的一道坎。虽然标题是最艰难的时刻,但我不知道现在是不是,可能过完年后会比现在更加艰难。 圣诞节的前一天,我被公司辞退了,当老大说有事情和我聊一下的时候,我就有一种不好的预感,没想到真的被辞退了。在这家公司没干满一年就被辞退了,我知道自己做的不够好,但没想到却是这样的一个结果。被辞退的那几天是一种“寝食难安”的感觉,肚子明明很饿,但是心里却没有吃东西的欲望...
2019-01-15 23:25:26
713
16
原创 aop注解日志系统
背景本项目主要是利用apo注解实现了一个简单日志操作记录功能,主要是为了圆自己一个心愿吧,因为记得2017年老大让我做一个日志记录系统,当时没有做出来, 现在利用aop注解实现了一个简单的日志记录系统,这个用在微小型项目上还行,一般项目都用es来做日志存储了。代码<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xs
2021-12-12 11:10:40
796
原创 Spring学习:循环依赖问题
今天在公交车上看到一篇关于Spring面试题的文章,里面有一个Spring循环依赖的问题,因为这是一个很常见的问题,但是这篇文章里面关于Spring循环依赖的问题讲解的确很简单,所以就深入研究了一下,就发现有个疑问一直没有弄懂。导致今天一天都在搞清楚这个问题,工作都没有开始做的。Spring面试文章的链接是https://blog.csdn.net/qq_39390545/article/details/118905918?spm=1001.2014.3001.5501然后我在弄懂Spring循环依
2021-07-21 17:32:18
348
原创 第九章 设计模式之观察者模式
观察者模式定义观察者模式就当多个对象对一个对象存在依赖的时候,这个对象状态的改变需要通知到其他对象的时候,就会用到观察者模式。观察者模式的好观察者和被观察者是抽象耦合的观察者模式主要的类1.抽象主题(Subject)角色:也叫抽象目标类,它提供了一个用于保存观察者对象的聚集类和增加、删除观察者对象的方法,以及通知所有观察者的抽象方法。2.具体主题(Concrete Subject)角色:也叫具体目标类,它实现抽象目标中的通知方法,当具体主题的内部状态发生改变时,通知所有注册过的观察者
2021-07-18 21:46:27
280
2
原创 第八章 设计模式之单例模式
单例模式的定义一个类创建的对象都是同一个对象。在运行环境中,通过这个类取得的对象都是同一个。单例模式的好处1.节约资源,一个类只能创建一个对象,在运行环境中,所有根据这个类创建的对象都是同一个。2.可以避免频繁销毁和创建,提高性能。3.提供一个全局的访问点。单例模式的主要注意点创建单例模式首先这个类得有一个私有的构造方法,还有一个私有的静态属性,这个属性的类型就是这个类,并有一个静态的public方法,通过这个静态方法将对象返回。单例模式结构图单例模式代码:单例模
2021-07-17 17:38:57
166
1
原创 第七章 设计模式之代理模式
代理模式定义客户端想访问目标对象,为了控制客户端对目标对象的访问权限,还是由于目标对象存在多个,统一一种对目标对象的使用方式,所以在客户端和目标对象之间多了一个代理类。用代理类控制客户端对目标对象的访问。代理模式的好处1.可以控制对目标对象的访问权限,保证目标对象对客户端是透明的。2.要是有多个目标对象的话,可以统一对目标对象的访问模式,客户端不需要提供对目标的多种处理方式,例如代理类利用反射就可以处理多种目标类,而只需要给客户端提供一种访问方式就行。代理模式的主要类被代理对象:客户
2021-07-15 22:53:19
97
原创 第六章 设计模式之责任链模式
责任链模式的定义当有一个请求需要多个处理者处理的时候,如果是客户端调用一个个处理者来处理的话,就会显得比较臃肿,而且客户端和处理者之间的耦合度过高,客户端的处理逻辑也会显得比较复杂,如果将这些处理者组成一个链条,将请求交给链头的处理者来处理,至于链头的处理者如何去调用剩下的处理者来处理这个客户端就可以不用关心。...
2021-07-14 23:12:33
120
原创 第五章 设计模式之装饰器模式
装饰器模式的定义不改变原有类的结构却想对这个类的功能做扩展,或者在这个类的功能上做扩展。装饰器模式的关键类1.抽象构件(Component)角色:被装饰类类和抽象装饰器类都需要实现的接口,对基础类和抽象装饰器类有一个统一的约束。并于抽象装饰类接收统一的对象。2.具体构件(Concrete Component)角色:需要被装饰的类,也就是被装饰的类。3.抽象装饰(Decorator)角色:实现对被装饰类的引用,具体装饰类继承抽象装饰类。4.具体装饰(ConcreteDecor...
2021-07-14 22:32:35
178
原创 第四章 设计模式之适配器模式
适配器模式定义系统需用用到原有的类的功能,但是原有的类不符合现在的系统接口规范,需要将原有的类改造成符合现在系统的接口规范,使得两个因为接口规范不能在一起工作的类能在一起工作。适配器模式的关键类目标接口(Target):当前系统所期待的接口,可以是接口或者抽象类。适配者(Adaptee):不符合系统要求的类,需要对其进行改造,让它符合系统规范。适配器(Adapter):它是一个转换类,通过继承或者引用适配者,将适配者接口转换成目标接口,让客户按目标接口的格式访问适配者。适配器模式的种
2021-07-14 21:19:56
369
1
原创 第三章 设计模式之策略模式
策略模式的定义策略模式就是有一系列算法,这些算法只是行为上的不同,将这些算法一一封装起来,然后使得他们能够相互替换。策略模式的关键类策略接口:定义一个策略接口,起到约束具体策略类的作用,将具体的策略实例赋值给策略接口对象,在环境类中直接调用这个策略接口对象的相关方法,这样在用不同的策略类赋值给策略接口对象后,环境类后面的代码都不需要改动的。具体的策略类:将具体的算法封装到策略类中,并实现统一的策略接口。环境类:持有一个策略类的引用,最终给客户端调用。策略模式的好处:1.便于扩展,
2021-07-13 22:36:19
93
原创 第七章 对Ribbon的理解
一.概括Ribbon这个组建就是利用负载均衡的策略和RestTemplate调用远程服务,而且不用知道远程服务的ip和端口,只需要知道远程服务名就可以了。Ribbonde 有两个作用1.调用负载均衡器根据相应的规则选择某一个服务进行调研2.将逻辑url,也就是服务名换成ip加端口号的形式Ribbon的大体原理就是在RestTemplate发出请求之前利用拦截器进行拦截,在拦截器中创建负载均衡器(第一次调用的时候),负载均衡器从EurekaClient端获取到已经拉取到本地的服务列表,然后
2021-07-11 13:48:45
394
原创 第六章 对Eureka的理解
Eureka缓存的理解在Eureka的服务端通过三级缓存来存储注册信息,第一层:只读层(ConcurrentHashMap);第二层:读写层(guava);第三层:真实数据(ConcurrentHashMap);调用流程就是:先从只读层读取数据,要是没有读取到,就会从读写层读取数据,读写层由于有监听事件,当在读写层没有读取到数据的时候;事件会从真实数据读取。真是层虽然用的ConcurrentHashMap能支持并发,但是当并发量很高的时候会有读写冲突,而且Eureka服务列表更多的操作是读操作,所以在
2021-07-06 22:49:43
127
原创 第五章 对hystrix的理解
一.Hystrix概叙Hystrix作为springcloud微服务里面的一个很重要的组件,它的作用就是资源隔离,服务熔断和服务降级,资源隔离是因为Hystrix能设置信号量或者线程池里面核心线程,最大线程以及任务队列的原因。服务熔断和服务降级是Hystrix能设置熔断器的开关和熔断器打开关闭的条件来进行控制,当熔断器是关闭的状态或者调用的服务出现异常,Hystrix可以调用备用逻辑来进行处理。避免程序直接出错。服务熔断我个人的理解是熔断器已经开启,不调用远程服务了,直接调用FallBack
2021-07-06 17:52:12
221
1
原创 第四章 对Feign源码的解读
目录一.Feign的执行流程总结二.Feign的具体源码三.Feign中重要的类四.Feign的负载均衡策略一.Feign的执行流程总结1.在使用到Feign的时候,需要在启动类上加上@EnableFeignClients,在要调用的接口上加@FeignClient注解,由于在@EnableFeignClients注解中有一个@Import(FeignClientsRegistrar),其中FeignClientsRegistrar实现了ImportBeanDefinitionReg
2021-07-04 12:22:26
146
1
转载 深入理解Eureka获取注册信息(七)
对Eureka注册的理解Eureka获取注册信息有两种方式,一种是当客户端启动的时候会去全量获取一次注册信息,第二种方式是增量获取注册信息,开启一个定时任务,每30秒一次去服务端拉取服务,然后将获取到的服务合并。服务端有一个专门的缓存存储着变动的服务,这个缓存3分钟过期一次。Eureka-Client获取信息启动获取在客户端应用启动时,初始化DiscoverClient的时候,会主动去获取一次注册信息@InjectDiscoveryClient(ApplicationInfoMa.
2021-07-03 09:24:12
1165
转载 深入理解 Eureka实例自动过期(六)
自己对自动过期的理解Eureka自动过期的作用:就是剔除90秒(实际是180秒,duration这个被加了两次,这是eureka的一个错误)内没有发送心跳的服务(客户端每30秒发送一次心跳)。保证整个服务列表的健康性。Eureka自动过期的原理:开启一个每一分钟运行一次的定时任务,先判断是否开启保护机制,如果开启保护机制就直接返回,如果没有开启保护机制,则遍历所有的服务,通过服务的续约时间+持续时间和当前时间比较,要是小于当前时间,则判断当前服务过期。服务是否过期的判断//判断是否过期..
2021-07-03 07:14:31
1026
2
转载 深入理解Eureka 自我保护机制(五)
对自我保护的理解:自我保护的作用是保证服务的稳定性,也就是怕过多的服务心跳失败,是Eureka服务端的问题,而不是客户端的问题,所以为了避免将正常的服务剔除,所以加了保护机制,当然保护机制的话也有可能将已经宕掉的服务还保存着。自我保护的原理:每个客户端会每30秒向服务端发送一次心跳,所以一分钟一个服务会发送两次,所以当服务,当服务的个数是count,那么expectedNumberOfRenewsPerMin =count*2;还有一个最小续约次数,numberOfRenewsPerMinThr..
2021-07-02 23:01:20
672
转载 深入理解Eureka-Client 发送心跳(三),
自己的理解:Eureka的心跳作用就是為了最後的保護機制。首先會根據心跳更新續約時間,然後根據續約時間來判斷服務是否過期,最後根據服務是否過期來剔除服務。Eureka心跳的流程:客戶端會啓動一個30秒一次的綫程發送心跳續約的請求。服務端接收到心跳續約的請求后悔更新這個服務的續約時間 lastUpdateTimestamp = System.currentTimeMillis() + duration;其實上面就已經完成了續約的工作,但是還要結合著過期判斷來看服務端會開啓
2021-07-01 23:08:33
930
转载 深入 Eureka 服务注册 源码分析(二)
Eureka-Client注册服务啥时候会注册在两种情况下客户端会主动向服务端发送自己的注册信息1.当客户端的instance信息发生改变时,Eureka-Client和Server端信息不一致时2.当客户端刚刚启动的时候。定时器注册com.netflix.discovery.DiscoveryClient ,使用的@Inject //google guice 注入遵循 JSR-330规范private void initScheduledTasks() { //省略,
2021-07-01 17:22:35
194
原创 并发编程之阻塞队列ArrayBlockingQueue
一.ArrayBlockingQueue类图结构ArrayBlockingQueue是一个有界阻塞队列,先看一下ArrayBlockingQueue的几个重要元素 /**数组存放数据*/ final Object[] items; /** 记录取数据的位置,可以看成是队头 */ int takeIndex; /** 记录存数据的位置,可以看成是队尾 */ int putIndex; /** 队列长度,元素的个数 */ int.
2021-05-26 00:16:15
486
转载 Harbor安装
Harbor安装Harbor是一个开源的镜像仓库.harbor官网环境 软件 版本 下载地址 备注 系统 Centos 7.4 - - - docker 18.09.0-3 传送门 - - docker-componse 1.24.1 传送门 - - harbor v1.8.2-rc1 传送门 无 安装环境如果没有安装docker,就需要先安装docke
2021-05-23 16:39:14
315
转载 k8s安装教程
周日在宿舍呆着没意思,上个星期就想吧k8s的安装教程写成博客的,这毕竟是我花了一周时间搭建的,就想把这个过程给记录下来,为了后面方便学习k8s使用。这里面都是参考网上的搭建教程操作的,今天又将这个搭建过程走了一遍,由于初次学习k8s,中间会出现很多问题,但是磕磕碰碰都解决了。 我分为这几步走的1.搭建k8s。2.安装docke私有仓库 harbor。3.学会用idea将springboot工程打包docker镜像。4.利用k8s部署项目。5.将前端代码和n...
2021-05-23 16:18:50
2715
原创 利用java来操作k8s
由于项目有个需求需要利用api来操作k8s,所以就有了这样的一个博客,下面是一个很简单的demo,满足了查询和新增服务的要求。其中需要注意的是连接k8s的配置文件config就是取的服务器上安装的k8s所产生的配置文件,只需要将这个文件放入到项目中。这个文件在安装了k8s后的路径是~/.kube/下的。引入的jar <dependency> <groupId>io.kubernetes</groupId>
2021-05-21 17:21:24
5165
原创 k8s环境搭建
这里有一篇很好的k8s安装教程,本人亲测有效https://note.youdao.com/ynoteshare1/index.html?id=16d3b27fc054b2807ef8cebb7da0d78d&type=note可能需要注意一下ip的替换然后再加入node节点的时候记得查看自己的token,然后替换一下token#############################################################################
2021-05-10 17:37:24
137
原创 第三章 Spring Cloud Eureka
一.概述Eureka作为注册中心,分为Eureka Server和Eureka Client,Eureka Server提供服务注册,提供服务信息列表功能和刷新服务列表功能,Eureka Client提供注册服务,拉取服务和提供服务心跳(续约)的功能。用大白话讲就是Eureka Server提供一个注册平台,Eureka Client作为生产者和消费者,可以将自身的信息注册到Eureka Server上,也可以从Eureka Server上获取其他服务信息来进行远程调用。Register(服务注
2021-01-19 11:35:59
189
原创 对Springboot原理的理解
springboot给人的感觉就是简单易用,相比spring,少了xml文件繁琐的配置,想和其他组件结合,只需要引入相关组件jar包,并在yml或者property文件中添加组件需要的值就可以使用。springboot和spring相比就是Spring在xml文件中声明了很多bean,例如datasource,试图解析器等相关bean。springboot通过maven依赖,自动将这些bean引入到ioc容器。springboot自带tomcat,问题是springboot如何通过maven依赖将这些b
2020-12-17 21:00:16
293
原创 对红黑树的认识
目录1.红黑树的的由来1.1 二叉查找树1.2AVL树(平衡二叉树)1.3红黑树2.红黑树的特性3.红黑树的左旋和右旋3.1 红黑树的左旋3.2红黑树的右旋4.红黑树的插入5.红黑树的应用1.红黑树的的由来1.1 二叉查找树二叉查找树是一种方便查找数据的树,它在满足二叉树的特性上,拥有一个特性,那就是二叉查找树中任意一个节点,它的左子节点小于这个节点,它的右子节点大于这个节点。它正常的查找效率是O(logn),但也会出现一种极端的情况,那就是二叉查找.
2020-12-14 18:08:58
184
原创 排查linux 磁盘被占满了的问题
排查linux服务器磁盘被占满了的方法今天发现一台服务器的磁盘被占满了,所以这个时候就需要找出是那些文件比较多或者比较大,导致磁盘被占满了。第一步:查看磁盘使用率[root@iZ8vb3omil28ybw2zppjlwZ jobs]# df -hFilesystem Size Used Avail Use% Mounted on/dev/vda1 40G 38G 222M 100% /devtmpfs 1.8G 0 ...
2020-10-24 15:29:26
2620
1
原创 golang 内存泄漏以及异常退出的问题解决
项目要求要求开发一个agent来监控主机的性能,这个agent最好是编译好后能直接在主机上运行,所以选择了用go来编写。由于第一次用go,这里面踩了不少坑。内存泄漏当agent部署到主机上的时候,运行一段时间就停掉了,而且还没有错误提示,最后在阿里云这个主机的监控图形中看到,这个主机的内存是慢慢向上的,等内存使用率接近100%的时候,内存突然降了下来,当时就怀疑当内存使用率接近100%的时候,agent就会被停掉,然后内存得以释放。利用linux命令找到这个agent的内存变化,发现随着时间的增
2020-10-16 18:56:40
1818
原创 第二章 SpringCloud Ribbon的源码解读
在SpringCloud中Ribbon的作用就是根据负载均衡策略从服务列表中选取合适的服务进行调用。Ribbon调用服务的基本流程上面这一张图从RestTemplate开始看起1.当RestTemplate发起对远程服务的调用的时候,会调用InterceptingClieantRequest的executeInternal()方法。2在InterceptingClieantRequest中会调用拦截器LoadBalanceInterceptor的intercept()拦截方法。3.在L
2020-09-19 15:05:30
199
原创 第一章 springcloud几大组件的介绍
不知道这个时候学习springcloud是否算太晚了。 springcloud作为一种心的分布式架构被广泛应用到企业开发中,特别是中小型企业,现在已经基本取代了dubbo。为了增强自己的竞争力,不被这个时代淘汰,所以在慢慢学习springcloud,而且所在公司也在应用springcloud。 springcloud作为一个分布式框架,将我们以前一个工程完成一个项目的方式做出了拆分,将项目按功能模块划分一个个小的项目,使得每个功能模块都能独立部署,独立对外提供服务,使得项目...
2020-07-20 21:46:52
306
转载 B+树和B-树的区别
自己觉得这篇文章写的非常好,简单明了,很容易理解,所以就转载过来了这一次我们来介绍 B+ 树。一个m阶的B树具有如下几个特征:1.根结点至少有两个子女。2.每个中间节点都包含k-1个元素和k个孩子,其中 m/2 <= k <= m3.每一个叶子节点都包含k-1个元素,其中 m/2 <= k <= m4.所有的叶子结点都位于同一层。5.每个节点中的元素从小到大排列,节点当中k-1个元素正好是k个孩子包含的元素的值域分划。一个m阶的B+
2020-07-09 09:58:52
853
原创 定个目标
1.去凤凰古镇或者同里玩一把。2.投资比特币相关的资产,定投HT和OKB,最终目标是HT有一万个,OKB也有一万个。3.指数基金有十万吧,一天波动几百也挺美滋滋的。...
2020-04-12 18:55:08
173
原创 面试准备之设计模式
今天北京暴雪,2019-12-16 星期一,被套了大半年的万科终于回本了设计模式的六大原则总原则-开闭原则:对修改关闭,对扩展开发。里氏替换原则:在继承类的时候,除了对父类进行一些功能的扩展外,尽量不要重载父类的方法。我们经常用父类承接子类对象,当重载父类方法后,如果有一处想调用父类原来的方法,但是实际这个父类指向的是子类对象的话,由于方法被重载,所以有可能出现意想不到后果。单...
2019-12-16 23:31:59
330
3
原创 面试准备之redis哨兵模式的搭建
去年准备面试的时候就看到了redis的三种集群模式,但只是理论上看了一下,没有实践过,今天做了一遍,其实并不难,虽然比较简单,但还是有点成就感的,哈哈,这家公司其实可以用得上的,但是自己却没有实践,现在将这个搭建过程记录下来。主从复制模式第一步.复制redis配置文件将redis配置文件复制成三分,分别命名成6379redis.conf,6380redis.conf,6381redis...
2019-12-14 09:18:30
328
原创 面试准备之redis知识点
一.redis为什么会这么快?1.redis是基于内存进行操作的,没有对硬盘IO操作的瓶颈。2.redis的数据结构相对简单,操作也相对简单,而且对redis的数据结构进行了专门的设计了的。3.redis使用单线程多路IO复用,没有了多线程的上下切换,也没有锁竞争。多路IO复用是指有多个网络请求,只用一个线程来处理。多路IO复用是利用select,poll,epoll模型来...
2019-12-12 21:14:58
150
原创 面试准备之redis三种集群模式
目录主从模式主从模式的好处主从模式的缺点主从节点数据同步的原理哨兵模式哨兵模式的优点哨兵模式的缺点哨兵模式的原理集群模式集群模式的优点集群模式的原理现在开始写redis系列,虽然都是照着别人的博客在写,但是我尽量翻译成我自己的理解,平时项目中有用redis,但是对reids的关注比较少,所以自认为redis是自己比较薄弱的一环。其实在一年之前为了找工...
2019-12-11 23:36:41
477
原创 面试准备之mysql知识点介绍
目录1.mysql索引1.索引类型2.索引的好处和坏处4.为什么索引结构是B+树,而不是平衡树或者是B树或者是hash表5.innerdb和myisam的索引6.索引的好处和坏处3.Mysql的锁1.表锁和行锁2.共享锁和排他锁3.间隙锁3.Mysql的事物4.Mysql的优化1.mysql索引1.索引类型聚集索引和辅助索引,辅助索...
2019-12-11 13:30:55
263
原创 第三次失业时的感想
本来这次想着离职后就去爬泰山的,但是却没有想到自己失业后出去找工作却是深受打击,所以也就没有出去玩的心情了。正式找工作是2019年11月11号,然后离职是在2019年11月19号,今天写这篇博客是2019年12月1号,从离职到今天已经十多天了,时间飞快流逝,但面试准备却还没有做的有多充足。前面准备基础的时候,还能比较深入的去准备,到后面的框架和中间件以及数据库这块就没有那么用心...
2019-12-01 15:43:53
550
6
原创 面试准备之mysql优化
目录一.创建数据库二.mysql优化1.开启慢日志2.使用EXPLAIN对慢查询SQL或者对你刚写的SQL来进行分析3.下面这些操作能让你的查询更加快速。三.分区分表四.主从复制,读写分离。五.使用缓存。 本来不打算写了的,但是不写看了一天觉得第二天可能就忘记了,这一天算是白看了。后面学习知识点的话,不打算以找工作为驱动点了,而是以写博客为驱...
2019-12-01 00:14:01
223
springboot+mybatis整合
2019-07-25
alisoft-xplatform-asf-cache-2.5.1.jar
2017-09-19
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人