Java知识分享网 - 轻松学习从此开始!    

Java知识分享网

Java1234官方群25:java1234官方群17
Java1234官方群25:838462530
        
SpringBoot+SpringSecurity+Vue+ElementPlus权限系统实战课程 震撼发布        

最新Java全栈就业实战课程(免费)

springcloud分布式电商秒杀实战课程

IDEA永久激活

66套java实战课程无套路领取

锋哥开始收Java学员啦!

Python学习路线图

锋哥开始收Java学员啦!

Java面试宝典3.0版本 PDF 下载


分享到:
时间:2020-09-12 09:20来源:http://www.java1234.com 作者:小锋  侵权举报
Java面试宝典3.0版本 PDF 下载
失效链接处理
Java面试宝典3.0版本 PDF 下载


本站整理下载:
 
相关截图:
 
主要内容:

1、Java 基础
1.1 Collection 和 Map
(1)掌握 Collection 和 Map 的继承体系。
(2)掌握 ArrayList(数组)、LinkedList(链表)、Vector(线程同步)、Stack(继承 Vector 先进后出的
栈)、PriorityQueue(优先级堆的极大优先级队列)、HashSet、LinkedHashSet(链表+hash)、
TreeSet(Comparator 比较器)、HashMap、LinkedHashMap(链表)、TreeMap(Comparator 比
较器)、WeakHashMap(“弱键”Æ即没用了就自动被 GC 回收)、EnumMap(key 不能为空,内部
以数组实现,性能更好)、HashTable(线程同步)的特点和实现原理。
补充☆(3)掌握 CopyOnWriteArrayList、CopyOnWriteArraySet、ConcurrentHashMap 的实现
原理和弁用场景。
CopyOnWrite 容器即写时复制的容器。通俗的理解是当我们往一个容器添加元素的时候,
不直接往当前容器添加,而是先将当前容器进行 Copy,复制出一个新的容器,然后新的容
器里添加元素,添加完元素之后,再将原容器的引用指向新的容器。这样做的好处是我们可
以对 CopyOnWrite 容器进行并发的读,而不需要加搀,因为当前容器不会添加任何元素。
所以 CopyOnWrite 容器也是一种读写分离的思想,读和写不同的容器。点
 CopyOnWrite 容器有很多优点,但是同时也存在两个问题,即内存占用问题和数据一
致性问题。所以在开发的时候需要注意一下。
 内存占用问题。因为 CopyOnWrite 的写时复制机制,所以在进行写操作的时候,内存
里会同时驻扎两个对象的内存,旧的对象和新写入的对象(注意:在复制的时候只是复制容
器里的引用,只是在写的时候会创建新对象添加到新容器里,而旧容器的对象还在使用,所
以有两份对象内存)。如果这些对象占用的内存比较大,比如说 200M 左右,那么再写入
100M 数据进去,内存就会占用 300M,那么这个时候很有可能造成频繁的 Yong GC 和 Full 
GC。之前我们系统中使用了一个服务由于每晚使用 CopyOnWrite 机制更新大对象,造成了
每晚 15 秒的 Full GC,应用响应时间也随之变长。
 针对内存占用问题,可以通过压缩容器中的元素的方法来减少大对象的内存消耗,比如,
如果元素全是 10 进制的数字,可以考虑把它压缩成 36 进制或 64 进制。或者不使用
CopyOnWrite 容器,而使用其他的并发容器,如 ConcurrentHashMap。
 数据一致性问题。CopyOnWrite 容器只能保证数据的最终一致性,不能保证数据的实
时一致性。所以如果你希望写入的的数据,马上能读到,请不要使用 CopyOnWrite 容器。
上海传智播客·黑马程序员 著
上海传智播客·黑马程序员 www.itheima.com
第 7 页 共 91 页
1.2 IO
掌握 InputStream、OutputStream、Reader、Writer 的继承体系。
IO 流中的设计模式
1.IO 中用到的适配器模式
在 IO 中,如将字符串数据转变成字节数据保存到文件中,将字节数据转变成流数据等都用
到了弁配器模式,下面以InputStreamReader和OutputStreamWriter类为例介绍弁配器模式。
InputStreamReader 和 OutputStreamWriter 类分别继承了 Reader 和 Writer 接口,但要创建
它们必须在构造函数中传入一个 InputStream 和 OutputStream 的实例,InputStreamReader
和 OutputStreamWriter 的作用也就是将 InputStream 和 OutputStream 弁配到 Reader 和
Writer。
InputStreamReader 实现了 Reader 接口,并且持有了 InputStream 的引用,这是通过
StreamDecoder 类间接持有的,因为 byte 到 char 要经过编码。
这里,适配器就是 InputStreamReader 类,而源角色就是 InputStream 代表的实例对象,
目标接口就是 Reader 类,OutputStreamWriter 类也是类似的方式。
在 IO 中类似的还有,如 StringReader 将一个 String 类适配到 Reader 接口,
ByteArrayInputStream 适配器将 byte 数组适配到 InputStream 流处理接口。
2.IO 中用到的装饰模式
装饰模式就是对一个类进行装饰,增强其方法行为,在装饰模式中,作为原来的这个
类使用者还不应该感受到装饰前与装饰后有什么不同,否则就破坏了原有类的结构了,所以
装饰器模式要做到对被装饰类的使用者透明,这是对装饰器模式的一个要求。总之装饰器设
上海传智播客·黑马程序员 著
上海传智播客·黑马程序员 www.itheima.com
第 8 页 共 91 页
计模式就是对于原有功能的扩展
在 IO 中有许多不同的功能组合情况,这些不同的功能组合都是使用装饰器模式实现的,下
面以 FilterInputStream 为例介绍装饰器模式的使用。
InputStream 类就是以抽象组件存在的,而 FileInputStream 就是具体组件,它实现了抽象组
件的所有接口,FilterInputStream 类就是装饰角色,它实现了 InputStream 类的所有接口,
并持有 InputStream 的对象实例的引用,BufferedInputStream 是具体的装饰器实现者,这个
装饰器类的作用就是使得 InputStream 读取的数据保存在内存中,而ᨀ高读取的性能。类似
的还有 LineNumberInputStream 类,它的作用是ᨀ高按行读取数据的功能。
总结
 这两种设计模式看起来都是起到包装一个类或对象的作用,但是使用它 们的目的却不
尽相同。弁配器模式主要在于将一个接口转变成另一个接口,它的目的是通过改变接口来达
到重复使用的目的;而装饰器模式不是要改变被装饰对象的接口,而是保持原有的接口,但
是增强原有对象的功能,或改变原有对象的方法而提高性能。
补充☆(3) 高性能的 IO 体系。
首先得明白什么是同步,异步,阻塞,非阻塞.
1,同步和异步是针对应用程序和内核的交互而言的
2,阻塞和非阻塞是针对于进程在访问数据的时候,根据 IO 操作的就绪状态来采取的不同方
总结一句简短的话,同步和异步是目的,阻塞和非阻塞是实现方式。
名词解释
同步 指的是用户进程触发IO操作并等待或者轮询的去查看IO操作是否就绪 自己上街买衣
服,自己亲自干这件事,别的事干不了。
2) 异步 异步是指用户进程触发 IO 操作以后便开始做自己的事情,而当 IO 操作已经完成的
时候会得到 IO 完成的通知(异步的特点就是通知) 告诉朋友自己合弁衣服的尺寸,大小,
颜色,让朋友委托去卖,然后自己可以去干别的事。(使用异步 IO 时,Java 将 IO 读写委托
给 OS 处理,需要将数据缓冲区地址和大小传给 OS)
3) 阻塞 所谓阻塞方式的意思是指, 当试图对该文件描述符进行读写时, 如果当时没有东西
可读,或者暂时不可写, 程序就进入等待 状态, 直到有东西可读或者可写为止 去公交站充
值,发现这个时候,充值员不在(可能上厕所去了),然后我们就在这里等待,一直等到充
值员回来为止。(当然现实社会,可不是这样,但是在计算机里确实如此。)
4) 非阻塞 非阻塞状态下, 如果没有东西可读, 或者不可写, 读写函数马上返回, 而不会等
待, 银行里取款办业务时,领取一张小票,领取完后我们自己可以玩玩手机,或者与别人
聊聊天,当轮我们时,银行的喇叭会通知,这时候我们就可以去了。
同步阻塞 IO(JAVA BIO):
同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就
需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开揿,当然可
以通过线程池机制改善。
同步非阻塞 IO(Java NIO) : 同步非阻塞,服务器实现模式为一个请求一个线程,即客户端
发开的连接请求都会注册到多路复用器上,多路复用器轮询到连接有 I/O 请求时才启动一个
线程进行处理。用户进程也需要时不时的询问 IO 操作是否就绪,这就要求用户进程不停的
去询问。

 

------分隔线----------------------------

锋哥公众号


锋哥微信


关注公众号
【Java资料站】
回复 666
获取 
66套java
从菜鸡到大神
项目实战课程

锋哥推荐