粉车电面过经

刚刚电面结束,recruiter已经来邮件说过了。

面试官开始先介绍了一下自己, 然后让我自我介绍,接着做题:

Given an API to fetch page (10 results on each page):

MAX_RESULTS = 103
def fetch_page(page):
  page = page or 0 # start from page 0 if not specified
  return {
    "page": page + 1,
    "results": [range(10 * page, min(10 * (page + 1), MAX_RESULTS))]
  }

Implement a ResultRecher class with a fetch method to return required number of results:

class ResultRecher:
  def fetch_page(num_results):

和利口 要五八(read4) 一个思路。Follow up:

  1. what if the fetch_page has a 30% possibility to fail? -> add retry, implement retry with a limit
  2. what if sometimes the server may be overloaded, retry immediately will make it even worse? no need to consider auto
    scale -> add wait time between retries

四十分钟做完然后又瞎扯了一会,提前结束了。

也报一个Lyft 店面
题目跟利口药物吧 差不多。
给一个第三方api, 比如 List get(int page). 面试的时候要问面试官这个api到底是返回什么,我说返回List, 他说
可以。 这个api每次返回10个结果。
使用方式就是这样啊 get(1), get(2), get(3)…, 不能go back, 每次只能get 下一个 page的结果。而且这个api的implementation 也要自己写,我随便瞎写的都行。
然后,你要实现这样一个函数 List fetch(int numOfItems);
比如 get(1) = [1, 2, … 10], get(2) = [11, 12, …20], …
那么 fetch(5) = [1, 2, 3, 4, 5]; fetch(1) = [6]; fetch(2) = [7, 8].
Follow up 就是 如果这个 api是个http call, 不太稳定,有时会fail。 你怎么办。
我说。 1. Guava retry 2. buffer更多的结果. 因为我实现这个fetch这个函数的时候用了一个queue 去buffer一些结果。
他自说可以cache 结果啥的。不知道他满不满意。