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


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


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

本篇是这个系列的最后一篇了,写完这篇就准备离职的相关事情了。这里讲述的是公司简称为A, 是8家面试中唯一挂掉的一家。面试分为4轮,两轮技术,后面两轮应该是BOSS+HR面。HR具有一票否决权。博主只面到2面,就只讲讲这两面面了什么吧。


###一面
和其他面试差不多,主要是先针对简历上的内容问一番,然后问点Java基础的问题。(共70mins)

  1. CMS什么情况下回发生Serial-Old的操作?
    CMS收集器无法处理浮动垃圾,可能出现“Concurrent Mode Failure“,失败后而导致另一次Full GC的产生。由于CMS并发清理阶段用户线程还在运行,伴随程序的运行自热会有新的垃圾不断产生,这一部分垃圾出现在标记过程之后,CMS无法在本次收集中处理它们,只好留待下一次GC时将其清理掉。这一部分垃圾称为“浮动垃圾”。也是由于在垃圾收集阶段用户线程还需要运行,即需要预留足够的内存空间给用户线程使用,因此CMS收集器不能像其他收集器那样等到老年代几乎完全被填满了再进行收集,需要预留一部分内存空间提供并发收集时的程序运作使用。在默认设置下,CMS收集器在老年代使用了68%的空间时就会被激活,也可以通过参数-XX:CMSInitiatingOccupancyFraction的值来提供触发百分比,以降低内存回收次数提高性能。要是CMS运行期间预留的内存无法满足程序其他线程需要,就会出现“Concurrent Mode Failure”失败,这时候虚拟机将启动后备预案:临时启用Serial Old收集器来重新进行老年代的垃圾收集,这样停顿时间就很长了。所以说参数-XX:CMSInitiatingOccupancyFraction设置的过高将会很容易导致“Concurrent Mode Failure”失败,性能反而降低。
    2.Java集合相关
    能讲述的都讲述了一遍。
    Map系:HashMap, LinkedHashMap, TreeMap,WeakHashMap
    Set系:HashSet, TreeSet, LinkedHashSet
    List系:ArrayList, LinkedList
    工具类:Collections, Arrays.
    HashMap:初始容量为16,加载因子为0.75。主要是hashCode()和equals()两个方法。Fast-Fail. HashMap在多线程环境下put会引起链路环从而造成死循环。通过链地址法来解决Hash冲突。有关Hash算法可以参考《Hash算法》。HashMap的扩容。附加:为什么加载因子在设置在0-1之间?
    LinkedHashMap:继承了HashMap,内部采用Hash表和链表实现,并且依靠着双向链表保证了迭代顺序是插入的顺序。非线程安全。LinkedHashMap中有一个protected的方法:removeEldestEntry(),实现这个方法可以产生一些耐人寻味的事情(详细请参考《Java集合框架:LinkedHashMap》)。LinkedHashMap号称是最占内存的数据结构。支持iterator()时按Entry的插入顺序来排序(但是更新不算,如果设置accessOrder属性为true, 则所有读写访问都算)。实现上是Entry上再增加属性before/after指针,插入时把自己加到Header Entry的前面去。如果所有读写访问都要排序,还要把前后Entry的before/after拼接起来以在链表中删除掉自己。附加:怎么用LinkedHashMap实现LRU?
    WeakHashMap: 对比HashMap的源码,发现WeakHashMap中的方法的实现方式基本和HashMap的一样,注意“基本”两个字,除了没有实现Cloneable和Serializable这两个标记, 最大的区别在于expungeStaleEntries()这个方法,这个是整个WeakHashMap的精髓。WeakHashMap使用弱引用作为内部数据的存储方案。如果存放在WeakHashMap中的key都存在强引用,那么WeakHashMap就会退化成HashMap。如果在系统中希望通过WeakHashMap自动清除数据,请尽量不要在系统的其他地方强引用WeakHashMap的key,否则,这些key就不会回收,WeakHashMap也就无法正常释放它们所占用的表项。附加:WeakHashMap的应用场景?WeakHashMap什么情况下会发生内存泄漏?
    TreeMap:TreeMap时用键来进行升序排序的。通过Comparable或Comparator来排序。TreeMap 是SortedMap接口的基于红黑树的实现。键不可以为null(这点和其他Map不同,如果比较器对null进行了处理,就可以为null),但是值可以为null。TreeMap对containsKey, get, put和remove操作提供了保证的log(n)的时间开销。
    Set系的内部实现都是对应的Map,无太多亮点,只是保证元素不重复。
    剩下的前面的文章也陈述过多次了,更多详细内容可以参考《Java集合框架:总结》。
    3.怎么设计hashCode?比如String的hashCode为什么乘以31这样一个素数而不是一个偶数?
    4.memcached和redis的区别?
    参考:Redis和Memcached的区别
    5.类初始化过程?
    编译生成class文件之后,就需要JVM加载。加载涉及到一个双亲委派模型,需要对双亲委派模型进行一下论述,以及为什么需要双亲委派模型(为了安全加载)。
    类在加载之后就需要涉及验证-准备-解析-初始化的操作。
    验证:目的是为了确保Class文件的字节流中包含的信息符合当前虚拟机的要求,并且不会危害虚拟机自身的安全。比如是否以魔数0xCAFEBABE开头。
    准备:正式为类变量分配内存并设置类变量初始值的阶段。譬如public static int value=123;这时候赋值value为0.
    解析:虚拟机将常量池内的符号引用转换为直接引用的过程。
    初始化:这个阶段在前面的好几篇都讲过了,一定要突出这个知识点:虚拟机规范严格规定了有且只有5种情况(JDK7)必须对类进行初始化(执行类构造器()方法):

  2. 遇到new,getstatic,putstatic,invokestatic这失调字节码指令时,如果类没有进行过初始化,则需要先触发其初始化。生成这4条指令的最常见的Java代码场景是:使用new关键字实例化对象的时候、读取或设置一个类的静态字段(被final修饰、已在编译器把结果放入常量池的静态字段除外)的时候,以及调用一个类的静态方法的时候。

  3. 使用java.lang.reflect包的方法对类进行反射调用的时候,如果类没有进行过初始化,则需要先触发其初始化。

  4. 当初始化一个类的时候,如果发现其父类还没有进行过初始化,则需要先触发其父类的初始化。

  5. 当虚拟机启动时,用户需要指定一个要执行的主类(包含main()方法的那个类),虚拟机会先初始化这个主类。

  6. 当使用jdk1.7动态语言支持时,如果一个java.lang.invoke.MethodHandle实例最后的解析结果REF_getstatic,REF_putstatic,REF_invokeStatic的方法句柄,并且这个方法句柄所对应的类没有进行初始化,则需要先出触发其初始化。

6.Keeaplived+LVS的内部实现原理?
博主简历上写用过这两个东西,所以被问原理也很正常。
Keepalived是以VRRP协议为实现基础的,主要有三个模块,分别是core,check和vrrp。core是keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式。vrrp模块是来实现VRRP协议的。工作在3,4,7层上。第三层:Keepalived会定期向服务器集群中的服务器发送一个ICMP的数据包,如果发现某台服务器的IP地址没有激活,Keepalived便报告这台服务器失效。并将它从服务器集群中提出。第四层:主要以TCP端口的状态来决定服务器工作正常与否。第7层:根据用户的设定检查服务器程序的运行是否正常,如果与用户的设定不相符,则Keepalived将把服务器从服务器群中剔除。
7.常用的JDK类?
这个问题太开放了,注意要回答自己特别熟悉的,不然就要歇逼。
8.用过哪些框架? 不知道原理的不要说。


###二面
二面喜欢抓着一个问题问到死。一共问了45mins左右。
比如HashMap怎么解决Hash冲突?hashCode,equals,链地址法来一遍。还有没有其他的解决Hash冲突的方法?那么当有很多hashCode为0的情况下怎么解决?我就喜欢写死hashCode0你怎么解决?hashCode0的有好几万个你怎么解决?我这个集合里还有好几十万个hashCode不等于0的怎么解决? 我就不想用这种方法解决你怎么解决?
类似这样的问题串问了几个。
我只能说:感谢给了这次面试机会~

###后续
A公司面试挂了还可以继续重新开始面试另一个岗位, 只要你有精力可以一直面。对比一下手中的offer: A公司的薪资并不诱人,职位也并不诱人,唯一诱人的只有这块金字招牌了。再鉴于二面的这种面试方式(这个分人的,每个面试官的面试风格不一样),也没有太多的意愿再面几次了。到此止步。

这里补充一下,基本上面试结束前会问一些问题,类似:

  1. 你最近有看什么书?
  2. 你有没有什么问题想问我们的?
  3. 你未来的规划是什么?
  4. 你为什么要寻找一份新工作?
  5. 你期望薪资是多少?(这个问题最需要好好准备下)
    最好准备下,千万不要瞎答。

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

参考资料

  1. Java集合框架:总结
  2. Hash算法
  3. Java集合框架:LinkedHashMap
  4. Redis和Memcached的区别

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

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


相关推荐
<div style="color:rgba(0,0,0,.75);"> <span style="color:#4d4d4d;"> </span> <div style="color:rgba(0,0,0,.75);"> <span style="color:#4d4d4d;"> </span> <div style="color:rgba(0,0,0,.75);"> <div style="color:rgba(0,0,0,.75);"> <span style="color:#4d4d4d;">当前课程中商城项目的实战源码是我发布在 GitHub 上的开源项目 newbee-mall (新蜂商城),目前已有 6300 多个 star,</span><span style="color:#4d4d4d;">本课程是一个 Spring Boot 技术栈的实战类课程,课程共分为 3 大部分,前面两个部分为基础环境准备和相关概念介绍,第三个部分是 Spring Boot 商城项目功能的讲解,让大家实际操作并实践上手一个大型的线上商城项目,并学习到一定的开发经验以及其中的开发技巧。<br /> 商城项目所涉及的功能结构图整理如下:<br /> </span> </div> <div style="color:rgba(0,0,0,.75);">   </div> <div style="color:rgba(0,0,0,.75);"> <p style="color:#4d4d4d;"> <img alt="modules" src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly9uZXdiZWUtbWFsbC5vc3MtY24tYmVpamluZy5hbGl5dW5jcy5jb20vcG9zdGVyL3N0b3JlL25ld2JlZS1tYWxsLXMucG5n?x-oss-process=image/format,png" /> </p> </div> <p style="color:rgba(0,0,0,.75);"> <strong><span style="color:#e53333;">课程特色</span></strong> </p> <p style="color:rgba(0,0,0,.75);">   </p> <div style="color:rgba(0,0,0,.75);">   </div> <div style="color:rgba(0,0,0,.75);"> <ul> <li> 对新手开发者十分友好,无需复杂的操作步骤,仅需 2 秒就可以启动这个完整的商城项目 </li> <li> 最终的实战项目是一个企业级别的 Spring Boot 大型项目,对于各个阶段的 Java 开发者都是极佳的选择 </li> <li> 实践项目页面美观且实用,交互效果完美 </li> <li> 教程详细开发教程详细完整、文档资源齐全 </li> <li> 代码+讲解+演示网站全方位保证,向 Hello World 教程说拜拜 </li> <li> 技术栈新颖且知识点丰富,学习后可以提升大家对于知识的理解和掌握,可以进一步提升你的市场竞争力 </li> </ul> </div> <p style="color:rgba(0,0,0,.75);">   </p> <p style="color:rgba(0,0,0,.75);"> <span style="color:#e53333;">课程预览</span> </p> <p style="color:rgba(0,0,0,.75);">   </p> <div style="color:rgba(0,0,0,.75);">   </div> <div style="color:rgba(0,0,0,.75);"> <p style="color:#4d4d4d;"> 以下为商城项目的页面和功能展示,分别为: </p> </div> <div style="color:rgba(0,0,0,.75);"> <ul> <li> 商城首页 1<br /> <img alt="" src="https://img-bss.csdnimg.cn/202103050347585499.gif" /> </li> <li> 商城首页 2<br /> <img alt="" src="https://img-bss.csdn.net/202005181054413605.png" /> </li> <li>   </li> <li> 购物车<br /> <img alt="cart" src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly9uZXdiZWUtbWFsbC5vc3MtY24tYmVpamluZy5hbGl5dW5jcy5jb20vcG9zdGVyL3Byb2R1Y3QvY2FydC5wbmc?x-oss-process=image/format,png" /> </li> <li> 订单结算<br /> <img alt="settle" src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly9uZXdiZWUtbWFsbC5vc3MtY24tYmVpamluZy5hbGl5dW5jcy5jb20vcG9zdGVyL3Byb2R1Y3Qvc2V0dGxlLnBuZw?x-oss-process=image/format,png" /> </li> <li> 订单列表<br /> <img alt="orders" src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly9uZXdiZWUtbWFsbC5vc3MtY24tYmVpamluZy5hbGl5dW5jcy5jb20vcG9zdGVyL3Byb2R1Y3Qvb3JkZXJzLnBuZw?x-oss-process=image/format,png" /> </li> <li> 支付页面<br /> <img alt="" src="https://img-bss.csdn.net/201909280301493716.jpg" /> </li> <li> 后台管理系统登录页<br /> <img alt="login" src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly9uZXdiZWUtbWFsbC5vc3MtY24tYmVpamluZy5hbGl5dW5jcy5jb20vcG9zdGVyL3Byb2R1Y3QvbWFuYWdlLWxvZ2luLnBuZw?x-oss-process=image/format,png" /> </li> <li> 商品管理<br /> <img alt="goods" src="https://imgconvert.csdnimg.cn/aHR0cHM6Ly9uZXdiZWUtbWFsbC5vc3MtY24tYmVpamluZy5hbGl5dW5jcy5jb20vcG9zdGVyL3Byb2R1Y3QvbWFuYWdlLWdvb2RzLnBuZw?x-oss-process=image/format,png" /> </li> <li> 商品编辑<br /> <img alt="" src="https://img-bss.csdnimg.cn/202103050348242799.png" /> </li> </ul> </div> </div> </div> </div>
<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>
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页