Bloomberg Onsite
log: 12-5 电话面试 12-7 收到Onsite通知
流程: 2轮技术面 1轮HR面 1轮manager面
面试是在纸上面写答案,比A5还小的纸,最好在纸上面要注释一下每一页是干嘛的。
- milestone1: BB常考类型复习
- [x] tree的复习,各种tree的题
- [x] 划分类dp,subarray类型
- [x] array 类型的题目,比如find duplicate, matrix
- [x] OOD
- [ ] 数据结构: treemap, segment tree
- milestone2: BB面经题目
- [ ] 根据需求选择合适的data structure
- [ ] 约瑟夫环,自己实现
- milestone3: BQ
- [ ] BQ九章视频
- [ ] 為什麼念 CS
- [ ] career path
- [ ] why bb 我在国内就听说过bb,我刚来纽约的时候去中央公园玩,当时经过了bb的office,感觉非常震撼,当时就想如果以后有机会来工作该多好,这个想法一直伴随我到现在。
- [ ] why finance
- [ ] why software engineer
- [ ] what's important when choosing company, how to make decision
- [ ] 独立学习精神,继续学习的能力
- [ ] 个人兴趣
- [ ] 写代码的标准
- [ ] bb为什么要你
Technical Question
- tire, auto complete
同没听过扔鸡蛋问题,搜了一下这个博客讲得挺好的: http://datagenetics.com/blog/july22012/index.html
有一个数据流 持续的读入以下数据:stock,price 每天早上都是从empty开始读入数据 设计一个application,能始终返回股票价格变化程度top k的股票
我用的hashmap加priorityqueue做的,每次有新数据的时候,检查hashmap里面有没有,如果没有的话,插入到hashmap和priorityqueue。如果有的话,删除priorityqueue里面的东西,然后更新price diff再插入,每次top k的request都是pop出k的然后再插回去。 这轮我不知道maxheap还有一个findnext的功能(这是面试官说的,虽然我当时感觉maxheap应该不可能实现constant time findnext功能的,并且给他解释了为什么,但是他还是说有这样一个method,但是我doubt他知道这个method的内部实现。当然我也没有继续坚持,只是说谢谢你让我知道了一个新method。后来我查了java的priorityqueue的methods里并没有这样一个iterator,希望有知道的同学可以讨论一下),所以每次request的时候都是先pop出来再插进去导致了klgn的复杂度,最后面试官说有这样一个method能够constant time返回下一个大的node, 这样top k request的时候就是O(k)的复杂度。
第一题:leetcode 232 第二题:一个matrix里,有一些element有treasure,从左上角走到右下角,只能往下往右,求最大能得到的treasure的值,标准二维dp解的 第三题:leetcode 138, 我说我做过了,他就换了一道 第四题:leetcode 98
1.在二维矩阵中完成类似“画板的填色”的功能。矩阵里每个值都代表一个颜色。给你一个坐标,和一个新的颜色。让你把所给坐标中相邻的所有同色改成新颜色。比一个圆形中间全是白的,那么如果坐标在圆形中任意一点的话,圆形内部将全成新的颜色。 2.验证二叉搜索树 3.设计一个系统,系统不断接受股票名和股票价格的Entry。请追踪价格浮动最大的十个股票。价格浮动的意思是,最新价和上一个价格之间,相差值和上一个价格的比例。追加问题要求多保留当日最大值和最小值。 4.给你四个随机个位数字,要求用他们组成两个数字,使其和最接近一百.
My thoughts on "给你四个随机个位数字,要求用他们组成两个数字,使其和最接近一百." This problem is actually reduced to the problem of "Two Sum to closest to given target". Let a, b, c, d be the four given number with each in between 0 and 9. The goal is to minimize E := |10a'+b'+10c'+d'-100|, where a', b', c', d' is a permutation of a, b, c, d. Further calculation shows that E = |9(a'+b')-(100-sum)|, where sum := a'+b'+c'+d' = a+b+c+d which is a constant if the four numbers are given(!!!). So the question is to ask picking any two numbers, i.e., a' and b' from the given four numbers, such that E is minimized. And clearly this is the Two Sum to closest to a fixed target (100-sum).
Furthermore, I guess this problem can be extended to given 2k single digit numbers and pair them into k of double-digit numbers to sum to to closest to a given target.
1.复制有随机指针的单链 2.一个很奇怪的排序题,给了很多股票,和其最新价格(取代旧价格)。要求先按股票的时间顺序,再按股票的价格顺序排列。 3.输入一堆(序列)管理关系,比如A员工老板是B,B员工老板是C。然后设计储存方式,并写一个方法返回所给员工的所有直接或者间接的老板。 4.又做了一遍验证二叉树搜索树
第一轮: 刚开始问了简历 project做了什么 遇到最难的部分是什么。之后开始做题
- 给一个array
。每个Person里面有name和mother's name。给一个人的名字,把他下面的所有node都打印出来。在纸上写了所有code - 给一个2d array
返回一个2d array。里面的每个数等于 从这个角到右下方所有数字加和。 这道题就说了思路写了pseudocode - 设计一个游戏。玩家在房间里可以找物品,放下物品,拿起物品去某个房间。问大概怎么设计。 之后又说如果玩家有书包可以装这些物品 但有个capacity上限 怎么改进。 问问题。
第二轮: 依旧问简历 project都做了什么,why bloomberg。
- leetcode trapping water
- c++ 怎么实现smart pointer. 里面考了各种constructor的用法。 因为太久没用这些答的不太好。 问问题. from: 1point3acres.com/bbs 然后在回答第二个问题的时候 白人小哥一直在下面玩手机 后来发现是在交流给不给下一轮。。等做完第二题后 白人小哥说我们下午还有两轮 你要不要吃个饭过一个小时后再过来。瞬间懵逼 但只能说好==
第三轮:hr hr似乎生病了 一直裹着羽绒服说话==。 问了简历 说不要说太多technical的东西 讲一讲组里的情况。然后问了现在有的offer 工资是多少 打不打算接 现在还在面哪家。 如果这些公司都给你Offer了你选择去哪家 为什么。你觉得选择工作的最重要几点是什么。 问问题。 二十分钟结束。。
第四轮:senior manager白人 上一轮的男生似乎跟manager相聊甚欢, manager亲自把他送出来 送到hr那里。。。
刚开始问了选择工作最重要的几点。
有没有做过金融相关的东西。 我刚好两年前做过金融方面的Project 他一听跟他做的很相关 就问了很多概念。 但我已经忘得差不多了 迷之尴尬。。。
- perfect number. 给一个n, 返回从1-n有多少个perfect number. perfect number定义是 这个数的所有除数之和刚好等于这个数。写完程序问如何改进。
- A a 和 A a的区别。问了很多在function call里 如果有/&是什么情况。 在你做function call的时候 stack是怎么运作的。
- 扔鸡蛋问题==。你有两个鸡蛋 如果一个楼有一百层 然后你想知道到几层鸡蛋会碎。每次都要坐电梯 怎么样可以减少坐电梯的次数到20次。 后来问了个印度小哥 据说这是个很经典的问题 可我木有听说过=-= 反应有点慢。。。 问问题。
感觉第四轮没答好 导致了拒信。。。发面经求人品!
总共面了4轮, 每轮都在不同的楼层. 几乎走遍了20-29的每一层......
第一轮, 是两个人. 先问了two linked list相加, 一道比较经典的题. 撸主就用最普通的方法, reverse, 相加, 再reverse; 然后问了max points in a line, 也是leetcode原题. https://github.com/gzc/leetcode/ ... 20on%20a%20Line.cpp 两题都在纸上写了代码. 写了好多好多页, 然后居然没有橡皮......
第二轮, 是一个伯克利的math专业的小哥. 问的第一个问题类似 https://leetcode.com/problems/find-the-duplicate-number/ 不过duplicate number 可能不止一个, 比如可能 [1,1,2,2,2]. 他问了好多好多关于这个题目. 首先分了两大类, 数组immuted和muted. 然后针对每一类,都给出O(n^2, nlogn, n)的, 空间也要慢慢优化. 最后muted他要我给出O(n) time, O(0) space, immuted给出O(n), O(1) space. 关于muted的O(0) space, 我告诉他swap可以用O(0) 不需要临时变量. CMU的同学肯定都知道, 在CSAPP这本书里, 给出了bit manipulation swap不需要temporary variable. 我告诉他我大一就学了那本书, 哗啦啦把那三行代码写了出来, 他很满意. 关于immuted的最优解, 就是类似 circle list, 快指针慢指针跑来跑去,很经典的. 他让我证明为什么这种方法最后得到的就是intersection, 我也用数学给了他证明.
然后第二题是一个2d-grid, 每一个都是 >=0的int, 表示有多少苹果. 起点在左上角, 终点在右下角. 起点到终点只能向右或者下, 终点到起点只能向左或者上. 问 : 从起点到终点再回来, 最多能拿多少苹果. 一个格子内的苹果被拿掉就没了. 我没有给出最优解, 时间很少了 - - 问了他他的想法. 他也告诉我了. 听起来很有道理. 但撸主我这时候在想其他事情没听进去 = =
第三轮, 是一个HR, 就问很多乱七八糟的问题 = =
第四轮, 是一个senior印度人,在bb 呆了 12年. 问了我分布式设计题. 有一个distributed dispatch server. 还有很多sub-server, such as chat server/add server/store server. 然后要怎么设计. 我就扯淡了... message queue/lock/rpc/load balancing/......乱讲一通。他也蛮满意的感觉 = =.
10月6号面的。具体流程以前很多面经都说过了,先到前台领个badge,然后六楼粉沙发等HR,带着转一圈,去楼上,面试官在那里等着。。拿了lunch box(我觉得还不算太难吃。。)跟面试官到一个小房间,你的面试都在那个房间。 下面是两轮游的内容: 第一轮: ABC大哥和国人小哥shadow。
- 给一个数字n,要生成n行X组成的新X,以前的面经里出现过,不过是电面。。比如:
n = 1 X
n = 2 XX
n = 3 X XXX
写的不是很简洁,有点乱,但是面试官没深究,就算是对了。。X X X
2, DeepCopy,上来先让写一个Linkedlist Node的定义,然后说int value改成Node Value,让deep copy。。这其实就变成了一个graph,然后有可能遇到重复的node,所以基本上就是个BFS,用set记录visisted的Node,然后用map copy。。写的没什么问题,解释的也比较清楚。。 3,他给写了一个function(他说他都好久没写过java了),问你什么功能。。就是个reverse integer,没有负数情况。。然后问怎么test,我说有可能有overflow,他说什么情况下会overflow,然后怎么处理。。 4, 怎么存一个arbitrary big integer。我说用list或者array,他表示OK。又问如果memory里有足够的空间,可是又没有连续可用的空间怎么办?一开始没听懂,后来猜的,分开每8位一存,记录这个list是哪8位。。他还是表示OK。。 然后提问,第一轮结束。。
中间30-40分钟吧,吃饭喝水上厕所休息。。lunch box就是普通的面包夹肉,没有传说中的那么难吃。。. 1point 3acres 璁哄潧
第二轮: 先进来一个西裔大哥,穿着足球的球衣。。我顿感不好(一个人很有可能是第一轮面试官的评价不好)。。聊了两分钟来了个可能是国人的大姐。。 问了个简历项目,然后说你这个project用到了map,可以显示用户到过的位置。。问题是:比如说你有个app,用户每次使用都记录下当前的地点,我要找一个周围10mile以内使用量最大的点。。. 1point3acres.com/bbs 我刚开始有点懵,就问他有没有candidate点,因为是点,所以必须是离散的。。他说可以,随便你做什么假设。。然后我就弄了个map,每来一个用户,我就扫一遍看看用户位置是不是在candidate set里面每一个点的10 mile以内,然后map 记录key是point,value是freq。。(后来才反应过来这样做不是最好的),然而大哥没有深究,就问如果现在这个app很多地方的人都在用,怎么办。。我说partition,分不同的区域。。大哥本来想move on下一个题给大姐问。。但是大姐说,你这个partition不work,因为比如NY和NJ,挨的很近,partition会丢掉信息。。我表示很有道理。。然后说,不如每个user的位置,我都在周围10mile找所有的点(比如0.1 mile一个unit),然后用map存这些点。。然后大哥让写这个function。。我说这是个数学问题,然后写了勾股定理的function,解释了一下。。觉得没什么问题。。然而时间就这么过去了。。大哥问大姐说就剩10分钟了问大姐想不想再出道题,还说不知道一会会不会有人来下一轮。。。大姐表示不出题了,直接让我问问题。。临走前大姐说我简历上phd的GPA是4.0,我解释了一下因为phd阶段就没上几门课,大姐笑笑。。第二轮结束。。
等了又得有30-40分钟,HR来请出。。
一般两轮游就是悲剧了。。感觉intern有可能跳过manager那一轮,但是HR不会。。等拒信。。攒人品。。
第一輪 先聊簡歷上的 project 大概十分鐘後開始做題: 第一題,飛機行程規劃, Leetcode 原題
第二題, LC143,不過這題我說出思路時,面試官就問我是不是看過,我說是,所以就沒寫代碼純講思路。
第三題,Josephus problem,必須用 circular linked list 來解。這題他也問我是不是做過了,我說我會用 DP 或 Recursion 來解。 http://www.geeksforgeeks.org/josephus-problem-set-1-a-on-solution/
然後讓我問問題。
第二輪
先聊之前實習項目
第一題,我們有很多 real-time 來的交易數據,表示成 (string company, int val) Design 一個 board 來呈現前五大的交易量
我會先宣告整個 class 然後把每個 data member 和 member function 定義好,再開始寫 code
第二題,火車山洞那題 山洞总长1000m, 你在入口进去300m的地方, 此时听到有火车声从入口传来, 假设火车速率是你跑步速绿的两倍, 问你往哪个方向跑生存机率大些? 然後讓我問問題。
第三輪,Recruiter
一堆 behavior question. 為什麼念 CS, career path 之類的。
第四輪,manager
單純聊簡歷,聊學校課業,why BB 之類的問題
最後他送我到六樓領行李,帶我到電梯,握手道別。
补充内容 (2016-12-1 01:19): 已收到 offer。 補充一下 Timeline 9/29 網投,10/7 收到約店面通知,10/19 店面,11/21 onsite, 11/30 收到 offer。
1.在一个有重复数字的有序长数组中找对应元素 (binary search秒了) 2.找一个树的某一层第几个节点(好像是这样记不清了,反正就是bfs也秒) 3.(小哥说,前两个题做得这么快,看来你比较擅长(leetcode)啊,哈哈他没说leetcode这个词当大家都懂的,那我们出个不一样的吧)假如你有1000块钱,10个信封,怎样分配这些钱,要求无论客户要多少钱,你都能在不拆开信封的情况下精确无误地给人家。(这题有点懵,因为本身是ee专业,对计算机没那么敏感,讨论了好几种可能的方案,小哥看我实在走不到正确的道路上,给了一个strong hint,想象一下你有1024块钱……2^10太犀利了!!!顿时醍醐灌顶对小哥无比崇拜哈哈) 小哥说没事,最后一题就是看你不是计算机专业的,考察一下你的码农素养…… 问问题
第二轮校园面,经典设计题,面试官一个印度人一个中国人: 1.简历,多线程的各种问题,有概念问题也有实际的问题,前面还算是对答如流,最后问着问着居然问到了mutex,我实在是无力了,于是中国面官救了我一把,说“这个有点难了吧……没做过有情可原啦”,印度小哥笑笑说,也是,我就看看她懂多少……(印度小哥还是很和善的,并没有故意刁难我) 2.中国面官(笑眯眯地)出了一道流感的题:一个教室做了很多人,有的人已经得流感请假回家了,于是有空座位(0);有的人感冒了但不回家(2);有的人是健康的(1);一个二维数组表示这个教室同学的情况。挨着2坐的1会被传染,问这个教室到最后还能不能有人参加期中考试了。。。 题目理解之后就秒了,也就是最简单的不能改变数组元素的island题目,问了时间复杂度,看起来本身还想让followup来着,但是前面问多线程部分花了很多时间,于是没再难为我,直接说我还是留点时间给印度小哥吧,于是下一题 3.股票设计题,实时有股票信息进来,要求设计一个比较好的数据结构,以最快的runtime返回每一个公司在过去24小时内的股价最高点和平均值。小哥说这个数据结构就是为了能最快返回用户需要的信息,所以只需要存24小时内的信息,最好不要占太多空间。(一路狂讨论一路设计,最后没有写标准的代码,只写了伪码就过了) 问问题
本来最后两轮也是校园面,可是我在别的面试回不来,所以就改成了onsite……不得不吐槽onsite约的太心累了,两次都是last minute change,面试前一天晚上跟我说,明天面不了了,改时间吧……感觉预示了我并不顺利的onsite……
hr(katie):感觉并不亲切和蔼……全程笑容不多……(问offer工资的时候,听到IBM的工资还反复确认了一下,哈哈当时就有一种不面了投入IBM怀抱的冲动)
manager: 原本约好的manager突然组里出了问题要开会,临时换了一个manager,这哥估计被抓壮丁满心不乐意,一进来我手刚伸出去,他都没跟我握手,直接来了一句“我今天感冒了状态不好”。。。。。我(????) 然后就是痛苦的manager面,感觉他对我不会c++而用java这件事倍儿瞧不起……要我解释java里heap/priorityqueue的interface,我不是很懂啥叫解释interface,于是把我知道的关于heap都丢给他了,他原本说你就大致解释一下就行不用写真的代码,结果我在纸上写了几个func辅助解释之后,他突然来了一句,“写成这样java就能编译了?” 我……大哥,说好的不写真代码就解释一下呢??醉了……
后来又问了一个海外服务商提供solution慢于local服务商,这个问题怎么做trouble shooting,然后怎么解决 又问了为啥ee要学software,为啥当初选java不选c++,c++有什么好处,为啥本科双修金融研究生不继续读。。。
全程一副你并没有说服我的表情,我说话的时候他一直往门外看,可是门外只有几条热带鱼啊有啥可看的气死我了…… 终于他没的可问了于是让我问问题
然后我就走了,昨天等了一天也没等到结果。今天放假,打算明天发邮件催一下,收到据信就安心去ibm了。。。。
我大概是版上去 BB onsite 唯一只面一輪的吧! 因為覺得去 onsite 太花時間,之前問人資可不可以電話面一面就好,結果他們蠻堅持要 onsite 的。
第一輪,只有一個白人中年面試官。他出的題目如下:假如我有 N 個會議室,每個會議室能容納的人數不相同。另外,有另外 M 個人(用ID標示)來登記使用會議室,這些人的 request 會包括人數。
EX: "123" 登記有 8 個人要使用會議室;"456" 登記有 7 個人要使用會議室;"283" 登記有 3 個人要使用會議室 ... 怎樣 assign 會議室比較好?
我的回答是:把會議室照容量大小 sorting ,把 request 照人數需求 sorting 。然後從人數需求大的 request 優先處理。 如果人數需求太多,就沒有辦法滿足那個 request 。如果沒有辦法滿足那個 request 我們就跳過那個 request; 往人數比較少的 request 查看。如果可以滿足某個 request,相對應某個會議室就被佔用了,因此,下一個 request 就會對應到容量較小的會議室。依此類推... 感覺算法考的就是 sorting + two pointer. 1point 3acres 璁哄潧
面試官覺得OK,要我把 code 寫下來。寫完後,他說他很肯定有 bug ,問我要怎麼測試? (其實我不知道耶!我關於測試的知識量=0) 他說是邏輯上的錯誤,我就一直想說算法哪邊錯了?他又要我測試,一直問我測資要給什麼才能測出 bug ? 我們在那裏耗了快20分鐘吧!我還是不明白我的算法那裏錯了? 最後他也倦了,他說我沒有檢查當某個指標已經走完,就該結束了。因為漏了這個檢查:ˊ會 access 到 array -1 的位置。 雖然我同意他說的:但是,如果他給的提示是:要不要多check什麼?而不是說:邏輯錯誤,我覺得我會比較容易找到他說的 bug。
後來他問:回傳的資料,要依照 ID 順序排列,問我怎麼改 code ?
EX:
"123" assign 到 room 8;
"283" assing 到 room 9;
因為我回傳的是 vector
然後他又問:OOD 的觀念?到這邊就是我另一個罩門了,我沒有這方面的概念。因此就結束囉!
最後他總結:他說他考了我:算法 + 測試 + 資料結構 + OOD 我自己總結:因為我不是CS背景的,感覺除了 leetcode 以外的知識都相當的匱乏。 看板上面經,BB似乎是一定會問算法之外的知識的,這就是純刷題的我的罩門。
10月初参加的onsite,现在来补一发面经。
- 俩白人小哥,上来闲聊简历10分钟,merge two sorted list,LC215,LC347.
- 老印+中国小哥shadow,convert binary tree to doubly linked list, min stack
- hr闲聊30分钟
- senior manager面,聊了一些behavior和简历,word search II讲了思路和伪代码。
第一轮。两个人,一个ABC哥哥和一个国人姐姐。 第一题 2 sum变形题目。感觉是热身的。第二题word break II. 当时是说只需要我说思路。不过因为这道题刷过很多次很熟。所以我就直接写出来。提供一个我写的这道题的思路。https://qiuzhihui.gitbooks.io/r-book/content/140_word_break_ii.html
第二轮。两个白人哥哥,人都很nice。题目是,让你设计一个browser中的最近浏览10个网页的功能。其实就是想让你写一个LRU cache。key就是url嘛。然后valu是你cache的这个web的html这些。然后还让我实现了另外几个功能。比如display最近浏览的网页url。其实就是把cache中的url顺序返回一下。 https://leetcode.com/problems/lru-cache/
中午给了15分钟吃披萨。那个披萨好难吃。我咬了一口就吃不下去了。也造成了我最后一轮感觉没力气了。所以大家要自己带好吃的啊!
第三轮。两个hr。 一个姐姐是英国刚过来的,口音超级棒,而且很漂亮。大致问题就是why bloomberg。然后薪水需要多少什么的。
第四轮。中国manager。这个大哥上来就不是很喜欢我。然后丢了我一道找一个BST中的sencond largest node。 分情况写吧,如果右边树底端没有left child。那么久返回它的paren。如果有child就返回right most child of it's left sub tree。当时写这道题有点体力不支了。不过最后也写出来了。然后聊了聊其他的东西。. more info on 1point3acres.com
我觉得是差一点。主要是跪在最后一轮,不知道为什么我跟manager没有聊得很开心。然后算法题也是没做完美吧。
second largest node 那道题应该用 in-order 吧,maintain两个pointers: "prev" and "cur", 每次更新prev = cur and cur = curNode. 最后返回prev.
上来问一个design,给一只股票,假设它的price一直在更新,你要设计一下实时返回历史价格里最接近当前avarage的价格。。。然后分析复杂度。。。
我上来说用vector,每次新的价格来了binary search然后往里面插。面试官说vector insert是O(n),插入n个price加起来就是O(n^2)了。。。太慢。。。
我又问了一下这个应该怎么做啊, 跟我讲应该用一个balanced tree。。。我对红黑树的实现实在不熟。。。瞎扯了一会儿也没扯太对。。。
中国大叔和美国小哥
首先是问简历上的一个project,每人问了几个问题。整个过程大概10~15分钟。需要描述project,根据描述会询问一些细节的问题。
这一轮的代码都是在纸上用铅笔写的。
- 中国大叔:
Compute minimum traveling cost.
There are cities on a grid (matrix). A salesman want to travel from city (0, 0) to (m, n). He can only move horizontally and vertically.
Given the cost from one city to the city next to it, e.g. from (0, 0) to (0, 1), and from (0, 0) to (1, 0).
Calculate minimum cost from (0, 0) to (m, n).
首先跟大叔解释了一下想法:到(m,n)城市需要比较{(m-1,n)+ Cost from (m-1, n) to (m, n) }和{(m,n-1)+ Cost from (m, n-1) to (m, n) },然后在两者之中选比较小的那个值。然后列出来方程f(m, n) = min( f(m-1,n) + Cost from (m-1, n) to (m, n), f(m, n-1) + Cost from (m, n-1) to (m, n)).
之后开始在纸上写代码。
Cost from (m-1, n) to (m, n)后面写完代码问了用什么数据结构存这个值,我说的用Hash Table存<String, Integer>的key value pair,String的话就把两个city的matrix index (a,b), (c, d)压缩成”(a, b)->(c,d)"这样。但其实想想可能有更好的方法存这个数据, 矩阵上的每个城市只有固定的4个相邻城市,不考虑边界的话。
问完了cost的数据结构之后,大叔说可以了,然后换美国小哥了。
p.s.
但现在想想这题想的不完全,有了leetcode上面的62. Unique Path的思维定式,觉得只能往右或者往下移动。实际上还可以往左或者往上移动,所以每个点应该比较4个值。不知道为什么大叔没有指出来这一点。
这位大叔人很好,对我很照顾。
- 美国小哥: Deep copy a linked-list with random pointers.
There are many random pointers in the list. It might point to any node in the linked list, backward, forward, or point to itself. Make a deep copy of that linked list. Deep copy means get another new linked list with the same structure, and the new node of new linked-list shouldn't point to old node in memory.
首先让设计这个ListNode的类。
class ListNode {
ListNode next;
List
刚开始说了一个brute force的解法: 为了构建new node里面的random pointers,每个random pointer都扫描一下整个old linked-list,得到node position index,然后从new linked-list里面找到对应的new node。说完之后小哥问了时间复杂度,平均random pointers的数量为k的话worst case O(n^k).
解释完brute force之后跟小哥说由于时间复杂度太高,我们应该想办法优化一下。时间复杂度高是因为不停的扫描linked-list得到节点的position index,在新的linked-list里面要找到对应的节点也要从头开始找。为了节省时间可以用hash table + arraylist。hash table来存<ListNode, Integer>,ListNode存的是old node,Integer存的是old node对应的position index。arraylist就直接存List Node。之后在程序里面复制random pointers的时候,用hash table得到position index, 然后用ArrayList<ListNode>直接找到new node。对于k个random pointers,复制每个节点的时间复杂度就是O(k)了。n个节点就是O(nk)了。
没有follow up。之后是10分钟左右的提问环节。
第二轮:印度大叔和ABC大哥
印度大叔:
这次是在电脑上用键盘敲。
lc原题 271. Encode and Decode Strings (https://leetcode.com/problems/encode-and-decode-strings/)
ABC大哥:
因为上一问写题的时候一边说一边写,花了很多时间解释细节,到ABC大哥的时候就剩下20分钟了。ABC大哥出了道数学题:
There is a virus program. It will generate a 100MB file on your disk after created, and then gets into a while loop.
// virus program generate-100MB(); while (true) { sleep-1-min(); clone(); // clone program it self. }
If I click this virus program 1 time, it will take 10 minutes to fill the disk. My question is if I click the virus program twice, how long it will take to fill the disk?
答案:9分钟。One click: 0 min —> 1file, 1 min —> 2 files, 2 min —> 4 files, …, 10 min —> 1024 files. Two click: 0min —> 2 files, 1 min —> 4files, …, 9 min 1024 files.
数学题没答出来,不知道当时脑子哪里短路了,总之天马行空的往另一个方向想了。在ABC大哥N多次提醒之下写出答案。
之后是提问环节,对Bloomberg有什么问题要问的。
一、Bloomberg考的不是leetcode hard难度的题,都是很基础的题,所以熟练度和代码质量要求很高。比如第二轮第一题的时候我在一个for loop里面最后写了一个i += end,印度大叔说你这样写不可以,因为for循环是保证循环时间是n的,然后改成了while循环。所以小伙伴们一定要注重代码细节和质量啊。
二、最后的提问环节挺重要。不说逆转乾坤,但也算是给面试官留下最后印象的好机会。我在第二轮的最后提问环节就草草问了两个问题,感觉本可以做的更好的。
三、每轮面试时间都是一小时,一个面试官半小时的样子,所以每轮出多少题取决于做题速度。像我做的就不够快,一边解释一边写,每个考官了一道题,四轮总共四道题。p.s.如果够快的话是可以两轮12题的(想想平均10分钟一题,还不算问简历和提问时间)
四、做题的时候解释和写代码的时间要平衡好。像我这次面试就在解释每个点上都花了比较多的时间。其实想想有很多比较简单直白的概念、想法,或者一行代码就能表达出来的东西不需要解释的那么详细。小伙伴们来之前一定要在白板或者纸上练习一下,最好找一个同学或者朋友帮你平衡好这个权重。
五、简历上的project会顺着你的回答提问,问的很深,而且每个点都会问的很详细。准备好简历上的每个点以及每个点可能带出来的问题和每个点带出来的问题的问题和每个点带出来的问题的问题的问题吧(哎,第二轮那道数学题没答出来被自己蠢哭了,不提了,都是生活
后记: 因为住在纽约所以并没有领到信封,自己名字旁边是个0好心塞。看看其他人都是50、100的,啊哈哈哈。 面完第二轮就觉得自己要被赶出去了,所以在会议室等了20分钟,听到HR姐姐说you’ve done for today的时候也没那么失望。就像和我一起出来的同胞说的,that’s a good expreience. 中国大叔面试的时候真的让人感觉很温暖,满满的同胞感。不是说大叔出的题有多水什么的,是很多细节、聊天时候感受到的来自长辈的照顾、关心。现在才真切的觉得我们这些在美帝的中国人是个特殊群体,在中国长大来到美帝来读书、找工求职。所以就算不谈血浓于水炎黄子孙什么什么的,但能为同胞帮帮忙的地方尽量力所能及。想想我现在能做的就是认认真真写写面经,以后找到工作多帮小伙伴内推一下,面试看到同胞尽量在细节上关照一下。只有咱们这个群体互相帮助才能互相提高。融入美国社会什么的,我觉得水平提高到一定程度之后自然就融入了,口语啊文化啊技术啊什么的。(说的有点多了,结合最近梁警官事件的一点点感慨吧)
准备面试和面试就是个不断提升自己的过程。很遗憾的,有些东西之后面试完了才发现问题。哎,都是生活。But I'd have to learn that one the hard way. 总结一下失败原因,交了学费,然后move on吧。
话有点多哈。大家可以跳着看。 今天(1/6/2016) 刚刚面完Bloomberg onsite...二轮挂了...回报给大家..已经分享过phone interview了...点我profile。看我之前的帖子....
面经之前...我先吐槽下Bloomberg hr...发现他们非常喜欢being late!!电面安排11/5...楼主一直update和告诉hr 我面的是实习!!!!...完全不鸟人...
12/1/2015 另外个(叫克里斯蒂纳 and last name starts with N) 才发来full time onsite...我立刻选了个日子....12/14回我...说你的email到我的spam里了...我直接无语。。姐姐。我回复你的email。为啥会到你的spam里面去...她问1月6号onsite可以么....我立刻回okay。再跟他反应我要internship。。继续不鸟我...等到1/5号回我他帮我换了...然后我这时真无语了.姐姐你onsite information都不发给我...你叫我咋面试...而且还是1/5号下午4点多发给我..幸好我住纽约。。不然坑死。.onsite 信息email里就写时间。公司地址。
Your interviews will be technical, we want to see how you write code and solve problems. Be prepared to write code using paper and pencil. You will have approximately 2 interviews. After your first interview, there will be a 20 minute break. We will be providing you with lunch - please let me know if you have any food allergies. Feel free to eat your lunch during this break..
到了公司之后...给你拍照..立刻打出个visitor ID..警卫全穿西装的...太严肃了...好多员工穿西装笔挺笔挺的。 进了之后到6楼等...bloomberg的building算是我见过最好的一个了。很高大上....building设计师设计的很好!一大帮人在Link那等...目测10人+...hr 10:40多才来。。说好的10:30呢....面试空闲当中。
我各种逛。。发现他们keyboard都是自己生产。。monitor也是自己生产。。messager也是自己做的。 hr就带我们参观..介绍link。什么11点food soup...说bloomberg 提供dinner。但是在8点。.....说完了就去5楼...下楼梯的电梯escalator蛮刁的。。curved的。第一次见。。hr也自夸了下这个电梯...还有看了下terminal发展史.一个面试者想拍照。但是hr不知道为什么不让人拍照。.最后就是上29楼看view....view蛮好的。楼很高...一群人在那拍照。.
在接下来就是进一个room了...一对面试官在那等。。大家签个名。拿个卡。不知道为啥我的是50块钱..别人是100..然后面试官领走各自的人...- -..我跟另外2个印度哥哥傻傻的站在那没人领...过了5 6分钟后...2个老头领走我。。老外叫tom。tom很热情。边走边跟我说话..问我教授.结果他一个不认识- -...还没进房间呢。就感觉已经开始面试了。
第一轮(在21楼w-a)印度人名字Y开头的。不会念。。老外老头叫tom: tom先虐我。。问我上了什么课。主要语言是什么...在jp morgan做了什么。most challenging part是什么...did you enjoy it??你想做什么?我刚准备要写java..老头头让我写c...蛋疼。老头挺搞笑的。问一个问题。就虚一声...好像是什么秘密似的
问题1:can you write a smallest program that will use all the stack memory? void badFunction(int n) { badFunction(n); } 问我为什么要有个argument.我说没有也可以。没什么影响...
问题2:can you write a smallest program that will use all the heap memory? 还问我知不知道heap是什么。
void badFunction2() { while(true) { malloc(5); } }
老头问我。为什么malloc(5)..我说数字随便挑的。其他数字也可以...就问这个5是什么。我就说是number of bytes you want to allocate..老头就说。如果是5的话。真的会用掉全部的heap memory么...我说可能会剩4个bytes...老头就说。那应该就是malloc(1)..我就想起来malloc是allocate one page at a time..就跟他争论这一点。老头还问我what is a page..why do we use page in OS?....(貌似老头不懂page)囧囧囧....老头再问...如何safely exit while still use all the heap memory.跟老头谈了一番之后。优化出下面答案。老头还问what does malloc return..我傻逼的回答number of bytes allocated.....一想不对。。立刻改memory address。老头才点头。 void badFunction2() { while(malloc(1)) { } return; }
这时貌似everything还okay。。接下来就是悲剧了。 然后就到另外个印度老头虐我了..
问题3: add two linked list...跟老头说面试官电面做过了...老外老头笑嘻嘻说的。。very honest...good..印度老头就说。那你口述给我怎么解。。就说reverse 一下。然后add.. 印度老头说。okay。那现在你不能reverse...也不能modify linked list。你咋做...说了recursion想法。。印度老头表示满...然后code的时候卡卡的写出来...然后就知道没什么希望了 最后就问老头们问题了...
老外老头本来是教bloomberg new grads training的。教了13年...现在在做legal...印度老头表示老外老头曾经是他的trainer..忘记印度老头做什么的了。听起来不是很厉害的那种。。问的过程。2个老头各种夸bloomberg....老头们说bloomberg员工负责全部的development cycles..design..development..testing..writing requirements..maintenance....然后一个组想要intern。要想个project.然后交上去被一个committee审核..还问了其他零碎的问题....
等了半个小时吧... 第二个面试开始...进来一个老外老外RONNIE..也是挺搞笑的... 进来就问我前面面试如何。。我就说不咋的。他说为啥不咋的..我说他们给hints才写出来(现在想想。。老头你一个人来了不就是代表我挂了。知道他们的feedback么。还问我干嘛) 我接下来问的全是system design...老头表达能力不是特别好...说了蛮久才知道他想要什么...
第一题:设计ipod..聊着聊着。说我要你implement shuffle function....我就说一个array of indeces 来represent the shuffle list..each index represents the location of the song in the original song list..老头一开始没懂...一步一步画画跟解释再加写了pseudo code..。。他懂了。。说interesting的...first time hearing this design。。。我就问跟你想的不一样么。他就说。。一般面试者给的答案都会出现dupliate问题..我就说。我考虑到那个问题。所以才这样design。他说你的solution貌似deterministic..而且更好..最后写了个real code。
第二题:给了A, B, C, D, E and F tracks...每个track有sensor...每个runner过了track。会有个event出来。。Event(13, A), EVENT(15, A) 13, 15表示runner...A表示track.. 还有一个dashboards that shows me top N runners in K runners.....我用hashmap + circular array...解决了简单的case.但是发觉会出现duplicate runner on the dashboard。。老头表示超出时间了..说懂你的算法了。。不过一些些小小的问题我知道你可以解决...
最后问老头一些问题。。 发觉bloomberg老头都喜欢教育人...老头说他的组跟equity有关...问我知道stock是什么知道么。bound是什么知道么...还问我go out of business..if you have bounds..what do you get...完全变成eco class似的。。最后说他在classification组...我问。你咋classify companies..他说based on income...我问他。那google呢。他主要收入是广告。。那他是media还是科技公司?他表示interesting question..要回去看看才知道。。接下来再扯了几个问题。就拜拜了...
又等了40分钟。。hr才来了。。就是那个1/5才回我的hr。 一直笑嘻嘻...You are done for the day...他跟我说recruitment coordinator 一周内会告诉你答案。。(OS:你不就是我的coordinator么...)... 出大门。还警卫badge....
谢谢大家看我吐槽。路过走过都给点米!!
最后还有没有去amazon summer 2016的?发我信息。过几个月西雅图一起玩耍。一起租房子。
Pass
一开始大家都在大厅的圆沙发上等着,人到齐了以后一个叫Kate的HR带我们tour了公司的building,公司还是很高大上的,全部玻璃墙,环形电梯,fish tank,Kate身材性感妖娆,赏心悦目。 面了四轮,我感觉大家都很有趣蛮亲切的,即使一个一本正经的白人大叔,表面上看上去有点可怕,交流了以后才发现其实也是蛮没有架子的,不同意你的说法也不会一棍子打死,会和你争论, 最后还承认楼主的想法有道理。
第一轮: 一个白人大叔 + 一个年轻的manager + 一个刚工作不久的很有geek feel的员工, 1 vs 3 .
1.1 find the intersection of two arrays. 提供的array里面会有重复的元素,重复的元素只能算一个 楼主用了两个set解决, set1中加入array1的元素, 完事后遍历array2, 将共有的元素加入set2中。 followu: 如果是K个array求intersect该如何求? 答:也是利用上面的方法,用k-1次循环, 每次比较相邻的两个数组,最终求出交集。
1.2 graph : 需要小哥的图才比较好说清楚,说有一个朋友圈系统,每个用户有一个list纪录他的所有的direct friend,每个direct friend和这个用户的亲密度为weight(正整数),假定给出一个user作为. 出发点,寻找所有离该出发点的distance小于一个数(每跨过一层关系distance+=1),并且路程上weight相加又大于一个数的所有朋友。
答:楼主用的DFS搜索,写了一个recursive的函数,用一个hashmap去纪录所有遍历过的node和与该node相关联的
Time complexsity O( pow(k, distanceThreshold) ) k平均每个node的direct friends个数。
1.3小哥想出min stack,楼主说做过了。然后小哥出了一道number of islands。 follow up:如何才能在DFS里面省去boundary check,楼主是问了半天才明白是什么意思。 答。 可以在matrix周围扩展出一圈 "0",这样边界因为都是海洋所以会自动跳过DFS的recursive section。这个问题有点刁钻哈
第二轮: 国人姐姐和白人大叔manager.1point3acres缃� 2.1 国人姐姐:inplace sort an array with empty space.要求O(n) time, constant space. 比如有一个array[6, 2, 0, 1, 4, 3, 5, 'X']数字的范围是[0, n-2], n为array的size。'X'代表数组中empty的space,要求算法用那个empty space做一个sorting。
答:从头向后遍历数组,如果array != i, 则 swap(array, array[array]), 这个swap记得用empty space, 完成后empty space的位置变成了i, 要记录下来下一个循环再调用。
2.2 白人大叔: 考察了C++的基本概念, pass by reference/value, copy constructor/destructor, protected/private/public, smart pointer etc.他给了一个应用题,但是如果上面的概念都清楚的话应该没问题的。.1point3acres缃�
HR面: 往海里吹了
第一轮三个面试官,两个白人一个印度人。问了下实习经历,五分钟后开始做题。
第一题 reverse link list。用了dummy node + 头插法直接写出来了,但是面试官都说没见过这种方法,我就用几个例子解释了下,解释完了面试说你这方法还挺好的。 相关问题:问什么要用dummy pointer;string result = "",当这条指令执行的时候,发生了什么。(copy assignment = default constructor + assignment operation)
第二题 LC 17。题很简答,一上来我就知道要用DFS写,但是脑子突然不转了就卡了一段时间,花了20分钟才写出来。
第三题 Design Parking Lot。我就日了狗了,还剩不到15分钟给我一个design的题,好在这道题前一天晚上看面经的时候想了想,就大概说了设计的思路,有哪些object,member variable和function,object之间的关系。没有写代码。
隔了半个小时第二轮,一个白人一个中国人。 第一题(就跪在这道题了) 题目的背景不太好理解,花了快10分钟才明白要干啥,简化的来讲就是如果第一列是月,第二列是日,现在如果把月和日连起来,如何连。
比如,1月11号和11月1号连起来都是111。但是这种encode的方法没办法 只通过111来区分是哪一天了。 这道题的答案就是0111和1110…这也是我刚出BB门才想到的。开始想解法的时候在草稿纸上写了些思路,比如数字之间相乘相加之类的,写到位操作的时候,面试官就开始追问位操作的各种细节,一方面是我对位操作的具体实现不是很清楚,另一方面我就以为这道题的解法就是跟位操作有关。纠结在位操作上,半个小时过去了也没想到那个简单的解。
第二题 Buy and Sell Stock II 可能国人大哥看我在第一道题上受挫太严重了,就给我出了这个,解释了下思路就写完了。中间有个bug,最后也修改了。
第二轮完了整体超时30分钟。因为第二轮的面试官说现在应该把我送到第三个面试官的房间,但是按照schedule来看我当时第四轮面试应该已经开始了,所以他们就直接把我送到了schedule里的第四个房间。我当时以为自己前两轮过了,就开始在房间里复习behavior questions。结果等了一个小时还没有人来,正要给HR发邮件问what's next的时候,来了另一个HR说你今天已经结束了。就送我出去了。
感觉有点遗憾,第二轮的第一题想法一开始没有走到正确的path上,面试官也没有纠正我。给之后面试的同学两个建议吧。 1.如果你从西飞到东onsite,最好能提前一天去倒时差。我前一天从西雅图飞了6个小时过去,晚上12点到酒店 时差问题也不怎么困,睡眠不足就导致第二天明显能感觉到自己状态不是特别的好。 2.BB onsite是在纸上写代码,而且是比A5还小的纸。我写的时候写的很乱,也没有说明每张纸写的是什么。当看到第二轮面试官把我写的纸收走的时候,我就觉得下次有机会还是要注意下。
今年的第一个oniste,挺紧张的,可能题刷的不够,感觉总有点虚。今天interview的人挺多的,而且有两个就背着g家书包,一看就是大神废话不多说了,直接奉献我的血肉
印度小哥,人挺好的,一直说take your time,然后偶尔还会给点提示.1point3acres缃� 一上来问一些c++基础,主要我觉得说pointer VS reference的时候说的不清楚,确实怪自己基础没打好.1point3acres缃� 马拉松,好像好多人看过了,我看了两天面经,偏偏没看这题😢。总的来说,就是有vector of runners, 然后inputs是 (a, 1), (b, 1) ...(a,2) 这样的源源不断更新,1, 2 ,3...是milespoints, 需要随时print ranking。 用map, set解决了,follow up能不能不用map,我用map是存同runner之前的状态的,我想想自己也是傻,之前(a, 1),下一次也只能是(a, 2),就完成他followup了 find nth largest,就不多说了
也是一个印度小哥,不过就没那么友善了 也是系统设计(为啥两个人上来都系统设计?), 设计一个现实牌,显示时间,温度,还要有24小时内的最高温度,最低温度,和分别对应的时间。也是没碰过,用3个dequeue去存,一个是纯存stream,维持size是24小时的温度,像sliding window,一个maxdq,只存比maxdq尾巴大的,一个mindq,只存比mindq尾巴小的,小哥说可以,然后简单写了下code,我发现还剩10分钟,居然让我问问题了?我问,就没有questions问我了吗?他说没,我就尽量扯淡了几下,然后他翻了翻他拿进来的一张纸,说我今天schedule的就两轮!?忽悠我吧?~~ 我懵了~~虽然感觉自己答的一般,从聊天反应看也不是太差,居然两轮游!!
楼主两轮游, 题目大放送, 攒人品啦啦啦啦啦
第一轮 technical interview: 面试官 一个亚洲人一个白人。 亚洲人上来让design 和implement object。 user input string , object要能分析并return 出 string中 between 0x02 和 0x03 中间的string。 这个题 tricky的部分是 如果第一次的input 没有0x03, 就要继续read 下一条 input 直到 检测到 0x03. 如果 同一个input中, 出现两次 0x02 ABCD 0x03 0x02 DDBCD 0x03 那么 就要return arrayList < ABCD , DDBCD>
楼主太紧张,在面试官很多提示之下,最后做出来了。
第一轮第二题: 爬楼梯题, 一个人爬楼梯,有一个已知function: jump() 会随机return true false; 如果jump return true, 这个人上一台阶。 反之 下一个台阶。我们要implement 一个function 叫做enforcejump(); 就是这个function要确保这个人必须是上一个台阶。 要用到 jump() 这个楼主跟面试官讨论了题目, 高清之后开始做。 做出来了。
马拉松 一堆runner再一个跑道一起跑步, 上面有很多sensor, 每个sensor有sensor id, 当一个runner通过一个sensor的时候会有一个message传到中央sever, 要你设计一个实时leader board.
当时想了个类似LRU的方法实现O(1)的复杂度。时间不够了,没写code。有同学知道怎么做吗?
第2轮 聊了以前的projects. coding题目是给一个开始日期和结束日期,把时间按季度打印。 例如 4/30/2015 to 02/01.2016, print Q2 2015 Q32015 Q42015 Q12016
这题有些conner case, 注意下就行
第3轮 问题一是valid BST,注意leetcode的解法的要有严格的顺利, 不能出现root<=right的情况。写了recursive and iterative两种实现 问题二是 找 longest prefix substring from a long file. 一种解法是用 trie . more info on 1point3acres.com 然后HR上来把我送出去了。
总的来说, BB的coding不算难,可能他家更看中交流和解题的思路。
第一轮 真够惨的 估计跪在这一轮
2sum Leetcode #1
数字游戏 给一个list, list中有两个数. 过程中可以一直往list中加数进去(append在最后), 但必须一直遵守三个条件:
- list中所有数均需大于0
- list中所有数都必须为unique
- 新加入的数必须为已存在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的地方, 此时听到有火车声从入口传来, 假设火车速率是你跑步速绿的两倍, 问你往哪个方向跑生存机率大些 . more info on 1point3acres.com 问了一点Java memory管理的概念, Stack跟Heap
第四轮 HR身家调查
早上刚面完的。全程没看到别的candidates,就我一个人。。。楼主一直生病,面试过程中各种咳嗽,心好累。
- 2个大叔,一个没有口语的三叔,一个冷面小哥,不知道后来突然变热情了。。可能是慢热型 1) 一堆做过的项目的具体问题 2) Java各种问题,java和C++区别 3) Unit test.我说了我没用过他们还一直问,我特别无语。。。 4) 第一道题目:sorted array找第一个为target的index... binary search.考虑下不存在的情况 5)第二道题目: listnode表示的两个数据相加,是1->2->3和4->5,加起来1->7>7。说了两种思路,一种reverse加完再reverse.一种stack
问了他们一堆问题。他们太能扯了。。总共持续了70分钟左右
- 一个BB12年的看着特别像个刚毕业的小哥。。好想问他保养之道。。 上来一堆项目问题。也不知道他懂不懂,反正就一直问。 然后就是股票那个题目,一直有新的股票交易加到系统中(String id, int volume(正数))。 一天结束后要求你返回volumn总和最大的20个。然后扩展到随时返回。。 Map+Heap的思路。 这个小哥一直各种问,问我map内部怎么实现的。然后问我java heap怎么实现的,怎么比较的,怎么删除的。。。。 我嘴欠问了下要不要考虑volume overflow,然后他开始问我怎么处理。让我design一个bigInteger。。
BB真坑爹,午饭就让我自己在kitchen吃snack....
- HR。问了几个我想做什么项目,缺点,优点。然后开始无止境给我安利BB。。各种benefit介绍。。这是什么情况啊。。。
难道今天不是面试日,就我一个?
Round 1: - Given an array of n elements, 已知所有elements都在1-n里面,并且有只有一个数字missing,一个数字duplicate。要求return那个duplicate。 Example:[1,3,4,3]return 3。 Linear time,constant space (是Leetcode题吗? 是的话大家直接无视我吧,我题刷的少。。)
- Leetcode merge intervals
Round 2: - 定义了一个 structure Node { int val; Node up; Node down; Node* next; }; 以及一系列的rules:个人觉得这题的重点是理解rules)。。
- 一个Node的 up如果不是NULL,那么那个up Node的down和next都是NULL;
- 一个Node的 down如果不是NULL,那么那个down Node的up和next都是NULL;
- 所有能通过up pointer reachable的Nodes 的value < current Node‘s value;
- 所有能通过down pointer reachable的Nodes 的value > current Node‘s value;
- 所有能通过next pointer reachable的Nodes 的value > current Node‘s value and thoses of all Nodes' reachable from down pointer;
然后given head node, print out the values in the linked list in ascending order。。
然后design题:N个运动员,K个checkpoints, 每个人经过一个checkpoint的时候(runner_id, checkpt_id)就会被加进某data structure里, 问什么样的data structure can make it easy to get the L (L provided by user) leading runners.
Round 3: HR... 不多说了
Round 4: Manager 因为manager自己在做news classification, 所以就聊了各种machine learning的知识。。
第一轮很友好的的两位大哥,在去房间的路上扯了些有用没用的,总共问了我三个题吧,而且都是比较简单的。刚上来有点懵逼,想不出优雅的解法,于是我便开始跟面试官讨论我当前的想法,面试官马上给我降低难度,让我先写简单版本,写完后又回到原题让我做corner case多一点的,这一来一回给我了思考时间,最后也想出了优雅的解法。面到中间我发现只要我一低头写code面试官就开始打哈欠,一抬头解释他俩就听得很认真,后来我就干脆把笔甩了code也不写了给他们口述。
第二轮只有一个问题。。,上来白人小帅哥先鄙视了一下我的project,问题是关于设计数据结构搜索股票的ticker,我上来就说Trie,国人小哥立马把我打住,来,咱先从简单的说起(现在想想真的很感谢他),于是把string改成int让搜索最近的,于是sort、binary search什么的基础概念给他们缕了一遍,其间常常同一个问题让我反复解释,俩人也是逗趣,各种故意误导我,感觉在调戏我。。。。最后终于回归到trie,让我解释怎么建,怎么找最近的target,怎么找到neighbour,中间又是各种调戏,最奇怪的是我每次低头写code他俩都在嘿嘿嘿偷笑,至今不明白为什么,难道我长得很喜感吗。于是就这么嘴不停说了四十多分钟,然后他俩就让我问问题了,我当时就慌了,这就完了?妥妥二轮游了,于是反问他们你们确定没有问题再问我了吗?人家说时间到了,于是漫不经心的问了他俩几个问题,俩人走之前国人小哥还提醒我记得把lunch box吃完。。脑袋一片空白在屋子里等着被带走,一会儿HR果然来了,我起身拿东西准备跟她出去,没想她第一句话是ask for my information,我瞬间觉得她是世界上最美的女子。
HR聊完后来了manager,这轮过的好痛苦,我不管说什么manager要么说不对,要么说well, that depends。。一开始就揪着问我为啥不去做quant,我那份简历写的确实不像想做开发的,只能硬着头皮说自己follow my interests,后来做了一道题,就怎么给两个非常大的整数储存并做乘法,我一度以为我说的是最优的解法,他一直问能不能更快,最后有点急了直接反问他又没有什么好的idea,他也没说,当时气氛挺尴尬。后来有让我写code实现了一下这题算是过了,整整讨论了半个多小时,code倒是写的快。然后就让我问问题了,并没有展示ternimal。面到这我心情挺崩溃的,整轮没得到正面的鼓励,然而后面又开始问我为什么不去bank,我口干舌燥有点累就放弃争执了,最后被送到楼下握手后manager给出了全场第一个笑脸,说了句good luck。
回来后研究了下地里面经,面了四轮的大概30%多被拒,没想却收到了offer,有点神奇。还是非常开心的,Michael Bloomberg是我偶像,以前实习的时候角色都是BB的client,在北京时以学习ternimal为由去Bloomberg的office蹭吃蹭喝也是好几次,当时就想能来这里工作就省了零食钱了,还能看鱼。。。没想就这么一步步实现了,有点恍惚。自己金融工程学了六年,最后竟很大可能从程序员开始职业生涯,虽然自己确实有兴趣,这是之前没想到的。但生活或许变数就是很大吧,觉得还是要多折腾,还得greedy一些,当然greedy是动力,策略上要dp。
没面过传统的IT公司,几点感想或许只是用于BB:沟通还是很重要的,能讲的就直接说,让写了再写。说的时候加上些手势、表情或许能加强气场,说话可以慢一点一字一顿。一时想不起来的可以先交流当前的想法,别把面试官孤立了只顾自己写,同时也是缓兵之计。不卑不亢,有时可能有意制造压力氛围,稳住阵脚,别受影响。面经很有帮助,在此感谢地里,但背原题战术在面试时容易紧张,有时候跳出来多想想也挺好,而且面的全是原题成就感也会降低不是。
第一题: 给一堆债券名,和对应的应付款
如 a:$100 b: $50 c: $50
另外给一个amount,用来付上面的债券, 比如200. 不一定要全部付完
两种付款方法: 1) 尽量付完, 如amount 是200, 那么先付a $100, 然后amount剩下100,再付b $50, c $50 最后 amount剩下0
如amount 是120, 那么先付a $100, 然后amount剩下20,再付b $20,
最后 amount剩下0, b剩下$30, C剩$下50
2)按比例付 比如amount是$80. 1point3acres.com/bbs
a:$100 b: $50 c: $50
那么应付给 a: 80 (100/200) = 40 那么应付给 b: 80 (50/200) = 20 那么应付给 c: 80 * (50/200) = 20
1)2)可以组合, 比如 债券a 按方法1付, 债券b,c按方法2付, 组合方法无下限
这个应该算是设计题
我的一点思路,每次输入的组合当作一个字符串输进来。所有的债券存在一个map里先,之后根据用户输入进行计算更新map里面所有债券的付款额。node就是我的债券class public class Bonds { private class Node { public String name; public int payamount; public Node(String name, int payamount) { this.name = name; this.payamount = payamount; } }
HashMap<String, Node> map = new HashMap<String, Node>();
//store the permutation that user want in the format of String
String sb = "";
public Bonds() {}
public void add(String name, int payamount) {
Node node = new Node(name, payamount);
map.put(name, node);
}
//User request for which bond is input in the format of string
public void inputList(ArrayList<String> list) {
StringBuilder ss = new StringBuilder();
for (String s : list) {
ss.append(s);
}
sb = ss.toString();
}
public void calculate(int amount, int num) {
if (num == 1) {
for (int i = 0; i < sb.length(); i++) {. From 1point 3acres bbs
if (amount < map.get(sb.charAt(i)).payamount) {
map.get(sb.charAt(i)).payamount -= amount;
return;
} else {. 鍥磋鎴戜滑@1point 3 acres
amount -= map.get(sb.charAt(i)).payamount;
map.get(sb.charAt(i)).payamount = 0;
}
}
} else {. 涓€浜�-涓夊垎-鍦帮紝鐙鍙戝竷
long total = 0;
for (int i = 0; i < sb.length(); i++) {
total += map.get(sb.charAt(i)).payamount;. more info on 1point3acres.com
}
for (int i = 0; i < sb.length(); i++) {
map.get(sb.charAt(i)).payamount -= amount * (map.get(sb.charAt(i)).payamount / total);
}
}
}
public void printamount() {
for (Node node : map.values()) {
System.out.println(node.name);
System.out.println(node.payamount);
}
}
}
第二题:
给一堆字符串 【“abc”,“def”,“adbecf".....】
问有没有一个字符串是其中两个的组合 这里的组合是指交叉组合:
如: adbecf是 a b c 和 d e f 的交叉组合 1234 是 1 3 和 2 4 的交叉组合
这题本来很简单,结果自己想复杂了。 不过至少也说出来很多想法,
public class cross_combination {
public static boolean combination(String[] input) {
if(input.length==0||input==null) return false;
List<String> dictionary = new ArrayList<>(Arrays.asList(input));
for(String str: input)
{
if(str.length()==0) continue; //skip the empty string
StringBuilder oddPosition = new StringBuilder();
StringBuilder evenPosition = new StringBuilder();
for(int i =0; i < str.length();i++)
{
if(i%2==0)
{
oddPosition.append(str.charAt(i));
}else
{
evenPosition.append(str.charAt(i));
}
}
if(dictionary.contains(oddPosition.toString())&&dictionary.contains(evenPosition.toString())) return true;
}
return false;
}
public static void main(String[] args)
{
String[] test1 = {"ac","bd","abcd"};
System.out.println(combination(test1));
String[] test2 = {"aaab","bbba","a"};
System.out.println(combination(test2));
String[] test3 = {"ace","bd","abcde"};. 1point3acres.com/bbs
System.out.println(combination(test3));. visit 1point3acres.com for more.
}
}
八月底去bb家官网海投了简历,大概两三天就收到了电面邀请。九月初电面,面试官是工作四年的三哥大哥,题目是binary search类型,大概是给一个有序有重复数组和一个target,求这个target在数组中的index range。
之后一周左右收到onsite邀请,约在了九月底。
面试当天先在一楼登记之后去六楼的接待区等待,自助小食和饮料,和一起坐电梯上楼的三哥和美国小哥聊聊天,看到大约20个candidate的时候还是很吃惊的,算下来bb家也是很花经历用来onsite的。
之后hr姐姐带着大家简单的参观一下,然后直接带队去十几层的地方。
round 1的面试官们像家长等老师带队出校门接孩子一样在那里等候,拿了一盒简餐之后面试官会带你去你今天面试的会议室。之后的所有面试都会在这个房间进行。
第一轮 白人美国小哥和印度长相美国口音的美国小哥 上来先是聊一个简历项目。
第一题是写一个开方取整功能的方法,但是不能用自带sqrt功能。属于比较标准的二分法题目,在二分的时候边界判断不要出死循环就好。
第二题是设计题。大概题目就是设计一个数据结构,实现一个像chrome浏览器里那种显示你最常访问的八个网址的功能。说了想法之后,小哥让我code实现其中一两个方法,但是时间关系没有写完第一轮就结束了。
第二轮 美国小哥 感觉第二轮本来也应该是两个人的,但是好像其中一个人临时有事,所以全程只有一位面试官。 同样的先十分钟简历。
第一题是实现两个长数字的乘法,两个数字都是以字符串形式输入。刚开始有点懵,但是小哥人很好,基本算是有指导一步步写完。题目想法很直接,但是code写起来确实还是挺长的。
第二题设计题,跑马场记录赛马名次。这题应该是他家高频了。
第三轮 白人hr姐姐
基本都是behavior问题,其中让我给她讲个我的项目经历,我个人觉得如果摊上这样的问题,最好不要讲技术层面的detail,感觉她可能是考察你以后对客户解释和表达产品能力够不够好。
第四轮 在bb工作了13年的白人欧洲manager 进门之后很随意。 同样十分钟简历。 然后出了一题。题目大概是给两个非排序数组,给一个target,两组数里各取一个求2sum。follow up了如果不让用hashmap的话,怎么自己实现一下hashmap的功能一类的。
之后manager带出面试结束。
之后一周收到口头offer。 目前湾区一些也在面和投,但是个人喜好原因倾向于大城市,所以基本就决定是他家了吧。
总体感觉他家面试并不重在算法,之前看了很多前辈的经验也说他家给offer很随机,没什么规律。
我个人经验上讲,感觉他家还是蛮注重和面试官的交流的,从简历的项目能不能说明白,言简意赅,对于面试官的追问能不能马上get到point,并且给出他们期待的反馈,到算法题或设计题你如何阐述你的想法,做题过程中遇到新问题和他们交流如何解决,到和他们瞎聊天,都是一种互动交流的考察。
总体上感觉,要看他们是不是愿意和你进行更多的交流,而并不是看他们是不是认可你的做题的能力(当然做题的能力也很重要)。
所以我臆测,那些大牛们onsite做了很多题但是没offer甚至两轮游的原因也许是面试官觉得交流不畅,毕竟以后都是同僚,闷头自己搞的人在bb这种产品导向、随时要和非码农交流的公司比较吃亏吧。
大概面经就是这样。听一些前辈说金融it的面试重在交流,这次深有体会。希望能给大家带来思考和帮助! 最后说下本人背景,国内非cs本科(bio类),来美国转cs硕士。资浅小码农。
感谢学长下来看望了一下我。。瞬间镇定了很多>.<
10:30开始面试 之前大家会聚集在6楼的snack bar旁边聊天 发现坐我旁边的是两个大二的。。。 楼主顿时觉得已经老到要和本科生抢工作了。。虽然他们找实习(∩_∩) 之后一个加拿大帅哥坐在我旁边 跟我分享了一下他的面试经历 告诉我准备google只要算法 不要design(真的吗?。。各位求回答 我也要面了。。。。) 之后hr mm 会带着参观buildIng 楼主表示去年来过一次了。。套路都一样。。连厕所在哪都轻车熟路了哈哈哈 之后到了一个类似走廊的地方 面试官认领人~ 面试开始
印度哥哥+白人姐姐 . 1point3acres.com/bbs 聊天 介绍project
题目很easy... bst找有木有target -> 找到target返回在第几层 -> 输出找的路径 之前刚面过snapchat onsite的表示 bb家的算法太良心了。。 最搞笑的是 楼主用bsf做的时候 白人姐姐问我 为什么queue new 一个linkedlist可以得到 不直接new 一个queue 楼主当时候都已经怀疑自己听错了。。 queue是抽象类怎么能new啊????。。。。excuse me ??..,, 估计白人姐姐不太懂java好我原谅她。。 然后一个标准的bfs写法 她看不懂。说她kind of lost 。。。 楼主又沉醉了。。。 我就run一个case给她看 她表示恍然大悟。。。。 我也是很无奈。。
之后印度哥哥又出了一个 找出第一个不重复的char loop两遍的做法 之后说可不可以loop一遍。。楼主记得这题之前有小伙伴发过贴讨论过。。当时候大家表示好像不行。。楼主懵了几秒钟 瞬间反应linkedhashmap可以啊。。。 然后说怎么设计 印度哥哥表示ok
聊天 白人姐姐介绍了女性工程师在bb的生活 说她会在下个月去某论坛发言 0.0 鏉ユ簮涓€浜�.涓夊垎鍦拌鍧�.
- 国人姐姐+阿拉伯大哥?? . more info on 1point3acres.com 聊天 + 简历
大哥 pow(x, n) 先讨论输出可能是什么类型 我说你的expected time是什么 线性的话就直接做 否则需要递归~ 有哪些异常 要抛出异常 然后要抛出哪种异常 写好 大哥说ok follow up: 问当n小于零的时候 也可以直接变成 算pow(1/x, abs(n)) 为什么不这么做? 楼主说 这样recursive 你就要重新创造function 不能用本身 大哥说还有吗 楼主说可能溢出? 大哥说我们不考虑溢出 楼主蒙了几秒 反应说这样精度会缺失 大哥表示满意 我说float double 表示都不太精确 然后国人姐姐追问这两者区别 小数在计算机里面的存储-google 1point3acres
国人姐姐 设计电话本 支持插入 (string name, int number) + auto complete 楼主反应trie 写的时候 楼主反应过来 如果有重名的人 不同号码 咋办? 国人姐姐说 你咋办?。。 楼主蒙了一下 说把重名的人单独用hashmap 存起来 国人姐姐说那你auto complete的时候 怎么反应出有两个人? 楼主说去map里面取 姐姐说还有更好的办法吗 楼主又懵了一下 说直接在node里面加arraylist
写着写着 表示 如果用户输入相同的name number 咋办 面试官说你咋办 我说要么把arraylist换成hashset 要么直接扫一遍 面试官说 你觉得哪个好 我说这个是rare case 如果每个node都是hashset太大 我会选择扫一下 面试官说ok 你别考虑这个了case 写完之前的就好 我想多留点时间聊天23333。。。。 . from: 1point3acres.com/bbs
因为之前有在咨询公司实习过的经历 比较了一下在it公司和银行咨询的区别 楼主表示不想做一个服务人员 想做一个真正的而开发人员 姐姐表示赞同 举了个她朋友的例子给俺听。。 之后楼主说了一下对bb的了解 因为楼主真的是了解过bb 觉得挺佩服这个企业的 虽然必须承认 他的成功的确是当时候抓住了机遇 俗称运气好>.< 所以把知道的都说了一下 公司的value 技术terminal啥的 我说这个building是透明玻璃的是不是也是公司transparency的一种体现2333 楼主说唯一不满意的是 公司只有soup没有lunch... (大笑) 小哥认真的解释为什么没有lunch.... 我说我就开个玩笑你别当真23333 之后两位让我别走 还有人会来 楼主就对着窗外放空了一会。。-google 1point3acres
hr 凯特 hr太好看了。。楼主作为一个女生。。都沉醉了。。 又高又瘦又美。。天哪 必须8分不能再少了 很general的问题 说个一个project给她听 她不懂技术嘛楼主就随便吹了。。 . from: 1point3acres.com/bbs 然后就说你要多少compensation 。。楼主第一次没懂compensation啥意思。。词汇量太小别怪我>.< 确认一下是salary嘛~~ 我不知道多少钱啊。。 好像这个不是隐私吗大家都没说 我知道好像加州是10W?。。不知道纽约多少。。楼主很没底气的说 negotiable….>.< 之后就是还有啥公司的面试 什么的 然后就把我带到了另一个等manager 我觉得这又是我迷之悲剧的开始。。。。。。. from: 1point3acres.com/bbs
不知道哪国的大伯 但是没啥口音 . 1point 3acres 璁哄潧 之前好像是manager开会 我在房子里面等了20min.. 没事做我就开始研究那个terminal的键盘=。= 发现f1~f12都是缩写 然后楼主就用捉急的词汇量开始猜测这些词啥意思 然后还发现enter下面还有一个小小的go 好可爱>.< manager进来了 感觉整个人没啥力气 一进来就葛优瘫在我对面的椅子上 说sorry啊来晚了 我说没事啊我正在研究键盘 觉得挺有意思 然后他让我说说 我就说我猜的f1~f12是啥意思。。 竟然猜对了一半多哈哈 他说负责f9那个组 楼主开玩笑说 我按这个键你手机是不是该响了23333 那个go manager说也是有原因的 然后我没听懂。。好像是enter在变成standard之前有go所以保留了?。。忽略我。。应该没理解错?。。 然后楼主说terminal真的好厉害啊 我之前以为只能提供数据 后来看到竟然还可以显示货船在航海的实时位置!已经都连上地图功能了 叼得没朋友啊 他说他们现在就在做这个。。心里一惊。。 地图买的必应的?(如果听错了忽略我) 然后简单介绍了一下 这时候楼主已经感觉他快要睡着了。。说着说着就没啥声音了。。
然后让我介绍自己做过的project 楼主在说的时候 他眼睛已经快闭上了你敢信???。。。。??? 我的天我说的这么无聊?。。我自己还蛮high的。。觉得不行啊 然后赶紧补充了一个自己做过的android 游戏 我说这是第二个版本了 正在开发第三个版本 他说有啥新功能啊 然后我又描述 之后他眼睛又要闭上了你敢信????。。。。我心里这时候已经有点想哭了。。 . 涓€浜�-涓夊垎-鍦帮紝鐙鍙戝竷 然后最challenging 的问题 我说之前刚开始学android的时候 没有考虑内存 因为是一些小程序 没有server数据全在手机上 冗余数据没有删除 然后程序崩溃了 然后manager问 大概能缓存多少你知道吗? 我是android小白啊 T T 几百k到几个G是不是啊? 这个和手机的型号和硬件有关吧 T T 我也不知道啊 T T 楼主说我不清楚啊 T T 哎 然后又说了一个别的 感觉他也不是很满意。。。哎. 鐣欏鐢宠璁哄潧-涓€浜╀笁鍒嗗湴 . from: 1point3acres.com/bbs 还有一些杂七杂八的什么EE转cs啊 为啥来公司 什么的记不太清了 基本都是他发一个问 我说了一堆 然后他感觉不是在神游就是快闭眼的状态。。。最后随便演示了一下terminal就送我下楼了 感觉manager到最后整个人都要睡着了 我也不知道为啥这个manager不太喜欢我。。。 如果跪在这一轮我心里真的还是有点伤心的。。。。
一些建议: 1.bb的纸很小很窄 大家可以把纸横过来写这样空间够些 2.要写好几张纸 可以编个号. from: 1point3acres.com/bbs 3.bb家题目不难 但是会有超级多引申问题 而且这些问题 是根据你说出来的东西来的 所以不要乱说东西 特别是挖坑给自己。。 4.lunch box是冷的很难吃 早上多吃点
. 1point3acres.com/bbs 上次bb就挂的很迷茫 . 鐗涗汉浜戦泦,涓€浜╀笁鍒嗗湴 上星期去了一个小伙伴也是4轮挂的 楼主表示manager迷之不喜欢我我也真的没办法了 T T。。。 就像之前面snapchat 4轮bug free依旧悲剧一样。。有些事情就根本不用想通。。 不过还是跪求bb offer超级想去 T T
希望能帮助到要去的小伙伴 以及攒rp给接下来的fb!!~~ 祝大家一切顺利~.
第一轮国人GG和国人姐姐 1.给一个单词字典和一个没有分词过的句子,求一个合法的分词结果. 2.anagram 第二轮白人小哥和黑人小哥 3.给一个2D矩阵,代表地图.每个国家有自己的编号,在地图上是连续的块.给一个初始坐标,求该坐标所属国家,如果要建立一个围墙把这个国家围起来需要多长的围墙? 4.design一个Client-Server系统,用于处理股票信息,可以返回用户订阅的股票里更新频数最多的K只股票. 第三轮HR,英国口音的白人小哥-google 1point3acres 第四轮,Manager,非常和善,开心地谈笑风生然后做了一道题: 5.First Unique Character