互联网科技Java 杂谈Java

我是怎么做到暑假实习拿到了BAT,微软等十几家的实习offer

2019-06-17  本文已影响10人  cd4bd3aa39ec

个人介绍

南京大学电子科学与工程学院 本硕。本科 通信工程。
实习经历:在北京图森未来的基础架构部门。
(目前我也是图森在南京大学的校园大使,大家有想去实习和工作的可以私信我内推呀)
我之前也是经历过很长一段时间的迷茫,纠结于算法还是研发方向,因为我本身做过算法优化相关的工作(本科末也水过paper)
之前也对深度学习机器学习有过很大的热情,但是迫于环境和自身的想法还是选择了研发方向,主要是后台开发和云计算相关。所以大家如果能够很早的确定自己的方向还是可以少走些弯路的。当然我的经验仅供参考。

由于我所在的实验室比较的。。。。坑。。。。所以研一研二根本没办法出去实习,而且南京之前也没有特别好的大厂可以就近去实习。我在研一末和研二初的时候还是去尝试投了一些实习,去年是拿到了

目前我暑假实习基本告一段落,拿到的offer如下:

整个面试周期就是从2月底到4月底这,两个月,别问我为什么拿到了这么多,我面也快面吐了。我个人的准备大概是在研一的下学期开始的,一直到研二上整整一年,后面我会从语言基础,数据结构和算法,基础知识点,项目上进行总结。

学习建议

虽然面试有很多的地方可以讨巧和临时补充以及团队合作。但是从个人的发展和未来成长来说,我觉得基础是最最重要的。我个人是看书为主结合一些自己感兴趣的项目会写着练练手如果没时间写就多看看别人的项目源码,然后就是写写博客记录一些自己遇到的问题和想法,很多的问题真的都有在面试当中被问到。

算法和数据结构

这一段算法大神或者ACM大神就不要看了,我怕被喷。
算法这块因为我没打过ACM,所以一开始恶补的很多,我建议先找一些比较靠谱的视频或者公开课去学会比较好,当然如果学校里的课还不错可以去上上,因为我的专业开的计算机相关的课非常少,我记得本科就一个c语言和c++程序设计。所以我是蹭了很多计科的课:比如数据结构,算法设计与分析这类的课。因为算法这东西还是需要时间去训练的。

课程

  • 浙大的数据结构
  • MIT的算法导论

刷题

当然如果你时间不够那么,左神的算法课你就不能错过了!非常系统和直接,就是干货,看过的都说好,说实话很多的面试题真的在左神的课上都有说道。我个人是在牛客网上看的,主要外面的资料都不全很多左神的加课都没有,如果经济允许的话最好还是几个人可以合买一份左神的课,毕竟小小的投资可以换来很大的回报。有需要激活码的可以私信我,买左神的课可以便宜很多。

学完了之后呢,当然就是刷题了,我不推荐每天没日没夜的刷,当然我也曾经这样过一天刷他个十几道,但是真的这样效率其实不高,我是建议在有一定题量之后每天随便找个时间写个1-2题就够了,难度就是leetcode中等就行了,推荐大家一些必刷的和一些我觉得还不错的oj:

必刷

  • 剑指offer 2遍左右够了
  • leetcode 所有简单和中等的
  • 左神算法课上的所有例题

个人推荐

  • hihoCoder :他会有一个每周周赛,都在周日,四道题。难度和代码量都还是挺大的,如果想去外企我建议多刷刷。
  • lintcode: 为什么推荐呢,因为他有个CAT模式也就是天梯上分,写一题上一颗星每题有时间限制15分钟或者30分钟,提交次数限制3次,没过会惩罚加题。总之非常适合面试模式。我是刷的停不下来。
  • codeforces:这个就偏比赛一点,但是很多新题都是这上面改的所以值得做一做。

书籍:

  • STL源码剖析 : 各种数据结构的实现 都在里面 c++必问
  • 算法导论 :当个参考书吧,没事推个导,计算个复杂度还是有点意思的。
  • 算法竞赛入门经典

只从语言本身而言就是多看多理解和多使用。没啥捷径就是干。
当你觉得语言不是问题的时候那么就可以去看看操作系统相关的以及高性能服务器相关的知识,这些应该是后台方向必点的技能点了。

进阶

操作系统

操作系统的话原理大家都懂,但是一问深的就不知道了,什么进程线程,调度算法,虚拟地址这些的问题早就被问烂了。但是如果直接去看linux源码的话,相信大家和我一样刚开始都是拒绝的。还是直接怼书吧,基础最重要:

  • 深入理解计算机系统 :经典!太好看了!
  • Linux内核设计与实现:不算系统但是算入门级别 建议和操作系统的课本结合一起看会更好
  • 深入理解linux内核 :讲的2.6版本的内核

建议先把上面的几本书看看,然后看自己的兴趣吧,如果对哪块很感兴趣那就去看源码看实现吧。

服务器编程

服务器编程其实就是建立在对linux的系统调用的理解以及网络协议的理解上的。如果这两块的知识比较好的话就可以动手实现一些简单的服务器,然后对比别人实现的,压测一下性能啥的,可以作为一个还不错的个人项目,我其实也就是这么做的。

  • Linux高性能服务器编程
  • UNIX 环境高级编程
  • UNIX网络编程卷1

数据库

对数据库的理解也是必不可少的。如果是去大厂的话光会一个mysql基础可能是远远不够的。
像是Redis,MongoDB等非关系型数据库也是需要好好的掌握的。因为在实际的项目当中会经常使用Redis
作为缓存,包括其分布式集群的原理等等都是面试的重点。
MySQL的话建议可以看看,mysql必知必会,原理比较少但是使用细节还是挺多的,适合先过一遍。其次就是可以看看尚硅谷的mysql高级部分的课程,关于mysql的查询优化以及其他的高级特性都是书本上很少有的。很多的数据库难题都是这上面出现的。
Redis建议看看Redis设计与实现这本书,非常详细的讲了Redis的底层数据结构,包括其复制,集群部分也做了很好的解释。然后的话可以再去理解一下分布式的Raft算法,Gossip协议等等。
数据库就是多用多学,个人建议用学一学docker,以后配置这些服务非常方便,也是现在云计算的一个很重要的组件。

最后,预祝各位广大同仁找到自己满意的工作,如果对于面试有一些迷茫,对于自身工作几年遇到瓶颈期了,我整理了一些面试真题资料,技术知识点剖析教程,还有和广大同仁一起交流学习共同进步,还有一些职业经验的分享。
点击加群

上一篇下一篇

猜你喜欢

热点阅读