网易美团头条百度面经|掘金技术征文

2,118 阅读16分钟
原文链接: www.jianshu.com

转自: www.nowcoder.com/discuss/484…

首先自我介绍一下,楼主南京渣硕一枚,在意涵的意志下,秋招主要投递JAVA后台岗位,面过以下公司:网易+美团+头条+百度+华为+中兴,拿下了网易和中兴提前批offer,华为依旧泡池子,美团四面挂,头条三面挂,百度今天下午二面没去了。其他一些公司收到了面试,没去参加了。

暑期在上海某互联网大数据实习一段时间,后因个人兴趣问题不在大数据这块和提前准备秋招的想法,干了一个月跑路。
最后,猪场是最想去的,没有之一。

网易三面:(内推)


网易整个过程来说,算对得起自己长期的准备。面试之前刷了一些面试大佬的面经,特此感谢,挺有用的。

一面:
一上来,面试官没让我自我介绍,直接开始问题目。

  • java基本类型和占用字节数,回答八种,也特意提到boolean类型,1或者4个字节,为什么?
  • 阅读过哪些集合源码?重点提了hashmap的哈希算法
  • Innodb的索引实现
  • jdk1.8和jdk1.9的新特性。听到这个楼主一脸懵逼,1.9根本不会,只能把1.8的一些新特性结合具体例子跟他讲了一下,比较满意。
  • JVM内存结构
  • 解释下装饰器模式,回答不会,以前这个的确没准备
  • 动态代理原理和实现,画出代理模式UML,我说不会画,然后面试官挺好的,说你是非计算机专业的,那就不用画了,那就在纸上写一个过程吧
    画完以后,看着手上的表,说20分钟了,到点了,于是结束。出去等hr通知二面。

二面:
楼主项目做的是一个秒杀系统设计,面试官问的偏项目多,面试官胖胖的,挺可爱,虽然不爱说话。

  • 谈谈你对redis的理解。提到一个redis热启动,没听过,一脸懵逼。
  • 秒杀过程中怎么保证redis缓存和数据库的一致性?
  • 多个用户请求同时第一次访问空的redis,怎么样不使redis崩溃?
  • SpringMVC 有几个IOC容器?由什么决定?有点懵,特意反复跟面试官确认这个问题,在IOC概念饶了一圈又一圈,回答不好。
  • 动态代理实现,说一下过程。

不同的面试官,但是也看了一下表,说20分钟到点了,心里一慌,感觉GG,对我不感兴趣。

hr面:
这是我面过的最刁钻的hr面了,男,全程一直看我的眼睛,下了一些套。边自我介绍,边翻我的简历。全程40分钟,前两轮技术面总和。

  • 兴趣爱好(回答爬山游泳)
  • 家庭情况,女票背景,交流生背景
  • 你觉得父母对你最有的品质是什么?举个例子,我这里吹大了
  • 为什么报互联网产品这个hc?你了解哪些产品?回答说不太清楚,想扇自己几个耳光
  • 非计算机专业为啥来搞开发?
  • 为什么选择网易,其他公司为什么不考虑?吹过了,被hr怼,说我大空
  • 选择工作时,你考虑哪些因素,给地点薪资技术等因素排名
  • 实习收获最大的,举个case?平时怎么解决问题的?
  • 从小到大最坚持的一件事,我回答学习,是的,我是傻逼
  • 兴趣爱好,重复一遍(此处有套,看我是不是说假话),你说爬山,多大频率,去哪儿爬
  • 现在面试哪些公?offer收割情况?
  • 你有什么问题要问我的么?

网易面试总结:
9.2拿到内推offer,当时心情五味杂陈,晚上彻夜难眠。谈了多年的女票也在杭州读研,自己的努力也有了收获,于是昨天决定去猪场养猪。
网易刷了一些面经,结合自己的面试经历来看。技术上面,一轮基本偏JDK基础,如果基础不好,绝对过不了。然后很喜欢问Spring类框架,一些特性和源码也问的挺深,最后就是设计模式了,网络方面也有些设计。算法撸得比较少,就算撸也偏简单的那种。

美团四面:(正式秋招)


一面:(50分钟)

  • 你对集合那么熟悉,看过哪些源码?HashMap,HashTable,ConcurrentHashMap等等
  • 讲到ArrayList,讲一下初始长度,扩容机制。
  • 说一下ArrayList和LinkedList区别,然后讲了大量数据下在LinkedList前1/10处插入效率高,在ArrayList中部以及后部插入效率高,解释原因。
    楼主故意引线程安全的CopyOnWriteArrayList,然后把源码吹了一下。
  • 来,给你看例子:
private
HashMap<Integer,Integer> map =
new
HashMap<>();

线程一:

map.put(1,2);  

线程二:

map.put(1,3);

两个线程去执行一段代码

if(map.get(1) == 2) 

输出...

if(map.get(1) == 3) 

输出..

问线程一和线程二执行完上述完会出现什么问题?
我回答说可能出现覆盖,跟执行顺序有关系,怎么解决,我说map用锁修饰?可以,有没有其他的,再想一想,想一想??
然后想了好久,没想出来,他说ThreadLcoal你没听过么?我豁然开朗,于是开始拼命解释原理实现、可能导致的内存泄露问题,挽救路线完成。
来,做些题吧。心慌,看他从桌边的一坨纸中抽出一张,两个题
(1)两张表,考连接关系,写SQL语句,楼主把sum写错成了count,尴尬,SQL太长肯定错的,可是面试官没细看了,暗喜。
(2)N个数中求最小的M个数,用快排的partion思想,时间复杂度O(n),跟面试官讲解了三遍,他还是没听懂,说回头再看。。。。

二面:
疯狂对着我的项目进行提问。有点尴尬

  • 具体的秒杀细节怎么做的?秒杀的核心技术在哪儿?你怎么保证的?
  • 超卖怎么解决?讲一讲spring的事务特性
  • 来,谈一谈你的redis理解,为什么使用prostuff,不用传统的序列化?
  • 来,继续撸算法吧。给一个string类型数字字符串,比如“1026”,范围0000-9999,打印繁体读法string-----"壹仟零贰什陆”
  • 看你对多并发熟悉是吧,来,多个线程同时去访问同一个代码块,我想知道最后一个线程什么时候执行完,怎么做。答CountDownLatch。

三面:
之前同学都是当天只有二面,第二天再继续面,我懵逼了,刚出来了又被拉进去面,我说我想去上个厕所,面试官微笑,两分钟解决。
进去面试官在电脑不停敲字,说,来给你出一道算法吧,很简单,很容易,我心一暖。

  • 定义两个字符串相等的规则:(1)大小写不敏感;(2)s1中的字符中s2中必须有;(3)s2中的字符中s1中必须有。判断两个字符串是否相等。
    很快写出来了,没借助空间,看完以后,让我用一个map实现,O(N)的时间复杂度,balabala。。。
  • 你实习的这个部门,主要负责哪一块?你自己做的哪一块?详细介绍一下?
  • 为什么不愿意搞大数据,转而搞java开发?这一块回答的很差,自己傻逼了一回,没事,后面有继续傻逼的
    以后想留哪儿呀?我说南京和上海都可以,反过来问我,南京纯互联网少吧,特意提了下途牛,我吹了一波新美大较途牛的优势
  • 精彩的来了,他问我:那你刚刚为什么说南京也可以?我..我...我......开始挽救,挽救失败。
  • 有没有问我的?此处最傻逼:
    我说我有时候用美团app发现输入具体的位置时,周围并没有显示我想要找到的店。问完这个就超级后悔了。
    开始尬聊模式,我不停在解释不该提这种问题,并没有什么意思,面试官一直说没关系,不是我们部门做的,可能他们有bug或者没有考虑到的。。

hr面:
又是一个男hr,全程微笑,呵呵哒。

  • 来,小伙子做个自我介绍。
  • 目前手头拿到的哪些offer。
  • 手头的不错呀,为什么选择来上海?你知道新美大现在市值么?
  • 你最大的缺点和优点?我回答说可能有点急性子,受不了周围的人拖节奏。
  • 两个问题也没回答好,感觉贼难受:
    (1)你的同事就是那种很拖的人,你怎么解决?不要说沟通,沟通无效
    (2)你的老大就是那种很拖的人,你怎么解决?不要说沟通,沟通无效

昨晚出了结果,周围进hr的好多都收到了offer,心里有点不开森,的确情商有点低,仍需学习。但是要好的朋友过了,很开心。

头条三面:(正式秋招)


一面:(26分钟)

  • 写了单例
  • 具体解释了volatile禁止指令排序机制和对象new过程。
  • 数组最长递减子序列,写了个动态规划,比较简单。
  • 数据库事务隔离级别进程通信方式

一面就26分钟,答得还可以,小哥让我等一等,后面继续二面,接着视频面。

二面:(60分钟)

  • 秒杀商品的库存放在哪里
  • 如何保证redis和DB的一致性多个线程同时访问为空的redis,怎么解决(这两个问题跟网易一模一样)
  • 非递减序列找到第一个大于x的位置,时间复杂度要求lgN(二分)
  • 一个完全由数字组成的字符串,求字符序列子串可以被k整除的个数,要求O(N),有点难度,没A全
  • cookie和session区别get和post区别
  • 网址中输入URL,一系列过程
  • 状态码,知道的讲一下
  • 一个CPU单核,同时只能处理一个指令,是或否?一个CPU 8核,最多同时只能处理8条指令,是或否?

最后,小哥问我JAVA虚拟机那一块知识,他不懂,最近面好多人都是搞JAVA的,临时学习一下。于是我开始背课文了。

二面一个小时,晚上接到hr电话,说二面过了,欣喜万分。

三面(80分钟)

  • 锁在操作系统层面实现原理(回答那么多,其实面试官的意思是想让我回答原子性三个字。。。)
  • 多线程和多进程的使用场景CAS原理,写了个底层源码
  • mac地址和ip地址,瞎扯了写
  • IOS7层变成为什么变成5层,为什么要分层?
  • 给定一个数组(全为0~9的数字),可能有重复,挑出数字自由组合,给定数k,找最小的大于k的数(回溯),没撸完,这个是败笔,撸了半个小时,跟面试官讨论了好久,面试官也提示我用回溯,可是我太菜不会呀。

面完半个小时后,hr来电话说不好意思,GG,不过收到网易通过短信,于是无所谓。

百度


一面:(今天下午本来2:00二面,后面心想对上海不是很感冒,所以放弃了)

百度的小哥真的超级好的。在酒店的一个房间,我刚刚推开门,就站起来迎接我,微笑,很舒服。下面面经。

  • 自我介绍。
  • 你说你熟悉Java基础,那讲一讲int与Integer的区别。我特意解释了拆箱装箱、Integer的一些源码、泛型的应用。
  • JVM回收机制,从判断对象死亡、GC Roots、Stop the World、回收算法优缺点讲起,提到引用计数弊端。
  • JVM中给对象赋值为null,一定会被回收么?举个case,讲到了内存泄露。
  • 进程中文件写怎么保证安全?我操作系统那块不熟,就提了JAVA中的ReadWritelock底层实现。
  • 好了,来撸个算法。找到字符串中第一个出现次数只有一次的字母,比如abcdab,输出c,两种方法
  • 海量数据题两个:
    (1)两个文件,分别存放50亿个URL,每个URL60个字节,内存4G,找两个文件并集。
    (2)一个文件,存放45亿已排好序的32位int整数,找出一个出现次数大于一次的整数,找出一个就行。经过提示回答出来了。
  • 智力题:一个袋子100个球,每次只能取1-5个,甲乙两个人抽,谁抽到最后一个谁赢,甲先抽,怎么保证甲赢。
  • 三次握手中为什么不是两次?为什么不是四次?
  • 网站输入一网址过程,具体讲一下DNS解析过程。
  • get和post区别,post一定是安全的么?怎么解决登录信息被截取?
  • 淘宝的登录就是get方式,怎么保证安全?

再次提一下,百度的小哥人真的很好,走的时候特意站起来送我走,特别感谢。不去二面现在不后悔。

华为二面(优招):


一面
之前问周围同学的都是项目,之前在上海实习回奔到南京,于是也就没怎么准备基础,项目准备了一些。然而,事实相反。

  • HashMap和Hashtable区别,我特意提了哈希算法不一样,各自的算法原理,提问:为什么不一样?Hashtable为什么不用HashMap的?
  • HashMap1.8优化在哪些方面?
  • 写了个单例模式。好久没写了有点忘了,双重锁检查写错了两个地方,被指出来了,尴尬
  • 写了个二分查找。面试官问我,你确定数组就是排序的么(我心里无语),数组非空判断不用(我服)?
  • 用过哪些锁呀?synchronized和reentrantLock区别
  • 讲一讲reentrantLock底层啥样子,实现api
  • 楼主嘴贱,扯了一下ThreadLocal,疯狂问这个,底层实现我还可以讲一下,问一下使用背景,怎么使用?有点懵,忘了
  • CopyOnWriteArrayList底层实现
  • JVM的回收算法,当我背到一半后,打断了,说我知道你是为了面试背背而已,过几天忘了
  • major gc和full gc的区别,我脑抽,说反了,被鄙视了
  • 聊了这么久虚拟机,你调过优吗?怎么调的。。。一脸懵逼

二面:(20分钟)
一面基础没有回答好,二面面试官对我也不感兴趣的样子。

  • 自我介绍后,拿着我的简历,说这上面有三个项目,来,挑一个你觉得最牛逼的项目讲一讲
    画画具体结构和功能模块。我在画时他在电脑端不停打字,然后基本没看我写的。
  • 怎么看待华为?
  • 你选择华为的理由是啥?最看重华为的哪一点?
  • 你有什么想问我的?
  • 面完以后,心里很虚。前一天周围有同学在二面面试官直接谈薪资的那种。我觉得我可能遇到了一个假的面试官,java是真心的很懂啊,而且问的都挺深,这件事告诉我别想钻空子,该来的还是要来的,那就要在来之前把所有的裤子穿好。

ps:华为今年有点厉害,面试结果都在池子里泡了两个月多了,啥时候给个准信?

中兴两面(提前批):


参加的云计算提前批,感觉面试组织的有点乱,我是先进行的二面(两个技术官),再进行的一面。加起来20分钟。
技术的问的比较少,也就介绍一下项目,然后对加班的看法。有两个奇葩问题:
(1)如果华为和中兴同时给你发offer了,你愿意去哪家?
pa:周围有同学被问,网易和中兴,阿里和兴,你选哪家?为什么?考验自己说假话的能力到了,不要舔的过分,不要真的深刻
(2)如果项目中某个接口模块是另一个部门设计的,出现了问题,而另一个部门因为事情有轻重没有时间解决,你怎么解决?
后面部门老大说过了,然后全程电话介绍他们的产品,我加起来说话的时候不超过一分钟。加了hr微信。

最后总结一下楼主学习JAVA的一些技术历程,纯属个人拙见,不同看法求轻拍~~

  • JAVA语言基础:
    java基本类型、引用类型、多态底层、泛型底层、反射机制等
    常见的集合类1.7/1.8版本源码
    推荐书籍:Java编程思想,Effective JAVA(深)

  • 多线程并发编程:
    concurrent包源码必看,有以下几点:
    线程池,阻塞队列,非阻塞队列
    各种锁的使用,优化
    原子类Atomic
    并发安全容器
    推荐书籍:Java高并发程序设计(浅),Java并发编程实战(深)

  • Java虚拟机JVM:
    Java内存区域,OOM
    垃圾回收算法,垃圾收集器
    类加载机制,类加载器
    虚拟机字节码执行引擎(重写重载底层等)
    Java内存模型JMM
    推荐书籍:深入了解Java虚拟机

  • 数据结构与算法:
    常见的栈、堆、链表、二叉树、B/B+树、堆(图问的比较少)
    常见的排序算法:冒泡、选择、插入、快排、堆排序、归并(后三个核心函数熟练)(希尔、拓扑基本不问),最坏最差情况
    推荐书籍:大话数据结构(语言不是问题)
    刷题:剑指offer强烈推荐(面试好多原题),左程云算法牛人的书--程序员代码面试指南,有时间可以去刷leetcode的题,hard题略过

  • web框架推荐学习spring,这个网易阿里美团都问的贼多,话说你今天看了spring源码了吗?

  • 设计模式那么多种,推荐熟悉以下几种就可以:单例、代理模式、工厂(三种)、适配器、装饰器、策略、观察者等

  • TCP/IP和操作系统楼主不精通,后续还需要深入了解。

最后给个建议,遇到问题不懂的知识点多去找找牛逼的博客,看完了自己一定要吸收,写在博客上面,后面面试拿出来吹吹比还是很有用的~~

秋招不易,一生一次,大家都一定能拿到自己最想要的大大的offer,一起加油~!!!~~!!!