.net 开发人员面试题 - 多线程 最近园子里好多人谈到了招聘面试,特别是多线程这个问题出现了很多次;多线程也是我在面试中很喜欢问的一个题目,和大家分享一下(仅限.net) 为什么喜欢在面试中问这个问题 因为这是一个很好的了解面试者知识深度的问题,在现代CPU都是多核的背景下,多线程作为一种能充分发挥CPU资源的技术使用的越来越广泛. 而且这个问题可以把普通的应用开发人员(增删改查)和有一定技术深度/专研精神的人区分出来 背景: 面试.net中高级软件工程师/架构师 (事先可能不知道对方的目标等级,要在这次面试过程中确定) 本文只是单纯的一个技术面试的一个问题而已,不是完整的一个面试 以下是我的一般面试流程(不是所有的,不过60%都会在下面,所有问题都不是定死的,会看对方的情况再安排) 1.你了解多线程么 A 了解(要求简述,看回答的水平和方向选择2,3,4,5中的一个) B 不了解(到结论1) 2.请简述线程池,以及使用场景 A 准确描述线程池的意义和使用场景;并且能深入介绍线程的资源消耗 [最好还能列举多种类似设计的比较](到问题4) B 准确了描述了池的意义,并能描述对应的使用场景, 例如很多短时间的操作会用线程池中以避免构建线程的资源消耗(到问题3) C 能描述使用场景,但是无法系统的说明原因(到结论2) D 能系统的的介绍线程池,但是无法描述使用场景(到结论0) 3.请描述多线程的意义,并介绍你什么时候使用多线程 A 能准确描述意义和优劣势, [例如性能,逻辑独立性,额外的性能消耗,线程调度和切换](到问题4 看起来技术细节/底子不错 继续问技术细节) B 能描述一个准确的使用多线程的场景,但是无法系统的描述多线程的意义(到问题5, 想了解一下这个场景是否真的是他设计解决的,还是他只是其中的一个开发人员) C 什么都说不出来,或者说不到点子上 (结论2) 4.请描述几种常用多线程同步的方式,并结合你的经验介绍适用场景 A 什么都说不出来(结论0/2 太奇怪了之前的问题是背的?这里同步居然说不出来) B 知道lock关键字,然后其他的不懂(结论2) C 知道lock autoresetevent 信号量等常见的.net中的同步方式,偶尔还能说跨进程同步(结论3-) D 知道spinlock monitor event等基本上所有的常用同步方式,知道在某些场景适合用某种方式,但是说不出原因 (到问题5 或者结论3) E 知道user mode和kernel mode.对两者有一些细节上的了解,明白一个线程所持有的资源,能描述出不同同步方式的差别和使用场景,可以对monitor的内部原理作出介绍(结论4 或者到问题5) 5.请结合你的项目,介绍你在设计中为什么使用了多线程,并且为什么具体选择了这种方案 A 没有具体的使用场景,(到结论0/2/3) B 能从某一个角度介绍使用场景,并且能表述为什么当初使用了这个场景(到结论3) C 作为团队的一员,参加过某个大型项目, 所以有一个很适合的使用场景,但是只讲过猪cucci女包、香奈儿包包、爱马仕包包:www.naitiao.com|冬装外套、冬装女装、时尚冬装:www.haomeifa.com gucci包、酷奇包包、金利来女包:www.naitiao.com|皮草外套、水貂皮草、皮草大衣: www.qqxk.org 跑,没吃过猪肉(到结论3) D 能系统的描述和介绍一些很适合的使用场景,并结合自己的项目经验介绍当初为什么使用这样的设计,同时还能提出优化建议以便能做的更好(到结论4) [可能会提出一个场景让他按照他的经验做现场设计] 初步结论0: 这人可能是事先准备的面试题,或者是听别人介绍过,但是自己从来没用过;接下来我会问问他其他方面的技术问题(特别是细节),确认他是否只会吹牛 初步结论1: 能力<=中级开发人员 [没吃过猪肉好歹要见过猪吧] 初步结论2: 能力在中级开发人员附近 [有过不少实践经验,但是没有系统的想过原因,知其然而不知其所以然] 初步结论3: 能力在中级开发人员到高级开发人员之间 [知道点东西,不知道更详细的, 别人交代的任务可以完成的比较顺利,但是想做的很好有点难,需要架构师帮忙控制设计] 初步结论4: 能力在高级开发人员和架构师之间 [对多线程有较深入的了解,能在架构设计的时候选择适合的解决方案,能系统的描述多线程的意义,并给团队其他成员技术支持] 所有的结论都不是定死的,一般还会补充一些问题,或者最后让面试者自由问问题; 希望面试者能充分表现他的技术能力在这个点 某些可能会被问到的技术细节:(上面已经提到的就不问了) 1.如果你是个leader/manager 如何解决掉产品里面存在的多线程的bug(你的团队成员水平可能很一般,会写出一些BUG) 2.IO线程和worker线程(window 和.net) 3.后台线程和前台线程 4.Stackoverflow的问题排查 (询问线程栈) 5.线程池的配置和影响范围(有没有通过配置优化.net应用程序的性能) 6.有没有做过多线程程序的debug 如何排查某个进程中CPU 100% 的根本原因(假设只在生产环境出现) 出现意料之外的数据怎么处理 8. 是否了解TLS thread local storage(可能会问到CallContext) 9.经典案例, 每隔一分钟执行一次的定时任务, 用 thread+ while(true) 还是timer 10.一个.net线程的资源消耗 11. .net线程和window线程的异同 12 几种常用的概念的性能差别 13 asp.net的线程机制和一些关键配置 14 一些常见的多线程设计的场景 例如 thread1- queue- theads 15 多线程和异步有什么关系和区别 本文描述了一些我个人比较喜欢的多线程方面的问题,以确定面试者是不是有足够的能力和技术深度 顺便看看他是否有系统的分析和解决问题的能力以及足够的知识面,顺便看看面试者的经验和知识体系 此外如此多的描述也是考验对方表达和沟通能力(这是架构师的重要能力) 当然,肯定有遗漏,不足或者误判..还请大家一起讨论讨论 补充(感谢各位在评论中的提醒) 1.这不是一个完整的面试,完整的面试更多是考核面试者是不是适合我们的公司的这个职位;包括说 性格,解决问题的能力,学习能力,团队合作,目前的技术水平 而这只是询问一个技术细节 cucci女包、香奈儿包包、爱马仕包包:www.naitiao.com|冬装外套、冬装女装、时尚冬装:www.haomeifa.com gucci包、酷奇包包、金利来女包:www.naitiao.com|皮草外套、水貂皮草、皮草大衣: www.qqxk.org 本文来源:https://www.wddqw.com/doc/b74c29fd770bf78a6529546b.html