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:

  1. 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
大致答了一下。

最后实现了一下。

不太像店面的问题:

  1. 给一个list of item prices, 比如 [{“Iphone”: 100}, {“Xiaomi”: 50}, {“Iphone”: 90}],输入一个item的名称,让返回这个item的总价,就是扫一遍求和。
    Followup: 1) item 不区分大小写,2) 用户输入有typo怎么办?edit distance (不用自己实现),3) list太大怎么办?用stream慢慢读。

  2. 跟马内机聊天,主要是问我做过的项目,我干了些啥,以及介绍他的组,然后还有些behavior questions。

  3. 系统设计:设计一个PAAS 系统,可以Create VM, 还有get creation status。

  4. 行为问题和一个练手速的算法题。实现类似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的问题。

  1. 把short convert成哈希,然后return String which represents 哈希. 这题完全不懂,懵逼状态。完全没答出来,估计跪在这了。
  2. 让你设计一堆class 来完成phone directory 的功能。电话目录里有company和person两种类型. Company和Person 都有phoneNumber, name.不同的是company有类型, person有职位。 不用写具体code,要写出search by name, by phone number的function signature.
  3. 问你怎么存上面的phone directory信息在memory里、
  4. 什么是hash,什么是红黑树,红黑树怎么定义,怎么work.
  5. 假如上面你写的class在server run的时候越来越慢,你怎么去debug
  6. 假如不小心把一些敏感信息(每段信息开头有相同的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,怎么分配使得总时间最短

posted @ 2021-01-09 06:28  EvanMeetTheWorld  阅读(53)  评论(0)    收藏  举报