查看原文
其他

程序媛学霸姐的面试心经,值得你拥有(文末有最新内推岗位)

前语:不要为了读文章而读文章,一定要带着问题来读文章,勤思考。在此,建议大家为本公众号加“星标”。如文章写得好,望大家阅读后在右下边“在看”处点个赞,以示鼓励!

作者:只爱羽毛球的程序媛

来源:http://t.cn/EaX5Wrj


终于要开始写博客了,立志做一枚羽毛球界最会写代码的妹纸,写技术博客是必不可少的,所以先拿最近生活的中心——找实习开启我的博客之旅吧。我是9月初开始有找实习的念头,目标定位互联网公司Java后台研发,复习了5周,10月份国庆节后开始全力进行面试。由于现在是秋招阶段,所以找实习只能在网上找些途径投简历,再找一些师兄师姐内推。总结一下前后共面了5家公司,4家拿到offer,1家已挂。


# 百度(上海)大数据研发(已挂)


比我计划中预期的面试早到了2个礼拜,看到我们院研究生群不知道哪位学长发了百度的实习生内推消息,晚上抱着试一试的态度投了简历,没想到第二天一早就接到了电话面试。


一面技术面(20分钟)


1、自我介绍、项目介绍 

面试的匆忙,连自我介绍都没准备,随口介绍了几句。项目着重讲了一个,其实也没准备好,80%在复述简历,简直傻逼。

2、jre和jdk区别 

3、抽象类和接口区别 

4、数据库查询top10(没答出) 

5、数据库引擎有哪些,有什么区别 

6、join、inner join、outer join的区别(没答出) 

7、用Java定义一颗二叉树(这也太简单了不像一个题,感觉我可能没懂他的意思)


试水的面试总结


这真的完全就是一次试水的面试啊,题目之简单回答之傻逼,面试题跟我的复习方向有点出入,两道简单的数据库题目居然忘记了,挂是肯定的。不过好在让我查漏补缺,知道自己后面肯定要着重复习一下数据库了。还要好好准备一下自我介绍和项目介绍,总不能照着念简历呀。


# 58同城Java研发(拿到offer)


这是我在拉勾网上投的简历,十一前投的,第二天就通知简历通过,并跟我进行了沟通,预约了十一之后两个工作日内面试。


技术电面30分钟+HR面10分钟


技术面面的很广,主要是Java基础知识,这方面我把握很大,所以基本面下来就知道自己肯定过了。一些很公共的面试题我在下面美团面经中再详细写,写几个我觉得比较不错的题吧。

1、数据库索引实现为什么用B+树不用Hash表 

2、多路复用IO除了NIO,在操作系统级别上是怎么实现的 

3、java NIO有哪些不好的地方 

还有一道很基础但是我当时回答错了的题:

4、HashMap扩容 

当map中的entry数大于容量*负载因子时,进行rehash操作,map容量翻倍


有点小信心了继续加油


因为问的问题都比较符合我的胃口,所以跟面试官后面处于探讨问题的节奏,通过面试肯定就没有问题了。不过这一轮面的70%是Java基础,还有30%是我之前查漏补缺到的数据库,所以这些都在我的掌握之中啦。这只能说明这两块掌握的还可以,其他的都没面到,所以不能松懈,继续努力。一面技术面之后HR就通知我过了,感觉比想象中容易很多啊。


# 大众点评Java研发(拿到offer)


实验室有一个师姐去大众点评实习过,回来给我各种种草,所以我一直好想去。之前找一个师姐内推,可是那边说不缺实习生了不招,后来我自己在实习僧上投简历,没想到获得了面试的机会。10月21日下午收到技术一面,紧接着晚上二面,节奏之快是我喜欢的。


技术一面20分钟


1、介绍项目 

我主要介绍了百搭家居,从产品创意到系统设计、各个模块实现,面试官表扬说创意挺好的。在这里顺便推广一下我们团队的作品——百搭家居

2、javascript和java的区别 

3、项目中有没有什么地方用到过事务,说一说事务 

4、什么时候用视图 

这个问题我当时回答的并不好,只说到在进行多表连接查询的时候可以建立视图方便查询,没说出主要的点:可以用视图来进行权限管理,使用视图可以隐藏底层表结构,更安全。

5、如果你做的项目并发量很大,你会怎么做?

我从客户端建立连接、数据库设计、sql优化几个方面讲的 

6、MD5加密用过没,(我回答说没用过)如果你要用,可能会用在什么地方 

真的不太了解加密这方面的东西,只能当场想了,我说了几点:get方法不安全,可以加密,cookie存在本地,也可以加密,还可以做验证,判断摘要然后验证订单是否被篡改等。


技术二面30分钟+HR面10分钟


一面后一个小时hr通知一面过了,让我等二面,没想到晚上二面就来了,效率很高。我猜二面的面试官应该是技术转HR,前30分钟面技术,后10分钟问性格与生活。面试官一上来直接说我刚刚看过你们的百搭家居产品了,很不错,各种夸奖,我瞬间自信爆棚呀(这是第一个面试官看过我作品的,侧面说明大众点评真的很闲啊~~)


技术问题


1、先让我给他讲一个我做过的项目,有哪些模块,怎么设计的等等,我就挑了他最感兴趣的百搭家居讲了一下。


2、GC原理 


我先说了哪些对象需要被GC,然后讲了一下GC的几种方法,最后说了HotSpot里面的GC算法。


3、数据库事务。


4、各种集合类以及区别,实现原理。


5、重载和重写区别 


还有一些其他的技术点,我记不太清了。


其他问题


1、以后打不打算在上海发展啊 

2、有什么优缺点 

3、有没有男朋友,问到这个问题还跟我开玩笑,因为前面聊得比较开心,大家都很放松。

4、最后问我可以什么时候过去实习


最后面试官还让我加了他微信,说有什么问题可以在微信上联系他。大众点评的面试官好nice。学姐说的工作很轻松,应该是真的很轻松呀。


技术三面15分钟


不知道为啥hr面以后还有技术面,顺序好乱 

1、介绍项目,以及项目中遇到的问题(一如既往说数据库优化,哈哈) 

2、一个长度100的整数型数组,求子集元素乘积的最大值p(很简单,直接说一下流程就行了) 

3、9个外观相同的球,其中有一个比其他8个轻,用一个无砝码的天平秤2次称出来(分成3,3,3;再分成1,1,1)

4、升级版:9个外观相同的球,其中有一个跟其他的不一样重量,用一个无砝码的天平秤3次称出来(在上面一题上进行拓展,在分成3,3,3的时候秤两次,完成两件事:确定不一样的在哪个三堆中,确定不一样的是更重还是更轻。再分成1、1、1)

5、再升级版:把4中的9个球改为10个球(其实跟上面是一样的解题思路啦,很简单)


总有复习不到位的地方继续努力


面试的时候一定不要慌,遇到不会的没用过的很正常(比如我一面中接二连三的没用过,视图,MD5加密),不会没关系,把自己的理解好好说清楚就行了。


# 美团大数据部门Java研发(拿到offer)


美团的实习生面试很严很正规,一共有四面技术面,我重点记录了问答,怕这篇博文太长,所以单独放在了美团Java实习面试经历(拿到Offer)这篇博客中。


# 网易云信Java研发(拿到offer)


网易是实验室师兄找朋友内推投的简历。之前也找另一个学姐内推,所以我也不知道自己是从哪个渠道获得的面试机会。


网易一面电面20分钟


10月26日,下午5点一面,问了Spring、设计模式、实现线程安全的方式、JVM内存管理。有两个问题答得不好,这里重点记录一下。


1、什么对象会放到老年代?

我回答的是经历过若干次GC都还存活的对象会放到老年代,然后在新生代GC的时候一个Survivor区放不下存活的对象后,这时候就会用老年代来进行担保,也就是这些对象会放到老年代里去。但这种情况发生并不多,因为新生代中95%以上的对象都是“朝生暮死”,而Eden区和两个Survivor区的比例是8:1:1。然后他就一直追问就只有这两种情况会使用到老年代吗?我说应该是把,我只了解这两种情况。后面面试完了我查了一下,还有一些大对象会直接放到老年代,所谓大对象就是需要分配一块连续的大内存空间的,比如长度很长的数组啊。


2、ArrayList和数组的区别 

我简单说了一下,他就开始刨根问底的问我arrayList是怎么扩容的,capcity默认是10,动态增长每次增加到1.5倍,然后每次add操作时都会检查add之后size会不会超过capcity,会调用ensureCapacity方法保证容量足够。但是这个答案他好像并不太满意啊。后面又问了我可不可以主动让arrayList扩容,我说不可以,(当时我也不确定),后来面完看了一下源代码,是可以的呀!!


网易二面视频面试30分钟


1、Cookie和Session的区别,Cookie可以在哪里写,里面可以放些什么 

2、127.0.0.1:8080/index.html与goodstudy.com:8080/index.html请求,Cookie是否一样 

3、有没有用过redis和memcache 

4、讲一下Hibernate以及延迟加载 

5、从ResultSet中获取的数据怎么封装成对象 

6、在线写代码:写一个单例模式,再让我加上常用属性。是否安全。(这里我写的是用静态内部类实现的单例模式,讲到是否可以在外部类直接调用单例类的构造方法的时候,我扩充讲了一下反射机制)


阶段总结——真正的干货在这里


知识都是积累的过程,面试也是,面着面着就找到了面试的门道。其实我还面了爱奇艺写高并发接口的部门,后来他们通知我去北京面试,我拒绝了然后就没有然后了。现在回过头来看最早参加的百度面试,真的图样图森破!其实实习生面试都不难,下面真正的正能量鸡汤干货要来了。


# 准备简历


简历一定要好好准备,写之前认真想好写准备写哪几个部分,重点突出哪几部分。以我的简历讲一下吧。


教育背景:其实找实习这块还是蛮重要的,最好把成绩排名写进去,面试官会考察你的学习能力如何。


专业技能:不要单纯简单罗列自己会哪些,一定需要有重点突出,比如在我重点突出的是我对多线程和并发这一块的使用和理解。大家可以看到在我的面经中有很多这方面的问题,既然你都在简历中强调了这是你的优势,那一定要做足功课让它真正成为你的优势哦。所以复习的时候一定要尽可能的理解到你会的最深层次。(其实在简历上突出重点是最划算的,相当于告诉面试官你就问我这个吧,可以加深难度问,我都会。总比面试官不知道问你什么,猜你会什么然后再试探性的问你,你自己心里又没谱好太多了)

项目经验:不同的项目有不同的侧重点,每个项目都分为项目描述和我的职责。内容要充实。我一共写了三个项目,每个侧重点不同,一个侧重Java Web开发、设计与整体架构。一个侧重数据库优化,一个侧重产品创意团队协作。对于每个项目自己的侧重点,也有事先有所准备。


学术研究:主要讲了一下自己发表的论文,这一块如果跟找的职位没有太多关系简单说一下就好。


另外,之前学姐内推蘑菇街简历都没过,有点受打击,后面又请学姐帮忙修改了,增加了一个模块:获奖经历:开始觉得这个有点鸡肋,有能力就行,获奖就别写了,毕竟我又没有拿过ACM奖项。后来发现好像加了这个模块简历通过率确实高了一些。


细节:格式排版一定要美观,专业术语要书写规范(注意大小写)。


重要的:简历写好一定要多给师兄师姐看,让更多的人帮你提提意见。


# 复习重点


每个人目标不一样,所以复习重点也不一样。我主要是Java后台开发的复习,所以我下面几个方面进行复习的。我复习基本放在9月份和国庆假期一共五周时间,除了算法每天都会做以外,其余的都是按照顺序来的。当然里面有很多知识的交集点,我会把他们联系在一起理解。


1、Java基础


Java核心技术 卷一、卷二(全部看完,重点章节重点看,看完可以在牛客网上刷题练练,正确率8/10以上不在话下)

周志明 深入理解Java虚拟机(我重点看了2、3、7、12、13这五章)

深入分析Java Web技术内幕(我只看了1、2、5-11章)

Java并发编程实战(这个是因为我简历上突出的重点,所以特意做了复习功课)

只看书肯定不够,对于重点的知识点一定要实际写demo测试验证,而且对于很容易被问到的几个知识点最好也要看源代码加深自己的理解。毕竟书上都是别人写的,是别人的理解。


2、操作系统 


这个我是看的本科的时候的操作系统教材,重点掌握:


进程管理(进程状态、进程同步、进程线程区别、进程调度)

经典的同步问题(生产者消费者、哲学家进餐、读者写着)

死锁的产生原因、必要条件、预防死锁的方法、死锁的检测与解除

存储器管理(分页、分段、段页式)

虚拟存储器(请求分页,页面置换算法)


3、计算机网络


OSI七层模型、TCP/IP四层模型,每层作用和有哪些协议

网络访问层——帧的格式

网络层协议——IP、ARP、RIP、BGP、IPv4和IPv6区别

传输层协议——UDP、TCP(流与分段、滑窗、连接、流量控制、重新发送、堵塞控制)

应用层协议——DNS、HTTP(格式、请求方法、状态码)


4、数据库 


看的本科教材,主要复习了基本sql语句、数据库引擎、索引实现、事务、隔离级别、sql优化。


5、算法数据结构


刷题!我刷完了剑指offer上的题和LeetCode上所有easy的题,差不多100多道吧,大部分都很简单,刷完基本实习面试差不多没什么问题了。但是对于很重要的算法我会去看算法导论里面对应的章节扩充一下。虽然实习我不打算再找了,但刷题的节奏不能停呀,嘿嘿。


6、其他 


这个就根据个人简历上所提到的技能进行复习啦,因为我写了熟悉设计模式,所以这一块就要着重复习,主要是设计模式的实现思路、为什么要用、优缺点、jdk里面哪些用到了、多线程下怎么用(这个也是因为我简历里说理解多线程并发,所以也要结合着来准备复习的点),设计模式的复习推荐我的老师——伟帅的博客。


7、最最最重要的 


一定要分享!哈哈,没有分享那么高尚啦,其实就是练练表达而已。打个比方,我今天上午看了jdk里面线程池是如何实现的,我中午吃饭的时候就会拉着我的同学说,来,我给你讲讲线程池是怎么实现的吧。不管是知识点还是算法思路,找机会给别人讲一讲,看别人能不能听懂。在讲解的过程中,一方面练表达练讲解的逻辑,另一方面别人可能会问一些你之前没有留意到的点,又可以查漏补缺呢。正好,我实验室的师兄也在校招,所以好开心我们相互分享,只是唯一的缺点就是吃饭变成了单纯摄入卡路里,吃啥都没胃口。


8、to do list 


这是我接下来要做的,毕竟生命不息学习不止。


  • LeetCode每天刷题

  • How tomcat works

  • 看Spring源码

  • 计算机基础《深入理解计算机系统》


# 面试技巧


自我介绍:简历上有的不用再大篇幅介绍了,讲自己的优势(其实讲的就是你希望面试官接下来要问你的技术问题,起到导向性作用,很重要!)


项目介绍:分情况,技术面多讲技术层面上的问题,boss面多讲讲项目的设计思想,hr面则要多讲讲团队的沟通交流。


遇到自己很熟悉的问题:你都已经知道了,那就一定要把你知道的按顺序讲好,重点就是逻辑要清楚。


遇到自己不太会的问题:不太会就是这个问题你不会,但是这个概念你懂,或者在其他地方用到过相似的,那就不要直接说你不会,把你的理解讲清楚就行了,要会“扯”。


遇到自己完全不会的甚至都没听说过的:那就没办法老实说不会吧,只能说明自己有点low了,面完赶紧补充进自己知识库吧。


礼貌,一定要有礼貌,但是也别太过了,毕竟大家都是搞技术的,礼貌中带一些随性。嘿嘿


# 最后说心情


两个月过得好快,9月复习10月找实习,其中9月还腾出了半周时间训练参加羽毛球校赛,之后时间基本拒绝所有社交,连羽毛球都不打了,每天唯一的放松就只有9点半以后夜跑。可怎么复习都有一种在填坑的感觉,不过也没什么,填完一个坑也是很有成就感的。


这期间有太多热心人士给我帮助。帮我看简历,内推,讲算法,教我怎么在面试中有效的瞎BB,哈哈你们都是我的财富,谢谢大家。




最后,帮朋友发一个最新的内推岗位,感兴趣的同学可以把简历扔过来。

在此,也欢迎各位读者入群来交流切磋技术,戳这里:咱们来一起抱团取暖,好吗?


---END---



热文推荐

用 IDEA 跟踪 Java 源码的技巧 | 内部资料

漫画:程序员的简历该怎么写?

面试题:jdk那些类的底层实现使用过位运算,并且给你印象最深

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存