Skip to content

Instantly share code, notes, and snippets.

@dapangmao
Last active January 1, 2020 01:34
Show Gist options
  • Save dapangmao/675a2599b73195e7a116 to your computer and use it in GitHub Desktop.
Save dapangmao/675a2599b73195e7a116 to your computer and use it in GitHub Desktop.
Bloomberg 全体展览
【===========算法============】
【*****leetcode/lintcode*****】
same tree, Binary tree inorder iterator, inorder & postorder traverse BST, binary tree level order traversal(print指定level的binary tree), tree upside down, add next to every tree node, Convert Sorted Array to BST, binary tree的maxSumPath, reverse linkedlist, linkedlist输出倒数K个node的值, linked list取中值, linked list做减法/加法(反序), valid BST, linkedlist找merge point, copy linkedlist with random pointer, flatten BST to linkedlist(把BST替换为2Dlinkedlist,本质不变), depth, interseciton of linked list(一个一步一个多步是否可以(复杂度高)) LRUCache, upside down, recover binary tree from inorder and preorder,
word search I, min stack, stock transaction I(buy date is needed) & II, two sum, subset, unique paths II, merge two/k sorted array/linked list, Find kth largest number(quickselect, array partition), sort colors, remove duplicate from a sorted array, search in sorted rotated array(binary search), search for a range and delete it in array, next permutation, find peak element(一个先降后升的数组,怎么在这个数组中找到target值 [先找到最小值,然后分别二分查找]), rotate array, single number(简单版-两个整数数组 所有元素完全相同 但第二个array少了一个数 求少的那个数。array中数字是乱序), valid Parentheses(follow up如果加入" " 和 ' ' 怎么处理?" "中间的视为全部合理,里面的内容可以忽略), Trapping Rain Water, Container With Most Water, merge interval, course schedule II(topological sorting), surrounded region(起点给定,而非四周,通过最后判断是否全X来判断给定的X是否封闭)
palindrome number(先让count一下6位数的palindrome有多少种可能,比如100001,234432这种. 然后让print出所有的), reverse integer(reverse a float, follow up 用 a == reverse(reverse(a)) 来判断overflow行不行), atoi, excel sheet column title/number, power(recursive & iterative), sqrt (指定精度 or返回double - 牛顿迭代), RomanToInteger, IntegerToRoman, 矩阵螺旋(给一个矩阵,从中间开始旋转着一圈一圈把值打印出来。代码写完之后还追问了一下如果要允许用户自定义螺旋的方向要怎么改)
reverse words in a string(1.一开始我想用两次while循环那种解法,边写边念叨思路。然后三哥说不要用这种,换一个一次循环的,函数容器随便用。感觉他确实在干别的事,我就直接把char *的input转成string然后空格分割存进vector再逆序合并2. 去掉一句话中多余的空格。输入“  The    sky  is   beautiful  !  " 输出 ”The sky is beautiful!" 他开始给的例子里没有标点符号,我就没考虑到=。= 后来也没让修改了。。), anagram [hashmap,面试官prefer质数], add and search word(给一个string的字典和一个target string,要求找出字典中所有跟target近似的string,带*的匹配), longest palindrome substring, shortest palindrome(从后面添加), strstr()
Binary Tree Upside Down
Given a binary tree where all the right nodes are either leaf nodes with a sibling (a left node that shares the same parent node) or empty, flip it upside down and turn it into a tree where the original right nodes turned into left leaf nodes. Return the new root.
For example:
Given a binary tree {1,2,3,4,5},
return the root of the binary tree [4,5,2,#,#,3,1].
这题有一个重要的限制就是,整个数的任何一个右孩子都不会再生枝节.
public TreeNode UpsideDownBinaryTree(TreeNode root) {
if (root == null)
return null;
TreeNode parent = root, left = root.left, right = root.right;
if (left != null) {
TreeNode ret = UpsideDownBinaryTree(left);
left.left = right;
left.right = parent;
return ret;
}
return root;
}
public TreeNode UpsideDownBinaryTree(TreeNode root) {
TreeNode node = root, parent = null, right = null;
while (node != null) {
TreeNode left = node.left;
node.left = right;
right = node.right;
node.right = parent;
parent = node;
node = left;
}
return parent;
}
【*****data structure******】
1.array, vector, list, stack, queue, priority_queue, set/map, unordered_set/map
2. design a queue using stack
3. 用linkedlist实现stack
4. 关于一个Hash, 说最下面的数组实现,比如某个hashmap最下面用了个长度1M的数组,但是因为每个object很大,于是不希望一开始就把整个数组都初始化。但是如果不初始化的话在lookup的时候就无从得知这个key对应的value是不是存在。如何解决这个问题?我说那既然这样我可以用自平衡的搜索树来索引已经存在的key,每次lookup的时候先到树上找一下。她说太慢,能不能把lookup的复杂度控制到常数。我想不出来,她提示说可以在已经存进来的value object上附加一些额外的信息……我还是想不出来,但又想到了另外一个办法,就是把1M的数组拆成多级数组(像page table那样),这样每次只要初始化几百个或者几十个数组单元就可以了。她对这个答案表示也比较满意。(可以设计类似version)
5. 选用你的数据结构在一本书中找出最新的5个单词。我说用priorityqueue
6. 设计一个Big Integer的类
用vector<int>存, 完了他说可不可以更有效点存,也就是每个位置存2个digits
7.写一个linkedlist这个类,输出0~10就这样
8.用char数组写string类
write a copy constructor for class{  char* s; }         
这里郁闷了,一点一点问,然后follow interviwer的意思写,写到copy data member的时候卡壳了,说直接复制pointer 会有问题, 怎么copy。 这里发挥的太烂,感觉脑子不转了。
其实简单到: char * p; strcopy(*p, *s); 的事儿,硬是没反应。然后时间就差不多了。让我问了个问题,他扯了几句,就结束了。
9. 假设类似vector的这种类
class SelfDefinedVector {
    void insertNULL();
}问题:如何实现这个insertNULL方法?
加入unordered_set记录index;设一个对应bitvector设置对应的Index的是否valid;每次连续插入两个值,第一个值为1代表valid;
10.1)给你一堆文件,里面包含很多单词,然后要查寻一个单词在哪些文件里出现过,会有很多很多查寻
    follow up 1:如果要让文件名按序输出,怎么办
    follow up 2:  如果有新的文件加进来,怎么办.
将查询结果按unordered_set<word, list<file>>存入,若有序则换list<file>为map<file>
2)基本来说是sort strings,可是strings在不同的file里,而且有duplicate,一开始让sort,后来要search,他自己说search要返回所有存在的file的名称,然后我做出来之后让我优化,说file可能有大有小,要从小的开始搜,我问他为什么,你最终要的是所有的filename,然后他无语。在这上面扯了很久。
3) given a story (text) and an array of keywords, find the keywords existing in the story [生成automation匹配]
11.设计一个单变量polynomial类。支持求导操作。多项式稀疏的话怎么存。
12.设计一个dropdown menu that contains 5 most recently visited urls,本质其实就是LRU cache。
13. 亚裔MM说是她现在的project,设计一个data structure,可以方便update, 比如说原来一行数据有三个attributes,方便一年后变成10个attributes。
一个stock有三个properties,有N个组合,然后让我做match,我想了想说用三个HashMap,一层套一层,行不行。他说可以是可以,但是如果又有一个新的property怎么办,我说那就得里面再加一层,这样肯定是不好。然后他说对啊。
14. 设计个结构,有很多documents,然后给一个word,如果该word存在这document里,返回该document的标题。
15. 有很多信息,如何一直保持最新的20条。我说用queue. 然后又问,顾客想找一个公司的信息,该怎么办。答用hashmap 或者 dictionary. 问了时间复杂度。又问了如果一下子一个公司有很多信息更新,然后顾客搜寻这个公司信息的时候会出现什么问题。(cache)
16. 要我画一个facebook的社交图,然后如何遍历这个图,找到三度好友
17. 设计一个好友介绍功能, 就是把拥有共同好友数目最多的好友推荐一下。她的意思是就是给我一个人,它有一个list表示他所有的朋友,每个朋友有个linkedlist表示他的朋友,要把跟这个人共同好友最多的,但是目前还不是他朋友的top5取出来
18. 实现auto-complete。我说哈希和trie都可以。然后写了代码
19. 比如我输入一堆公司名,可长可短,让你设计一个数据结构,要求存下这些名字,并且按输入顺序print出公司名(重复出现的公司名不会被存入)。最后我用arraylist和hashset实现的,当然答案可以很多种,说出来就好,都不难。然后问了如何设计hashfunction,比如针对integer或者string,如何设计,如何解决collision的问题(我说用chaining,解释了一下如何实现,追问还有别的办法否,我说我只知道这个,对方表示itsOK)(也可以用trie替代hash)
【*****函数实现*****】
1.给一个char型数组,然后reverse, 让口述代码,strcmp, strlen, strcpy, itoa
2.给一串字符,把里面空格换成%20
3.从尾到头打印linked list. O(n)时间O(1)空间
【*****算法****】
1. entry[1, 5, 9 15, 20], exit[2, 6, 18, 35,60] 里面存的是time stamp,记录是进入会议室的时间,给你一个时间,问你此时会议室里面有多少人,我说了一下方法就是binary search什么的,后来非要我优化,我就说了一种类似于radix sort的方法,已知一些数据可以进行预处理(?利用bucket sort预处理, e.g.每个bucket存10k ~10k+9, 在对应bucket内binary search)
2. find unique missing(1-100有99个数只出现一次,找到missing one, 用求和可能溢出 ----我说用平均数代替,他说用tree可以达到O(lgn))
int findUniqueMissing(const std::vector<int> a)
    int ans = 100;
    for (int i = 0; i < 90; i++){
        ans ^= i+1;
        ans ^= a[i];
    }
    return ans;
}
若array为sort,可以binary search,类似:
Given an array of unique integers in increasing order, return the integer with its value equal to its index in the array
3. 1)求array 平均数, 非常基础,要求念出具体的code。又问数多溢出怎么办.
2)有很多个node,每个node 存了一个int数组。
——如何求一个global_Average,全部node里所有数组的平均值。简单。
——如何求一个global_Median。他提示,你可以写一个function 去check If_global_median。 这个可以写,就是让每个node 返回有多少个数比他大,多少个数比他小,总个数,是否存在这个数。用第一步得到的平均数去check(or 最大最小的平均值),然后二分查找。
3)找streaming median。 我用了两个heap,三哥说你确定要用这个吗,我说是,他说那你写吧,写完再说。 时间复杂度,nlgn。 他说还可以更快吗。我想了一下,可以建数组,存frequency,他问这样做问什么可以找median。
4.把多个string存成一个string来传输,然后对方可以还原为多个string (cipher and decipher),过程要求无空格, 原串中可以包含任意字符。
- 可以用length的数值作分割,放在每一个string的前面,可以在数字后面加个#
- 把一个非空格字符x变成1x, 空格变成00
- 转义:约定空格编码成\,原本的\用\\来表示。那么在decode的时候如果看到了\,就看后面连着的是什么。如果是\\就替换成\, 如果就孤零零的\,那就是空格了。
5. 给个数组,例如{3,1,1,6,6,9,9,9}, 然后按照数字频率由高到低输出,如果频率一样,则大的先输出。结果就是“9,9,9,6,6,1,1,3”, 这道题用的hashtable先算每个数频率,然后对所有的arraylist排序。
6. fib数列, 基本递归(T(n)=T(n-1)+T(n-2)=> T(n) = ((1+sqrt(5) )/ 2)^n)和循环的让说了下复杂度,DP的代码让说了下
7. 给两个matrix S和P,判断P是否是S的submatrix,面试官说用brutal force即可。
8. ABCDE 变成 DEFGH 就是平移了一下..然后给一个字典确定某个单词是都有效,要求是恢复全文,只考虑lower case.第一个单词找出所有possible shift distance然后第二个用第一个的结果narrow down这些可能的distance..一直到最后剩下一个就是我们要的..问是不是要读完所有单词,找到剩一个distance程序里的for就break了.
9. 给一个array,让你找到最大和第二大的数
two array A and B, find the max positive difference between element a from A, element b from B, but a and b cannot have the same index. 其实简单到不行啊,就是一个找前两个最大的,一个找前两个最小的。
10. Hamming Distance。就是给两个数,求他们有多少个bit不同。
11. Search a 2D Matrix 
10,20, 40, 50
12,22, 45, 52.
15,36, 47, 60
18,38, 48, 70
12.概率
1) shuffle card
2)现在有一个random generator可以generate 范围是1-5的integer, 问怎麽generate出1-7的integer, 要求要equal possibility.
3)16KB int的数随机数是rand(),然后64KB integer的用rand()怎么表示。(rand() << 32) + rand()
13. string compression(1.问这有什么用,答可以压缩空间。问什么时候不能用,答abcd时候不行。还有什么时候不行(string 里含数字?)。三哥说如果重复很多会有什么问题。答应该会integer overflow 2.decompress string,a#3b#4cddf#4 -> aaabbbbcddffff)
14. 给一个二维递增数组,最后一个空里面是space,最后的space可以和左边,右边,上边的数交换,可以交换好多步。要求的函数是给交换后的结果,从结果推出交换的步骤。这个数组里面的每个数都是确定的,永远是1-n,直接在空格周围找到该在这儿的数再不断交换直到space到最后一个空为止。
交换前的矩阵例子:
1    2    3    4. 
4    5    7    8
9    10  11  12
13  14  15
15. [event-driven]
1)每个人有死亡时间和出生时间,在1900-1999之间,找出哪年活人最多。
2)有一些schedule,不同人的,然后找到大家都有空的第一个slot;他不告诉你输入类型,所有的都是自己定义。
16. [1,2,-2 ,1,-2]这样的叫singlecycle把,意思是,从index0开始,index0+array[index0]跳到1,然后index1+array[index1]继续跳,要求是,每个index都跳到,而且最终跳回index0.空间O(1),就想到用count来计数,count=array.length的时候检查当前index是否在0,结果烙印又给了个edge case[3, x, y, -3]。[while(index != index0 && count != array.length) 跳出循环后如果两个条件同时爆表则true 否则false]
17. bst,给一个double数字n,要求找到bst里面跟这个数字最接近的节点.
18.给一个图,given你自己的node,返回有最多邻居的你的邻居。
19.问了integral image存像素的方法,让你实现两个function,update pixel 和 给定两个点,找出这两点组成的矩形内所有pixel之后,然后分析这两个function complexity. 找pixel sum的时候也要check 边界条件,和考虑integer overflow
update(vector<vector<int> > M, int x,int y,int value){
// your code;
  // 此处 check 边界条件 然后 M[x][y] = value;
}
20. 一个很长的linkedlist, 不知道head在哪里,给出一个node要你删掉。
21.1) put all white spaces in the end of the array input: char array. output: void note: in place
2)给一个int数组,把数组中所有的非零元素挪到数组的右边,所有零挪到数组的左边,要3)求不能改变非零元素原来的相对顺序。(其实0的相对位置改变了- -)
22.给两个数组,第一个记录数,第二个记录待删除的数的index。从第一个删掉第二个数组中出现的index对应位置的数。(先将后者排序)
23.数组/链表 找交集差集并集
给你N个数组代表N种股票的每天的交易员ID(比如1 2 2 2 8 2 1就代表7天里3个交易员在负责这些股票),返回所有参与过所有股票交易的交易员ID。
这个用hashmap存交易员id和他对应的count,同时记录当前扫到第k个股票的数组。如果看到一个id,并且count等于k-1,就加1。结束了把所有count等于k的id输出。
——1)hashSet(当集合类别有限时可以考虑直接作为数组下标或用bit操作在一个int上记录(a-z))
——2)先分别排序,然后类似merge得到结果(对于数组可以仅排序第一个,第二个通过binary search处理)
——3)多个可以依次拿之前的结果和之后的比or hashmap数个数or分治分布式,先分别两两处理,再同样方式处理结果
24.1)given a string, find the first duplicate/unique character in this string.
remove duplicate in array考虑所有的edge case, 我用try catch exception
2) 如何找第一个字符串中出现的第一个第二个字符串的字母。给我举例子,S1 = "Hello", S2 = "Apple",那么返回2,因为s1(2) = 'l' == s2(3)
3)一个数组print出第一个出现次数为奇数的数。卤煮说用hashtable,value为count。印度小哥要求减少hashtable的空间,卤煮当时想半天也没想出来(后来觉得可以把count的类型定义为boolean或者byte,就比integer小了嘛——直接用hashSet插入/删除),卤煮给了另一个异或解法,pass。
Q4). 数组里有一堆数字,除了一个出现奇数次,其他都是偶数次。找到那个奇数次的。
就是single number,会问你如何检查输入数组是对的,比如全部是偶数,比如有两个奇数。这个拿第一次出来的结果回去再扫一次数组统计这个结果的出现次数验证之就可以了。[0, 错误输入检查?]
——1)hashmap记录出现次数(hash情况同23),queue记录出现顺序(如果需要)
——2)先排序 - remove duplicate from sorted
25.给个char数组然后打印排好序的,我最开始说mergesort,他不满意,我说用数组存下count,他说好
26.一个无序的数组,打印里面所有差值为3的pairs,pair中大的在前,小的在后。例如 [1, 3, 9, 2, 6, 8, 4, 7]那么就应该打印 (7,4) (9, 6) (6, 3) (4, 1) ....我说全放到hashset里面遍历,看相差为3的元素在不在set里,然后分析时间空间复杂度。follow up问如果O(1) space怎么做,我说排序,然后双指针或者binary search,先分析时间复杂度,然后写代码
27.给一个只有0和1的矩阵,0是能走通的地方,1是过不去的墙,从0,0开始走,只能走上下左右,打印出所有能走得到的点。
28. 找leading number。就是给个数组找出那些比其后出现数要大的数。比如2 4 12 5 3 4,leading number就是12 5。(O(n)从右往左扫一遍出来。)
29. find mode value in an unsorted array. 我的思路是先radix sort,然后从左到右扫了一遍,update之前出现最多次数的count和对应的数。(mode value就是数组里出现的次数最多的element,不一定超过数组数量的一半,所以majority  vote 不行)。
30.判断一个double的长度是否为k(连续*10至刚好为整数,并判断当前/10^(k-1)是否>=1 & <= 9),判断一个数的小数是不是K位(*10^k取整后不变&&末尾不为0)
31.1)链表里如果每个节点四个方向都有指针,给你这样的链表和一个值,让你找出值是否存在。遍历即可。
2)就是一个字母的matrix和一个字典.要我找到所有这个字母matrix能组成的存在于字典的单词..和某道leetcode挺像.然后又问了不是2D的是3D多D怎么办,什么数据结构好使. 
我恍了一下然后说了句adjacent list,只见他眼前一亮,于是我就想到了图, 我说可以构建图然后做BFS,他说那是exactly what I want,
32. 排序
1)然后国人小哥问了sort的各种算法,让我从一个乱序的数组里面,找出所有(i,j)pair,其中i的index比j小,值却比j大。(merge sort)
2)external-sort 给一个file有上千个numbers,给一个size为50的array,sort这个file
33.给两个list,A = {1, 2, 3, 4, 5}, B = {1, 2, 8, 7, 3, 9},  一种输出结果应该是 {1, 2, 8, 7, 3, 4, 9, 5},按照数字在A,B中出现的先后顺序合并。 (这道题用两个Map标记一个数在A和B中出现的位置,i, j为A、B当前的下标,A[i] == B[j],则添加一个,然后i++,j++,如果map_B[A[i]] > j,则添加B[j]到结果,j++; map_A[B[j]] > i,则添加A到结果,i++。若同时成立则有环,其他情况随便添加 or 拓扑排序)
T33. 股票系统 Apple 300, Goole 150, Apple 150,。。。 烙印说你弄个maxvalue, minvalue,
W35. malloc a 2d array in c
36.string to integer& integer to string带逗号,比如32,729 要变成32729.问edge case像空格啊字母啊要怎么处理(直接print)
37.找一个string的distinct substring数量,follow up如果这个string有100,000个char咋办(suffix trie)
W38. given一个linkedlist of numbers, check if it is a palindrome
39. 给一个matrix of numbers,问怎样找出相同row。(类似bucket sort)d
40.(a+b)*c+(a+b)+c,去除没用的括号。
41.从一个字典中找出能被其他单词拼成的所有单词, 就是CC最后一章的题目。
42.给一个list, list中有两个数. 过程中可以一直往list中加数进去(append在最后), 但必须一直遵守三个条件:
1. list中所有数均需大于0
2. list中所有数都必须为unique
3. 新加入的数必须为已存在list中的某两数的差
要做的事情是把所有可能的过程(一直加到没办法加入新的数字为止)都给打印或是回传
ex. [30, 5], 则最新加入的数只能为25, list变为[30, 5, 25]
继续, 只能再加入20, list成为[30, 5, 25, 20], 接着就有两种选择, 可以加10(30-20) 或是15(20-5).
于是会分出两个branch
[30, 5, 25, 20, 10] 跟[30, 5, 25, 20, 15], 然后再把最后一个可能补上之后变成
[30, 5, 25, 20, 10, 15]跟[30, 5, 25, 20, 15, 10], 所以就回传这两个list.
可以预见的是如果一开始的两个数大小相差很多ex[99, 1] 那最后就会回传很多种path
加入的时候即刻存对所有数的差,预先通过最大公约数得到list的size
43. 数字合并。就是1,2,3,4,6,7,9,11的话要变成1-4,6-7,9,11
44.给了一个自定义的类:
Class Stream {
   vector<int> numbers;
   int getNextMin();
}
numbers里面的数字是无序的。getNextMin方法返回下一个最小值。问题:用上面给出的类实现下面的新类:
Class NewClass {
    vector<Stream> streams;
    int getNextMinNumber();
}
要求实现这个  getNextMinNumber 方法。
45.remove 所有有且只有一个child的节点(将child连致parent)。Level order travel + hashmap解决。
46.类似two sum,两个array,unsorted,may have duplicate,里面的数值都是bytes,要求不用hash table,不用额外数组,找到一个pair sum to target value,然后想法是用一个long long的var当成bit vector,对于第一个array里的每个数,那个long long var的对应bit置1。。。[radix排序?]
48. 面试官叙述了一个问题,大致是一个公司有n个小组,招收了m个新人(n>m),培训结束后按打分制度把学员分配入各个小组,每个小组只能招收一个新人。每个新人按照喜欢程度列出最想去的小组,每个小组按照喜欢程度列出想要的新人,如何找到最好的match?比如说小组1最想要A,其次是B,再其次是C; 小组2最想要A, 其次是C, 再其次是B;  A最想去小组2,其次是小组1;B最想去小组1,其次是小组3。。。此时应当把A分配进小组, B 分配给小组1。 面试官的想法是: 先根据每个新人的打分询问小组,看该小组是否已招到人,如果没有,加进新人并把状态改为招到人。如果再有新人询问想要进该小组,该小组比较对两个新人的打分情况,留下喜欢程度高的新人,“踢走”另一个新人。如此循环,直到所有新人都找到小组。之后让我把他的想法实现成代码。
49.有1,3,5三种面值硬币怎么用最少的硬币凑出凑到target
50.linkedlist相交
1)intersection of two linked lists的升级,给三个list,结构严格按照如下描述。首先有两个list会merge到一点,形成一个list之后再经过几个node之后和第三个list merge到一起,guarantee有两个merge的点,如下图
head1 head2   head3
|          |           |
|          |           |
|          |           |
 \        /            |
   \     /              |
   \ /_ _ _ ___  _ |_ _ _ _ NULL
现在给三个list的head,找出第三个list的head(就是给你三个list的head,然后找出最后一个merge进来的list的head,图中的head3)。
2)K个链表相交,找这K个链表的第一个共同交点,给的是K个链表的head,链表长度未知, 在他的各种提出要我优化下,我给了3,4种解法.他的要求是没有必要每一条链表都从投走到尾.. 
其实就是可以hash node的position然后其他剩下的所有链表走到交点判断下相交点的position是不是比当前存的更大就行了。
51. Given parent - child pairs, reconstruct the tree and return the root node. [用一个hashmap来存已经读到的node,然后再用另一个存所有的child,通过比较两个hashmap的keyset就可以得到root,然后返回就好]
52.input array of number {1,2,3,4,5,6} return number of  array {2*3*4*5*6, 1*3*4*5*6,1*2*4*5*6,1*2*3*5*6,1*2*3*4*6,1*2*3*4*5 }, 要求 不允许用除法
int left = 1, right = 1, n = num.size();
vector<int> ret(n, 1);
for (int i = 0; i < n; i++) {
ret[i] *= left;
ret[n - 1 - i] *= right;
left *= num[i];
right *= num[n - 1 - i];
}
53. 一长串整数,大到放不进内存,每个数任意大小,无序,要求一个功能:返回一个其中不存在的整数,如何实现。(每部分sort,得到空闲interval 取交集)
54.实现auto-complete。我说哈希和trie都可以。然后写了代码
55. 给你一堆坐标点,找出当中的一个坐标点使得所有坐标点到该坐标点的曼哈顿距离之和最小(思路:计算两个数组totalX[n], totalY[n].
totalX[i]表示如果在i点集合,所有其他点到i点的x方向距离之和是多少?
totalY[i]表示如果在i点集合,所有其他点到i点的y方向距离之和是多少?
min(totalX[i] + totalY[i]) 就是最后答案。
先对所有点按照x坐标排序。然后用O(n)的时间算出totalX[i]。
totalX[i] = totalX[i-1] + (i左边有个的点数 * (X[i] - X[i-1])) - (i-1右边有的点数 * (X[i] - X[i-1]))
totalY[i]一样的思路。然后O(nlogn)是总复杂度. )
Q66. 将一个int转化为素数相乘的形式,例如10的输出是“2*5”, 30的输出是“2*3*5”
Q67. 给一个list的air tickets, 每个ticket有出发地和目的地,给这个tickets排序,使得能够完成一次round trip
68.给你很多很多的点,和之间有没有连线。要你设计一个数据结构来判断给你任意两点,他们是否连在一起的(图的链接区域 or UF)
Q69.有一个数组,数组里元素先递增再递减再递增,然后给一个element, 返回该element的index或者-1, input : [2,3,5,7,-3,-2,-1,4]  element:-3  返回4
70. 将一个int转化为素数相乘的形式,例如10的输出是“2*5”, 30的输出是“2*3*5”
将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成: 
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
71. “给一棵树,将它打乱。保证在新树中,每个节点的子节点都不是原来该节点的任意一个”[大概思路就是是: 
TreeNode *randon(TreeNode *root){ 
    if (root==null) return nullptr;
if (!root->left && !root->right) return root;
    TreeNode *left = randon(root->left), *right = randon(root->right);
if (root->left) {
root->left = left->left;
root->right = left->right;
left->left = root;
left->right = right;
return left;
} else {
root->left = right->left;
root->right = right->right;
right->right = root;
right->left = left;
return right;
}
    }
72. 比较简单,就是一个Price list,包含["APPLE", "123", "GOOGLE", "300", "IBM", "99"]这种,然后又来了一个Profolio list,["APPLE", "IBM"],问判断Profolio list中的公司名是否再Price list中,并且输出一个list,包含价格以及是否存在的信息,形式为["APPLE", "123", "Yes", "GOOGLE", "300", "No", "IBM", "99", "Yes"]。
73. UTF-8 decoding
UTF-8是一种变长字节编码方式。对于某一个字符的UTF-8编码,如果只有一个字节则其最高二进制位为0;如果是多字节,其第一个字节从最高位开始,连续的二进制位值为1的个数决定了其编码的位数,其余各字节均以10开头。UTF-8最多可用到6个字节。 
如表: 
1字节 0xxxxxxx 
2字节 110xxxxx 10xxxxxx 
3字节 1110xxxx 10xxxxxx 10xxxxxx 
4字节 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 
5字节 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 
6字节 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 
因此UTF-8中可以用来表示字符编码的实际位数最多有31位,即上表中x所表示的位。除去那些控制位(每字节开头的10等),这些x表示的位与UNICODE编码是一一对应的,位高低顺序也相同。 
实际将UNICODE转换为UTF-8编码时应先去除高位0,然后根据所剩编码的位数决定所需最小的UTF-8编码位数。 
因此那些基本ASCII字符集中的字符(UNICODE兼容ASCII)只需要一个字节的UTF-8编码(7个二进制位)便可以表示。 
74.写一个类实现 linkedlist和nodes 然后要求重载运算符==判断两个list的值是不是都对应相等
75. 给定一个10个无序的字母,如何在一个dictionary找到包含10个字母中最多的单词。我想到的是,扫一遍dictonary, 看那个单词包含最多所指定的10个字母,她说有别的方法吗?我说把字典存在hash set, 然后10个字母的任意数量的任意combination hash下,从10的combination hash起,依次减少知道找到那个单词。最后又讨论了下排序有帮助么?(按照包含字母个数排序?)(字典编码为int, 每一位对应一个字母,long long如果分大小写的话, 以此做key建立hashmap, 然后k从10到1,依次获得10中取k的任意combination转为key查询)
Q77.有一个数组,数组里元素先递增再递减再递增,然后给一个element, 返回该element的index或者-1, input : [2,3,5,7,-3,-2,-1,4]  element:-3  返回4
Q78.给一个list的air tickets, 每个ticket有出发地和目的地,给这个tickets排序,使得能够完成一次round trip
Q79.给定各种语言的字典, 给一篇文章, 给定一个function getWord可以取得文章中的下一个字(从头开始, 类似iterator的getNext) 问你要怎么样check他是哪一种语言(ex, English, French 等等).给了一个一直把字放到各个字典里比对然后对每个字典投票的算法, 面试官问有没有不用把整个字典都预读到memory的解法, 完全没头绪...(对文章hashMap记录各词个数,分小字典投票,对应语种字典票数相加)
80.有一个函数,如果这个函数一分钟之内被call了大于5次,输入一个warning~~;写一个函数,10秒内如果该函数被调用了至少十次就返回true,否则false
假如已经有了timestamp的函数,那么就是建一个长度为5的queue,里面存每次call的时间,每call一次,把queue的第一次call的时间相比较,看是不是在60秒以内,是的话就输出warning。然后把queue top() pop出去,把最近call的push进去,就可以了~~还要注意初始时候queue小于5的处理~~
时间boundary为T,次数为>K
que.push(currTime)
while (que.front() + T < currTime) que.pop();
if(que.size() > k) "warning"
T81.给定一个function, double getprice(double stock) ,然后 让写怎么利用给定的function来实现double getstock(double price)。 idea就是binary search. 写了代码
Q82.一个数组作为输入,输出是给用户看的histogram,纵坐标表示以0 ~ k -1, k ~ 2k - 1如此划分的不同区间内的元素数。假设现在用户可以直接拖动一个slider来调整k的大小,试问如何优化这个操作的时间和空间。
一开始说每次用户给个新k值都暴力扫描原数组,答可以。问如何优化扫描速度。
然后说先排序数组,然后做N/k次二叉扫描,搜索数组里最小的大于等于k-1, 2k-1, 3k-1的数组的index,返回的值就是可以用来划分的index(让二叉搜索的失败返回值不是-1而是low指针就可以),然后histogram就是index1, index2-index1, index3-index2这样。问如何继续优化,假设最大数字不是很大。
于是想到counting sort里的那个辅助数组C,C[i]记录小于或者等于i的原数组的元素的数量。扫描一次原数组,然后不需要二叉搜索,直接读取C里面的k-1, 2k-1, 3k-1等等的值就可以了。问如何优化空间,假设最大数字很大。
于是想到用interval tree优化空间,不过牺牲了查询速度,这个部分讨论一下思路就结束了。
【*****计算几何******】
1.有很多很多的圆,找一个最小面积的大圆,正好可以覆盖这些圆。
2.求出平面中多个圆的面积,给了各个圆的x,y坐标和半径r,圆和圆是可以重叠的,重叠部分面积不应该重复计算。【圆的那个题楼主当时脑洞大开,用得方法是找一个矩形使所有圆都在这个矩形中,然后向矩形中射击大量的paintball(对,就是这么跟面试官说的……)算出圆被击中的百分比,然后乘以矩形面积就是了】(容斥原理?)
【===========brain teaser============】
1. 100 light bubbles, could be switched to  on or off. The initial status is all off. The first round, switch every bubble, the second round, switch every two bubble, ......comes to the 100 round.
Question: how to implement this process. Follow up: at the end, what bubbles are on.
2. 有十个wizard,每个人头上戴一顶帽子,帽子颜色要么是黑要么是白,十个wizard身高各不相同,比较高的wizard可以看见所有比他矮的wizard的帽子颜色,但是自己不知道自己帽子的颜色。现在这十个人由高到低站成一排,每个人有一次机会说出一条信息且只能说出一条信息,比如可以说我前面的人的帽子的颜色,但是说出之后就不能说出我前面的前面的人的帽子颜色。如果wizard说出的信息是自己帽子的颜色,那么可以生还,否则被杀,要求设计一个方案使得这10个wizard中有尽可能多的人生还。
3. 10*10*10方块,问表面涂上颜色的话,没有涂颜色的有多少个
4.问立方体的对角线长度,然后说毛毛虫爬过去最短走多长。让解释给他听。
5. 25匹马,每轮能跑5匹,怎样跑最少次数找到前三名。
6. 一道是有一个洗手间,只有一间房子,要求设计一种规则。假设每个人都会严格遵守规则,问如何设计可以使得男女不会同时进入洗手间。我开始是采用3块牌子的方法,一个man一个woman一个empty。Empty谁都能进,但是把对应的性别挂起来,另一个性别不能进。最后一个出来的要把牌子换成empty,非常简单。追问:如果每个人上厕所时间都是1分钟。这时先来了个男的,之后每30秒来一对couple,会怎么样?如何解决?其实问题就在于女的永远上不了厕所,会被憋死。然后我说挂了计时器,到了3分钟不能再进,然后最后一个人出来把empty挂起来,再把计时器调为0,对方表示满意。
7. 如果1到100号人坐一圈,从1开始把自己后面的人推出去,知道剩最后一个人,问是多少号,规律是什么。答案其实不重要,其实是要寻找其中的规律,写出如果是n个人会剩谁的通式。算法用cycle single linkedlist实现[2^k <= n < 2^(k+1): (n - 2^k) * 2 + 1]
8.问了一个非常不典型的几何体,给你圆柱体,正方体和球体,有三种操作intersection, union, difference(和集合论的一样),比如intersection就是两个几何体的体积相交部分。然后他给了我一个实体的模型,一个里面被挖空的正方体,里面有一个可以自由运动的球体(但不能走出这个正方体),正方体六个面都有圆形的孔,问我通过上述什么操作和用什么几何体能得到这个模型。
9. 4 people cross a bridge, each of them takes 1 min, 2 mins, 5 mins, 10 mins to cross bridge respectively, only one flash, how to use 17 mins to send all of them over to the other side. 然后问有没有一个具体的策略来解决这个问题,如果数值变了。
10. 就是给你N(假设偶数吧)支球队,要两两之间各打一场比赛,一共有N-1轮,每轮N/2场,要你给出一个schedule,只要给出一个能work的方案就行了,先不管效率问题
11.三角形三个顶点有三个蚂蚁,等概率沿两个边爬。碰撞概率。
12.一个大矩阵,告诉两个点,然后找出这两个点之间直线上所有的点. 就是给你一个m*n的矩阵,然后从对角线上连线,看你能穿过多少个方格,应该是m+n-GCD(m,n), GCD指的是最大公约数
http://www.1point3acres.com/bbs/forum.php?mod=viewthread&tid=28651&extra=page%3D2%26filter%3Dsortid%26sortid%3D311%26searchoption%5B3046%5D%5Bvalue%5D%3D14%26searchoption%5B3046%5D%5Btype%5D%3Dradio%26sortid%3D311
http://www.1point3acres.com/bbs/forum.php?mod=viewthread&tid=78089&extra=page%3D2%26filter%3Dsortid%26sortid%3D311%26searchoption%5B3046%5D%5Bvalue%5D%3D14%26searchoption%5B3046%5D%5Btype%5D%3Dradio%26sortid%3D311
http://www.1point3acres.com/bbs/forum.php?mod=viewthread&tid=78375&extra=page%3D4%26filter%3Dsortid%26sortid%3D311%26searchoption%5B3046%5D%5Bvalue%5D%3D14%26searchoption%5B3046%5D%5Btype%5D%3Dradio%26sortid%3D311
【==================behavior======================】
"Bloomberg L.P. provides financial software tools such as an analytics and equity trading platform, data services and news to financial companies and organizations through the Bloomberg terminal (via its Bloomberg Professional Service), its core money-generating product."
哪里听说的Bloomberg
毕业之后的打算。
为什么要bloomberg,跟其他IT公司比有什么不同
为啥学EE找工作要找software
然后就是hr 问expectation什么的
 where do you see yourself in 5 years
ee to cs 对coding有信心?
简历方面,问了project challenge的地方,然后有没有遇到过不好的队友,为什么做这个,有什么优点,比不这样好在哪。不这么做,哪里有问题。。。都一个意思问了好久。。未来几年有啥规划, 你觉得C++和java你更喜欢哪个啊?这问题是HR问的!我想啊!我当然喜欢java多简单那!可是你家用C++,我就说了说C++哪里好。。。介绍自己project,
第四轮的面试官跟我说,bloomberg的engineer不仅是工程师,也是business man,需要能和陌生人很好地交流,工作自由度很大,hirarchy很弱,有时候要去找不认识的同事帮忙,要说服别人能帮你做事。所以感觉BLOOMBERG对技术的要求不是特别高,相反对交流能力要求比其他IT公司高一些,所以面试的时候表现活泼一些,不那么nerd的话感觉会加分很多。
【==================design==================】
【********常见题********】
【1】马拉松
一个track上有很多runners(runner已经给的属性有id和name),还有很多check points(已给属性为distance:距离终点的距离,和id),check points可以检测到哪个runner跑过它.
[需要往这两个对象里加什么样的properties]
1. 实时更新top k的选手
2. 用这个系统生成一个dashboard显示runner现在的名次/实时更新排名表。
Sol:
#####问题就是如果有40个人,都在两个cp之间,而且在冲刺的话,他们的顺序会发生变化。在进入下一个cp之前我没办法知道到底谁在前谁在后#####
basic: 每个cp记录跑过运动员个数,若该个数 <= 10则返回当前运动员runnerIdx & 该cp的distance & 个数
sol1. 对于topk, 可以用hashMap & maxheap构成indexMaxHeap,存储(runnerId, dist)接受到条目后,或decrease_key,或删除最大(top)&插入(仅在严格<时操作) {类似股票} 0(nlogk) n : k*num of check points
sol2. 每个CP维护一个list,将当前pass的人从之前删除,添加至当前list,cp记录当前pass了多少人,用以对runner设置名次,若名次在前10,通知leadboard更新离终点最近cp,对每个cp取list, 直到第一个当前设定超过10的cp
sol3. 相当于LRU, 维护一个list, 每个cp存当前刚pass过的runner所对应位置,每个cp检测到runner后,将该runner删除,并加入改cp指向的位置下一个 ,更新cp指向位置(可以将list改为size为k, 仅记录号小于k的cp参与,添加删除同前)
【2】电话薄phone book (一个人名对应多个电话号码)
1. output the phone book by alphabetic order
2.输入人名:0)auto-complete, 1)查找对应电话号码,2)返回和这个人是neighbor的另外4个人的phone number(alphabetic order)
3.输入电话号码找名字
4.如果不考虑memory,在disk上做,怎么设计这个数据结构[电话本在disk上应该就是简单的database吧,一列是人名,另一列是电话,因为一个人可以有多个电话,所以同一个人名可以有多行。然后primary key 应该是人名和电话的组合]
Sol:
数据结构:Tire or treeMap (or hashMap ——不涉及alphabetic order的情况下)
——对于Trie返回neighbor:
查找下一个:直接在当前节点的children里找下一个,如果没有则返回parent节点,从下一个child开始遍历。
查找上一个:返回parent节点,从上一个child开始逆序遍历。
*每个节点可以存它所有可能到达的节点array,可以直接输出下一个(array的内容or parent array的内容来加速: 但array只在顺序添加人名的情况下为sort的)
——对于treemap完成auto-compelete, 找到第一个大于等于输入的节点,输出从当前节点开始,保证最后一个字母不变情况下的正序遍历的结果。
【3】公司-股票-价格
1.1)一个系统假设不停接收交易数据(公司名字,交易数量),让写一个程序返回当前交易量最大的十个公司. (接着问如果要随时调取最大交易量的N只股票怎么做,我说可以先数据分析,根据normal distribution 搞一个high confidence 的group, 再用同样的原理只考虑统计结果给出的股票,烙印貌似挺满意没有纠结。)
2)系统会不断推送<股票名,当前价格>给你,要求你实现三个接口:currentPrice(String name)返回该股票的当前价格,currentProfit(String name)返回该股票目前的利润(其实就是当前价格减去起始价格),top20返回当前利润最大的20个股票/股票价格变动次数最多的10个公司/当前历史最高股价排名前k高的公司和他的最高股价。
sol:
——对于key的大小只增不减or只减不增的top k, 可以用hashMap & minheap构成indexMinHeap of size k,存储(name, price/volume)接受到条目后,或increase_key,或删除最小(top)&插入 0(nlogk)
——若key有增有减or k不定,对所有股票建立indexHeap, 每次弹出前k
2. 老印设计一个class for stock name/price
function:.
1. insert
2. update 
3. delete
4. sortedByPrice
5. sortedByName
我:dictionary , sort 的时候上array, 写了比较完整的code; 老印: space太大
我: tree?. 老印: 继续 compare time complexity
我:(写下来完整time complexity 老印: 如果我加date 怎么写 我要排序打印 要考虑你之前写过的function 的 time complexity  比如 stock price date. 
我:在name tree里边再加个array 再sort, 最后一问想了很久 主要是要考虑当前 要用tree的状态(price作为node的field如何sort?)
3. 所有东西你都自己定义,一个让用户可以更新每个公司最新股价,一个可以把所有最新股价打印出来。hashtable就能解。
写followup,如果有很多很多entry进来,可是系统内存有限,你觉得你的代码哪里可能出错。 (内存不足?)
再followup问如果我想知道每个公司最近30个股价的均值和方差,你考虑加点什么,queue
再followup如果我想公司顺序按alphabetical order现实你咋办,我说那用trie?未置可否。
4. 统计
1)stock price coming, 有一个window的size是n,    O(1)更新window里数据的average,就是旧的average*totalnumber再减去dequeue的加上新进来的再除以totalnumber,这题要写class,我就写了个window的class,constructor,dequeue,enqueue啥的
2) input是(公司名,股票数量), 让算平均数, 再记录如果有些股票update了,怎么update平均数(差值/公司数+之前均值)
【*********OOD*********】
1.如果跟一个不懂computer science和programming的人讲明白object oriented中的object是什么? 
2.design讲几个software architectural pattern,具体解释一下,举个实际例子说明一个pattern,楼主比较弱,就讲了一个MVC和server client,其他的没讲。
3.设计class,card和deck,shuffle card,设计方法.
4.设计一个百货公司,里面有不同dept的employee,还有customer,还有商品.
5.parking lot
6. 音乐播放器的随机播放。(问的很细,包括函数是怎么生成随机数的,怎么用这个随机数实现具体随机播放功能,然后怎么避免重复播放,还有一堆关于设计的东西。)
设计手机上的音乐播放器,面试官一步步的说需要的功能,例如shuffle,搜索等等,主要讨论了用什么数据结构,最后讨论Database的table怎么设计。
7. 设计一个画板。我个人不太认可这类题的是,就算现实中的项目,我问你requirement你也该告诉我,问清楚需求才能做嘛,结果问什么美国大哥都说随你,我就懵了,你妹啊,我要知道你期待什么啊。感觉答的一般,给出了解法,但感觉并不出彩,空间复杂度有些高。要求就是没要求。问什么都是随你,我就想看你怎么设计。大概就是画板,有画刷,不同的brush画不同的东西,比如圆,三角,方框。然后还有要支持undo功能。而且支持点一下和拖着画。
如何实现windows paint的画方框功能
8.( strategy pattern)一个test car的系统,比如carA要test turn left, turn right, start, stop等等, carB要test speedUp, slowDown, turn angle等等,还会有carC,carD等等,要test可能不同,也可能有相同的部分。写一个class不管是哪个car都可以通过run这一个class来test. 不会啊!!。【设计题把测试方法抽象出接口,然后测试方法都继承它。车类持有多个测试方法类型的成员变量。这样应该可以.。
interface carTest{
        void test();
}
class turnLeft implements carTest{
        public void test(){System.out.println("Turn Left");}
}
class Break implements carTest{
        public void test(){System.out.println("Break");}
}
class CarA {
        private carTest turnL = new turnLeft();
        private carTest Break = new Break();
        public void tests(){
                turnL.test();
                Break.test();
        }
}
这样可扩展性更强, 当然抽象出Car类更好, 测试项目多了可以用ArrayList存。
是比较基本的多态。可以想象一下base class animal; derived class tiger, money; virtual function eat()的设计
9.有很多股票信息更新到系统里,同时需要把这些信息发给subscriber,问这个系统怎么设计(observer pattern)
【**********功能性design*************】
1. 如何实现一个内存管理。
例如:
a = new(100); //分配100MB内存. 
b = new(200);
delete a; 
c = new(500);
2.信息发送的load balancing。假设给你一个send()函数,可以发送一个message。要求你写个函数balancedSend(int msg, int cd),可以在cd的秒数内最多发送msg条信息(比如balancedSend(10, 60)就是60秒内最多10秒),并且尽可能降低每一条message的延迟。
就是个基本的写函数问题,跑send()之前计时,发完msg个信息后检查消耗时间,如果超过cd就直接下一轮,如果没超过就sleep(cd - 消耗时间)。
3. 第一个问题是 database 和 本地通信比较慢,如何优化。我提出用cache解决
4. 用户会发送buy和sell的指令给后台的服务器组,sell之前必须要有buy。但是服务器组内部跑指令可能会把指令顺序搞乱,如何保证能够正确执行原始的指令顺序。
这个其实我和他们聊了一阵子也不太明白是什么概念,毕竟我的想法是如果用户恶意输入无效指令我们也要去试图恢复吗(比如sbsbsbsb)。然后就是如何知道用户的原始指令顺序是什么,然后就是如何把信息递给服务器组(本身是个大黑盒,你不知道会如何)。总之聊了一下换题了,感觉不是很get到考点。
5.问了两个超大字符串的处理。最后连上follow up,还问了一些cpu运行速度计算(什么鬼),multithread处理。主要题目大概是两个超大字符串如何用最小空间+最短时间消除他们互相含有的字符。然后给出CPU计算时间。(分布式)
6. 大概就是frond end会发大量query到back end,怎么设计back end的system,可以handle海量的query,一个server是肯定要挂的。。。感觉要弄成distributed.
7. 设计一个traffic light system,要求是从南到北的十个红绿灯一开始都是红灯,如果有辆车从最南端开到北端,会触发第一个灯绿,并且接下来的灯能逐渐变绿让车能一直开到北边不需要停。 这题我回答的是写一个light class,用一个state表示红绿黄,然后写一个function,利用thread.sleep控制变化时间,同时在主函数里面不断唤醒下一个红绿灯。
8.scaliability
然后给了个图,说有个queue,queue里有股票的信息,怎么把股票信息存到database里去。。。我说那就存进去啊。。。完全不懂要问什么。。。问怎么存?我说按每只股票的信息存到对应的table里面。他说好使,但是一会你同事发来贺电,queue爆了存不下了,为什么?我说那存不下了,说明queue太小,把queue增大,他说好,两小时后你同事用发来贺电,又爆了。我说那说明enqueue的速度远远大于dequeue的速度啊,这样再大的queue也得爆,他说是啊,怎么办?支支吾吾了一会说,dequeue端多线程提高dequeue速度。他说好使,但是这个的股票必须persevrve order,怎么办?每支股对应一个特定的线程。他说好使,但是两天后同事贺电又爆了,到这时我直接崩溃了,恨不得掐死同事。。。不知道怎么办了,他说你知道问题在哪吗?老实回答不知道。他说bottleneck有很多可能,有可能是你dequeue不够快,但是也有可能是database写入不够快,你上来不应该理所当然的认为加快dequeue速度就能解决. 问题,应该先找出问题在哪!然后问写的太慢怎么办,我说有的database专门有写优化的,可以试试用这种database,他说是,但是你同事很不爽他不愿意换啊!丧心病狂的同事。。。怎么办?想不出,他说你之前用过同样的pattern了啊,这时候时间快到了,他也不等我了,直接说每支股票分配一个database进行partation,哦,我说这是要sharding啊,cluster 前面搞个key value查看哪个股票存哪个database。
【*******综合design*******】
1. 很理论的搜索系统的设计
2. 设计一个系统可以一直读 twetter feeds 然后显示在版面上 印度人一直抓着要 real-time 和有很多clients
3. 关于disjoint set。设计一个系统可以匹配互相能成为朋友的人,然后把能成为朋友的人组成group。
4. 设计一个给investment banker用的目标公司新闻推送系统。前端有注册,用户选择公司列表,实时更新相关公司新闻的呈现。中间有连接的维持方式(就是存一大堆sockets)和网路负载的优化。后端有新闻推送的收集,大量用户为目标的及时推送,服务器稳定性,用户信息的验证和推送的过滤机制。总之主要技术就是分布式,消息队列,Websocket,缓存服务器,备用服务器,也可以进一步用一些其他技术来优化比如storm和kafka。总之见仁见智,多主动和他交流,能想到的酷炫技术词都可以甩出来。最后答得他挺满意的,说我的设计基本就是BB在用的设计,虽然我都搞不清我的设计到底是啥了囧。
【*********c++**********】
http://www.cplusplus.com/doc/tutorial/
http://www.cs.ucr.edu/~lyan/c++interviewquestions.pdf
【1】 c, c++, java, why efficiencies c > c++ > java and differences, why c++ is better than c
/***Efficiency:
1.java uses java virtual machine (jvm) to run the code & garbage collection
2. Some C++ constructs impose performance penalties; e.g., Virtual methods
generally require indirection through a jump table for every call. Likewise, idiomatic C++ code can produce larger object code than equivalent idiomatic C code, which can make the C++ version not fit in L1/L2 cache where the C code would. Fitting in L1/L2 cache generally leads to huge performance gains since RAM is much slower than on-die storage.
 3.On the other hand, C++ Templates allow arbitrary compile-time precomputation, which can vastly improve run-time performance. In the limit, for example, you could write a complete solution to, say, the Eight queens puzzle entirely using templates, meaning that your resulting executable only uses as much run-time as is required to print the answer (which the compiler actually computed ahead of time while compiling your program).
/***c++ vs. c
why c++ better : OOP
Non-OO features that C++ has that C does not:
Templates
Function overloading
References
Namespaces
You can use structs and enums without writing struct or enum before every declaration or using typedefs.
Even if you don't define your own classes, using C++'s string and container classes is still often more convenient and safe to work with than c-style strings and arrays.
Type safety (even though some would call it weak)
Exceptions
Variable declarations in conditionals, C99 only has it in for
/***c++ vs. java
1. java runs in a virtual machine, while c++ runs as native executable machine code.
2.c++: Pointers, references, and pass-by-value are supported for all types (primitive or user-defined). java: All types (primitive types and reference types) are always passed by value
3.c++: Memory management can be done manually through new / delete, automatically by scope, or by smart pointers. java: garbage collection.
4.c++: Operator overloading for most operators. java: not allowed
5.c++: Single and Multiple inheritance of classes, including virtual inheritance. java: Single inheritance of classes. Supports multiple inheritance via the Interfacesconstruct, which is equivalent to a C++ class composed of abstract methods
【2】How do you call C functions from C++, C++ Function in C (Mix C and C++)?
extern "C" void foo( ); It will turn o_ "name mangling" for func so that one can link to code compiled by a C compiler.
http://www.thegeekstuff.com/2013/01/mix-c-and-cpp/ See detailed answer 
【3】memory Allocation/Deallocation
3_1) What is the difference between new/delete and malloc/free("operator new" works like the latter)
Malloc/free do not know about constructors and destructors. New and delete create and destroy objects, while malloc and free allocate and deallocate memory. Malloc returns a pointer to void (void *), and requires a special "typecasting" when it allocates memory for, which isn't type safe. Overridability: new is an operator that can be overridden by a class, while malloc() is not overridable on a per-class basis. check NULL for malloc, unnecessary for new(throw exception: std::bad_alloc)
new的过程:先allocate memory in heap 然后调用constructor
3_2) delete和delete[] 区别,delete[] 怎么知道要delete多少object的
The run-time system stores the number of objects, n, somewhere where it can be retrieved if you only know the pointer, p. There are two popular techniques that do this. Both these techniques are in use by commercial-grade compilers, both have tradeoffs, and neither is perfect. These techniques are: Over-allocate the array and put n just to the left of the first Fred object. Use an associative array with p as the key and n as the value
例:还有让找错,其实就是 delete[] A 写成了 deleteA,比较简单。
3_3)malloc()函数怎么实现(具体代码。。。跪)
malloc函数的实质体现在,它有一个将可用的内存块连接为一个长长的列表的所谓空闲链表。调用malloc函数时,它沿连接表寻找一个大到足以满足用户请求所需要的内存块。然后,将该内存块一分为二(一块的大小与用户请求的大小相等,另一块的大小就是剩下的字节)。接下来,将分配给用户的那块内存传给用户,并将剩下的那块(如果有的话)返回到连接表上。调用free函数时,它将用户释放的内存块连接到空闲链上。到最后,空闲链会被切成很多的小内存片段,如果这时用户申请一个大的内存片段,那么空闲链上可能没有可以满足用户要求的片段了。于是,malloc函数请求延时,并开始在空闲链上翻箱倒柜地检查各内存片段,对它们进行整理,将相邻的小空闲块合并成较大的内存块。)
3_4)c++内存管理http://blog.csdn.net/zhanghefu/article/details/5003407
3_5) Is there any way to specify which part of memory I want to create an object by using new?
void *pData = ....; // memory segment having enough space to store A object
A *pA = new (pData) A;
call destructor explicitly
3_6)memory leak 为什么重要,怎么解决 X
例class A(){};
  void xyz(){
   A *p = new A; 
  //call some functions
//call some library 
   delete p; 
}.
如果call some library出错了,会memory leak,可以 A p 或者try catch解决
【4】stack vs. heap  difference, advantages
http://blog.csdn.net/zhanghefu/article/details/5003407
例int* foo(){
  int a=5;
  return &a;
}.
int main(){
  int* result=foo();
  std::cout<<*result<<std::endl;
}. 
理论上来讲输出应该是garbage,因为a的lifetime只在foo里,所以指针在,但那块mem已经被标记了,输出还是5是因为那块stack没人动过,所以还是5. 但如果在main函数两行之间随便call一个别的那输出什么就不好说了。
例 Where does  
int a;  
vs. 
int * b = new int;
allocate in memory?
【5】c++  pass by value, reference, pointer 的区别,分别的好处及坏处
http://blog.csdn.net/barryxt/article/details/4382196
pass by value: call copy constructor, inefficiency
pass by reference is safer than pass by pointer: void* & point to other area(改char * const ptr - 不方便), pointer could be NULL
【6】pointer
6.1) What's the size of a pointer
generally have a fixed size(32bit or 64 bit)
X6.2)smart pointer !@#%^&()_
A smart pointer is a C++ class that mimics a regular pointer in syntax and some semantics,
but it does more. Because smart pointers to different types of objects tend to have a lot of code in common, almost all good-quality smart pointers in existence are templated by the pointee type
auto_ptr: The simplest example of a smart pointer is auto_ptr, which only takes care of Memory leak and does nothing about dangling pointers issue.
template<T> class auto_ptr {
T* ptr;
public:
explicit auto_ptr(T* p = 0) : ptr(p) {}
~auto_ptr() {delete ptr;}
T& operator*() const{return *ptr;}
T* operator->() const {return ptr;}
// ...
};
【7】overload和override的区别
overload: save function name, different parameter
override: derived class override the function of the base class, same function name & parameters
【8】i++, ++i那个更efficient
++i好 i++需要有temporary state (在i为instance,函数++返回时)为什么在for(int i = 0; i < n; ++i)里建议用 ++i而不是i++.
【9】c-string
/****实现strcmp, strcpy, strlen(输入\0, null结果)
/****what does a string look like in c?(array of char terminated at '\0') 字符串指针是啥(point to the first char of a c-string),c是怎么得到string的长度(遇到'\0'停止),
/****sizeof vs. strlen char *s : s 的 length 和 size 分别是多少
strlen() 函数计算的是字符串的实际长度,遇到第一个'\0'结束。如果你只定义没有给它赋初值,这个结果是不定的,它会从首地址一直找下去,直到遇到'\0'停止。而sizeof返回的是变量声明后所占的内存数,不是实际长度,此外sizeof不是函数,仅仅是一个操作符,strlen()是函数。
【函数示例】取得字符串 的长度。
#include<stdio.h>
#include<string.h>
int main()
{
char *str1 = "http://see.xidian.edu.cn/cpp/u/shipin/";
char str2[100] = "http://see.xidian.edu.cn/cpp/u/shipin_liming/";
char str3[5] = "12345";
printf("strlen(str1)=%d, sizeof(str1)=%d\n", strlen(str1), sizeof(str1));
printf("strlen(str2)=%d, sizeof(str2)=%d\n", strlen(str2), sizeof(str2));
printf("strlen(str3)=%d, sizeof(str3)=%d\n", strlen(str3), sizeof(str3));
return 0;
}
运行结果:
strlen(str1)=38, sizeof(str1)=4
strlen(str1)=45, sizeof(str1)=100
strlen(str1)=53, sizeof(str1)=5
/****刚开始写了个函数 int f(const char *s);. 
问输入和输出问题类型是什么,写一下如何调用这个函数,
C的库函数里面哪个原型跟f一样。(strlen)
然后写了个 statement: f(s1)==f(s2) IFF strcmp(s1,s2)==0;
问 f如果是strlen 成立吗?是atoi成立吗? 
然后实现f,我用unordered_map,写完了问了一下为什么不用map,我说map没有unordered_map快,他问为什么,我说存储结构的问题。
【10】static
/***static in c & static int i 和全局变量int i的区别
1. A static local variable inside a function keeps its value between invocations. A static global variable or a function is "seen" only in the file it's declared in. Dynamic global variable can be "extern " used in other files.
2.both initialized at compile time(default 0), release when program ends
/*** class static member varible, class static member function
1. no *this ptr
2. initialized out of the definition of the class (static const可以直接在定义的时候初始化) - c++11可以直接初始化
3.不同子类与基类共享同一个static member variable
【11】const
1.const可以给非const, 反之不行(除非const_cast)
2.指针const int *r 与 int const *r 一致, 表示r指向空间的内容不可改变; int *const r表示r指向的空间不能更换
3.const int foo() 返回值不可做左值
4.类中const成员变量需要在constructor中初始化,(static const可以直接初始化)
void foo() const; 表示不会修改成员变量
【12】实现atoi(如果输入garbage array 比如“hello world”怎么办 - 输出前端可以转化的部分,没有则为0;不考虑科学计数法;溢出则输出max)
【13】class :: general: OOP的特点,follow up封装性,以及为什么要封装, 什么是private, public, protected?follow up为什么要private. abstract clas,聊inheritance和polymorphism,聊oo design,经典的shape的oo design 。例子shape和circle,用C++写一个大概。
【14】class :: default function given by compiler - 1.constructor, 2. destructor, 3. copy constructor(pass by value, return by value, construct new object, generate a temporary object), 4.assignment operator.
what is the difference between 3 & 4?
- both swallow copy or call copy constructor/assignment operator of member variable
- 3 is for create a new object, might cause memory problem due to shared memory double deleted.
- 4 is to assign the same value to an existed object, might cause memory problem due to shared memory & memory leak of the previous memory
class A{
int c;
public:
A();
~A();
A(const A &other){c = other.c;} // copy: 必须pass by &, 否则值传递反复调用这个函数直到stack over flow
A& operator =(const A &other){if (this != &other) {c = other.c;} return *this;} //assignment, 返回引用为了可以x = y = z
或者const A& operator =(const A &other){c = other.c; return *this;} //防止(w1 = w2) = w3
}
例:一个空的class A让你改写。使得 A c; 编译不报错但是 vect<A> v; v.push_back(c);的时候编译报错。(拷贝构造函数私有)
例:write a copy constructor for class{  char* s; }         
这里郁闷了,一点一点问,然后follow interviwer的意思写,写到copy data member的时候卡壳了,说直接复制pointer 会有问题, 怎么copy。 这里发挥的太烂,感觉脑子不转了。
其实简单到: char * p; strcopy(*p, *s); 的事儿,硬是没反应。
【15】constructor & destructor
1. 顺序constructor:virtual base, then general base then derived; destructor永远是con的倒序
2.virtual
-There is nothing like Virtual Constructor. The Constructor can’t be virtual as the constructor
is a code which is responsible for creating an instance of a class and it can’t be delegated to
any other object by virtual keyword means
-derived class destructor will be called when ptr points to a derived object at run time (call过之后仍会像普通的情况一样再调用父类析构) 析构也可以是pure virtual - 但必须有定义体
3.both不能调用虚函数在基类的构造过程中,虚函数调用从不会被传递到派生类中。代之的是,派生类对象表现出来的行为好象其本身就是基类型。不规范地说,在基类的构造过程中,虚函数并没有被"构造"。因为基类构造器是在派生类之前执行的,所以在基类构造器运行的时候派生类的数据成员还没有被初始化。如果在基类的构造过程中对虚函数的调用传递到了派生类,派生类对象当然可以参照引用局部的数据成员,但是这些数据成员其时尚未被初始化。
例class A {
     A() { cout << "A" << endl;}
     ~A() { cout << "~A" << endl;}
};
class B : A {
      B() { cout << "B" << endl;}
     ~B() { cout << "~B" << endl;}
};
int main() {
    B b;
    cout << "main" << endl;
}
求输出{A\nB\nmain\n~B\n~A\n}
例:一个Class A, main function调用一个foo(),foo里面有两行代码:A a; cout>>"hello"。然后问如何不改function,print“why hello world”。其实就是在Class里面的Constructor和Destructor的问题。
【16】class, virtual & pure virtual function
1. virtual: 父类指针指向子类的时候C++用的什么机制 - dynamic binding (vptr指向compiler建的 vtable用来存vfun的address),
2. pure virtual: lead to abstract class(), 本身可以有函数体
例:要求实现一个 Class A, 里面有一个 foo(),别人可能会写一个 B 来继承你的 A,那么:
1、B必须实现foo() //纯虚函数
2、如果他没有实现foo(),提供一个默认的实现 //虚函数
3、同时满足1&2 //A内定义为纯虚函数&添加函数体 B中实现foo()时调用A::foo()即可
X【17】sizeof() class - 函数&静态成员变量不占用sizeof()空间,需要进行内存对齐(加至4的倍数?),对于虚函数需要有virtual ptr的空间(+4)
例:sizeof()空类(1),类里面有成员变量,类里面有函数,类里面有static成员变量, 类里有虚函数,类里有两个虚函数
例:How mang memory (i.e. sizeof(obj) ) will an object of class:
class foo
{
    int a;
    int b;
    long c;
} 
take?
what about adding member function, and adding virtual member function?
class bar
{
    int a;
    int b;
    long c;
    void f1();
    virtual f2();
}
【18】singleton class
推荐版本:(c++11后为thread-safe)
class Singleton{
public:
static Singleton &Instance() {
static Singleton instance;
return instance;
}
private:
Singleton();
Singleton(const Singleton &t);
Singleton& operator =(const Singleton& rhs);
};
//木有处理delete版本&禁止函数不全
class CSingleton  {  
private:  
     CSingleton(){}   //构造函数是私有的  
     static CSingleton *m_pInstance;  
public:  
     static CSingleton * GetInstance()  {  
         if(m_pInstance == NULL)  //判断是否第一次调用  
            m_pInstance = new CSingleton();  
         return m_pInstance;  
     }  
};
X【19】template
【20】void foo(int a, int b) { 
        cout << a << " " << b << endl; 
}
int main() {
        int i = 0;
        foo(++i, i++);
        return 0;
}

求程序输出结果? 2 0
C++的函数是从右向左push argument, 当然, 当argument是表达式的时候, C++会先evaluate表达式. 所以, 
--1. i++被执行, 0被push到stack, i变成1
--2. ++i被执行, i变成2, 然后被push到stack上
--3. 执行foo
所以输出时2, 0 - 依赖编译器的实现,实际开发中不应该使用
X【21】Exception
Exception Handling, How does catch() function work?
http://zh.wikipedia.org/zh/C%2B%2B%E5%BC%82%E5%B8%B8%E5%A4%84%E7%90%86 
Can I use multiple catch block?
【22】cpp怎么到exe。。具体的问,每一步怎么弄,还有怎么编译怎么link,然后问如果link找不到相关的函数怎么办
【23】读C++的code,说说编译时会出什么错。记不太清了,大概是这样
Person {
 int age;
};
Person p1;
Person & p2 = p1;
【例】
1:有一堆上古时期的legacy code(written in C),发现在生产环境下经常会crash。让我来fix。要怎么做?
我:看看log啊看看document啊根据log定位一下出问题的地方。
他:嗯。但是document非常多,你没时间看这么多document。log一切正常,就是打印了某一行正常的log之后就crash了。
我:那我看看core dump。
他:好的。那我看了core dump,发现是个segment fault。怎么办?
我:可以用一些static/dynamic analysis tools看看哪里有illegal memory access(比如valgrind)。
另外一个面试官:你用过valgrind吗?我说曾经有个project用过。
他:那我现在找到有一段代码,大概长这样:
int i = 0;
int a[10];
/** some other code, including some function calls **/
a[i] = 0;
crash在a这一行。你怎么看?
我:检查中间的其他代码有没有修改a或者i为非法的值。
他:都没有。
我:再看看中间那些function,如果有参数为a或者i的,看那些function有没有非法修改a或者i。
他:都没有。哦我刚才忘记说了。我在a之前检查了一下i,发现是个0xabcdef什么的值。
我:(卡壳)
他:我给你个提示。我发现如果我把第一行改成 static int i = 0; 程序就不crash了。
我:嗯……那说明有其他线程污染了i……
他:你想想static和没有static的区别是什么?. Waral 鍗氬鏈夋洿澶氭枃绔�,
我:有static,i在单独的data segment里。没有的话i就在stack上。
他:然后呢?
我:调用其他函数的时候stack被污染了!
他:(点头)
2:给两个函数,DB* openDB(const char* name); int closeDB(DB* db); 针对成功的操作和失败的操作都有不同的返回值。写一个c++类把这俩封装起来,让我在这个程序里可以随便调用。
我写了个singleton。大概就是 http://stackoverflow.com/questio ... eton-design-pattern 这样的,另外加了一个destory()来close资源。
他问了我里面的几个static的意义。然后说我这里DB返回的是指针,你要返回的却是引用。这都不能编译啊怎么破?
我说把返回的指针dereference,然后存起来。调用getInstance的时候返回引用。
他说这样可以编译。但我跑的时候发现这里会crash,为什么?It's all right if you don't know that。
我这个assignment可能是一个shallow copy,里面有pointer的话就可能会有指针管理上的问题。
他表示这不是他想要的答案……(最后一题可能是 threading的问题。
其他的thread可能已经删除了这个object 所以应该是先一个类似OpenPinned)
http://www.1point3acres.com/bbs/forum.php?mod=viewthread&tid=107560&extra=page%3D3%26filter%3Dsortid%26sortid%3D311%26searchoption%5B3046%5D%5Bvalue%5D%3D14%26searchoption%5B3046%5D%5Btype%5D%3Dradio%26sortid%3D311
X3.接着就问有个类,在构造函数中有一个打印Hello world的函数,但一运行就出现seg fault,程序编译是成功的,问会查哪些地方来debug
【other】在C语言中异常处理一般有这么几种方式:
--1.使用标准C库提供了abort()和exit()两个函数,它们可以强行终止程序的运行,其声明处于<stdlib.h>头文件中。
--2.使用assert(断言)宏调用,位于头文件<assert.h>中,当程序出错时,就会引发一个abort()。(只在debug模式下使用,release下忽略)
--3.使用errno全局变量,由C运行时库函数提供,位于头文件<errno.h>中。
--4.使用goto语句,当出错时跳转
问Maxstack就是lc上面改一改就行,又问了问用继承这题怎么写,口述即可
【==============os/network===============】
1. process 和 thread什么区别,thread中什么私有的(我记得好像是stack),
2.问void dfs() { dfs();}这个函数会怎么样。。当然就是stackoverflow了。。然后问为什么会这样
3.问lock, 什么是reader lock什么是writer lock,大概说一下,然后还大概问了一下读者优先和写者优先
4.Mutex的实现方法
5. 然后问了一些数据结构的问题,楼主印象比较深的是,对于一种数据结构,如果他在内存中存储比较compact,比如是连续的,有什么好处? 答案是,这样访问的时候,访问同一page的概率比较大,switch page in and out的次数小,实际效率会提高。。
compact的理由是缓存命中吧,高端的用法可以看看这个:
http://dice.se/wp-content/upload ... Oriented_Design.pdf
6. virtual memory怎么回事
7. 问怎么implement synchronization,我答曰用lock,她接着follow,如果有一个bank class,里面有储户的信息,以及withdraw和deposit函数,怎么用synchronization保护数据的一致性,当时我就有点蛋疼,想着没用java写过synchronization,就照着c写了一下,她说不对吧,java里面没有lock语法,只有synchronize,我当时回想不起来java synchronization的用法了,于是就在这个设计问题上纠结了半天。最后也就不了了之了。
8. what will happen after entering a url?
what file will be returned ? (??????)
what date structure to store it ?   tree???
【============database==============】
1.首先来就是实现一个数据库的设计,就是员工,manager, relationship,department之类的。挺简单的。然后针对这个relationship表,找出employee1和employee2的第一个common manager.
2. 给如下一个Table, 用mysql query找出所有前一天温度比当天高的日子有哪些
[qita]
DayId(INT) | Date(DATE) | Temp(INT)
1|2/1|10
2|2/2|25
3|2/3|20
4|2/4|30
比如上面这个例子,返回2和4就行啦
3. sql题,给一张表,有两列分别是date 和 temparature. 找出比所有的date,该date的温度比前一天高。话说lz早上刚刚考完数据库好么。。。。。。。
我告诉他我记不太清楚sql的语法,但是我可以用relational algebra表示,他说没问题,我就讲了一下思路,过了。
4. 第一个问题问了我sql的操作,找一个table中第n大的数
5. SQL outer join和inner join区别
6.一个database的问题,说用mysql的查询select * from table where...这种语句对于软件开发有什么不好的地方,假如查询的时候,table的结构变了,会出现什么问题?我就说可能会因为结构改变导致where后面的condition无法满足。接着他follow up说好,那设计表的时候,foreign key有什么作用,举个例子,我就举了一个公司员工信息的例子。
【===========EE=============】
1.怎样用一个电容和电阻实现低通滤波器
2.怎样用移位寄存器实现与非门
3.F score

Bloomberg is looking for a senior full-stack developer with a bias towards back-end to strengthen our R&D Communication Systems team in New York. You'll be a member of the team responsible for designing, implementing, monitoring, scaling, and optimizing the code that powers Bloomberg's Internal Communication services. Our products are scaling rapidly and this is the team will be impacted the most. Your contributions will have an impact on a rapidly growing and already successful product with high ambitions.

Responsibilities

  • Design, architect, and develop new back-end software applications, libraries and frameworks, for Bloomberg's next gen communication systems.
  • Discover and troubleshoot issues with the existing architecture and code.
  • Leverage your deep understanding of all technologies used in the backend infrastructure. This includes: Python, C++, SOLR, RabbitMQ, Relational DBs.

Qualifications:

  • 3+ years of python experience and asynchronous frameworks, microframeworks like Flask, CherryPy, Bottle, and webpy.
  • Ability to work well in a fast-paced, dynamic, distributed environment is crucial.
  • Experience with Infrastructure-as-a-Service.
  • Experience with designing and implementing APIs for a service-driven architecture.
  • Obsessive and pragmatic about code cleanliness, and automated unit/integration testing.
  • Experience with relational databases (preferably SQL Server).

The Company:
Bloomberg, the global business and financial information and news leader, gives influential decision makers a critical edge by connecting them to a dynamic network of information, people and ideas. The company's strength - delivering data, news and analytics through innovative technology, quickly and accurately - is at the core of the Bloomberg Professional service, which provides real time financial information to more than 315,000 subscribers globally. Bloomberg's enterprise solutions build on the company's core strength, leveraging technology to allow customers to access, integrate, distribute and manage data and information across organizations more efficiently and effectively. Through Bloomberg Law, Bloomberg Government, Bloomberg New Energy Finance and Bloomberg BNA, the company provides data, news and analytics to decision makers in industries beyond finance. And Bloomberg News, delivered through the Bloomberg Professional service, television, radio, mobile, the Internet and three magazines, Bloomberg Businessweek, Bloomberg Markets and Bloomberg Pursuits, covers the world with more than 2,400 news and multimedia professionals at more than 150 bureaus in 73 countries. Headquartered in New York, Bloomberg employs more than 15,000 people in 192 locations around the world.

TryingAndTrying 发表于 2015-7-28 03:06:00

去了bloomberg onsite。整个面下来,感觉问的挺基本的。但是我面的题目,都不是直接给你算法题。基本都是应用题。给你一个生活中的例子,让你解决,然后需要你自己抽象出算法题。我下面有的是是直接分享算法,有的还是应用题。有的时候需要跟他们讨论一下,input和output。每个问题结束,都会有follow up,以及时间空间复杂度分析。 第一轮:两个美国小哥:分享了一个学校经历 1 check duplicates: 一个数组,只有一个是重复的,找出这个重复的数。 解法:说了一下bruth force, 然后用hashset优化。

2 valid parenthesis: 一个string, 里面有各种各样的括号,判断这些空号是合法的,其他的符号就忽略。 解法:stack, leetcode有原题。

3 best time to buy and sell stock: 只交易一次,计算最大利润,以及买入和卖出价格。 解法:leetcode有原题

4 股票交易情况下,有很多的上市公司。你需要求得上市公司是哪一年上市的。已经设计好了一个api的function, 但是他返回的年份有一定的规则。然后时间复杂度是o(n). 你要利用已经给你的api, 去求得某一个股票的上市时间,并且时间复杂度要缩短。

//假设apple实际上市是1995年 public int getYear(int startTime, int endTime, String name) { //1. 输入: 开始时间1990,结束时间1993,苹果; 输出:1990 //2. 输入: 开始时间1996, 结束时间1998,苹果; 输出0 //3. 输入: 开始时间1992, 结束时间1996,苹果;输出1995 }. From 1point 3acres bbs

解法binary search O(log n)

第二轮:一个美国人一个印度人:分享了一个学校经历 1 设计一个音乐播放器,设计class, 以及各种存储歌曲和playlist的方式。 然后完成shuffle的算法; 解法我是用hashmap动态存playlist,然后用arraylist存所有的歌(因为查找方便,randomly access),然后用设计纸牌的shuffle 算法做的music shuffle。

2 美国人打开chrome,说主页上会显示最长访问的8个网址,你如何实现这个功能。 解法:min heap + hashmap

3 我有一个function: doSomething(); 这个function有一个限制十秒内只能被call10次,如果十秒内多于10次,系统会报错。如何设计一个报错的功能。 解法:size 10的queue. 没超过10的size, enqueue new call, else dequeue 第一个call. 并比较当前call和第一个call的时间,超过10秒,输出warning。

4 印度人说,我现在心里有一个数,你可以说任意的一个数,我可以回答你大了还是小了。你要用什么的算法思想来猜数。 解法我说了两个,他没有说范围的时候, left window and right window --> right window以(2^n)的速度递增,而left window覆盖上一次的right window,确定了两个window,做binary search。 他说了范围直接用binary search。两个解法都是log(n)时间复杂度。

第三轮 一个美国人的manager:问了一下你喜欢的公司是什么样子的? 1 题目有点不记得了,貌似说了一下对象存在哪儿?我说heap. 然后他问了些关于garbage collection的东西和finalize()的东西。

2 不用乘法运算符,计算两个数的乘法 解法:用了位运算。经理人很好啊。因为我位运算做的不是那么熟练。一开始给了一个对的方向,告诉了位移法的步骤,然后他说那样不好写代码,然后提示了我一下,我就换了一个思考方式。最后做出来了。

3 开放题 你现在是一个风投顾问,帮很多有钱的人投资。你觉得什么样的情况会使得有些人赚更多钱,而有的人赚不到钱。 4 演示terminal, 聊天,开玩笑,聊天,继续开玩笑,结束

第四轮 美女manager 问了一下现在找工作的情况,和一些常规的hr问题:比如你选择工作的标准是什么,你最喜欢什么样的工作环境。然后聊天,然后让我赶紧去机场,别错过灰机了。

7月21日面的。现在还没有消息。心情很烦躁。发面经给马上要面的人。准备准备。有啥题,需要讨论的,留言就好。保佑保佑~~~ 好人一生平安

anonym 发表于 2015-7-25 09:45:37

第一轮:

  1. Longest Common Prefix 时间复杂度O(l * n)

  2. Binary Tree Inorder Traversal

  3. Binary Tree Zigzag Level Order Traversal.

第二轮:

  1. Unique Paths. 时间复杂度O(m * n) follow-up:优化空间.

  2. 给一个tree,对于从root到leaf的每条路径,求出路径上所有节点之和,return这些和。-google 1point3acres

  3. Add Two Numbers.

第三轮: manager

第四轮: HR

补充内容 (2015-7-24 20:48): Add Two Numbers还问了时间复杂度 O(max(m, n))

JoeQi 发表于 2015-4-2 08:51:55

3月中旬onsite,3月低收到拒信。面了四轮,感觉每轮都聊得很好。我能想到可能的原因是专业不太matach吧,没有c++相关的project。 四轮都是白人。 第一轮: 1.给定一个function, double getprice(double stock) ,然后 让写怎么利用给定的function来实现double getstock(double price)。 idea就是binary search. 写了代码 2. find intersection of two linked list. 老掉牙的题目了。 3: find elements in A that is not in B 。 用hashset过了。

第二轮: 1. flaten 2D linked list, 很多人报到过,因为之前看过,所以我思路有,一边讲一边写出了代码。 2. find mode value in an unsorted array. 我的思路是先radix sort,然后从左到右扫了一遍,update之前出现最多次数的count和对应的数。 (mode value就是数组里出现的次数最多的element,不一定超过数组数量的一半,所以majority vote 不行)。 radix sort没写代码,只写了后半部分,我思路有,只是有个人比较rush 应该是刚学做interviewer,因为另一个interviewer几次提醒过这人不要rush。我也是因此学会了rush的这个用法。。

第三轮 Hr

第四轮 hiring manager。 此人不太平易近人,在bloomberg 工作了10几年。问了简历和project。当问我最熟悉的语言的时候,我说除了matlab 就是C++就,她笑了我也笑了。不知道问题是不是出在这里,是不是我应该不这么直白的。技术问题就问了一个,给定一个10个无序的字母,如何在一个dictionary找到包含10个字母中最多的单词。我想到的是,扫一遍dictonary, 看那个单词包含最多所指定的10个字母,她说有别的方法吗?我说把字典存在hash set, 然后10个字母的任意数量的任意combination hash下,从10的combination hash起,依次减少知道找到那个单词。最后又讨论了下排序有帮助么?感觉她似乎也不知道答案。 她给的反应挺好,不知道是不是只是表面上的。聊了差不多半小时左右,我们边谈着边下楼了。

总之感觉是挺好的。有四轮,每轮都感觉挺好的。特别是第二轮之后那两个人都说了great还是good忘了。被拒了有点意外和受挫,但是没办法。 大家 给我 加点 大米吧,没大米真的很不方便。何况我感觉还有和此网站打好一阵交道。

特别提一下:Wifi可以免费的。我住的是pitspatrick (单词可能没拼对) 一个新西兰风格小酒店。在前台也被告知是收费wifi,当时我是想就算收费也要用的,因为要复习。所以在房间想看多少钱一天,没找到相关信息,就打了一个电话咨询下网站那个电话,结果对方问了我是哪个酒店哪个location,然后告知我应该有24小时comlementary wifi,可前台跟我说过要收费啊,他说他给前台check一下,两分钟后告诉我24小时免费wifi. 然后我填入我信息,果然是24小时免费。第二天早在酒店遇到同面试的哥们,他吐槽wifi收费一说,我跟他说了我的情况。他说他填信息之后显示要15刀一天。所以我猜测酒店在赚我们这些面试者的钱,按道理应该是免费wifi的,所以大家可以打用wifi时pop 出来的网站,打那个电话可以免费wifi。

notturno 发表于 2015-7-25 00:08:17

电面和6月底onsite.

电面: 1 股票 buy and sell sotck I. 2 给一个char矩阵,打印从左上都右下的所有路径string,只能向右和向下走

onsite两轮游 第一轮: 1.两个int数组,第一个存数,第二个存数的个数。比如{2,3,5},{1,2,3}。第一个数组是有序的,代表2出现1次,3出现2次,5出现3次。实现一个iteratore class,要有hasnext()和next()两个函数 2.输入今天日期,参数是一个数字代表天数。比如今天7月24号,给出1000天后的日期。这个题看着简单,写代码就知道多麻烦。判断是否经过闰月,以及一个月30天,31天等问题。 第二轮: 马拉松设计题,坛子里有面经总结,可以搜一下这道题。大概意思就是有一些sensor,每当有运动员跑过一个sensor要更新一个前十名的名单。估计是跪在这了。虽然设计题没有标准答案,不过交流结束以后感觉heap绝对不是想要的答案。heap的问题是只能保证第一个人,后面的人如果没有poll出来仍然是无序的。HashMap实现是没问题的,讲清楚怎么sort就可以了。

smith 发表于 2015-1-23 12:31:16

20号面的onsite

第一面:一个黑哥,一个亚裔(不太确定是不是老中) 先介绍简历上的一个project,大概讲了一下,没有被追问,接着问coding

  1. reverse Integer,说了几个test case
  2. return index of target value in a sorted array, 就binary search
  3. 给马拉松比赛,设计个系统,要能知道通过每个check point的排名,然后问能不能优化之类的。

第二面:一个老美,一个三哥,都是三哥在出题

  1. flatten binary tree to linked list, 一开始题意理解错了,后来又重新写。。。有点不太顺利
  2. remove space in a string.

manager面: 一个三哥manager. 问简历,问经历,问感兴趣的方向.

  1. sort three colors
  2. 不断输入股票交易数据,每个输入有名字和成交量,设计数据结构和方法,返回交易量top10的股票名字

HR面: 为什么EE的要找CS工作 毕业时间,感兴趣的方向,实习经历 觉得自己有哪些方面需要进步,说三个 找工作时最看重的三个因素 有没有别的offer之类的

ethan11015 发表于 2015-7-20 02:27:42

流程不多說都是先問proj background talk;

--1st Round-- 國人leading美國小哥shadow 國人很照顧 真心感謝!! pre, in, postorder的recursive,iterative寫法in+post 還原tree, M個物品,N個箱子有幾種排法(dp (不需要解釋什麼了吧...) 人都很親切, 聊天也聊得很愉快, 介紹了好多他家公司及一些趣事 相談甚歡, 帶至另一個房間準備下一輪

--2nd Round-- 亞裔+烙印 三哥很nice 先上了merge two sorted array再來cach(LRU), 寫得差不多就換另一位不苟言笑的出題Top 10 stock price/volume streaming....沒寫code 討論算法hashtable+heap還討論了hashtable實作,time complexity,資料量大的時候怎辦(這不都考古題嗎...). 最後問了一些問題,利用上一輪聊得到的內容再聊個天,亞裔哥終於有說有笑了... ... lz信心滿滿期待下輪 then 一個漂亮的女孩走進來:seems like you are done for the day. (...fxxk off阿lz不是要妳阿怒丟lunch box.. anyway,想說好吧利用時間去周邊晃晃time square, central park也都在附近阿!! lz一走出大樓..哇操...下著大雨!!!但這時的lz已經什麼都無所謂了就走近雨中往下一個目標前進了..

感謝bb讓我能夠第一次走在ny街道上,從機場到旅館bb有給專車,旅館的wifi也是免費的,去onsite的各位別擔心,給的$100搭車回機場加吃飯絕對夠的!! (最後班機delay三小時囧bad bad luck...凌晨抵達感謝接機小夥伴一夜不睡 感謝地裡大大們的面經才讓小的我能夠輕鬆應對就當累積經驗吧! 最後 還沒找到,正在找的各位一起加油吧!!

zijianz 发表于 2015-4-9 11:54:38

昨天刚去的Bloomberg的onsite面试,大Bloomberg居然霸气的不签NDA,所以来回馈一下这个版。

楼主本来也就没报多大希望,总归4月1号以后公司筛人狠的话也合情合理合法,心里想着是两轮游就在纽约玩一玩,反正晚上七点的飞机。

先提一点,早上一去,就我和一个印度人坐在那里,我就冲他笑了一笑准备聊一聊(当年在Mathworks实习的时候有一个印度前辈对我很好,所以我对印度人很有好感),结果印度大哥上来就是一句you know this position is filled.我当时还没反应过来,他接着说他学校上礼拜来了十几个人都是两轮游。我心里顿时就笑起来了,我擦难道我遇到了传说中的东巴!!!(看过全职猎人都知道我在说什么)当然,做人要实在,我还是假定他不是为了吓唬我而真是这么想的,就顺着他的话聊下去,什么刚过4月1号招人肯定不猛啊之类的,东巴大哥最后脸色也不太好看了... 楼主前几天被fb加面,而且个人觉得面的很好,然后被HR打电话拒了,HR发邮件要给我打电话的时候我人都亢奋了,然后居然是拒绝,不夸张地说瞬间脑子嗡了一下,说不出话来,脸上瞬间全是汗。所以曾经沧海难为水,现在想在心态上影响我基本等于不可能。

另外,我认为所谓过了4轮就等于技术过,如果不是过4轮的人太多就等于有offer这个理论有一个bug,第四轮是HR,有4轮可以确定过了前两轮,如何确定过了第三轮?而且用普通人的思路思考,肯定去面大于position数量的人,然后差不多一星期做一次决定,选前几名。所以过4轮基本等于有offer应该是不对的,撑死是过了4轮等于是最后decision中的一个选择,也就是入围而已。

BB整体真的不错,绝对纽约的感觉,有技术,有媒体,有采访室,前几天皮特夫妇还来过。而且装修就是高效大公司的样子,不像加州公司为了个性而个性。其实楼主认为加州的那几个公司才是真正的aragent,每次面试都是直接追求这道题的一种解法,结果也是面试官的一人看法,两人同面其实更公平一些。而且你会c++我可以考你c++,java考java,费劲在旧题上拐弯藏线索来弄出新题其实并没有太多意义,说白了你考我一道我没做出来,同一时间让我考你一道你就能20分钟最优解的做出来了?这一点真的支持亚马逊对new grad的做法,拉过去,一天做一个大项目,这才是真本事(可惜楼主还是挂了那次)。

另外好多人吐槽BB只给100打车不够,下飞机坐air train到地铁站,坐E线,下车5分钟到宾馆,回去亦然,来回过不了20刀。扭腰在下午傍晚打车比较唑死... 宾馆出门拐弯的星巴克的鸡肉三明治不错,不腻,做早饭蛮好的。而且由于BB第一轮的中国大哥很好,让第二轮的人给我带了个lunch box,而最后hr也给我了个lunch box,导致我得到了两份lunch,一份牛肉,一份金枪鱼,还挺好吃的... 面试屋子里真没人盯着你全身看,如果不喜欢穿皮鞋的话穿黑色乔16肯定没人看得出来。

去29层看风景后是去个屋子等面试官来领人,当时还有几个同胞迷路丢了... 接待的HR姐姐让我去回去找他们... 如果你当时在场可能就知道我是谁了...

正题,没签NDA啊, 所以讲一讲,

第一轮, 中国人和一个口音很纯的华人(名字绝对是我华夏民族的名字),两人很友好,聊的很开心,level order traversal,然后是数组求最大sum的subarray。俩人一人一题,挺开心的,最后华人前辈还嘱咐第二轮给我带lunch box。

第二轮,听不太出口音的华裔面孔,像中国人,和一个美国人。

华人大哥问了我就是leetcode里那个每个listNode有一个random pointer指向任意一个list里面的node。这道题我没在leetcode上做过,先造new list, 然后用map来map相对同样index的两个node的地址,线性空间线性时间是我当时能想到的最好的了。不知道是不是市面上的最优解。

美国人问了我一个c++的问题,其实我不太确定,但我觉得应该是对的。 int* foo(){ int a=5; return &a; } int main(){ int* result=foo(); std::cout<<*result<<std::endl; } 理论上来讲输出应该是garbage,因为a的lifetime只在foo里,所以指针在,但那块mem已经被标记了,输出还是5是因为那块stack没人动过,但如果在main函数两行之间随便call一个别的那输出什么就不好说了。 可能是语言不好,感觉那个美国人一开始不是太买账,但后来应该还是讲明白了,但也可能我错了,但我现在还只是觉得是这样。因为stack无论哪里应该都是属于自己的mem space,所以就算被mark了应该还是能访问的...吧... 应该不会给seg fault。 然后华人大哥问我两个linked list做减法,就是list表示一个大数,他问了我一句你见没见过这道题,我说我见过加法的,他说好吧那算了,两题差不多。然后美国人说没事,我有道题。

我那个后悔啊,这道题很难啊。基本就是设计一个画板。我个人不太认可这类题的是,就算现实中的项目,我问你requirement你也该告诉我,问清楚需求才能做嘛,结果问什么美国大哥都说随你,我就懵了,你妹啊,我要知道你期待什么啊。感觉答的一般,给出了解法,但感觉并不出彩,空间复杂度有些高。

然后华人大哥又问了我个题,类似于(a+b)*c+(a+b)+c,去除没用的括号。说真的,应该是成题,可是不爱刷题的楼主还是没做过... 上来想用stack套,没解出来,一看时间不够了,就硬解了,用的是palindrome硬解的办法,每一点,左右展开找属于他的括号,在看外面的operator,来决定这个括号的意义。用一个额外的数组,0代表没visit这个括号,1代表visited,有意义,2代表最后可以抹掉。quadratic时间线性空间。也不出彩。需要额外数组是因为nested的括号需要知道哪对儿括号是属于这个operator的。

然后聊天,原来那个美国人是做前端的,讲了半天他做的东西,但其实总结起来就是single page application,说真的不是新鲜东西,就是你干什么都只刷新某个模块,不用重新炫整个页面,如果我没记错的话,应该是12年时很火的概念。并没有不尊重的意思,但大致让我看到BB和加州公司的区别,不追新,相对稳后大家做。. 第三轮是manager,基本是一个master机器,n个slave机器,slave机器里全是数据,没排序,找average,然后找median,丢人的是我开始一懵忘了median是排序后的中间那个了。还是,给出了解法,但磕磕绊绊,而且感觉也不是最优解。哥们倍儿年轻,居然干了15年了,而且以前住在离公司2个blocks的地方,这是曼哈顿啊......

第四轮是HR,大概就是问了问以前实习时都做了什么,学校里最喜欢的课是什么,给人介绍BB如何介绍,楼主以前在Mathworks实习,Simulink属于design automation,其实BB Terminal就是Traders的automation而已,胡扯了一大通。然后从零教会了HR啥是MVC。然后说我喜欢扭腰的style之类的。并没有你与小伙伴发生矛盾了怎么办之类的问题。

大概就是这样了,虽然是四轮,但面的如何自己最清楚,就算面完四轮相对还好,但最后肯定也是排序的要人。要不要我也随意了~ 感谢这个版面的帮助。

royalheart 发表于 2015-2-28 08:04:57

Onsite两轮游,呵呵。。。等收拒信。。。. 题完全不难

第一轮,一个东欧人和另一个拉丁裔,主要是东欧人问问题 问简历,问research,问project

1.找一个数组的所有重复数字,有多个重复的每个都输出

2.用一个范围的随机数rand()生成另一个范围的随机数,我特别不会做这种题,写了一下他说corner case不对,但是他说时间紧不让我继续写了。。。 记不清楚题目具体是怎么说的,貌似是16bit的数随机数是rand(),然后64bit的用rand()怎么表示,但他后来又说是16KB 和64 KB integer(?觉得不make sense啊。。。)估计跪这个题上了

3.Max Stack

然后感觉他非常想问我C++的问题,但是我说C++没Java熟,他就只好改问了一些Java的问题,然后问问题的时候他说B家80%用C++,估计我对C++无爱被严重BS了。。。

第二轮,不清楚族裔,有点意大利口音

都是设计题,说数据结构和思路就可以

1.马拉松实时名次 (他家好像特别爱考这道题,面经里看过好多次,还好在去NYC飞机上想了一下) 2.UTF-8 decoding (我其实不知道UTF-8 encoding规则,他给我解释了一下,原理很简单很好写) 问问题的时候我问工作压力怎么样,有on-call吗?他说on-call是啥?汗。。。然后他说极少有这种情况,除非写的东西有bug然后在不同时区的客户那边出了问题,但是他说几年里面貌似也就出现过两次吧

前天电面的,不废话了, 直接上题:
给了一个UTF-8的pattern:
1byte - 0XXX, XXXX-google 1point3acres
2byte - 110X, XXXX, 10XX,XXXX
3byte - 1110, XXXX, 10XX,XXXX, 10XX,XXXX
4byte - 1111, 0XXX, 10XX,XXXX, 10XX,XXXX, 10XX,XXXX
.....
7byte - 1111, 1110, 10XX,XXXX, 10XX,XXXX, 10XX,XXXX, ..... 10XX,XXXX
8byte - 1111, 1111, 10XX,XXXX, 10XX,XXXX, 10XX,XXXX, ..... 10XX,XXXX

然后让写一个boolean 函数:
input: byte数组
output: trye or false;
boolean isvalidUTF-8(byte[] input){

}

第二轮两个题面试官都貌似还满意 但完了就被请出了,估计还是跪在了第一轮。。。

不过回想一下也挺奇怪,我还没面第一轮之前就告诉我今天安排只有两轮,是怎么预测到我两轮跪的?==||| 回酒店碰到个Purdue的印度哥们,也是两轮游,他的题也不难

其实不是很想去B家,但是题不难还面跪也还是略郁闷。。。

B家的公司气氛文化我不是很爱,感觉各种不接地气,面试还写了要穿Business Professional的,而且感觉有些人情冷漠,纽约冬天太冷了,在南方呆久了不适应被冻成狗,感觉不适合我。。。

不过B家流程效率还是挺高的,电面很简单很容易拿到onsite,喜欢用C++的就不要犹豫投吧


最近连挂两家老印的电面和B家这个onsite,真是衰到家了。。。 求转运!!!求RP!!! 在机场收到了别家HR的联系邮件,被关上一扇门的同时打开一扇窗的说法,希望是真的~ 求好运!~~~

catinclay 发表于 2015-3-18 08:08:22

在地里得到很多有用的资讯, 刚面完来回报。很多都是地里已经有的题,但感觉还是没发挥好

第一轮 真够惨的 估计跪在这一轮

2sum Leetcode #1 数字游戏 给一个list, list中有两个数. 过程中可以一直往list中加数进去(append在最后), 但必须一直遵守三个条件:

  1. list中所有数均需大于0
  2. list中所有数都必须为unique
  3. 新加入的数必须为已存在list中的某两数的差

要做的事情是把所有可能的过程(一直加到没办法加入新的数字为止)都给打印或是回传

ex. [30, 5], 则最新加入的数只能为25, list变为[30, 5, 25] 继续, 只能再加入20, list成为[30, 5, 25, 20], 接着就有两种选择, 可以加10(30-20) 或是15(20-5). 于是会分出两个branch [30, 5, 25, 20, 10] 跟[30, 5, 25, 20, 15], 然后再把最后一个可能补上之后变成 [30, 5, 25, 20, 10, 15]跟[30, 5, 25, 20, 15, 10], 所以就回传这两个list. 可以预见的是如果一开始的两个数大小相差很多ex[99, 1] 那最后就会回传很多种path 只写出brute-force, 我问应该有更加的解法, 面试官笑而不答我也是醉了

查语元 给定各种语言的字典, 给一篇文章, 给定一个function getWord可以取得文章中的下一个字(从头开始, 类似iterator的getNext) 问你要怎么样check他是哪一种语言(ex, English, French 等等). 给了一个一直把字放到各个字典里比对然后对每个字典投票的算法, 面试官问有没有不用把整个字典都预读到memory的解法, 完全没头绪...

第二轮 马拉松 一堆runner再一个跑道一起跑步, 上面有很多sensor, 每个sensor有sensor id, 当一个runner通过一个sensor的时候会有一个message传到中央sever, 要你设计一个实时leader board. 在一个递增之后递减的int array里查找target, 先找peak value然后切两段binary search.

第三轮 compression 给一个String要你compress, 方法如下: 如果是 aaabbccccbaddd 就回传 a3b2c4bad3 不用考虑特殊符号, 只考虑lowercase letter

红白骰子 一个大白方块, 六面漆上红色, 然后像魔术方块那样切成27等份, 问随机挑一个丢在地上, 红色面朝上的机率?

火车山洞 山洞总长1000m, 你在入口进去300m的地方, 此时听到有火车声从入口传来, 假设火车速率是你跑步速绿的两倍, 问你往哪个方向跑生存机率大些 问了一点Java memory管理的概念, Stack跟Heap

第四轮 HR身家调查

总的来说还是一次很开心的体验啦,但还是move on 求大米~

Xin_walker 发表于 2015-6-11 14:46:45

直接上题啦~(我用的c++) 电面: 1.给两个vecto of int,各表示一个整数的每一位,高位对应index = 0, 返回二者和,也用vector表示 e.g [3, 2, 1] + [4, 3, 2] = [7, 5, 3] 2.给定整数n, 判断是否palindrome 3.给定整数n,判断log2(n)是否为整数. 鍥磋鎴戜滑@1point 3 acres 4.同1,这次让求product hackerrank上敲的代码,写完第一道题面试小哥本来想让我写个main和test cases跑一下的,结果我刚敲了个int main他就说他看着OK,下一道题= = corner case各种问,但小哥不太care的样子 都随便我

onsite:

  1. 一个很nice的国人和一个中东(?)小哥 1)【无视这道题吧orz】给一个string,输出各字母出现次数by alphabetical order. follow up 问如果是c-string 传参const char *和char *有神马区别. 2)leetcode上unique path I 和 II(我上来直接写了一维的 然后面试官一直在和我讨论一维OK不。。所以推荐大家写二维除非被问follow up啊TT) 3)输出一个数组最大值和第二大值, follow up找第K大值.

  2. 都是老外 1)bloomberg的terminal会根据用户选择的语言将各自窗口所要显示信息转换为对应语言,问如何存窗口的Index以及该窗口信息对应的不同语言 follow up基本沿着database的设计思路一步一步扯,就简单的scalability, single point failure神马的 最后面试官说嗯 用database就好了 这些设计database都为你做好了(好吧。。。楼主EE出身= =)-google 1point3acres 2)问说服务器每次都要check database来返回信息太慢肿么破,我说用cache,他问了下cache具体怎么个情况,实现的话用什么数据结构。又问如果cache的空间不够大肿么破,我说可以存访问量大的。他说嗯嗯这是他想要的那么问题来了:如果实时得到访问量是topk的股票?我给出hashMap+heap的解法后 他问我big O, 我说O(logk), 然后他问要O(1)的solution.

3.又一个很nice国人 1)一个数组仅包含0和1,in place操作使得0全在最左,1全在最右 我先说two pointers都从左往右扫,他给test case说如果输入是【10000000000】这种,会swap很多次,我就说那two pointers从两端扫,他表示OK,然后写代码 follow up c++中数组传参int *, int [], int * &, 三种有神马区别(第三种他写一半了然后说 传引用形式你自己写一下= =) 2)给如下代码 char *s; strcpy(s, "hello");. printf(“%s\n”, s); 问运行结果 4.HR各种聊.

感觉因为是女生所以面的不难0 0

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment