旷视春招正式岗后端三面

面经攒人品,这边遇到的旷视面试官都人超好,赞一个。
因为这段时间差不多一直在忙,毕设中期汇报和确定读研导师的事情,八股忘的有点多了,旷视的三面也一直从4月初拖到现在。
这轮技术面问的8股和一些场景。
1.见面先聊聊个人的情况,有关于读研还有工作的一些事情。
2.对于100万个int型数据,是数组快还是链表快?数组快为什么?从cache,缺页中断这些方面回答。
3.对Linux熟悉吗?常用哪些命令啊?
4.子进程可以访问fork之前的一些数据吗?只要没用exec加载其他二进制程序,就可以,因为Linux,里面是读时共享,写时复制。
5.进程与线程的一些区别。
6.对于一个聊天室,一方面要保持发言的工作,另外方面需要保存一个小时内的消息记录。问是该选多进程还是多线程?这个,我是从进程线程开销,以及多进程和多线程安全性回答的,回答的不是特别好,希望评论区里有好兄弟说一声。
7.手撕代码
没找到是leetcode哪一道题,大意是给你一个数组,里面N个数字,要求你返回一个由这个数组里面的数字首尾拼接起来的最大的数字字符串。例如{12,23},应该返回2312。这道题我是用的sort函数解决,cmp设置为返回ab拼接起来>ba。

这道题因为做过,所以做出来的速度太快了,以至于后面又给了我一道比较棘手的场景,不过面试官一步步的都有引导。

你的内存只有4~6GB,然后有一个32GB的无序int数据,要你找出他们的中位数。

这道题我一开始是受到leetcode 295原题的影响太严重了。
我是想着把这32GB分成8块,每块4GB,分块用两个优先队列来解决,每次排除最极端的两块。但这个可能存在极端情况。
之后又想到说是用二分查找,找到这些数据的最大值,最小值,然后进行二分,但是二分的话,因为是无序数据的缘故,你需要每个都数一遍,看一下这个数字是不是中位数,也比较麻烦。
正确的做法应该是,桶排序,把最大值最小值之间划分 N个int的数据区段,初始化为N个桶,可以理解为N个文件,然后把每个数字记录到每个桶里。
当32GB全遍历一遍,再从首尾的桶开始往中间夹逼,计算数据量,看中位数应该是在哪一个或两个桶里面,再把他们用之前的优先队列或者是排序的方法找到中位数。#2022春招##旷视#
全部评论
100w请问怎么具体回答呢
点赞 回复 分享
发布于 2022-06-07 19:10
你是工作还是读研呀,咋还面正式岗
点赞 回复 分享
发布于 2022-05-03 17:49
好像是一个面试官 我是4.14面的
点赞 回复 分享
发布于 2022-04-21 20:55
跟我实习一面是一个面试官!100w个整数那个题没往操作系统方面想,后面也问了写时复制当时没复习😂一面挂哈哈,不过问得确实很有水平
点赞 回复 分享
发布于 2022-04-19 14:51

相关推荐

1.自我介绍2.介绍一下mcp, skills3.了解react哪些状态管理库4.对话是sse还是什么?是用fetch还是EventSource?5.ts中的any 和 unknown讲一讲6.是直接用组件库的组件还是自己封装了一些别的7.代码输出题1function main() {{var a = 1let b = 2}console.log(a);console.log(b);}main()console.log(a);8.什么是块级作用域 全局作用域 函数作用域9.代码输出题2for (var i = 0;i < 5;i++) {setTimeout(() => {console.log(i);}, 100);}10.代码输出题3for (var i = 0; i < 5; i++){function printText(temp) {setTimeout(() => {console.log(temp);}, 100);}printText(i)}11.代码输出题4for(var i = 0;i < 5;i++){function printText(temp) {var temp = isetTimeout(() => {console.log(temp);}, 100);}printText(i)}12.代码输出题5for(var i = 0;i < 5;i++){function printText(temp) {setTimeout(() => {var temp = iconsole.log(temp);}, 100);}printText(i)}13.点击控制台输出题export default function App() {const [count, setCount] = useState(0)console.log('render',count)return (<div><h1>{count}</h1>{setCount(count + 1)setTimeout(() => console.log('setTimeout', count), 1000)}}>+1</div>)}//这个组件点击按钮后,控制台的输出顺序和值如下:// 1. render 1 (组件重新渲染, count 更新为 1)// 2. setTimeout 0 (1秒后输出,注意这里是 0 而不是 1)14.算法:给有序数组arr = [-4, -1, 0, 3, 5],返回平方后的排序// 有序数组平方后排序const arr = [-4, -1, 0, 3, 5]function solution(arr) {const len = arr.lengthconst result = new Array(len)let left = 0let right = len - 1let index = len - 1while (left <= right) {if (arr[left] * arr[left] > arr[right] * arr[right]) {result[index] = arr[left] * arr[left]left++} else {result[index] = arr[right] * arr[right]right--}index--}return result}console.log(solution(arr));15.反问
查看14道真题和解析
点赞 评论 收藏
分享
02-07 12:06
已编辑
华侨大学 测试开发
最近看到很多 92 的,甚至是硕士,开始往测开赛道卷,说实话有点看不懂。先把话说清楚,大厂里的测开,绝大多数时间干的还是测试的活,只是写点自动化脚本、维护测试平台、接接流水线,真正像开发一样做系统、做架构、做核心平台的测开少得可怜,基本都集中在核心提效组,而且人很少,外面进去的大概率轮不到你,我想真正干过人都清楚。很多人被洗脑了,以为测开也是开,和后端差不多,只是更简单、更轻松、还高薪。现实情况是,测开和开发的职业路径完全不一样。开发的核心是业务和系统能力,测开的核心是稳定性和覆盖率,前者是往上走,后者天花板非常明显。你可以见到很多开发转测开,但你很少见到干了几年测开还能顺利转回开发的。更现实一点说,92 的高学历如果拿来做测开,大部分时间就是在做重复性很强的杂活,这种工作对个人能力的放大效应非常弱。三年下来,你和一个双非的,甚至本科的测开差距不会太大,但你和同龄的后端、平台开发差距会非常明显。这不是努不努力的问题,是赛道问题。所谓测开简单高薪,本质上是把极少数核心测开的上限,当成了整个岗位的常态来宣传。那些工资高、技术强的测开,本身就是开发水平,只是挂了个测开的名。普通人进去,99% 做的都是项目兜底型工作,而不是你想象中的平台开发。测开不是不能做,但它绝对不是开发的平替,也不是性价比最优解。如果你是真的不想做开发,追求稳定,那测开没问题。但如果你只是觉得测开比后端容易,还能进大厂,那我劝你冷静一点,这只是在用短期安全感换长期天花板。有92的学历,如果你连测开这些重复性工作都能心甘情愿接受,那你把时间精力用在真正的开发、系统、业务深度上,回报大概率比卷测开要高得多。想清楚再下场,别被岗位名和话术带偏了,就算去个前端客户端也是随便占坑的,测开是一个坑位很少赛道,反而大面积学历下放,不用想也能知道会是什么结果,我想各位在JAVA那里已经看到了
小浪_Coding:工作只是谋生的手段 而不是相互比较和歧视
点赞 评论 收藏
分享
评论
6
14
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务