- 浏览: 169739 次
- 性别:
- 来自: 杭州
最新评论
文章列表
原文:《Java NIO Buffer》
Buffer 与 Channel 结合使用:从 Channel 读取数据到 Buffer,或 将 Buffer 中的 Channel 写入到 Buffer。Buffer 内部就是一个内存块。NIO 将该内存块包装成一个 Buffer 对象,以方便对该内存块的操作。
Buffer 基本使用 ...
原文:《Java NIO Channel》
Channel vs Stream
Stream 是单向的。要么是输入流(读数据),要么是输出流(写数据)。Channel 可以是双向的。既可以从 Channel 读取数据,又可以向 Channel 写入数据
Channel 支持异步读写;Stream 都是同步操作
Channel 总是与 Buffer 合作:将数据读取到 Buffer,或将 Buffer 中的数据写入到 Channel
常见 Channel 类
FileChannel:文件读写
DatagramChannel:UDP 通信
SocketCh ...
原文:《Java NIO Tutorial》、《Java NIO Overview》
Java NIO(New IO) 是 Java 1.4 引入的 IO API。它提供了一种不同的IO操作方式,用于替代原标准的Java IO 和 网络通信API。
Java NIO包含三个核心组件:Channel、Buffer、Selector。
Channel 和 Buf ...
【Java核心-基础】IO
- 博客分类:
- Java
简述
Java 的 IO 方式大致可分为 3 类:BIO、NIO、NIO 2(AIO)
这 3 类 IO 方式在 同步/异步 和 阻塞/非阻塞 方面有明显区别。
同步 vs 异步
同步:后续任务必须等当前调用返回后再执行。
异步:后续任务不需要等待当前调用返回,依靠事件、回调等机制实现任务间次关系。
阻塞 vs 非阻塞
阻塞:执行阻塞操作时,当前线程会处于阻塞状态,无法执行其它任务,只有条件就绪后才能继续。
非阻塞:不管操作是否结束,当前线程直接返回,由后台其它线程继续处理。
BIO
BIO 指传统的 java.io 包,也包 ...
开放地址法
基本思想:当发生哈希冲突时,即两条记录对应的地址相同(假设都为 p),基于该地址 p 生成另一个地址 p1 作为后一条记录的存储地址。如果在 p1 上也发生了冲突,则基于 p1 生成下一个地址,直到找到一个不冲突的地址
再哈希法
基本思想:有多个不同的哈希函数用于计算记录的哈希值。当发生哈希冲突时,逐个使用其它哈希函数计算哈希值,获得存储地址,直到不冲突。
这种方法不易产生数据聚集,计算时间较长,删除数据不方便。
链地址法
基本思想:将产生哈希冲突的记录存到一个链表中,哈希表中存的是该链表的头
这种方法适用于经常进行插入和删除的情况。 ...
【Java核心-基础】哈希表 Map
- 博客分类:
- Java
HashMap
这是最常使用的哈希表实现。
非线程安全。
在理想情况下,如果哈希散列正常,put 和 get 等操作可达到常数时间的性能。
HashMap 使用了 链地址法 来解决哈希冲突;当冲突元素较多时又会用 树结构 替代单链表, ...
【Java核心-基础】集合 Collection
- 博客分类:
- Java
抽象类 AbstractList、AbstractSet、AbstractQueue 包含了这些接口的通用部分。
List
List 是有序集合,提供了方便的访问、插入、删除等操作。
ArrayList、LinkedList、Vector 都实现了 List 接口
它们的设计目标不同,具体行为、性能和线程安全方面也不同。
ArrayList
这是应用最广泛的动态数组。非线程安全;扩容时会增加 50%
扩容方式就是新建一个更大的内部数组,将原内部数组的数据拷贝到新数组中
Vector
这是Java早期提供的线程安全的动态数组。扩容时会增加 ...
【Java核心-基础】原始数据类型
- 博客分类:
- Java
Java原始数据类型
Java中的变量类型分为两大类:原始数据类型 和 引用类型。
原始数据类型就是常说的值类型,共8种。
它们有各自的包装类型,提供了一些非常有用的基本操作。而且包装类都是不可变类(无法被继承、也 ...
配置单
配件
价格
CPU:i5 8500
1244
显示器:戴尔 SP2318H
979
内存:威刚 万紫千红 2666MHz 8G 2条
776
主板:映泰 B360MHD PRO2
399
硬盘:东芝 Q200EX M.2 240G
349
机箱:先马 小黑洞
229
电源:航嘉 Jumper 450B
219
CPU散热器:大镰刀 赤兔马 STB120
89
键盘:戴尔 KB216
39
总价
4323
前言
很早就想买个台式机放家里日常使用。但是因为各方面条件不成熟(主要是 ...
【Java核心-基础】反射机制 与 动态代理
- 博客分类:
- Java
Java 反射机制
很多编程语言都有“反射机制”。这项机制能让程序在运行期间 自省(introspect)。
通过这项技术,我们可以在运行期间获取类的属性、方法等元数据,甚至修改类的定义。
Java 的反射机制也一样。
Accessibl ...
String
String 是 Java 中处理字符串相关业务的基础类。
它是典型的不可变类(Immutable):被声明为 final class,内部属性也是 final。
“不可变”的特性可以为线程安全提供便利,拷贝时也不需要额外复制数据(构造函数 String(String) 就是直接设置内部字段的引用,未拷贝数据)。
【性能】
因为“不可变”,所以字符串的拼接、裁剪等操作会产生新的 String 对象。如果处理不当,会对性能产生明显影响。
StringBuffer
该类可以避免字符串拼接过程中产生太多中间对象。通过它的 append 方法 ...
很多编程语言都存在两个或以上相似关键字的情况。初次接触编程的人可能会对此产生疑惑。但对于稍有经验的人,即使无法即兴说一段教科书般的解释,他们心里也是非常清楚这些关键字的差别的。因为真的很简单。
Java中 ...
Java中的变量类型分为两大类:原始数据类型 和 引用类型。
引用类型分类
Java 中的引用分为“强引用”、“软引用”、“弱引用”、“幻象引用”。
这些分类体现了Java对象不同的可达性状态(reachable),是垃圾收集器决 ...
本文将使用 Spring AOP 提供一个关于统一异常处理的 AOP 技术应用示例。
(可直接跳到 2.2 查看代码示例:Maven依赖 + 切面类 + Bean配置)
1. AOP简述
AOP 全称为“Aspect Oriented Programming”,中文译名为“面向切面编程”。乍一看非常令人费解。但是你真正理解这项技术(或者说这个思想)要做什么后,你又会觉得“切面”(Aspect)这个词还真有些贴切。“切面”指的是这项技术(AOP)的控制代码并不是直接与业务代码结合在一起;而是分开编写,再由AOP技术根据控制代码中(对目标业务代码)的描述将两者结合在一起。如果我们把“ ...
【Java核心-基础】异常
- 博客分类:
- Java
1. 异常基本分类
1.1 Exception vs Error
在 Java 中,Throwable、Error、Exception、RuntimeException 是常见异常的基类。
Exception 和 Error 都继承自 Throwable 类。
try {
// 可以在此处抛出异常
...
} catch (Throwable e) {
// 可以在此处捕获并处理异常
...
}
Exception 被用于表示程序正常运行中,可以预料的意外情况,可能并且应该被捕获,进行相应处理。
Error 被用于表示在程序正常运行中,不大 ...