小言_互联网的博客

面试复盘3

373人阅读  评论(0)

这次是阿里云的三面(主管面),是意外给我的惊喜。本来我以为二面挂了,毕竟确实在计算机基础知识方面回答地不好,但是这一切从二面后的第三天那个下午发生了改变…

老规矩,先讲面试内容:
简历+基础+开放题

  1. 自我介绍:与之前二面不同的是,这次在自我介绍这一块,前辈就我的经历提了问题或者叫做感兴趣的点。,校园助手app(本科带队做的一个院级项目)的用处?如何在地图上框定目标区域?,公众号运营的经历(作者+编辑)+参与开源项目的成果(Datawhale组织的南瓜书项目)(研究生期间参与的)【这里打个广告:欢迎大家关注“机器学习算法工程师”公众号和Datawhale组织,干货满满】。这些都是个人经历,答案并不唯一,给大家建议就是积极参与各种类型的活动,有更丰富的体验与技能树,算是加分项吧。
  2. 计算机领域的一些基础术语:进程死锁,属于OS基础题,记住死锁发生的常见场景,A进程占有D资源,想申请E资源,但B进程占有E资源,想申请D资源,这就会互相僵持,也即是死锁。更深的知识点:死锁的四大必要条件(资源互斥、请求保持、不剥夺以及环路等待)、如何预防死锁、解除死锁等;NOSQL SQL,属于数据库的题,数据库现在一般分为关系型数据库和非关系式数据库,区别在于前者擅长处理结构化数据,比较精确;后者擅长处理非结构化数据,要求多变,数据类型多样,看重速度与可扩展性,适用于大数据场景。更深的知识点可以有NOSQL常用的场景?NOSQL数据库四大类型是哪些,各自的优缺点?时序数据预测,时序数据是一类按照时间顺序记录的数据,强调的是顺序性,时序数据预测更多的是根据历史记录 t 0 , t 1 , . . . , t n 1 t_0,t_1,...,t_{n-1} 的数据来预测 t n t_{n} 出现某值的概率, P ( y t n y t 1 , . . . , y t n 1 ) P(y_{t_n}|y_{t_1},...,y_{t_{n-1}}) 。这道题属于NLP领域,就我目前的知识储备,有回归模型、数模中的ARIMA模型以及马尔科夫链模型和LSTM(循环神经网络)等ML的知识可以深入。
    参考资料:
    死锁面试题(什么是死锁,产生死锁的原因及必要条件)
    阿里P8架构师谈:NoSQL和SQL的区别,NoSQL的使用场景和选型比较
    动手学深度学习之语言模型与数据集
  3. 开放题:
    一,两个指标相关联,这道题算是概率统计的题,指标抽象地看就是变量,也就是问两个统计变量之间的相似性,一般是求皮尔逊相关系数(这是度量线性关系的统计量,数模中最常见的概念,当时怎么就忘记了,还自创了两个土办法,傅里叶转换与采样的方法),相关系数计算公式是:
    r ( X , Y ) = Cov ( X , Y ) Var [ X ] Var [ Y ] r(X, Y)=\frac{\operatorname{Cov}(X, Y)}{\sqrt{\operatorname{Var}[X] \operatorname{Var}[Y]}}
    这里的协方差非常重要,可以用于衡量两个变量的总体误差。计算方法如下:
    Cov ( X , Y ) = E [ ( X E [ X ] ) ( Y E [ Y ] ) ] = E [ X Y ] 2 E [ Y ] E [ X ] + E [ X ] E [ Y ] = E [ X Y ] E [ X ] E [ Y ] \begin{aligned}\operatorname{Cov}(X, Y) &=E[(X-E[X])(Y-E[Y])] \\&=E[X Y]-2 E[Y] E[X]+E[X] E[Y] \\&=E[X Y]-E[X] E[Y]\end{aligned}
    参考资料:协方差相关系数
    二,如何构建一个疫情预测机器学习系统,具体流程有哪些? 这道题考察工程实践能力(综合能力),问的是机器学习工程落地的完整流程。流程为:理解需求(建模,回归/分类/聚类任务)->数据采集和清洗->特征工程->模型训练、调优->模型诊断->模型融合->上线运行。很明显,第一步需要学会数学建模的能力,也就是数学的能力;第二步,会爬虫与数据库;第三步,无监督学习的各项能力;第四步,有监督学习的各项能力;第五步,可视化以及根据实验结果分析模型、反复验证前面步骤的能力;第六步,技巧,竞赛常用的集成学习大杀器得派上,毕竟机器学习界有个No Free Lunch定理;最后一步,检验收工。其实在这一问中,前辈重点问了两个问题:1.疫情数据如何获取? 讲到疫情数据获取,我当时很自然地想到了用爬虫技术去爬取那些公开处理的数据,如官方报道的新闻,丁香医生、支付宝等,但是前辈问的更深,丁香医生这些平台又是如何获取到的信息呢?现在想来,确切真实的数据最根本的源头一定是来自于政府官方数据,而这疫情数据就是中国疾病预防中心提供的,官方数据,只要是这种在网页展示的,就可以去爬取,通过查看源码,知道该网站并没有反爬的robot协议,所以可以爬取;2.曲线相似性如何计算? 基本等价于刚才的两个指标相关联,都是问相似度的计算,这里进行下扩充,相似度的计算一般都是用距离度量的,有常见的欧式距离、曼哈顿距离以及广义的明科夫斯基距离,还有余弦距离这类只看重方向的距离(这些出发点是数学的几何学),当然还包括上面提到的皮尔逊相关系数(这个出发点是概率统计学)。不过,问题远远没有说的这么简单,前面讲的那些计算相似性的方法在时序数据拟合成的曲线(这才是前辈想问的问题)上或多或少都存在一些问题,其实查阅资料后发现这里面水很深,大家可以查看下面的资料。
    参考资料:机器学习项目完整流程一个完整机器学习项目流程总结常用的相似度计算方法原理及实现如何计算两条曲线的相似性?如何判断曲线之间的相似性离散Fréchet(弗雷歇)距离评价曲线相似度时间序列相似性度量综述

算法题
只有一道题,不过有更明确的要求:20分钟内完成,bug-free。要更细心点。
题目:某个班级在如下分组, 分组里面有着不同的人。
group_a = []
group_b = []
group_c = []

现在需要对分组内人数进行分批
输入参数有两个,最小分批数min_batch_count, 每批最大人数batch_max_num

第一批:要求从每个组里面选出一个人。
剩下的批数:均衡从每个组里面选出。

请给出代码实现
如:
group_a = [‘a1’, ‘a2’, ‘a3’]
group_b = [‘b1’, ‘b2’]
group_c = [‘c1’, ‘c2’, ‘c3’, ‘c4’, ‘c5’]

最小分批数是:2
每批最大人数是: 3 (高优先级)
得出如下结果:
batch_list = [
[‘a1’, ‘b1’, ‘c1’],
[‘a2’, ‘b2’, ‘c2’]
[‘a3’, ‘c3’, ‘c4’]
[‘c5’]
]

我的思路非常简单,就是先按照列的顺序将所有数据排个序,把排序后的结果放到一个新的数组里,然后首先满足batch_max_num去分组,代码整理如下:

class Solution:
    def divideGroup(self, group_list, batch_max_num, min_batch_count):
        def rankValues():
            max_len = 0
            # 得到最长一行数据的长度
            for i in range(len(group_list)):
                max_len = max(max_len, len(group_list[i]))
            for i in range(max_len):
                for j in range(len(group_list)):
                    if i < len(group_list[j]):  # 这一行的数据在当前列下还有,就按照顺序添加进去
                        all_list.append(group_list[j][i])
        if not group_list:
            return []
        all_list = []
        rankValues()
        res = []
        cur = 0
        while cur + batch_max_num < len(all_list):
            res.append(all_list[cur:cur + batch_max_num])
            cur += batch_max_num
        res.append(all_list[cur:])
        return res

if __name__ == '__main__':
    data = [['a1', 'a2', 'a3'],['b1', 'b2'],['c1', 'c2', 'c3', 'c4', 'c5']]
    solution = Solution()
    result = solution.divideGroup(data,3,2)
    print(result)

结语
我对三面的感觉与前两面不同,三面更多地是前辈在带节奏来引导我思考、询问以及回答。就我现在整理的情况来看,也不是说你一定能找到最佳的答案,这是一次考验交流沟通以及专业能力的综合面试。另外,由于这是主管面,所以自身丰富的技能树也是一种打动面试官的途径,比如我爱好写作,参加过公众号运营与开源项目的经历就让前辈很感兴趣。最后想说的是,无论是什么情况,不到最后决不放弃!只要在提升自己,路就还长,找工作的过程心态平稳积极最重要。


转载:https://blog.csdn.net/gongsai20141004277/article/details/104723385
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场