自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

LoveSummer

https://github.com/andanyoung

  • 博客(48)
  • 资源 (12)
  • 论坛 (3)
  • 问答 (4)
  • 收藏
  • 关注

原创 别人家的团队怎么用RabbitMQ:我总结的5点规范

我曾经一直都很奇怪,为何大家使用开发语言有开发规范,使用数据库有数据库规范,但是使用 MQ 却很少见一些规范。使用 MQ 缺少规范,这是普遍的问题?还只是我身边的个例?不管答案是哪个,在 RabbitMQ 使用时,为了避免在开发中少出现问题,为了事半功倍,都需要提前规范好一些配置和事项。1. 一个 RabbitMQ 应用里建立多个 vhost,去对应不同的开发项目我们在使用数据库的时候,会在一个数据库应用里建立多个不同的数据库去给不同的项目使用,而不用在不同的服务器专门每个项目都安装个数据库应用。

2021-02-25 16:18:53 605

原创 springboot配置Redis哨兵主从服务

redis哨兵集群配置Sentinel(哨兵)是Redis 的高可用性解决方案:由一个或多个Sentinel 实例 组成的Sentinel 系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器。具体原理和配置参考《【带你重拾Redis】Redis 哨兵集群实现高可用》springboot配置Redis主从服务接下来学了一下springboot配置redis的主从服务器。根据一主二从三哨兵的原则来搭建

2021-02-25 11:35:54 661

原创 【带你重拾Redis】Redis 哨兵集群实现高可用

Redis 哨兵集群实现高可用哨兵的介绍sentinel,中文名是哨兵。哨兵是 Redis 集群架构中非常重要的一个组件,主要有以下功能:集群监控:负责监控 Redis master 和 slave 进程是否正常工作。消息通知:如果某个 Redis 实例有故障,那么哨兵负责发送消息作为报警通知给管理员。故障转移:如果 master node 挂掉了,会自动转移到 slave node 上。配置中心:如果故障转移发生了,通知 client 客户端新的 master 地址。哨兵用于实现 Red

2021-02-25 11:05:41 537

原创 【带你重拾Redis】Redis 主从架构

Redis 主从架构单机的 Redis,能够承载的 QPS 大概就在上万到几万不等。对于缓存来说,一般都是用来支撑读高并发的。因此架构做成主从(master-slave)架构,一主多从,主负责写,并且将数据复制到其它的 slave 节点,从节点负责读。所有的读请求全部走从节点。这样也可以很轻松实现水平扩容,支撑读高并发。Redis replication -> 主从架构 -> 读写分离 -> 水平扩容支撑读高并发Redis replication 的核心机制Redis 采用异步

2021-02-24 18:48:59 452

原创 知不知道 Thread.sleep(0) 到底有什么用?

我们可能经常会用到 Thread.Sleep 函数来吧使线程挂起一段时间。那么你有没有正确的理解这个函数的用法呢?思考下面这两个问题:假设现在是 2008-4-7 12:00:00.000,如果我调用一下 Thread.Sleep(1000) ,在 2008-4-7 12:00:01.000 的时候,这个线程会不会被唤醒?某人的代码中用了一句看似莫明其妙的话:Thread.Sleep(0) 。既然是 Sleep 0 毫秒,那么他跟去掉这句代码相比,有啥区别么?我们先回顾一下操作系统原理。操作系统中

2021-02-24 17:35:49 410

原创 从 CPU、磁盘、内存、网络、GC 一条龙!JAVA 线上故障排查完整套路

线上故障主要会包括cpu、磁盘、内存以及网络问题,而大多数故障可能会包含不止一个层面的问题,所以进行排查时候尽量四个方面依次排查一遍。同时例如jstack、jmap等工具也是不囿于一个方面的问题的,基本上出问题就是df、free、top 三连,然后依次jstack、jmap伺候,具体问题具体分析即可。CPU一般来讲我们首先会排查cpu方面的问题。cpu异常往往还是比较好定位的。原因包括业务逻辑问题(死循环)、频繁gc以及上下文切换过多。而最常见的往往是业务逻辑(或者框架逻辑)导致的,可以使用jstack

2021-02-24 17:32:26 438

原创 SpringBoot 读取配置文件中参数全面教程

一、简介在日常开发使用 SpringBoot 框架时,经常有一些配置信息需要放置到配置文件中,我们需要手动读取这些配置到应用中进行一些逻辑,这里整理了一些常用读取配置的方法,简单介绍一下。1、SpringBoot 中常用读取配置方法SpringBoot 中常用的读取配置方法有:使用 @Value 注解读取配置使用 @ConfigurationProperties 注解读取配置使用 Environment 对象读取配置使用 PropertiesLoaderUtils 工具读取配置2、@Va

2021-02-23 17:25:35 683

原创 Tomcat(五):Tomcat 参数调优教程

TIPS本文基于Tomcat 9.0编写,理论兼容Tomcat 8.x及更高版本。本文来探讨Tomcat的调优。Tomcat调优参数主要调优参数在做Tomcat的调优时,最重要是就是Connector(连接器)的调优了(少数情况下,也可能会配置Executor)下面贴出一段server.xml中的配置:<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="150" minSpa..

2021-02-22 17:17:50 577

原创 多路复用 I/O 模型详解, 为什么他能支持更高的并发

阻塞 I/O在这种 IO 模型的场景下,我们是给每一个客户端连接创建一个线程去处理它。不管这个客户端建立了连接有没有在做事(发送读取数据之类),都要去维护这个连接,直到连接断开为止。创建过多的线程就会消耗过高的资源,以 Java BIO 为例BIO 是一个同步阻塞 IOJava 线程的实现取决于底层操作系统的实现在 linux 系统中,一个线程映射到一个轻量级进程(用户态中)然后去调用内核线程执行操作对线程的调度,切换时刻状态的存储等等都要消耗很多 CPU 和缓存资源同步:客户端请求服务端后,服

2021-02-20 23:29:13 753

原创 【带你重拾Redis】Redis持久化

Redis持久化Redis有2种持久化策略: RDB和AOF。RDB(Redis Data Base)RDB是Redis默认的持久化策略,这种策略是把数据库的快照以二进制形式的副本保存在磁盘上。RDB持久化触发条件SAVE命令: 当客户端执行SAVE命令时,会阻塞Redis主线程进行数据持久化,直到持久化完成。Redis在阻塞期间不能处理客户端的请求。BGSAVE命令: 当客户端执行BGSAVE命令时,Redis会fork一个子进程进行数据持久化,因此并不会阻塞Redis服务。FLUSHA

2021-02-20 22:45:10 443

原创 【带你重拾Redis】Redis缓存淘汰策略(key回收)

Redis缓存淘汰策略(key回收)当Redis使用的内存超出物理内存限制时, Redis的内存会和Swap(虚拟内存)频繁切换,造成Redis性能的急剧下降。 为了不让Redis内存占用超过物理内存占用,可以给Redis配置一个 maxmemory 的值, 当Redis占用内存超过了这个maxamemory的值, 那么Redis将启用缓存淘汰策略来删除内存中的key, 缓存淘汰策略可以通过 maxmemory-policy 设置。缓存淘汰策略主要分为3类:noevictionvolatilea

2021-02-20 22:12:28 500

原创 【带你重拾Redis】Redis事务

Redis事务Redis的事务主要依赖于WATCH ,UNWATCH,MULTI , EXEC, DISCARD等命令。 其中 MULTI , EXEC , DISCARD 分别对应关系型数据库的 BEGIN,COMMIT,ROLLBACK操作。Redis事务执行过程客户端使用MULTI命令开启事务,此时用户就可以开始发出要执行的命令。 **如果命令为WATCH/MULTI/EXEC/DISCARD这四个中的任意一个, 那么会被直接执行,**因为它们属于事务操作。当执行DISCARD的时候,会清

2021-02-20 22:08:18 402

原创 【带你重拾Redis】Redis数据结构及使用场景

Redis数据结构Redis有着非常丰富的数据结构,这些数据结构可以满足非常多的应用场景, 如果对这些数据结构有一个比较清晰的认知,使用Redis也会更加得心应手。Redis主要支持以下数据结构:String(字符串)List(双端链表)Hash(Hash字典)Set(无序集合)Sorted Set(有序集合)数据结构描述实现String可以存储字符串,整型和浮点型等类型的数据。适合于简单的K-V数据场景。Redis并没有使用字符数组来实现这一数据类型,而是自己

2021-02-20 21:27:47 427

原创 【带你重拾Redis】Redis常见知识点

什么是Redis?Redis是一个使用ANSI C语言编写,遵守BSD协议规范的开源的K-V类型的NoSQL数据库服务器。 Redis是当前最流行的K-V类型的NoSQL数据库之一,在通往系统架构的方向,它是我们不得不学习的知识。Redis官网Redis常见知识点Redis优缺点Redis的优点:性能高: 用c语言编写的应用我就没见过慢的_。丰富的数据结构: 总体上来说Redis是以K-V形式存储数据,但是细分来说, 它支持STRING,HASH,LIST,SET,SORTED_SET,H

2021-02-20 21:25:27 2315 1

原创 spring中那些让你爱不释手的代码技巧

紧接上文《spring中这些能升华代码的技巧,可能会让你爱不释手》。本文继续总结我认为spring中还不错的知识点,希望对您有所帮助。一. @Conditional的强大之处不知道你们有没有遇到过这些问题:某个功能需要根据项目中有没有某个jar判断是否开启该功能。某个bean的实例化需要先判断另一个bean有没有实例化,再判断是否实例化自己。某个功能是否开启,在配置文件中有个参数可以对它进行控制。如果你有遇到过上述这些问题,那么恭喜你,本节内容非常适合你。@ConditionalOnC.

2021-02-20 18:59:53 433

原创 spring中这些能升华代码的技巧,可能会让你爱不释手

前言最近越来越多的读者认可我的文章,还是件挺让人高兴的事情。有些读者私信我说希望后面多分享spring方面的文章,这样能够在实际工作中派上用场。正好我对spring源码有过一定的研究,并结合我这几年实际的工作经验,把spring中我认为不错的知识点总结一下,希望对您有所帮助。一 如何获取spring容器对象1.实现BeanFactoryAware接口@Servicepublic class PersonService implements BeanFactoryAware { priva

2021-02-20 14:07:20 404

原创 Docker(十五):Docker实战 使用 docker-compose

本章通过一个具体的demo来了解 docker-composedocker-compose 是做什么的在构建一个完整的服务时,我们通常启动一个容器, 一旦出现多个容器需要同时启动的时候手打是下下之策, 因为时间一长难免会忘记细节,写脚本也不是不可以,但是大家没有达成共识时脚本也很难维护…docker-compose 就是来解决这个痛点, 只需要按照统一的格式书写,那么大家生成的容器也都是一致的, 在团队开发的时候扔一个配置好的 docker-compose 能节省很多时间和口水配置 docker.

2021-02-19 14:47:36 411

转载 Docker(十四):Docker:网络模式详解

Docker作为目前最火的轻量级容器技术,牛逼的功能,如Docker的镜像管理,不足的地方网络方面。Docker自身的4种网络工作方式,和一些自定义网络模式安装Docker时,它会自动创建三个网络,bridge(创建容器默认连接到此网络)、 none 、hosthost:容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。Container:创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定的容器共享IP、端口范围。None:该模式关闭了容器的网络功能。Bridg

2021-02-19 11:00:42 462

转载 深入浅出Spring Security(三):FilterChainProxy的运行过程

上篇回顾我们已经知道了Spring Security的核心过滤器的创建和原理,本文主要介绍核心过滤器FilterChainProxy是如何在tomcat的ServletContext中生效的。ServletContext如何拿到FilterChainProxy的过滤器对象我们都知道,Bean都是存在Spring的Bean工厂里的,而且在Web项目中Servlet、Filter、Listener都要放入ServletContext中。看下面这张图,ServletContainerInitial

2021-02-05 16:00:54 526

转载 深入浅出Spring Security(二):FilterChainProxy的创建过程

上篇回顾框架的核心是一个过滤器,这个过滤器名字叫springSecurityFilterChain,类型是FilterChainProxyWebSecurity和HttpSecurity都是建造者WebSecurity构建目标是FilterChainProxy对象HttpSecurity的构建目标仅仅是FilterChainProxy中的一个SecurityFilterChain。@EnableWebSecurity注解,导入了WebSecurityConfiguration类WebSecur

2021-02-05 15:59:39 479

转载 深入浅出Spring Security(一):三句话解释框架原理

三句话解释框架原理整个框架的核心是一个过滤器,这个过滤器名字叫springSecurityFilterChain类型是FilterChainProxy核心过滤器里面是过滤器链(列表),过滤器链的每个元素都是一组URL对应一组过滤器WebSecurity用来创建FilterChainProxy过滤器,HttpSecurity用来创建过滤器链的每个元素。框架接口设计关注两个东西:建造者和配置器框架的用法就是通过配置器对建造者进行配置框架用法是写一个自定义配置类,继承WebSecurityC

2021-02-05 13:52:38 1036

原创 【Netty】Netty零拷贝原理

前言理解零拷贝 零拷贝是Netty的重要特性之一,而究竟什么是零拷贝呢? WIKI中对其有如下定义:“Zero-copy” describes computer operations in which the CPU does not perform the task of copying data from one memory area to another.从WIKI的定义中,我们看到“零拷贝”是指计算机操作的过程中,CPU不需要为数据在内存之间的拷贝消耗资源。而它通常是指计算机在网络上发送

2021-02-05 11:43:42 474

原创 【Netty】Netty解决粘包和拆包问题的四种方案

在RPC框架中,粘包和拆包问题是必须解决一个问题,因为RPC框架中,各个微服务相互之间都是维系了一个TCP长连接,比如dubbo就是一个全双工的长连接。由于微服务往对方发送信息的时候,所有的请求都是使用的同一个连接,这样就会产生粘包和拆包的问题。本文首先会对粘包和拆包问题进行描述,然后介绍其常用的解决方案,最后会对Netty提供的几种解决方案进行讲解。1. 粘包和拆包​ 产生粘包和拆包问题的主要原因是,操作系统在发送TCP数据的时候,底层会有一个缓冲区,例如1024个字节大小,如果一次请求发送的数

2021-02-05 09:10:25 460

原创 【Netty】option(ChannelOption.SO_KEEPALIVE, true) socket参数详解:KeepAlive

.childOption(ChannelOption.SO_KEEPALIVE, true);childOption是用来给父级ServerChannel之下的Channels设置参数的当设置为true的时候,TCP会实现监控连接是否有效,当连接处于空闲状态的时候,超过了2个小时,本地的TCP实现会发送一个数据包给远程的 socket,如果远程没有发回响应,TCP会持续尝试11分钟,直到响应为止,如果在12分钟的时候还没响应,TCP尝试关闭socket连接。keepalive不是说TCP的长连接,

2021-02-05 09:10:14 979

原创 【Netty】Netty为什么要手动释放ByteBuf资源?

ByteBuf是Netty网络通信框架中一个重要的组件。先进和友好的设计理念让开发者受益匪浅。两个指针操作ByteBuf -> 读和写对象池技术 -> 非垃圾回收机制对象池技术对象池模式是一种软件创建设计模式,它使用一组可重用的对象 - “池” ,而不是按需分配和销毁它们。池的客户端从池中请求对象并对返回的对象执行操作。当客户端完成后,它将对象返回到池而不是销毁它,这可以手动或自动完成。在某些情况下,对象池可显着提高性能。对象池使对象生存期复杂化,因为此时实际上并未创建或销毁从池

2021-02-05 09:09:32 564 1

原创 【Netty】入门Netty官方例子解析(三)处理一个基于流的传输 TCP粘包和拆包问题分析和解决

关于 Socket Buffer的一个小警告基于流的传输比如 TCP/IP, 接收到数据是存在 socket 接收的 buffer 中。不幸的是,基于流的传输并不是一个数据包队列,而是一个字节队列。意味着,即使你发送了2个独立的数据包,操作系统也不会作为2个消息处理而仅仅是作为一连串的字节而言。因此这是不能保证你远程写入的数据就会准确地读取。举个例子,让我们假设操作系统的 TCP/TP 协议栈已经接收了3个数据包:由于基于流传输的协议的这种普通的性质,在你的应用程序里读取数据的时候会有很高的可能性被分

2021-02-04 16:04:05 412 1

原创 【Netty】入门Netty官方例子解析(二)Time Server

本文承接上文《【Netty】入门Netty官方例子解析(一)写个 Discard Server》官网文档,Netty入门官方例子第二个例子 Time Server原文这个章节,是为了构建一个模拟时间服务器的代码,可以供其他客户端查询时间,可以通过rdate(后文有解释)命令来验证。import io.netty.bootstrap.ServerBootstrap;import io.netty.channel.ChannelFuture;import io.netty.channel.Chann

2021-02-04 15:33:44 412

原创 【Netty】入门Netty官方例子解析(一)写个 Discard Server

本文以Netty官方给出的列子来讲解Netty带你一步步进入Netty。Netty最全教程在这里Getting Started版本 netty4maven依赖:<!-- https://mvnrepository.com/artifact/io.netty/netty-all --><dependency> <groupId>io.netty</groupId> <artifactId>netty-all</arti

2021-02-04 15:13:44 430

原创 【Netty 】Netty fireChannelRead用法

概述fireChannelRead表示传递消息至下一个处理器,因为pipline的原因,我们可能有一个链式的处理队列,这个队列有头和尾之分,那么消息通常从头处理器进入。假设现有队列A、B、C,一条消息消息首先进入A,如果A不显示调用fireChannelRead将消息传递至B的话,那么B和C永远收不到消息。我们来看个例子:public class AHandler extends ChannelInboundHandlerAdapter { public void channelRead(Chan

2021-02-04 14:29:22 2787 2

原创 【Netty】手把手教你实现自己的第一个 Netty 应用

下面,我会带着大家搭建自己的第一个 Netty 版的 Hello World 小程序。首先,让我们来创建服务端。服务端我们可以通过 ServerBootstrap 来引导我们启动一个简单的 Netty 服务端,为此,你必须要为其指定下面三类属性:线程组(一般需要两个线程组,一个负责处理客户端的连接,一个负责具体的 IO 处理)IO 模型(BIO/NIO)自定义 ChannelHandler (处理客户端发过来的数据并返回数据给客户端)创建服务端public final class Hel

2021-02-04 13:35:39 445

原创 【Netty】大白话 Netty 核心组件分析

Bytebuf(字节容器)网络通信最终都是通过字节流进行传输的。 ByteBuf 就是 Netty 提供的一个字节容器,其内部是一个字节数组。 当我们通过 Netty 传输数据的时候,就是通过 ByteBuf 进行的。我们可以将 ByteBuf 看作是 Netty 对 Java NIO 提供了 ByteBuffer 字节容器的封装和抽象。有很多小伙伴可能就要问了 : 为什么不直接使用 Java NIO 提供的 ByteBuffer 呢?因为 ByteBuffer 这个类使用起来过于复杂和繁琐。Bo

2021-02-04 11:39:13 541

原创 【Netty】什么是编码器和解码器?

什么是编码器和解码器?从网络传输的角度来讲,数组总是以字节的格式在网络之中进行传输的。 每当源主机发送数据到目标主机时,数据会从本地格式被转换成字节进行传输,这种转换被称为编码,编码的逻辑由编码器处理。 每当目标主机接受来自源主机的数据时,数据会从字节转换为我们需要的格式,这种转换被称为解码,解码的逻辑由解码器处理。在Netty中,编码解码器实际上是ChannelOutboundHandler和ChannelInboundHandler的实现, 因为编码和解码都属于对数据的处理,由此看来,编码解码器被设

2021-02-04 11:33:34 445

原创 【Netty】Bootstrap引导

Bootstrap引导在了解ChanelPipeline,EventLoop等组件之后,我们需要将这些组件组织起来,使其成为一个可运行的应用程序。 这里就需要引导这些组件了。Bootstrap类引导类的层次结构包括一个抽象的父类和两个具体的引导子类:ServerBootstrap总是需要一个ServerSocketChannel来处理客户端的连接通信,而 Bootstrap则只需要一个普通的Channel用于与服务端的通信。下面是AbstractBootstrap的主要方法:方法描述

2021-02-04 11:21:52 401

原创 【Netty】Netty线程模型和EventLoop

Netty线程模型和EventLoop由于线程模型确定了代码执行的方式,它可能带来一些副作用以及不确定因素, 可以说这是并发编程中最大的难点,因此,我们需要了解Netty所采用的线程模型,这样 在遇到相关问题时不至于手足无措。线程模型概述现代操作系统几乎都具有多个核心的CPU,所以我们可以使用多线程技术以有效地利用系统资源。在早期的 Java多线程编程中,我们使用线程的方式一般都是继承Thread或者实现Runnable以此创建新的Thread, 这是一种比较原始且浪费资源的处理线程的方式。JDK5之

2021-02-04 11:16:25 413

原创 【Netty】ChannelHandler和ChannelPipeline

ChannelHandler和ChannelPipeline在Netty组件中我们已经介绍了ChannelHandler和ChannelPipeline的关系,这里我们将继续深入了解这两个核心 组件的细节。在学习本章内容之前,请各位同学温习一遍Netty组件部分的内容。ChannelHandler家族Channel的生命周期在Channel的生命周期中,它的状态与ChannelHandler是密切相关的,下列是Channel组件的四个状态:状态描述ChannelUnregist

2021-02-04 10:21:35 2211

原创 【Netty】ByteBuf--Netty的数据容器

ByteBuf–Netty的数据容器网络传输的基本单位是字节,在Java NIO中,JDK提供了Buffer接口,以及其相关的实现作为NIO操作 数据的容器,如ByteBuffer等等。 而Netty为了解决Buffer原生接口的复杂操作提供了ByteBuf, ByteBuf是一个很好的经过优化过的数据容器,我们可以将字节数据添加到ByteBuf中或从ByteBuf中获取数据, 相比于原生Buffer,ByteBuf更加灵活和易用。Netty的数据处理主要通过两个API提供:abstract cla

2021-02-03 20:53:05 466

原创 【Netty】传输(Transport)

传输(Transport)在网络中传递的数据总是具有相同的类型:字节。 这些字节流动的细节取决于网络传输,它是一个帮我们抽象 底层数据传输机制的概念,我们不需要关心字节流动的细节,只需要确保字节被可靠的接收和发送。当我们使用Java网络编程时,可能会接触到多种不同的网络IO模型,如NIO,BIO(OIO: Old IO),AIO等,我们可能因为 使用这些不同的API而遇到问题。 Netty则为这些不同的IO模型实现了一个通用的API,我们使用这个通用的API比直接使用JDK提供的API要 简单的多,且避

2021-02-03 19:24:22 436

原创 【Netty】Netty组件介绍

Netty组件介绍Netty有 Bootstrap/ServerBootstrap,Channel,EventLoop,ChannelFuture,ChannelHandler,ChannelPipeline,编码器和解码器等核心组件。Bootstrap/ServerBootstrapBootstrap和ServerBootstrap是Netty应用程序的引导类,它提供了用于应用程序网络层的配置。一般的Netty应用程序总是分为客户端和服务端,所以引导分为客户端引导Bootstrap和服务端引导S

2021-02-03 18:19:58 328

原创 【NIO】异步模型之Callback -- 封装NIO

在【NIO】IO模型,这节课中,我们提到了5种IO模型。第四种,SIGIO一般都是在进程间使用信号通讯的时候的手段,在Java中不是很适用,我就不深入去讲了。第五种,linux 服务器上的典型代表是 aio,但在Java中也没有对应的内容。不过,有一种非常通用的模型,也应该归到第五种的纯异步模型中去,这就是Callback模型。回调函数Callback函数,翻译成回调函数。假如我们是A,在通知B去做一件事情的时候,告诉他,你做完的时候通过XXX方式通知我你做完了。比如说,这个XXX可能是打电话,可能是微

2021-02-03 15:47:39 318

原创 【NIO】Selector

经过前边几节的介绍,我相信大家都掌握了IO多路复用的核心思想了。昨天我给了一个使用C语言进行 linux 编程的IO多路复用的例子。那个例子使用的是 poll 这个系统调用,今天我会给出一个使用Java实现与之完全对等的例子。Selector在Java中,Selector这个类是select/epoll/poll的外包类,在不同的平台上,底层的实现可能有所不同,但其基本原理是一样的,其原理图如下所示:所有的Channel都归Selector管理,这些channel中只要有至少一个有IO动作,就可以通

2021-02-03 14:11:25 312

Maven基础讲义.zip

Maven 的正确发音是[ˈmevən],而不是“马瘟”以及其他什么瘟。Maven 在美国是一个口语化的词 语,代表专家、内行的意思。 一个对 Maven 比较正式的定义是这么说的:Maven 是一个项目管理工具,它包含了一个项目对象模 型 (POM:Project Object Model),一组标准集合,一个项目生命周期(Project Lifecycle),一个依赖管 理系统(Dependency Management System),和用来运行定义在生命周期阶段(phase)中插件(plugin)目标 (goal)的逻辑。

2019-07-30

SurfaceView

SurfaceView是视图(View)的继承类,这个视图里内嵌了一个专门用于绘制的Surface。你可以控制这个Surface的格式和尺寸。Surfaceview控制这个Surface的绘制位置。

2015-05-05

Navicat.7z

Navicat Premium 是一个数据库开发工具,允许您从单个应用程序连接到MySQL,MariaDB,SQL Server,Oracle,PostgreSQL和SQLite数据库。与Amazon RDS,Amazon Aurora,Amazon Redshift,SQL Azure,Oracle Cloud和Google Cloud等云数据库兼容。您可以快速轻松地构建,维护和维护数据库。

2020-03-26

android 选项卡TanHost

选项卡主要有TabHost、TabWiget和 FramentLayout3个组件组成,用于实现一个多标签的用户界面,通过他可以将一个复杂的对话分隔成若干个标签页,实现对信息的分类显示和管理。使用给组件不仅可以使界面美观大方,还可以有效地减少窗体个数。 在Android中,实现选项卡的一半步骤如下: (1)在布局文件中添加实现选项卡所需的TabHost、TabWiget和 FramentLayout组件。 (2)编写各个标签页中要显示内容所对应的XML布局文件。 (3)在Activity个,获取并初始化TabHost组件。 (4)为TabHost对象添加标签页。

2015-05-02

JDK_API_1_6

JDK_API_1_6,中文版Java1.6API帮助文档。适合于初学者,学习参考之用。

2015-05-17

CameraDemo

Android SDK支持操作Android设备内置的照相机。从Android2.3开始,支持操作多个摄像头(主要指前置摄像头和后置照相机)。通过照相机可以拍照和录像。快速拍照

2015-05-02

C语言程序设计_2003.pdf

C语言程序设计 何钦铭,颜晖主编2003—电子书

2015-07-05

C语言API函数速查.chm

C语言库函数API[CHM文档]是一个很好的C语言函数查询器.属于CHM文档.

2015-07-05

JsonDemo

JsonDemo

2015-05-03

西蒙iPhone-OpenGL ES 教程【中文翻译版PDF】

西蒙OpenGL ES 教程 IOS开发,ios技术文档,网络收集整理。西蒙iphone-OpenGL ES 教程,共13篇。第8、12章由于有更好的技术,所以被译者跳过。

2017-09-01

api web

W3CSchool很不错的WEB开发API。

2015-05-17

JAVA_正则表达式简介

JAVA_正则表达式简介详解

2015-05-03

Young丶的留言板

发表于 2020-01-02 最后回复 2020-04-15

求vs2012怎么连接Oracle,大神们求助!!!

发表于 2015-05-09 最后回复 2015-05-21

求android studio1.1官方有中文版的补丁下载地址

发表于 2015-04-06 最后回复 2015-04-07

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

TA关注的人 TA的粉丝

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