2020 阿里巴巴面经 计算机图形-前端工程师 暑期实习(面向21年毕业)
(本来投递&面试的是算法工程师,但最后发不了算法的title,改成了前端)
测评就不说了
笔试 两个题
给1e5大的数组,问数组中有多少 有价值的数。一个数a是有价值的意思是 数组左边比a大的数中最小的那个数 是 数组右边比a小的数中最大的那个数 的倍数。 只过了70%,应该用二叉查找树(set或者map)
给一个 的非负矩阵,,问从上边界走到下边界的最短路径(路径上的数字和最小)。每次只能上下左右走一个格子。 迪杰斯特拉堆优化
和师兄交流的时候,他说笔试的代码&通过情况都能看到,是不是抄的也能一眼看出来。
一面
说一下链表操作的时间复杂度:查找、查询、删除、增加。和顺序表的区别。
有序链表不能二分查找?(我先前答了一个有序顺序表能二分,有序链表不能二分)
跳表可以二分
链表插入的复杂度什么时候是O(1)
说一下快排
什么情况下快排的复杂度退化 从大到小的数组
怎么避免退化
有没有比快排更快的排序
桶排(统计排序)可能比快排快, 但是受限制:数据中的最大数、桶的个数、数据的最大位数等
红黑树了解吗
stl里用红黑树的结构 map set
红黑树的查询复杂度
怎么存重复率高的代码,补充:代码中, 有很多变量名很长,又出现多次,怎么省空间存储。
map+下标存储(类似bitmap里的调色板方法)
还有没有优化方法?假设每个变量名本身就很长了,而且变量间有很多重复的前缀。
改进:用变量名建字典树。map存值的时候,不存原变量名的字符串,改存该字符串在字典树中的位置。
(下来问了下同学,用霍夫曼编码,还可以比map更省空间)
说一下Java和c++的不同吧 (看到我简历有写java)
用过go 、rust没?
项目里遇到过的最大的问题,怎么解决的
acm比赛中遇到的问题,你的角色是
...,提了一个被if(x=2)坑了的经历
if(x=2) 这种错误的避免方法?
我:不知道
面试官:把2放到"=="的左边
美赛 干了啥
二面
链表的插入和查找的复杂度
说一下链表反转
要求空间O(1)
链表反转中,涉及三个指针的每一步转换都说出来。
二叉平衡查找树怎么实现平衡
散列表?
散列表添加时冲突的解决
散列表在vector下的删除操作复杂度
能不能优化删除操作
能不能有其他的结构解决散列冲突,并且删除更快
线程进程?
线程的通信、进程的通信
互斥锁和信号量关系?
互斥锁是 信号量为1 特殊信号量
散列表的互斥锁?
能不能优化,提示:散列值可以再散列
相当于分组加锁。(结束后查了一下,这个问题是java的ConcurrentHashMap的相关内容)
说一下sql的事务
项目,科研项目,海报的处理部分
怎么实现识别
怎么实现抠图
遇到的问题
吹了一波自己的 三分调参法, 和grid调参作比较,复杂度。
一个图片给它放大k倍,问怎么处理放大后出现的空白部分。
双线性插值
acm里你的角色
python爬虫项目
爬虫的速度如何,补充:是不是并行下载的?
反问环节:推销一波自己的美赛F奖。问了一下项目信息,有没有宣传网页
三面
mfc中的下拉列表你准备怎么实现
你会添加什么功能
考虑一个放到网络上的模型,会受到什么攻击?
syn攻击、dns污染
有没有非网络技术上的攻击,就是对模型本身的攻击?
假数据 脚本上传的污染数据
怎么应对?
分两部分,一个是检测,监测异常访问频率 或者 异常结果:二分类问题,svm跑一波。如果不知道类别,先聚类,knn
一个是处理:防爬虫的那一套。记录ip、cookies,限制访问,返回假数据
说一下深度全连接神经网络的调参
怎么处理神经网络的过拟合
少学一点的办法:学习率逐步下降,提前结束训练,更少的层,更少的感知机。
把过拟合加入指标的办法:交叉验证,范数(径向基神经网络)。
怎么防止新来的错误数据对原有模型进行特别大的改变,怎么防数据污染,蓄意破坏
操作系统的内存管理
说一下操作系统进程调度用到的算法
你来设计一个分布式系统
后面 主要问项目 简历里面挨个问
问题主要是 你的角色是什么、遇到的问题、怎么解决的
反问 项目主要工作内容
四面
说一下计算机图形学吧
遇到的困难
说了下对mipmap的思考,说了一个自己想的前缀和的替代办法。
有没有图形学的相关项目
是不是经常写题、刷题
有没有尝试用数据结构去加速图形学算法
有没有用过图论的数据结构去加速图形学算法?
后面是项目
项目中,遇到的最难的项目问题 和 如何解决的
有没有其他的项目想介绍的
说了最近的小组项目, 远程会议、用github同步代码、写文档
全部评论
(4) 回帖