专业背景:本硕985 工科转码
注:以下内容只记录我的答题过程,以供自己反思和同学参考,答案很可能有错误,如果有同学发现了错误还请指出来,我们一起讨论、互相学习!
一、自我介绍
过程如下:
- 介绍了本科专业以及学过的一些计算机技术相关课程和知识,说明我具备计算机基本理论基础;
- 提到本科做过的一个较大的竞赛,说明我的代码阅读、编写和调试能力得到锻炼;
- 介绍硕士专业以及研究方向(人工智能方向),顺带提了科研项目;但明确表示我的职业规划是打算在后端开发方向深耕并在研究生期间做了一些相应准备;
- 表达对加入拼多多学习和工作的期待。
二、基础知识问答
面试官问的问题比较随意,问题也不多,大概是顺着一个问题纵向往下问:
- 问:说说“进程”的概念?
答:进程是运行中的程序,程序从可执行文件被加载到内存中开始运行,即成为一个进程,这是进程的本质;
进程是资源分配的基本单位;
每个进程在内存中都有一个进程控制块对应,接受操作系统的调度,这是进程调度的形式。 - 问:你刚刚提到的进程控制块具体是什么,它是由什么组成的?
答:进程控制块,全称是Process Control Block,它保存了一切与进程运行状态相关的信息,包括程序计数器、运行时栈、CPU寄存器值以及文件描述符等相关资源,它代表进程接受操作系统的调度。 - 问:进程控制块保存在什么地方?
答:从物理上看,它可能存在于两个地方,一处是内存中,另一处是外存中的swap空间,当进程被挂起或者内存空间不够时,进程控制块可能会被置换到swap空间中去;
从逻辑上看,它会来往于各个队列之中,例如正在运行时在ready queue中等待调度器的唤醒,例如在某个I/O的waiting queue中等待获得访问I/O资源的权限等等。 - 问:进程的内存空间叫什么?
答:叫虚拟内存空间 - 问:虚拟内存空间有多大?
答:由处理器架构决定,64位处理器的虚拟内存空间是2^64字节,32位处理器的是2^32字节。 - 问:是处理器还是操作系统?64位处理器也可以运行32位操作系统吧?
答:是的,我忽略了这个问题,进程的虚拟内存空间是受操作系统位数决定的。 - 问:进程的虚拟内存空间由哪些部分组成?
答:高位一段或低位一段是操作系统内核空间,由操作系统决定,剩下的空间包括代码段、静态存储区、栈帧、常量存储区等等。 - 问:栈和堆的区别是什么?
答:堆有两个意思,一种是指一种数据结构,与二叉树类似,另一种是指操作系统维护的一块内存区域,当进程需要申请动态内存时,操作系统将从堆上为它分配;而栈是指一种向上生长的数据结构。 - 问:进程里的栈是如何生长的?
答:两种方式:第一种是声明局部变量时,向上生长内存存放局部变量,当其声明周期结束时弹出,第二种是调用子函数时,向上生长作为子函数的入口和返回值存放地址,当调用结束返回时弹出。 - 问:那如果调用的子函数中声明了长度动态变化的数组呢,该如何弹出,你如何知道该弹出多少空间?
答:抱歉,这个问题没有想过,我回去之后会学习。 - 问:考几个数据库的问题吧,有一个记录为千万级的表,现在要向其中插入一列,而内存有限,你会如何解决这一问题?
答:首先要遍历每一行(写了个select * from items)再构造新列的值与之一一对应,然后将两者拼接起来。
问:你这样内存无法承担,肯定会瞬间崩溃。
答:抱歉,这个问题我以前也没有想过,我对数据库了解得还比较浅,目前的掌握情况只局限于数据库基本概念和MySQL语法,此类场景没有遇到过。
问:可以理解,你们平时应用到数据库的场景不多。
三、手撕代码
首先出的题,是给定一个数组,找出第k个最大的值。
我首先想出来的是排序,面试官说如果用排序,这题就没意义了,想想有什么时间复杂度更低的办法。
我没想出来。
面试官提示我与快速排序有关。
我忘了快速排序的具体过程,因此直说出来。
于是面试官给我换了第二道题。
第二道题是求二叉树的最大宽度。
我提出了两种思路,最终确定了第二种层序遍历并标记每一个节点在其所在层相对位置的方法,面试官表示认可。
于是用C++语言实现之,花的时间比较长,面试官中间提出了几处质疑,我解释和改正之后面试官表示认可,并且会在面试结束之后再运行一遍检测是否正确。
后来回顾,想起来忘了delete 用new申请的空间了,会造成内存泄露问题,不知道面试官会不会很在意。
四、应聘者提问
我问了三个问题:
- 问:拼多多的服务端的具体业务包括哪些?
答:视具体的组而定 - 问:拼多多服务端的技术栈是什么样的?
答:视具体的组而定 - 问:请问我刚刚解题的代码在您的角度看来有哪些不足之处或者可以改进之处吗?
答:代码风格比较差
问:具体是指?
答:struct 定义得不好,以及变量命名不够好。
我:的确如此,这一点我以后会认真注意。
这是拼多多拼越计划服务器开发的二面过程,由于第一道手撕代码题没做出来(忘了快速排序),而且第二道题的代码我反思出可能会有一些小问题,不知面试官是否会很介意,再加上数据库相关知识懂得太少,因此总体表现称不上很好。
但其他题目都回答得比较顺利,因此感觉也还不错。
刚刚接到三面通知,看来二面也通过啦,期待三面顺利~
全部评论
(6) 回帖