18年秋招-Java后端面试总结与心路历程(非科班小白勉强拿几个互联网offer但是决定转行了)

犹豫了很久要不要做机器学习,时间就这样浪费掉了很多,最后还是决定去学,然后打算春招,即使没找到或者找的不好都算完成了心愿。

首先说一下自己的情况,本硕都算管理相关专业,16年11月起开始学的编程(其实最多学了一年,因为很多时间写paper去了,然后还打了lol),其实至今都想不起为什么做了Java而不是ML,也许是个人信息滞后吧。

打算春招,不是秋招没找到而是想转岗,秋招投了30家左右吧,目前拿到的offer有:人人车,OPPO,海康威视SP,去哪儿网,新浪微博SP,小米SP,拼多多,瓜子。然后宜信,百度,携程都面完了不过最后都是石沉大海,头条一面就挂了(处女面,让我写前缀树写忘了),美团二面挂了(是我校友问的问题很实际,比如扫码付款问题,扫码开锁,优雅的解决缓存穿透,不同网站间如何跳转)。然后atd都没过笔试或者没做,其他的小公司的就不说了哈。然后其他的要么没笔试要么冲突了,毕竟也不打算去也不去耽误面试官时间了。

先向学弟学妹说下个人的学习和面试经验吧。

PS:如果是一点java没学过,建议去淘宝买个培训班视频花2-3个月学完。这个时候去面传统软件公司肯定没问题,即使是校招去面非互联网公司,比如海康威视,招银,顺丰,oppo,vivo等公司是没问题的,而且这些公司待遇不比互联网公司差。所以不用担心找不到工作。

但是想找个叫的上名字的互联网公司,一般是不可以的。需要你学的细致一点
1、Java基础一定要巨扎实,比如:String和StringBuffer和StringBuilder,集合类源码一定都要搞明白越细致越好(就一个HashMap都够问的),生产者消费者的多种实现方式至少熟练写出来吧,java8新特性等。

2、Java高级特性必问:主要是两个,一个是并发编程一个是虚拟机,个人建议《并发编程的艺术》和《深入理解Java虚拟机》两本书,多看几遍做好笔记,并发包下面的常用类要弄明白,比如Lock是怎么实现的,可重入怎么实现,公平非公平怎么实现,AQS能不能讲一讲,阻塞队列几种怎么实现,线程池,并发HashMap的实现然后还有volatile底层和synchronized等等,这些在《并发编程的艺术》上都是有的,个人觉得这本书足够应付面试,而面试官问的虚拟机的知识也都是来自《深入理解Java虚拟机》的,所以看了这本书也绰绰有余。

3、非科班的肯定也是没学网络和操作系统了,建议《计算机网络》和《现代操作系统》两本书,挑着看,实在来不及那么网上找相关面试题背下来好了,无非三次握手四川挥手以及为什么,tcp报文长什么样子,进程间通信方式等也就30题不到。当然还有http和https也会被问的巨多,比如输入www.baidu.com会发生哪些事。

4、MySql和NoSql(你肯定知道redis,被问烂了),对于MySql,基本上我是没遇到让我写crud的语句,而是问索引,比如索引的种类、实现、优化等,然后事务隔离级别有哪些,分别解决什么问题,再深一点就是各个隔离级别怎么实现,事务怎么实现,还有很多零散的问题,建议把《MySQL技术内幕InnoDB存储引擎》看两遍做好笔记,那么对付面试绝对没问题。而对于NoSql,找个培训班的视频系统学一遍(基本数据类型,用处,持久化机制,复制策略,集群,扩容等),然后最好找到相关的项目去使用,底层c写的就不用去知道了。

5、把基础跟高级特性学扎实了后,那么一面保守估计我觉得百分90以上不会有问题。哦。。。忘了补充一点至关重要的,这一点可能导致一面直接挂,如下

数据结构和算法!!!
基本上面试都会问,最恐怖的是小米问了我7道,百度问了6道,瓜子问了7道。运气好我都是AC了,我还装作非科班不会的样子哈哈,面试问的不会太难,比笔试简单多了,而且很多是原题。什么原题?把牛客网上的《剑指OFFER》刷三遍,leetcode刷前200题最好(这是个长期过程,0基础每天干至少2个月吧(大神忽略),反正我学了很久,要做到free bug才好)。另外7大排序得会写烂,还有大数据处理问题(一般是分流,比如分到不同的机器不同的文件上,然后常用到堆,外排序,hash等,推荐july的博客大数据问题秒杀)。补充:在这之前建议先买本书看完,《大话数据结构》比如易懂,国外的那本Java的数据结构和算法翻译的我看着巨难受,找个视频(淘宝搜就行)看完自己再实现两遍。leetcode个人刷了380题左右,github上放了300多点,需要的参考Leetcode300题Java版本,可以的话帮忙Star哈。

然后二面基本就是问项目了,就假设大家都有实习项目哈,如果是练手千万不要往简历上写分布式的互联网商城项目,这种能往死里问你。就是一般的传统项目,只要你业务弄透了,架构搞清楚,用了什么技术,为什么用它搞明白就好(比如你用了Zookeeper,Dubbox等你就得尽量去弄懂它,否则被问到了就完了),其他的看你发挥了(我反正有时候是被问成傻子了,比如我做了支付,问了我支付宝那边出问题了,没有回调我们的接口我该怎么处理,我笨的不行,想不到好的也找不到好的)。

然后还有些场景问题:
以上说的不是绝对哈,但是我认识些同学,只要你简历别写分布式那么就不会问你分布式,不问分布式那么面试就简单多了。我以前做过分布式的小项目也看过两本书,觉得自己还行。后来才知道自己low的不行,没事千万别往简历上写。不过不写你还是得准备着,比如:设计个秒杀系统,SOA架构问题,缓存带来的一些问题以及如何解决,Hash一致性,分布式锁,分布式事务。。。实在有点多(去找博客看比较好)。建议把淘宝大神写的书读一下,名字我不记得了,对于分布式的问题我建议网上找个分布式的商城自己做一遍,里面会用到很多技术比如Zookeeper,redis,lucene,solr,消息队列,支付宝微信支付等等。要不要写到简历要慎重,你如果不写然后被问到了反而会给人好印象,否则写了答不上来就完了。

补充:上面提到的书一定要看,视频的话推荐培训班的视频(淘宝买最多10块钱,我觉得培训班的视频讲的会系统专业点,人家会备课也讲了很多遍,否则可能有时候找些别的视频听完啥没学到时间也浪费了)。

面试前一个月去牛客网搜学长学姐的面经,自己找答案都给记录下来(我自己都整理了几乎200多页的面经),相信很多人(包括我)都是这一个月抵掉了前面一年,但是算法就是长期学习的过程了。

一年没写博客了,毕竟感觉没太多精彩的,所以学到的知识都写到了云笔记里面了。写到深夜两点了就不说了,虽然个人比较菜但是还是希望对学弟学妹(尤其是非科班的怀疑自己的,毕竟我也是非科班年纪还一大把了)有所帮助。

你可能感兴趣的:(机器学习)