2018春季头条实习面试总结

3月1号投了今日头条深圳的后台开发岗位,第二天HR就打电话商量面试时间,定在了3月6号下午。

到达之后,在前台签到,签到本可以看见在我之前有几个人也是去面试的,但是人数不多。签到之后,HR安排了一小间会议室,让我在里面等面试官,不久就进来一位面试官,一对一面试。

首先是给了一张试卷,上面有仨算法题,给10分钟的时间,选一题得出思路,然后10分钟之后给他讲思路。题目难度都不算大,大约在中等題的难度。因为可能他们还会使用同样题目面试,所以这里就不总结算法题了。10分钟之后,面试官进来,我讲了思路,他的反应我感觉还行。然后给我30分钟,用纸和笔写下代码。(这里我写的是python,因为他们岗位要求python或者golang,但是他看见我写python的时候愣了一下然后说了一句“python也可以,不规定语言”,似乎python不是回答的首选语言)

然后就开始问问题,都是比较基础的题,我把回忆到的题归纳了一下。顺序不一定是当时面试顺序。

有哪些排序算法

这个是算法里面基础知识,当时回答了冒泡、插入、选择排序,快排、归并排序,堆排序。回来查一下,排序还有希尔排序、计数排序、桶排序、基数排序等等排序算法。这次没有问到其中哪种的具体实现。

linux的常用命令

问了查看内存占用的命令和创建文件夹的命令。就是考察linux的常用命令,看看有没有相关经验。可惜当时一个紧张死活想不起来查看内存命令是哪个了,而文件管理相关我都是用winscp于是也想不起来了,于是面试官补问了删除的命令,这个我终于答上了。(毕竟rm是个梗)所以linux的常规命令还是需要熟悉下记住的。

僵尸进程、孤儿进程

在类UNIX系统中,僵尸进程是指完成执行(通过 exit 系统调用,或运行时发生致命错误或收到终止信号所致)但在操作系统的进程表中仍然有一个表项(进程控制块PCB),处于”终止状态”的进程。—-wikipedia

在操作系统领域中,孤儿进程指的是在其父进程执行完成或被终止后仍继续运行的一类进程。—-wikipedia

孤儿进程会被init进程收养善后,没有危害。如果僵尸进程过多,则会大量占用系统的进程号,导致不能创建新进程。可以通过kill父进程,让僵尸进程被init进程收养善后。

附相关的知识“守护进程”:

在一个多任务的电脑操作系统中,守护进程英语:daemon/ˈdmən//ˈdmən/)是一种在后台执行的电脑程序。此类程序会被以进程的形式初始化。守护进程程序的名称通常以字母“d”结尾:例如,syslogd就是指管理系统日志的守护进程。

通常,守护进程没有任何存在的父进程(即PPID=1),且在UNIX系统进程层级中直接位于init之下。守护进程程序通常通过如下方法使自己成为守护进程:对一个子进程运行fork,然后使其父进程立即终止,使得这个子进程能在init下运行。这种方法通常被称为“脱壳”。

系统通常在启动时一同起动守护进程。守护进程为对网络请求,硬件活动等进行响应,或其他通过某些任务对其他应用程序的请求进行回应提供支持。守护进程也能够对硬件进行配置(如在某些Linux系统上的devfsd),运行计划任务(例如cron),以及运行其他任务。—-wikipedia

进程间通讯方式
  1. 管道(pipe),流管道(s_pipe)和有名管道(FIFO)
  2. 信号(signal)
  3. 消息队列
  4. 共享内存
  5. 信号量
  6. 套接字(socket)

进程间通讯主要是这6种通讯方式,要注意的是,pipe(无名管道)只能在父子进程之间通讯,要在任意两个进程直接通讯的话需要有名管道(FIFO)

TCP为什么需要三次握手和4次分手

这个据说是面试中的经典题,网上也有很多答案,此处就不贴了。

cookie和session的区别

cookie 和session 的区别:

1、cookie数据存放在客户的浏览器上,session数据放在服务器上。

2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗
考虑到安全应当使用session。

3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
考虑到减轻服务器性能方面,应当使用COOKIE。

4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。

5、所以个人建议:
将登陆信息等重要信息存放为SESSION
其他信息如果需要保留,可以放在COOKIE中

(以上摘自http://www.cnblogs.com/shiyangxt/articles/1305506.html)

也有其它相关的比较详细的解答可以参考https://www.zhihu.com/question/19786827

HTTP请求报文的结构

一个HTTP请求报文由请求行(request line)、请求头部(header)、空行和请求数据4个部分组成,下图给出了请求报文的一般格式。

典型的请求头有:

User-Agent:产生请求的浏览器类型。

Accept:客户端可识别的内容类型列表。

Host:请求的主机名,允许多个域名同处一个IP地址,即虚拟主机。

附相关内容:

  • 200 OK:客户端请求成功。
  • 301 redirect: 301 代表永久性转移(Permanently Moved)。
  • 302 redirect: 302 代表暂时性转移(Temporarily Moved )。
  • 400 Bad Request:客户端请求有语法错误,不能被服务器所理解。
  • 401 Unauthorized:请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用。
  • 403 Forbidden:服务器收到请求,但是拒绝提供服务。
  • 404 Not Found:请求资源不存在,举个例子:输入了错误的URL。
  • 500 Internal Server Error:服务器发生不可预期的错误。
  • 503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常,举个例子:HTTP/1.1 200 OK(CRLF)。
数据库是怎么样做索引的

应该是考察B树和B+树和相关内容,此处可以参阅

http://blog.csdn.net/suifeng3051/article/details/52669644

有哪些数据库引擎

面试官让我说出我记得的数据库引擎的名字,应该是考察有没有了解不同数据库引擎特征和区别。现在总结了一下主要这几种:

  • ISAM:执行读取操作的速度很快,而且不占用大量的内存和存储资源。不支持事务处理,也不能够容错
  • MYISAM:MYISAM是MYSQL的ISAM扩展格式和缺省的数据库引擎。强调了快速读取操作。

  • HEAP:允许只驻留在内存里的临时表格。驻留在内存里让HEAP要比ISAM和MYISAM都快,但是它所管理的数据是不稳定的,而且如果在关机之前没有进行保存,那么所有的数据都会丢失。
  • INNODB和BERKLEYDB:比ISAM和MYISAM引擎慢很多,但是INNODB和BDB包括了对事务处理外来键的支持

更详细可以参考:http://www.cnblogs.com/0201zcr/p/5296843.html

数据库单个表数据量量多大时需要做分表

先是问了我们项目的数据库数据量一般有多大,然后就问到了这个问题。在数据量多大的时候,查询速度会明显下降,我们需要进行分表操作。这个问题我至今仍不能确定答案。有说法是百万条到千万条的时候需要做分表。

计算字符串种类

面试最后的一题,算法题。有一个很大的TB级的文件,里面是一个一个字符串,用空格隔开。问里面有多少种字符串。例如aab和aab是一种,aab和aac是两种。使用一个分布式的系统解决。当时我提出使用map-reduce,一开始说按照字符串首几位分发,被提醒后改为按SHA1后的首几位分发,然后reduce的过程当时说得不太清楚,就说把种类加起来就可以了(已经被问到一愣一愣了)。现在觉得应该在每个系统维护一个哈希表,然后就可以在O(1)的时间内对单条记录计算种类累加了,最后表有多少项就是有多少种,把所有的加起来就是总的种类数了。此题可能有更好的解法。

面试小结:

面试问的基本都是计算机基础题,算法、操作系统、计网、数据库系统。然后还会问到项目的内容和项目相关的问题。可见基础在面试里面的比重非常的大,项目经历也要有,会根据项目经历问一些题目。没有问到python相关的问题,面试前几天把蛇书《python高性能编程》过了一遍,白看了。本来预计他4月才面试,才刚刚开始复习课本,没想到面试来得猝不及防,基础题回答得一塌糊涂。问完后他说找下一个面试官,然后出去没一会就回来了,说下一面面试官不在。当时就知道凉了。拒信在面试完第二天中午就发过来,HR一直都很有效率。。。

 

 

 

 

 

 

《2018春季头条实习面试总结》上有1条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注