首页 > 非科班硕士转行互联网的秋招之路
头像
Lee_1024
编辑于 2019-12-04 15:18
+ 关注

非科班硕士转行互联网的秋招之路

(回馈牛客,内含超长面经,希望对大家有帮助)

0 - 介绍

​ 本科末流211地球物理专业,硕士985地球物理专业。本科开始接触了一点编程知识,主要是Fortran和C,用来写数值计算和地球物理的算法(面向过程开发),算是有一点儿编程经验吧。

​ 为什么要转行搞互联网?没错,互联网是寒冬,但地球物理更是寒冬啊!油价一直在跌,从来就没有涨过,去石油公司进军工业界是没有啥希望了(想当年美帝最挣钱的专业不是别的,就是地球物理勘探啊,没赶上好时候啊,能怪谁呢,命不好呗);除了石油公司,就业面窄的只剩下去高校混了,奈何咱没那个天资和实力,况且需要博士学历起步,算了也罢!至于为什么选择互联网,而不是选择其他行业?emmm,薪资高是一个重要原因(不得不承认,互联网行业的薪资确实是其他行业的好多倍),其次就是个人对技术算是有一点儿热爱与追求吧。

1 - 准备

​ 课题组有个比我高一级的师兄,也是转互联网了,在我转行的过程中给了我很多的指导和帮助,让我少走了很多的弯路,所以一开始大的框架很清晰 (Thank you, cute boy~)。

​ 主要的知识包括以下几块:

​ 1.主语言(C++,因为之前有C语言开发的基础,就选择了C++;学习的路线无非也就是<<C++ primer>>, <<Effective C++>>,<<More Effective C++>>,<<深度探索C++对象模型>>,<<STL源码剖析>>等)

​ 2.计算机基础(系统、网络,这里我主要看了计算机专业考研教材的那两本书,看的比较仔细;另外关于网络后来又看了极客时间上刘超的<<趣谈网络协议>>)

​ 3.数据结构与算法(这里推荐极客时间上王争的<<数据结构与算法之美>>,然后刷剑指offer和leetcode)

​ 4.数据库(同样推荐极客时间上的两个专栏:陈旸的<<sql必知必会>>和丁奇的<<mysql实战45讲>>,然后再去刷牛客和leetcode上的题)

​ 5.Linux常用命令(这个平时用ubuntu,所以比较熟悉,没有刻意去准备)

2 - 面经

2.1 美团(3面技术 + 1面hr,拿offer并签约)

一面:

项目:(下面的都不写了,基本上问的都差不多)

  1. 为什么想到用优先队列?优先队列如何实现?
  2. 数据库中的事务以及一致性问题;
  3. 数据库的底层实现(B+树,跳表);

数据结构与算法:

  1. 手撕:三数之和(leetcode 15)
  2. 场景:在微博上关注了1k个大v,大v们每人有1w条微博,要想快速的访问前100条,应该怎么做?(排序+堆)

网络:

  1. web页面请求过程:在浏览器中输入一个网址到获得一个页面,这个过程中有用到哪些协议?(DNS + HTTP + TCP + IP + ARP;这个问题基本上可以将所有的网络协议串起来,是一个很好的问题,值得注意)
  2. HTTP报文格式;
  3. 访问一个网址和提交一段代码到网上有何区别?(GET和POST的区别)

Linux常用命令:

  1. 如何查看内存空间?如何查看磁盘空间?(free; df -h)
  2. 如何查看进程?(ps aux)

二面:

数据结构与算法:

  1. 两个队列实现一个栈;
  2. 最长回文子串;(dp)
  3. 查找有重复元素的非降序列中第一次出现的数字;(变形的二分查找)

Linux命令:

  1. 一个文件"ip.txt",有两个字段ip(第一列)和访问时间(第二列),找出访问次数最多的ip;
    awk '{ips[$1]++;} END {for(ip in ips) printf("%s\t%d\n", ip, ips[ip]);}' ip.txt | sort -n -k 2 -r | head -n 1
    

(这道题主要考察了awk, sort, head和管道命令的运用,值得注意,另外还有像统计词频,杀死指定进程等也经常考察)

网络:

  1. TCP四次握手;(需要详细说明)
  2. 拥塞避免机制;
  3. web页面请求过程;

数据库:

  1. 索引:是什么?如何实现?
  2. sql引擎:有哪些?MyISAM和InnoDB的区别?B+树与B树的区别?

三面:

数据结构与算法:

  1. 手撕:堆排序,并分析时间复杂度;
  2. 手撕:链表中环的入口节点,并解释原因;
  3. 二叉搜索树的特征,查找和插入的时间复杂度;
  4. 为什么说二叉搜索树有时会不稳定,如何改进?(可能会退化为链表;改进为平衡二叉查找树)
  5. AVL树大概的调整过程;(左旋右旋)
  6. 红黑树的特征以及大概的调整过程;

网络:

  1. OSI网络分层模型,TCP/IP网络分层模型?(7层;5层)
  2. 为什么TCP/IP去除了表示层和会话层?(没必要搞那么复杂)
  3. TCP与UDP的区别;(TCP实现了可靠传输;UDP不保证可靠传输;)
  4. TCP如何实现可靠传输;(超时重传)
  5. TCP的发送窗口大小如何确定?(拥塞避免)

系统:

  1. IO高并发如何实现?
  2. 线程与进程的区别?
  3. 为什么进程的切换开销比线程大?

面试体验:极好

2.2 拼多多(2面技术 + 1面hr,拿offer,因11116,拒!)

一面:

C++:

  1. 虚函数的实现;(虚表)
  2. 智能指针;
  3. lambda表达式;
  4. C语言如何实现面向对象编程;
  5. struct与class的区别;
  6. struct与union的区别;
  7. struct中的字节对齐机制;
  8. C++四种类型转换符(static_cast, dynamic_cast, const_cast, reinterpret_cast)各自的作用;

系统:

  1. 信号量机制;(整型、记录型、AND型、信号量集)
  2. 锁机制;(互斥锁、自旋锁)

网络:

  1. DNS的查询方式;(递归和迭代)
  2. HTTP与HTTPS的区别;(加密与否)
  3. HTTPS如何实现加密传输;(非对称加密机制)
  4. HTTPS的认证过程;
  5. TTL指的是什么?(Time To Live,生存时间,也是跳数限制)
  6. ARP协议;
  7. traceroute的过程;

数据结构与算法:

  1. 如何实现topK;(堆)
  2. 手撕:数组中连续子数组的最大和;(dp)
  3. 字符串转化为数字;(注意细节处理)

二面:

网络:

  1. web页面请求过程;

数据结构与算法:

  1. 数组中0,1,2分别代表三种颜色的小球,调整数组元素使得相同颜色的小球在一起,要求在时间复杂度为O(n),不能用额外空间;(双指针)
  2. 一个链表,value里面存了公司里所有人的年龄,希望你对这个链表做切分,切分出来的section越多越好,但是有一个条件:同一个年龄的人只允许分配到用一个section中,返回所有section的长度的数组;输入:29 -> 30 -> 31 -> 32 -> 31 -> NULL,输出:[1, 1, 3];(滑动窗口)

面试体验:极好

2.3 网易互娱(2面技术,拿offer,因裁员和游戏技术栈窄,拒!)

一面:

复盘笔试题:(骚操作,可怕~)

C++:

  1. 虚函数的实现;
  2. 构造函数声明成虚函数时,如何调用?(陷阱题,构造函数不能被声明为虚函数)
  3. 类型兼容规则;
  4. vector的push_back()方法的实现;
  5. map, unordered_map的区别;
  6. 左值与右值分别指什么?

网络:

  1. TCP、UDP的区别;
  2. TCP如何实现可靠连接;
  3. socket编程;

系统:

  1. cache一致性;
  2. 虚拟内存与物理内存的区别;

游戏设计题:

  1. 吃鸡中,如何实现游戏毒圈的缩小方法;(极坐标+随机数)

智力题:

  1. 海盗分金;(博弈论)
  2. 三个火枪手;(博弈论)

二面:

没有聊实质性的技术问题,主要聊了游戏中常用的计算机图形学和随机洗牌算法;

面试体验:一般

2.4 华为(2面技术 + 1面hr,软开技术落后,加班多,251,拒!)

一面:

复盘笔试题:(又来一波骚操作)

数据结构与算法:

  1. 手撕:两个栈实现一个队列;

编译原理:(不懂)

二面:

数据结构与算法:

  1. 手撕:数据流的中位数;(两个堆)
  2. 手撕:二叉树的直径;(递归)

C++:

  1. 什么是纯虚函数?
  2. malloc(0)会怎么样?(脑子有坑?正常人都不会这样做吧?)

系统:

  1. 什么是死锁?

面试体验:一般

2.5 海康(2面技术 + 1面hr,技术落后,加班多,钱少,拒!)

一面:

  1. 双向链表的插入;
  2. 手撕快速排序;

二面:

主要聊项目,没啥实质性的技术问题;

面试体验:一般

2.6 头条(1面挂)

一面:

C++:

  1. C++中哪些函数不能被声明为虚函数?(普通、内联、构造、友元、静态)
  2. 构造函数为什么不能被声明为虚函数?(派生类的对象在基类构造函数调用前还不存在)
  3. 友元函数可以被声明为虚函数吗?为什么?(不能,友元函数不是成员函数,不能被继承,不支持运行时多态)

网络:

  1. 在浏览器中输入一个网址,服务器是如何找到你的主机的?(不会)

数据结构与算法:

  1. 手撕:字符串中回文子串的数目;(dp)
  2. 手撕:给你一个字符串,返回所有它能表示的IP地址;(回溯)
  3. 有10亿个数,如何找出其中最小的100个数;(堆)
  4. 说说堆排序的过程,建堆的时间复杂度是多少;(建堆+调整;O(n))

面试体验:不佳(面试官态度叼的一批,果然是宇宙条)

2.7 360(1面挂)

一面:

数据结构与算法:

  1. 重拍数组中的元素,使之组合起来能得到一个最大的数字;(重新定义比较器)
  2. 剪绳子;(dp或者贪心)

数据库:

  1. MySQL的引擎有哪些?区别?底层实现?索引?

场景分析:

  1. 1w人抢购100件商品,如何实现?(高并发)
  2. web漏洞有哪些?

面试体验:极差(远程面试的,面试官那边像菜市场一样,能听见个鬼,完全没心情面试)

2.8 旷世(1面挂)

一面:

系统:

  1. 线程与进程的区别?
  2. 进程什么时候由用户态转化为内核态?(系统调用、中断、陷入)

网络:

  1. TCP连接断开时为什么需要一个timewait状态?

算法:

  1. 找出两个序列中的最长公共子序列;(dp)

面试体验:一般

2.9 远景(2面技术 + 1面hr,面完挂)

一面:

C++:

  1. new和calloc的区别?
  2. 如何实现多态?
  3. 基类的虚函数的指针在派生类的虚标中吗?为什么要这样做?

算法:

  1. 括号生成;(回溯)

二面:

系统:

  1. 内核态与用户态的区别?(安全性)

网络:

  1. A向B发送一个消息,如何保证B正确收到?(可靠传输,超时重传)

算法:

  1. 两个并发线程T1和T2,分别只能打印A和B,要求写一段代码,可以一直打印序列"AABBAABB..."(不会)

面试体验:极差(二面面试官全程喷脏话,qnmlgb)

2.10 百度(2面挂)

一面:

主要聊些基本的概念问题,没有什么值得写的技术问题;

二面:

很全面的考察了计算机各方面的知识,由于非科班出身实在是短板太多,挂的不冤;

面试体验:极好

2.11 阿里(别问,问就是挂!从春招挂到秋招)

一面:(春招)

C++:

  1. vector和list中,删除末尾的元素,其指针和迭代器如何变化?若删除的是中间的元素呢?

算法:

  1. 有两个很大的文件,如何找出其中相同的行?

系统:

  1. 管道命令如何实现?

二面:(春招)

算法:

  1. 手撕:二叉树的后序遍历,递归和非递归;

场景:

  1. 两个很大的矩阵相乘,如何并行实现?(分块)

一面:(秋招)

数据库:问了很多关于sql的基本语法;

算法:手撕冒泡排序,并分析时间复杂度;

二面:(秋招)

算法:

  1. 海量数据排序;(堆,归并)
  2. 最长回文子串;

Linux命令:

  1. 写脚本杀死指定名称的进程;
    ps aux | grep ${processName} | grep -v grep | awk '{print $2}' | xargs kill -s 9
    
    
    

3 - 总结

  1. 每次面试都能发现自己的不足,并立马补救,就像是打怪升级,越战越强;
  2. 算法题很重要,面试手撕代码写不出来基本上就gg了,其他的问题还能稍微宽容点;

更多模拟面试

全部评论

(47) 回帖
加载中...
话题 回帖

相关热帖

历年真题 真题热练榜 24小时
技术(软件)/信息技术类
查看全部

近期精华帖

热门推荐