1.3k 1 分钟

# NIO 存在的问题 在 NIO 中,若 Selector 的轮询结果为空,也没有 wakeup() 或新消息处理,会发生空轮询导致 CPU 占用 100%。 前置知识: JDK1.5 引入 epoll 机制。 epoll 是 linux2.6 内核的系统调用,设计目的就是替代 select、poll 线性复杂度的模型, epoll 的时间复杂度是 O (1)。 epoll 在高并发场景表现优秀。 文件描述符 (File Descriptor——fd):linux...
6.6k 6 分钟

# JAVA IO 模型 # BIO Blocking IO,同步并阻塞方式,应用程序向 OS 请求网络 IO 操作,然后会等待 IO 操作完成。客户端与服务器端连接,一个连接创建一个线程。 适用于连接数目比较小且固定的架构,对服务器要求比较高 简单流程: 服务端启动一个 ServerSocket。 客户端启动 Socket 对服务端通讯,默认情况下服务端对每个客户建立一个线程。 客户端发送请求后,先检测服务端是否有线程响应,没有则等待或被拒绝。 有响应,客户端线程等待请求结束返回响应,再继续执行。 # NIO Non-Blocking...
7.3k 7 分钟

# 进程与线程 # 进程 程序由指令和数据组成,但这些指令要运行,数据要读写,就必须将指令加载到内存。在指令运行过程中还需要用到磁盘,网络设备。进程就是用来加载指令、管理内存、管理 io 的 当一个程序被运行,从磁盘加载这个程序的代码至内存,这是就开启了一个进程。 进程就可以视为程序的一个实例。大部分程序可以同时运行多个实例进程 # 线程 一个进程之内可以分为一到多个线程。 一个线程就是一个指令流,将指令流中的一条条指令以一定的顺序交给 cpu 执行。 Java 中,线程作为最小调度单位,进程作为资源分配的最小单位。在 windows...
7.6k 7 分钟

# 架构 # 基础知识 # 基础组件 界面组件: Activity Fragment 服务组件 Service 广播组件 BroadcastReceiver 数据组件 ContentProvider ContentResolver # Activity Activiey 是一个界面容器,主要用于展示界面和与用户交互 # 生命周期: //Activity 创建,完成初始化操作 @Override protected void onCreate(Bundle savedInstanceState) {...
4.1k 4 分钟

# 安装 # rpm 包安装 官网地址:https://www.rabbitmq.com/download.html 下载 rpm 文件:这里有两个需要下载,分别是 rabbitmq-server 和 erlang 安装文件: erlang-23.3.4.11-1.el7.x86_64.rpm rabbitmq-server-3.10.5-1.el8.noarch.rpm # 需要的环境rpm -ivh erlang-23.3.4.11-1.el7.x86_64.rpm# 依赖包,要联网yum install socat -y# 本身rpm -ivh...
3.3k 3 分钟

# 相关概念 # 什么是 MQ message queue 消息的队列,本质上是队列,FIFO 先进先出,队列存放的内容是消息,还是一种跨进程的通信机制,用于上下游传递消息(比喻:QQ 上 A 发消息给 B,A 是上游,B 是下游),逻辑解耦和物理解耦,使用了 MQ 之后,消息发送上游只依赖 MQ,不需要依赖其他服务。 # 为什么要用 MQ?MQ 三大特点 #...
120 1 分钟

# 开启音乐创作之旅 这是一个零基础的电子音乐教学网,你可以学习到基本的乐理知识,并且网站提供在线编曲,你可以通过点击按钮来获得自己想要的韵律。 Learning Music 节奏 贝斯 还有和弦和旋律 使用此网站随便作的曲子:AnxiousLeisure
2.1k 2 分钟

# 函数式接口 # 概述 只有一个抽象方法的接口称之为函数式接口(SAM Single Abstract Method 单一抽象方法模型) JDK 的函数式接口都加上了 @FunctionalInterface 注解进行标识。 但是无论是否加上该注解,只要接口中只有一个抽象方法,都是函数式接口 函数式接口可以通过 Lambda 表达式进行转换 例子: @FunctionalInterfacepublic interface InterfaceEx { // 单一抽象方法 void accept();}# 常用函数式接口 # Consumer...
2.2k 2 分钟

# Optional # 概述 我们在编写代码会经常遇到空指针异常,所以在很多情况下我们需要各种非空判断 Author author = getAuthor(); if(author!=null){ System.out.println(author.getName()); } Author author = getAuthor(); if(author!=null){ System.out.println(author.getName()); } 对象属性也是对象的话会更多 JDK8 引入...
4.5k 4 分钟

# 函数式编程 Functional programming 面向函数编程是将行为抽象为一个函数,将一件事情分成若干个行为(函数),编程的本质是组合,组合的本质是范畴(Category),范畴是函数的组合。 核心思想: 面向对象关注什么对象完成什么事情(数据),面向函数关注完成事情的操作 函数式编程,集中点在函数,函数可以作为参数,返回值,具有不可变性(传递的参数相同结果肯定相同) 优点: 处理集合效率高 代码可读性高、简洁 减少嵌套 # Lambda 表达式 Lambda 起始于 JDK8,是 java8...