2019年至2021年期间,我在上海eBay工作,周围不少同事都是从摩根斯坦利过来的,总体上看很优秀。加上在极客时间的课程讲师里,就有原来从摩根斯坦利出来的,于是对这个公司产生了浓厚的兴趣,再加上当时我觉得和我金融老本行比较对口,于是找各种渠道内推。
(不过当时心里也有个疑问,他们为什么离开摩根斯坦利来到了eBay?)
机会很快来了,对方HR来电简单了解了一下,我获得了面试机会。
初面面试官是一位姓Liang的女生 微笑很具备感染力
她先简单介绍了一下自己,提到了几个关键词:处理 marketing data; daily job;收益曲线 yield curve
面试风格比较朴实,没有java八股文,也没有coding
eBay 和 网易 主要
连连和工行她几乎没有问
我讲了分布式和银行集中式不同
她也总结到,没有单独的技术谁好谁坏,首先需求促生了技术,有了好的技术有能实现以前所想不到的
我介绍了背景,和qm比优劣点,以及在eBay的mep readout项目中的应用
她问,怎么处理和团队同事,bu的意见不同
我回答看情况,举例,bu对的,我对的
和团队同事主要在初期,我新去项目还不熟悉,同事指出问题我很乐意;同事熟悉后,也要能为别的同事贡献意见
开发和pm,哪个更喜欢:我回答coding is my passion
;pm也有研究,那是为了更好和其沟通
问她:工作中挑战
业务方面,她在考CFA(很上进啊)
技术方面,吸收互联网的技术,开源的,很挑战,老板要求高
通过交流,我心中暗暗总结出来了鄙视链:
工行人才凋敝,被阿里吸血
金融业人才凋敝,被互联网人才吸血
外资人才凋敝,被内资互联网人才吸血
(注:以上是2021的情况,然后2022的情况又不同了)
姓Cong,年纪较大。一上来就问,如果面试官是我,我怎么面试候选人, 我回答:3个sector,一是项目,二是java基础,三是coding部分
还让我提供了5个java问题:
List list = new ArrayList<>();
for (int i=0; i{
System.out.println("");
});
//lock
ReentrantLock lock = new ReentrantLock();
double maxPrice = 0;
List prices = new ArrayList<>();
List srcs = new ArrayList<>();
List ts = new ArrayList<>();
for (int i=0; i<10; i++) {
ts.add(new Thread((src) -> {
double ret = src.getPrice();
try {
lock.lock();
prices.add(ret);
} catch (InterruptedException e) {
} finally {
if (lock.isLocked()) {
lock.unlock();
}
}
}));
}
//run
for (Thread t : fs) {
t.run();
t.join();
}
//compare and set max
if (prices.size() >= 10) {
for (Double p : prices) {
if (p > maxPrice) maxPrice = p;
}
}
System.out.println(maxPrice);
问他, 他回答目前在做并发的事情,他让我coding的就是项目写照,怎么低延时是要好好考虑的
自我介绍,英文名Jerry,先问我项目经历,我刚开始说的很多,发现时间紧,就赶紧结束
然后赶紧开始做题目:
新语言,这个expression作用是distinct
其中find最耗费时间,我开始写On平方的算法,
在提示下,对y进行map,简化成On,空间换时间
x = 0 1 2 itself
x = a b c
0 1 2 = 0 1 2 so it is 1 1 1 itself
if x is aaa return 000; so 0 1 2 => 1 0 0 return a
equals O(n)
count O(n)
interval On
find O(n sqart)
compress O(n)
class Solution {
/* @param: y : place to find ; x : x length = result length ri means the pos in y that xi first ocurr
**/
public List find(List y, List x) {
//check param 1. null 2. length
if (y == null || x == null) return null;
//find ocurr
List ret = new ArrayList<>(x.size());
Arrays.fill(ret, -1);
//optimize: hashmap to imporve
Map map = new HashMap<>();
//O(n) for all senario : pre-treat y to map
for (int i=0; i
面试官介绍自己姓Zhang,然后开始系统设计面试,一旦这个层级,设计的,用英语还是比较难表达的,比编码难,编码毕竟代码是一样的
如下,设计一个股票交易系统:
workable
core function: buy & sell stocks
list stocks
user managerment: user register & unregister
account managment: balance of user, deposit fund, withdraw fund
buy stocks
sell stocks
matching engine
list stocks
source of price data
input of user (buying price he set up)
call matching engine
validation
source of price data
set up sell price
matching
user info:
account info(stock balance, money balance):
order info(atomic):
id :
type:
userId:
stock code:
amount (stock):
currencyType: RMB
currencyAmount:
status:
execution info:
simple match, same price
map to store each stock’s orders; list to orders
//we got all the active orders
List<Order> list = this.getAllActiveOrders();
Map<StockCode, List<Order>> map = new ArrayList<>();
for (Order order : list) {
if (map.containsKey(order.code)) {
map.get(order.code).add(order);
} else {
map.put(order.code, Lists.of(order))
}
}
//match
Order buyOrder = getCurrentBuyOrder();
StockCode code = buyOrder.code;
if (map.containsKey(code)) {
List<Order> allList = map.get(code);
for (Order aOrder : allList) {
if (aOrder.type == "SELL" && aOrder.price == buyOrder.price) {
//transactional atomic
Account a = this.getAccountById(buyOrder.userId);
Account b = this.getAccountById(aOrder.userId);
int min = Math.min(buyOrder.amount, aOrder.amount);
a.stockAmount += min;
b.stockAmount -= min;
a.moneyAmount -= min * buyOrder.price; //precheck enough money
b.moneyAmount += min * buyOrder.price;;
}
}
}
设计讨论之后,他对我从业经历非常感兴趣,特别是当初为什么从体制内的工行出来,我答复:
面试后,摩根斯坦利hr很快来电话,二面3轮面试都通过了。来了解了我在eBay的薪酬。也介绍了下摩根斯坦利的薪酬,他们没有股票,也没有13薪和年终,只有12薪(和渣打的有点像)。公积金之类都是顶格交的,然后有个saving plan,拿出8%的工资,免税,到离职时一次性拿。所以是按总包算,大概可以给到50-60w(2021年当时情况,在金融业里同岗位横向比还不错的)。如果我同意继续,接下来可能还有一轮到两轮面试(至多不超过2轮,应该是manager的面试了)。
后来我去新加坡Shopee了,没有继续。