首页 > 笔经面经 > 秋招总结&Java心得(双非硕士,已拿11+5家Offer)

秋招总结&Java心得(双非硕士,已拿11+5家Offer)

头像
左程云同桌
编辑于 2019-10-28 12:09:03 APP内打开
赞 98 | 收藏 509 | 回复32 | 浏览12336

本人情况:

25岁,男,双非硕士(本科也是双非),计算机专业,硕士研究方向是:CV,无顶会,无kaggle,无相关项目经历,本科感兴趣领域是:Java和大数据。

找工作过程从3月份春招开始准备找暑期实习到10月中结束,历史7个月,从小白到现在入门,希望能给大家分享一点自己的心得。

简历也是改了20多版,主要都是在改项目描述。

文章较长,如果不想看面经,可以直接跳到最后总结部分。

Offer情况:

收到了11家,还有5家在等待。
2. Java研发:​

  • 明略科技:nsg(智能装备)bu,base:北京望京(拒,拒时工资最高,甚至比部分同学算法岗位还高)
  • JD:商家研发部,主要负责商家审计业务,base:北京亦庄总部(拒)
  • 房多多(拒)
  • 平安产险(SP)(拒)
  • 平安智慧城(拒)
  • 同花顺(拒)
  • 顺丰科技:bu未知,base:深圳总部
  • 猫眼娱乐:大数据bu,base:北京
  • VIPKID:bu未知,base:北京
  • 菜鸟网络:国际BU,base:杭州(等Offer)
  • 度小满:bu未知,base:上海(等Offer)
  • 萌推:bu未知,base:上海(等Offer)
  • 携程:bu未知,base:上海(等Offer)
  • 依图科技:bu未知(等Offer)
  1. 大数据研发:
    奇安信:bu未知,base:北京

  2. 算法:
    马蜂窝:有搜索部门和大数据部门,看分配,base:北京

面经

通过分享我个人的一些面试经历希望能给双非学校的同学一点帮助。主要分为2个部分,春招(算法)和秋招(研发)。

春招(视觉算法 or 机器学习岗位)

2019.3-2019.6

春招主要找的暑期算法实习生,投了大概50多家公司,官网投递,牛客内推,朋友内推等,全部凉透。
字节跳动、腾讯、阿里、百度、网易、商汤、airbnb、旷世、图森未来等等,全部简历挂。

我想着应该和自己的双非学校有一定的关系,而且自己没有顶会/顶刊/kaggle/项目经历,只是一味的去补理论知识,没有在竞赛/项目中实践。

算法岗位竞争真的激烈,人太多了,所以那些独角兽公司算法团队更愿意在C9高校进行招生,比如依图科技(面试官明确的说只在C9高校招生,这是我秋招在面java的时候给我说的)。。。

所以,我觉得,如果你想从事算法岗位,那么必须要有一定的沉淀,比如相关项目经历(当然是要主力队员)或者kaggle竞赛,或者顶会顶刊论文了。这些都是门槛,或许双非学校限制了你,但是通过你的一些沉淀,也可以成为独角兽企业的敲门砖。

转变

2019.7

时间到了7月份,经过春招的持续打击,整个人情绪失落到谷底,本来上研就是为了找算法,自己也努力了两年,但是也怪自己入学的时候没有规划好,导致小论文方向不是机器学习,也不是cv,也是图像处理,所以,虽然努力了两年,但是没有机器学习实战经历。

就目前的情况来看,自己是不能再走这条路了,所以一度非常失落,以致整天有游戏麻痹自己。每天不去实验室学习,在寝室颓废。

到7月中旬,也就是颓废了半个月之后,决定回家,也就是在回去的路上,自己想通了,身为男人,以后还有养家糊口,家里有老人要养,将来还要结婚生子,都需要钱,所以自己不能这么颓废下去,需要赶紧调整自己的状态。所以自己就觉得,走本科的方向——Java研发,由于本科热衷于Java,所以上研也没有将Java放下。所以开始着手准备Java简历。

秋招(8月-10月)(Java岗位)

2019.8-2019.10

到了秋招提前批的阶段了,自己的Java简历也完成了,在本科的基础上新增了一些东西,以更简洁更完善的方式呈现出来,同时回顾并总结本科时期的Java项目,并慢慢开始复习,备战。下面开始讲面经了。

毫无准备

  1. 8.14 阿里巴巴一面(新零售供应链,凉了,这是我的第一场面试),大概30分钟
    HashMap和HashTable区别
    HashMap实现原理(put、resize)
    StringBuffer和StringBuilder区别
    数据库事务隔离级别
    如何避免幻读
    数据库引擎(Innodb)的事务支持粒度
    如何实现乐观锁
    Synchronized实现原理
    tcp三次握手,四次回首
    osi7层模型
    最后问了两个智力题:
    两个粗细不均匀、长短不一的的绳子,燃烧一根分别需要60分钟,如何利用两根绳子,测量出15分钟?
    一个篮球可以装多个乒乓球?

  2. 8.21有赞一面(凉了)20分钟
    HashMap和ArrayList默认容量分别是多少?
    HashMap和HashTable区别
    HashMap什么时候扩容,几倍?
    ArrayList什么时候扩容,几倍?
    讲讲Java内存模型
    讲讲gc算法
    01背包问题,我说了dp的方案,但面试官说使用贪心算法(性价比最高优先,我当时屈服了),但是后来发现,贪心不行。

    反例:
    W=30
    物品:A B C
    重量:28 20 10
    价值:28 20 10
    根据策略,三种物品单位重量价值一样,程序无法依据现有策略作出判断,如果选择A,则答案错误。
  3. 8.26 美团二面(估计凉了,但还没收到拒信)

    一面:(25号晚上做了美团笔试,很差,3道算法题,只过了30%)

    上来先吐槽我算法很烂,然后要考察我基础。
    进程调度方式
    进程与线程区别
    多线程优点
    进程同步有哪些方式
    osi七层模型,以及对应都有什么协议
    tcp三次握手和四次挥手
    udp和tcp区别
    http报文都有什么
    客户端发起http到服务端返回的详细过程
    编程实现求二叉数深度
    还有一题忘了。

    二面:

    二面主要考察场景题,让我从自己的项目出发,如果项目需要上线了,需要考虑什么问题。
    看过那些架构的设计。
    平时的学习方法。

  4. 8.27阿里国际(深圳)一面(凉了)
    GC算法都知道哪些?分别讲讲(serial pal new、parelle scavge、serial old、parelle old、CMS)主要讲了下cms
    JVM内存模型。
    Zookeeper原理,当有3台服务器,一个挂了,怎么保证服务的正常使用?
    Spring 怎么接受web请求(应该是Spring MVC)流程是怎样的。
    AOP原理
    Spring Boot启动加载过程。

  5. 9.3 葡萄城(一面+机试+二面,凉了)(C#做控件开发)
    一面,两个面试官,问了计算机网络,还是那些常问的问题,我就不列出来了。
    问java有什么优缺点,我说单继承,接口可以多实现,就问为什么?多承继为什么不好?(自己给自己挖了个坑)
    还喜欢什么?集合。
    都有哪些集合?balabala……
    HashMap是怎么实现的?baabala
    HashMap可以解决什么问题?我说字符频率统计。
    怎么做的?比较hashcode,然后比较equals
    如果字符串是变量怎么办,“abc abc”,两个abc的地址不同?暗示hashcode不同,没答出来…
    git常用操作都有哪些,查看日志用啥?
    如果不小心把一个很大的文件2gb,push了上去,然后发现后在远端删除了,之后别人执行git clone,会把所有的历史信息给clone下来,如何解决这个问题?
    重点提的是,让我讲述项目难点的时候,我提到了跨域问题,我当时对项目还没有完全熟悉(2年前做的),一直在那讨论为什么会出现跨域(这也导致我回去之后,把项目仔细看了下,发现是我当时对项目不够书序,导致描述错误)
    二面,机试:用#画直方图📊,输入一组数据:

    [
    {value:2,label:”a”},
    {value:5,label:“b”},
    {value:3,label:”c”}
    ]
    输出:用空格分割每列
        #
        #
        #   #
    #   #   #
    #   #   #
    ———-------
    a   b   c

    做出来了之后,让支持value是复数,即在虚线下方画#,比较简单。
    三面,还是2个人,比较有映像的是:
    让我简单描述如何实现电梯调度算法,字符串压缩算法。(这个回答的不是很好,回家之后才想起来电梯调度算法和进程调度算法差不多)

  6. 9.8 完美世界一面(凉)
    完整面经 入口


开始发力(封面就过)

  1. 9.17 菜鸟网络一面(二面三面忘记记录,等Offer)
    图片说明

  2. 9.17 携程(等Offer)
    图片说明
    二面忘记记录了

  3. 9.17 依图科技(等Offer)
    图片说明

  1. 9.18 房多多(最有意思)

    今天最累,早上面试明略科技(一面二面),10点面试小米,11点面试房多多,13点面试去哪儿,15点面试jd。

    2面+hr面
    最后意思的是,和二面面试官在讨论一个题
    做一个服务,只统计一个url在最近一分钟被访问的次数
    用多线程、原子操作、定时线程、队列一系列操作完成,最后和面试官在讨论如果服务挂了怎么办?
    从主从备份,到zookeeper,再到类似一致性hash环形架构的设计,最后到我认输。

  2. 9.24 度小满(四面,加面,等Offer)
    hr打电话说,一二面面试官觉得我java基础还不错,还有一定的机器学习算法能力,就给我加面了。
    因为一直在复习java,所以深度学习方面有点答的不是很好
    图片说明

  3. 10.9 奇安信(大数据)
    图片说明

  4. 10.21 字节跳动(等Offer)
    三轮技术面,一面写了2到算法题,二面写了一道,三面写了三道。
    最有意思的是第三面,压力面,第一次经历,整个过程让我很紧张,勉强发挥。
    自我介绍完,就让我写算法,然后不断问我各种原理,在我回答过程中,不停打断我,让我很紧张,然后继续写算法题,一共来了三次。
    第一题,遍历list,并删除指定元素,(想考我for each的坑,但是我没接招,使用迭代器完成)
    第二题,按照奇偶行,奇数行正序,偶数行逆序的方式打印二叉树。
    第三题,写生产者消费者代码。


还有些公司没有记录面试过程,就不写上去了。最后来个总结


总结(精华)

从最初的死磕算法岗,再转到Java研发,再到大数据岗位,再到算法岗,用了7个月时间,最终拿到满意的Offer。

  1. 面试总结:
    面试体验最好的公司:
  • 顺丰,面试官是唯一一个先自我介绍的公司,好敢度爆棚,而且内部有许多社员、比赛(包括算法比赛),这让我感觉这好像是一所大学,重要的是违约不要违约金,很大气有木有。
  • JD,一面面试过程中,不断引导我来回答问题,我说完之后,他还主动说出他的看法,最后我拒JD的时候,也是他给我打电话,给我问了我具体原因,也给我说了部门具体工作,不停地劝我,最后因为还想等等其他公司的Offer而拒。
  • 字节跳动,面试体验很棒,面试官显得非常专业,特别是压力面给了我深刻的印象。
  • 度小满,唯一一个因为我硕士经历而给我加面的公司。
  • 阿里,面试真的非常专业,问的问题超级有水准,而且喜欢问一些开放性的问题,比如抢红包算法,盒子分配算法,有5中规格的盒子,当用户下单之后,如何选择最合适的盒子来打包。
  • 完美世界,这个是唯一一个让我心服口服的面试,问的问题,超级独到,不像市面上的大众问题,所以给我的感觉非常棒。
  • 房多多,hr让我很感动,因为我急着安排后面的面试,所以一直给我优先安排。
  • 猫眼娱乐,vipkid,奇安信,涂鸦移动,小米,萌推,依图科技,平安智慧城,平安产险等公司都不错,由于篇幅有限,就不写了。
    面试官代表公司的整体形象,如果面试的问题很水,面试过程很混乱,体验很差,那我很有可能拒掉。

面试体验较差的公司:

  • 去哪儿网,签到的时候,我说我有事,我提前来了,可不可以优先安排,结果被一个胖胖的男的泼了冷水,说你要觉得你后面的比较重要,那你先走,然后balabala说一堆(我一脸黑线)。。。一面的时候,面试官忙的飞起,在微信群聊天,说什么签到系统故障什么的,然后就balabala问了一堆问题,最后让我写了个题,实时统计最近一分钟访问首页的次数,由于之前房多多已经将方案说出来了,但是对库函数有点不太熟悉,所以就大概写出来了,总体回答了70%吧,就没有然后了。

  • 商汤科技,倒不是说面试体验不好,面试体验好的飞起,面试官频频点头,说可以,然后最后写了2道算法题,一一写出来了,然后面试说我代码风格和代码能力都可以,2周之内能收到2面通知。结果今天发了拒信(时隔一个多月),我就觉得,知道你是独角兽企业,不如在招聘网站直接写上211 985高校好了,跟华为、中兴一样,直接点不好吗?

2. 面试方法(针对研发岗位)

通过网上的面经也能知道,问的问题,无非就是那些常问的问题,就算不一样,也只是换一种形式来问而已。

  • 计算机网络:osi7层模式,对应协议有什么,都是干嘛的,建议把谢希仁的《计算机网络》传输层那一章好好看看,比如tcp的三次握手,四次挥手,流量控制,拥塞控制,看的时候,不能硬背,要自己理解,才不会忘记,而且在题目有变动的时候,也能应答如流。

  • 操作系统:内存管理,进程调度,进程通信,linux常用命令。

  • 数据库:事务(ACID)、三级范式(举例)、关联(join)、聚集函数、group by、order by、索引(b+树)、innodb与其他的区别(锁的粒度)

  • 数据结构:(重头戏),除了广义表不需要重点看之外。《数据结构》严蔚敏
    线性表,尤其是链表(头插法、尾插法、删除、双链表、带头结点与不带、循环链表等)、栈、队列。
    哈弗曼树、二叉树、二叉排序树(删除、增加)、b树、b-树、b+树、b*树、红黑树、字典树、树的三种遍历(代码实现,递归与非递归)。
    图的遍历(dfs、bfs、递归与非递归)、拓扑排序、最小生成树(Dijkstra、Foyd、Prim、kruskal)。
    查找:常用的就二分查找了。
    排序:冒泡、插入(常用)、选择(常用)、快速(常用)、堆(常用)、归并(常用),希尔(不常用)、基数(不常用)
    口诀:不稳定:快选希堆,其他则是稳定算法。
    补充:
    KMP算法及改进BM算法传送门
    并查集,用于求朋友的朋友问题(最小生成树个数),并查集并查集路径优化
    三路快速排序(快排优化),传送门
    刷题:leetcode(top like100)

  • Java
    Java基础倒是很少问,一般问源码层面问题,注意1.7和1.8的区别
    1、《深入理解Java虚拟机》,最重要的是JMM(Java Memory Model),我自己的建议就是从JMM为中心,开始向四周扩展,构建知识网。
    从JMM -> GC算法,GC Root的确定,线程逃逸问题,Java对象头(Synchronized实现原理),栈的原理,类加载机制问题,三级cache结构、内存屏障,即volatile关键字原理,线程调度等,全部可以从jmm发散,或者从某个点切入,也能讲到JMM。
    2、集合:HashMap、HashTable、ConcurrentHashmap、LinkedHashmap、TreeMap、TreeSet、ArrayList、LinkedList、PriorityLinkedList源码等等
    3、锁:乐观锁(版本号(mysql通过多版本号来解决幻读问题),cas),悲观锁(AQS,AbstractOwnableSynchronizer是重点)、ReentrantLock、CountDownLatch、CyclicBarrier、读写锁等等,与synchronized的原理对比等。
    4、多线程:线程几种实现方式,状态转换,ThreadPoolExecutor参数解析,执行流程。
    5、六大原则:
    单一职责原则(Single Responsibility Principle SRP)
    开闭原则(Open Close Principle OCP)
    里氏替换原则(Liskov Substitution Principle LSP)
    依赖倒转原则(Dependence Inversion Principle DIP)
    接口隔离原则(Interface Segregation Principle ISP)
    迪米特原则 (Least Knowledge Principle LKP)
    6、常用设计模式(手写单例模式):工厂模式(bean)、代理模式(aop)、观察者模式(消息发布订阅、dubbo),说的这样都是在spring中可以联系起来的
    Spring中常用的设计模式有哪些?
    7、如何用线程打印abab问题,传送门
    8、海量数据问题:归并排序思想,传送门
    9、Spring mvc作为后端,讲述从前端请求到后端返回的全部流程,从dns解析到tcp建立连接,再到arp解析,再到反向代理,再到DispatchServlet、HandlerAdapter(通过HandlerMapping找到对应的requestmapping方法)、ModelAndView等,这个问题足以将基础和框架全部联系起来。
    10、反向代理策略:轮询、随机、加权、最少连接、ip hash、dns最短等
    11、四层代理(lvs)和七层代理(nginx)
    12、分布式session问题
    13、洗牌算法
    14、zookeeper实现分布式锁,以及它的选举过程等
    15、Spring ioc的原理,aop的原理(jdk和cglib,与静态代理AspectJ的区别)
    16、Spring bean的是如何管理的?
    17、在maven中如何出现了循环依赖问题,spring中的bean是如何注入的?
    18、dubbo原理,架构图
    19、一些常见的rpc框架,rpc和http有何区别
    20、如何实现i++的原子操作,(加锁问题,volatile关键字(可见性(三级cache缓存失效,通过对比自身数据)、有序性(内存屏障)))
    21、布隆过滤器
    当然问题远远不止这么多,只是将一些我认为比较好的问题写了出来。

  • 算法
    刷leetcode,刚开始可能一天才能做一题,刷多了就好了,每种类型的题目都要去涉及,比如双指针(最常用)、回溯、递归、dp、bfs和dfs等。算法能来也不是一朝一夕的事情,这里我建立了一个LeetCode打卡群,群里会有严格的打卡制度,每天至少一天,如果某天有事,当天可以不打,但后续需要补上,尽量写多种解法,并伴有注释,一周至少7题,题目不限(也可以相互推荐),群只维护10个人,加满即止,如果还有想打卡的,也可以自发组织成群,发起打卡。
    图片说明

  • 加分项
    Git上有自己的一直维护的项目,曾经有面试官打开的git主页,看着我的代码,问我的项目中的问题。
    有自己的blog,并长期在上面分享学习心得、知识总结等,曾经也有面试官现场访问我的blog。

面试心得

  • 如果有心仪的公司(比如我就想去某个地方去工作),我的建议是,你在投递这个公司之前,多投投其他的公司,说白了就是当做垫脚石,攒经验,每次面试之后,及时找出自己的不足之处,将面试官问的问题回去仔细研究,找到一种正确的解法后,看看能不能继续优化,凡是多想一点,多问点为什么,以免可以应付问题的变种。
  • 每次面试之后,在下一次面试的时候,你都需要有一个提升的过程,随着你的面试不断进行,你的知识储备需要不断积累。
  • 经常听到身边有人说,我觉得我很菜,但却没有去付出实际行动提升自己,而且继续说自己好菜。
  • 也有人说自己经常看的东西记不住,其实我觉得,只要下功夫,一遍记不住,你多看几遍,然后不停地用已学的知识去类比,加速自己的理解,数据结构我看了不下5遍,每看一遍都有不一样的认知,认知就是发现自己看的书本上的东西都在一些框架中应用了,是他们的基础。比如b+树作为数据库索引,堆排序可以使用优先队列来实现进程调度的LFU等。
  • 需要构建知识网络,做到不论是从哪一点切入,都可以找到知识网的中心,然后从四周扩散,活学活用。举个例子,阿里二面时,问我如果不适用任何random函数,如何实现随机???(想想一台机器有什么是变化的)
  • 最后一句话,勤能补拙,自己虽然是双非学校,但是通过努力,也拿到了国奖、也拿到了一些大厂的Offer,最终也有自己满意的,所以短暂的受戳不要紧,及时调整自己,让自己努力起来,加油吧,程序员们,注意保护头发!

32条回帖

回帖
加载中...
回帖

相关热帖

笔经面经近期热帖

近期精华帖

热门推荐