由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 电话面试一个design问题,看看怎么做
相关主题
请教可以在线练习 map reduce 的地方?mapreduce 初级问题,请各位大牛指点
一道大数据题,求最优解。median of N^2 numbers across N machines
简单map reduce mean median, 傻逼回答电面被问到hadoop了
写一段如何准备large-scale system design的面试吧问一个大数据 处理问题
请教MapReduce怎么找median请问有朋友了解Continuuity这家公司么
F家onsite面经发现一个单独测试Mapper和reducer的方式
关于mahout的一些问题职位和 candidate 数量的关系
hadoop的combiner和partitioner的顺序是什么呢?map reduce word count
相关话题的讨论汇总
话题: page话题: date话题: customer话题: hash话题: 访问
进入JobHunting版参与讨论
1 (共1页)
z***e
发帖数: 5393
1
其实我觉得design问题是划分等级的重要一环,决定senior/junior的关键。
anyway,问题是这样:
某网站要记录用户访问数据,每次用户访问会生成三个数据:customer_id, page_id,
date.
现在要找访问过至少两个不同网页(page)并且至少在不同的date中访问的所有
customer,设计相关数据结构和算法,并实现(date可以简单处理成integer或者
whatever).
解决并不难,但是要用尽可能优化的数据结构,并分析memory cost和相关time
complexity.
j*****u
发帖数: 1133
2
难道不是一次map reduce吗?(in-memory hash同理)
3个int有什么可优化的?除了mapper先做local reduce

,

【在 z***e 的大作中提到】
: 其实我觉得design问题是划分等级的重要一环,决定senior/junior的关键。
: anyway,问题是这样:
: 某网站要记录用户访问数据,每次用户访问会生成三个数据:customer_id, page_id,
: date.
: 现在要找访问过至少两个不同网页(page)并且至少在不同的date中访问的所有
: customer,设计相关数据结构和算法,并实现(date可以简单处理成integer或者
: whatever).
: 解决并不难,但是要用尽可能优化的数据结构,并分析memory cost和相关time
: complexity.

x***y
发帖数: 633
3
How about, for each customer, building two structures(could be map, hash,
trie or B+ tree for large set of data), one for page and one for date.
Whenever a new record needs to be put in, check whether the page field is in
structure 1 and whether the date field is in struct 2. Only neither of them
exists, we will add the date field and page field to the corresponding
structure respectively.

,

【在 z***e 的大作中提到】
: 其实我觉得design问题是划分等级的重要一环,决定senior/junior的关键。
: anyway,问题是这样:
: 某网站要记录用户访问数据,每次用户访问会生成三个数据:customer_id, page_id,
: date.
: 现在要找访问过至少两个不同网页(page)并且至少在不同的date中访问的所有
: customer,设计相关数据结构和算法,并实现(date可以简单处理成integer或者
: whatever).
: 解决并不难,但是要用尽可能优化的数据结构,并分析memory cost和相关time
: complexity.

z***e
发帖数: 5393
4
1. map reduce不过是把大量数据hash后对每个hash set进行reduce,那么,你要对哪
个进行hash,之后又怎么reduce...
2. 这三个数据是相互关联的,你的local reduce又怎么做?你可以对每个customer的
数据并行处理,问题并不在于这点,而在于你怎么处理customer的数据并用合适的数据
结构存贮(比如,每个人访问的日期和该日期访问的page,你打算分开各存一个list/
hashtable,还是用日期做key,然后再存访问的pages?或者其他方式?每个方式有何
优缺点?)
3. 回到最初问题,原始数据你需要如何存储?用什么数据格式存储?如果只有1000个
customer,你也打算去map reduce?
呵呵,我不是map reduce专家,你可以说说吧。

【在 j*****u 的大作中提到】
: 难道不是一次map reduce吗?(in-memory hash同理)
: 3个int有什么可优化的?除了mapper先做local reduce
:
: ,

z***e
发帖数: 5393
5
嗯,我差不多就是这样做的,想知道有没有其他更有效的做法。
不过你这个还是有问题“ Only neither of them exists, we will add the date
field and page field to the corresponding structure respectively”,这个似乎
不对(如果我理解没错)。比如customer在day 1访问了page2,我们有了<1, 2>(分在
两个set里面),然后又在同一天day1访问了page 3,那么对记录<1,3>“neither of
them exists”就不成立因为day1已经记录了,但是实际上我们要把page 3也记录下来
,所以在记录的时候,我是对date/page分开处理,各自记录。

in
them

【在 x***y 的大作中提到】
: How about, for each customer, building two structures(could be map, hash,
: trie or B+ tree for large set of data), one for page and one for date.
: Whenever a new record needs to be put in, check whether the page field is in
: structure 1 and whether the date field is in struct 2. Only neither of them
: exists, we will add the date field and page field to the corresponding
: structure respectively.
:
: ,

g*********s
发帖数: 1782
6
what do u mean by "至少两个不同网页(page)并且至少在不同的date中访问"?
say, (p1, d1), (p2, d2) satisfies the condition iff p1 != p2 && d1 != d2?

,

【在 z***e 的大作中提到】
: 其实我觉得design问题是划分等级的重要一环,决定senior/junior的关键。
: anyway,问题是这样:
: 某网站要记录用户访问数据,每次用户访问会生成三个数据:customer_id, page_id,
: date.
: 现在要找访问过至少两个不同网页(page)并且至少在不同的date中访问的所有
: customer,设计相关数据结构和算法,并实现(date可以简单处理成integer或者
: whatever).
: 解决并不难,但是要用尽可能优化的数据结构,并分析memory cost和相关time
: complexity.

x***y
发帖数: 633
7
You're right. I think probably only 1 structure is needed for each customer.
It's like for each date, we only keep each page, visited in this date, once
(using hash or map or...) Then, if one date has at least two different
pages, and another date is not empty, then the customer qualifies; otherwise
, if all the unempty dates only have 1 page, the customer qualifies as long
as any two of dates have different pages.

【在 z***e 的大作中提到】
: 嗯,我差不多就是这样做的,想知道有没有其他更有效的做法。
: 不过你这个还是有问题“ Only neither of them exists, we will add the date
: field and page field to the corresponding structure respectively”,这个似乎
: 不对(如果我理解没错)。比如customer在day 1访问了page2,我们有了<1, 2>(分在
: 两个set里面),然后又在同一天day1访问了page 3,那么对记录<1,3>“neither of
: them exists”就不成立因为day1已经记录了,但是实际上我们要把page 3也记录下来
: ,所以在记录的时候,我是对date/page分开处理,各自记录。
:
: in
: them

z***e
发帖数: 5393
8
yes

【在 g*********s 的大作中提到】
: what do u mean by "至少两个不同网页(page)并且至少在不同的date中访问"?
: say, (p1, d1), (p2, d2) satisfies the condition iff p1 != p2 && d1 != d2?
:
: ,

j*****u
发帖数: 1133
9
俺也不是砖家
先回答3,怎么存储一般改变不了,log的format已经固定好了,通常就是txt file。如
果数据量小了可以in memory hash,方法等同map reduce
1, 2:
mapper:emit >,以customer_id为key hash
local reducer和global reducer 相同的code:
可以sort也可以hash,以date和page其中之一为key,比如date
Dictionary> dict;
while (reducing a customer)
{
dict[date].Add(page);
if (dict.Count > 1 && (any_page_set.Count > 1 || any_two_page_set[0]_are_
different)))
emit customer_id and terminate reducing;
}

【在 z***e 的大作中提到】
: 1. map reduce不过是把大量数据hash后对每个hash set进行reduce,那么,你要对哪
: 个进行hash,之后又怎么reduce...
: 2. 这三个数据是相互关联的,你的local reduce又怎么做?你可以对每个customer的
: 数据并行处理,问题并不在于这点,而在于你怎么处理customer的数据并用合适的数据
: 结构存贮(比如,每个人访问的日期和该日期访问的page,你打算分开各存一个list/
: hashtable,还是用日期做key,然后再存访问的pages?或者其他方式?每个方式有何
: 优缺点?)
: 3. 回到最初问题,原始数据你需要如何存储?用什么数据格式存储?如果只有1000个
: customer,你也打算去map reduce?
: 呵呵,我不是map reduce专家,你可以说说吧。

z***e
发帖数: 5393
10
这有点像我刚听到这个问题时的解法,但是浪费了memory.
Dictionary> dict ----如果一个用户在day 1 visit了page1,然后
day2又visit了page1,那么你在对day1和day2的两个set里面都要加入page1,这就是不
必要的。

【在 j*****u 的大作中提到】
: 俺也不是砖家
: 先回答3,怎么存储一般改变不了,log的format已经固定好了,通常就是txt file。如
: 果数据量小了可以in memory hash,方法等同map reduce
: 1, 2:
: mapper:emit >,以customer_id为key hash
: local reducer和global reducer 相同的code:
: 可以sort也可以hash,以date和page其中之一为key,比如date
: Dictionary> dict;
: while (reducing a customer)
: {

j*****u
发帖数: 1133
11
okay,这个optimization make sense,但问题是值不值得?
let's do the math,假设这个用户十年如一日,每天都只访问同一个page然后走人
假设该网站有1M个user,有1/10都是这类用户
假设我们起1k个reducer,不考虑local reducer
浪费了多少memory?10 * 365 * 4byte * 1M * 1/10 * 1/1000 = 1.5MB
这是hash-reduce,如果考虑local reduce或者用merge-reduce的话memory就少更多了
为了这个写tricky的code我觉得不值得,cluster里再差的机器也得有4GB的memory吧。。

【在 z***e 的大作中提到】
: 这有点像我刚听到这个问题时的解法,但是浪费了memory.
: Dictionary> dict ----如果一个用户在day 1 visit了page1,然后
: day2又visit了page1,那么你在对day1和day2的两个set里面都要加入page1,这就是不
: 必要的。

w**a
发帖数: 4743
12
这道题扩展一下就是两个以上DC,10亿个以上用户。。>100个DB server。hoho
s********k
发帖数: 6180
13
能否每个custom hash 一个value,这个value有两个指针和两个int,分别是date和
page的链表头,以及date和page的count。对于任何新的访问,先hash到这个custom的
value,如果有新的date或者page,那么就insert,更新对应count,否则discard。最
后只需要看两个count都大于1的custom就可以了。不过如果某个链表很长,比如一个
custom经常访问上百网页,这个效率不是很高,是否可以考虑再 hash一次?

【在 z***e 的大作中提到】
: 嗯,我差不多就是这样做的,想知道有没有其他更有效的做法。
: 不过你这个还是有问题“ Only neither of them exists, we will add the date
: field and page field to the corresponding structure respectively”,这个似乎
: 不对(如果我理解没错)。比如customer在day 1访问了page2,我们有了<1, 2>(分在
: 两个set里面),然后又在同一天day1访问了page 3,那么对记录<1,3>“neither of
: them exists”就不成立因为day1已经记录了,但是实际上我们要把page 3也记录下来
: ,所以在记录的时候,我是对date/page分开处理,各自记录。
:
: in
: them

s********k
发帖数: 6180
14
补充了一下,觉得设计还是要针对具体问题,如果是1个million的用户,每个每天就访
问几个网页,访问的天数也不多,这个方法还是比较有效,但是如果100用户,但是每
个用户每天访问上千网页,可能数据结构就要重新设计了。设计之前应该先统计下访问
习惯

【在 s********k 的大作中提到】
: 能否每个custom hash 一个value,这个value有两个指针和两个int,分别是date和
: page的链表头,以及date和page的count。对于任何新的访问,先hash到这个custom的
: value,如果有新的date或者page,那么就insert,更新对应count,否则discard。最
: 后只需要看两个count都大于1的custom就可以了。不过如果某个链表很长,比如一个
: custom经常访问上百网页,这个效率不是很高,是否可以考虑再 hash一次?

1 (共1页)
进入JobHunting版参与讨论
相关主题
map reduce word count请教MapReduce怎么找median
MapReduce的面试题F家onsite面经
Apple 数据科学家面经关于mahout的一些问题
个人生涯中最独特的电话面试hadoop的combiner和partitioner的顺序是什么呢?
请教可以在线练习 map reduce 的地方?mapreduce 初级问题,请各位大牛指点
一道大数据题,求最优解。median of N^2 numbers across N machines
简单map reduce mean median, 傻逼回答电面被问到hadoop了
写一段如何准备large-scale system design的面试吧问一个大数据 处理问题
相关话题的讨论汇总
话题: page话题: date话题: customer话题: hash话题: 访问