OCI面经---Coding篇
简单的一道题目,就是垂直访问树。给一个二叉树。竖着优先访问树。
然后就是一道最基础的 BFS 题目,用 map 的形式给一个 friends 的 graph,找到一个人的 level1 的 friends, level2 的 friends 并打印。时空复杂度也都没啥要求。
20分钟写完了算法,然后写 test case的时候要写好多个 friend array,其中一个地方复制错了,导致最后的结果一直跑不对。我就和对面一起对着我的算法 code 找了20分钟的 bug…最后才找到这个很无聊的 bug…
求BST中与target最接近的K个Nodes.
int closestKNodesInBST(TreeNode root, double target, int k)
用的Queue level order traversal + maxHeap of K size 做的。时间复杂度是O(nlogk)但好像不是最优解,三哥也让我写代码了。LC272
其实用Inorder traversal 读出所有nodes 找出 最接近的node 然后 左右指针找到K个就行了 时间复杂度 O(n) 空间 O(n)
要继续优化空间的话要用 bst predecessor 和 bst successor 找出 closest 前的K个predecessor和后K个successor然后双指针进行比较,时间复杂度O(n) 空间 O(k)
VO:
- Manager阿三大姐,25分钟BQ,一道system design,a book library system, 要求有存书,读书,修改书信息,分享书的api,define了下data schema 和components,讨论了一下如何generate data table的unique ID的方法,需不需要加cache,用哪些data store
2.国人小哥才工作了一年左右,放水出了一道常见题 蠡口饵潵刘,无followup
3.白人小哥,蠡口而零鳞…秒掉后出了一道followup 类似于蠡口遛酒撕,大概是要match到island的shape,比如L shape, vertical, horizontal,然后输出一个map<Shape, count of Shape>的map
4.工作多年的阿三大哥,蠡口而拔遛,简单的BFS,followup 问如果在real world scenario 中input数据很大怎么办,就随便扯了些mapreduce的东西,
5.第五轮 Bartender纯BQ, project 挖的很细,问难点在哪,具体做了哪部分,API里具体怎么实现了,为什么要做这个decision,扯到后面还是有点累。
OCI店面:
leetcode448 41下面有类似的解法
问:数组长度为n,大小范围都在[1,n],找出数组中没有出现过的数。
答:新建数组遍历原数组,并计数,返回所有计数为0的值。
问:时间空间复杂度
答:O(N)
问:时间复杂度可以优化吗?
答:时间复杂度不能优化了,因为无论怎么样都需要遍历数组。
问:空间呢?
答:可以,遍历数组,用交换去做 (LC448 41下面有类似解法)
然后实现了一下。跑了一下test case。
follow up:
找没有排序过的数组的中位数
答:QuickSelect (LC347 TopK)
问:时间复杂度,why
大致答了一下。
最后实现了一下。
不太像店面的问题:
-
给一个list of item prices, 比如 [{“Iphone”: 100}, {“Xiaomi”: 50}, {“Iphone”: 90}],输入一个item的名称,让返回这个item的总价,就是扫一遍求和。
Followup: 1) item 不区分大小写,2) 用户输入有typo怎么办?edit distance (不用自己实现),3) list太大怎么办?用stream慢慢读。 -
跟马内机聊天,主要是问我做过的项目,我干了些啥,以及介绍他的组,然后还有些behavior questions。
-
系统设计:设计一个PAAS 系统,可以Create VM, 还有get creation status。
-
行为问题和一个练手速的算法题。实现类似redis的功能,就是1. set(key, value). 2. list_push(key, value) 。 value可以是string,也可以是list of string。. 3. delete()。4/5不记得了,反正也类似。面试官说目前为止没有完成4,5的。
行为问题有1. 收到过的最tough的feedback
针对1(2)
用户不小心把“iphone”打成“iphon”或者“iphonr”了,我说用edit distance解决。首先判断信的item的名字是否存在之前的所有item的hashmap的key里面,如果不在,算当前item与它们之间的距离,看最小的距离是多少,是否小于config的threshold,e.g. 2,是就当成用户打错了。
然后这里要注意的就是threshold不能太大。也就是这个判断其实就是一个classifier,存在precision 和recall的问题。
- 把short convert成哈希,然后return String which represents 哈希. 这题完全不懂,懵逼状态。完全没答出来,估计跪在这了。
- 让你设计一堆class 来完成phone directory 的功能。电话目录里有company和person两种类型. Company和Person 都有phoneNumber, name.不同的是company有类型, person有职位。 不用写具体code,要写出search by name, by phone number的function signature.
- 问你怎么存上面的phone directory信息在memory里、
- 什么是hash,什么是红黑树,红黑树怎么定义,怎么work.
- 假如上面你写的class在server run的时候越来越慢,你怎么去debug
- 假如不小心把一些敏感信息(每段信息开头有相同的pattern)放到了很多很多的file里面,怎么找出那些file?不用写code,只要说方法
来自:一亩三分地社区
链接:https://www.1point3acres.com/bbs/thread-697332-1-1.html
店面:Merge K sorted lists + 反向BQ
BQ: 主要是考察简历 和 一些对问题和处理conflict的解决办法
LC227
LC105
BQ如何问的比较有水平?
你可以了解公司的技术栈,想办法向面试官透露出你了解他们某个领域的技术,并且想了解细节。他们就知道你是真的有在认真research 而不是随意面试。
店面:店面没有问lc,问了一些基础,比如list和set的区别,然后给了一个senario,让实现查找,超级简单…,就最简单的线性查找
VO:
LC49
BQ(按照core value回答)
设计hashmap
senior岗位:
店面:
给一个string,转换成为double
Example:
“-1” => -1
“12.4” => 12.4
“.1” => .1
“10e2” => "100*
NG
3论VO
第一轮,我以为是考算法,白人小哥的linkedin写着SWE,但是上来就说他问我BQ 然后一道不用写代码的coding,上来说先介绍一下自己,小哥说简历不代表真人是怎么样的,然后问我最喜欢的语言,最不喜欢的,然后扒了我简历底下的projects(大家好好准备说简历的project),随口问我no sql 和relational DB的区别,喜欢哪个。 然后就开始OCI core value 问问题,反正特别特别像托福口语考试。。。。tell me a time when…一堆常规的BQ 但是一定要举例子, 大家记得多准备几个各种各样的例子,coding是啥不记得了,反正就是学过cs都能说出来的(好像是和frequency相关的easy题?)然后哥们儿问我有啥想问他的,他给我留了20min问问题,我问了几个问题,实在没啥好问的了,哥们就说,没关系,那就休息吧lol
第二轮,白人大叔,上来就说我们先休息五分钟喝口水,(因为他之前也是backtoback面试别人),然后又开始OCI core value,然后力扣 find duplicate number (return boolean),各种各样的解法,o(n) space, constant, modify array, 不modify…然后选一种写,然后写test cases,考虑input invalid咋办, throw exception
第三轮,白人大叔,说自己是boss of bosses,语速极快,上来就口述一道coding,理解了以后就是two sum变体,口述了以后大叔开始share他的屏幕,然后神奇的事情发生了:屏幕上出现了R 和一个波形图,大叔就说这个波有些时候有比较高的peek会有outlier, 怎么去smooth这个波。我???????我乱猜一通,然后大叔就自顾自解了,画了几个图,加了几根线,问我知不知道running average。。。 我???? 然后大叔突然说好了,你现在有啥想问我的,我就问:我是面SWE的吧?这好像是个统计学的问题。。。大叔:我在看collaboration。 我:噢。。。。。。。反正就后面寒暄几句就结束了。。。。。
问了一道题目“merged two sorted lists”,我先写了个O(m+n)的算法,他说不太满意,问能不能更快。我有点紧张卡了一下说“也许可以用binary search?在其中一个里面按顺序遍历,在另一个里面search小于等于当前数的最大值?” 可能因为来来回回讨论得有点久,他突然说“we’re running out of time, questions for me”,我还以为凉透了…面试结束之前我问了一下解法,他说“你说得差不多,自己下去实现一下作为一个homework好了”。面试完我就反应过来了,还寻思要不要晚点给他发个感谢邮件,结果就收到通知说一面过了要约virtual onsite。
一轮是vice president of software department(类似的头衔,有点长我没太听清),一个工作了三十多年的美国人。他讲话微微有点快(也可能是这一轮我太紧张了),有一部分信息完全没get到,但是人很和蔼又风趣,跟他讲话还蛮长见识的,感觉很有收获~问题都比较vague,是那种可以自己加很多前缀限制很宽泛的问题。
BQ问core value,问我对put customer first的理解是啥,customer可以理解成为啥。
编程题问了个超级简单的,就是数一个数字的二进制表示中1的个数,他说目的主要是看编程思维不是看刷题刷了多少。follow up是“如何把时间复杂度降到O(1),加一个什么限制条件”,原来是想加一个limit然后把[1, limit]所有的值都放进list里,需要的时候直接查询……
二轮是senior engineer ,一个工作十几年的美国人,讲话速度倒是不太快但是也有点严肃搞得我怕怕的。
BQ问的是“如果你手头一个项目ddl快到了怎么保证赶上”。
编程题问的是“明星A和B合演一部片子,记作距离为1,A和B没有合作记录但是A和C、B和C分别合作过,距离记为2,求两个给定的明星的距离”。这次甚至都没有给输入输出,就让我自己随便定义,也不会去run这个代码,就看一下逻辑。我先说了DFS最后又想起来BFS更合适,写的时候还出了几个错,差点以为自己要凉了…被问了“为啥你先说了DFS最后写的是BFS,二者的区别是什么”。
三轮是一个工作5年的印度小哥 ,人很好,讲话也不快,还说“你已经连着面了这么久了很累了我争取让你早点结束”,很快答完题之后聊了很久然后提前结束了~
BQ问的是“如果你手头一个项目有一部分需要别人帮助怎么办”。
编程题问的是“有个list叫seats,seats=j表示第i排还有j个空座,现在有M个人排队买票,每排票的定价是卖之前的空位数,卖票顺序可以自定义,问最大收益是多少”。max heap即可。
第一轮:印度小哥,encode string变种,要考虑多个括号和非valid的输入(算法面唯一还行的一轮)(LC394)
第二轮:白人小哥,BST上给任意节点寻找smaller node, node结构里有一个parent
第三轮:白人老哥,lunch interview,不是我HM来的,其他组叫来的一个人,我的HM去面其他人了,这个时候我就觉得没啥戏了
第四轮:白人老哥,bar raiser,设计一个门禁系统,要考虑用到database shared,同时要handle门禁卡被盗和被复制的情况,就根据地理位置和同时用的时间判断就可以了。还有一些follow up记不清了,当天没休息好,记忆略差。不过这一轮整体不难,想不到这一轮没怎么准备反而是面的最好的
第五轮:亚洲小哥,有理数除法,不过要把无限循环小数部分以x.(xxx)的形式表现出来。
只有VO
11.3 onsite
三轮都是美国人
第一轮先bq然后做题 儿伞刘 dfs+recursion做的
followup问:如果一个节点不能是自己的ancestor怎么办
答:每一步记录parent node 如果发现lca是自己就return parent
第二轮也是先bq然后做题 儿令罢
是以system design的形式问的 刚开始没想到要用这个data structure 一直在写hashset 最后十五分钟反应过来极速coding了一波 好在写出来了 这轮很push 面试官不断问问题增加requirement 不过也给了很多hints
第三轮纯bq 面试官超nice 聊了一个小时
两轮tech都不要求compile 口头跑testcase就可以 感觉甲骨文的bq和亚麻的bq很像 就是记住core value然后使劲往上靠就ok
比较早的面经:
LRU
他先介绍team,然后让我详细介绍简历上最自豪的一个项目,最后针对这个项目讨论是否有其他可行的解决方案(可能想看我的思维过程),中间夹杂问了一点CS基础问题
Analytics Cloud Tech
介绍简历上最近的两个项目,然后问了两道算法题
忘了题号。2维数组里存的是cost,从左上角走到右下角,只能往右或往下,求最小cost
LC 33
Analytics Cloud Tech
介绍实习的项目
LC 121
LC 122
LC 174
01背包问题。其实背包问题我是一直没透彻,不过现场是推出了一个DP的思路,但是面试官听完却说这个太慢要给我贪心的hint。我当时就觉得贪心不能解决这个问题,但是一时无从反驳,就顺着他往下说,说完他好像还很满意?(是不是很满意我踩到他的坑里)
有n个task,每个task有自己的执行时间,可以确保每个task都能同时独立运行。现在只有k个线程,k < n,怎么分配使得总时间最短