- 博客(110)
- 收藏
- 关注
原创 Netty---论内存池源设计的巧妙
一、整体内存池架构设计顶层使用allocator分配内存,类似门面模式,将内存分配真正交给对应的arena。二、PooledByteBufAllocator、Arena的创建PooledByteBufAllocator构造的时候根据CPU核数创建了多个arena数组。线程本地也存放了一个threadCache,threadLocalMap中保存的key是threadLocal对象,value是PoolThreadCache。每个Arena里面创建了一组双向链表,根据使用率的不同
2021-08-25 10:55:59
365
原创 手写RPC框架
一、架构预览二、传输的实体类为了使异步请求能正确接收到对端的响应,分别在请求和响应传输实体中加了唯一 ID 作为标记。 @Getter @Setter public class RpcRequest implements Serializable { private static final long serialVersionUID = 7750930861331017198L; //接口名 private String interfaceName;
2021-04-04 16:06:57
309
1
原创 手写布隆过滤器(Bloom Filter)
一、特点 布隆过滤器是一种概率形的数据结构,通过布隆过滤器可以知道一个元素一定不存在或者可能存在。 优点:空间和时间都要远远超过一般算法。 缺点:会存在一定的误判,而且删除困难。  
2020-12-20 15:05:07
567
1
原创 JDK8中新的日期类学习
一、LocalDate类1、获得当前日期(年、月、日) LocalDate localDate = LocalDate.now(); System.out.println(localDate); //localDate.getMonth()返回的是个枚举对象 System.out.println("年: " + localDate.getYear() + "\t月: " + localDate.getMonth().getValue() + "\t日: " + localDate
2020-12-14 19:35:23
230
原创 记数据库更新操作中set和and联合使用的坑
一、秒杀场景原始代码 秒杀时候,发现代码出现超卖的问题。 最原始控制器代码: @RequestMapping("/miaosha") @Controller public class MiaoshaController { @Autowired private IMiaoshaService iMiaoshaSer
2020-11-23 12:19:38
464
原创 论Maven(SpringBoot打成可执行jar包的那些坑、SpringBoot打war包)
一、概述Maven1、Maven工程的约定目录项目名(根目录) - src - main - java(主程序的java源码) &nbs
2020-11-15 09:19:25
631
原创 GitHub中拉取和提交那些事
一、.gitignore文件我们总会有些文件无需纳入Git的管理,也不希望它们总出现在未跟踪文件列表。比如一些日志文件,或者编译过程中创建的临时文件等。我们可以创建一个名为**.gitignore** 的文件,列出要忽略的文件模式。1、前端模板2、后端模板二、...
2020-11-13 12:47:46
605
原创 Git基本指令(包含删除文件、修改文件)以及分支相关
一、Git中的对象(涉及到底层)blob对象用于表示一个文件;根据其内容计算哈希值,前面两位哈希值作为./git/objects/下面的文件夹目录名字,剩下的38位哈希值作为文件的名字。不同名但是相同内容的文件,其哈希值相同,其blob对象也是共用的,所以就有了树对象,可以保存文件名。commit对象用于表示一个提交;每一次提交都会产生一个commit对象,commit对象之间会组织成一棵树的结构,除了第一次提交产生的commit对象,其它的commit对象都会有父亲commit对象;
2020-11-12 12:00:42
419
原创 基于SpringBoot实现的文件监听器
最近有这么个需求,用户期望可以通过修改配置文件,并将数据文件丢到服务器上面,立即读取数据并绘制。由于这个数据我们不能直接拿来就用,需要转一遍格式,而且转换的速度又不是非常快,所以 和师兄们商量着想了个替代方案,异步化处理数据,不是用户点击之后才进行数据的转换,而是先转好,这个数据放内存也不靠谱,肯定要放数据库做持久化的,反正先整着试试。1、引依赖 <dependency> <groupId>commons-io</groupId>
2020-10-15 19:08:54
1788
原创 分布式电商项目(单体架构->分布式架构)
前后端的代码都在GitHub上,https://github.com/xiguanlezz/E-Commerce2基于CAS的登录中心(跨域名单点登录)+Redis+Tomcat集群(修改SpringBoot的配置文件中的端口模拟)+JWT生成token+基于Redis的分布式锁一、JWT解析一、基于CAS的单点登录1、原理图2、实现代码(不是很妙,用了模板引擎)登录拦截器: @Order(1) public class LoginInterceptor implements
2020-10-09 09:32:35
1140
2
原创 Mysql的存储引擎介绍(重点:Myisam和InnoDB)
Mysql的架构图如下:客户端通过一些库连接到数据库服务器,线程管理模块首先会进行授权检查,检查通过后会看线程池中是否有空闲的线程,没有就新创建一个线程与客户端建立连接。图中的SQL Interface、Parser、Optimizer、Caches&Buffers分别对应SQL语法接口、SQL解析器、优化器、缓存。其中Caches部分默认缓存的是SQL语句,数据缓存默认是不开启的,可以通过...
2020-09-29 15:48:59
288
原创 通俗讲解HTTPS
本篇博客,参考了以下链接:一、HTTP和HTTPS的区别1、使用HTTP传输的内容是明文,没有经过任何加密,而HTTPS传输的是密文。2、HTTP使用的默认端口 是80,HTTPS使用的默认端口是443。3、HTTPS协议是其实是HTTP+SSL或TLS构建的可加密传输、身份认证、数据完整性保护等网络协议。下面会就HTTPS提供的这三个功能进行详细讲解。二、加密算法在讲解HTTPS中的身份认证的时候,必须要先了解加密算法。通常加密算法分为两类,一类是对称密钥加密算法,另一类是非对称密钥加
2020-09-15 12:30:01
146
原创 行为型设计模式---解释器模式和观察者模式
一、解释器模式 解释器模式提供了评估语言的语法或表达式的方式。给定一个语言,定义它的文法表示,并定义一个解释器,这个解释器使用该标识来解释语言中的句子。手动模拟后缀表达式(也叫逆波兰表达式)的例子。 解释器接口: public interface Interpreter { int interpret(); } 
2020-09-14 19:17:54
181
原创 行为型设计模式---备忘录模式和责任链模式
一、备忘录模式 备忘录模式的使用场景为保存一个对象的某个状态,以便在适当的时候恢复对象。比如说操作系统的撤销,word文档的撤销以及IDE的撤销功能都可以使用备忘录模式。 手记类: public class Article { private String title; private String content;
2020-09-13 18:17:18
181
原创 行为型设计模式---命令模式和中介者模式
一、命令模式 命令模式将“请求”封装成了对象,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。 课程视频类(真正的命令执行对象): /** * 真正的命令执行对象 */ public class CourseVideo { private String name;
2020-09-13 15:57:41
321
原创 行为型设计模式---迭代器模式和访问者模式
一、迭代器模式 迭代器模式提供一种方法,顺序访问一个集合对象中的各个元素,而又不暴露该对象的内部表示。该模式为遍历不同的集合结构提供了一个统一的接口。一般都不会手写迭代器,都是使用封装好的,比如JAVA 中的 iterator。 葫芦娃类: public class CalabashBrother { private Strin
2020-09-13 15:24:15
511
原创 行为型设计模式---模板方法模式和状态模式
一、模板方法模式 模板方法模式定义了一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤,其中各子类中公共的行为被提取出来并集中到一个公共父类中。符合开闭原则。 定义的游戏骨架抽象类: public abstract class Game { protected
2020-09-13 14:26:23
386
原创 结构型设计模式---代理模式
代理模式为其他对象提供一种代理以控制对这个对象的访问。代理模式能将代理对象与真实被调用的目标对象分离,在一定程度上降低了系统的耦合度,扩展性也比较好。Spring框架中大量使用了代理模式,规则大致如下: 当Bean有实现接口时,Spring会用JDK的动态代理,当Bean没有实现接口时,Spring会用CGlib的动态代理。JDK1.8中,据说JDK动态代理的性能优于CGlib的性能。一、静态代理 &
2020-09-12 15:19:13
114
原创 结构型设计模式---享元模式和组合模式
一、享元模式 享元模式可以减少创建对象的数量,以减少内存占用和提高性能,运用共享技术有效地支持大量细粒度的对象。常应用于系统底层的开发,以便解决系统的性能问题。享元模式的实现和注册式容器单例很像。 抽象员工类: public interface Employee { void report(); }  
2020-09-12 14:47:55
186
原创 结构型设计模式---桥接模式和外观模式
一、桥接模式 桥接模式将抽象部分与它的具体实现部分分离,使它们都可以独立地变化。它可以将类中存在的独立变化的维度都分离出来,让它们独立变化,减少它们之间的耦合,但是需要我们正确识别出系统中那些独立变化的维度,而且这些维度之间是通过组合的方式建立联系的。这个例子中,银行类依赖账户类,也就是说抽象部分是银行,具体实现是账户。 账户接口: p
2020-09-12 13:59:21
312
原创 结构型设计模式---装饰器模式和适配器模式
一、装饰者模式装饰者模式即在不改变对象的基础上,将功能动态添加到该对象上面, 装饰器这个设计模式也是和静态代理极其相似,也和适配器模式极其相似,下面列出了装饰器模式和适配器模式的区别: 装饰器模式 适配器模式 形式 是一种非常特别的装饰器模式 没有层级关系,装饰器模式有层级关系 定义 装饰者和被装饰者都是实现同一个接口,主要目的是为了扩展之后依旧保持O
2020-09-12 13:08:54
504
1
原创 创建型设计模式---原型模式和建造者模式
一、原型模式 原型模式指原型实例指定创建对象的种类,通过拷贝这些原型对象创建新的对象。原型模式不需要知道任何创建的细节,不调用构造函数,而且原型模式的性能比直接new一个对象性能高。1、基于浅拷贝的原型模式 所谓浅拷贝即拷贝出一个对象,但是拷贝出来的对象属性指向的还是原来的内存空间。浅拷贝直接使用默认生成的clone方法即可。 
2020-09-11 14:36:54
195
原创 再谈HTTP协议
一、HTTP中的请求方法1、GET Restful中GET方法表示查询,将请求参数直接拼接在地址栏。2、POST Restful中POST方法表示增加,这个方法将请求参数放在请求体中。3、PUT Resuful中PUT方法表示修改(有安全隐患)。4、D
2020-09-08 10:29:18
135
原创 解密HTTP协议
一、浏览器请求服务器的整个流程 浏览器输入URL,浏览器作为HTTP请求发起的客户端,首先会找到本机的hosts文件中有没有IP和域名的映射关系,没找到先请求本地的DNS域名解析服务器,也就是配置宽带时候设置的DNS,一般是8.8.8.8或者114.114.114.114。如果本地DNS服务器没找到就将这个域名往根DNS域名解析服务器(也可以设置不直接请求根DNS服务器,而是采用就近原则,逐层往上抛)上丢,逐层去解析域名,一
2020-09-04 19:26:15
396
原创 单体电商项目(单体架构->分布式架构)
前后端的代码都在GitHub上,https://github.com/xiguanlezz/E-CommerceSpringBoot + Swagger接口文档 + tk-mybatis持久层框架 + FastDFS分布式文件系统 + Thymeleaf模板引擎 + 支付宝API一、tk-mybatis 这个框架可以使用很多现成的API,简单的增删改查不需要再自己写SQL语句,和Mybatis-plus很像,安利一
2020-08-31 16:53:26
2336
1
原创 FastDFS分布式文件系统急速入门以及与SpringBoot整合
安装编译库。yum install -y gcc-c++安装异步事件处理库。yum install -y libevent安装git。yum install -y git克隆libfastcommon依赖库。git clone https://github.com/happyfish100/libfastcommon.git进入安装目录。cd libfastcommon编译源码。./ma...
2020-08-26 21:28:52
268
原创 RabbitMQ应用场景与高可用集群搭建
一、RabbitMQ的应用场景1、异步处理串行方式:用户将请求写入数据库之后,还需要发送注册邮件、发送注册短信,等上面三个任务结束后才响应给客户端。并行方式:用户将信息写入数据库后,同时发送注册邮件和注册短信,上面三个任务结束后响应给客户端。消息队列异步处理:假设三个业务节点分别使用50ms,串行方式使用时间150ms,并行使用时间100ms。虽然并行已经加快了处理时间,但是其实邮件和短信对我正常使用网站没有任何影响,客户端没有必要等着其发送完成才显示注册成功,应该是写入数据库..
2020-08-11 10:40:10
510
原创 RabbitMQ常见的消息模型
首先安装RabbitMQ的前置条件即erlang,因为这个中间件是由erlang语言编写的。 yum install erlang出现了上面的错误,不急,使用下面的指令安装deltarpm。 yum provides '*/applydeltarpm' #查看依赖包的位置 yum -y install deltarpm #安装命令可以使用下面指令查看erlang是否成功安装。 erl使用下面指令安装socat。 yum install soc
2020-08-07 16:17:24
750
原创 Nginx反向代理、负载均衡、动静分离与集群搭建
一、Nginx1、Nginx简介2、安装前置依赖库 yum install openssl-devel yum install pcre-devel yum install zlib-devel3、安装Nginx wget http://nginx.org/download/nginx-1.16.1.tar.gz # 解压文件 tar -zxvf nginx-1.16.1.tar.gz cd nginx-1.16.1.tar.gz # 进行编译并指定安装的位置 ./
2020-08-01 14:42:52
453
原创 Redis主从复制、哨兵与集群架构详解
一、主从复制架构1、主从复制架构说明 主从复制架构只能用来解决数据的冗余备份,只有master节点可以接受客户端的请求并执行写入操作,而slave节点仅仅做数据的同步,客户端无法将数据写入到从节点中。因为主从复制架构无法保证主节点宕机时的自动故障转移即高可用。2、主从复制架构原理图3、主从复制架构的搭建 在从节点的配置文件中增加下
2020-07-31 16:53:24
568
原创 NoSQL-Redis学习
NoSQL指的是Not Only SQL,不仅仅是SQL。Redis的五种数据类型1、字符型常用指令:set key value: 添加字符型对象get key: 返回key对应的valueappend key value: 将value值追加到原来key对应的value之后strlen key: 根据key得到对应value的长度incrby key value: 在key所对应的数字上增加value,并返回新的valuedecrby key value: 在key所对应的数字上减少v
2020-07-29 11:40:39
166
原创 行为型设计模式---命令模式和中介者模式
一、模板模式 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 定义的游戏骨架抽象类: public abstract class Game { abstract void initialize(); abstract void star
2020-07-27 18:26:50
178
原创 VM虚拟机安装centos7
一、虚拟机安装步骤图 选中虚拟机右击设置,设置系统镜像为自己的本地镜像。 选择install centos7。 点击安装位置,之后直接点击下图的完成即可。 设
2020-07-24 16:43:41
156
原创 WebRTC中1V1视频学习
总流程1、各自建立连接2、进行传输媒体流的协商,就是各自告诉对方自己媒体流的格式。3、添加候选者,就是能和自己连通的某个地址(协议、IP、端口、类型)。4、对媒体流传输的一些控制。5、传输媒体流。可以看出需要两个服务器,一个是用来转发消息的,还一个是用来网络穿透的,socket编写的代码只能在同一个网络下能传消息,ping不通的没办法传。服务端编写用Socket.io编写,这...
2020-07-24 14:41:41
188
1
原创 行为型设计模式---解释器模式和观察者模式
一、原型模式 应用场景:直接创建对象的代价比较大,比如初始化类会消耗大量的资源,可以使用原型模式。这个模式其实就是实现了一个原型接口,该接口用于创建当前对象的克隆。 此处用了两种深拷贝的方法:1、实现了Cloneable接口并自己实现clone的方法,拷贝引用类型的成员属性;2、序列化。 &
2020-07-23 19:03:54
131
原创 行为型设计模式---策略模式以及DispatchServlet的简单模拟
一、委派模式 委派模式基本作用就是负责任务的调度和分配任务,和代理模式有一点像,但是代理模式更注重过程,而委派模式注重的是结果。 老板下达命令给技术总监,总监根据不同员工的特点进行任务的分配,最终完成老板的任务。简单的委派模式实现的类图:老板类:/** * 委派模式: 找一个委派对象全权代理, 不在乎过程, 只要达到某个目的(和
2020-07-17 14:40:43
1070
原创 创建型设计模式---单例模式
一、单例模式1、饿汉式(线程安全) 先介绍第一种饿汉式单例,在类初始化的时候立刻就实例化对象。 /** * 饿汉式单例模式: 类一加载就会实例化 */ public class HungrySingleton { private static final HungrySingleton INSTANCE = new HungrySingleton(); private HungrySin
2020-07-07 13:53:02
225
原创 创建型设计模式---工厂模式和抽象工厂模式
工厂模式的初衷就是为了简化实例化对象的过程,不需要每次都手写创建逻辑,任何需要生成复杂对象的地方,都可以使用工厂方法模式。一、简单工厂模式 简单工厂模式不算是23种设计模式中的,思想比较简单,就是根据不同入参来决定到底实例化的是哪个类对象。 下面是简单实现
2020-07-05 21:13:51
190
原创 Java核心技术卷1扫盲笔记
转义序列\u 注释中不要出现\u,因为Unicode转义序列会在解析代码之前得到处理。 转义序列\u和其他转义序列不同,其他转义序列,如:\t,\n等只能出现在双引号之中,而\u可以出现在加引号的字符串外。java中保留的关键字 const和goto是ja
2020-07-05 15:05:12
676
原创 Faster-RCNN全面解读(手把手带你分析代码实现)---完结篇
代码连接:https://github.com/xiguanlezz/Faster-RCNN一、反向传播 因为Faster-RCNN的loss值是包含两部分的,第一部分是先验框即anchors和对应anchors_target的loss;第二部分是建议框即proposals和对应的proposals_target的loss。1、anchors的loss &n
2020-06-25 15:57:52
3809
12
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人