NoTrouble's Blog

我们一路奋战,不是为了改变世界,而是为了不让世界改变我们


  • 首页

  • 标签

  • 分类

  • 歌单

  • 搜索

BIO、NIO、AIO详解

发表于 2021-10-12 | 分类于 多线程

Java的I/O演进之路

I/O模型基本说明

I/O模型:就是用什么样的通道或者说是通信模型和架构进行数据传输和接收,很大程度上决定了程序通信的性能,Java共支持三种网络编程的I/O模型:BIO、NIO、AIO。
实际通信需求下,要根据不同的业务场景和性能需求决定不同的I/O模型。

I/O模型

BIO

同步阻塞式,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务端就需要启动一个进程进行处理,如果这个连接不做任何事情会造成不必要的线程开销。

NIO

同步非阻塞式,服务器实现模式为一个线程处理多个请求,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求就进行处理。

AIO

异步非阻塞,服务器实现模式一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理,一般适用于连接数较多且连接数时间较长的应用。

阅读全文 »

Spring源码学习

发表于 2021-10-08

Spring容器中Bean的创建

  • 目标:Spring容器中的Bean是如何创建的?为什么能从容器中获取到?
  • 探究过程

阅读全文 »

Redis常见问题

发表于 2021-08-27 | 分类于 Redis

简单来说 Redis 就是一个使用 C 语言开发的数据库,不过与传统数据库不同的是 Redis 的数据是存在内存中的 ,也就是它是内存数据库,所以读写速度非常快,因此 Redis 被广泛应用于缓存方向。

另外,Redis 除了做缓存之外,也经常用来做分布式锁,甚至是消息队列。

Redis 提供了多种数据类型来支持不同的业务场景。Redis 还支持事务 、持久化、Lua 脚本、多种集群方案。

阅读全文 »

网络层常见问题

发表于 2021-08-25 | 分类于 Computer Networking

IP数据包格式

  • 版本 : 有 4(IPv4)和 6(IPv6)两个值;
  • 首部长度 : 占 4 位,因此最大值为 15。值为 1 表示的是 1 个 32 位字的长度,也就是 4 字节。因为固定部分长度为 20 字节,因此该值最小为 5。如果可选字段的长度不是 4 字节的整数倍,就用尾部的填充部分来填充。
  • 区分服务 : 用来获得更好的服务,一般情况下不使用。
  • 总长度 : 包括首部长度和数据部分长度。
  • 生存时间 :TTL,它的存在是为了防止无法交付的数据报在互联网中不断兜圈子。以路由器跳数为单位,当 TTL 为 0 时就丢弃数据报。
  • 协议 :指出携带的数据应该上交给哪个协议进行处理,例如 ICMP、TCP、UDP 等。
  • 首部检验和 :因为数据报每经过一个路由器,都要重新计算检验和,因此检验和不包含数据部分可以减少计算的工作量。
  • 标识 : 在数据报长度过长从而发生分片的情况下,相同数据报的不同分片具有相同的标识符。
  • 片偏移 : 和标识符一起,用于发生分片的情况。片偏移的单位为 8 字节。

阅读全文 »

传输层常见问题

发表于 2021-08-25 | 分类于 Computer Networking

三次握手

三次握手是 TCP 连接的建立过程。在握手之前,主动打开连接的客户端结束 CLOSE 阶段,被动打开的服务器也结束 CLOSE 阶段,并进入 LISTEN 阶段。随后进入三次握手阶段:

阅读全文 »

数据链路层常见问题

发表于 2021-08-24 | 分类于 Computer Networking

数据链路层(data link layer)通常简称为链路层。两台主机之间的数据传输,总是在一段一段的链路上传送的,这就需要使用专门的链路层的协议。 在两个相邻节点之间传送数据时,数据链路层将网络层交下来的 IP 数据报组装成帧,在两个相邻节点间的链路上传送帧。每一帧包括数据和必要的控制信息(如同步信息,地址信息,差错控制等)。

在接收数据时,控制信息使接收端能够知道一个帧从哪个比特开始和到哪个比特结束。这样,数据链路层在收到一个帧后,就可从中提出数据部分,上交给网络层。 控制信息还使接收端能够检测到所收到的帧中有无差错。如果发现差错,数据链路层就简单地丢弃这个出了差错的帧,以避免继续在网络中传送下去白白浪费网络资源。如果需要改正数据在链路层传输时出现差错(这就是说,数据链路层不仅要检错,而且还要纠错),那么就要采用可靠性传输协议来纠正出现的差错。这种方法会使链路层的协议复杂些。

阅读全文 »

JVM垃圾回收常见问题

发表于 2021-08-24 | 分类于 JVM

堆内存常见分配策略

  • 对象优先分在eden区分配
  • 大对象直接进入老年代

大对象就是需要大量连续内存空间的对象(比如:字符串、数组)。

为了避免为大对象分配内存时由于分配担保机制带来的复制而降低效率。

阅读全文 »

SpringBoot自动装配原理

发表于 2021-08-24 | 分类于 SpringBoot

什么是SpringBoot自动装配

没有 Spring Boot 的情况下,如果我们需要引入第三方依赖,需要手动配置,非常麻烦。但是,Spring Boot 中,我们直接引入一个 starter 即可。通过注解或者一些简单的配置就能在 Spring Boot 的帮助下实现某块功能。

阅读全文 »

Spring和SpringBoot相关注解

发表于 2021-08-24 | 分类于 SpringBoot

@SpringBootApplication

我们可以把 @SpringBootApplication看作是 @Configuration @EnableAutoConfiguration、@ComponentScan 注解的集合。

  • @EnableAutoConfiguration:启用 SpringBoot 的自动配置机制
  • @ComponentScan: 扫描被@Component (@Service,@Controller)注解的 bean,注解默认会扫描该类所在的包下所有的类。
  • @Configuration:允许在 Spring 上下文中注册额外的 bean 或导入其他配置类

阅读全文 »

集合常见问题

发表于 2021-08-24 | 分类于 Collection

集合概述

Java 集合, 也叫作容器,主要是由两大接口派生而来:一个是 Collecton接口,主要用于存放单一元素;另一个是 Map 接口,主要用于存放键值对。对于Collection 接口,下面又有三个主要的子接口:List、Set 和 Queue。

阅读全文 »
<1234…13>

130 日志
31 分类
51 标签
GitHub E-Mail
© 2024 NoTrouble