【通知】7月22,工业界资深数据科学家教你破解各大公司面试!


一亩三分地论坛

 找回密码
 获取更多干活,快来注册

一亩三分地官方iOS手机应用下载
查看: 311|回复: 3
收起左侧

apple system engineer 电面

[复制链接] |试试Instant~ |关注本帖
npuweiwei 发表于 2017-7-13 04:27:56 | 显示全部楼层 |阅读模式

2017(7-9月) 码农类 硕士 全职@Apple - 网上海投 - 技术电面 |Other在职跳槽

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

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

x
技术店面
1) 多线程,1条thread read ,1条thread write, 怎么做?
2)很多条thread constantly read, 只有2条thread rarely write, 怎么优化?
3) read 和 write 同一个variable,需要lock?什么情况下lock?
面下来觉得系统知识还是不扎实。. 鍥磋鎴戜滑@1point 3 acres
say543 发表于 2017-7-13 13:56:31 | 显示全部楼层
关注一亩三分地公众号:
Warald_一亩三分地
楼主这是啥team的? 第一题 因该就是要用lock 吧? 第二题我是想用read priority 高于write 的方式来完成 我没看出第三题跟第一题有啥不同?
回复 支持 反对

使用道具 举报

magicsets 发表于 2017-7-13 14:46:03 | 显示全部楼层
关注一亩三分地微博:
Warald
第一个问题应该是比较基础的Producer-Consumer同步吧,最常用抽象是BlockingQueue,实现起来是用Mutex + (Semaphore或者Conditional variable),核心部分只要实现push()和pop()方法,就十来行代码。然后运行的时候创建一个queue,写线程调用push(),读线程调用pop(),就可以了。

C++的BlockingQueue代码可以参见这个Stack Overflow: https://stackoverflow.com/questions/12805041/c-equivalent-to-javas-blockingqueue. 鍥磋鎴戜滑@1point 3 acres

Java是在标准库里有BlockingQueue的,可以参见OpenJDK8的实现:http://grepcode.com/file_/repository.grepcode.com/java/root/jdk/openjdk/8u40-b25/java/util/concurrent/ArrayBlockingQueue.java/?v=source
.鏈枃鍘熷垱鑷1point3acres璁哄潧
第二题要追求性能的话,可以建两个Lock-free concurrent queue,一个queue用于很多个thread读,另一个queue用于2个thread写,读的queue空了的话,就将两个queue交换一下。

实现Lock-free concurrent queue需要一些关于原子操作(atomic operations)的知识,可以去看一本叫做《C++ Concurrency In Action》的书。
回复 支持 反对

使用道具 举报

chaozhu2004 发表于 昨天 11:56 | 显示全部楼层
1. mutex+conditional variable. from: 1point3acres.com/bbs
2. pthread read-write lock
3. atomic variable
回复 支持 反对

使用道具 举报

本版积分规则

关闭

一亩三分地推荐上一条 /5 下一条

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

custom counter

GMT+8, 2017-7-21 19:05

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

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