心安

记上海某互联网公司的一次面经

字数统计: 1.7k阅读时长: 5 min
2019/03/25 Share

今天笔者去 食亨(上海)科技服务有限公司面试,应群里小伙伴要求,决定写一下此次的面经。

公司简介

首先我在去之前是有在招聘网站看到这家公司的招聘的,待遇什么都挺不错。后面有朋友说帮我推荐一下,然后我就仔细查了查,发现这家公司2017年创建,截止到今天,短短两年时间发展到现在大概500人,而且据说市值20亿,瞬间就让我觉得这家公司很厉害。面试前也精心准备了很多。然后听朋友说这家待遇也很不错,17薪,然后还在扩招团队,挖了美团的大神之类的巴拉巴拉,所以应该是很不错的。废话不多说,下面主要看一下面试的题目吧。

题目

JVM相关

  • 首先,第一个问题就是介绍一下JVM的内存模型。我顺带还介绍了一下内存区域,免得他问了。

    内存模型主要就是主内存与工作内存之间一下值传递,八种操作(read、load、use、assign、store、write、lock、unlock),然后引发的原子性、有序性、可见性等等问题,如果你自信,可以提一下volatile关键字以及Happens-Before原则等等。

    至于内存区域嘛,就是堆、栈、方法区、本地方法栈、程序计数器,大概说一下,这个应该大家都知道,很基础的问题,然后你可以顺便提一些别的,比如垃圾收集、内存溢出等等问题,引导面试官往你了解的领域去问。比如说你很懂垃圾收集,那么你就可以在堆和方法区的时候说一下堆是垃圾回收的主要区域,方法区永久带之类的巴拉巴拉。

  • 第二个问题如果我没记错应该问的是垃圾回收机制

    这个问题嘛,首先有什么算法来判断对象可回收,引用计数法和可达性分析算法,具体细节自行查阅资料。然后还可以说一下四种引用,强弱软虚。接下来就是手机算法,介绍算法思想和算法优劣。标记-清楚、复制算法、标记-整理、分代收集,其中分代算法应该算是比较重要的。如果牛逼还可以介绍垃圾收集器以及优劣性。

  • 类加载机制

    这个问题的答案,在我的这篇博客里面 深入理解Java虚拟机(二) – 虚拟机类加载机制,更多细节问题自己看看书。

  • 双亲委派模型以及其作用

    这个介绍一下类加载器以及委派机制,然后举个例子说明一下,如果没有这个委派模型的话会怎么样。

数据结构、并发和线程

  • HashMap数据结构

    这次面试让我很惊讶的就是并没有问我很深入的数据结构,只是问了一下简单的。大概说了一下,数组+链表+红黑树,以及何时树化等等。然后问我红黑树可以无限增长吗,不知道。。问我线程安全吗,不安全,有安全的吗,HashTable和CurrentHashMap,简单介绍一下CurrentHashMap,大概说了一下分段锁,然后顺带提到了ReentrantLock(分段锁用的这个锁),然后我大概说了一下,然后问我这个锁和synchronized关键字的区别等等问题。很遗憾的是可能因为前面基础问题答的蛮好的,所以没有具体问我synchronized相关的偏向锁、轻量级锁、重量级锁啥的,不然我就又能一顿吹逼。其实这个还是蛮重要的,大家还是去了解一下。

  • J.U.C

    所谓J.U.C其实就是 java.util.current包下的API, 这个其实我也不太熟悉,我只是大概说了说Atomic包的一些东西以及CAS。这个包真的很重要,并发包我个人感觉属于比较难的内容,也许是因为我没时间去研究,正所谓难者不会,会者不难嘛。所以还是希望各位好好研究一下。

  • 线程

    虽然没问线程的几种状态,NEW,Runnable、Waiting、Timed Waiting、Terminated,但是这个还是蛮重要的。然后就是线程池相关,几种线程池,分别介绍。然后wait方法和sleep方法的区别之类的也没问,但是也是常问的点。

框架相关

  • spring核心

    IOC和AOP,接着就是各种细节问,不多说。

  • bean生命周期

    百度or google

  • bean作用域

    同上。

  • JDK代理和Cglib代理

    同上

mysql

  • 索引相关

    其他的不记得了,只记得问了索引,然后说了一下b树、b+树,最好知道实现原理。

中间件、分布式、集群相关

  • spring cloud和dubbo的调用方式及区别
  • rpc实现原理,还问了AIO/NIO,但是我不太懂,就直接pass了。
  • rabbitmq实现原理
  • redis原理数据类型等等问题,虽然没问缓存穿透和雪崩,但是还是要了解,因为常问
  • 分布式锁(zk和redis实现的区别)

后话

其他的一些细节确实不太记得了,大概也就这些,但是内容真的还是蛮多的。然后面试官给我的建议是他说你基础很不错,但是经验确实太少了(笔者18届毕业生,实际工作经验不到一年),他说建议我去一些大厂尝试尝试,小公司更看重项目经验,而大厂有完善的体系支持我去学习,更喜欢我这种基础好的。然后我就懂了,我太年轻,不要我,但是我不死心还是问了句,贵公司不算大厂吗?他说虽然人数上算是大厂,但是研发部门也就几十个人,所以算不上大厂。ok,那就明了了,确实看不上我。难受的一批。

然后再比比几句关于面试的内容,希望年轻的朋友还是好好掌握上面那些很基础的东西,基础真的很重要。我看到很多年轻的朋友把太多的精力放在前端框架、后端框架、各种分布式相关的中间件的东西上,我觉得没必要那么着急,打好基础,这些东西真的不难,希望大家还是把精力更多放在基础的东西上面,然后再拔高。但是如果你两年以上的工作经验,那么上面所说的问题你真的必须得掌握,不然想进大厂真的挺难的。ok,分享就到这儿,感谢各位看到这里。

原文作者:XinAnzzZ

原文链接:https://www.yuhangma.com/2019/java/2019-03-25-about-shiheng-interview/

发表日期:March 25th 2019, 12:00:00 am

更新日期:September 26th 2019, 10:46:42 am

版权声明:(转载本站文章请注明作者和出处 心 安 – XinAnzzZ ,请勿用于任何商业用途)

CATALOG
  1. 1. 公司简介
  2. 2. 题目
    1. 2.1. JVM相关
    2. 2.2. 数据结构、并发和线程
    3. 2.3. 框架相关
    4. 2.4. mysql
    5. 2.5. 中间件、分布式、集群相关
  3. 3. 后话