avatar
Data scientist--Zillow电面# DataSciences - 数据科学
q*l
1
经过4个多月的再平衡和心理修复期,股市或将维持震荡向上格局,债市在宽松资
金面下仍然长期看牛,短期或有震荡风险。在财政政策发力下,地方基建项目将成银行
信贷增长新动力,未来资金将更多通过股市和债市进入企业,以股市和债市为主的资本
市场将迎来春天。
6月以来的沪深股市暴跌打破了原有的金融体系格局和资金链条,股市资金回流银
行体系导致债市暴涨。经历了股市的大起大落和债市的一骑绝尘,经过了4个多月的再
平衡和心理修复期,目前正在形成新的弱平衡格局:股市去杠杆结束,低位企稳震荡上
行;债市发行节奏加快,特别是企业债发行量大增,债市利率大幅下降;财政政策发力
,银行资产荒局面将逐步扭转,银行对基建的信贷支持力度加大。
股市上半年的暴涨由杠杆资金推动,暴跌也是去杠杆的过程。经历了5178点到2850
点的巨幅去杠杆过程,目前市场两融余额为1.1万亿,仅为高点时期的一半,占沪深上
市公司流通市值的3.2%,考虑到场外的高杠杆配资基本在股灾中被强平或退出,场外的
去杠杆程度要高于“两融”。因此,整体杠杆水平虽然比国际可比水平略高,但考虑到
我国居民对资本市场的配置占比较小,这种杠杆水平也属于相对可接受的程度。此外,
证监会针对“两融”细则出台新规,将融资保证金比例由原规定不得低于50%调高至不
得低于100%,旨在控制融资的杠杆率过高。可以预见,经历了惨痛的杠杆牛市巨震行情
后,监管层在控制场内和场外杠杆方面会更加审慎,过山车式的暴涨暴跌难再。同时,
证金公司因为救市持有股票市值1.3万亿,加上汇金公司合计持有市值达到2.62万亿,
他们可以发挥类似于国外稳定基金的作用,在市场过热时抛售股票,市场过度恐慌下跌
时买入股票,降低股市波动性。因此,未来股市将更有可能在一个区间内震荡,基于在
前期下跌幅度过大,上行空间理应大于下行空间。
随着IPO重启,资金将重新流入股市,这对中国经济长期而言是有利的,有利于资
金直接进入实体企业,降低企业融资成本。当然,IPO的制度化发行有赖于相对成熟、
稳定的资本市场,这与监管对杠杆的控制是一脉相承的。
avatar
e*5
2
前几天刚面过Zillow data scientist,校友内推拿到面试。 动作很快,简历刚投一天
technical recruiter就联系,过了两天第一个电面,就是了解一些背景,问都用什么
编程,聊了大概20分钟。 我只用C++, matlab, R.但他们似乎对懂python的有兴趣,我
说正开始学。 当天就发了一道题过来,让设计算法,选择自己喜欢的语言实现。 我用
C++写,第二天发了答案,很快就给回复,说继续下一轮,跟hiring manager聊。 又是
聊背景,问dissertation. 不过发现大多时候是我在说,hiring manager只是问了几个
简单问题。我也不知道我的回答她是否满意。本来recruiter说可能有一道coding,但
是没有。
到现在还没收到回复,反正是第一个面试,我觉得更大可能性是没戏了。对了,发现内
推拿面试的机会大很多呀。海投了20份,基本没什么消息呀,偶尔有两个是直接拒,面
试都没!
Anyway, 上题目!觉得不难,我用C++实现。
Suppose there is a website tracking user activities to prevent robotic
attack on the Internet. Here are field definition and example:
Anonymous User ID TimeStamp Activity Count
123 9:45am 10
234 9:46am 12
234 9:50am 20
456 9:53am 100
123 9:55am 33
456 9:56am 312
123 10:03am 110
123 10:16am 312
234 10:20am 201
456 10:23am 180
123 10:25am 393
456 10:27am 312
1. Please design an algorithm to identify user IDs that have more than 500
activities within any given 10 minutes. Explain why you chose your
algorithms and how you would like to implement it on a very large data set.
2. Please code the algorithm taking the attached data as input with your
choice of programming language. Please send the code with comments and
output.
avatar
T*u
3
这个是标准的map reduce吗?
avatar
e*5
4
我具体实现只是针对fit in memeory的数据。 对大规模数据的处理就是再额外解释了
。我没具体实现过map reduce,只是了解一些相关知识。
avatar
a*k
5
For this task, it is best to design a hive database to store those
structured data. Hive is designed based on MapReduce and all hive queries
are implemented using MapReduce. After that, we can just write SQL/Hive
queries to extract the relevant information. For this question, we can use a
self-join SQL query:
SELECT distinct a.id FROM (SELECT a.id, a.time FROM table a JOIN table b ON
a.id=
b.id WHERE TIMEDIFF(a.time, b.time)<=10 AND TIMEDIFF(a.time, b.time)>=0
GROUP BY a.id, a.time HAVING SUM(b.count)>500);
In this way, it is easier to maintain and update the data. We also make the
data processing and analysis automatic and easy.
Of course, if we need to rush for some codes to solve the problem where the
data is only stored in excel or txt file, we could just follow how SQL (for
small dataset) and Hive (for big dataset) implement the above query.
avatar
H*H
6
这个似乎只考虑了join两个的情况,要是单个timestamp就超过了500 activities,就不
用join了。
还有三个timestamp在10分钟内出现,就应该sum三个activities之和;依此类推,还要
考虑更多的timestamp都在10分钟内出现的情况,就应该sum更多activities之和。

a
ON
the

【在 a****k 的大作中提到】
: For this task, it is best to design a hive database to store those
: structured data. Hive is designed based on MapReduce and all hive queries
: are implemented using MapReduce. After that, we can just write SQL/Hive
: queries to extract the relevant information. For this question, we can use a
: self-join SQL query:
: SELECT distinct a.id FROM (SELECT a.id, a.time FROM table a JOIN table b ON
: a.id=
: b.id WHERE TIMEDIFF(a.time, b.time)<=10 AND TIMEDIFF(a.time, b.time)>=0
: GROUP BY a.id, a.time HAVING SUM(b.count)>500);
: In this way, it is easier to maintain and update the data. We also make the

avatar
a*k
7
GROUP BY a.id, a.time will include all relevant timestamps (either 1 (itself
), 2 or more) for each event.

【在 H*H 的大作中提到】
: 这个似乎只考虑了join两个的情况,要是单个timestamp就超过了500 activities,就不
: 用join了。
: 还有三个timestamp在10分钟内出现,就应该sum三个activities之和;依此类推,还要
: 考虑更多的timestamp都在10分钟内出现的情况,就应该sum更多activities之和。
:
: a
: ON
: the

avatar
H*H
8
Sorry, I missed your code.
It looks that the trick is to group by a, while count with b.

itself

【在 a****k 的大作中提到】
: GROUP BY a.id, a.time will include all relevant timestamps (either 1 (itself
: ), 2 or more) for each event.

avatar
B*i
9
吐槽一下, 一个简单的coding 题就被 data scientist 们玩成这样了? map-r ?
hive? you must be kidding me.
avatar
f*y
10
请问楼主如何用C++实现的。我对CS不了解,如果是数据库的话,这个就是一个self
join的hive code。多谢。

【在 e*********5 的大作中提到】
: 前几天刚面过Zillow data scientist,校友内推拿到面试。 动作很快,简历刚投一天
: technical recruiter就联系,过了两天第一个电面,就是了解一些背景,问都用什么
: 编程,聊了大概20分钟。 我只用C++, matlab, R.但他们似乎对懂python的有兴趣,我
: 说正开始学。 当天就发了一道题过来,让设计算法,选择自己喜欢的语言实现。 我用
: C++写,第二天发了答案,很快就给回复,说继续下一轮,跟hiring manager聊。 又是
: 聊背景,问dissertation. 不过发现大多时候是我在说,hiring manager只是问了几个
: 简单问题。我也不知道我的回答她是否满意。本来recruiter说可能有一道coding,但
: 是没有。
: 到现在还没收到回复,反正是第一个面试,我觉得更大可能性是没戏了。对了,发现内
: 推拿面试的机会大很多呀。海投了20份,基本没什么消息呀,偶尔有两个是直接拒,面

avatar
l*o
11
#include
#include
#include
#include
using namespace std;
class Element
{
public:
int time;
int count;
Element(int t, int c)
{
time = t;
count = c;
}
};
class IPRecord
{
public:
queue q;
int total_attack;
void add_to_queue(int t, int c)
{
Element ele = Element(t, c);
q.push(ele);
total_attack += c;
}
void normalize_queue()
{
while (q.back().time - q.front().time > 10)
{
total_attack -= q.front().count;
q.pop();
}
}
};
int main()
{
map dict;
ifstream infile("C:\mfg\thefile.txt");
int ip;
int time;
int count;
while (infile >> ip >> time >> count)
{
map::iterator itr = dict.find(ip);
if (itr != dict.end())
{
itr->second.add_to_queue(time, count);
itr->second.normalize_queue();
if (itr->second.total_attack > 500)
{
cout << "find ip " << ip;
cout << " total attack " << itr->second.total_attack << endl;
}
}
else
{
IPRecord rec = IPRecord();
rec.add_to_queue(time, count);
dict.insert(pair(ip, rec));
if (rec.total_attack > 500)
{
cout << "find ip " << ip;
cout << " total attack " << itr->second.total_attack << endl;
}
}
}
return 0;
}
output:
find ip 123 total attack 705

【在 f*****y 的大作中提到】
: 请问楼主如何用C++实现的。我对CS不了解,如果是数据库的话,这个就是一个self
: join的hive code。多谢。

avatar
e*5
12
我不懂Hive。对我来说就是一个算法题。
用一个队列queqe保存最近10分钟的的记录,一个map保存最近十分钟内的id跟activity
count 。依次扫描记录。把比当前记录早于10分钟的记录从队列中删除,把当前记录
加入队列,更新map中的计数,如果计数>500,那就是一个潜在attacker。
avatar
f*3
13
Why not implement a map reduce job where mapper is to aggregate on customer
id, and the aggregation function in the reducer is to loop through a day
with ten minute moving window, signal 1 if the sum of counts greater than
500 and break, else return 0.

activity

【在 e*********5 的大作中提到】
: 我不懂Hive。对我来说就是一个算法题。
: 用一个队列queqe保存最近10分钟的的记录,一个map保存最近十分钟内的id跟activity
: count 。依次扫描记录。把比当前记录早于10分钟的记录从队列中删除,把当前记录
: 加入队列,更新map中的计数,如果计数>500,那就是一个潜在attacker。

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。