【美团算法工程师一面面经】拔凉拔凉的凉经
又一场重挫,应该是秋招以来面过的最难的一场了。我是数学加统计的背景,主要的强项都集中在统计机器学习上,今天问的一连串问题把我问懵了,预计有95%的概率要凉。
自我介绍完,屏幕上直接给了两道算法题,一个是给二叉搜索树插入节点,然后逐个返回父节点的值;另一个是普通的二叉搜索,都算比较常规的题,很快就做出来了。
接下来开始了我直出冷汗的场景:
-
SQL 熟悉吗?讲一下 SQL 引擎
只了解比较简单的查询操作,不了解 SQL 引擎
-
那了解 Redis 吗?
不了解,仅限于听说过…
-
那你熟悉网络吗?
是神经网络还是计算机网络?
计算机网络
不了解(本科后悔没选这门课)
-
你熟悉操作系统吗?
不熟悉…只了解一点儿多线程和多进程
那你讲一下多线程和多进程吧
(老生常谈的问题了)这个倒是回答出来了
线程之间怎么通信,进程之间怎么通信,python 的多线程有用吗?
互斥锁(我不确定回答的对不对);队列和管道;python 有 GIL,不过有用吧(好像应该还是没用)
-
你写一个单例模式吧
(内心OS:啥叫单列模式?)
(面试官估计看出来我不知道了)你知道设计模式吗?
不知道
-
你知道 python 的垃圾回收机制吗?
(这个我可算知道了)采用引用计数器的方法,当引用计数器为0时,内存会进行回收。
-
创建对象时 new 和 init 有什么区别?
(我压根都不知道还有 new 方法)不知道
这里附上一段博客里摘来的解释:
-
new是在实例创建之前被调用的,因为它的任务就是创建实例然后返回该实例对象,是个静态方法。
-
init是当实例对象创建完成后被调用的,然后设置对象属性的一些初始值,通常用在初始化一个类实例的时候。是一个实例方法。
-
-
python 的单下划线和双下划线有什么区别?
这点我凭印象瞎扯了几点,还是再引用一段好了
python中前置单下划线、后置单下划线、前置双下划线、前后置双下划线
-
前置单下划线"_name":变量前的单下划线表示表面上私有。前置下划线的变量和方法代表这个变量和方法最好是只在内部使用。
-
后置单下划线"class_":没有特殊的含义,只是为和python关键字区分
-
前置双下划线"__name":真正的私有。可以使该属性变量或方法私有,不会被派生类区继承,仅能类自己使用。可以避免派生类和父类属性方法名称的冲突。
-
前后置双下划线"__init__": 这样的方***在类或对象的某些事件触发后执行,例如对象的实例化会执行init()方法,属性初始化。
-
问到这里的时候心态已经崩了,几乎所有问题都是不会三连:【不知道】【不懂】【不太了解】…
接下来开始场景题,很符合具体业务,场景题大意上是统计学上的变点选择问题。面试官和我聊方法,聊优化,聊特征,聊模型,我终于在这一阶段掌握了话语权。