本人情况:
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)
大数据研发:
奇安信:bu未知,base:北京算法:
马蜂窝:有搜索部门和大数据部门,看分配,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项目,并慢慢开始复习,备战。下面开始讲面经了。
毫无准备
8.14 阿里巴巴一面(新零售供应链,凉了,这是我的第一场面试),大概30分钟
HashMap和HashTable区别
HashMap实现原理(put、resize)
StringBuffer和StringBuilder区别
数据库事务隔离级别
如何避免幻读
数据库引擎(Innodb)的事务支持粒度
如何实现乐观锁
Synchronized实现原理
tcp三次握手,四次回首
osi7层模型
最后问了两个智力题:
两个粗细不均匀、长短不一的的绳子,燃烧一根分别需要60分钟,如何利用两根绳子,测量出15分钟?
一个篮球可以装多个乒乓球?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,则答案错误。
8.26 美团二面(估计凉了,但还没收到拒信)
一面:(25号晚上做了美团笔试,很差,3道算法题,只过了30%)
上来先吐槽我算法很烂,然后要考察我基础。
进程调度方式
进程与线程区别
多线程优点
进程同步有哪些方式
osi七层模型,以及对应都有什么协议
tcp三次握手和四次挥手
udp和tcp区别
http报文都有什么
客户端发起http到服务端返回的详细过程
编程实现求二叉数深度
还有一题忘了。二面:
二面主要考察场景题,让我从自己的项目出发,如果项目需要上线了,需要考虑什么问题。
看过那些架构的设计。
平时的学习方法。8.27阿里国际(深圳)一面(凉了)
GC算法都知道哪些?分别讲讲(serial pal new、parelle scavge、serial old、parelle old、CMS)主要讲了下cms
JVM内存模型。
Zookeeper原理,当有3台服务器,一个挂了,怎么保证服务的正常使用?
Spring 怎么接受web请求(应该是Spring MVC)流程是怎样的。
AOP原理
Spring Boot启动加载过程。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个人,比较有映像的是:
让我简单描述如何实现电梯调度算法,字符串压缩算法。(这个回答的不是很好,回家之后才想起来电梯调度算法和进程调度算法差不多)9.8 完美世界一面(凉)
完整面经 入口
开始发力(封面就过)
9.17 菜鸟网络一面(二面三面忘记记录,等Offer)
9.17 携程(等Offer)
二面忘记记录了9.17 依图科技(等Offer)
9.18 房多多(最有意思)
今天最累,早上面试明略科技(一面二面),10点面试小米,11点面试房多多,13点面试去哪儿,15点面试jd。
2面+hr面
最后意思的是,和二面面试官在讨论一个题
做一个服务,只统计一个url在最近一分钟被访问的次数
用多线程、原子操作、定时线程、队列一系列操作完成,最后和面试官在讨论如果服务挂了怎么办?
从主从备份,到zookeeper,再到类似一致性hash环形架构的设计,最后到我认输。9.24 度小满(四面,加面,等Offer)
hr打电话说,一二面面试官觉得我java基础还不错,还有一定的机器学习算法能力,就给我加面了。
因为一直在复习java,所以深度学习方面有点答的不是很好
10.9 奇安信(大数据)
10.21 字节跳动(等Offer)
三轮技术面,一面写了2到算法题,二面写了一道,三面写了三道。
最有意思的是第三面,压力面,第一次经历,整个过程让我很紧张,勉强发挥。
自我介绍完,就让我写算法,然后不断问我各种原理,在我回答过程中,不停打断我,让我很紧张,然后继续写算法题,一共来了三次。
第一题,遍历list,并删除指定元素,(想考我for each的坑,但是我没接招,使用迭代器完成)
第二题,按照奇偶行,奇数行正序,偶数行逆序的方式打印二叉树。
第三题,写生产者消费者代码。
还有些公司没有记录面试过程,就不写上去了。最后来个总结
总结(精华)
从最初的死磕算法岗,再转到Java研发,再到大数据岗位,再到算法岗,用了7个月时间,最终拿到满意的Offer。
- 面试总结:
面试体验最好的公司:
- 顺丰,面试官是唯一一个先自我介绍的公司,好敢度爆棚,而且内部有许多社员、比赛(包括算法比赛),这让我感觉这好像是一所大学,重要的是违约不要违约金,很大气有木有。
- 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实现原理),栈的原理,类加载机制问题,三级***结构、内存屏障,即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关键字(可见性(三级***缓存失效,通过对比自身数据)、有序性(内存屏障)))
21、布隆过滤器
当然问题远远不止这么多,只是将一些我认为比较好的问题写了出来。算法
刷leetcode,刚开始可能一天才能做一题,刷多了就好了,每种类型的题目都要去涉及,比如双指针(最常用)、回溯、递归、dp、bfs和dfs等。算法能来也不是一朝一夕的事情,这里我建立了一个LeetCode打卡群,群里会有严格的打卡制度,每天至少一天,如果某天有事,当天可以不打,但后续需要补上,尽量写多种解法,并伴有注释,一周至少7题,题目不限(也可以相互推荐),群只维护10个人,加满即止,如果还有想打卡的,也可以自发组织成群,发起打卡。
加分项
Git上有自己的一直维护的项目,曾经有面试官打开的git主页,看着我的代码,问我的项目中的问题。
有自己的blog,并长期在上面分享学习心得、知识总结等,曾经也有面试官现场访问我的blog。
面试心得
- 如果有心仪的公司(比如我就想去某个地方去工作),我的建议是,你在投递这个公司之前,多投投其他的公司,说白了就是当做垫脚石,攒经验,每次面试之后,及时找出自己的不足之处,将面试官问的问题回去仔细研究,找到一种正确的解法后,看看能不能继续优化,凡是多想一点,多问点为什么,以免可以应付问题的变种。
- 每次面试之后,在下一次面试的时候,你都需要有一个提升的过程,随着你的面试不断进行,你的知识储备需要不断积累。
- 经常听到身边有人说,我觉得我很菜,但却没有去付出实际行动提升自己,而且继续说自己好菜。
- 也有人说自己经常看的东西记不住,其实我觉得,只要下功夫,一遍记不住,你多看几遍,然后不停地用已学的知识去类比,加速自己的理解,数据结构我看了不下5遍,每看一遍都有不一样的认知,认知就是发现自己看的书本上的东西都在一些框架中应用了,是他们的基础。比如b+树作为数据库索引,堆排序可以使用优先队列来实现进程调度的LFU等。
- 需要构建知识网络,做到不论是从哪一点切入,都可以找到知识网的中心,然后从四周扩散,活学活用。举个例子,阿里二面时,问我如果不适用任何random函数,如何实现随机???(想想一台机器有什么是变化的)
- 最后一句话,勤能补拙,自己虽然是双非学校,但是通过努力,也拿到了国奖、也拿到了一些大厂的Offer,最终也有自己满意的,所以短暂的受戳不要紧,及时调整自己,让自己努力起来,加油吧,程序员们,注意保护头发!
全部评论
(60) 回帖