ttd面经
其他帖子
https://www.one-tab.com/page/BgyDhEIDQfKSrwzTmHnlDw
九月中 Panel Interviews。我是一共两轮 Coding。如果面SDE 2及以上还会多两轮 System Design。 面试之前反复跟recruiter确认过了说是Leetcode style question。 结果根本不是, 第一轮让我写function来parse一个csv文件,第二轮就是地里有的那个n way m set associated cache。 结果就是两天后recruiter告诉我fail了。
最初是HR面,主要是介绍公司情况,有三个career track (IC,agile lead 和 management),以及接下来的面试轮次,
一轮engineering informational
然后是tech round(take home test or living coding test)
然后是4 peer panel rounds ( 2 system design, 2 problem solving)。楼主上一轮fail了,所以没到这一轮
onsite 2 problem solving + 2 sys design,第一天remote做problem solving, 第二天onsite Sys design。一开始听recruiter说OOD应该是属于sys design的,所以最开始没认真准备OOD,只粗略看了几个YouTube视频,准备第一天面完了突击,结果就突然被问到OOD
冷门的小众公司TTD,VO一共5轮,两轮算法+两轮系统设计+一轮行为面试。一天面完的。
第一轮:系统设计。 设计一个电梯系统,需要写代码。这个不像传统的System design更有点像OO设计。网上有很多资料不细说了。我没准备过这个问题答得不好。
第二轮:系统设计。设计一个类似于油管的视频网站系统,可以上传,观看和搜索视频。
第三轮:行为面试。只有半个小时,并没有问各种behavior问题,只花了15分钟粗略问了我简历的几个项目。然后剩下的15分钟都是我在问他问题。感觉这一轮不会刷人的样子。
第四轮:算法。刷题网尔药爸。
第五轮:算法。刷题网琪琪尔。这道题是从简单的计算器开始(只有加号减号),然后逐步follow up到有乘号除号,再到有括号。
- HR interview,主要是问了基本的background(如:why software engineer? when did you start coding? what are some challenges in previous project?)。还问了一些 technical 的东西(如:explain linked list and array; explain inheritance)。我的回答情况:背景的部分基本就正常回答,会有一些follow up的问题看你在面对challenge时候的处理方式。Technical的话就是简单讲了一下,时候想想因为没有准备,所以也没有讲的很全面,不过应该整体给hr感觉你是理解这些概念的就好。
TTD是DSP业务大厂 cookie deprecation大背景下 UID是业内比较响的解决方案 面试前多了解下programmatic media buy 广告投放的identity和targeting之类的总没错
描述最喜欢的项目
最近在做什么项目
上学期选了什么课,
最喜欢的语言,
java的缺点
spring如何配置
hibernate的原理
hashmap原理
code:
LinkedList,删除倒数第m个点以后的点
找一个array的重复数字
树的前,后,中序以及层次遍历
五月底面的,电面都是同样的题,NWayAssociativeCache,总共3问
1 修改给定的代码,把LRU 相关部分整合到LRUAlgo的类去,这样如果要用MRU就比较好改
2 优化LRU的性能
3考虑线程
做法上就是先好好读题,读代码,搞清楚现有代码,读懂了后把它们分离就简单了。第二问就是用双向链表实现一下,第三问就是加个锁
面试时间是一个半小时,提前准备过的话时间一般是够的,最后10分钟闲聊一下,提前五分钟结束了。
不是LeetCode类型的算法题,而是给一个已经写好的LRU Cache的代码,然后面试官会一步一步给你各种需求,让你实现。地里面到处都有这个面经。我当时的需求有:
实现一个算法类接口,然后将代码中LRU算法的部分替换成这个接口,这样我们就可以给接口不同的算法实现(LRU, LFU等等),这一问属于一个考察面向对象设计的题目
找出代码中可以优化的地方,进行优化。我记得那个代码里用了链表,然后有一个get和remove方法的操作是遍历链表,复杂度是O(n),这个地方可以优化,比如用一个哈希表代替链表
怎么优化LRU算法的部分。这个就可以参考刷题网的那道LRU的题,用哈希表+双向链表来优化
都是一样的题 N-way associated cache.
题跟其他的帖子应该是一模一样的
可能是不同面试官的要求会有细节不同?
refactor
就是吧LRU的逻辑独立出来
optimize
就是有些地方会call 两次o(n)的查找,用variable存住找到的index就行了。
LRU/MRU.
需要用两个class来存算法。实际上就是把算法需要的counter也都放到这两个class里
比如linkedlist, MR的index,或者如果以后要改LFU时候的frequency counter。
还要加一个每次有调用(get set) 和删除key时候 时候的update.
multi thread
就是加个lockObject 没什么取巧的, 因为有多个field要lock 光用concurrentDictionary是不够的
要implement一个很简单的linear_interpolation(array_x, array_y, x), 来interpolate x对应的y . 1point3acres
先找到i s.t. x[i] <= x < x[i+1],array_x是sorted的(x[i+1] > x[i])和对应的array_y,(因为是sorted所以直接binary search找i). ----
这时候获得x1, y1 = (x[i], y[i]) 和 x2, y2 = (x[i+1], y[i+1])后用y = y1 + (y2-y1) * (x - x1) / (x2 - x1)就行了
OA
N-way set-associative cache optimization。提供了一个Java的实现,要求:
Correct it. 题目里说了提供的实现有"signanificant flaw", 但是没有说是什么。这里让你找到并修正
Optimize it. 题目里说提供的实现比较naive,有很significant optimization opportunity,也是没有说朝哪个方向优化
Refactor interface to allow implementation of other evicition policy, like MRU. 提供的实现里实现了LRU
Implement MRU. 有一个test case是给MRU的,所以一开始什么都不修改执行是有一个test case会fail
Make it thread-safe.
Other notes
OA在hackerrank上
hackerrank提供了一些练习题目熟悉环境
给了4个小时
题目自带10个左右的test cases
Phone
电话聊了实现的想法,interface为什么那么设计,然后几个follow up。并不是特别记得都问了什么,大概就是跟之前相关的设计问题和新情况怎么处理。
Onsite
四轮
蠡口幺儿起
System design around instagram follow relationship. 从database table,sql query聊起,到query的scale,怎么处理celebrity case里的hot key等等。
elevator: OO design + coding
Sytem design问了一个公司实际做过的设计。设计一个系统把广告数据库 propagate到多个data center做online bidding使用,要求as detail as possible。
我准备面试的时候看了代码🔗 github.com,🔗 github.com,对面试有点帮助。另外最好做下利口 懿斯刘 LRU Cache,经典做法就是用Linked List来保存元素的重要性。
基本功能实现后还问到:
如何保证代码是线程安全的?那就是确保函数Get,和Put是线程安全的,Java可以用关键字synchronized来实现
另外面试官还暗示可以用到design pattern中的factory pattern来优化代码,所以也最好研究下。
最后希望能够帮到大家,还请加米点赞回复等!
vo 1: LC二期无酒,不用parse具体值,只需要check if input is a valid JSON. 花了不少时间理清思路,最后剩一点没写完,但反馈说还行
vo2:电梯,让传统上下键电梯和写字楼直接选楼层电梯二选一。。过程一塌糊涂,recruiter反馈这轮面得比较差,vo1的coding又没写完没有给到明确的problem solving positive signal所以拜拜
Onsite 1:优化data ingestion API和storage,包括single write API 和bulk write API.每个component都要自己细问才能拿到有用信息,随缘写几个cover的点:
- what storage engine,db or in mem?in mem KV
- high R&W traffic, single write requires very low latency whereas bulk write does not
- single write -> write to storage directly, bulk write -> Kafka & spark to aggregate on UID
- cold/warm storage separation, since we cannot put everything in in-mem KV. bulk -> cold
- periodically consolidate storage -> sounds like a LSM?
Onsite 2:cache layer for bidder to quickly fetch metadata - total storage 30GB, just use in mem cache
- eventual consistency is OK
- DB changestream to Kafka,update cache asyncly
- checkpoint, heartbeat, gossip protocol, merkletree?
System Design:
餐厅模型(Restaurant, Waiter, Customer, Kitchen)后来加了一个Order class
-
Customer到餐厅自动有一个服务员跟着, 然后一直都是这个服务员负责 -
点菜之后服务员转给餐厅 -
餐厅做好之后传给服务员 -
服务员送餐 -
厨房如何处理order
Coding:
刷题网347 用任何java 内置功能需要重新implement
两轮都是剩下的时间多于五分钟,所以就问了很多问题,以下是我的总结:
公司有很多很有意思的项目,但基本都是小组进行,很多项目是一个人负责,也有两个或者三个人负责的,除非有很大的项目才会整个组出动,大概八个人左右。据说规模小的组有利于节省沟通成本。
其中面试官在亚麻做了八年跳槽的,工资应该给的很高,他本人很喜欢这份工作因为有很多比他更senior的人可以向他们学习,而且一周只用去公司一天,也可以选择三天或者都去。
面的英国的岗,面试官说他们招的实习挺少的,因为公司不打算扩大规模,听到这里心都凉了。
题目大概就是给你一个products和productprices的list,然后再给你一个productsold和soldprice的list。让你返回在sold price里面一共出现了几处错误。
How to improve effiency
How to design a robust interface OOP for other types of cache
Follow up:
When naive cache implementation is better than optimized cache (using doubly linked list as underlying datastructure)?
N-way set-associative cache optimization。提供了一个Java的实现,要求:
Correct it. 题目里说了提供的实现有"signanificant flaw", 但是没有说是什么。这里让你找到并修正
Optimize it. 题目里说提供的实现比较naive,有很significant optimization opportunity,也是没有说朝哪个方向优化
Refactor interface to allow implementation of other evicition policy, like MRU. 提供的实现里实现了LRU
Implement MRU. 有一个test case是给MRU的,所以一开始什么都不修改执行是有一个test case会fail
Make it thread-safe.
Onsite
四轮
蠡口幺儿起
System design around instagram follow relationship. 从database table,sql query聊起,到query的scale,怎么处理celebrity case里的hot key等等。
elevator: OO design + coding
Sytem design问了一个公司实际做过的设计。设计一个系统把广告数据库 propagate到多个data center做online bidding使用,要求as detail as possible。
周一下午面试,面试官出的刷题网word ladder ll,
一道hard题,我早就知道这家爱出hard题,然后做了好多hard,当场秒杀了,而且全程不间断交流。最后面试官给我讲了好久这个面试的目的,然后介绍公司业务和公司定位,就结束了。结果今天收到拒信,说是不符合公司要求。
全程直接做题
类似于Redux或者Zustand这种store,从0手写,然后通过一些订阅发布来验证store更新之类的,一个小时满满当当。
Coding:
input是50个list, 每个list存储了每周在每个Office可以放的假期天数。题目有两个问,第一部分非常简单 返回一个Office traveling path去拿到最多的假期 (可以每周换去不同的Office) 第二部分就是限制每周只能去上周相邻的Office或者维持不动 返回这个最优path (dfs)
SD
细节有点忘记了 大概意思就是说怎么能在主页展示trending TV show, data model 要自己设计, batch or stream, 偏向于ml data pipeline方面吧。
coding + SD 是一轮面的
ml model / fundamental
有点类似于ml past project deep dive但更专注于model方面 (不考虑serving) 选一个过去的project然后讲data, feature, model 的细节 考虑各种tradeoff 要对自己做过的项目非常熟悉。
PM & HM 两轮
会问比较多typical behavior question, 有冲突怎么办 negative feedback怎么办 等等。
-
一天后通知1.5小时video interview, 感觉面试问的题目难于一般大厂的电面,问了以下几个问题:
- lock 锁的范围太大,能不能进一步优化(我一开始是Lock在cacheset的api层面)
- MRU 能不能进一步优化 (我一开始是用类似LRU的算法实现的,空间复杂度O(N), 可以优化到O(1))
- 实现LFU,这里没有要求写代码。这里只需要去implement LFU的 interface, 我一开始没注意,直接去想着implement这个cache了。
- N-way set associative cache相对1-way set cache的优点有哪些?
我自己的经验是提供Cache interface接口是最code clean的solution,然后提供factory pattern的接口就能实现不同的predefined的cache。不知道地里面的大神有谁清楚这个refactor设计该怎么处理?为什么cache evict的实现不需要和cache本身绑定在一起?
https://github.com/adeorha/Cache/blob/master/src/com/name/nset/Cache.java
https://github.com/Novotarskyi/n-way-set-associative-cache/blob/master/src/main/java/nwaycache/NWaySetAssociativeCache.java
https://github.com/Novotarskyi/n-way-set-associative-cache/tree/master/src/main/java/nwaycache
home assignment
明确要求LRU 和 MRU 我设计了一个default用LFU 的
要写unit test 需要注意泛型 最好考虑下多线程(我没考虑 被提醒了)具体实现可以参考lc的题目

浙公网安备 33010602011771号