【父母B签】写一个同样适合爸妈看的签证攻略

一亩三分地论坛

 找回密码
 Sign Up 注册获取更多干货
E轮2.5亿美元融资
K12教育独角兽一起作业
北京-诚聘人工智能/教育/大数据岗
码农求职神器Triplebyte:
不用海投
内推多家公司面试
坐标湾区
Games Startup
招聘游戏开发工程师
游戏初创公司招聘工程师、UIUX Designer和游戏策划
查看: 2628|回复: 21
收起左侧

Apple on-site面试

[复制链接] |试试Instant~ |关注本帖
我的人缘0
james9102 发表于 2017-12-6 09:02:28 | 显示全部楼层 |阅读模式
本楼: 【顶】   0% (0)
 
 
0% (0)   【踩】
全局: 顶  100% (11)
 
 
0% (0)  踩

2017(10-12月) 码农类General 博士 全职@Apple - 校园招聘会 - Onsite  | Fail | fresh grad应届毕业生

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看,没有帐号?Sign Up 注册获取更多干货

x
Apple on-site面试,主要过程是先问项目经历,然后面试官问一些奇奇怪怪的题目...这里是其中印象最深的几道题目:

1  推导Convolutional Neural Network以及BackwardPropagation
2. 给定一个32-bit integer,实现打印其binary形式。要求从左向右扫描,只扫一遍。
void print_binary( int num )
3. linkedlistinsert一个node,要求thread-safe

刚收到邮件,题主跪了...求大米!求安慰!
. 一亩-三分-地,独家发布

评分

参与人数 1大米 +1 收起 理由
hychin + 1 给你搞个大米安慰一下吧

查看全部评分


上一篇:BB电话+onsite面经
下一篇:Apple Siri方言组Contractor(一年)
我的人缘0
chuck1212 发表于 2017-12-6 09:29:54 | 显示全部楼层
本楼: 【顶】   100% (1)
 
 
0% (0)   【踩】
全局: 顶  98% (67)
 
 
1% (1)  踩
LZ面的是哪个组啊?看起来像machine learning engineer?
回复

使用道具 举报

我的人缘0
 楼主| james9102 发表于 2017-12-6 09:48:05 | 显示全部楼层
本楼: 【顶】   0% (0)
 
 
0% (0)   【踩】
全局: 顶  100% (11)
 
 
0% (0)  踩
GPU Software team
回复

使用道具 举报

我的人缘0
say543 发表于 2017-12-6 16:19:57 | 显示全部楼层
本楼: 【顶】   0% (0)
 
 
0% (0)   【踩】
全局: 顶  85% (34)
 
 
15% (6)  踩
neural network 是 要白板推倒backwardpropagation 吗...... 要thread safe的话 是要insert 到list 任何位置?
回复

使用道具 举报

我的人缘0
 楼主| james9102 发表于 2017-12-7 00:23:59 | 显示全部楼层
本楼: 【顶】   0% (0)
 
 
0% (0)   【踩】
全局: 顶  100% (11)
 
 
0% (0)  踩
say543 发表于 2017-12-6 16:19
neural network 是 要白板推倒backwardpropagation 吗...... 要thread safe的话 是要insert 到list 任何位 ...

1. 是白板推导,但是可以用一个非常简单的example来demo。
3. 是insert到任何位置。但这个不是重点,你可以就实现一个
void insert( ListNode* cur, ListNode* new_node ) 这样的routine。重点是如何保证多线程insert仍然是safe的

21.000+ students read the Road to learn React. The course weaves all the opinionated roadmaps into one roadmap to master React. It gives you all the fundamentals in React. You will build a Hacker News App along the way.

回复

使用道具 举报

我的人缘0
hychin 发表于 2017-12-7 09:46:55 | 显示全部楼层
本楼: 【顶】   0% (0)
 
 
0% (0)   【踩】
全局: 顶  81% (242)
 
 
18% (54)  踩
james9102 发表于 2017-12-7 00:23
1. 是白板推导,但是可以用一个非常简单的example来demo。. 一亩-三分-地,独家发布
3. 是insert到任何位置。但这个不是重点,你 ...

直接吧整个list都锁起来在操作不行么
回复

使用道具 举报

我的人缘0
 楼主| james9102 发表于 2017-12-7 09:51:28 | 显示全部楼层
本楼: 【顶】   0% (0)
 
 
0% (0)   【踩】
全局: 顶  100% (11)
 
 
0% (0)  踩
hychin 发表于 2017-12-7 09:46
直接吧整个list都锁起来在操作不行么

我就这么答的,面试官说这样不efficient...
回复

使用道具 举报

我的人缘0
hychin 发表于 2017-12-7 10:00:46 | 显示全部楼层
本楼: 【顶】   0% (0)
 
 
0% (0)   【踩】
全局: 顶  81% (242)
 
 
18% (54)  踩
james9102 发表于 2017-12-7 09:51
我就这么答的,面试官说这样不efficient...

他想每个node都弄个锁么?这个东西都是trade off,每个都加个锁也不现实

With React+D3v4 you'll learn the basics of building fast data visualization components in about an hour.

回复

使用道具 举报

我的人缘0
 楼主| james9102 发表于 2017-12-7 10:12:52 | 显示全部楼层
本楼: 【顶】   0% (0)
 
 
0% (0)   【踩】
全局: 顶  100% (11)
 
 
0% (0)  踩
hychin 发表于 2017-12-7 10:00
他想每个node都弄个锁么?这个东西都是trade off,每个都加个锁也不现实

肯定是有trade-off。. 留学申请论坛-一亩三分地

insert一个node时,有两步:
new_node->next = cur->next; 来源一亩.三分地论坛.
cur->next = new_node;
第二步是要考虑多线程的地方(可能有多个node改cur), 第一步肯定是单线程操作.
回复

使用道具 举报

我的人缘0
hychin 发表于 2017-12-7 10:15:07 | 显示全部楼层
本楼: 【顶】   0% (0)
 
 
0% (0)   【踩】
全局: 顶  81% (242)
 
 
18% (54)  踩
第一步不加锁也有风险的

你刚assign 了 cur->next, 执行下一步之前, cur这个node就被删掉了
回复

使用道具 举报

我的人缘0
 楼主| james9102 发表于 2017-12-7 10:39:19 | 显示全部楼层
本楼: 【顶】   0% (0)
 
 
0% (0)   【踩】
全局: 顶  100% (11)
 
 
0% (0)  踩
hychin 发表于 2017-12-7 10:15
第一步不加锁也有风险的

你刚assign 了 cur->next, 执行下一步之前, cur这个node就被删掉了

这是这道题比较tricky的地方,insert一个new_node B在cur后面, cur不会被删掉(这里只有insert操作,没有delete).

你要保证如果同时另一个线程也想insert一个new_node B在cur后面,上面的第二步能保证new_node A和new_node B无干扰, 能形成. 1point 3acres 论坛
cur->new_node_A->new_node_B-> (cur_node->next)
或者. Waral 博客有更多文章,
cur->new_node_B->new_node_A-> (cur_node->next)
这样的链表

Learn React.js, Redux & Immutable.js while building a weather app

回复

使用道具 举报

我的人缘0
hychin 发表于 2017-12-7 10:43:13 | 显示全部楼层
本楼: 【顶】   0% (0)
 
 
0% (0)   【踩】
全局: 顶  81% (242)
 
 
18% (54)  踩
就算不删吧
. Waral 博客有更多文章,
node A执行了第一行,
node B也执行了第一行

然后node A才开始执行第二行
执行完 nodeB也开始执行第二行,直接把nodeA的覆盖了

最后变成 cur->node B->next, memory leak了. 1point 3acres 论坛
. more info on 1point3acres
所以这两行都得放进临界区才行
回复

使用道具 举报

我的人缘0
 楼主| james9102 发表于 2017-12-7 11:44:14 | 显示全部楼层
本楼: 【顶】   0% (0)
 
 
0% (0)   【踩】
全局: 顶  100% (11)
 
 
0% (0)  踩
hychin 发表于 2017-12-7 10:43. Waral 博客有更多文章,
就算不删吧. 一亩-三分-地,独家发布

node A执行了第一行,

如果有一个满足某些条件就会atomic的swap操作,那就不需要这样了. 这种操作一般硬件会支持.
回复

使用道具 举报

我的人缘0
hychin 发表于 2017-12-7 11:48:46 | 显示全部楼层
本楼: 【顶】   0% (0)
 
 
0% (0)   【踩】
全局: 顶  81% (242)
 
 
18% (54)  踩
james9102 发表于 2017-12-7 11:44
如果有一个满足某些条件就会atomic的swap操作,那就不需要这样了. 这种操作一般硬件会支持.
. 牛人云集,一亩三分地
网上有用linked list实现lock free的queue,不过用到了compare and swap的 操作
回复

使用道具 举报

我的人缘0
 楼主| james9102 发表于 2017-12-7 12:00:04 | 显示全部楼层
本楼: 【顶】   0% (0)
 
 
0% (0)   【踩】
全局: 顶  100% (11)
 
 
0% (0)  踩
hychin 发表于 2017-12-7 11:48
网上有用linked list实现lock free的queue,不过用到了compare and swap的 操作
. visit 1point3acres for more.
bingo!同学真是犀利
回复

使用道具 举报

我的人缘0
hello_ 发表于 2017-12-7 12:30:01 | 显示全部楼层
本楼: 【顶】   0% (0)
 
 
0% (0)   【踩】
全局: 顶  91% (163)
 
 
8% (16)  踩
james9102 发表于 2017-12-7 09:51
我就这么答的,面试官说这样不efficient...

只要求你实现insert( ListNode* cur, ListNode* new_node ),其实是thread-safe list几个操作里最简单的一个,因为给定了插入位置,其实如何找到插入位置,比insert本身要复杂。

给两种思路. 围观我们@1point 3 acres
1. per-node lock
先lock住cur,再lock住cur->next 如果不是NULL,然后把new_node 插入,最后unlock(cur), unlock(cur->next) 如果不是NULL
关键点是lock的顺序,一定是先cur,再cur->next
如果要找到插入位置,需要hand-over-hand locking

2. lock-free
需要CAS(compare and swap)。基本思路是,. 留学申请论坛-一亩三分地
  while(true) {
    next = cur->next;
    new_node->next = next;
    if (CAS(cur->next, next, new_node)) {
      // succeed, break the retry loop
      break;
. 1point3acres    }
    // CAS failed, retry
  }
如果要找到插入位置,从list的头开始traverse就好了,某些特定的architecture里需要加fence,具体情况具体分析
回复

使用道具 举报

我的人缘0
hychin 发表于 2017-12-7 12:39:53 | 显示全部楼层
本楼: 【顶】   0% (0)
 
 
0% (0)   【踩】
全局: 顶  81% (242)
 
 
18% (54)  踩
hello_ 发表于 2017-12-7 12:30
只要求你实现insert( ListNode* cur, ListNode* new_node ),其实是thread-safe list几个操作里最简单的 ...

. Waral 博客有更多文章,牛,这个回答不错的,应该能get到面试官的点
. From 1point 3acres bbs
第一个如果是循环链表的话,会不会有死锁的风险?
回复

使用道具 举报

我的人缘0
 楼主| james9102 发表于 2017-12-7 12:48:25 | 显示全部楼层
本楼: 【顶】   0% (0)
 
 
0% (0)   【踩】
全局: 顶  100% (11)
 
 
0% (0)  踩
hello_ 发表于 2017-12-7 12:30
只要求你实现insert( ListNode* cur, ListNode* new_node ),其实是thread-safe list几个操作里最简单的 ...

大神!敢问大神是做哪个方向research的?在地里看到你报了个Apple的package。

next = cur->next;
new_node->next = next;

可以放在loop前面,而不是loop里面
回复

使用道具 举报

我的人缘0
hello_ 发表于 2017-12-7 13:26:46 | 显示全部楼层
本楼: 【顶】   0% (0)
 
 
0% (0)   【踩】
全局: 顶  91% (163)
 
 
8% (16)  踩
james9102 发表于 2017-12-7 12:48
大神!敢问大神是做哪个方向research的?在地里看到你报了个Apple的package。
.本文原创自1point3acres论坛
next = cur->next;

这个应该是必须放在loop里面的,放在前面会有错误

你想这样一种情况,两个人同时在试图插入,只有一个能成功,而成功之后cur->next会被更新,这时候失败的那一个如果不重新读取cur->next的值,之前成功插入的那个node会丢失,你可以拿纸画一下,就明白是什么情况了

大神不敢当,PhD是做系统相关的,不过好像没什么用,从来没人面试问我这个我问题
回复

使用道具 举报

我的人缘0
hello_ 发表于 2017-12-7 13:27:39 | 显示全部楼层
本楼: 【顶】   0% (0)
 
 
0% (0)   【踩】
全局: 顶  91% (163)
 
 
8% (16)  踩
hychin 发表于 2017-12-7 12:39
牛,这个回答不错的,应该能get到面试官的点

第一个如果是循环链表的话,会不会有死锁的风险?
. from: 1point3acres
不会的,因为所有的lock都是按照同一个顺序来获取的,即使是循环链表,也是同一个方向(比如始终顺时针)
回复

使用道具 举报

游客
请先登录

本版积分规则

提醒:发帖可以选择内容隐藏,部分板块支持匿名发帖。请认真读完以下全部说明:

■隐藏内容方法: [hide=200]你想要隐藏的内容比如面经[/hide]
■意思是:用户积分低于200则看不到被隐藏的内容
■可以自行设置积分值,不建议太高(200以上太多人看不到),也不建议太低(那就没必要隐藏了)
■建议只隐藏关键内容,比如具体的面试题目、涉及隐私的信息,大部分内容没必要隐藏。
■微信/QQ/电子邮件等,为防止将来被骚扰甚至人肉,以论坛私信方式发给对方最安全。
■匿名发帖的板块和方法:http://www.1point3acres.com/bbs/thread-405991-1-1.html

手机版|小黑屋|一亩三分地论坛声明

GMT+8, 2018-8-16 03:18

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

快速回复 返回顶部 返回列表