美文网首页
面试总结

面试总结

作者: __淡去 | 来源:发表于2018-10-17 21:30 被阅读0次

概念问题:

什么是进程?

同步与异步

同步与异步更关注交互双方是否可以同时工作。以同步的方式完成任务意味着多个任务的完成次序是串行的,假设任务 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 三次握手时同步序列是怎样生成的?

    由本地随机生成(具体生成算法有了解的麻烦告知)

并行与并发的区别?

并行是指:同一时刻执行多个任务,如室友开黑,大家同时都在完游戏,(同时执行)

并发是指:在某一时间段:两个人交替在同一个电脑上完。(任务都在同一时间段上,交替执行)

相关文章

网友评论

      本文标题:面试总结

      本文链接:https://www.haomeiwen.com/subject/ryklzftx.html