自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(20)
  • 收藏
  • 关注

原创 Tomcat-关闭原理

Tomcat启动Tomcat通过Bootstrap类来启动,它的任务是初始化类加载器,并实例化Catalina类Catalina类的作用是解析server.xml文件并创建Server组件Server组件的作用是管理若干个Service组件Service组件的作用是启动连接器组件和容器组件EngineCatalina怎么创建Server组件public void start() { if (this.getServer() == null) { thi

2020-10-29 19:37:33 243

原创 AOP实现方式

Spring AOP实现方式是动态代理,AOP实现除了动态代理还有编译期的静态编织或者类加载期编织。在Java平台上,我们可以使用Java Agent技术,在类加载过程中对字节码进行操纵,比如修改或者替换方法实现等。在Spring体系中,如何做到类似功能呢?你可以使用AspectJ,它具有更加全面的能力,当然使用也更加复杂...

2020-10-28 20:24:14 136

原创 Spring Bean生命周期与作用域

Spring Bean生命周期创建过程销毁过程创建过程销毁过程依次调用DisposableBean的destroy方法和Bean自身定制的destroy方法。Spring Bean的作用域最后多看源码,善于思考背后的设计思想

2020-10-28 20:21:01 182

原创 FastDFS-nginx插件作为FastDFS客户端访问

前言:FastDFS官方不支持浏览器访问文件,要想访问文件,有两种办法:1、Java客户端,用户自己编写程序实现;2、通过nginx插件下面说下nginx插件访问FastDFS的原理:很容易知道nginx-FastDFS插件的原理是实现了FastDFS客户端,然后开启一个http服务,这样用户就可以通过http协议访问步骤:安装tengine,添加nginx-FastDFS插件。安装成功之后nginx知道了nginx-FastDFS插件的存在,这是前提./configure --prefix=/

2020-10-23 10:30:43 286

原创 从静态代理到JDK动态代理

前言:静态代理和动态代理是一种编程风格、编程范式,也叫设计模式静态代理public class StaticProxy implements Service{ public static void main(String[] args) { StaticProxy staticProxy=new StaticProxy(new DefaultService()); staticProxy.show(); } private Service s

2020-10-21 17:27:03 100

原创 mongodb企业级应用管理

概要:mongoDB的聚合操作mongodb 集群:复制mongodb 集群:分片一、 mongoDB的聚合操作知识点:pipeline 聚合mapRedurce 聚合在聚合中使用索引1.pipeline 聚合pipeline相关运算符:$match :匹配过滤聚合的数据$project:返回需要聚合的字段$group:统计聚合数据示例:# $match 与 $project使用db.emp.aggregate({$match:{"dep":{$eq:"客服部

2020-10-20 12:50:55 226

原创 Dubbo源码笔记

Dubbo生成Cluster InvokerReferenceConfig#getRegistryProtocol#referRegistryProtocol#doReferInvoker invoker = cluster.join(directory);

2020-10-16 22:37:19 101

原创 Redis杂碎知识

Redis哨兵机制选举使用Raft算法JedisCluster原理是cluster nodes获取slot与节点的映射关系,也可以不用这样,直接使用RedisCluster的MOVED

2020-10-16 15:35:47 87

原创 设计原则-KISS和YAGNI

KISS(尽量保持简单)Keep It Simple and Stupid.Keep It Short and Simple.Keep It Simple and StraightforwardYAGNI(你不会需要它)You Ain’t Gonna Need It不要去设计当前用不到的功能;不要去编写当前用不到的代码。实际上,这条原则的核心思想就是:不要做过度设计总结:YAGNI 原则跟 KISS 原则并非一回事儿。KISS 原则讲的是“如何做”的问题(尽量保持简单),而 YAGN

2020-10-15 10:50:00 185

原创 设计原则-依赖反转原则

控制反转实际上,控制反转是一个比较笼统的设计思想,并不是一种具体的实现方法,一般用来指导框架层面的设计。这里所说的“控制”指的是对程序执行流程的控制,而“反转”指的是在没有使用框架之前,程序员自己控制整个程序的执行。在使用框架之后,整个程序的执行流程通过框架来控制。流程的控制权从程序员“反转”给了框架。依赖注入依赖注入和控制反转恰恰相反,它是一种具体的编码技巧。我们不通过 new 的方式在类内部创建依赖类的对象,而是将依赖的类对象在外部创建好之后,通过构造函数、函数参数等方式传递(或注入)给类..

2020-10-15 10:31:58 221

原创 Dubbo源码-服务消费

Dubbo支持多注册中心同时消费, 如果配置了服务同时注册多个注册中心, 则会在ReferenceConfig#createProxy 中合并成一个 Invok

2020-10-14 23:04:15 82

原创 Dubbo源码-服务暴露

Dubbo服务暴露流程获取ServiceBean,继承自ServiceConfigServiceConfig#doExportServiceConfig#doExportUrlsServiceConfig#doExportUrlsForlProtocol(重点)动态代理转换成Invoker(JavassistProxyFactory 和 JdkProxyFactory)RegistryProtocol#export委托具体协议(Dubbo)进行服务暴露, 创建NettyServer监听端口和

2020-10-14 20:48:37 90

原创 设计原则-里氏替换原则

里式替换原则是用来指导,继承关系中子类该如何设计的一个原则。理解里式替换原则,最核心的就是理解“design by contract,按照协议来设计”这几个字。父类定义了函数的“约定”(或者叫协议),那子类可以改变函数的内部实现逻辑,但不能改变函数原有的“约定”。这里的约定包括:函数声明要实现的功能;对输入、输出、异常的约定;甚至包括注释中所罗列的任何特殊说明。理解这个原则,我们还要弄明白里式替换原则跟多态的区别。虽然从定义描述和代码实现上来看,多态和里式替换有点类似,但它们关注的角度是不一样的。多态是.

2020-10-14 09:37:26 153

原创 UML-类之间的关系

前言:类与类之间都哪些交互关系呢?UML 统一建模语言中定义了六种类之间的关系。它们分别是:泛化、实现、关联、聚合、组合、依赖泛化(Generalization)可以简单理解为继承关系实现(Realization)一般是指接口和实现类之间的关系聚合(Aggregation)是一种包含关系,A 类对象包含 B 类对象,B 类对象的生命周期可以不依赖 A 类对象的生命周期,也就是说可以单独销毁 A 类对象而不影响 B 对象,比如课程与学生之间的关系组合(Composition)也是一种包含关系。

2020-10-13 19:11:30 167

原创 Redis集群-ShardedJedis

Redis3.0开始官方支持集群方案,之前的集群方案有codisTwemproxyJedis的ShardedJedis实现key分片介绍

2020-10-12 16:36:39 251

原创 缓存读写策略-Cache Aside(旁路缓存)策略

Cache Aside(旁路缓存)策略以数据库中的数据为准,缓存中的数据是按需加载的。它可以分为读策略和写策略。读策略从缓存中读取数据;如果缓存命中,则直接返回数据;如果缓存不命中,则从数据库中查询数据;查询到数据后,将数据写入到缓存中,并且返回给用户。写策略更新数据库中的记录;删除缓存记录。答疑:1、不能先删除缓存,后更新数据库2、出现的问题。不过这种问题出现的几率并不高,原因是缓存的写入通常远远快于数据库的写入,所以在实际中很难出现请求 B 已经更新了数据库并且清空了缓存,请求 A 才更

2020-10-11 20:47:38 5929

原创 2020秋招笔试编程题

寻找矩形最大面积axb的矩形内切蛋糕,每块1x2,几种切法给定一个正整数数组L,一个非负整数M,和S,从L选若干个数,和为S,有几种选法,可以利用M次魔法,每次魔法会将选定的数变成该数的阶乘...

2020-10-11 11:56:28 343 1

原创 设计模式-面向对象-多用组合少用继承

继承主要有三个作用:表示 is-a 关系,支持多态特性,代码复用。而这三个作用都可以通过其他技术手段来达成。比如 is-a 关系,我们可以通过组合和接口的 has-a 关系来替代;多态特性我们可以利用接口来实现;代码复用我们可以通过组合和委托来实现。讨论:我们在基于 MVC 架构开发 Web 应用的时候,经常会在数据库层定义 Entity,在 Service业务层定义 BO(Business Object),在 Controller 接口层定义 VO(View Object)。大部分情况下,Entity

2020-10-10 10:14:10 386

原创 jvm笔记

GC和GC Tuning作者:马士兵教育 http://mashibing.comGC的基础知识1.什么是垃圾C语言申请内存:malloc freeC++: new deletec/C++ 手动回收内存Java: new ?自动内存回收,编程上简单,系统不容易出错,手动释放内存,容易出两种类型的问题:忘记回收多次回收没有任何引用指向的一个对象或者多个对象(循环引用)2.如何定位垃圾引用计数(ReferenceCount)根可达算法(RootSearching)3.常

2020-10-09 11:55:02 286 1

原创 Redis-对象

Redis并没有使用简单动态字符串SDS、双端链表、字典、压缩列表、整数集合等数据结构实现键值对数据库,而是基于这些数据结构创建一个对象系统,包括字符串对象、列表对象、哈希对象、集合对象和有序集合对象。Redis在执行命令之前可以根据对象的类型来判断一个对象是否可以执行给定的命令。也可以针对不同的使用场景,为对象设置多种不同的数据结构实现,从而优化对象在不同场景下的使用效率。Redis的对象系统实现了基于引用计数技术的内存回收机制,当程序不再使用某个对象的时候,这个对象所占用的内存会被自动释放。Red.

2020-10-09 10:48:26 85

go语言编写的兼容redis协议的kv存储

go语言编写的兼容redis协议的kv存储

2022-12-04

空空如也

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

TA关注的人

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