这里有一份面筋请查收(二)

这里讲述下第二家公司的面试,这是一家大型互联网公司,简称W,一般像博主这样的传统行业去跳到这种公司简直是要跪舔的节奏,所以从一开始就带着一份敬仰之情去面试。由于和博主不在一个城市,所以一面选择电面,二三面技术面去了公司face to face, 最后一面是HR面。这里HR面就略过,只讲述技术类相关的问题。

一面

一面约好14:00,果然14:00就来电话了,这点可以看出管理上还是很厉害的。
1.linux下怎么查看文件内容?
如果看过前面一篇的小伙伴是不是已经知道答案了:cat tac more less head tail nl vi vim gvim
2.消息队列用什么作用?
博主只知道解耦,或者可以当数据冗余只用。后来查阅了一下,原来消息队列有这么多功效:解耦、容易、扩展性(增大消息入队和处理的频率是很容易的)、灵活性和峰值处理能力、排序、缓冲、送达保证(消息队列提供的冗余机制保证了消息能够被实际的处理,只要一个进程读取了该队列即可);异步通讯。
3.设计模式:说说一些常用的设计模式。
设计模式23种,分为创建型、组合型、行为型。
说了一些常用的:单例,适配器,工厂,装饰等。然后被问了一个问题:Java中的IO包含了那些设计模式?博主记不清是不是这家公司的面试题,姑且就算作是吧。拒博主所知,Java中的IO用了两种设计模式,装饰模式和适配器模式,装饰模式比如BufferedInputStream, DataInputStream; 适配器的有InputStreamReader, OutputStreamWriter。
4.SpringMVC的分发过程?
具体指DispatcherServlet怎么运作的原理图,可以参考《Spring知识点提炼》,包括二面也让我画了一个这个图。
5.Spring AOP和IOC的实现原理? 分别是动态代理和反射
6.多线程的应用场景。这个就仁者见仁,智者见智随意聊咯。
7.对着简历问一下项目相关的知识点。在此就不表了。

二面和三面

二面和三面是face2face的。二面问了写Java基础。
1.线程池
就是ThreadPoolExecuotr,里面的各个参数解释一遍,包括什么饱和策略。然后工具类Executors中有哪些方法,包括:newFixedThreadPool, newSingleThreadExecutor, new CachedThreadPool以及Scheduled系列。

2.简述下JVM。
这个是个开放性的问题,考验你对JVM整体的理解。从Javac讲述到GC:
首先通过IDE编写完java程序之后,就要javac来编译成class文件,分为:词法分析,语法分析,语义分析,代码生成是个阶段,在语义分析阶段又可以分为:填充符号表、标注检查、数据流分析和控制流分析。标注检查比如定义int a=1+2,在这个阶段就会被解析成int a=3; 又比如在控制流分析阶段又去除语法糖的动作,类似foreach的解语法糖等。

其次,编译生成class文件之后,就需要JVM加载。加载涉及到一个双亲委派模型,需要对双亲委派模型进行一下论述,以及为什么需要双亲委派模型(为了安全加载)。

类在加载之后就需要涉及验证-准备-解析-初始化的操作。
验证:目的是为了确保Class文件的字节流中包含的信息符合当前虚拟机的要求,并且不会危害虚拟机自身的安全。比如是否以魔数0xCAFEBABE开头。
准备:正式为类变量分配内存并设置类变量初始值的阶段。譬如public static int value=123;这时候赋值value为0.
解析:虚拟机将常量池内的符号引用转换为直接引用的过程。

初始化:这个阶段在上一篇讲过了,一定要突出这个知识点:虚拟机规范严格规定了有且只有5种情况(JDK7)必须对类进行初始化(执行类构造器<clinit>()方法):

  1. 遇到new,getstatic,putstatic,invokestatic这失调字节码指令时,如果类没有进行过初始化,则需要先触发其初始化。生成这4条指令的最常见的Java代码场景是:使用new关键字实例化对象的时候、读取或设置一个类的静态字段(被final修饰、已在编译器把结果放入常量池的静态字段除外)的时候,以及调用一个类的静态方法的时候。
  2. 使用java.lang.reflect包的方法对类进行反射调用的时候,如果类没有进行过初始化,则需要先触发其初始化。
  3. 当初始化一个类的时候,如果发现其父类还没有进行过初始化,则需要先触发其父类的初始化。
  4. 当虚拟机启动时,用户需要指定一个要执行的主类(包含main()方法的那个类),虚拟机会先初始化这个主类。
  5. 当使用jdk1.7动态语言支持时,如果一个java.lang.invoke.MethodHandle实例最后的解析结果REF_getstatic,REF_putstatic,REF_invokeStatic的方法句柄,并且这个方法句柄所对应的类没有进行初始化,则需要先出触发其初始化。

初始化之后就可以使用了,加载的类信息存入了运行时数据区的方法区,也就是俗称的永久代。运行时数据区分为:java堆,java栈,本地方法栈,方法区,pc寄存器。然后简单叙述下这些概念。

new一个对象需要在java堆中开辟内存,使用完之后就需要垃圾回收操作了,接下去要将GC了。
以Hot spot为例,java堆分为年轻代和老年代。通过GC Roots标记不可达内存对象进行回收处理。GC算法有:Mark-Sweep, Copying, Mark-Compact, 分代。接下去就论述垃圾收集器了。年轻代有Serial, ParNew, Parallel Scavenge等都是采用复制算法。老年代有Serial-Old, Parallel-Old, CMS。还有一个G1收集器。一般互联网公司喜欢采用CMS,然后就论述了一下CMS,CMS分为5个部分:初始标记,并发标记,重新标记,并发清除和并发重置,其中初始标记和重新标记是需要Stop the World的。CMS还有一个概念就是Concurrent Mode Failure,发生之后需要来一记Serial-Old的干活。

这个过程其实蛮长的,大概论述了将近20mins左右。

3.写出策略模式的UML图。
可以参考《设计模式:适配器模式(Adapter)

4.你对Java集合了解的怎么样?
博主说Java集合的源码都看过,意思是随便问,然后被问了一个特别冷门的问题,这个问题在上一篇提及过,是Collections.sort()中使用了什么排序算法。幸亏博主看过,不要就要被活生生的打脸了。答案是:加强型归并排序,ComparableTimSort.(这里不只是有归并,还有其他算法,详细需要慢慢琢磨源码~)
这里还是强调一下冷知识的重要性,一般特别偏的知识都知道的话,其他的知识其实是默认掌握了的。博主这里在讲几个冷知识:

  • ThreadLocal什么情况下会发生内存泄露?(一个朋友也是在这家公司被问过这个问题)(线程池)
  • WeakHashMap会发生内存泄露嚒?(key==null)
  • Doug Lea在写JUC的时候为什么喜欢使用for(;;)表示死循环而不是用while(true)?(情怀)
  • JDK中除了IO使用了装饰模式,其他什么地方还使用了装饰模式?(Collections.synchonizedMap, unchecked系列以及unmodifiable系列)

for(;;)和while(true)的区别大致有以下几种论述(仅供参考,博主更偏向于的说法是“情怀”)
1. 大多数时候开启优化两者之间性能没有什么区别。
2. while(true)比for(;;)编译后的指令多。
3. while(true)每次编译器都要判断一下true
4. for(;;)比while(true)敲的字符数更少

5.三面是部门领导,问了点项目相关的技术。这个具有特殊性所以就不表了。


总结

这份工作是猎头找我的,我看到W公司的名字欣然say: I wanna have a try. 但是后来一面完了之后,我也不知道我面的岗位是哪个。后来三面了才知道是做BI的,其是对这个工作不排斥也不喜欢。后来拿到offer也拒了,除了薪资低于预期之外,还有一个博主觉得很重要的一个东西,博主站在W公司门口,包括在W公司边上转了一圈,I feel a bit homeless, 毕竟在这个城市认识的人可以用一只手数的过来,而且都在城市的另一边。感觉如果进了这家公司,每天只能像machine一样活着。毕竟这家公司出了名的996机制。W公司是博主面完的第一家公司,但是博主当时一共投了8家(有2家一面面完就不想去了。。。)一面都过了,让我去面试,所以在自信心上有所增强,觉得自己没有必要去跪舔了,有实力去find a better job,所以在收到offer之时就拒了。



更多链接请关注:
这里有一份面筋请查收(一)
这里有一份面筋请查收(二)
这里有一份面筋请查收(三)
这里有一份面筋请查收(四)
这里有一份面筋请查收(五)
这里有一份面筋请查收(六)
这里有一份面筋请查收(七)
这里有一份面筋请查收(八)

参考资料
1. 设计模式:开篇
2. Spring知识点提炼
3. 设计模式:适配器模式(Adapter)

时间: 2024-12-31 08:38:25

这里有一份面筋请查收(二)的相关文章

这里有一份面筋请查收(一)

博主毕业快满三年了,由于种种原因想换一份工作.学了7年计算机技术,在目前的行业用到的技术不多,还是想去寻找一份互联网行业的工作,这样更能学以致用发挥自己的特长.从上次更新博客到现在已经三周左右了,这三周博客基本断更了,现在找工作也基本收尾了,来聊一聊我所遇到的一些面试经历,希望给各位寻求新机会的小伙伴一个参考.总共面完8家收了7个offer,应该算是比较成功的吧.博文中主要还是聊一下技术相关的,博文中所涉及的公司均以代号标志,不便透露细节. 第一家面试的公司是一家互联网创业公司,这里简称D,博主

这里有一份面筋请查收(七)

本篇所要介绍的是一家互联网企业,简称MD好了.一面是电面,二三面是face2face的技术面,4面是HR面. 一面 一面的具体内容忘了记录了,大概面了45mins,问了30mins的NIO. 这里就来讲一讲NIO的一些知识点.NIO有三个部分:Selector, Channel和Buffer. 传统的IO基于字节流和字符流进行操作.而NIO基于Channel和Buffer(缓冲区)进行操作,数据总是从通道读取到缓冲区,或者从缓冲区写入通道中.Selector用于监听多个通道的时间(比如打开,数据

这里有一份面筋请查收(六)

已经写到第六篇了,本文说的这家公司是博主投的最随意的,属于手滑点赞的那种.这里简称为V,最后也是选择了这家.博主会把简历挂在猎聘网上让猎头来找,然后把自己的简历给猎头,有心思的猎头还会修改一下简历.至于在猎聘网上填写的简历有很多条条框框,一般看到一家比较感兴趣的也会去拉勾网上搜一下,然后在拉勾网上头,拉勾网在这点上做的不错.当时看到公司V觉得也是一家知名企业,就点了发送简历,忘了去拉勾上搜一下了,而且职位介绍也没注意.后来面试的时候面试官解释了一下这个职位,感觉很有吸引力.当时二面和三面之间W公

这里有一份面筋请查收(八)

本篇是这个系列的最后一篇了,写完这篇就准备离职的相关事情了.这里讲述的是公司简称为A, 是8家面试中唯一挂掉的一家.面试分为4轮,两轮技术,后面两轮应该是BOSS+HR面.HR具有一票否决权.博主只面到2面,就只讲讲这两面面了什么吧. 一面 和其他面试差不多,主要是先针对简历上的内容问一番,然后问点Java基础的问题.(共70mins) 1. CMS什么情况下回发生Serial-Old的操作? CMS收集器无法处理浮动垃圾,可能出现"Concurrent Mode Failure",失

这里有一份面筋请查收(五)

这里讲述的是一家公司,简称I,当天上午面完公司B之后,打车到火车站坐高铁赶来面试,午饭也没吃,这次面试的比较久,从下午15:30到19:30,主要是等待的时间.当天20:30还接了一个Z公司的电话面试.这次面试也是轮数最多,持续时间最长的一次.共有一面电面,二面技术面,三面boss1, 四面boss2, 五面vp,如果HR面都算的话共有6面了. 电面 能记住的题目不多了,尽量回忆下吧.主要是根据简历问一些问题. 1.SpringBean的加载过程.(这个经常被问) 其实这个是蛮长的一段,主要有一

这里有一份面筋请查收(四)

这里我连续介绍三家公司的面试,一家是只有一面,还有两家是面完一面就没去了,没去主要是当时一周面了6家而且是在不同的城市,就选择性的挑了这两家没去,是在是太累了,6月17日那天嗓子都面哑了. 第一家(2016-06-13 14:00) 这是一家本地电商企业,简称S, 企业规模还真是特别大,面的是互联网金融的职位.总共面试就一面,1个多小时,大概的过程就是被蹂躏..Java基础好像没怎么问,大体上问了一些分布式架构的相关问题. 比如:Kafka, ActiveMQ, RabbitMQ之间的区别以及各

部分CIA的漏洞利用工具干货请查收

3月12日讯 CIA 辛辛苦苦几年攒的漏洞和工具"被"提交事件后,业内人士和记者都在仔细查看这些文件,各方都在关注事情进展. 相关阅读: 维基解密再曝美国情报机构惊天内幕 批露CIA网络武器库 部分CIA的漏洞利用工具干货请查收 - E安全 CIA本次泄露的基本为"监控"工具 CIA利用厂商漏洞从NSA.GCHQ(英国政府通信总部)或个人计算机安全研究员处获取了大量网络武器,但为了防止厂商发布补丁而未通知厂商. 本次维基解密揭露的黑客工具是CIA专门用来监控特定对象

“环信请程序猿免费看魔兽”的活动中奖短信邮件已发,请查收

问题描述 "环信请程序猿免费看魔兽"的活动中奖短信邮件已发,请查收. 第一步:确认领取电影票,让我们知道你会来,确认地址见短信和邮件 解决方案 深圳排前10,没收到任何短信通知,无法领取电影票,怎么解释?解决方案二: 解决方案三:没一个人在吗??解决方案四:由于高考的原因,短信通道有可能会延时,请注意查收.解决方案五:已圆满解决并拿到电影票,谢谢大总管

缺陷管理-ubuntu下如何编辑.htaccess文件?请指教。

问题描述 ubuntu下如何编辑.htaccess文件?请指教. 配置bugzilla时,最后一步是编辑.htaccess文件,并用#注释掉顶部的Options-Indexes 文件怎么编辑???ubuntu下命令是什么? 解决方案 1:先ls -la查看 bugzilla的配置文件目录下有没有*.htaccess的文件 如果有直接vi打开编辑即可 2 如果没有,find /bugzilla | grep *.htaccess 文件 看能不能找到对应格式的文件, 找到了 就切换到对应的目录下编辑