感谢牛客,春招实习圆满结束。
昨晚12点收到阿里的offer算是给春招划上一个句号。找实习之前从未想过自己一个非科班渣硕能拿几个大厂的offer,所以牛友们要对自己有信心,越努力越幸运。 春招拿了美团,远景能源,酷家乐,网易,阿里的java研发(还面了58同城,消息还没出。头条三面问的计算机基础答的不好挂了),
补面经,时间比较久远可能很多已经记得不太清,见谅。
___________________________________________________________________________________________________________________
知识总结
个人觉得Java后台所需要重点准备的包括不限于Java基础、数据库、计算机网络、Web相关、JVM、数据结构与算法、分布式相关
Java基础:
熟悉Java语言的基本特性
结合博客和源码研究java常见集合框架,包括不限于HashMap(1.7与1.8不同,扩容问题,容量大小等)与HashSet,ArrayList与LinkedList,LinkedHashMap,TreeMap,WeakHashMap等,需要了解容器的适用场景,重要方法的流程,相似容器之间的区别等。
结合博客与源码研究java并发包,包括但不限于AQS以及基于AQS的并发工具(可重入锁、信号量等等),各种阻塞队列的底层实现、各种线程安全容器比如concurrenHashMap等,线程池的参数意义,实现思想,了解几种常见的线程池。
了解Java I/O体系,了解设计思想,NIO问的也比较多。
知道常见设计模式在jdk中的应用。
数据库
三范式
常见sql语句的编程,推荐牛客上的在线sql编程,做一部分就能够熟悉基本sql语句的编程。
索引底层实现,复合索引,索引失效条件,根据explain优化索引查询,会根据几个sql语句建立合适的索引。
存储引擎特性与区别:innodb,mylsam,mermory等
事务相关:隔离级别和实现原理,可能引起的问题,使用。
主从复制的原理,读写分离思想
数据库优化(包括不限于数据库字段设计、结构设计、sql优化、索引优化等方面)
sql注入
计算机网络
TCP/IP三次握手四次挥手具体过程状态,原因
TCP如何保证可靠传输
粘包问题
http1.1,1.0
http状态码、重要首部字段
https
长连接短连接
Web相关
Tomcat结构流程
servlet 生命周期
spring IOC AOP原理与实现
springmvc原理流程
mybatis 一级二级缓存
#与$区别
JVM
内存区域划分
GC算法,常见GC收集器
类加载机制、双亲委派
常用分析工具 jmap等
java内存模型
四种引用
数据结构与算法
根据知识点分类刷题,总结常用方法
了解AVL、红黑树
八大排序的复杂度稳定性和优化,能手写快排归并堆排
B树与B+树
设计模式
手写单例模式的各种写法,解释双重检查
了解jdk和常用框架中的设计模式
操作系统
非科班有时间可以好好看一下,头条就是因为三面操作系统问的很多被挂,没时间就看看面经上常见的题目。Java岗操作系统部分大部分公司问的比较常见。
分布式相关
- zookeeper
- kafka
- redis
- storm
- hadoop
- spark
- solr cloud
- Dubbo
比较推荐的学习资料:
redis设计与实现
javaWeb技术内幕
headfirst 设计模式
并发编程的艺术
深入理解JVM
大型网站技术架构
牛客网刷题与面经
——————————————————————————————————————
面试整理
由于面试过程比较久远,很多已经记不清了,按面试时间顺序
1.美团
最先面的美团,比较紧张,但是后来发现其实紧张没什么关系,会的问题紧张也会,不会的问题咋都不会-_-||。
首先自我介绍
先问项目技术点,个人建议项目可以按业务分块介绍比较有条理,阿里面试官当时比较满意这点,说对业务思考比很多人做的好-_-||。。。项目中用到的技术一定要熟悉,不熟悉就别写上去。
项目中问到倒排索引、拦截器实现原理,为什么要用redis,然后就是各种场景怎么解决,比如数据库id怎么保证唯一有序,消息队列消息处理失败怎么解决等等,类似的问题需要面试不断总结。
项目问完问基础,一面基本上是根据简历的技术点来问,难度不大
还记得的有IOC AOP实现,GC的对象判定、红黑树原理、B树B+树区别,为什么三次握手,http 304,redis持久化机制区别,redis为什么快,一道二分查找变种的算法题
二面是leader,不看简历,先写的算法,一道数转换成二进制,注意边界条件,一道AVL树,给定层数求最小最大节点数,单例模式手写,非递归后序遍历二叉树与BFS遍历,写完后面试官比较满意,问了大数据排序,答的是分割然后多路排序归并,他说不对-_-||,问了怎么随机从未知文本中抽取10行,当时不知道蓄水池算法,但是想到了,面试官问我是否以前准备过这个题,然而确实没有,感觉这道题给我加了好多分。最后详细介绍了下他的部门,应该是希望我过去。
第二天hr就给了口头offer,也算是春招第一个offer,很开心,也有了一定的信心。
2.酷家乐
很早投的,当时因为没有面试过,看到牛客上相对比较眼熟的就投了下,没想到面完美团才打电话过来。
一面开始就问了两道智力题,一道五对夫妇握手问题,一道:有一道生产线出了问题生产的硬币轻一克,给你一个电子秤,只称一次,随便怎么取,找到出问题的生产线,当时没想到。然后问了四道算法题,三道剑指offer上的,一道是leetcode上求最大矩形,用到单调栈,当时对这题有影响但是忘记了最佳解法,回答的N方解法,最后问了设计模式。
二面直接就是远程监控桌面,一个小时写一个文件分块器,就是一个文件分为几个部分,然后再合并成原来的文件,不允许根据文件名来合并,文件名可能被篡改,另外可以判断是否缺失文件而不能合并。当时允许借助百度,就找到了一个类似了修改了一下,做出来了。。。如果找不到,感觉是不太想写,可能也写不出来。
三面类似于技术总监面
问了几个JVM的问题就聊了实习事项
问了几个JVM的问题就聊了实习事项
过了几天hr口头通知,但是知道我有美团就说确定去了再联系他,后来就拒了。
3.远景能源
一面电话,问了fast fail机制,浅拷贝深拷贝,spring构造器中使用@autowire注解的成员有什么问题
给一个链接 写一道算法,6个骰子,求点数为n时的概率
二面去的现场,先给张纸写道题,比较简单,过了一会面试官来了,首先问项目,所以说有个相对可以聊得项目很重要,不然面试官也不知道问你什么,或者全程怼基础。聊完项目,看了下之前写的题说太简单,所以重新出了一道,给一个无向无环图,求以某个节点为根节点时的树的高度最小。没做出来。然后问了快排能不能手写,说能就没让写,问了快排为什么快。问了局部性原理,lru算法
三面总监面,随便聊了下在学校的情况,介绍下项目就结束了。
当天下午hr面,了解家庭,学习,性格,实习意向
过了几天发了offer,不得不说远景的实习待遇真的是挺高。目前offer里最高的
4.网易考拉
去的现场一面先怼项目,各种批判这个地方是硬编码,以后如果要改动怎么办,问了项目中redis,然后怎么统计redis的信息(缓存命中率等相关),问了拦截器与过滤器,项目中数据库索引等,项目答的不是很好,后来问完了之后问我基础怎么样,我说还行,对java一些集合 并发等都比较了解,然后就问了AQS,问了countdownLatch实现,所以面试中一个很大的技巧就是把面试官引向你熟悉的地方。问完比较满意,问了线程池,也看过源码,所以基础答得都还可以。
面完去前台问了下有二面,二面面试官很和蔼,问了NIO,问了知不知道netty,不知道-_-||,问了tcpip中的nagle算法知不知道,nodelay知不知道。。。都不知道-_-||,然后又问了spring怎么解决循环引用,也不会。。。面试一直说没事,没关系。后来又问了一些其他的基础,答得还行。
二面完问了下有hr,就先去食堂吃了个饭,感觉并没有传说中那么好吃,正常,可能网易游戏的伙食更好一点。
hr面很短,问了最有挫败感的一件事,想了一会。。不知道说啥,就说了高考。然后问了下目前offer情况,准备去哪之类的,总共就十几分钟。
前几天发了正式offer。
5.阿里
感觉阿里的面试体验很好,虽然流程很慢很慢
阿里的面试感觉没什么参考性,一面就是根据简历,挨个问你这个了解到什么程度让自己说,有些说了了解到什么程度他就不问了,有的说看过源码他比较满意,一面40分钟,了解完之后问了下项目,最后问他我有什么不足,给的评价自驱力很好,基础不错,对业务思考比很多人做的好-_-||
二面等了10天,应该是主管,全程聊项目,聊得很嗨,也是破了面试时长的记录,面了一个半小时,就是根据项目技术问细节,以及出现各种问题怎么解决,记得比较清楚的是 当数据库多以后,怎么生成唯一性ID,消息处理失败怎么处理,微信朋友圈删除好友后实时更新,你觉得是怎么实现的等类似场景的问题,感觉有的问题答的还行,有的一般,最后问他为什么不问基础,说一面说基础不错就不问了,另外根据项目中的回答能够判断你基础怎么样,最后问不足,也是一样说自驱力很好,但是眼界要更开阔,遇到问题多去关注业界是怎么解决的,多去实践。
等了10天来了三面
问了一个项目中的技术点就开始聊人生,聊学校,纠结我为什么以前本科,研一不去实习等,最后半个小时结束,问不足,说要去实习,在实践中来加强对技能的掌握。
面完还是挺慌的,没怎么聊技术,感觉像是走过场,纠结了一会,没想到很快hr就来了电话,聊了半小时人生,说下周会出结果让我跟内推人保持联系。然后25号内推人通知过了,但是感觉不稳,一直有点担心,直到27号夜里将近12点发了offer,感慨颇多,一个非科班渣渣竟然真的拿到了阿里,很激动。
头条
周日面的,本来不想面的,都说头条面试都是撕算法,感觉自己算法比较薄弱,所以想想还是面一下找找不足
一面上来先写了一个算法,关于几个人说话的推理题,只有两个人是真话,面试官说不是智力题不是推理题,考的是编码,所以想到穷举然后判断是否满足题目条件,用了几个for循环来穷举,面试官很不满意,说这不是一个很明显的全排列吗。后来又改成全排列,写完才过,又让写了几个sql语句,然后问怎么建索引,实际上就是复合索引的问题,然后再问了http状态码,redis数据结构,里面的hashmap的解决冲突办法和扩容机制。
二面也是写算法,先是链表对折,就是 1 2 3 4 5 6 变成 1 6 2 5 3 4这种,比较简单,然后还让运行,自己写测试用例,测试用例用的随机方法产生,面试官比较满意,然后写的lru算法实现,我说看过linkedhashmap,说了下思想,然后用的这个实现,然后写了剑指offer上的正则表达式匹配,最后就问了几个redis问题,记得一个是给一个有序的数据,取出一定范围的数据,用redis怎么实现,问时间复杂度
三面
没写算法,全程操作系统。。。。心里想着凉了,问了好几个都不太会,随便说。纠结于某个节点内存占用大小,内存隔离,进程能看到的内存是多大等等,很多都答错了,后来问他不足,说基础需要加强,然后没有hr通知,挂了。
58
面试难度很小,比较水,宣讲会面过一面,也是问了操作系统,但是比较常规进程间通信这种类似问题,问了计算机网络,多线程与进程,redis hashmap扩容,持久化等,前几天通知去亚朵酒店,一面二面就聊了下项目,聊了下人生,就结束了,现在消息还没出,可能五一后出吧。
最后感谢牛友们分享的面经,春招也算结束了,虽然拿了阿里,但感觉很多拿了阿里的大佬要比自己厉害的多,所以接下来加油争取转正吧,面试这个东西感觉真的是要看运气,当然准备越充分的情况下,实习影响的因素就越小,所以不要想太多,尽人事,听天命。每次面完试找到自己不熟悉的地方马上补救一下,这样才有收获,多跟同学们交流面试经验也是一个很好的方法,总之越努力越幸运吧。