自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(64)
  • 资源 (1)
  • 收藏
  • 关注

原创 带你手写基于 Spring 的可插拔式 RPC 框架(五)注册中心

注册中心代码使用 zookeeper 实现,通过图片来看看我们注册中心的架构。首先说明, zookeeper 的实现思路和代码是参考架构探险这本书上的,另外在 github 和我前面配置文件中的 zookeeper 服务器是用的1个月免费适用的阿里云,大家也可以用它当测试用。不多说,一次性给出注册中心全部代码。客户端对应的注册中心接口public interface RegisterCe...

2019-07-04 11:04:27 200

原创 带你手写基于 Spring 的可插拔式 RPC 框架(四)代理类的注入与服务启动

上一章节我们已经实现了从客户端往服务端发送数据并且通过反射方法调用服务端的实现类最后返回给客户端的底层协议。这一章节我们来实现客户端代理类的注入。承接上一章,我们实现了多个底层协议,procotol 有 netty,http,和 socket 三个实现类,每个实现类都有启动服务端和客户端发送数据两个方法。问题如何实现底层协议的选择那?可以通过配置文件来选择协议。单独的配置文件还是和 ...

2019-07-04 11:03:42 260

原创 带你手写基于 Spring 的可插拔式 RPC 框架(三)通信协议模块

在写代码之前我们先要想清楚几个问题。我们的框架到底要实现什么功能?我们要实现一个远程调用的 RPC 协议。最终实现效果是什么样的?我们能像调用本地服务一样调用远程的服务。怎样实现上面的效果?前面几章已经给大家说了,使用动态代理,在客户端生成接口代理类使用,在代理类的 invoke 方法里面将方法参数等信息组装成 request 发给服务端,服务端需要起一个服务器一直等待接收这种消息,...

2019-07-04 11:03:04 263

原创 带你手写基于 Spring 的可插拔式 RPC 框架(二)整体结构

前言上一篇文章中我们已经知道了什么是 RPC 框架和为什么要做一个 RPC 框架了,这一章我们来从宏观上分析,怎么来实现一个 RPC 框架,这个框架都有那些模块以及这些模块的作用。总体设计在我们的整个框架里比较重要的几个模块:rpc-procotol: 既然是可插拔是框架,我们需要支持选择底层协议,这部分是通信协议相关的模块。rpc-spring: 我们的框架是基于 spring 开发...

2019-07-04 11:02:32 294

原创 带你手写基于 Spring 的可插拔式 RPC 框架(一)介绍

概述首先这篇文章是要带大家来实现一个框架,听到框架大家可能会觉得非常高大上,其实这和我们平时写业务员代码没什么区别,但是框架是要给别人使用的,所以我们要换位思考,怎么才能让别人用着舒服,怎么样才能让我们的框架性能优异。通过自己写一个框架,我们能学到的有很多,能让我们脱离 CURD,在更高的层面上去思考。目的写这个框架最主要的目的是要让大家了解整个框架的设计思想和用到的技术,并不是让大家关注代...

2019-07-04 11:01:46 453

原创 手动实现 SpringMVC

前几章我们已经分析了 Spring 的源码并且手动实现了一个 IOC/DI 容器。这章我们在自己实现的 Spring 框架的基础上实现一个 SpringMVC 框架。我们自己实现的 Spring 框架的快速入口:Spring 框架 里面的 MySpring 是我们 IOC/DI 框架的源码。下面我们在这个基础上实现一个 MVC 框架。首先 @Controller,@Service,@Repo...

2019-06-16 17:41:50 153

原创 Spring 源码解析(二)

第一章为源码解析。第二章为实现一个简单的 IOC 容器。第三章进阶 Spring 插件开发。手动实现一个 IOC/DI 容器上一篇文章里我们已经对 Spring 的源码有了一个大概的认识,对于 Spring 中的一些组件,比如 Aware,PostProcessor,ApplicationContext 有了一定的认识,下面我们就来手动实现一个 IOC/DI 容器。项目整体用 mav...

2019-06-10 21:59:36 102

原创 Spring 源码解析(一)

Spring 源码解析第一章为源码解析。第二章为实现一个简单的 IOC 容器。第三章进阶 Spring 插件开发。概念Spring 源码的核心组件:IOC 容器负责实例化,定位,配置应用程序中的对象及建立这些对象间的依赖。AOP 面向切面编程,通过预编译方式和运行期间动态代理实现功能的统一维护的一种技术。IOC 容器可以理解为一个 Map,key 就是我们平常使用 Spri...

2019-06-10 21:58:36 98

原创 带你全面了解高级 Java 面试中需要掌握的 JVM 知识点

带你全面了解高级 Java 面试中需要掌握的 JVM 知识点。 ——当年明月文章目录JVM 内存划分与内存溢出异常垃圾回收算法与收集器虚拟机中的类加载机制Java 内存模型与线程虚拟机性能监控与故障处理工具参考最后的话JVM 内存划分与内存溢出异常概述如果在大学里学过或者在工作中使用过 C 或者 C++ 的读者一定会发现这两门语言的内存管理机制与 Java 的不同。在使用 C 或者 C...

2019-05-18 10:52:17 314

原创 MySql的事务隔离级别

了解事务隔离级别之前先要了解高并发环境下的几个概念:1.脏读:事务A读取了事务B更新的数据,然后B执行回滚操作,那么A读到的就是脏数据。2.不可重复读:事务A多次读取同一个数据,事务B在事务A多次读取的过程中,对数据做了更新并提交,导致事务A多次读取同一个数据时,结果不一致。3.幻读:比如事务A将所有成绩从具体分数改为了ABCDE等级,但是事务B在这个时候插入了一条具体的分数,最后事务A结束...

2019-03-06 11:23:15 1087 1

原创 优先队列PriorityQueue

队列是遵循先进先出模式的,但是如果要引入优先级这个概念,可以随便加入,根据优先级进行出队。PriorityQueue是基于最小堆的一个无界队列,当然你也可以传入比较器来实现最大堆。里面的对象必须是可比较的对象。优先队列不支持空值,不支持不可比较的对象,对象必须实现java的comparable接口。优先队列的头是基于自然顺序或者comparable排序的最小元素,如果有多个对象拥有同样的排序,...

2019-03-05 16:17:42 119

转载 Maven概念知识

内容转载自:https://blog.csdn.net/u010425776/article/details/52027706什么是Maven?简单来说,Maven就是一款帮助程序员构建项目的工具,他会帮我们管理jar包。管理项目的生命周期。基本命令?-v : 查询maven版本。compile:编译将java源文件编译成class文件test:测试项目执行test目录下的测试用例...

2019-03-05 15:48:48 155

原创 JAVA并发编程(六)锁补充

1.Synchronized锁的三种形式:Synchronized修饰普通同步方法,锁的是调用当前方法的实例对象。Synchronized修饰静态同步方法,锁的是当前类的class对象。Synchnonized修饰同步代码块,锁的是Synchronized后面括号里配置的对象。2.Synchronized在JVM里面怎么实现?Synchronized锁是基于进入和退出monitor对象来...

2019-02-18 18:04:10 145

原创 Java版数据结构与算法读书笔记(四)

根据前序遍历的字符串转换为二叉树。赫夫曼树二叉树结构的改变对于效率和大小有很大的影响。从树中一个节点到另一个节点之间的分支构成两个节点之间的路径,路径上的分支数目称作路径长度。查找二叉树跟节点比左节点大,比右节点要小,这样的二叉树称为查找二叉树。...

2019-02-14 10:15:00 210

原创 Java版数据结构与算法读书笔记(三)

树树是n个节点的有限集,n=0时称为空树,在任意一棵非空树中,有且仅有一个根节点。每个节点最多只有一个父节点。节点拥有的子树数称为节点的度,度为0的节点称为页子节点或者中断节点。树的度是树内各节点的度的最大值。层次与深度节点的层次从根开始定义,根为第一层,跟的孩子为第二层。树中节点的最大层次称为树的深度或高度。树的存储结构,简单的顺序存储不能满足树的实现,需要结合顺序存储和链式存储...

2019-02-13 17:34:20 289

原创 Java版数据结构与算法读书笔记(二)

队列(Queue)队列是只允许在一端进行插入操作,另一端进行删除操作的线性表。插入一端称为队尾,删除的一端称为队头。如果用顺序存储来存储队列,容易造成溢出,浪费空间等,出队复杂度为O(n)。为了解决假溢出的方式是使用循环队列。但是最好的方式是使用非顺序,链式存储结构来存储。LinkedList(双向链表)其实就是一个队列,它实现了Queue接口。可以利用LinkedList的额头指针v...

2019-02-12 14:40:16 354

原创 Java版数据结构与算法读书笔记(一)

数据结构是数据之间相互存在的一种或多种特定关系元素的集合。按逻辑结构来划分集合机构线性结构树形结构图形结构物理结构从内存和存储顺序来划分1.顺序存储结构2.链式存储结构根据上面的结构,Java抽象出来对应的类线性表(List)Java里面最基本的线性顺序结构就是数组。对于添加和删除消耗会大一些,因为需要维护index。Java里面典型的实现类是ArrayL...

2019-02-11 17:57:03 1408

原创 打造扛得住的数据库架构读书笔记(七)

Btree索引和Hash索引表中的数据比较小时索引对性能比较小,因为此时索引都被缓存到内存里。但如果数据比较多时,内存不能完全缓存索引数据,此时索引就会对性能有很大影响了。B-tree索引的特点以B+树的结构存储数据。B树索引能够加快存储引擎的查询速度。B树索引更加适合进行范围查找。什么情况下可以用到B树索引?全值匹配的查询 order = ‘98765432111990’;匹...

2019-02-11 10:06:11 135

原创 打造扛得住的数据库架构读书笔记(六)

高可用数据库架构MMM 主主同步管理工具。用于监控和管理MySQL的主主复制拓扑,并在当前的主服务器失效时,进行主和主备服务器之间的主从切换和故障转移等工作。MMM是工作在两个服务器其中一个提供服务的前提下(同一时间只有一台主服务器提供服务)。在主库宕机时进行故障转移并自动配置其他从对新主的复制。(数据可能丢失)提供了主,写虚拟IP,在主从服务器出现问题时可以自动迁移虚拟IP。...

2019-01-25 14:18:04 142

原创 打造扛得住的数据库架构读书笔记(五)

MySQL的复制解决了什么问题?实现了不同服务器上的数据分布,利用二进制日志增量进行。实现数据读取负载均衡。增加了数据的安全性。实现了数据库高可用和故障切换。实现数据库在线升级。MySQL的日志主要分为两大类,MySQL服务层日志,MySQL存储引擎层日志。二进制日志:记录了所有对MySQL数据库修改事件,包括增删改查事件和对表结构的修改事件(成功执行的)。二进制的日志格式:...

2019-01-23 17:27:53 172

原创 深入理解SpringCloud读书笔记(一)

SpringCloud的优点:微服务单元按照业务来划分:将一个大的业务拆分为比较小的业务。按照业务划分的微服务单元独立部署。微服务通过HTTP来互相通信:使用HTTP模式请求处理业务逻辑非常高效。服务和服务之间也可以通过轻量级的消息中线来通信,比如RabitMQ,Kafaka等。微服务的数据库独立:不同的服务之间数据库相互独立,可以选择不同类型的数据库。微服务自动化部署:可以使用Docke...

2019-01-23 11:40:05 233

原创 打造扛得住的数据库架构读书笔记(四)

MySQL数据库优化策略数据库架构和sql优化-----MySql服务器配置----物理硬件及操作系统。数据库架构和SQL优化数据库设计范式1)数据库表中所有字段都具有单一属性,列是有基本数据类型构成的,表时简单的二维表。2)要求一个表只有一个业务主键。3)消除了第二范式基础上非主属性对主键的依赖(比如主键是学号,学好可以决定学院和学院电话)。三范式的基本原理是将表拆分。反范式化就...

2019-01-22 17:36:37 274

原创 打造扛得住的数据库架构读书笔记(三)

Archive存储引擎以zlib对表数据进行压缩,磁盘I/O更少。数据存储在ARZ为后缀的文件中。特点:只支持insert和select操作,支持行级锁。不是事务型存储引擎。只允许在自增ID上加索引。使用场景:日志和数据采集类应用(只能插入和查询的场景)。Memeory存储引擎数据是保存在内存中,一旦MySql重启后,数据会丢失,但是表结构不会丢失。支持Hash索引(等值查找)和BT...

2019-01-22 15:07:33 147

原创 打造扛得住的数据库架构读书笔记(二)

影响MySql的性能的因素1)服务器硬件1.CPU资源(目前不支持多个CPU对同一SQL并发处理)如果并发比较多,CPU数量其实很重要。2.可用内存大小(对性能的影响有限)MyISAM会将索引缓存到内存中,数据通过操作系统来缓存。InnoDB会同时在内存中缓存数据和索引。3.磁盘I/O性能和系统磁盘的配置和选择:传统机器硬盘(空间大,读写速度慢),RAID增强传统机器硬盘的性能(R...

2019-01-21 18:26:41 240

原创 打造扛得住的数据库架构读书笔记(一)

影响数据库性能的因素:sql查询速度,服务器硬件,网卡流量,磁盘IO。QPS:每秒中处理的查询量。大量的并发:可能会导致数据库连接数被占满。超高的CPU使用率:因CPU资源耗尽而宕机。数据性能的瓶颈往往是磁盘IO(更换性能更高的磁盘)。网卡流量:网卡IO也有可能会被占满(减少从服务器的数量,进行分级缓存,避免使用select*,把业务网络和服务器网络进行分级)。大表,大表是相对而言的,...

2019-01-21 15:07:47 239

原创 MyBatis 读书笔记(三)

MyBatis的运行分为两大部分,第一部分是读取配置文件缓存到Configuration对象,用以创建SqlSessionFactory,第二部分是SqlSession的执行过程。Mapper仅仅是一个接口,他的运行要依靠动态代理来实现。代理模式就如同工程师,客服和客户三者的关系。动态代理分两种,一种是JDK反射机制提供的代理(缺点是需要自己提供接口),另一种是CGLIB代理。构建Sql...

2019-01-20 14:16:54 134

原创 Mybatis读书笔记(二)

MyBatis配置property子元素property是一个配置属性的元素,让我们能在配置文件的上下文使用它。我们可以在properties文件里面配置密文,解密后在重新构建SqlSessionFactory。设置cacheEnabled:影响所有映射器中配置的缓存全局开关。lazyLoadingEnable:延迟加载的全局开关,当它开启时,所有关联对象都会延迟加载。aggres...

2019-01-19 15:38:40 145

原创 Mybatis读书笔记(一)

1.传统的JDBC编程JDBC是sun公司提出的一系列规范用于连接数据库。传统的JDBC编程分为如下几步:使用JDBC连接数据库,注册驱动和数据库信息。操作Connection,打开Statement对象。通过Statement执行SQL,返回结果到ResultSet对象。通过ResultSet读取数据,通过代码转化为POJO。关闭数据库资源。2.ORM模型ORM模型就是数据库的表...

2019-01-18 18:39:16 179

原创 SpringCloud微服务框架读书笔记(一)

SpringCloud包含了微服务框架的各个方面。没有配置文件。需要配合Docker等容器技术进行集群部署。SpringCloud和阿里系Dubbo对比SpringBootSpringBoot是在Spring的基础上做了一层封装。直接运行启动类main方法就会启动自带的Tomcat容器。启动类上有@SpringBootApplication注解。SpringBoot只有一个配置文件,那...

2019-01-18 16:38:46 188

原创 Java集合框架读书笔记(六)

层次关系Collection接口是集合类的根接口。他下面是两个直接实现的接口,Set和List,Set中不能包含重复元素,List是一个有序的集合,可以包含重复元素,可以按索引访问。Map是单独的一个接口,和Collection没有关系。是以key-value形式存储数据的。几种接口和类的特点。1.List(有序,可重复),根据索引查询,删除和插入数据会使后面数据移动,插入和删除相对速度...

2019-01-18 15:36:18 120

原创 Java集合框架读书笔记(五)

PriorityQueueJava中的PriotiryQueue通过二叉小顶堆实现。Java的优先队列保证每次取出的元素都是队列中权值最小的。大小可以通过自然顺序和传入构造器比较。二叉堆完全可以用数组来表示。add和offer两个方法语意相同,都是向优先队列中插入元素,只是前者失败会抛出异常,后者则会返回false。新加入的元素可能会破坏最小堆的性质,因此需要调整。element和p...

2019-01-18 14:26:22 160

原创 Java集合框架读书笔记(四)

Java的TreeMap实现了SortedMap接口,会按照key的大小顺序对Map中的元素进行排序,key大小的评判可以通过本身的自然顺序,也可以通过构造时的比较器(Comparator)。底层是通过红黑树来实现的。并且也是非同步的。红黑树是一种近似平衡的二叉查找树,它能确保任何一个节点的左右子树的高度差不会超过二者中较低的那个的一倍。红黑树是满足如下条件的二叉查找树:1.每个节点要么是红...

2019-01-17 17:36:43 206

原创 Java集合框架读书笔记(三)

ArrayDequeJava里有一个叫Stack栈的类,却没有叫Queue的类(它是一个接口的名字)。当需要使用栈时,Java已经不推荐用Stack,而是使用更加高效的ArrayDeque,如果使用队列,当然也是ArrayDeque。Deque是双端队列,可以当做栈使用,也可以当做队列使用。队列的相关接口:与Stack栈相关的接口从名字就可以看出来ArrayDeque底层通过数组实现...

2019-01-16 17:24:39 109

原创 Java集合框架读书笔记(二)

LinkedListLinkedList同时实现了List接口和Deque接口,也就是说它皆可以看做一个顺序容器,也可以看做是一个队列,同时也可以看做是一个栈。当你想要使用栈和队列时,可以考虑使用LinkedList。不过现在首选的是ArrayDeque,他的性能比LinkedList更好。LinkedList的底层通过双向链表来实现。LinkedList没用实现同步,可以采用Colle...

2019-01-16 16:44:30 118

原创 Java集合框架读书笔记(一)

容器,就是可以容纳其他Java对象的对象。对于基本数据类型需要完成对象包装后才能被放进去,java的自动拆装包可以自动完成。Java里对象都存在堆上,且对象只能通过引用访问,句柄和直接指针方式,容器里放的起始就是对象的引用而不是对象本身。JCF中定义了14种容器接口:上述接口的对应实现:迭代器(Iterator)JCF的迭代器提供了遍历容器中元素的方法,只有容器本身清除容器里元素的组...

2019-01-16 16:18:11 197

原创 MySQL读书笔记(一)存储引擎

MySQL被设计为了一个单进程多线程架构的数据库。MySQL启动时会先去寻找配置文件,找不到就按默认方式启动。Linux中是寻找my.cnf 文件,windows上可能是.cnf或者是.ini。数据库是文件的集合,数据库实例是程序,是用来对数据库文件操作的。MySQL体系结构MySQL提供了一些类的引擎供用户使用,另外存储引擎是基于表的,而不是数据库。1.InnoDBInnoDB现在...

2018-12-29 18:39:53 91

原创 MySQL读书笔记(一)存储引擎

MySQL被设计为了一个单进程多线程架构的数据库。MySQL启动时会先去寻找配置文件,找不到就按默认方式启动。Linux中是寻找my.cnf 文件,windows上可能是.cnf或者是.ini。数据库是文件的集合,数据库实例是程序,是用来对数据库文件操作的。MySQL体系结构MySQL提供了一些类的引擎供用户使用,另外存储引擎是基于表的,而不是数据库。1.InnoDBInnoDB现在...

2018-12-29 18:39:50 708

原创 MySQL读书笔记(一)存储引擎

MySQL被设计为了一个单进程多线程架构的数据库。MySQL启动时会先去寻找配置文件,找不到就按默认方式启动。Linux中是寻找my.cnf 文件,windows上可能是.cnf或者是.ini。数据库是文件的集合,数据库实例是程序,是用来对数据库文件操作的。MySQL体系结构MySQL提供了一些类的引擎供用户使用,另外存储引擎是基于表的,而不是数据库。1.InnoDBInnoDB现在...

2018-12-29 18:39:46 102

原创 Redis读书笔记(七)缓存

缓存的有点:1)加速读写,因为缓存都是全内存的(比如Redis和Memcached),而存储层通常读写性能不够强悍,通过缓存可以有效地加速读写。2)帮助减少后端的访问量和复杂计算,降低了后端的负载。数据不一致:缓存层和存储层的数据存在着一定的时间窗口不一致性。缓存的使用场景基本包含如下两种:1)开销大的复杂计算,一些复杂的操作或者计算(例如大量的联表查询,分组计算),如果不加缓存,不但...

2018-12-29 16:12:47 132

原创 Redis读书笔记(六)理解内存

首先要了解Redis内存使用的情况:通过info memory命令获取内存相关指标。重点关注的指标有:used_memory_rss 和 used_memory 以及他们的比值mem_fragmentation_ration。当mem_fragmentation_ration > 1时,说明used_memory_rss-used_memory多出的部分并没有用于数据存储,而是被内存...

2018-12-27 17:47:50 189

Android WIFI局域网传文件

可以实现手机之间连接WIFI情况下局域网实时传送文件,支持自建WIFI热点

2013-10-25

空空如也

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

TA关注的人

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