自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

日有寸进

世上只有一种英雄主义,就是在认清生活真相之后依然热爱生活。

  • 博客(16)
  • 资源 (1)

原创 为什么要重写 hashCode() 和 equals()

目录Object 的 hashCode() 与 equals()hashCodeequals重写 equals() 的场景String 的 equals()重写 hashCode() 的场景Object 的 hashCode() 与 equals()hashCodepublic native int hashCode();原生的 hashCode() 是一个本地方法,返回的是根据物理地址换算出来的一个唯一值。equalspublic boolean equals(Object obj) {

2020-07-19 17:47:06 87

原创 关于 String、StringBuffer、StringBuilder 的常见面试题
原力计划

目录String创建方式一方式二方式三最大长度拼接方式一方式二StringBuilderappendtoStringStringBuffertoStringString类不可变(final),内部维护的 char[] value 数组不可变(final)。创建方式一String str = "xxx";字符串常量池如果有 “xxx”,不创建对象;如果没有,在字符串常量池创建"xxx"。方式二String str = new String("xxx");字符串常量池如果有 “xxx”,创

2020-07-19 16:45:15 148

原创 Docker 面试题

目录DockerDocker镜像Docker容器Docker仓库Docker与虚拟机有何不同Docker的工作原理Docker容器的几种状态DockerDocker是一个容器化平台,它以容器的形式将应用程序及其所有依赖项打包在一起,以确保应用程序在任何环境中运行。Docker镜像Docker 镜像是 Docker 容器的只读模板,用于创建容器。Docker容器Docker容器包括应用程序及其所有依赖项,但与其他容器共享内核,作为主机操作系统上用户空间中的独立进程运行。Docker容器不依赖于任何

2020-07-19 11:48:09 417

原创 Eureka 的多级缓存设计

目录三种缓存三种缓存Eureka Server 存在三个变量:registry、readWriteCacheMap、readOnlyCacheMap 保存服务注册信息。类 AbstractInstanceRegistryprivate final ConcurrentHashMap<String, Map<String, Lease<InstanceInfo>>> registry = new ConcurrentHashMap<

2020-07-18 18:17:55 190

原创 SpringBoot 整合 Mybatis 源码阅读(2.3.1.RELEASE)

目录从 spring.factories 开始MybatisAutoConfiguration@MapperScanMapperScannerRegistrarrefreshinvokeBeanFactoryPostProcessorsConfigurationClassPostProcessor从 spring.factories 开始导入依赖 mybatis-spring-boot-starter 后,会出现如图所示这么一个包,主要看 MybatisAutoConfigurationMybati

2020-07-14 10:02:41 96

原创 EurekaClient 服务注册流程

服务注册的入口 这篇文章最后一段代码@Overridepublic void start() { // only set the port if the nonSecurePort or securePort is 0 and this.port != 0 if (this.port.get() != 0) { if (this.registration.getNonSecurePort() == 0) { this.registration.setNonSecurePort(this.p

2020-07-12 16:54:01 241

原创 服务注册的入口

目录接口服务注册的触发路径接口SpringCloud 是一个生态,它提供了一套标准,这套标准可以通过不同的组件来实现,其中就包含服务注册/发现、熔断、负载均衡等,在 spring-cloud-commons 这个包中, org. springframework. cloud. client. serviceregistry路径下,可以看到个服务注册的接口定义 ServiceReglstry。它就是定义了 SpringCloud 中服务注册的一个接口。public interface Servi

2020-07-12 14:34:17 94

原创 Spring5 源码阅读笔记(1.5)finishRefresh() 完成刷新

protected void finishRefresh() { //清空上下文级别的资源缓存 clearResourceCaches(); //初始化上下文的LifecycleProcessor 见1.5.1 initLifecycleProcessor(); //调用所有LifeCycle的start方法 见1.5.2 getLifecycleProcessor().onRefresh(); //发布ContextRefreshedEvent publishEvent(new Co

2020-07-12 11:26:54 79

原创 Eureka 自我保护机制
原力计划

什么是自我机制?自我保护机制是一种应对网络异常的安全保护措施。它的架构哲学是宁可保留不健康的微服务,也不轻易注销健康的微服务。Eureka在运行期间会统计全部服务总体的心跳失败的比例,在15分钟内是否低于85%。如果低于,则认为是网络异常问题,应该保护,Eureka Server会将当前的实例注册信息保护起来,同时提示一个警告。一旦进入保护模式:Eureka Server将会不再删除服务注册表中的数据。也就是不会注销任何微服务。Eureka server仍然能够接受新服务的注册和查询请求,但是不

2020-07-11 20:54:30 93

原创 push 和 pull 的优缺点

push 和 pull 的优缺点push优点缺点适用场景优化pull优点缺点优化方案适用场景push优点生产者主动推送给消费者,及时性很高缺点当消费者消费能力远低于生产者生产能力,那么一旦生产者推送大量消息到消费者时,就会导致消费者消息堆积,处理缓慢,甚至服务崩溃。(那么如何解决这个问题呢?需要mq提供流控制,也就是依据消费者消费能力做流控。比如rabbitmq设置Qos,限制消费数量。)生产者需要维护和每个消费者之间的会话。适用场景对于数据实时性要求高的场景优化不采用

2020-07-09 16:44:50 574

原创 Netty 源码阅读笔记(4) ServerBootStrap

目录类关系图4 bind4.1 initAndRegister4.1.1 newChannel4.1.2 init4.1.2.1 ServerBootstrapAcceptor类关系图4 bind类 AbstractBootstrappublic ChannelFuture bind() { validate(); SocketAddress localAddress = this.localAddress; if (localAddress == null) {

2020-07-05 17:34:28 74

原创 Netty 源码阅读笔记(5) NioServerSocketChannel

目录类关系图5.1 构造方法类关系图5.1 构造方法public NioServerSocketChannel() { this(newSocket(DEFAULT_SELECTOR_PROVIDER));}public NioServerSocketChannel(ServerSocketChannel channel) { //注册接收事件 super(null, channel, SelectionKey.OP_ACCEPT); config = ne

2020-07-04 21:03:56 55

原创 Netty 源码阅读笔记(6) DefaultChannelPipeline

目录类关系图6.1 构造方法6.1.1 TailContext6.1.2 HeadContext类关系图6.1 构造方法protected DefaultChannelPipeline(Channel channel) { this.channel = ObjectUtil.checkNotNull(channel, "channel"); succeededFuture = new SucceededChannelFuture(channel, null); voidPro

2020-07-04 21:01:34 70

原创 Netty 源码阅读笔记(1) NioEventLoopGroup

目录类结构图1.1 构造方法1.1.1 newChild类结构图1.1 构造方法public NioEventLoopGroup() { this(0);}public NioEventLoopGroup(int nThreads) { this(nThreads, (Executor) null);}public NioEventLoopGroup(int nThreads, Executor executor) { this(nThreads, executo

2020-07-04 19:39:18 56

原创 Netty 源码阅读笔记(3) NioEventLoop

目录类关系图3.1 构造方法3.2 run3.2.1 select3.2.2 processSelectedKeys类关系图3.1 构造方法NioEventLoop(NioEventLoopGroup parent, Executor executor, SelectorProvider selectorProvider, SelectStrategy strategy, RejectedExecutionHandler rejectedExecutionHandler)

2020-07-04 19:33:51 68

原创 Netty 源码阅读笔记(2)ThreadPerTaskExecutor

public final class ThreadPerTaskExecutor implements Executor { private final ThreadFactory threadFactory; public ThreadPerTaskExecutor(ThreadFactory threadFactory) { if (threadFactory == null) { throw new NullPointerException("

2020-07-04 15:32:46 59

mysql-5.7.9-linux-glibc2.5-x86_64.tar.gz

Linux 使用的版本是centos 7,为方便起见,先把防火墙关闭,配置好网络,在安装部分,会分成两部分讲,首先讲单实例安装,也就是一台服务器上就装一个mysql,接下来就多实例安装,在一个服务器上安装2个甚至多个mysql.

2019-09-17

空空如也

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