自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 资源 (2)
  • 收藏
  • 关注

原创 3-gRPC一次请求过程

grpc一次请求的流程图下面详细介绍每个过程1.启动服务,监听端口,接收客户端建立连接的请求func (s *Server) Serve(lis net.Listener) error { //加锁 s.mu.Lock() s.printf("serving") //标记服务已经启动 s.serve = true //如果服务监听列表为空,说明服务已经被关闭过,因为服务关闭...

2019-09-02 00:08:09 1130

原创 2-gRPC实现的HTTP2.0

HTTP2.0介绍grpc的实现之前,必须先了解HTTP2.0的一些基础知识,毕竟grpc是建立在HTTP2.0之上的。本文会结合grpc中对http2.0的实现对http2.0进行介绍。http2.0几个重要的概念流已建立的连接上的双向字节流消息与逻辑消息对应的完整的一系列数据帧帧HTTP2.0通信的最小单位,每个帧包含帧首部,至少也会标识出当前帧所属的流帧首部使用固定的9个...

2019-09-01 23:07:51 2386

原创 1-gRPC使用例子

grpc使用例子说明第一步,定义一个hello.proto文件,描述服务syntax="proto3";service HelloService { rpc SayHello (HelloRequest) returns (HelloResponse);}message HelloRequest { string greeting = 1;}message ...

2019-09-01 11:53:41 297

原创 netty笔记(3)--netty服务的启动过程

遇到问题时,有时需要带着疑惑分析下源码才能更好的解决问题。 记录下分析netty启动的过程。 启动代码public void start() throws InterruptedException { final EchoServerInHandler inHandler = new EchoServerInHandler(); final EchoServ...

2018-08-13 13:55:56 251

原创 netty笔记(2)--ctx.writeAndFlush()方法

刚开始对这个方法不是很清楚,执行ctx.writeAndFlush()方法时,是写完后立即执行flush,还是同样会将写事件传给下一个handelr。等执行完所有的handler的write方法后再flush()。 接着跟着源码走一遍。第一步@Override protected void channelRead0(ChannelHandlerContext ctx, ByteBu...

2018-08-13 10:16:12 11633

原创 netty笔记(1)--ctx.write()和channel().write()的区别

刚学netty,一些细节上还不是很清楚,发现踩了很多坑。一点一点记录下来。 先看一个小demobootstrap.group(bossGroup,workerGroup) .channel(NioServerSocketChannel.class) .localAddress(new InetSocket...

2018-08-10 15:14:39 7922

原创 记一次netty--channelInactive踩到的坑

昨天项目修改点代码,重新部署后channelInactive一直被触发,一直打印 “如果connectionInfo为空的处理方式”。 设备断开连接后connectionInfo不应该为空的。而且断开连接事件发生这么频繁。 最后上去抓包查看下,发现很多未知IP地址的终端一直请求服务器建立TCP连接。建立后一段时间又断开了,该事件就是这么被触发的。 最后只处理正常设备的断开连接事件。(网络环...

2018-08-10 13:06:12 40694 2

原创 mybatis笔记(2)--执行过程

上篇记录了加载过程。现在介绍下执行过程。还是同一个demopublic static void main(String[] args) throws IOException { Reader reader = Resources.getResourceAsReader("com/forcht/testMybatis/mybatis-config.xml"); ...

2018-08-09 22:56:12 156

原创 mybatis笔记(1)---加载过程

先写个小demo,如下。相关配置文件就不贴出来了。官网上直接可以复制public static void main(String[] args) throws IOException { Reader reader = Resources.getResourceAsReader("com/forcht/testMybatis/mybatis-config.xml"); ...

2018-08-08 21:50:42 142

原创 记一次netty--IdleStateHandler踩到的坑

公司一个项目使用netty框架来搭建。有个场景需要用到IdleStateHandler来检查客户端如果一段时间没有发送数据则主动断开连接。 查看IdleStateHandler的构造器,三个参数分别表示 public IdleStateHandler(boolean observeOutput, long readerIdleTime, long writerIdle...

2018-08-08 17:54:46 11536 1

原创 线程安全--学习笔记

线程安全:当多个线程访问一个对象的时候,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调度方进行其他的协调操作,调用这个对象的行为都可以获得正确的结果,那么这个对象即使线程安全的。 实现线程安全地方法: 加锁同步(悲观锁): synchronized,ReentrantLock。 Synchronized的实现原理: java虚拟机是基于进入和退出的Mon...

2018-07-30 22:30:36 130

原创 线程池--学习笔记

JDK里的几种线程池 先看下一个ThreadPoolExecutor通用的构造函数,有8个参数。 public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, ...

2018-07-29 19:09:54 116

原创 java--线程间的通信

参考书籍《java多线程核心技术》 通过轮询机制检测某一个条件实现线程之间的通信 如下,一个线程不断地往容器添加对象,另外一个线程不断地通过while语句轮询来检测条件是否到达for(int i=0;i<10;i++) { list.add(i+"a"); try { Thread.sleep(1000)...

2018-07-29 11:47:21 461

原创 服务器模型

参考书籍《tomcat内核设计剖析》 阻塞IO:是指读写的时候是阻塞的,就是说程序去读写数据时候,如果当前没有数据可以读写,会一直等待。读数据时直到数据到达并且把操作系统内核复制到用户进程后,才解除阻塞状态。写数据时,等待用户进程将数据写入内核并发送出去后才解除阻塞状态。 单线程阻塞IO 这种模型只能同时处理一个客户端访问,并且在I/O操作上是阻塞的,线程会一直等待,而不会做其他事情。对于多...

2018-07-26 00:48:37 175

原创 java虚拟机(2)--垃圾回收

判定对象是否存活: 可达性分析算法:这个算法的基本思路就是通过一系列的称为GC Roots的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链,当一个对象到GC Roots没有任何引用链相连时,则证明此对象是不可用的。 可作为GC Roots的对象包括: 虚拟机栈中引用的对象,方法区中类静态属性引用的对象,方法区中常量引用的对象,本地方法栈中JNI引用的对象。 垃圾收集算...

2018-07-23 23:43:08 110

原创 java虚拟机(2)--OutOfMemoryError异常

在java虚拟机规范中,除了程序计数器外,虚拟机内存的其他几个运行时区域都有发生OutOfMemoryError异常的可能。 java堆溢出: java堆用于存储对象实例,只要不断地创建对象,并且保证GC Roots到对象之间有可达路径来避免垃圾回收机制清除这些对象,那么对象数量到达最大堆的容量限制后就会产生内存溢出异常。只要不断地往List里存放数据,就可以使堆溢出。public cl...

2018-07-22 23:35:22 119

原创 Java虚拟机(1)--运行时数据区域

运行时数据区域: java虚拟机在执行java程序的过程中会把它所管理的内存划分为若干不同的数据区域。如图 程序计数器:一块较小的内存空间,它可以看做是当前线程所执行的字节码的行号指示器。为了线程切换后能够恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器,各条线程之间计数器互不影响,独立存储,我们称为线程私有的内存。 如果线程正在执行的是一个java方法,这个计数器记录的是正...

2018-07-22 20:40:45 120

原创 TCP协议(3)--TCP的特点

TCP特点: TCP通过检验和,序列号,确认应答,重发控制,连接管理以及窗口控制等机制实现可靠性传输。 通过序列号与确认应答提高可靠性: TCP通过肯定的确认应答ACK实现可靠的数据传输。当发生端将数据发送出去之后会等待对端 的确认应答。如果有确认应答,说明数据已经成功到达对端。反之,数据丢失的可能性比较大。 在一定的时间内如果没有收到确认应答,发送端就可以认为数据已经丢失,并进行...

2018-07-20 14:30:22 18190

原创 TCP协议(2)

TCP与UDP TCP:TCP是面向连接,可靠的流协议。流就是指不间断的数据结构,你可以把它想象成排水管道中的水流。TCP为提供可靠传输,实行顺序控制和重发控制机制。 **UDP:**UDP是不具有可靠性的数据报协议。细微的处理它会交给上层的应用程序去完成。在UDP的情况下,虽然可以确保发送消息的大小,却不能保证消息一定会到达,所以应用程序会根据自己的需要进行重发处理。 区别: TCP用于...

2018-07-20 11:00:20 203

原创 TCP协议(1)--TCP首部

TCP首部格式: TCP首部中没有表示包长度和数据长度的字段。可由IP层计算出TCP包长。 即IP首部的数据包长度-IP首部长度 由TCP包长可知数据的长度。 1.源端口号:表示发送端端口号,字段长度16位 2.目标端口号:表示接收端端口号,字段长度16位 3.序列号:序列号是指发送数据的位置。每发送一次数据,就累加一次该数据字节数的大小。字段长度32位 4.确认应答号:是指下一...

2018-07-19 17:20:07 4762

原创 HTTP基础知识(3)--HTTPS

一,HTTP的缺点: 1,通信使用明文(不加密),内容可能会被窃听。 2,不验证通信方的身份,因此有可能遭遇伪装。 3,无法证明报文的完整性,所以有可能已遭篡改。 二,HTTP+加密+认证+完整性保护=HTTPS HTTPS并非是应用层的一种新的协议。只是HTTP通信接口部分用SSL(Secure Socket Layer)和TLS(Transport Layer Security)协议...

2018-07-14 23:58:13 242

原创 HTTP基础知识(2)--状态码

什么是状态码: 状态码的职责是当客户端向服务器发送请求时,描述返回的请求结果。借助状态码,用户可以知道服务器端是正常处理了请求,还是出现了错误。 14种常用的状态码: 1. 2XX:2XX的响应结果表明请求被正常处理了。 200 OK:表示从客户端发来的请求在服务器端被正常处理了。 204 NO Content: 表示服务器接收的请求已成功处理了,但在返回的响应报文中不...

2018-07-14 20:50:33 330

原创 HTTP基础知识(1)

参考课本 图解HTTP HTTP协议和TCP/IP协议族内的其他众多协议相同,用于客户端和服务器之间的通信。(TPC/IP是互联网相关的各类协议族的总称。) 请求访问文件或图片等资源的一端称为客户端,而提供资源响应的一端称为服务端。 HTTP协议规定,请求从客户端发出,最后服务端响应该请求并返回。也就是说肯定先从客户端开始建立通信的,服务端在没有接受到请求之前不会发送响应。 请求报文是...

2018-07-14 17:46:17 247

原创 计算机网络基础知识(1)

参考计课本计算机网络<第七版>谢希仁 一.OSI,TCP/IP,五层协议的体系结构,以及各层协议 OSI的七层协议体系结构的概念清楚,理论也比较完整,但它既复杂又不实用。 ICP/IP体系结构则不同,它现在已经得到了非常广泛的应用,TCP/IP是一个四层的体系结构,它包含应用层、运输层、网际层和网络接口层(用网际层这个名字是强调这一层是为了解决不同网络的互连问题)。 不过从实质...

2018-07-14 16:33:10 171

原创 类加载器

类加载器:通过一个类的全限定名来获取描述此类的二进制字节流。类的唯一性:对于任意一个类,都需要由加载它的类加载器和这个类本身一同确立其在虚拟机中的唯一性,每一个类加载器,都拥有一个独立的类名称空间。也就是说比较两个雷是否相等,只有在这两个类时同一类加载器加载的前提下才有意义。如果同一个class被同一虚拟机加载,只要加载它们的类加载器不同,那么这两个类就必定不相等。java虚拟机角度:两种...

2018-07-04 23:29:30 99

原创 一个简单的HTTP服务器

应用程序的入口在HttpServer类中。main()方法创建一个HttpServer实例,然后调用await()方法。服务器会在指定的端口上等待HTTP请求,对其进行处理,然后发送响应信息回客户端。package com.forcht.webApplication;import java.io.File;import java.io.IOException;import java.i...

2018-07-04 21:55:59 1276 1

原创 我认识的spring boot(1)

1.@SpringBootApplication注解@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited@SpringBootConfiguration@EnableAutoConfiguration@ComponentScan(excludeFilters = { ...

2018-05-26 16:24:39 103

原创 ClassPathXmlApplicationContext加载配置过程

spring加载基本的xml配置最简单的xml配置,并使用ClassPathXmlApplicationContext加载<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"

2018-04-17 16:51:49 13353

原创 记录学习LinkedList源码过程

Java集合(JDK8) LinkedList篇 首先先看看LinkedList的继承关系 1、添加一个元素 /** * Appends the specified element to the end of this list. * * <p>This method is equivalent to {@link #addLast}. ...

2018-04-08 19:11:49 124

原创 记录学习ArrayList源码过程

Java集合(JDK8) ArrayList篇 首先先看看ArrayList的继承关系 下面来看看每个方法的具体实现 1、带整数的构造方法 public ArrayList(int initialCapacity) { /** 判断initialCapacity是否大于0,大于0则创建一个initialCapacity大小的数组,等于0则使用...

2018-03-25 16:41:26 150

原创 初识spring boot和spring data jpa

介绍 开发java web项目的小伙伴们都知道,如果用原生态的来开发分分钟让自己有想死的感觉,总是写一大堆类似的代码。幸好现在有很多非常优秀的框架可以大大方便我们项目的开发,比如spring,springmvc,mybatis,hibernate等等 。虽然框架可以大大方便我们开发的速度,但有一个很多小伙伴都无法忍受的,就是大量的xml配置,特别对于初学者来说,这无疑是一个噩梦。自古乱世出英雄,

2017-05-15 16:21:05 377

深入理解java虚拟机

深入理解java虚拟机第二版,带书签,清晰完整。适合于java进阶的学习者

2018-03-21

java编程思想第四版,带书签

java编程思想第四版,完整的,带书签。一本java进阶的好书

2018-03-19

空空如也

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

TA关注的人

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