Monday, December 22, 2014

D

Fact:
500 million files saved daily
public APIs
Linux platform
Sync 

10月29:
题目大概就是用pattern p匹配字符串s。已知如下
p="abba", s="red blue blue red", true
p="aaaa", s="red red red red", true
p="abab", s="red blue blue red", false
p="abba", s="red red red red", false

然后就让开始做。问了一下大概问出来没有定义好a对应red,b对应blue,只要a和a对
应相同的单词,a和b对应不同的单词就可以了。大概问了一下各种corner case就开始
做题,还算顺利,做完以后问了复杂度。

以上是第一问。第二问是假设单词之间没有空格怎么办。想一下说用dp和递归应该都行
,然后面试官让说说递归怎么做于是感到面试官应该希望听到递归的解法,于是就说
partition s呗,前一半跟p的前n-1个字母match,后一半跟第一问一样的检查是否可行
。面试官让写code,写啊写,写啊写,匹配的那个map的回溯总是写不对(不回溯空间
岂不爆掉了?),到最后看到面试官把错误的版本copy下来了。这是不是就算挂了…

8月25:
1. getHit(): return last 5 mins hit
2. hitLog(): called every time the page is loaded

8月22:
在 coderpad 上写。面试的人自称是F家跳到D家的,前半小时聊项目,二十分钟做了个
word break题,再十分钟聊team。

11月7
30分钟,只有一道题。DB的人很会卖萌,题目是用打油诗出的。。大意就是介绍了一下一年里面大月小月分别是哪几个月,告诉你19XX年某天是星期几,然后让你写code算一下从19YY年到20ZZ年有几个月是以星期天开始的。问题不难,注意一下闰年的问题就可以了,感觉风格好像小学奥数。。。LZ出于小奥后遗症,上来就把每个月天数除以7的余数直接写下来,而不是写的每月天数。。面试官看了我一眼,估计私下里觉得我很奇葩。。不过很快就码完了,剩下时间聊聊天,交流很愉快。

1个小时。LZ这次碰到了印度人,好在这人刚好是我大一时候的导师的助手(副导师,但是他当时是大四学生),虽然没说过话不过至少混了脸熟,所以没有特别紧张。也是只出了一题,大概是说一个人去买罐装汽水,只能一罐一罐或者一箱一箱地买。箱子有几种不同大小,比如一箱12罐,一箱6罐等等。这个input是个list。让输出所有买法(就是每种package买几个这样)。又是一道风格像极了小学奥数的题,小时候那种“5分,1角,5角”神马的找零钱问题做了不记得有多少。。同样没什么复杂算法,DP一下就可以了。LZ写完code,发现结果悲剧了,于是面试官过来和LZ一起找bug,找了一会儿,俩人都觉得没问题呀。又过了一会儿,他噗嗤一下差点乐出来,然后LZ发现自己写错了个indentation。。后来分析了一下running time,再聊了一会儿,时间就到了。

Onsite
一整天的面试啊面试,都是白板code。这之前LZ只去过F家的onsite,一整天就一个45分钟面试,剩下就是四处玩。这下可算来真的了。。全天3个tech面,每个1小时;最后还有一个非tech面。进去之后交代了两句就把LZ放在一个屋子里,说我一天呆在里面就行了,面完一轮会换下个人进来接着面。

第一面:给一个字典(里面有若干长度至少为3的单词),一串7位的电话号码。在电话上面的9键键盘,字母和数字之间有对应,求输出所有把号码转化为单词的结果。比如3767269可以对应D-R-O-P-B-O-X这样。LZ的解法就是先把字典做成3个HashMap,分别对应长度为3,长度为4,长度为7的单词。key对应号码,value对应一列单词。这样只要把电话号码拆解成7或者4+3或者3+4的格式就可以直接lookup了。之后又问如果电话号码不限于7怎么办,LZ的做法是先写个helper function算出所有的partition,然后字典做pre-computation的时候把一堆HashMap存到一个array里这样。最后lookup的时候做个Cartesian product

第二面:给一个directory,求print出来所有duplicate files的名字,所有相同的files的名字都print在一行。记个HashMap,做个BFS就行了。然后还有个问题是说,假设是个很大的音乐库,20个G的,HashMap记不下怎么办。LZ给的办法是只看每个file的前1KB,最后在duplicate的一行里面再进完整文件的比较。

第三面:和第二面差不多,给个URL,求print出来所有能达到的链接。每个链接只print一次。也是BFS,注意存个HashMap避免链接之间互相loop。然后让写个多线程的version。

最后一面:就是和一个DBer聊聊天,问点问题。30分钟。LZ遇到了之前在on campus的时候一起吃过晚饭的一个DBer,他还记得我,于是聊了聊DB现况,发展趋势神马的。他在hoodie里面穿了一件很花的Hawaiian衬衫,打了一条同样很花的领带。据说是因为他们有个feature快要launch了,所以在那之前全组约定每天系领带^_^当然说是全组也就不到5个人。。




Palantir


Misson: 
-To make the world a better place, use technologies to solve real world problem.
-Ivory trade tracking 

HR round:
1. how would you test a blender?  Intended use, unintended use, safety
 Who's the user, what's your company's warranty, how does it handle standard products, how well does it make a milkshake, how does it handle rocks if you put them in there, should it handle rocks, etc. 

1. how would you test a printer? 

2. how would you find a repeating number in an array
3. binary search, how many bits necessary to store 1000
4. Explain the significance of 2^32 
5. 100 Puzzle Hats: 
a. Red is assigned a number of one, and Blue is assigned a number of two;
b. Every person adds up the numerical total of all hats in front of him/her, plus the numerical total of all responses from people behind him/her;
c. If the total is an even number, the response should be “Blue”; if the total is an odd number, the response should be “Red”,
d. The last person in line has to guess and, therefore, has a 50/50 chance of surviving.

6.Describe the basic functions of a hash map
7.How would you explain a deadlock to a nontechnical person?   

Tech Phone round 
2. Remove duplicates in an unsorted array where the duplicates are at a distance of k or less from each other.
Hashset(k)

3. Convert a tree to a linked list. Inorder traverse

4. Given an unsorted list of integers, return true if the list contains any duplicates and false if it does not contain any duplicates. You do not have to identify the duplicate value.
O(n) hashset

5. Given an unsorted list of integers, return true if the list contains any duplicates with k indices of each element. do it faster than O(n^2).  O(n) hash map 


Given an unsorted list of integers, return true if the list contains any fuzzy duplicates within k indices of each element. A fuzzy duplicate is another integer within d of the original integer. Example: If d=4, then 6 is a fuzzy duplicate of 3 but 8 is not. Do it faster than O(n^2). O(n) hash set
6. Given 3 distinct ways to find the kth largest value in a list of N items
quick select O(n), 
heap (O(nlogk), 
sort + scan O(nlogn)
7. Given a stream of integers, all of which comes in pairs except for 1. find that 1.
8. Sort an array where each item is at most k indices from it's original position in the sorted array. What is the run time?

9. Given a number k, and an array of integers A, find two integers in the array which sum to k. Do this in linear time and O(n) space, iterating over the array exactly once. Now do this in constant space and O(n log n) time.
two sum: 

10. Print a Binary tree using BFS, add a line break between each level

11. Create a stack with fixed size
public FixedStack<T>(int size)
    {
        this.stack = new T[size];
        this.top = -1;
        this.size = size;
    }
12. Implement external mergesort given text file of numbers.


14. Which num in an unsorted list can be represented as a sum of 3 other nums in the list
15. 
  • Write a function that finds all the different ways you can split up a word into a concatenation of two other words.   View Answers (3)
  • Say you have an unordered list of numbers ranging from 1 to n, and one of the numbers is removed, how do you find that number? What if two numbers are removed?   View Answers (6)
16. 
  • Given a string of integers of undefined length, how would you choose an element uniformly at random using only a constant amount of space? How would you prove that your algorithm is correct?   View Answers (2) reservoir sampling
  • Given a list of positive and/or negative integers, how would you determine if any 3 elements sum to 0? What is runtime? How about for $k$ elements summing to 0?   View Answers (2)
17. 
  • Given a list of numbers, find the median.   View Answers (3)
  • Follow up to question 1: If inserting a 1000 numbers then finding the median a 1000 times, and you had to choose between either a logn insert algorithm or a logn median look up, which would be better?   View Answer
  • Given a stack of numbers, determine the minimum number in the stack at all times in O(1)   

18. Use a stack to implement a queue.
2 stack: StackA, StackB
enqueue: StackA.push() 
dequeue: pop all from StackA, push all into StackB, pop from StackB


19. 
  • What does synchronized means in Java? How can you avoid deadlocks?  Answer Question
20. find the intersection of two lists... eg. [1,1,2] and [1,1,3 ] ---> [1,1]  

Key unique: HashSet O(n+m)
Key not unique: 2 pointer O(m+n)

21. Sort the input character array based on the dictionary given. 

count sort, similar to sort color

2014年7月24日
coding题目很简单就是Anagram的分组,给出一个列表和一个字符串,找出字符串所有的anagrams,标准的hashtable题目,要求代码和复杂度。然后要求怎么改进提高时间复杂度,这里虽然给出了答案,但说得比较混乱。不过面试官人挺好,一直和我交流给提示。

最后问问题

第二天HR发信要求另一轮电面,第一轮估计表现不是很突出。

面试官语速真快,我有点紧张。
直接是coding,一个BST的DFS,一个Binary tree的BFS,简单题,写完平静下来了。。。

第二题是求当前输入的数值数组的median的online算法,不要求coding,CC150的题目,不过当时不记得了。给了naive算法, 优化的时候纠结了一会,后来提出BST还有heap的方法,简单描述了一下怎么保证得到median。这时面试时间已经过了,但面试官继续给出限定:只有少量内存怎么做。虽然提出了找window,但做shift什么的没怎么答出来,面试官说很close,然后解释了一通。最后还是问问题。


2014年4月30
03/27 电面
Warmup: Read input in format: city, state, population (tab delimited file. 
population is of form: integer number always followed by a 'k'). Note that 
city name can contain spaces. Output the total population in each state in 
descending order
Given an array of integers which is initially increasing and then decreasing
, find the maximum value in the array.
Given a stream of integers, find top K (heap)
Given an array of integers, find top K. top K elements do not need to be 
sorted. (quick select the Nth, then scan the array again, linear complexity)
04/18 onsite: 他家第二轮感觉是个ABC,其他都是白人…
Round 1: 写一个 Tree iterator
Round 2: Longest substring which repeated in a string, example: banana, 
return ana
Flatten BST to in-order doubly linked list
Round 3: Given stocks with dates and values. For multiple companies. For 
each date, return the current total amount of stock you have. (a variation 
of Merge K sorted array)
Round 4: Word search in leetcode
Round 5: Convert map<A, map<B, C> > to map<C, map<B, set<A> > >
Find k missing numbers in an array 1-N
面完感觉一般,23号收到拒信……

2014年4月

Phone:
求两个List<Interval>的交集,假设每个list中的interval都是disjoint的。

onsite:
1)给你一个list的字符串,找出一个list的prefix,从而可以uniquely identify每个
字符串。
Hint:此题可以用trie来解决

2)给你一棵树,implement一个iterator,可以是BFS或者DFS。要求用iterative 
method来实现。
Hint:选择DFS

3)压缩算法。用树的变形来表示一个string,比如 B->left = A, B->right = A, 此
种情况我们可以把B的left, right同时指向A。
问题1)对于一个有n个节点的树,可以表示的最长string的长度
问题2)implement get(Tree t, int position),返回这个字符串在position的字符。
Hint:exponential + binary search

4)猜字游戏,有一个board和dictionary,从一个字符出发,你被允许走8个方向。如果
已经有了以下method,isWord(String str)和isPrefix(String str)。你怎么把所有的词打印出来。你可以假设解法唯一。
Hint: BFS

4月:
有一个binary directed acyclic graph, 每个node存有一个字符,有一个左节点和一个右节点。
(node定义如下:
Node {   
Node L; 
Node R; 
char ch;
}

这样如果in-order traverse这个DAG,就会得到一个string。例子如下:假设一个DAG
只有两个node,分别装着A和B这两个字符。假设Node A的左右两条边都指向Node B:
A (root node)
||
B
那么这个存储的string就是BAB

现在假设已经有了一个这样的DAG, 请写一个函数,返回这个string的第k个字符。要求复杂度不能是exponential的。。。

2013年2月
palantir:
1)warm-up: 给定一个array,如果有duplicate,返回true,否则,false
2)改进一:如果存在duplicate元素间index的距离不超过k,返回true,否则,false
   比如a[1]=a[3]=3, k=2,那么3-1=2 <=2, 返回true
   比如a[1]=a[3]=3, k=1,那么3-1=2 > 1, 继续找
    
   我用了HashMap记录每个元素的index,如果第二次遇到,比较当前index和前面记录的值,满足条件就返回true,否则继续找,空间>O(N),被问能不能优化空间,没想出来,提示说只要记录k个数字就行了,于是我用了个linked hash map,超过k个,自动踢出最老的,表示可以,但有点overkill了

3)改进二:如果存在两个元素间index的距离不超过k,差的绝对值不超过l,返回true,否则, false
   比如a[1]=2, a[3]=3, k=2,l=3, 那么3-1=2 <=2(k), 3-2 < 3(l)返回true
   同理,如果l=0, 继续找
   写了个O(K*N)的算法,表示认可,问能不能弄个更快的,我表示没想法,然后问了几个问题就完了

2012年11月:
1.(a) 一个大的脚本文件里有很多测试的时间戳(可能是混乱的),怎么设计算法和数
据结构返回测试用的时间。比如:

2011-01-01 13:49:12 Test started
2011-01-01 13:50:33 Test ended

返回 myData.timeTaken("Test") => 81

(b) 在(a)的基础上,如果有多套测试,怎么设计。比如:

2011-01-01 13:49:12 MyTests.SimpleTests.TestA started
2011-01-01 13:51:33 MyTests.SimpleTests.TestA ended
2011-01-01 13:51:36 MyTests.SimpleTests.TestB started
2011-01-01 13:51:45 MyTests.SimpleTests.TestB ended
2011-01-01 13:52:00 MyTests.QuickTests.Test1 started
2011-01-01 13:52:03 MyTests.QuickTests.Test1 ended

应该返回

myData.timeTaken("SimpleTests") => 141 + 9 => 150
myData.timeTaken("MyTests") => 141 + 9 + 3 => 153

2. 设计排序算法:sort a list of n numbers where each number is at most k 
indices away, where k << n


2012年:
第一轮:
1. Given: 
- integer array [-3, 0, 1, 2, -5, 6, 2, 0]
- start index i into the array
- end index j into the array
- i <= j

Find: the sum of the elements between i and j, inclusive.
Example:
i = 2
j = 5
return 1 + 2 + (-5) + 6 = 4

Assumptions:
- array does not change
- many requests for the sum between different i's and j's.

2. In the previous problem, you calculated the range sum between indices (i,
j). Now given an array, find the largest range sum in the array.  The array 
can contain negative numbers.

第二轮:
Given a table:

Name    Size   Color    ...
AAA     Med    Red      ...
BBB     Med    Red      ...
CCC     Big    Blue     ...
DDD     Big    Red      ...
EEE     Small  Blue     ...

Input:   String[][] table, and String[] order = {"Color", "Size", "Name"...}
Output:
Red
    Med
         AAA
         BBB
    Big
         DDD
Blue
    Small
         EEE
    Big
         CCC

Note "order" gives the order of the output of the columns.
2011年
finbonaci number,是前三个数的和而不是两个;写代码;改进;logn算法
range sum query,array,给[i,j]算区间内元素和,给出不同的space/time 
complexity组合,在提示下给出一个n^1/2 space/time complexity的算
同上,现在的数组是2维,给出一个O(n^2) time/space complexity的预
处理方法,然后是一个O(1)的query
最后一个设计题,一个目录下面有别的目录和source file,要把所有的source file的一个name替换,考regular expression,然后修改的时候要备份所有文件,然后问了他两个问题


12月5日
1.  设计一个牌类游戏 OOD
2. 设计一个服务监视系統。说你有一堆服务器和一堆服务,怎么监视服务状态。 系统
设计。各种情况。各种要求。
3. 设计一个企业内部用的那种日志系统。大概的用途是A发现一个什么问题,log问题
,相关的人会接到通知。半系统半OOD。中间面试我的人想给我点提醒。说中间某部分
可以用某种design pattern来做。不过那个design pattern不是factory singleton 
observer strategy等几个常见的。所以提示了和没提示一样。

4. 设计一个和配置相关的系统。大概的功能是比如A要买你的软件,人家可能不需要把
你所有的功能买走。他提出了一些他想实现的功能,然后你把你内部的一些模块啥的拼
一拼然后给人家。这样一个系统怎么设计。

第一题基本还有个参照。按CC150思路走的。不过也被拍死了。cc150的结构大概适合于
赌场游戏。他说如果像UNO那种。你这个设计就不行。直接就傻逼了。时间也到了。这
个里面让做了个洗牌。然后讨论为什么我的洗法能够实现纯随机。就是可以等概率的洗
出任意一种可能