少点代码,多点头发java
上篇给你们写了 应届生工做一年不到,从被裁到上岸,咱们该如何自渡?如何保证本身的核心竞争力? 反响很好。可是吧,我犯了一个错误,敖丙提醒个人。web
太难了,失业这几天没发原创,连个原创都忘记标了,真是傻🐶。 因此我今天又放了一次次条,此次可标了原创。没看的赶忙看看,稳稳的有帮助。面试
大大小小也面试了快十家公司了,有些很是重要的面试题和面试经验必须给你们整出来。算法
首先声明,我投的岗位是搜索方向、后端开发(偏底层、高性能)、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线程去阻塞等待返回的数据结果。
入门以前我以为写代码应该挺难的,属于技术活。如今我发现,面试是个技术活,比写代码难度大多了。不光要有实力,也必需要有运气。
反正你如何准备,面试官都会问到你怀疑人生。大多数时候咱们都是顺着面试官的反问去思考,结合本身的经历回答。
三个小点提示下:
差很少了,今天分享就到这里了。不是全部面试题,挑选了一些重要的问题说说。
今天开始在陆陆续续拒绝一些公司了,对于那些很还不错的公司,对你满满诚意,拒绝起来仍是有些伤心的。
同时我在想,无论怎么样最终都只能选择一家公司工做。可是在面试的时候又不得很少尝试。
尝试的越多,意味着作出选择的越多。可是,在职业选择上,是真的不是很好选。
每一个人对于工做回报的预期不一样,有的人把工做当作所有,是实现理想价值的地方,是实现梦想的地方;有的人把工做知识当作能力锻炼的地方,为了之后更大的梦想;也有人是为了赚钱。
总结一下就是三点
在选择职业时你们能够根据这三方面仔细思考。要是三个条件都能知足,那就太好了。
更多时候都是有取舍的,你们自行取舍。
下一篇文章给你们总结下本次招工作中的一些总结和须要注意哪些问题。固然个人全部总结都是基于本身的经历,若是有什么异议,欢迎你们探讨。
俊男靓女们的点赞就是龙叔创做的最大动力,奥利给!!!