
Java基础
文章平均质量分 79
Java基础学习总结
@从入门到入土
学无止境
展开
-
ThreadLocal使用场景与原理
目录ThreadLocal的使用场景ThreadLocal与synchronized的区别Thread、ThreadLocal及ThreadLocalMap的关系调用remove()方法避免内存泄漏ThreadLocal的使用场景ThreadLocal 用作保存每个线程独享的对象,为每个线程都创建一个副本,这样每个线程都可以修改自己所拥有的副本, 而不会影响其他线程的副本,确保了线程安全。 ThreadLocal 用作每个线程内需要独立保存信息,以便供其他方法更方便地获取该信息的场原创 2020-06-29 22:56:24 · 11854 阅读 · 3 评论 -
两张图对比 BIO 与 NIO
这里通过现实中客人在饭店点餐的场景来模拟 IO过程。BIO这里客人代表 socket 客户端,餐厅代表服务端,服务员代表服务端线程池中的线程,服务员接待客人的过程等价于线程处理 IO 请求的过程。这样每新来一位客人,都会有一名服务员来接待,服务员帮客人点完餐交给后厨之后才能继续接待下一位客人。当所有服务员都处于忙碌状态时,再有新来的客人便只能在座位等待了,直到有服务员空闲。可以看到...原创 2020-01-01 22:55:39 · 535 阅读 · 0 评论 -
Java NIO概述
同步非阻塞模式Java NIO 是一种同步非阻塞模式 IO。一个线程从某条通道发送请求读取数据,但是它仅能得到目前可用的数据,如果目前没有可用数据,就什么都不会获取,而不是保持线程阻塞,所以直至数据变的可以读取之前,该线程可以继续做其他的事情。非阻塞写也是如此。一个线程请求写入一些数据到某条通道,但不需要等待它完全写入,这个线程同时可以去做别的事情。 线程通常将非阻塞 IO 的空闲时间...原创 2020-01-01 17:30:03 · 459 阅读 · 0 评论 -
Java Socket 工作机制
Socket 连接机制主机 A 的应用程序要能和主机 B 的应用程序通信,必须通过 Socket 建立连接,而建立 Socket 连接必须由底层 TCP/IP 来建立TCP连接。TCP 是因特网中的传输层协议,使用三次握手协议建立连接。当请求方发出 SYN 连接请求后,等待对方回答 SYN+ACK,并最终对对方的 SYN 执行 ACK(Acknowledgement确认字符)确认。...原创 2019-12-30 23:22:51 · 552 阅读 · 0 评论 -
了解 Java IO 中的概念
目录Java的 IO 类库的基本架构什么是 IO 流?字节流与字符流输入流与输出流节点流处理流Java的 IO 类库的基本架构1、基于字节操作的I/O接口:InputStream和OutputStream;2、基于字符操作的I/O接口:Writer和Reader;3、基于磁盘操作的I/O接口:File;4、基于网络操作的I/O接口:Socket。...原创 2019-12-30 23:02:20 · 336 阅读 · 0 评论 -
<? extends T>与<? super T>的区别
<? extends T>:<? extends T>是get优先,put受限,适用于提取元素为主的场景。<? extends T>可以赋值给任何T以及T的子类的集合,上界为T,取出的类型带有泛型限制,向上转型为T,除了null以外,任何元素不得添加进<? extends T>集合内。<? super T>:<? s...原创 2019-10-17 23:31:55 · 3526 阅读 · 0 评论 -
List、List<Object>、List<?>的区别
通过一个例子来比较这几种写法的区别public class ListWithoutGeneric { public static void main(String[] args) { // 第一段:不使用泛型的方式 List a1 = new ArrayList(); a1.add(new Object()); a1...原创 2019-10-16 23:27:21 · 10783 阅读 · 0 评论 -
Java使用泛型的好处
泛型的作用在Java中,泛型为Java对象在编译期增加一道类型检查,促使开发人员在使用泛型时能够安全地放置和使用数据。泛型的定义泛型可以定义在类、接口、方法中,编译器通过识别尖括号和尖括号内的字符来解析泛型。其中约定俗成的字符包括:E:Element,用于集合中的元素,如List<E>K、V:Key和Value,如Map<K, V>T:the T...原创 2019-10-16 00:06:02 · 3169 阅读 · 0 评论 -
Java8 Stream
1. Stream初体验我们先来看看Java里面是怎么定义Stream的:A sequence of elements supporting sequential and parallel aggregate operations.我们来解读一下上面的那句话:Stream是元素的集合,这点让Stream看起来用些类似Iterator; 可以支持顺序和并行的对原Stream进行...转载 2019-04-17 20:21:00 · 264 阅读 · 0 评论 -
Java8 lambda表达式语法
Lambda初体验下面进入本文的正题–lambda表达式。首先我们看一下什么是lambda表达式。以下是维基百科上对于”Lambda expression”的解释:a function (or a subroutine) defined, and possibly called, without being bound to an identifier。简单点说就是:一个不用被绑...转载 2019-04-17 14:57:48 · 814 阅读 · 0 评论 -
序列化与反序列化
目录序列化的意义序列化面临的挑战基于JDK 序列化方式实现序列化的高阶认识serialVersionUID 的作用静态变量序列化父类的序列化Transient 关键字常见的序列化技术JAVA序列化框架XML 序列化框架JSON 序列化框架Hessian 序列化框架Protobuf 序列化框架序列化技术的选型序列化的意义Java ...原创 2018-10-06 21:44:30 · 6865 阅读 · 2 评论 -
ArrayList源码分析
目录 基本结构类的继承关系基本成员属性构造函数核心方法addget setindexOfremoveforEachArrayList特点总结基本结构ArrayList是List接口的实现类,底层的数据结构是数组,因此它具备数组的基本特性,如内存地址连续,长度固定。类的继承关系/** * HashMap继承了抽象父类Abst...原创 2018-11-17 14:37:39 · 2395 阅读 · 0 评论 -
Object源码分析
目录Object类native关键字registerNatives()getClass()hashcode()equals()clone()toString()notify()notifyAll()wait()finalize()Object类Java中所有的类都继承自Object类。native关键字native关键字标...原创 2018-12-22 23:44:45 · 1008 阅读 · 0 评论 -
面向对象的四大基本特征与六大设计原则
目录四大基本特征抽象封装继承多态六大设计原则单一职责原则(Single-Resposibility Principle)开闭原则(Open-Closed Principle)里氏替换原则(Liskov-Substituion Principle)依赖倒置原则(Dependecy-Inversion Principle)接口隔离原则(Interface-S...原创 2018-12-23 14:47:15 · 475 阅读 · 0 评论 -
类与方法
目录类接口与抽象类内部类成员内部类局部内部类匿名内部类静态内部类this与super类关系方法方法签名值传递与引用传递构造方法类内方法覆写重载类类的定义由访问级别、类型、类名、是否抽象、是否静态、泛型标识、继承或实现关键字、父类或接口名称等组成。类的访问级别有public和无访问控制符,类型分为class、interf...原创 2018-12-28 19:24:09 · 1738 阅读 · 0 评论 -
基本数据类型与包装类
目录基本数据类型Number类缓存区间包装类的共性数据类型转换基本数据类型序号 类型名称 默认值 大小 最小值 最大值 包装类 缓冲区间 1 boolean false 1B 0(false) 1(true) Boolean 无 2 byte (byte)0 1...原创 2018-12-29 22:35:08 · 2381 阅读 · 0 评论 -
synchronized原理
目录synchronized的三种应用方式synchronized的字节码指令synchronized的锁的原理Java对象头Monitorsynchronized锁的优化自旋锁与自适应自旋锁消除锁粗化偏向锁轻量级锁重量级锁锁升级wait和notify的原理wait和notify为什么需要在synchronized里面?synchro...原创 2018-08-31 22:17:35 · 15232 阅读 · 3 评论 -
volatile原理
目录JVM内存结构JMM (Java Memory Model)主内存和工作内存JMM怎么解决原子性、可见性、有序性的问题?原子性保障可见性有序性volatile如何保证可见性?什么是指令重排序?内存屏障LoadLoad BarriersLoadStore BarriersStoreStore BarriersStoreLoad Barrie...原创 2018-08-29 23:45:20 · 4111 阅读 · 0 评论 -
String源码分析
目录接口实现主要成员内部类构造函数常用方法length()、isEmpty()、charAt()getBytes()hashCode()、equals()contentEquals()compareTo()、compareToIgnoreCase()startsWith()indexOf()substring()concat()re...原创 2018-12-30 23:00:19 · 6563 阅读 · 0 评论 -
HashMap源码分析(JDK 8)
目录基本组成结构类的继承关系基本成员属性构造函数核心方法putresizegetremoveentrySetHashMap常见面试题基本组成结构HashMap 是 Map 的一个实现类,它代表的是一种键值对的数据存储形式。Key 不允许重复出现,Value 随意。jdk 8 之前,其内部是由数组+单向链表来实现的,而 jdk 8 对于链表长度超过...原创 2018-11-10 21:12:23 · 6758 阅读 · 0 评论