Java基础
文章平均质量分 71
rootlh;
普通开发者如果习惯于在架构师封装好的东西之上,只专注于做业务开发,那久而久之,在技术理解和成长上就会变得迟钝甚至麻木。
展开
-
HashSet源码分析
用法:Set hs = HashSet();底层实现:底层使用HashMap实现,将set的中的元素传入map的key中,value为一个static final的object固定。1.类中new一个Map2.add方法----调用map中的add方法,传入set的元素作为key,object作为value(保证数据的唯一性)3.interator方法-原创 2017-08-08 10:02:14 · 163 阅读 · 0 评论 -
Java IO----磁盘IO工作机制
Java虚拟机中,读取/写入文件的IO操作需要调用系统接口。读:read()写:write()一、标准访问文件方式应用程序调用系统接口read,操作系统系统检查内核高速缓存是否有需要数据,有缓存则直接读取,没有则从磁盘读取。读取操作同上。二、直接IO方式不需要做高速缓存,直接原创 2017-11-10 09:23:14 · 1984 阅读 · 2 评论 -
常见IO模型
一、常见IO模型:(1)同步阻塞IO:服务端阻塞等待客户端发送请求(2)同步非阻塞IO:服务端采用轮询的方式处理客户端请求(3)多路复用IO:Reator设计模式(Java中的selector和epoll)(4)异步IO:Proactor设计模式二、同步和异步的区别(用户线程和CPU交互方式):(1)同步(调用者主动等待调用结果):用户发起IO请求后要等待或轮询CP原创 2017-09-30 19:26:43 · 684 阅读 · 0 评论 -
【转载】为什么说Java匿名内部类是残缺的闭包
前言我们先来看一道很简单的小题:public class AnonymousDemo1{ public static void main(String args[]) { new AnonymousDemo1().play(); } private void play() { Dog dog = new D转载 2017-09-25 14:06:40 · 221 阅读 · 0 评论 -
CyclicBarrier核心代码dowait()方法分析(底层实现机制)
引言: 相信大家对CyclicBarrier并不陌生,当一个线程调用了CyclicBarrier的await方法时,线程阻塞,直到指定数量的线程都执行完await方法后才唤醒所有线程。那么CyclicBarrier的代码底层是如何实现的呢?它和CountDownLatch有什么区别呢? 很显然,CyclicBarrier底层是使用ReentrantLock中的get原创 2017-09-24 23:32:57 · 1136 阅读 · 0 评论 -
JDK7与JDK8中HashMap的区别
关于JDK7中的HashMap源码分析可移步:http://blog.csdn.net/qq_17305249/article/details/76877193 总的来说,JDK7中的hashMap底层采用了数组+链表的数据结构实现数据存储,随着存储数据量的增大,Hash碰撞会越来越频繁。也就意味着链表会越来越长,查找效率不断降低。 JDK8的出现解决了原创 2017-09-22 23:03:50 · 2994 阅读 · 0 评论 -
HashMap源码分析
用法: Map hm = new HashMap();存储结构:数组+链表不同hash值的key的Entry存在数组table中----数组存储每个相同hash值的key的Entry用链表存储put(K,V)方法:1.判断key是否为空----为空则调用putForNullKey(V value)2.从key的hashcode原创 2017-08-08 10:01:26 · 331 阅读 · 0 评论 -
Java线程池ThreadPoolExecutor的execute()原理
从线程提交任务的submit方法说起 众所周知,Java的线程池底层是使用工作队列+阻塞队列来实现的。当工作队列(workQueue)任务数大于线程池的最大线程数时,任务阻塞,被放入一个阻塞队列(blockingQueue)中。 那么,在任务提交到线程开始工作这段时间里发生了什么呢? 下面是submit方法的源码,对Runn原创 2017-09-22 22:46:10 · 1019 阅读 · 0 评论 -
Java NIO通信的实现
非阻塞网络IO通信:当客户端的通道(都注册在Selector中)准备就绪后,Selector才向服务端发送请求。服务端才分配线程执行请求(没准备好前服务端不会先分配线程阻塞等待客户端)。阻塞式和非阻塞式IO区别: 传统的 IO 流都是阻塞式的。当一个线程调用 read() 或 write() 时,该线程被阻塞,直到有一些数据被读取或写入,该线程在此原创 2017-08-27 14:43:53 · 495 阅读 · 0 评论 -
Java NIO中的通道Channel
一、通道的概念:独立的处理器(专门用于IO操作) 1 * 一、用于源节点和目标节点的连接,负责缓冲区中数据的传输,不负责存储,需配合缓冲区进行操作。2 * 3 * 二、通道类:4 * java.nio.channel包下5 * FileChannel(文件IO)6 * SocketChannel(TCP的IO套接字)7 * ServerSocketChann原创 2017-08-27 14:42:29 · 202 阅读 · 0 评论 -
Java NIO中的缓冲区
1*数据类型(除boolean)2* ByteBuffer3* CharBuffer4* ShortBuffer5* IntBuffer6* LongBuffer7* FloatBuffer8* DoubleBuffer9*10* 二、存数据put取数据get11*12* 三、4个核心属性:13* capacity容量(缓冲区最大容量)、14* limit界限(缓冲区可以操作数据的大小)、15*原创 2017-08-27 14:41:04 · 414 阅读 · 0 评论 -
什么是NIO
None-Blocking IO---非阻塞IO,主要用于套接字等网络编程 JDK1.4功能特性:面向缓冲区基于通道更加高效的读写用于高并发读写 NIO传输数据(双向传输、面向缓冲区)通道:负责传输缓冲区:负责存储原创 2017-08-27 14:37:35 · 251 阅读 · 0 评论 -
从一个 NullPointerException 探究 Java 的自动装箱拆箱机制
转载自知乎专栏:https://zhuanlan.zhihu.com/p/28645185作者:mzlogin前天遇到了一个 NullPointerException,触发的代码类似下面这样:public class Test { public static long test(long value) { return value;转载 2017-08-21 14:25:13 · 453 阅读 · 0 评论 -
Java的IO流(总结)
四大抽象基类:InputStream OutputStream Reader Writter四大访问文件类:File- File- File- File四大访问数组:ByteArray- ByteArray- CharArray- CharArray-四大缓冲流:Buffered- Buffered- Buffered- Buffered-字节流byte(Input原创 2017-08-08 10:06:02 · 177 阅读 · 0 评论 -
Java异常(总结)
Throwable类的两个子类:Error和ExceptionException是一个类:分为两大子类:RuntimeException(运行时异常)和IOException(非运行时异常)RuntimeException:程序运行时异常---空指针异常---OOM---数学异常 1/0----数组下标越界异常:初始化a[原创 2017-08-08 10:04:24 · 198 阅读 · 0 评论 -
LinkedHashMap源码分析
继承HashMap用法: Map lhm = new LinkedHashMap();底层实现:哈希表和双向链表保存元素。保存元素:Entry header;静态内部类:private static class Entry extends hashMap.Entry{ Entry befo原创 2017-08-08 10:03:33 · 176 阅读 · 0 评论 -
ArrayList源码分析
用法:List ls = new ArrayList();底层实现:数组Object[]1.构造器----生成一个初始大小为10的Object数组2.set( int index,E e)方法:Object[index] = e;3.add( E e)方法:确保数组空间足够:ensureCapacity(size+1); 数组末尾赋值:Object[原创 2017-08-08 10:02:49 · 168 阅读 · 0 评论 -
Java 8新的时间日期库的20个使用示例
Java 8新的时间日期库的20个使用示例一、 如何 在Java 8中获取当天的日期二、 如何在Java 8中获取当前的年月日三、在Java 8中如何获取某个特定的日期四、在Java 8中如何检查两个日期是否相等五、在Java 8中如何检查重复事件,比如说生日六、如何在Java 8中获取当前时间七、如何增加时间里面的小时数八、如何获取1周后的日期九、一年前后的日期十、在Java 8中使用时钟十一、...转载 2019-06-30 14:32:35 · 253 阅读 · 0 评论