java初学者指南

笔者建议初学者学习Java的方式:看书+视频+实践(初学最难的问题其实仍是在环境)java

Java学习书籍推荐

《Head First Java.第二版》:
能够说是个人Java启蒙书籍了,特别适合新手读固然也适合咱们用来温故Java知识点。node

《Java核心技术卷1+卷2》:
很棒的两本书,建议有点Java基础以后再读,介绍的仍是比较深刻的,很是推荐。程序员

《Java编程思想(第4版)》:
这本书要常读,初学者能够快速概览,中等程序员能够深刻看看java,老鸟还能够用之回顾java的体系。这本书之因此厉害,由于它在无形中整合了设计模式,这本书之因此难读,也偏偏在于他对设计模式的整合是无形的。面试

一些Java方向学习书籍汇总(PDF仅为预览版本,建议购买正版):编程

连接:https://pan.baidu.com/s/1g0mjyJX5ZWU706IKjDSzeg 密码:b88d设计模式

Java学习视频推荐

Java工程师学习路径完整版数组

如下视频整理自慕课网Java工程师路径相关免费课程。安全

Java基础面试常见问题汇总

超详细的Java面试题总结(一)之Java基础知识篇网络

  1. 重载和重写的区别
  2. 自动装箱与拆箱
  3. 成员变量与局部变量的区别有那些?
  4. 静态方法和实例方法有何不一样?
  5. equals 和 == 的区别?

超详细的Java面试题总结(二)之Java基础知识篇数据结构

  1. 建立线程有几种不一样的方式?你喜欢哪种?为何?
  2. 线程有哪些基本状态?这些状态是如何定义的?
  3. finalize()方法何时被调用?析构函数(finalization)的目的是什么?

超详细的Java面试题总结(三)之Java集合篇常见问题

  1. List,Set,Map三者的区别及总结
  2. Arraylist 与 LinkedList 区别
  3. ArrayList 与 Vector 区别(为何要用Arraylist取代Vector呢?)
  4. HashMap 和 Hashtable 的区别
  5. HashSet 和 HashMap 区别
  6. HashMap 和 ConcurrentHashMap 的区别
  7. HashSet如何检查重复
  8. comparable 和 comparator的区别?
  9. 如何对Object的list排序?
  10. 如何实现数组与List的相互转换?
  11. 如何求ArrayList集合的交集 并集 差集 去重复并集
  12. HashMap 的工做原理及代码实现
  13. ConcurrentHashMap 的工做原理及代码实现
  14. 集合框架底层数据结构总结
  15. 集合的选用
  16. 集合的经常使用方法
  17. 集合的选用

超详细的Java面试题总结(四 )之JavaWeb基础知识总结

  1. 简述Servlet
  2. 阐述Servlet和CGI的区别?
  3. Servlet接口中有哪些方法及Servlet生命周期探秘
  4. get和post请求的区别?
  5. 转发(Forward)和重定向(Redirect)的区别?
  6. Servlet与线程安全
  7. JSP和Servlet是什么关系?
  8. JSP工做原理:
  9. JSP有哪些内置对象?做用分别是什么?
  10. Request对象的主要方法有哪些?
  11. request.getAttribute()和 request.getParameter()有何区别?
  12. JSP九大内置对象,七大动做,三大指令-
  13. 实现会话跟踪的技术有哪些?
  14. Cookie和Session的的区别?

做者:
连接:http://www.imooc.com/article/39146
来源:慕课网
堆(英语:heap)是计算机科学中一类特殊的数据结构的统称。堆一般是一个能够被看作一棵树的数组对象。
做者:
连接:https://www.imooc.com/article/39012
来源:慕课网
本文原创发布于慕课网 ,转载请注明出处,谢谢合做
第一阶段:等待数据 wait for data
做者:
连接:https://www.imooc.com/article/37093
来源:慕课网
本文原创发布于慕课网 ,转载请注明出处,谢谢合做

下面都是以网络读数据为例

【2阶段网络IO】

第一阶段:等待数据 wait for data

第二阶段:从内核复制数据到用户 copy data from kernel to user

下面是5种网络IO模型

https://img2.mukewang.com/5b28d3da0001ea4e07560430.jpg

【阻塞blocking IO】

两阶段全程阻塞

recvfrom -> [syscall -> wait -> copy ->] return OK

https://img.mukewang.com/5b28d3f6000184cc07740430.jpg

【非阻塞nonblocking IO】

第一阶段是非阻塞的不断检查是否数据准备好,第二阶段阻塞读取数据

recvfrom -> [syscall -> wait ->] return no data ready

recvfrom -> [syscall -> wait ->] return no data ready

recvfrom -> [syscall -> wait ->] return ready

recvfrom -> [syscall -> copy ->] return OK

https://img4.mukewang.com/5b28d4040001cc5007650430.jpg

【多路复用IO multiplexing】

每一个IO都是非阻塞IO,第一阶段经过select/poll方法,一次性轮询多个IO句柄,检查是否有IO句柄准备好,第二阶段阻塞读取数据

select/pool -> [syscall -> wait ->] return readable

recvfrom -> [syscall -> copy ->] return OK

https://img.mukewang.com/5b28d41600019b7e07560430.jpg

【信号驱动signal driven IO】

第一阶段构造一个信号处理器,第二阶段阻塞读取数据

signal handle -> [syscall -> wait ->] return

[syscall ->] signal handle -> recvfrom -> [syscall -> copy ->] return OK

https://img3.mukewang.com/5b28d4200001ffc707560430.jpg

【异步asynchronous IO】

两阶段都是非阻塞

aio_read -> [syscall -> wait ->] return

[syscall -> copy ->] aio_read callback

https://img2.mukewang.com/5b28ce2300011fc009600720.jpg

5种网络IO对比,只有aio才是全程非阻塞,其它4种都是同步IO。

阻塞IO编程简单,这种方式使用很普遍,可是效率较低。

非阻塞IO效率较高,可是编程较复杂,有开发语言和代码库支持就简单多了。

多路复用非阻塞IO效率比非阻塞IO更高,在大规模的网络IO处理中尤为明显,支持的程序也愈来愈多。

异步IO效率很高,可是编程很复杂。node.js中使用的就是异步IO。

https://img1.mukewang.com/5b28d43c00011d7406320177.jpg

【select / epoll 对比】

select不足的地方:

1 每次select都要把所有IO句柄复制到内核

2 内核每次都要遍历所有IO句柄,以判断是否数据准备好

3 select模式最大IO句柄数是1024,太多了性能降低明显


epoll的特色

1 每次新建IO句柄(epoll_create)才复制并注册(epoll_ctl)到内核

2 内核根据IO事件,把准备好的IO句柄放到就绪队列

3 应用只要轮询(epoll_wait)就绪队列,而后去读取数据

只须要轮询就绪队列(数量少),不存在select的轮询,也没有内核的轮询,不须要屡次复制全部的IO句柄。所以,能够同时支持的IO句柄数轻松过百万。


网络编程,必定要很是了解网络IO模型,对系统设计和架构选型才能有更好的选择和把握。


做者:
连接:https://www.imooc.com/article/37093
来源:慕课网
本文原创发布于慕课网 ,转载请注明出处,谢谢合做

下面都是以网络读数据为例

【2阶段网络IO】

第一阶段:等待数据 wait for data

第二阶段:从内核复制数据到用户 copy data from kernel to user

下面是5种网络IO模型

https://img2.mukewang.com/5b28d3da0001ea4e07560430.jpg

【阻塞blocking IO】

两阶段全程阻塞

recvfrom -> [syscall -> wait -> copy ->] return OK

https://img.mukewang.com/5b28d3f6000184cc07740430.jpg

【非阻塞nonblocking IO】

第一阶段是非阻塞的不断检查是否数据准备好,第二阶段阻塞读取数据

recvfrom -> [syscall -> wait ->] return no data ready

recvfrom -> [syscall -> wait ->] return no data ready

recvfrom -> [syscall -> wait ->] return ready

recvfrom -> [syscall -> copy ->] return OK

https://img4.mukewang.com/5b28d4040001cc5007650430.jpg

【多路复用IO multiplexing】

每一个IO都是非阻塞IO,第一阶段经过select/poll方法,一次性轮询多个IO句柄,检查是否有IO句柄准备好,第二阶段阻塞读取数据

select/pool -> [syscall -> wait ->] return readable

recvfrom -> [syscall -> copy ->] return OK

https://img.mukewang.com/5b28d41600019b7e07560430.jpg

【信号驱动signal driven IO】

第一阶段构造一个信号处理器,第二阶段阻塞读取数据

signal handle -> [syscall -> wait ->] return

[syscall ->] signal handle -> recvfrom -> [syscall -> copy ->] return OK

https://img3.mukewang.com/5b28d4200001ffc707560430.jpg

【异步asynchronous IO】

两阶段都是非阻塞

aio_read -> [syscall -> wait ->] return

[syscall -> copy ->] aio_read callback

https://img2.mukewang.com/5b28ce2300011fc009600720.jpg

5种网络IO对比,只有aio才是全程非阻塞,其它4种都是同步IO。

阻塞IO编程简单,这种方式使用很普遍,可是效率较低。

非阻塞IO效率较高,可是编程较复杂,有开发语言和代码库支持就简单多了。

多路复用非阻塞IO效率比非阻塞IO更高,在大规模的网络IO处理中尤为明显,支持的程序也愈来愈多。

异步IO效率很高,可是编程很复杂。node.js中使用的就是异步IO。

https://img1.mukewang.com/5b28d43c00011d7406320177.jpg

【select / epoll 对比】

select不足的地方:

1 每次select都要把所有IO句柄复制到内核

2 内核每次都要遍历所有IO句柄,以判断是否数据准备好

3 select模式最大IO句柄数是1024,太多了性能降低明显


epoll的特色

1 每次新建IO句柄(epoll_create)才复制并注册(epoll_ctl)到内核

2 内核根据IO事件,把准备好的IO句柄放到就绪队列

3 应用只要轮询(epoll_wait)就绪队列,而后去读取数据

只须要轮询就绪队列(数量少),不存在select的轮询,也没有内核的轮询,不须要屡次复制全部的IO句柄。所以,能够同时支持的IO句柄数轻松过百万。


网络编程,必定要很是了解网络IO模型,对系统设计和架构选型才能有更好的选择和把握。


做者:
连接:https://www.imooc.com/article/37093
来源:慕课网
本文原创发布于慕课网 ,转载请注明出处,谢谢合做

下面都是以网络读数据为例

【2阶段网络IO】

第一阶段:等待数据 wait for data

第二阶段:从内核复制数据到用户 copy data from kernel to user

下面是5种网络IO模型

https://img2.mukewang.com/5b28d3da0001ea4e07560430.jpg

【阻塞blocking IO】

两阶段全程阻塞

recvfrom -> [syscall -> wait -> copy ->] return OK

https://img.mukewang.com/5b28d3f6000184cc07740430.jpg

【非阻塞nonblocking IO】

第一阶段是非阻塞的不断检查是否数据准备好,第二阶段阻塞读取数据

recvfrom -> [syscall -> wait ->] return no data ready

recvfrom -> [syscall -> wait ->] return no data ready

recvfrom -> [syscall -> wait ->] return ready

recvfrom -> [syscall -> copy ->] return OK

https://img4.mukewang.com/5b28d4040001cc5007650430.jpg

【多路复用IO multiplexing】

每一个IO都是非阻塞IO,第一阶段经过select/poll方法,一次性轮询多个IO句柄,检查是否有IO句柄准备好,第二阶段阻塞读取数据

select/pool -> [syscall -> wait ->] return readable

recvfrom -> [syscall -> copy ->] return OK

https://img.mukewang.com/5b28d41600019b7e07560430.jpg

【信号驱动signal driven IO】

第一阶段构造一个信号处理器,第二阶段阻塞读取数据

signal handle -> [syscall -> wait ->] return

[syscall ->] signal handle -> recvfrom -> [syscall -> copy ->] return OK

https://img3.mukewang.com/5b28d4200001ffc707560430.jpg

【异步asynchronous IO】

两阶段都是非阻塞

aio_read -> [syscall -> wait ->] return

[syscall -> copy ->] aio_read callback

https://img2.mukewang.com/5b28ce2300011fc009600720.jpg

5种网络IO对比,只有aio才是全程非阻塞,其它4种都是同步IO。

阻塞IO编程简单,这种方式使用很普遍,可是效率较低。

非阻塞IO效率较高,可是编程较复杂,有开发语言和代码库支持就简单多了。

多路复用非阻塞IO效率比非阻塞IO更高,在大规模的网络IO处理中尤为明显,支持的程序也愈来愈多。

异步IO效率很高,可是编程很复杂。node.js中使用的就是异步IO。

https://img1.mukewang.com/5b28d43c00011d7406320177.jpg

【select / epoll 对比】

select不足的地方:

1 每次select都要把所有IO句柄复制到内核

2 内核每次都要遍历所有IO句柄,以判断是否数据准备好

3 select模式最大IO句柄数是1024,太多了性能降低明显


epoll的特色

1 每次新建IO句柄(epoll_create)才复制并注册(epoll_ctl)到内核

2 内核根据IO事件,把准备好的IO句柄放到就绪队列

3 应用只要轮询(epoll_wait)就绪队列,而后去读取数据

只须要轮询就绪队列(数量少),不存在select的轮询,也没有内核的轮询,不须要屡次复制全部的IO句柄。所以,能够同时支持的IO句柄数轻松过百万。


网络编程,必定要很是了解网络IO模型,对系统设计和架构选型才能有更好的选择和把握。


做者:
连接:https://www.imooc.com/article/37093
来源:慕课网
本文原创发布于慕课网 ,转载请注明出处,谢谢合做

下面都是以网络读数据为例

【2阶段网络IO】

第一阶段:等待数据 wait for data

第二阶段:从内核复制数据到用户 copy data from kernel to user

下面是5种网络IO模型

https://img2.mukewang.com/5b28d3da0001ea4e07560430.jpg

【阻塞blocking IO】

两阶段全程阻塞

recvfrom -> [syscall -> wait -> copy ->] return OK

https://img.mukewang.com/5b28d3f6000184cc07740430.jpg

【非阻塞nonblocking IO】

第一阶段是非阻塞的不断检查是否数据准备好,第二阶段阻塞读取数据

recvfrom -> [syscall -> wait ->] return no data ready

recvfrom -> [syscall -> wait ->] return no data ready

recvfrom -> [syscall -> wait ->] return ready

recvfrom -> [syscall -> copy ->] return OK

https://img4.mukewang.com/5b28d4040001cc5007650430.jpg

【多路复用IO multiplexing】

每一个IO都是非阻塞IO,第一阶段经过select/poll方法,一次性轮询多个IO句柄,检查是否有IO句柄准备好,第二阶段阻塞读取数据

select/pool -> [syscall -> wait ->] return readable

recvfrom -> [syscall -> copy ->] return OK

https://img.mukewang.com/5b28d41600019b7e07560430.jpg

【信号驱动signal driven IO】

第一阶段构造一个信号处理器,第二阶段阻塞读取数据

signal handle -> [syscall -> wait ->] return

[syscall ->] signal handle -> recvfrom -> [syscall -> copy ->] return OK

https://img3.mukewang.com/5b28d4200001ffc707560430.jpg

【异步asynchronous IO】

两阶段都是非阻塞

aio_read -> [syscall -> wait ->] return

[syscall -> copy ->] aio_read callback

https://img2.mukewang.com/5b28ce2300011fc009600720.jpg

5种网络IO对比,只有aio才是全程非阻塞,其它4种都是同步IO。

阻塞IO编程简单,这种方式使用很普遍,可是效率较低。

非阻塞IO效率较高,可是编程较复杂,有开发语言和代码库支持就简单多了。

多路复用非阻塞IO效率比非阻塞IO更高,在大规模的网络IO处理中尤为明显,支持的程序也愈来愈多。

异步IO效率很高,可是编程很复杂。node.js中使用的就是异步IO。

https://img1.mukewang.com/5b28d43c00011d7406320177.jpg

【select / epoll 对比】

select不足的地方:

1 每次select都要把所有IO句柄复制到内核

2 内核每次都要遍历所有IO句柄,以判断是否数据准备好

3 select模式最大IO句柄数是1024,太多了性能降低明显


epoll的特色

1 每次新建IO句柄(epoll_create)才复制并注册(epoll_ctl)到内核

2 内核根据IO事件,把准备好的IO句柄放到就绪队列

3 应用只要轮询(epoll_wait)就绪队列,而后去读取数据

只须要轮询就绪队列(数量少),不存在select的轮询,也没有内核的轮询,不须要屡次复制全部的IO句柄。所以,能够同时支持的IO句柄数轻松过百万。


网络编程,必定要很是了解网络IO模型,对系统设计和架构选型才能有更好的选择和把握。

做者: 连接:https://www.imooc.com/article/37093 来源:慕课网 本文原创发布于慕课网 ,转载请注明出处,谢谢合做