金证科技股份有限公司社招Java工程师(一面)
根据面试聊天的中得知,该公司业务金融证券对实时大数据技术很重视
基础要扎实。
一些分布式大数据框架要了解下。
- 介绍寒暄--------------------略
- Java虚拟就运行数据区的了解?-----------------画个图,把那几个管理的区域分别阐述下:虚拟机栈(线程独享的,随着线程的开始/结束而创建/销毁),本地方法栈(同虚拟机栈一样),PC寄存器(同虚拟机栈一样),方法区(线程共享的,虚拟机启动而创建,退出而销毁),堆区(线程共享的,同方法区一样)……
- 分别说说它们各自的作用?----------------(承接上一问的坑)PC寄存器:在虚拟机多线程的场景下每个线程都拥有自己的寄存器,用来存放当前方法经过JVM编译后的字节码指令地址(如果是native方法,寄存器存放的是undefined);虚拟机栈:每个线程都拥有各自的栈,存储局部变量、动态链接、方法出口等……;本地方法栈:类似于虚拟机栈用来存储本地方法(Java以外的其他语言编写的指令集调用)局部变量和操作;堆:属于所有线程共享的内存区域,存放对象,垃圾回收的管理区域等;方法区:所有线程共享的区域,存储每个类的结构、运行时常量池、字段方法类变量……
- 堆的原理和分代了解吗?------年轻代(Eden,Suvivor1,Suvivor2),年老代……阐述下对象的生命周期随着GC而从不同的年龄代区域进行迁移……任何一个空间不够用的时候都会促使JVM进行GC。
- 那么GC方式有哪些?它们的原理是什么?-----(承接上一问的坑)根据回收类型分为MinorGC和FullGC两种方式。MinorGC回收新生代内存空间(Eden,S1,S2),新对象生成申请空间失败会触发MinorGC,把存活的对象移动到两个S区,由于Eden区空间相对较小,所以需要速度快效率高的GC算法。FullGC要对整个Heap进行回收,包括新生代、老年代、以及非堆区的持久代,所以时间长,这也是JVM调优的一个突破点。触发FullGC的原因有老年代已满,持久代已满,System.gc()调用……
- 谈谈你对上面GC中回收对象中提出的对象有什么理解?回收那些对象,需要怎么分辨?----------(一坑套一坑,环环都是坑)对象在内存中的存储布局,对象头、实例数据、对齐填充(按理说这个不是我们业务开发员所关注的定义,都是翻译老外的一些术语),主要还是对象的生命周期导致GC回收,也就是判读对象是否存活。引用计数算法是根据对象的引用来给计数器增减1,当计数器为0的对象即被回收,但很难解决对象之间的相互引用;根搜索算法,GCROOT作为对象起始点,向下搜索,搜索的路线为引用链,如果有些对象不再引用链触及点,那就判断为失效对象。
- 你了解的垃圾收集算法有哪些?----------------标记清除算法(标记出所需要被回收的对象,然后进行回收),复制算法(将内存划分为大小相等的两块,每次使用一块,当使用的区域用完后就将存活的对象复制到另一块上面,然后清理掉已使用的一块),标记整理算法(针对老年代的特点,采用先标记然后将存活的对象移动到一端,再清楚失效的对象)。
- 你了解那些垃圾收集器?-------------------就是对上面算法的具体实现,一般不同的分代会有不同的收集器。新生代Serial,ParNew,老年代的有CMS,ParOld……,具体的相关还是有待试后查查相关资料了解下……
- TCP的了解,以及TCP三次握手过程---------------画个图阐述:TCP被封装到IP数据包中的一些结构。画个C/S中交互的过程(Client发请求,Server响应返回给Client,Client再次回应Server的请求)
- 四次挥手过程?-------------也画个草图……
- Java程序启动至少启动几个线程?------除了main主线程,应该还有垃圾回收机制线程吧……这个不太确定……
- 创建线程以及线程运行时代码的方式?----------继承Thread类,实现Runnable、Callable接口。实际可以在纸上列出他们的伪代码……
- 线程的中断、休眠相关以及区别?-------sleep是线程暂停指定时间后继续执行,中断interrupu是线程停止运行。
- 聊项目,以及项目中的一些大数据相关。hadoop集群部署了解吗?你们公司是如何部署的?--------JobTracker和Namenode需要单独部署,因为所有用户对于HDFS操作的请求都会转发到Namenode,所有的运算MapReduce任务都会转发到JobTracker,因此这两个节点的运行压力比较大。TaskTracker和DataNode可以同时部署在一台机器上,一个负责实际数据存储,另一个负责实际的运算任务。如果TaskTracker任务中所需的数据刚好来自于同一台机器的DataNode,不需要走网络传输,既可以获取数据,又可以提高效率。
总结:一面主要是JVM底层、线程基础、以及项目经验为主要内容,时间有有限,
所以后续的考察留到了后面的二面、三面……