自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 TCP粘包和拆包

粘包拆包的概念以及解决方案

2019-11-26 16:29:44 8232

原创 编码器与解码器

Netty中的编码器、解码器

2019-11-25 23:20:39 2332

原创 ProtoBuf

编码和解码数据在网络中的传输都是以二进制字节码数据,在发送时需要编码,接收时需要解码。codec由两部分组成,decoder(解码器)和 encoder(编码器)Netty的编码和解码Netty提供的编码器:StringEncoderObjectEncoderNetty提供的解码器:StringDecoderObjectDecoderNetty自带的编码解码器,...

2019-11-24 23:41:19 4725

原创 基于Netty的WebSocket

WebSocketHttp是无状态的,浏览器每次请求,都是创建一个新连接,传输完毕即断开。双方并不能感知对方的状态。而WebSocket是长连接,一次TCP握手,即可建立持久性的连接,并且双方能感知到对方的状态。核心代码:// 因为基于http,所以要添加http编码和解码器pipeline.addLast(new HttpServerCodec());// 以块的方式写,添加Chu...

2019-11-24 23:25:10 281

原创 Netty心跳检测

IdleStateHandlerNetty中的心跳检测机制,根据这个处理器能及时的检测到读/写/读写空闲状态,根据状态进行相应的处理。Triggers an {@link IdleStateEvent} when a {@link Channel} has not performedread, write, or both operation for a while.当没有执行读、写...

2019-11-24 20:53:43 20881

原创 Netty核心组件

BootStrap一个Netty应用通常从一个BootStrap开始,由于配置整个程序BootStrap是配置客户端的启动引导类ServerBootStrap是配置服务端的启动引导类。常用方法ServerBootstrap group(EventLoopGroup parentGroup, EventLoopGroup childGroup)用于设置BossGroup、workGro...

2019-11-23 23:07:28 8212

原创 Netty编写简单的Http服务器

HttpServerpublic class MyHttpServer { public static void main(String[] args) { NioEventLoopGroup bossGroup = new NioEventLoopGroup(); NioEventLoopGroup workGroup = new NioEventL...

2019-11-23 20:11:13 1557

原创 ChannelFuture异步模型

Netty中的操作,如bind、Connect、Write,会返回一个ChannelFuture。调用者并不能立刻获得结果,而是通过Future-Listener机制,用户可以主动获取或等待通知机制获取IO操作结果。Netty的异步模型建立在Future和Callback之上的。假设有个方法func,计算非常耗时,等待显然不合适。那么可以在调用func时,返回一个Future对象,后续可以...

2019-11-23 20:01:34 480

原创 零拷贝zero copy

零拷贝的概念零拷贝:CPU不执行拷贝数据的任务优点:减少不必要的cpu拷贝减少内存带宽的使用减少系统态用户态的切换传统IO四次用户态系统态的切换四次数据拷贝(两次DMA拷贝,两次cpu拷贝)硬盘到内核空间内核空间到用户空间(cpu)用户空间到socket buffer(cpu)socket buffer到协议引擎基于SendFile实现的零拷贝两次用户...

2019-11-22 22:39:10 23849

原创 Netty介绍及NIO详解

Netty简介Netty是一个异步、基于事件驱动的网络应用框架BIO、NIO、AIO的简介应用场景分布式系统中各节点远程过程调用(RPC:Dubbo)游戏服务器Hadoop通信NIO三大组件NIO三大组件:Selector、Channel、Buffer一个Channel对应一个Buffer,一个Selector管理多个Channel,一个线程对应一个Selecto...

2019-11-20 22:37:48 9281 14

原创 Golang面向对象

Golang中虽然没有class,但是通过结构体struct依然支持OOP(封装、多态、继承)。

2019-11-19 21:35:06 10341

原创 BIO、AIO、NIO

BIO:一个线程一个连接,一个请求就需要一个线程。线程的开销大。AIO:一个有效请求一个线程,客户端的IO请求都死由OS先完成了再通知服务器去启动线程处理。NIO:一个请求一个线程,但连接请求都是先注册到多路复用器上,多路复用器轮询到连接有IO请求时才启动一个线程处理。...

2019-11-16 22:51:18 389

原创 Golang函数

init函数Golang中:先初始化全局变量执行init函数执行main函数\var t = test()// init方法func init() { fmt.Println("init method...")}func test()int{ fmt.Println("test methond") return 0}func main(){ fmt.Prin...

2019-11-16 21:19:14 6440

原创 Shell 命令启动Docker Container

Linux虚拟机重启后,都要手动启动多个Docker Container,着实麻烦,使用Shell命令可以减去这个麻烦。创建文件,添加可执行权限touch startcontiner.shchomd +x startcontainer.sh编写startcontainer.sh#!/bin/sh #chkconfig: 35 ...

2019-11-16 11:53:46 18051

原创 Socket通信示例Demo

Socket网络通信服务器端:/** * BIO : 阻塞io **/@Datapublic class BioServer { private ServerSocket serverSocket; private static ThreadPoolExecutor threadPool = new ThreadPoolExecutor(10, 20, 1, Ti...

2019-11-15 21:26:06 2107

原创 Golang基础:数据类型

标识符由字母、数字、下划线组成。单独的_代表匿名变量(用来忽略无用的返回值)。变量声明和初始化声明格式:var 变量名 变量类型如var name stringvar age int = 1000// 批量声明var( name sring age int)// 短变量声明n := 789常量声明常量声明格式:const pi = 3.1415926...

2019-11-15 14:52:15 778

原创 线程池的使用

ThreadPoolExecutor的参数以及四种线程池

2019-11-12 17:36:38 22415

原创 数据库三范式

第一范式字段不可再分。第二范式每一行的数据只能与其中一列相关,即一行数据只做一件事。只要数据列中出现数据重复,就要把表拆分开来。如,订单表中有(订单号、用户姓名、订单金额、用户电话、身份证号),一个用户有多个订单,多个用户信息,这样订单表中的用户信息就是冗余的,应当设计为订单表(订单号、订单金额、用户编号)第三范式数据不能有传递依赖,即只能有直接关系而非间接关系。a -&g...

2019-11-06 23:25:03 98

原创 事务

四大特性A:原子性。要么全都执行,要么全不执行C:一致性。多个事务对同一个数据读取的结果相同。I:隔离性。事务之间相互独立,不会相互影响。D:持久性。一旦提交,数据永久保存,即使数据库故障。并发事务的带来的问题脏读:一个事务读到了另一个事务还没提交的数据。丢失修改:一个事务先读取了数据,另一个事务也读取了此数据,两个事务先后对一个数据修改,那么前一个事务修改的数据就丢失...

2019-11-06 12:09:52 200

原创 乐观锁与悲观锁

悲观锁每次修改时,都会认为别人会修改,所以在拿数据时加锁。别人拿数据就会阻塞到它拿到锁。传统的关系型数据库就使用了这种悲观锁,行锁、表锁,读锁、写锁,都是在操作之前先上锁。Java的Synchronized和Reetrantlock都是这种独占锁。乐观锁每次修改时都认为别人不会在这期间修改数据,所以不会上锁。但是更新的时候,会判断一下在此期间数据有没有其它线程修改。乐观锁的实...

2019-11-06 10:09:38 137

原创 Elasticsearch笔记

Elasticsearch 是一个分布式的 RESTful 风格的搜索和数据分析引擎。基本概念倒排索引也叫反向索引,与之相对的是正向索引。通俗的说,正向索引是通过文档去查找单词,反向索引则是通过单词去查找文档。如有两个文本:w1:hello,wordw2:hello,james倒排索引的处理步骤:找到所有的单词:hello、world、james找到这些单词对应的位置:...

2019-11-06 09:38:48 136

原创 volatile和Atomic

volatile简单来说,volatile保存内存可见性。线程一和二从主内存中复制flag到自己的工作内存。当线程一修改flag的值,线程二并不会立即从主内存中读取flag的值,所以在线程二的工作内存中,flag依然为false。使用volatile关键字,告示JVM此变量是不稳定的,每次使用它都要到主内存中读取。除了保证内存可见性,volatile还能防止指令重排序,但并不能保证原...

2019-10-22 23:07:28 1334

原创 JUC笔记

CountDownLatch闭锁。完成某些操作时,只有当其他所有线程都执行完毕,才继续执行当前运算。 private CountDownLatch latch; public ThreadDemo(CountDownLatch latch){ this.latch = latch; } @Override public void run() {...

2019-10-22 22:00:46 12526

原创 ConcurrentHashMap

ConcurrentHashMap在Java7之前,底层数据结构采用分段数组+链表。采用分段锁实现线程安全。分段锁:每把锁只锁容器内的一部分数据,多线程访问不同的数据段时,就不存在锁竞争,提高并发访问效率。在Java8时,底层和HashMap一样,采用数组+链表/红黑树。采用Syn+CAS实现线程安全。Syn在1.6做过很多优化。CAS:Compare And Swa...

2019-10-21 23:09:42 106

原创 Spring Cloud组件的笔记

Spring Cloud的各种组件,包括Eureka、Ribbon、Feign、OpenFeign、Zuul、Gateway、Config、Bus、Nacos等

2019-10-09 20:56:29 138

原创 Ribbon核心组件IRule

从特定算法从服务列表中选取一个要访问的服务。Ribbon提供了多种策略:如轮询、随机、根据响应时间加权。RoundRobbinRule:轮询RandomRule:随机AvailavilityFilterRule:先过滤掉由于多次访问故障而处于断路器跳闸的服务,还有并发的连接数量超过阈值的服务,然后对剩余的服务列表按照轮询的策略进行访问WeightedResponseTimeRule...

2019-10-08 17:11:19 182

原创 Eureka和Zookeeper的比较

CAP传统的SQL —>ACIDA : atomicity 原子性C : Consistency 一致性I :Isolation 独立性D:Durability持久性NoSQL —> CAPC :Consistency 强一致性A :Availability 可用性P:Partition tolerance 分区容错性CAP理论就是说在分布式存储系统中,...

2019-10-08 14:15:34 14598

原创 Spring Boot修改默认的Servlet容器

1、Spring Boot默认使用Tomcat,寻找自动配置容器的类EmbeddedWebServerFactoryCustomizerAutoConfiguration@Configuration@ConditionalOnWebApplication@EnableConfigurationProperties(ServerProperties.class)public class Em...

2019-10-06 22:52:53 500

原创 Spring Boot与自定义Interceptor、三大组件

拦截器实现HandlerInterceptor/** * 环境: Java10+Spring Boot2 * 所有请求都拦截 * **/public class MyIntercepter implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest req...

2019-10-05 22:04:22 167

原创 关于Spring Boot注解的笔记

@Configuration标注当前类是配置类。通常和@Bean搭配使用@PropertiesSource加载指定的配置文件 @ProPertiesSource(value={“classpath:xxx.properties”})@ImportSource导入Spring的配置文件 @ImportSource(location=“classpath:xxx.proper...

2019-10-03 23:32:55 117

原创 关于SpringBoot自动配置的笔记

自动配置原理官方文档:https://docs.spring.io/spring-boot/docs/2.1.9.RELEASE/reference/html/common-application-properties.htmlSpring Boot启动的时候,加载了主配置类,开启了自动配置功能 **@EnableAutoConfiguration **EnableAutoC...

2019-10-03 21:27:20 182

原创 RabbitMQ笔记

RabbitMQ总结、笔记

2019-09-30 17:14:48 277

原创 Zookeeper补充

监控器原理创建main方法的线程即主线程main线程中创建Zookeeper客户端(zkClient),包含两个线程:线程connect:负责网络通信,连接服务器线程Listener:负责监听客户端通过connect线程将监听事件发送给Zookeeper在Zookeeper的注册监听列表中将注册的监听事件添加到列表中一旦被监听的服务器根目录下,数据或路径发生改变,Zoo...

2019-09-29 20:10:25 1907

原创 Zookeeper的选举机制

判定选举胜出的条件获得半数以上的票数2.选举流程简述假设有5台服务器,每台服务器均没有数据,它们的编号分别是1,2,3,4,5,按编号依次启动,它们的选择举过程如下:服务器1启动,给自己投票,然后发投票信息,由于其它机器还没有启动所以它收不到反馈信息,服务器1的状态一直属于Looking(选举状态)。服务器2启动,给自己投票,同时与之前启动的服务器1交换结果,由于服务...

2019-09-29 10:30:31 114

原创 Redis分布式锁

setnx创建锁使用setnx创建key,设置释放时间,这样就是一个锁了。SET my_resource random_value NX PX 10000NX:不存在才添加PX:超过时间自动删除。释放锁通常使用lua脚本来删除key:-- 删除锁的时候,找到 key 对应的 value,跟自己传过去的 value 做比较,如果是一样的才删除。if redis.call("...

2019-09-27 17:08:36 204

原创 Centos7搭建Redis-5.0.5集群

Redis5.0不需要Ruby即可创建集群,并且redis给我们提供了快速搭建脚本,执行utils/create-cluster/ 目录下的create-cluster脚本 就可以快速搭建,该脚本提供以下几个命令供我们使用echo “Usage: $0 [start|create|stop|watch|tail|clean]”echo “start – Launch Redis...

2019-09-27 10:50:08 793

原创 Redis主从复制

什么是主从复制持久化保证了即使 redis 服务重启也会丢失数据,因为 redis 服务重启后会将硬盘上持久化的数据恢复到内存中,但是当 redis 服务器的硬盘损坏了可能会导致数据丢失,如果通过 redis 的主从复制机制就可以避免这种单点故障,如下图:说明:主 redis 中的数据有两个副本(replication)即从 redis1 和从 redis2,即使一台 redis 服务...

2019-09-26 15:02:45 1104

原创 grep命令详解

grep [OPTIONS] PATTERN [FILE...]grep [OPTIONS] [-e PATTERN]... [-f FILE]... [FILE...]OPTIONS: -e: 使用正则搜索 -i: 不区分大小写 -v: 查找不包含指定内容的行 -w: 按单词搜索 -c: 统计匹配到的次数 -n: 显示行号 -r:...

2019-09-25 10:53:06 127

原创 使用docker打包自己的代码运行

打包一个Java应用,此处以一个简单的HelloWorld为例/** * @author dzyls * 简单的hello,world */@RestControllerpublic class HelloController { @RequestMapping("/hello") public String hello(){ return "he...

2019-09-24 22:43:06 2044 1

原创 解决Vmware15总是开机黑屏卡死

卸载Vmware下载VirtulBox或者打开hyper-vVirtulBox下载

2019-09-24 10:02:00 5681

空空如也

空空如也

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

TA关注的人

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