由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 前几天的G家面经
相关主题
flextrade面经一个查找算法题
问一道T家的面试题: 分布式随机数生成器c++ question
问两道onsite题目share一个大公司的onsite interview question
G onsite面经兼求内推请问一道google面试题
谁能科普Time Series Daemon (TSD)系统设计A家面经, offer, 请教Negotiation
问一个面试问题一道G家题
也问一个median的问题前几天那个关于正负数stable排序的问题的帖子
问个简单的金融公司的coding面试题A家面经
相关话题的讨论汇总
话题: worker话题: val话题: timestamp话题: serveropts话题: sequence
进入JobHunting版参与讨论
1 (共1页)
D*****r
发帖数: 133
1
有硬件背景, 和一些系统底层开发的经历, 可能和一般的纯软件面试有点不太一样。
Recruiter说要找背景相近的人面试。没有碰到印度人面试官
1。 面试官对我以前读书时的一个课题比较感兴趣,聊了一会儿。确认我要面试软件职
位后,出了一道题。有一个3维矩阵,从原点开始遍历所有的点。随便怎么走都可以。
2。 算数据流最近N个数的平均值。 接着分别讨论整型溢出的情况和浮点数精度丢失的
问题。
3。 实现一个内核的延时任务处理功能。就是可以注册将来要处理的一些任务,时间中
断发生时,执行那些到时的任务。实现任务注册函数和时间中断处理函数。
4。 A) 写函数实现32位数的位异或操作 (算奇偶校验位)
B) 模拟普通电梯的运行,实现一个电梯控制器
5。 有一个分布式系统,提供一个返回64位数的服务。有两个要求: 1。所返回的数是
唯一的。 2。所返回的是一个近似递增序列。如何实现使得要求1必须满足,要求2不严
格要求,但越接近越好。同时对用户的响应延迟要越短越好。
c******n
发帖数: 4965
2
最后那个 uid 生成器的题常见, 楼主怎么答的?

【在 D*****r 的大作中提到】
: 有硬件背景, 和一些系统底层开发的经历, 可能和一般的纯软件面试有点不太一样。
: Recruiter说要找背景相近的人面试。没有碰到印度人面试官
: 1。 面试官对我以前读书时的一个课题比较感兴趣,聊了一会儿。确认我要面试软件职
: 位后,出了一道题。有一个3维矩阵,从原点开始遍历所有的点。随便怎么走都可以。
: 2。 算数据流最近N个数的平均值。 接着分别讨论整型溢出的情况和浮点数精度丢失的
: 问题。
: 3。 实现一个内核的延时任务处理功能。就是可以注册将来要处理的一些任务,时间中
: 断发生时,执行那些到时的任务。实现任务注册函数和时间中断处理函数。
: 4。 A) 写函数实现32位数的位异或操作 (算奇偶校验位)
: B) 模拟普通电梯的运行,实现一个电梯控制器

h*********n
发帖数: 11319
3
twtr snowflake:
timestamp block + unique machine id + local seq id

【在 c******n 的大作中提到】
: 最后那个 uid 生成器的题常见, 楼主怎么答的?
c******n
发帖数: 4965
4
wow, thanks!

【在 h*********n 的大作中提到】
: twtr snowflake:
: timestamp block + unique machine id + local seq id

c******n
发帖数: 4965
5
看了twitter 的impl, 我对scala 不是很熟,但看起来有问题, 有可能duplicate.
它是一个thrift server, 下面的代码里可以个多个threads: serverOpts.
workerThreads
但worker 里面的sequence 都是独立的。
这样一个server上不同的thread 完全可能generate duplicate ID
val worker = new IdWorker(workerId, datacenterId, reporter)
val processor = new Snowflake.Processor(worker)
val transport = new TNonblockingServerSocket(serverPort)
val serverOpts = new THsHaServer.Options
serverOpts.workerThreads = thriftServerThreads
val server = new THsHaServer(processor, transport, serverOpts)
inside the worker:
sequence = (sequence + 1) & sequenceMask

【在 h*********n 的大作中提到】
: twtr snowflake:
: timestamp block + unique machine id + local seq id

h*********n
发帖数: 11319
6
这样的话,只能每个thread分别申请unique thread id了。

【在 c******n 的大作中提到】
: 看了twitter 的impl, 我对scala 不是很熟,但看起来有问题, 有可能duplicate.
: 它是一个thrift server, 下面的代码里可以个多个threads: serverOpts.
: workerThreads
: 但worker 里面的sequence 都是独立的。
: 这样一个server上不同的thread 完全可能generate duplicate ID
: val worker = new IdWorker(workerId, datacenterId, reporter)
: val processor = new Snowflake.Processor(worker)
: val transport = new TNonblockingServerSocket(serverPort)
: val serverOpts = new THsHaServer.Options
: serverOpts.workerThreads = thriftServerThreads

n******n
发帖数: 12088
7
这题用一个数据库不就行了?

【在 h*********n 的大作中提到】
: 这样的话,只能每个thread分别申请unique thread id了。
c******n
发帖数: 4965
8
那立马就要被毙掉。要 scalable

【在 n******n 的大作中提到】
: 这题用一个数据库不就行了?
k**l
发帖数: 2966
9
同一个机器上thread沟通应该不难吧,
或者每个worker 最开始时向同总服务器要一个 worker id

【在 c******n 的大作中提到】
: 看了twitter 的impl, 我对scala 不是很熟,但看起来有问题, 有可能duplicate.
: 它是一个thrift server, 下面的代码里可以个多个threads: serverOpts.
: workerThreads
: 但worker 里面的sequence 都是独立的。
: 这样一个server上不同的thread 完全可能generate duplicate ID
: val worker = new IdWorker(workerId, datacenterId, reporter)
: val processor = new Snowflake.Processor(worker)
: val transport = new TNonblockingServerSocket(serverPort)
: val serverOpts = new THsHaServer.Options
: serverOpts.workerThreads = thriftServerThreads

k**l
发帖数: 2966
10
电梯问题想想挺好玩的,
还可以分 single car 和 multi-car system

【在 D*****r 的大作中提到】
: 有硬件背景, 和一些系统底层开发的经历, 可能和一般的纯软件面试有点不太一样。
: Recruiter说要找背景相近的人面试。没有碰到印度人面试官
: 1。 面试官对我以前读书时的一个课题比较感兴趣,聊了一会儿。确认我要面试软件职
: 位后,出了一道题。有一个3维矩阵,从原点开始遍历所有的点。随便怎么走都可以。
: 2。 算数据流最近N个数的平均值。 接着分别讨论整型溢出的情况和浮点数精度丢失的
: 问题。
: 3。 实现一个内核的延时任务处理功能。就是可以注册将来要处理的一些任务,时间中
: 断发生时,执行那些到时的任务。实现任务注册函数和时间中断处理函数。
: 4。 A) 写函数实现32位数的位异或操作 (算奇偶校验位)
: B) 模拟普通电梯的运行,实现一个电梯控制器

相关主题
问一个面试问题一个查找算法题
也问一个median的问题c++ question
问个简单的金融公司的coding面试题share一个大公司的onsite interview question
进入JobHunting版参与讨论
m*****n
发帖数: 204
11
Huh? Try design a scalable solution based on 数据库.

【在 c******n 的大作中提到】
: 那立马就要被毙掉。要 scalable
m*****n
发帖数: 204
12
Depends on if there is requirement on value range.
Also depens on how "近似递增" the returns must be.

【在 h*********n 的大作中提到】
: twtr snowflake:
: timestamp block + unique machine id + local seq id

n******n
发帖数: 12088
13
只提供id服务的数据库还不够?多少qps?

【在 c******n 的大作中提到】
: 那立马就要被毙掉。要 scalable
z*******o
发帖数: 4773
14
不用数据库persistent怎么解决?突然down机呢?

【在 c******n 的大作中提到】
: 那立马就要被毙掉。要 scalable
c******n
发帖数: 4965
15
good question, the snowflake solution is based on time, but if u crash and
come back immediately , potentially we could run into duplicate. so u might
have to wait a little bit after booting up

【在 z*******o 的大作中提到】
: 不用数据库persistent怎么解决?突然down机呢?
k**l
发帖数: 2966
16
第一部分是timestamp, down 机怕啥?
不过可以在dispatcher上跑一个DB, 只负责在worker startup时给分配一个unique
worker id以后就不管
这样的问题和timestamp 差不多, worker也不能constantly crash and start, worker
id 就溢出了

【在 z*******o 的大作中提到】
: 不用数据库persistent怎么解决?突然down机呢?
z*******o
发帖数: 4773
17
嗯, 而且题目没要求persistent

and
might

【在 c******n 的大作中提到】
: good question, the snowflake solution is based on time, but if u crash and
: come back immediately , potentially we could run into duplicate. so u might
: have to wait a little bit after booting up

n******n
发帖数: 12088
18
不是64位?

worker

【在 k**l 的大作中提到】
: 第一部分是timestamp, down 机怕啥?
: 不过可以在dispatcher上跑一个DB, 只负责在worker startup时给分配一个unique
: worker id以后就不管
: 这样的问题和timestamp 差不多, worker也不能constantly crash and start, worker
: id 就溢出了

k**l
发帖数: 2966
19
总共64位, worker id / machine id 用一点,worker thread 里面的 incrementor/
counter 用一些,如果有timestamp还要用去一大半

【在 n******n 的大作中提到】
: 不是64位?
:
: worker

c******n
发帖数: 4965
20
你这样不如时间 prefix 的办法, 如果 worker 不死, private section 很快就溢出
, 你还得回来再要一个 prefix

worker

【在 k**l 的大作中提到】
: 第一部分是timestamp, down 机怕啥?
: 不过可以在dispatcher上跑一个DB, 只负责在worker startup时给分配一个unique
: worker id以后就不管
: 这样的问题和timestamp 差不多, worker也不能constantly crash and start, worker
: id 就溢出了

k**l
发帖数: 2966
21
可是我要是省了 timestamp 可以省出至少32位,比如 private section 48位,
timestamp 有 waste bits
这个方法理论上可以没有

【在 c******n 的大作中提到】
: 你这样不如时间 prefix 的办法, 如果 worker 不死, private section 很快就溢出
: , 你还得回来再要一个 prefix
:
: worker

c******n
发帖数: 4965
22
你这个办法从 id sequence increase 角度跟时间区别不大, 但是为了 handle
reboot, 你必须每个 sequence bump 或者隔100个 persist to disk. 如果靠时钟的自
然属性, 起来后先停一会儿 就可以了

【在 k**l 的大作中提到】
: 可是我要是省了 timestamp 可以省出至少32位,比如 private section 48位,
: timestamp 有 waste bits
: 这个方法理论上可以没有

1 (共1页)
进入JobHunting版参与讨论
相关主题
A家面经谁能科普Time Series Daemon (TSD)系统设计
P家面经问一个面试问题
P家面经也问一个median的问题
G家面经问个简单的金融公司的coding面试题
flextrade面经一个查找算法题
问一道T家的面试题: 分布式随机数生成器c++ question
问两道onsite题目share一个大公司的onsite interview question
G onsite面经兼求内推请问一道google面试题
相关话题的讨论汇总
话题: worker话题: val话题: timestamp话题: serveropts话题: sequence