标签:有一个 tcmalloc black 今天 lin 应届生 模块 多态 职业
少点代码,多点头发
上篇给大家写了 应届生工作一年不到,从被裁到上岸,我们该如何自渡?如何保证自己的核心竞争力? 反响很好。但是吧,我犯了一个错误,敖丙提醒我的。
太难了,失业这几天没发原创,连个原创都忘记标了,真是傻??。 所以我今天又放了一次次条,这次可标了原创。没看的赶紧看看,稳稳的有帮助。
大大小小也面试了快十家公司了,有些非常重要的面试题和面试经验必须给大家整出来。
首先声明,我投的岗位是搜索方向、后端开发(偏底层、高性能)、java后台(这个岗位是阿里面试官看我简历让我试试的)。
面试的问题主要分为几块去说,C&C++&STL、数据结构与算法(含编程)、操作系统、多线程问题、场景题目、项目。
项目在社招面试中占据的分数很高,所以面试讲项目的时间会多。项目细节就不给大家透漏了,会把项目中的知识点穿插到对应的知识模块。
这一块一定是面试最重要的地方。在整个社招面试的时候,自我介绍从来都是从项目说起,不会像校招那样会介绍来自哪里,叫什么名字,会什么技术。
每次自我介绍都是这样说的:
基本就是这些,在讲项目的时候注意要埋伏一些重要的伏笔,比如项目亮点,直说这些亮点非常好,至于原因可以铺垫下,引起面试官的好奇。
阿里面试官给过我一些建议,非常中肯的,也给大家说说。
不得不说大佬的建议非常有力量的。看完大佬给的建议赶紧重新梳理了一遍项目、看看项目有哪些亮点技术和设计、那些难点、产生什么价值。
这是说项目的方式和准备项目方面。面试过程中,面试官问项目是真的问到你很多都是想不到的。
你可能觉得是个很简单的问题,平时不会在意那种,但面试官深深的挖,总感觉下面有矿一样。
可能面试官总是能通过这种细节撂倒你,你也觉得就是你的问题,没掌握好。
举个例子,高效的网络IO底层大多都是epoll实现的。
面试官先是问我epoll的原理,底层用什么实现?为什么高效?红黑树结构中epoll结构体怎么样的?回调使用什么触发的?epoll的边缘触发和水平触发?操作系统怎么管理信号的?为什么这里用红黑树不用哈希表?等等。
就这样一层一层的往下挖,一直挖穿为止。有时候你都说道操作系统,硬件中断层面了。
但是面试官还是如饥似渴,难道还需要说说高低电平,载波脉冲么?
所以项目真的要细节掌握透彻,就连有时候用的一些依赖库什么的,你都的知道为啥用这个,有没有更好的?
项目问的细是一方面,还有一方面就是问的深。
举个例子,当时说项目中用了一种高效的内存分配器,没有用原生的ptmalloc(也就是malloc)。
不要说new了,new的底层还是mallloc。是因为减少多线程情况下的锁开销,每次malloc都会进行加锁和解锁的过程。
面试官紧接着就问,那你用了tcmalloc的确减少了在多线程情况下的锁性能问题。如果我让你继续优化你有什么方法?也是在多线程情况下,内存分配问题。
紧接着又问,你刚刚说减少锁的性能开销,那你知道操作系统层面,锁的代价是多大么?你知道操作系统是怎么加锁的么(锁的原理是什么)?
我是真的服,面试官什么都懂。??,遇到不会的只能说这块我没掌握,说下我的理解吧。
社招,项目这块说的好可以占据很高的分,具体多大比例看面试项目契合度了。如果你的项目刚好对方公司也用到了,那就是基本聊项目聊完。
说的不好,那就有点难了。
总结一下,项目到底该如何准备?如何说?
准备方面,几个核心点。
如何说,其实简单。只要你准备好了,说清楚,说精彩。最好还能说得跌宕起伏,在穿插几个故事。
其实项目再怎么准备都不为过,不管是从项目的深度,项目的细节。
这个问题我很清楚,是阿里问的。这就是说编译原理了,虽说不是科班出身,但是书还是略微看过。
不用惊讶,都是为了修行。
其他还有一些简单问题,比如问你sizeof是编译期还是运行期决议的?函数调用约定是什么?等等
直接问你数据结构的不多,一般会搭配着项目问。
问你设计时为什么选用这种数据结构?
常见数据结构以及底层实现?
树形结构和哈希结构的各自优缺点?
有些会问你图结构一些问题
算法也不是直接让你写一个快排什么的,都是给你场景题,让你自己选择用什么算法。
不排除直接让你写快排,比如我这次在面试某家公司的时候,让我写一个单链表快排,不能交换数值,必须交换数据节点的地址。
查找算法和排序算法考的多。
查找算法的话就那几种。
排序算法也就那么几种(从之前的博客中拷贝的图)
链表类的问题考的特别多,写算法题目也经常让写链表类的题目。我这次面试写算法基本都是在写链表类的题目。
这块也会根据项目中的问,我的项目是搜索引擎,问操作系统的问题自然多。
这块题目是真的难以准备,都是随机应变的。大多数场景题目都是看思维,有些是看你思维完了,再让你对某个模块撸个代码。
说说我这次遇到的几个深刻得场景问题。
题目:
问题:
面试官:你怎么解决性能问题,从那些方面去考虑?
我:先看服务内部是否需要优化,看看具体哪些地方消耗rt,针对该模块优化,在看资源是否可以扩容等等
面试官:紧接着说,资源是固定的不能扩容?怎样保证服务正常?
我:思考了一会,表示惊讶。
其实这道题,我思路错了,一直在纠结服务性能优化上。面试官说的很清楚,要保证服务正常。
所以一定是限流,优先保证服务稳定性。
说实话,工作中的服务不算严格意义上的限流,采用的是TCP连接队列限流的。
TCP队列大小固定,当队列满了,接下来所有新链接都会被reset,当队列有空余时才可以接受新连接。
题目:
问题:
面试官:100个同时IO耗费时间很长,大多数线程都在等待,你怎么优化?
我:可以采用批量IO,用一个单独的线程专门负责IO工作
面试官:IO线程何时去进行批处理?
我:io线程使用阻塞等待,满一批就进行IO;或者work线程每次写数据时检测下队列满了就去唤醒IO线程
面试官:那IO线程完了怎么通知那一批work线程?
我:信号通知
面试官:信号通知不能携带数据结构,假设IO完了之后必须给每个对应的work线程返回一个数据结构,怎么办?
我:用一个全局队列保存IO返回的数据结构,work线程去阻塞等待返回的数据结果。
入门之前我觉得写代码应该挺难的,属于技术活。现在我发现,面试是个技术活,比写代码难度大多了。不光要有实力,也必须要有运气。
反正你如何准备,面试官都会问到你怀疑人生。大多数时候我们都是顺着面试官的反问去思考,结合自己的经历回答。
三个小点提示下:
差不多了,今天分享就到这里了。不是所有面试题,挑选了一些重要的问题说说。
今天开始在陆陆续续拒绝一些公司了,对于那些很还不错的公司,对你满满诚意,拒绝起来还是有些伤心的。
同时我在想,不管怎么样最终都只能选择一家公司工作。但是在面试的时候又不得不多尝试。
尝试的越多,意味着做出选择的越多。但是,在职业选择上,是真的不是很好选。
每个人对于工作回报的预期不同,有的人把工作当做全部,是实现理想价值的地方,是实现梦想的地方;有的人把工作知识当做能力锻炼的地方,为了以后更大的梦想;也有人是为了赚钱。
总结一下就是三点
在选择职业时大家可以根据这三方面仔细思考。要是三个条件都能满足,那就太好了。
更多时候都是有取舍的,大家自行取舍。
下一篇文章给大家总结下本次招工做中的一些总结和需要注意哪些问题。当然我的所有总结都是基于自己的经历,如果有什么异议,欢迎大家探讨。
俊男靓女们的点赞就是龙叔创作的最大动力,奥利给!!!
资本寒冬,应届生被裁,亲身经历从被裁到上岸,我们该如何自渡?如何保持核心竞争力?
标签:有一个 tcmalloc black 今天 lin 应届生 模块 多态 职业
原文地址:https://www.cnblogs.com/zhonglongbo/p/12859774.html