自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 2. SOFABolt源码分析-协议及消息编解码篇

SOFABolt源码分析-协议及消息编解码篇1. 前言1.1 粘包拆包:1.2 请求类型1.3 版本控制2. 协议-Protocol2.1 RpcProtocolV23. 消息载体-RpcCommand4. 消息编解码器-CommandDecoder/CommandEncoder5. 总结5.1 RpcCodec5.2 ProtocolCodeBasedEncoder1. 前言在上篇文章中大致介绍了SOFABolt服务端怎么用自定义的UserProcessor去处理客户端的消息,能大致了解SOFABo

2020-11-12 16:02:47 1023 1

原创 3.1 ZK客户端创建节点源码解析上(基于NIO)

ZK客户端创建节点源码解析前言1. 为什么能用来做注册中心2. 创建节点2.1 ZooKeeper#create()方法2.2 ClientCnxn#queuePacket()方法前言众所周知!Zookeeper是一个分布式协调工具,我们能利用它特性来做特定的事情,如,利用创建节点的唯一性和有序性可以用来实现分布式锁、leader选举、分布式队列(消息),利用临时节点及其事件监听可以用来做缓存、分布式配置中心、注册中心等,其实目前最常见的就是拿它用来做注册中心。那我们今天来看看为什么能利用他来做注册中

2020-11-10 14:34:06 602

原创 2. ZK客户端与服务端建立连接的过程(基于NIO)

Zk客户端(ClientCnxn)中的EventThread和SendThread1. 例子1. SendThread在上一篇《客户端启动源码分析》文章中讲到了客户端会使用两个线程去协调处理客户端与服务端的通信和watchers事件的回调,在这篇文章中我们会分析这两个线程是怎么相互纠缠的。1. 例子首先还是由第一篇文章来作为例子public class ZooKeeperTestClient extends ZKTestCase implements Watcher { protected

2020-10-28 17:04:17 1289

原创 1. ZooKeeper启动源码分析

ZooKeeper启动与Watcher机制源码分析1. 客户端启动1. getClientCnxnSocket()2. 创建ClientCnxn实例2.1. SendThread2.2. EventThread3. 启动服务从github上拉下来的zk源码会附带很多单元测试,咱们就源码中的ZooKeeperTestClient#create_get_stat_test()方法来分析 :public class ZooKeeperTestClient extends ZKTestCase impleme

2020-10-14 17:22:06 394

原创 1. SOFABolt源码分析-服务启动到消息处理

SofaBolt源码分析-UserProcessor1. Demo2. UserProcessor细节3. 注册UserProcessor本篇文章分析一下SofaBolt中的UserProcessor时怎么起作用的,接下来先看一个例子1. Demo这里直接把官网的源码拉下来,自带Demo示例代码清单1:RpcServerDemoByMain.classpublic class RpcServerDemoByMain { static Logger logger

2020-09-12 12:19:51 1354 1

原创 NIO和BIO的比较

NIO和BIO的比较1. NIO和BIO的比较2. NIO中三大组件关系2.1 Buffer2.2 Channel(通道)2.3 Buffer和Channel的注意事项和细节。2.4 Selector(选择器)1. NIO和BIO的比较BIO以流的方式处理数据,而NIO以块的方式处理数据,块I/O的效率比流I/O高很多。BIO是阻塞的,NIO是非阻塞的BIO基于字节流和字符流进行操作,而NIO是基于Channel(通道)和Buffer(缓冲区)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写

2020-08-07 22:58:14 5500

原创 SpringMVC异常处理三种方式

SpringMVC异常处理三种方式1. 自定义HandlerExceptionResolver2. 使用SpringMVC自带的异常处理器处理异常2.1 @ExceptionHandler的用法3. 写一个异常类用ControllerAdvice作为全局异常处理类4. 优先级SpringMVC对异常的处理有三大类自定义HandlerExceptionResolver在controller类用@ExceptionHandler 写一个异常处理方法写一个异常处理类用@ControllerAdvice作

2020-05-24 15:20:37 331

原创 分页查询的优化

笔记摘自:https://www.cnblogs.com/geningchao/p/6649907.html分页查询的优化分页SQL1. 直接使用数据库提供的SQL语句2. 建立主键或唯一索引, 利用索引(假设每页10条)3. 基于索引再排序4. 基于索引使用prepare5. 利用MySQL支持ORDER操作可以利用索引快速定位部分元组,避免全表扫描6. 利用"子查询/连接+索引"快速定位元组的位置,然后再读取元组优化示例1. 直接用limit start, count分页语句2. 对limit分页问

2020-05-24 15:05:04 375

原创 Redis Cluster集群和哨兵

1. 哨兵sentinel:http://www.redis.cn/topics/sentinel.html2. Redis集群:http://www.redis.cn/topics/cluster-spec.html

2020-05-23 15:22:45 255

原创 1. MySQL的技术框架

这里写目录标题1. 框架概述2. 查询流程参考文章1:https://www.cnblogs.com/wangjiming/p/10410904.html1. 框架概述简单介绍下:Connectors:MySQL向外提供的交互接口(Connectors)Connectors组件是MySQL向外提供的交互组件,如Java、.net、php等语言可以通过改组件来操作SQL语言,实现与SQL的交互。Management Service & Utilities:管理服务组件和工具组件

2020-05-20 16:47:40 386

原创 DispatcherServlet源码分析上

一、总体大流程代码1protected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Exception { HttpServletRequest processedRequest = request; HandlerExecutionChain mappedHandler = null; boolean multipartRequestParsed = false;

2020-05-18 18:24:19 392

原创 Redis之RDB&AOF

Redis之RDB&AOF1. RDB快照文件存储位置:快照触发条件1. 客户端执行命令save和bgsave会生成快照2. 根据配置文件save m n规则进行自动快照3. 主从复制时,从库全量复制同步主库数据,此时主库会执行bgsave命令进行快照4. 客户端执行数据库清空命令flushall时,触发快照5. 客户端执行shutdown关闭redis时,触发快照故障恢复配置详解2. AOF持久化配置参数2.1 开启AOF2.2 AOF持久化过程为什么重写?2.3 重写过程Redis 协议3. R

2020-05-17 13:36:41 1315

原创 三种Redis集群方案

三种Redis集群方案1. twemproxy1.1 何为twemproxy1.2 应用于Redis1.3 twemproxy存在的问题2 codis2.1 何为Codis2.2 组成部分2.3 Codis之slot(槽点)3 Redis Cluster1. twemproxy1.1 何为twemproxyTwemproxy是一种代理分片机制,由Twitter开源。Twemproxy作为代理,可接受来自多个程序的访问,按照路由规则,转发给后台的各个Redis或memcached服务器,再原路返回,一般

2020-05-17 13:30:36 746

原创 用DiscoveryClient手写负载均衡

用DiscoveryClient实现简单路由1. 原理2. 实操2.1 写pom2.2 写启动类2.3 application.yaml2.4 定义LoadBalancer接口2.5 实现接口2.6 调用3. 小总结前戏在分布式微服务调用的时候我们会想到一个工具叫Ribbon,关于这个Ribbon的具体实现负载均衡的原理可以参考本人这篇文章《Ribbon原理-RestTemplate使用@LoadBalanced负载均衡源码详解》, 本篇内容主要讲自己如何写一个简单的负载均衡逻辑,话不多说,直接开干!

2020-05-17 10:45:33 731

原创 SpringBoot之AutoConfiguration自动配置原理

SpringBoot自动配置原理1. 原理2. 细节1. 原理我们在写启动类的时候会用到SpringBootApplication注解,SpringBoot启动的时候加载主配置类,这个注解里面开启了自动配置功能 @EnableAutoConfiguration@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited@SpringBootConfiguration@EnableAutoCo

2020-05-16 17:18:45 8752

原创 MyBatis源码-配置篇(一)

MyBatis源码-配置篇(一)先看个简单的配置:mybatis-config.xml<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration> <pr

2020-05-16 17:12:49 257

原创 Ribbon原理-RestTemplate使用@LoadBalanced负载均衡源码详解

RestTemplate使用@LoadBalanced负载均衡源码详解示例代码概述:使用Eureka作为注册中心服务提供者服务消费者(使用Ribbon实现负载均衡)前戏:在使用RPC框架实现远程调用的时候都会用到RestTemplate,如果想实现负载均衡还会添加一个@LoadBalanced注解,看下面这个例子:@Configuration@ComponentScan(base...

2020-05-05 14:57:45 1650

原创 将博客搬至优快云

将简书博客部分内容同步至优快云

2020-05-02 10:19:10 92

原创 插件化开发之坑位的理解(Hook)

参考1:https://www.jianshu.com/p/f2e5b7b7f72b 参考2(Android动态加载Activity原理):https://blog.youkuaiyun.com/cauchyweierstrass/article/details/51087198 参考3:(Android类加载之PathClassLoader和DexClassLoader)https://...

2019-03-06 11:19:33 567

原创 Gradle之Gradle Wrapper(四)

笔记来源于以下文章:http://liuwangshu.cn/application/gradle/4-wrapper.html 了解Gradle Wrapper可以更好的理解Gradle,Gradle Wrapper在日常开发中看似“不起眼”,实则超级重要。1. 为什么需要Gradle WrapperGradle Wrapper称为Gradle包装器,是对Gradle的一层包装。为什么...

2019-02-28 18:11:49 712

原创 Gradle之Gradle插件讲解(五)

笔记来源于以下文章:http://liuwangshu.cn/application/gradle/5-plugins.html前面我们学习了为什么要用Gradle、Gradle的入门基础和Groovy的基础,这些文章为Gradle的入门打下了基础,这一篇我们要来学习Gradle的插件。1. Gradle插件概述说到Gradle插件前,我们先要了解下什么是插件。我们先来看看下面这张图。...

2019-02-28 18:11:02 1047

原创 Gradle之入门前奏(三)

笔记来源于以下文章http://liuwangshu.cn/application/gradle/2-primer.html这一篇文章我们接着来学习Gradle入门需要掌握的知识,包括配置环境、实现Hello World、Gradle的任务、Gradle日志和Gradle命令行,掌握这些能够更好的理解Gradle。1. 配置Gradle环境安装Gradle前要确保系统已经配置好JDK的环境...

2019-02-28 18:10:26 340

原创 Gradle之Groovy语言的简单认识(二)

笔记来源于:https://blog.youkuaiyun.com/singwhatiwanna/article/details/76084580 http://liuwangshu.cn/application/gradle/3-groovy.html1. Groovy简介:Groovy是一种基于JVM(Java虚拟机)的敏捷开发语言,它结合了Python、Ruby和Smalltalk的许多强大...

2019-02-28 18:09:18 168

原创 Gradle之为什么现在要用Gradle(一)

笔记来源于以下文章1. http://liuwangshu.cn/application/gradle/1-study-gradle.html 2. https://blog.youkuaiyun.com/singwhatiwanna/article/details/760845801. 为什么是GradleGradle是目前Android主流的构建工具,不管你是通过命令行还是通过Androi...

2019-02-28 18:08:14 288

原创 Gradle之自定义插件的三种形式(六)

自定义Gradle插件主要有三种形式,分别是build.gradle中编写、buildSrc工程项目中编写、独立项目或独立module中编写。1. 在build.gradle中编写自定义插件对象插件是实现了org.gradle.api.plugins接口的插件,这个接口中只定义个一个简单的apply方法,想要实现自定义插件就需要去实现org.gradle.api.plugins接口。Groo...

2019-02-28 17:56:26 405

原创 Java、Gradle环境变量配置失效的问题

Gradle环境变量配置失效的问题今天到公司打开命令窗口键入gradle发现失效网上查阅资料,解决办法如下:在Dos中键入path,查看当前path配置的所有路径...C:\Users\houyl\AppData\Local\Microsoft\WindowsApps;D:\DevelopSoftWare_Location\IDEA_Install_Location\IntelliJ...

2019-02-27 10:08:09 2108

原创 面向对象的六大原则

面向对象的六大原则1.单一职责原则(Single Responsibility Principle)单一职责原则缩写SRP,定义为:就一个类而言,应该仅有一个引起它变化的原因,简单来说,一个类中应该是一组相关性很高的函数、数据的封装,但单一职责的划分界限总是不那么清晰,很多时候都是需要靠个人经验来界定的,当然,最大的问题是对职责的定义,什么是类的职责,以及怎么划分类的职责。如何划分一个类、一...

2018-12-28 14:18:23 101

原创 自定义注解解决频繁findViewById

1. 创建annotation类HCMViewInject这个注解绑定定义的View变量package com.example.houchongmu.myviewinject.ViewUtils;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.a...

2018-09-21 17:40:51 292 1

原创 AIDL简单应用

这是一个简单的AIDL应用的例子,先讲一下步骤:1. 新建项目AIDLFakeAlipay在 main目录下创建一个aidl文件夹,右键app->New->Folder->AIDL Folder在aidl文件夹下面创建一个包,在包里面创建一个aidl文件:image在aidl文件中写一个要被调用的方法,这里面不能加任何权限修饰符,除此之外语法和jav...

2018-09-02 12:04:05 183

原创 Android View的事件分发(上)

搬运郭霖:Android事件分发机制完全解析,带你从源码的角度彻底理解(上):https://blog.youkuaiyun.com/guolin_blog/article/details/9097463我们先从简单的开始,先探究View的事件分发,假如现在有个非常简单的项目,只有一个Activity,并且Activity中只有一个按钮,并且绑定点击事件。button.setOnClickListener...

2018-08-05 16:56:12 163

原创 第九章(探究服务Service、Binder、线程、Message、AsyncTask等)

探究服务(Service、IntentService、Handler、AsyncTask)首先需要知道的几个知识点:什么是服务(Service):Service是Android中实现程序后台运行的解决方案,它非常适合去执行那些不需要和用户交互而且还要求长期运行的任务。服务的运行不依赖于任何用户界面,及时程序被切换到后台,或者用户打开了另一个应用程序,服务仍然能保持正常运行。服务不是运行在一...

2018-07-11 16:13:24 203

原创 2018-06-22

一位大四学姐离校了,其实应该说是一个高年级的朋友,前天晚上把我叫去一起拍了几张照片。他们借的相机在晚上发不出功力,最后用的我的手机。怎么说,在大学一直在用心交朋友,觉得只要待人真诚,就会收获到别人的真心。我非常讨厌当面一套背后一套的作为。这位学姐朋友上海人,她老伴儿也是上海人,哈哈哈,很可爱,很活泼。昨天她走得时候送了我两本钢琴入门的书,把一些带不走的东西都塞给了我,哈哈,很有意思。想把拍的...

2018-06-22 17:19:19 81

原创 解决Sources for Android API 26 Platfrom not found一类问题

解决Sources for Android API 26 Platfrom not found一类问题1.我遇到的情况是C:\Users\HouChongmu.AndroidStudio3.1\config\options路径下jdk.table.xml中 <sourcePath> <root type="composite" > ...

2018-06-17 17:17:34 148

原创 第七章(通知——Notification,适配Android 8.0奥利奥的NotificationChannel)

通知(Notification)简介:通知是Android系统中一个有特色的功能,当某个程序希望向用户发出一些提示信息,而该应用程序又不在前台运行,就可以借助通知来实现,发出一条通知后,手机状态栏中就会显示一个通知的图标,下拉状态栏后就能看到通知的详细内容。通知的基本使用方法通知的用法是比较灵活的既可以在活动里创建,可以在广播接收器里创建,也可以在服务里创建,下面看具体使用步骤无论在哪...

2018-06-17 16:03:17 372

原创 2018-06-11

他说的挺对的,每天累了就睡饿了就吃,凭什么还 郁郁寡欢,总得有一个理由吧。。。感谢室友,能够理解,能够给我一个安静的环境。。。

2018-06-11 09:14:12 89

原创 第六章(内容提供器-Content Provider)

内容提供器(Content Provider)内容提供器简介:Content Provider主要用于在不同的应用程序之间实现数据共享的功能,它提供了一套完整的机制,允许一个程序访问另一个程序中的数据,同时还能保证被访问数据的安全性。内容提供器的用法一般有两种:第一种是使用现有的内容提供器来读取和操作相应程序中的数据,例如系统自带应用联系人就提供了现有的内容提供器所以我们就能创建一个程序来...

2018-06-10 20:29:36 229

原创 2018-06-08

嗯。。。。。。四个去上课了,另一个昨晚就没回来,估计这时候抱着姑娘吧。然而我没课也没姑娘,在床上睡到了三点,迷迷糊糊下床一个人洗了两个桃,掐掉了烂掉的部分,打开电脑一个人在寝室敲代码。。。。敲着敲着,发现前面学的知识忘记了。。。忘记了。。。。默默告诉自己慢慢来。。。。我变了吗,我应该没变吧,还应该是变了吧。。。。感谢大学!尽管身体在这个大学给弄毁了,慢慢来吧,总会好的!在这所大学...

2018-06-08 16:33:07 73

原创 第五章(数据存储方案:SharedPreference、SQLite和LitePal)

数据存储方案Android系统中主要提供了三种方式用于简单地实现数据持久化功能,文件存储、SharedPreference存储和数据库存储。当然除了这三种方式外还可以将数据保存在手机的SD卡中,前三种更简单,保存在SD卡中更安全。文件存储Context类提供了一个openFileOutput()方法和一个openFileInput()方法,它返回的是一个FileOutputStrea...

2018-06-06 17:20:10 401

原创 第四章(广播机制Broadcast简介)

广播机制简介Adroid中的广播主要分为两种类型:标准广播和有序广播。标准广播:标准广播是一种完全异步执行的广播,在广播发出以后,所有的广播接收器几乎都会在同一时刻接收到这条广播信息,因此它们之间没有图呢he先后顺序可言,这种广播效率会比较高,但也以为着它是无法被截断的有序广播有序广播是一种同步执行的广播,在广播发出以后,同一时刻只会有一个广播接收器能接收到这条广播消息,当这个广播接收器...

2018-06-01 20:45:54 318

原创 第三章(碎片实践,简易版的新闻应用)

碎片实践,简易版的新闻应用1.首先添加RecyclerView的依赖库:简便方法:File->Project Structure->Dependencies->点+号找到recyclerview添加后点击ok就自动给项目添加了依赖库首先建一个新闻的实体类Newspackage com.example.fragmentbestpractice;/** * Crea...

2018-05-27 20:50:26 171

空空如也

空空如也

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

TA关注的人

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