Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Language agnostic 有没有关于面试的好问题?_Language Agnostic_Multithreading - Fatal编程技术网

Language agnostic 有没有关于面试的好问题?

Language agnostic 有没有关于面试的好问题?,language-agnostic,multithreading,Language Agnostic,Multithreading,面试毕业生时,我通常会问他们有关数据结构、算法和复杂性理论的问题。我真的想问一个问题,让他们能够展示他们对多线程概念的熟悉,而不必纠缠于特定语言的问题 有什么好问题吗?我能想到的唯一问题是如何编写一个支持多线程访问的单实例。这里您可以找到一些要讨论的主题: 线程实现(内核与用户空间) 线程本地存储 同步原语 死锁,活锁 互斥和互斥的区别 信号灯 使用条件变量 当不使用线程时。(例如IO多路复用) 我发现经典的“给我写一个消费者-生产者队列”问题非常好。您可以提前五分钟左右用手工方式讨论同步(

面试毕业生时,我通常会问他们有关数据结构、算法和复杂性理论的问题。我真的想问一个问题,让他们能够展示他们对多线程概念的熟悉,而不必纠缠于特定语言的问题


有什么好问题吗?我能想到的唯一问题是如何编写一个支持多线程访问的单实例。

这里您可以找到一些要讨论的主题:

  • 线程实现(内核与用户空间)
  • 线程本地存储
  • 同步原语
  • 死锁,活锁
      • 互斥和互斥的区别 信号灯
      • 使用条件变量
      • 当不使用线程时。(例如IO多路复用)
        • 我发现经典的“给我写一个消费者-生产者队列”问题非常好。您可以提前五分钟左右用手工方式讨论同步(例如,从“Object.wait()做什么?Object上的其他方法与之相关?您能举个例子说明何时可以使用这些方法吗?您在实践中可能会使用哪些其他并发技术[因为实际上,实际上使用wait/notify原语是最好的方法是非常罕见的]?”。确保候选者同时解决(或至少明确他知道)原子性(“错过的更新”)和波动性(新值在其他线程上的可见性)

          然后,在你讨论了这些理论之后,让他们花几分钟的时间为原始生产者-消费者队列编写代码。这对任何真正理解他们上面所说的内容的人来说都应该是直截了当的,但它会剔除那些能够“谈论”的人但在实践中并不真正理解它(可以说是最危险的群体)


          我喜欢这些小型编码练习,因为它们通常很容易扩展。例如,如果应试者很容易完成任务,你可以问他们如何扩展它以适应情况XXX-发明你知道会推动你所要求的noddy解决方案的极限的需求。这不仅可以让你定制问题的深度你问了,但让我们了解了应征者在处理需求澄清和现有设计修改(这在这个行业中非常重要)方面有多出色。

          与他们讨论一个流行但不知名的话题,其中线程处理是至关重要的

          我建议您使用它们构建一个web服务器,当然,只能在纸上或文字上。结果应该是这样的:有一个主线程,它正在侦听套接字。当有东西到达时,它将套接字传递到池中,然后该线程返回到套接字侦听。池中有固定数量的slots。请求处理线程专用于从池中获取作业。找出更好的方法,是线程同时检查池,还是listner主线程为新传入的请求选择一个空闲的插槽/线程。尝试编写一个小的伪代码,或池处理两侧的图

          让我们介绍一个小应用程序:页面计数器,它告诉我们自服务器启动以来已经发出了多少个页面请求。不要告诉他们必须保护计数器不受并发修改的影响,让他们了解如何使用互斥锁或同步或其他方式执行此操作。也许您可以跳过web服务呃,页面计数器应用程序更容易指定

          另一个例子是聊天,有2个以上的客户端和一个服务器,找出解决问题的方法,即所有客户端的所有消息都应该以相同的顺序到达。或者反射游戏:服务器随机等待1..5秒,然后说“peek-a-boo”,则先按空格键的玩家获胜。指定为2名玩家,然后尝试将其扩展为N名玩家


          另外,要注意NPP。NPP代表“非编程程序员”。有些人可以谈论编程问题,他们知道所有的3/4字母缩写(Java世界中有很多,EJB,JSP,XSLT,还有我最喜欢的:POJO,意思是纯旧Java对象,lol),他们理解并修改代码,或从一个基地制作类似的程序,但即使有小问题,他们也会失败,这必须由他们自己去做,例如在数组中找到离基地最近的元素。有时需要几个月的时间,直到结果出来。他们在面试中表现出色,因为他们做好了准备。也许他们甚至不知道对于核电站,这是一个已知的影响:


          很难认出对面的人,他们没有听说过流行的图书馆或模式,但他们甚至可以在面试时学到。(个人评论:我上次面试是在1999年,似乎我不再做面试了。我以前从未听说过动态网页,但我已经想出了“会话”这个词。)在面试中,问题是如何构建一个简单的绞刑人web应用程序。我被录用了。)

          伙计,我在面试中会失败,因为我不需要担心锁等问题。使用一种为理智并发设计的语言有它的优势。