概念问题:
什么是进程?
同步与异步
同步与异步更关注交互双方是否可以同时工作。以同步的方式完成任务意味着多个任务的完成次序是串行的,假设任务 A 依赖于任务 B,那么任务 A 必须等到任务 B 完成之后才能继续,执行流程为 A->B;以异步的方式完成任务意味着多个任务的完成可以是并行的,这种情况多适用于任务之间没有因果关系,假如任务 A 中需要执行任务 B,而任务 A 的完成不依赖于任务 B 的结果,那么任务 A 调用任务 B 后可以继续执行后续步骤而不需要等待任务 B 完成,也不关心任务 B 是否执行完毕,此时任务 A 和任务 B 是并行的。
为了加深对同步和异步的理解,可以使用打电话和发短信的类别同步和异步的交互方式。打电话时,一方的后续操作必须等到另一方说完才能进行,这种交互方式就是同步的。发短信则意味着我们不关心对方看到短信后的结果,我们关心自己是否发了短信,发完短信后,我们可以接着手头上的工作,这种交互方式就是异步的。
阻塞与非阻塞
阻塞与非阻塞关注的是交互双方是否可以弹性工作。假设对象 A 和对象 B 进行交互,而对象 B 对一个问题需要思考一段时间才能回复 A,那么对象 A 可以选择等待对象 B 回复,这种方式就是一种阻塞式交互,与此同时,对象 A 可以选择在对象 B 进行思考的时间去完成别的工作,等到对象 B 完成思考后再进行后续交互,这种方式就是一种非阻塞式的交互。
一般来说,阻塞与非阻塞式用来形容 CPU 消耗的。我们把 CPU 停下来等待慢操作完成以后再接着工作称为阻塞;把 CPU 在慢操作完成之前去完成其他工作,等慢操作完成后再接着工作称为非阻塞。
NIO都有哪几种?
Buffer、Channel、Selector
两个排序好的数组,找到第K大个数?(二分查找)
二叉树的层间交替打印
写一个线程安全的单例模式?这样写有什么弊端,如何提升(volatle)?
volatle关键字有什么用?
1)保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。
2)禁止进行指令重排序
二面
hashcode在虚拟机中是如何实现的 ?什么样的情况会变?
底层是C++实现的,具体怎么样不懂,如果有大佬了解,麻烦讲解下。
CMS在重新标记阶段是如何实现的?
参见:https://blog.csdn.net/zqz_zqz/article/details/70568819
各种树的定义及概念:
二叉搜索树:
1.所有非叶子节点至多拥有两个儿子。
2.所有节点存储一个关键字。
3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树;
B树:
1.根节点至少有两个儿子
2.非根节点所包含的关键字个数j : 满足 m/2 -1 < j < m-1
3.所有叶子节点在同一层
红黑树:
1.每个节点要么是红色,要么是黑色。
2.根节点为黑色。
3.叶子节点为黑色
4.如果一个节点为红色,则它的子节点一定是黑色。
5.从一个节点到该节点的子孙节点经过的黑节点数目相同。
Java双亲委派模型是怎么样的?这样做的优势是什么?可以打破么?可以重写rt.jar中的类么?
从虚拟机角度分析,只存在两种不同的类加载器: 1.BootStrap ClassLoader,由C++语言实现,是虚拟机自身的一部分;另一部分则是其他所有加载器(ExtensionClassLoader、ApplicationClassLoader、UserClassLoader):由Java语言实现,独立于虚拟机外部。
类加载器之间的关系:除了BootStrapClassLoader之类,其他的每个加载都有自己的父类,但父子之间不是以继承的关系实现,而是通过组合实现。
工作流程:如果一个类加载器收到类加载的请求,它首先不会自己尝试加载这个类,而把这个请求委派给自己的父类加载去去完成,层层递进,直到所有的请求都传递到顶层的启动类加载器中,只有当父类加载器反馈无法完成这个加载请求时,子类才会尝试自行加载。
优点:保证Java程序的稳定运作。
破坏双亲委派模型:
1.JDK1.2时继承ClassLoader,重写其loadClass()方法。
2.线程上下文类加载器(Thread Context ClassLoader)
3.代码热替换、模块热部署:每一个程序模块都有一个自己的类加载器,当需要更换一个Bundle时将把Bundle连同类加载器一同换掉,实现代码的热替换。
是否可以重写rt.ar?
可以,但是包名不能以java开头,否则报错Prohibited package name
代码可参考:http://greemranqq.iteye.com/blog/2043194
TCP/IP 三次握手时同步序列是怎样生成的?
由本地随机生成(具体生成算法有了解的麻烦告知)
并行与并发的区别?
并行是指:同一时刻执行多个任务,如室友开黑,大家同时都在完游戏,(同时执行)
并发是指:在某一时间段:两个人交替在同一个电脑上完。(任务都在同一时间段上,交替执行)
网友评论