资本寒冬,应届生被裁,亲身经历从被裁到上岸,咱们该如何自渡?如何保持核心竞争力?

少点代码,多点头发java

上篇给你们写了 应届生工做一年不到,从被裁到上岸,咱们该如何自渡?如何保证本身的核心竞争力? 反响很好。可是吧,我犯了一个错误,敖丙提醒个人。web

太难了,失业这几天没发原创,连个原创都忘记标了,真是傻🐶。 因此我今天又放了一次次条,此次可标了原创。没看的赶忙看看,稳稳的有帮助。面试

大大小小也面试了快十家公司了,有些很是重要的面试题和面试经验必须给你们整出来。算法

首先声明,我投的岗位是搜索方向、后端开发(偏底层、高性能)、java后台(这个岗位是阿里面试官看我简历让我试试的)。编程

面试的问题主要分为几块去说,C&C++&STL、数据结构与算法(含编程)、操做系统、多线程问题、场景题目、项目。后端

项目在社招面试中占据的分数很高,因此面试讲项目的时间会多。项目细节就不给你们透漏了,会把项目中的知识点穿插到对应的知识模块。性能优化

项目这块

这一块必定是面试最重要的地方。在整个社招面试的时候,自我介绍历来都是从项目提及,不会像校招那样会介绍来自哪里,叫什么名字,会什么技术。网络

每次自我介绍都是这样说的:数据结构

  • 作了什么项目
  • 若是项目是独立设计和开发,要描述为何作这个项目,设计思路
  • 我在项目中扮演什么角色(若是是团队项目,必定描述清楚本身作了什么功能,起到什么做用)
  • 项目包括哪几个模块,每一个模块实现什么功能
  • 项目用了哪些技术,为何选择用这些
  • 项目中那些点是很是有意义的,为何

基本就是这些,在讲项目的时候注意要埋伏一些重要的伏笔,好比项目亮点,直说这些亮点很是好,至于缘由能够铺垫下,引发面试官的好奇。多线程

阿里面试官给过我一些建议,很是中肯的,也给你们说说。

不得不说大佬的建议很是有力量的。看完大佬给的建议赶忙从新梳理了一遍项目、看看项目有哪些亮点技术和设计、那些难点、产生什么价值。

这是说项目的方式和准备项目方面。面试过程当中,面试官问项目是真的问到你不少都是想不到的。

你可能以为是个很简单的问题,平时不会在乎那种,但面试官深深的挖,总感受下面有矿同样。

可能面试官老是能经过这种细节撂倒你,你也以为就是你的问题,没掌握好。

举个例子,高效的网络IO底层大多都是epoll实现的。

面试官先是问我epoll的原理,底层用什么实现?为何高效?红黑树结构中epoll结构体怎么样的?回调使用什么触发的?epoll的边缘触发和水平触发?操做系统怎么管理信号的?为何这里用红黑树不用哈希表?等等。

就这样一层一层的往下挖,一直挖穿为止。有时候你都说道操做系统,硬件中断层面了。

可是面试官仍是如饥似渴,难道还须要说说高低电平,载波脉冲么?

因此项目真的要细节掌握透彻,就连有时候用的一些依赖库什么的,你都的知道为啥用这个,有没有更好的?

项目问的是一方面,还有一方面就是问的

举个例子,当时说项目中用了一种高效的内存分配器,没有用原生的ptmalloc(也就是malloc)。

不要说new了,new的底层仍是mallloc。是由于减小多线程状况下的锁开销,每次malloc都会进行加锁和解锁的过程。

面试官紧接着就问,那你用了tcmalloc的确减小了在多线程状况下的锁性能问题。若是我让你继续优化你有什么方法?也是在多线程状况下,内存分配问题。

紧接着又问,你刚刚说减小锁的性能开销,那你知道操做系统层面,锁的代价是多大么?你知道操做系统是怎么加锁的么(锁的原理是什么)?

我是真的服,面试官什么都懂。🐂,遇到不会的只能说这块我没掌握,说下个人理解吧。

社招,项目这块说的好能够占据很高的分,具体多大比例看面试项目契合度了。若是你的项目恰好对方公司也用到了,那就是基本聊项目聊完。

说的很差,那就有点难了。

总结一下,项目到底该如何准备?如何说?

准备方面,几个核心点。

  • 为何要作这个项目?
  • 怎么作的?
  • 项目中那些亮点、难点、价值?
  • 项目完成,有没有解决当初的问题?收益怎么样?

如何说,其实简单。只要你准备好了,说清楚,说精彩。最好还能说得跌宕起伏,在穿插几个故事。

其实项目再怎么准备都不为过,不论是从项目的深度,项目的细节。

C&C++&STL问题

程序编译问题

  • 程序编译整个过程?每一个步骤都干了什么?
  • 词法分析,分析什么?语法分析,分析什么?语义分析,分析什么?

这个问题我很清楚,是阿里问的。这就是说编译原理了,虽然说不是科班出身,可是书仍是略微看过。

不用惊讶,都是为了修行

  • 每一个过程怎么用GCC编译的?
  • 如何进行反汇编?

对象模型问题

  • C++有哪几种对象模型,C++如今使用的那一种?
  • 普通继承的对象模型是怎么样的?存在虚函数的继承对象模型是怎样?
  • 虚继承的对象模型是怎样的?为何须要虚继承?解决什么问题?
  • 多重继承对下模型?
  • 成员变量会内存对齐么?为何须要内存对齐?底层怎么实现的?
  • 为何对象模型须要这样存放?

智能指针问题

  • 智能指针有哪几种?
  • 循环引用怎么解决,为何用weak_ptr就能解决?
  • 智能指针每一种的使用场景?
  • 智能指针底层怎么支持的,怎么作到的?

STL问题

  • STL有哪几部分组成?
  • 为何须要迭代器?
  • vector非尾结点删除,和插入会有什么问题?迭代器失效问题?
  • 优先级队列怎么实现的?
  • 本身实现序列式容器须要实现哪些成员函数?关联式容器呢?
  • 配置器是干吗用的?
  • 仿函数使用在什么场景?
  • boost库使用过么?使用过哪些函数?

多态问题

  • 为何须要多态?
  • 多态有哪几种?静态多态是什么?动态多态呢?
  • 多态如何实现的?
  • 虚表指针是什么?虚表里面怎么存的?顺序是什么?为何须要按照声明的顺序?
  • 虚表第一个位置存放的type_info是干什么用的?RTTI机制是干什么的?为何须要RTTI机制?
  • 使用多态中遇到哪些问题?

其余还有一些简单问题,好比问你sizeof是编译期仍是运行期决议的?函数调用约定是什么?等等

数据结构与算法

直接问你数据结构的很少,通常会搭配着项目问。

  • 问你设计时为何选用这种数据结构?

  • 常见数据结构以及底层实现?

  • 树形结构和哈希结构的各自优缺点?

  • 有些会问你图结构一些问题

算法也不是直接让你写一个快排什么的,都是给你场景题,让你本身选择用什么算法。

不排除直接让你写快排,好比我此次在面试某家公司的时候,让我写一个单链表快排,不能交换数值,必须交换数据节点的地址。

查找算法和排序算法考的多。

查找算法的话就那几种。

  • 遍历查找
  • 树形查找
  • 二分查找
  • 插值查找
  • 哈希查找
  • 图的遍历查找

排序算法也就那么几种(从以前的博客中拷贝的图)

常见排序算法
常见排序算法

链表类的问题考的特别多,写算法题目也常常让写链表类的题目。我此次面试写算法基本都是在写链表类的题目。

操做系统&计算机网络

这块也会根据项目中的问,个人项目是搜索引擎,问操做系统的问题天然多。

  • mmap如何映射?mmap在那些场景中使用?有哪些优势?
  • 物理地址和虚拟地址如何映射?swap区是干吗的?4g的内存能够运行8g的程序么?
  • 32位系统和64位系统区别是啥?为何32位系统地址是4字节,64位是8字节?
  • 信号槽机制是怎么实现的?
  • 信号和信号量的区别?
  • 锁的性能开销,锁的实现原理?
  • 进程和线程管理?
  • 多线程资源竞争问题?死锁经典问题(哲学家就餐问题)?
  • io这块问的不少,包括文件IO/网络IO/映射IO,都是要讲原理和细节?
  • 三次握手和四次挥手必问的?
  • 三次握手和四次挥手的状态转移?
  • socket编程每一个函数对应握手那个过程?有家面试官居然问函数参数表明的意思。
  • 网络io的全过程,发生多少次数据拷贝?

场景题目

这块题目是真的难以准备,都是随机应变的。大多数场景题目都是看思惟,有些是看你思惟完了,再让你对某个模块撸个代码。

说说我此次遇到的几个深入得场景问题。

题目:

  1. 有一个单机高性能的服务,最大只能抗qps 3k,如今由于活动qps涨到了5k。

问题:

面试官:你怎么解决性能问题,从那些方面去考虑?

我:先看服务内部是否须要优化,看看具体哪些地方消耗rt,针对该模块优化,在看资源是否能够扩容等等

面试官:紧接着说,资源是固定的不能扩容?怎样保证服务正常?

我:思考了一会,表示惊讶。

其实这道题,我思路错了,一直在纠结服务性能优化上。面试官说的很清楚,要保证服务正常。

因此必定是限流,优先保证服务稳定性。

说实话,工做中的服务不算严格意义上的限流,采用的是TCP链接队列限流的。

TCP队列大小固定,当队列满了,接下来全部新连接都会被reset,当队列有空余时才能够接受新链接。

题目:

  1. 有一个IO场景,100work线程处理完计算服务,把计算结果进行IO操做,IO等待时间长。

问题:

面试官:100个同时IO耗费时间很长,大多数线程都在等待,你怎么优化?

我:能够采用批量IO,用一个单独的线程专门负责IO工做

面试官:IO线程什么时候去进行批处理?

我:io线程使用阻塞等待,满一批就进行IO;或者work线程每次写数据时检测下队列满了就去唤醒IO线程

面试官:那IO线程完了怎么通知那一批work线程?

我:信号通知

面试官:信号通知不能携带数据结构,假设IO完了以后必须给每一个对应的work线程返回一个数据结构,怎么办?

我:用一个全局队列保存IO返回的数据结构,work线程去阻塞等待返回的数据结果。

入门以前我以为写代码应该挺难的,属于技术活。如今我发现,面试是个技术活,比写代码难度大多了。不光要有实力,也必需要有运气。

反正你如何准备,面试官都会问到你怀疑人生。大多数时候咱们都是顺着面试官的反问去思考,结合本身的经历回答。

三个小点提示下:

  • 不必定顺着面试官的思路想,要更多的有本身的思路,适当的时候记得反问面试官?
  • 不必定全部问题都答出来,可是必定你答的问题很精彩。
  • 遇到不会的或者比较难的问题,先说本身的思路,再去询问下面试官的思路,探讨的方式面试。

差很少了,今天分享就到这里了。不是全部面试题,挑选了一些重要的问题说说。

题外话

今天开始在陆陆续续拒绝一些公司了,对于那些很还不错的公司,对你满满诚意,拒绝起来仍是有些伤心的。

同时我在想,无论怎么样最终都只能选择一家公司工做。可是在面试的时候又不得很少尝试。

尝试的越多,意味着作出选择的越多。可是,在职业选择上,是真的不是很好选

每一个人对于工做回报的预期不一样,有的人把工做当作所有,是实现理想价值的地方,是实现梦想的地方;有的人把工做知识当作能力锻炼的地方,为了之后更大的梦想;也有人是为了赚钱。

总结一下就是三点

  • 积累我的能力
  • 积累经济财富
  • 实现我的价值或者梦想

在选择职业时你们能够根据这三方面仔细思考。要是三个条件都能知足,那就太好了。

更多时候都是有取舍的,你们自行取舍。

下一篇文章给你们总结下本次招工作中的一些总结和须要注意哪些问题。固然个人全部总结都是基于本身的经历,若是有什么异议,欢迎你们探讨。

俊男靓女们的点赞就是龙叔创做的最大动力,奥利给!!!

相关文章
相关标签/搜索