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


欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。


欢迎跳转到本文的原文链接:https://honeypps.com/talk/interview-2/

这里讲述下第二家公司的面试,这是一家大型互联网公司,简称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系列)

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)

欢迎跳转到本文的原文链接:https://honeypps.com/talk/interview-2/

欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。


相关推荐
<p> 需要学习Windows系统YOLOv4的同学前往《Windows版YOLOv4目标检测实战:原理与源码解析》, </p> <p> 课程链接 https://edu.csdn.net/course/detail/29865 </p> <h3> <span style="color:#3598db;">【为什么要学习这门课】</span> </h3> <p> <span>Linux</span>创始人<span>Linus Torvalds</span>有一句名言:<span>Talk is cheap. Show me the code. </span><strong><span style="color:#ba372a;">冗谈不够,放码过来!</span></strong> </p> <p> <span> </span>代码阅读是从基础到提高的必由之路。尤其对深度学习,许多框架隐藏了神经网络底层的实现,只能在上层调包使用,对其内部原理很难认识清晰,不利于进一步优化和创新。 </p> <p> YOLOv4是最近推出的基于深度学习的端到端实时目标检测方法。 </p> <p> YOLOv4的实现darknet是使用C语言开发的轻型开源深度学习框架,依赖少,可移植性好,可以作为很好的代码阅读案例,让我们深入探究其实现原理。 </p> <h3> <span style="color:#3598db;">【课程内容与收获】</span> </h3> <p> 本课程将解析YOLOv4的实现原理和源码,具体内容包括: </p> <p> - YOLOv4目标检测原理<br /> - 神经网络及darknet的C语言实现,尤其是反向传播的梯度求解和误差计算<br /> - 代码阅读工具及方法<br /> - 深度学习计算的利器:BLAS和GEMM<br /> - GPU的CUDA编程方法及在darknet的应用<br /> - YOLOv4的程序流程 </p> <p> - YOLOv4各层及关键技术的源码解析 </p> <p> 本课程将提供注释后的darknet的源码程序文件。 </p> <h3> <strong><span style="color:#3598db;">【相关课程】</span></strong> </h3> <p> 除本课程《YOLOv4目标检测:原理与源码解析》外,本人推出了有关YOLOv4目标检测的系列课程,包括: </p> <p> 《YOLOv4目标检测实战:训练自己的数据集》 </p> <p> 《YOLOv4-tiny目标检测实战:训练自己的数据集》 </p> <p> 《YOLOv4目标检测实战:人脸口罩佩戴检测》<br /> 《YOLOv4目标检测实战:中国交通标志识别》 </p> <p> 建议先学习一门YOLOv4实战课程,对YOLOv4的使用方法了解以后再学习本课程。 </p> <h3> <span style="color:#3598db;">【YOLOv4网络模型架构图】</span> </h3> <p> 下图由白勇老师绘制 </p> <p> <img alt="" src="https://img-bss.csdnimg.cn/202006291526195469.jpg" /> </p> <p>   </p> <p> <img alt="" src="https://img-bss.csdnimg.cn/202007011518185782.jpg" /> </p>
<p> 欢迎参加英特尔® OpenVINO™工具套件初级课程 !本课程面向零基础学员,将从AI的基本概念开始,介绍人工智能与视觉应用的相关知识,并且帮助您快速理解英特尔® OpenVINO™工具套件的基本概念以及应用场景。整个课程包含了视频的处理,深度学习的相关知识,人工智能应用的推理加速,以及英特尔® OpenVINO™工具套件的Demo演示。通过本课程的学习,将帮助您快速上手计算机视觉的基本知识和英特尔® OpenVINO™ 工具套件的相关概念。 </p> <p> 为保证您顺利收听课程参与测试获取证书,还您于<strong>电脑端</strong>进行课程收听学习! </p> <p> 为了便于您更好的学习本次课程,推荐您免费<strong>下载英特尔® OpenVINO™工具套件</strong>,下载地址:https://t.csdnimg.cn/yOf5 </p> <p> 收听课程并完成章节测试,可获得本课程<strong>专属定制证书</strong>,还可参与<strong>福利抽奖</strong>,活动详情:https://bss.csdn.net/m/topic/intel_openvino </p> <p> 8月1日-9月30日,学习完成【初级课程】的小伙伴,可以<span style="color:#FF0000;"><strong>免费学习【中级课程】</strong></span>,中级课程免费学习优惠券将在学完初级课程后的7个工作日内发送至您的账户,您可以在:<a href="https://i.csdn.net/#/wallet/coupon">https://i.csdn.net/#/wallet/coupon</a>查询优惠券情况,大家报名初级课程后尽快学习哦~ </p> <p> <span style="font-size:12px;">注意:点击报名即表示您确认您已年满18周岁,并且同意CSDN基于商务需求收集并使用您的个人信息,用于注册OpenVINO™工具套件及其课程。CSDN和英特尔会为您定制最新的科学技术和行业信息,将通过邮件或者短信的形式推送给您,您也可以随时取消订阅不再从CSDN或Intel接收此类信息。 查看更多详细信息点击CSDN“<a href="https://passport.csdn.net/service">用户服务协议</a>”,英特尔“<a href="https://www.intel.cn/content/www/cn/zh/privacy/intel-privacy-notice.html?_ga=2.83783126.1562103805.1560759984-1414337906.1552367839&elq_cid=1761146&erpm_id=7141654/privacy/us/en/">隐私声明</a>”和“<a href="https://www.intel.cn/content/www/cn/zh/legal/terms-of-use.html?_ga=2.84823001.1188745750.1560759986-1414337906.1552367839&elq_cid=1761146&erpm_id=7141654/privacy/us/en/">使用条款</a>”。</span> </p> <p> <br /> </p>
<p> 课程演示环境:<span>Ubuntu</span> </p> <p> <span> </span> </p> <p> 需要学习<span>Windows</span>系统<span>YOLOv4-tiny</span>的同学前往《<span>Windows</span>版<span>YOLOv4-tiny</span>目标检测实战:训练自己的数据集》 <span></span> </p> <p> <span> </span> </p> <p> <span style="color:#E53333;">YOLOv4-tiny</span><span style="color:#E53333;">来了!速度大幅提升!</span><span></span> </p> <p> <span> </span> </p> <p> <span>YOLOv4-tiny</span>在<span>COCO</span>上的性能可达到:<span>40.2% AP50, 371 FPS (GTX 1080 Ti)</span>。相较于<span>YOLOv3-tiny</span>,<span>AP</span>和<span>FPS</span>的性能有巨大提升。并且,<span>YOLOv4-tiny</span>的权重文件只有<span>23MB</span>,适合在移动端、嵌入式设备、边缘计算等设备上部署。<span></span> </p> <p> <span> </span> </p> <p> 本课程将手把手地教大家使用<span>labelImg</span>标注和使用<span>YOLOv4-tiny</span>训练自己的数据集。课程实战分为两个项目:单目标检测(足球目标检测)和多目标检测(足球和梅西同时检测)。<span></span> </p> <p> <span> </span> </p> <p> 本课程的<span>YOLOv4-tiny</span>使用<span>AlexAB/darknet</span>,在<span>Ubuntu</span>系统上做项目演示。包括:<span>YOLOv4-tiny</span>的网络结构、安装<span>YOLOv4-tiny</span>、标注自己的数据集、整理自己的数据集、修改配置文件、训练自己的数据集、测试训练出的网络模型、性能统计<span>(mAP</span>计算和画出<span>PR</span>曲线<span>)</span>和先验框聚类分析。 <span> </span> </p> <p> <span> </span> </p> <p> 除本课程《<span>YOLOv4-tiny</span>目标检测实战:训练自己的数据集》外,本人推出了有关<span>YOLOv4</span>目标检测的系列课程。持续关注该系列的其它视频课程,包括:<span></span> </p> <p> 《<span>YOLOv4</span>目标检测实战:训练自己的数据集》<span></span> </p> <p> 《<span>YOLOv4</span>目标检测实战:人脸口罩佩戴识别》<span></span> </p> <p> 《<span>YOLOv4</span>目标检测实战:中国交通标志识别》<span></span> </p> <p> 《<span>YOLOv4</span>目标检测:原理与源码解析》<span></span> </p> <p> <br /> </p> <p> <br /> </p> <p> <img alt="" src="https://img-bss.csdnimg.cn/202007061437441198.jpg" /> </p> <img alt="" src="https://img-bss.csdnimg.cn/202007061438066851.jpg" />
<p> 课程演示环境:Windows10  </p> <p> 需要学习<span>Ubuntus</span>系统<span>YOLOv4-tiny</span>的同学前往《<span>YOLOv4-tiny</span>目标检测实战:训练自己的数据集》 <span></span> </p> <p> <span> </span> </p> <p> <span style="color:#E53333;">YOLOv4-tiny</span><span style="color:#E53333;">来了!速度大幅提升!</span><span></span> </p> <p> <span> </span> </p> <p> <span>YOLOv4-tiny</span>在<span>COCO</span>上的性能可达到:<span>40.2% AP50, 371 FPS (GTX 1080 Ti)</span>。相较于<span>YOLOv3-tiny</span>,<span>AP</span>和<span>FPS</span>的性能有巨大提升。并且,<span>YOLOv4-tiny</span>的权重文件只有<span>23MB</span>,适合在移动端、嵌入式设备、边缘计算设备上部署。<span></span> </p> <p> <span> </span> </p> <p> 本课程将手把手地教大家使用<span>labelImg</span>标注和使用<span>YOLOv4-tiny</span>训练自己的数据集。课程实战分为两个项目:单目标检测(足球目标检测)和多目标检测(足球和梅西同时检测)。<span></span> </p> <p> <span> </span> </p> <p> 本课程的<span>YOLOv4-tiny</span>使用<span>AlexAB/darknet</span>,在<span>Windows10</span>系统上做项目演示。包括:<span>YOLOv4-tiny</span>的网络结构、安装<span>YOLOv4-tiny</span>、标注自己的数据集、整理自己的数据集、修改配置文件、训练自己的数据集、测试训练出的网络模型、性能统计<span>(mAP</span>计算<span>)</span>和先验框聚类分析。 <span> </span> </p> <p> <span> </span> </p> <p> 除本课程《<span>Windows</span>版<span>YOLOv4-tiny</span>目标检测实战:训练自己的数据集》外,本人推出了有关<span>YOLOv4</span>目标检测的系列课程。持续关注该系列的其它视频课程,包括:<span></span> </p> <p> 《<span>Windows</span>版<span>YOLOv4</span>目标检测实战:训练自己的数据集》<span></span> </p> <p> 《<span>Windows</span>版<span>YOLOv4</span>目标检测实战:人脸口罩佩戴识别》<span></span> </p> <p> 《<span>Windows</span>版<span>YOLOv4</span>目标检测实战:中国交通标志识别》<span></span> </p> <p> 《<span>Windows</span>版<span>YOLOv4</span>目标检测:原理与源码解析》<span></span> </p> <p> <span> <img alt="" src="https://img-bss.csdnimg.cn/202007061503586145.jpg" /></span> </p> <p> <span><img alt="" src="https://img-bss.csdnimg.cn/202007061504169339.jpg" /><br /> </span> </p>
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页