1、自我介绍
2、项目(难点及贡献)
3、虚函数
4、多态
5、数据库了解吗(建议下来用c++与数据库实现一个项目)
回答了解
6、设计模式,讲了一下单例模式中的饿汉单例和懒汉单例
6、设计模式,讲了一下单例模式中的饿汉单例和懒汉单例
单例只有一个实例对象,饿汉式单例开始就初始化,懒汉式单例手动初始化
以上问题是C++最基础的问题,比较容易回答
1.自我介绍
2.final finally finalize的区别
3.重写与重载的区别 重写与重载哪个属于多态
4.static的作用,怎么用?能修饰类吗?修饰方法的话怎么调用,对象能调用吗?
5.有哪些索引,怎么用?
6.内存溢出知道吗?栈会内存溢出吗?
以上问题为Java最基础的问题
一面
当有IO事件发生时,直接将事件挂到相应的结构体上,内核中采用红黑树和共享内存,效率很高
异步,非阻塞IO,线程池,IO多路复用等方法
手撸算法题
给一个循环有序的数字查找目标元素。
Leetcode原题,先找到分界点,然后在有序位置查找元素。
二面
自我介绍
c++ 的 push_back 还有另一个插入方式是什么?有什么区别
push_back插入到最后,insert可以插入到任意位置,但效率低
移动拷贝?
C++11 内容
vector 的扩容机制
当数组满的时候,重新找一个位置,两倍扩容。
项目相关的问题
epoll 和 poll 的区别?
进程间通信的方式有哪些
之前面试的时间
毕业时间
对哪些感兴趣,想在哪些方面积累
字节实习的工作
工作当中最大的挑战
业余爱好
手撸算法题
两个有序数组合并
k 个有序数组归并
输入一个 2 维数组,行和列都从小到大有序,判断给定的值是否存在
定义整数的位数叫做整数的长度,定义一个整数的地位只要大于等于他的高位就是不下降。给一个值 k,求出所有长度为 k 以内的满足不下降的整数的个数。
前三道题目都是Leetcode原题
三面
三面面试官在开会,2 面面试官沟通了一下,觉得直接可以过了,不需要再3 面。
所以 3 面就变成和 2 面面试官一起吃饭
8月 3 号拿到了依图的意向书参加了依图的 CTO 交流会
uint32_t IPtoInt(const string IP)
,函数可以将IP字符串(如 “127.0.0.1” )转换到一个 uint32_t 中去(如值为 0xef000001)。(细节:要处理各种异常)int CAS(void** location, void* old, void* new)
,请实现一个无锁的链表。
这两道编程题都是新题,之前没有出现过。
离一面过了两天。全程都在聊项目,没有编程,是我感觉压力最大的一次面试。面试官往下钻得非常深,而且很多问题都是看你有什么思考。
你们的分布式系统是如何接受事务请求的呢?
那你觉得怎样可以让整个系统可以均匀地进行服务,分配资源?
不说分布式系统吧,一台单机上你要怎么让多核心能够均衡的协调资源呢?
你是如何理解消息传递机制的?
Go里面有原生的消息传递机制对吧,那要是你需要在C++里实现一个,你觉得难度大吗,你会怎么做?
看过相关消息传递机制的源码吗?
你做了很多内存相关的内容,解决内存的争用有哪些方式?
能说说内存的段页式管理吗?
内存的段页式管理是为了解决什么问题?
那非线性地址映射能带来什么好处?
以上为项目相关
你学习的操作系统的知识,平时会有用到嘛?
进程,线程常用到
用过 C++11 对吧,C++11 的 memory order 了解吗?
有去了解过通用的内存池技术吗,是看过源码还是读过文档?
内存池
你们用RCU的方式去回收内存,在实践中还是很少的,你们为什么选用 RCU ?
在网络方面你做过相关的工作吗,有去实践过相关的实现吗?还是只是用过库代码?
在存储方向你有做过哪些研究,有过哪些尝试呢?
你之后的职业规划是怎样的呢?
离三面过了一个星期。我不知道这一面的面试官是不是交叉的P9,他只说了他是阿里云的。
这一面全都是coding,别的全都没问。我估计是因为二面三面没有编程,所以四面补一下。我应该是牛客网上第一个阿里四面全是编程的吧,也是第一个挂在四面编程题上的吧。
void print_uint32_t(uint32_T)
,函数可以将一个 uint32_t 打印到屏幕上。如 0 打印成 0,15 打印成 F,255 打印成 FF。把32位无符号整数转化为16进值,不算是常规题,如果现场写的话,需要时间
pair
的数组,请将他们插入到数据结构 TREAP 中(下面有解释)。面试官一开始说“你听说过TREAP这个结构吗?”的时候,我的心里简直是崩溃的,这都啥啥啥?
TREAP 是一种二叉树,每个节点有两个值 a 和 b, 要满足所有的 a 按照二叉搜索树的顺序排列,所有的 b 按照最小堆的顺序排列。面试官说插入的过程中二叉搜索树可以不平衡。
面对新的数据结构不知所措,我接连说了好几种思路面试官都说不对,最后我想出来一个思路 “先按照堆的方式进行插入,然后不符合搜索条件的再去旋转调整”(应该是这样说的),然后面试官说“这样是可以,但是太麻烦了,有没有简单一点的呢,你再想想”……最后22分钟过去了,我也没给出思路,面试官就给下一道题了。
我最后说的思路是类似C++,弄一个虚表存在对象的首地址上,也没来得及写代码。后来巨佬跟我说,应该是在struct里加一个type类型和大小,然后进行强制类型转换。
最后面试官问我,“你平时写C写的多吗”,“大学期间的代码行数有多少啊”,然后就说“我这边没什么要问的了”。自己知道表现太差,我也就没问他问题。
Anyway,秋招还是要继续,科研还是要继续,生活还是要继续……
一面
b+树的数据只在叶子节点
TCP 和 UDP 的区别?
什么是有连接?
通信双方建立起连接,像打电话一样,
手撸算法题
- 求一棵树当中任意两个节点最长路径长度
- 还有一题忘了。。
二面
这里堆排序问的比较多。堆结构的应用问的比较多
手撸算法题:
给一个乱序的数组 求中位数 (快排操作)
设计题:
两个跨行账户 A,B,A 向 B 转钱。如何设计这个系统?
三面
网页翻译使用的是 HTTP 的什么 API? post 将数据通过post上传给服务器,然后服务器处理后传回来
zero copy 相关
问了问项目
问了问获奖的情况
手撸算法题:
- 实现一个多线程打印奇偶数的程序
- 给你一个 list 都是父子节点的对,写个程序将其转换成森林,如果有环怎么处理?
hr 面
10月给出带薪资的 offer
一面(9月5日)
为什么研究生做CV,现在找研发岗位;
描述进程控制块PCB,进程控制块中进程的哪些信息;
这道题目问的比较深
http与https的区别,https为什么能保证安全,客户端与服务端通过https进行交互的过程;
https是http和SSL的结合
要详细描述以上图中的过程。
SQL中的几个基本命令,使用哪个命令可以在数据存在时进行更新数据,数据不存在的话则插入数据;
考察SQL
两个链表,找链表是否有交点,怎么找到交点;我说了自己思路后,面试官说让我使用栈来做一下(两个链表分别压入两个栈,如果栈顶元素相同的话说明有交点,然后同时pop,直到pop到两个栈的栈顶元素不相同的,说明刚才pop出来的结点是两个链表的交点);
讲一下自己对Java的理解,Java最大的特点,和其他语言相比有哪些鲜明的优势;
Java纯面向对象,工具和框架多
简单介绍一下单例模式、工厂模式、装饰着模式;
简单设计模式
Java中注解是干嘛用的,这个我没回答好,面试官应该是想让我讲一下对Java注解的理解;
输入一个URL,URL中有个要调用的方法的字符串,那从输入URL到服务端调用相应的方法,都经过了哪些过程,用到了什么技术;
DNS域名解析解析域名,TCP连接建立,HTTP请求,方法调用
面试官问我个人对哪些技术了解的比较深入,有什么优势,对于哪些内容有比较独特深入的理解;
我做一个项目的时候,会怎么着手去做,会去如何完成好一个项目;
写代码:(1)从一个数组中找连续子数组的最大和;(2)两个字符串的最长公共子串的长度;这两个都是动态规划里面的基础题目,从了leetcode上可以找到对应的题目;
描述Dijkstra算法;
图的算法问的比较少。
问我有什么问题;
二面(9月9日)
开始就先聊聊项目,项目多是CV相关的,简单聊了聊;
然后ConcurrentHashMap的实现原理;
AtomicInteger的实现原理,自己简单实现一下AtomicInteger中的increase()方法,写代码;
写代码实现一个装饰者模式;
两个一组翻转链表,写代码实现;
这道题有点难
写代码,算法题:给定一个非负数组,A、B俩人轮流从数组头部或尾部取元素,AB俩人都会以对自己最有利的方式取元素,直到数组元素取完,取到元素和最大的玩家赢,求先手能否赢得游戏。
二面的内容基本就是这些,算是写了4个代码题,基础知识方面基本没问。面试官看着帅气而且友善(都说小米面试官帅,还真是),让我见一见下一轮面试官吧,哈哈。
9.8 快手一面45min
Java多线程编程内容
多线程
线程池参数 扩容
主线程等待其他线程完成后再执行?
lock
reentrantlock实现原理
hashmap
concurrenthashmap
类加载器过程
jvm 直接内存
网络知识
url访问过程
http https
算法题:
1000面的骰子 各面出现的概率1:2:3:…:100
写一个函数返回每次返回的面
二面
算法题两整数相加 求进位次数
二维数组从左向右递增从上向下递增查询k
改进:优化
arraylist 扩容 构造函数
2 倍扩容
hashmap扩容
hashmap底层就有arraylist
多线程下hashmap会出现什么问题
需要加锁
concurrenthashmap扩容
tcp三次握手四次挥手
timewait和closewait
红黑树性质
大数据:spark hadop
面试官:看过你的博客(简历上写了),看你了解Hadoop,负载均衡,负载均衡都有哪些策略?
我:轮询、加权轮询、hash、最小负载
面试官:简历上写了“了解”linux和git,你使用linux的发行版本是什么?安装软件的命令?如何安装一个源里面没有的软件?如何创建指定权限的文件?
面试官:你如何学习的Java?我:先从JavaSE开始,然后做项目实践、再通过看视频学习JavaEE。
面试官:平时都看什么书?我:深入理解JVM、Effective Java、Java并发编程、Spring实战等。
面试官:Effective Java能看懂吗? 我:里面写的是Java规范、我的层次并没有达到这个境界,没看懂。
面试官:这是四大圣经之一,看不懂也正常。我:惊讶的表情(内心OS:竟然还有4个圣经,不是只有Thinking in Java吗)
面试官:交换机在哪层?
链路层
面试官:露出微笑,那路由器在哪层?
网络层
面试官:那链路层有啥设备?我:思考中:透明传输、封装成帧、插座检测。。。。然后说了不知道。。。我看面试官还在笑,我就反问,交换机是在链路层吗?
面试官:那我们来聊聊Java吧,重写和重载的区别是什么?
我:重写是发生在子类和父类之间,子类重写父类的方法要求方法名、参数都一样,而且访问修饰符要大于等于父类的。
面试官:那如果子类要去重写父类的一个方法,如果子类把返回值的类型给改了,那还是重写吗?我:思考了一会,说应该不是。
面试官:又笑着问:Thread类都有哪些方法?我:我能说我常用的一些吗?有sleep,yeild,join,stop,isInterrupted(),我竟然忘了说start和run?.
面试官:sleep和yeild有啥区别?我:前者是抱着锁睡眠,可以传入时间参数,后者是线程让步,可以让当前线程让出执行权,然后重新竞争执行权。
面试官:笑着问,还有吗?我:。。。。。
面试官:Object和Class有啥区别?我:。。。。Class类是Object类的父类(我竟然说这么逆天的话,说出来我自己都不信)。
面试官:一脸惊讶,笑着问我,不是说Object类是一切类的父类吗?我:我好像看到过有个继承关系(被jdk doc给坑了) 就是这张图的第一个红框浮现到我的脑海中,然后我就认为Class是Object的父类。。。。
面试官:现在有这么2个方法:是不是重载?我:想了会,一看参数不同,方法名相同,说是重载。
//1 public void m(String a, String b) {} //2 public void m(String a, String ...b){}
面试官:还有三个调用,分别会出现什么情况?我:蒙了一会,面试官说有点难,你好好想。我说第一个调用应该是执行第一个m方法,第三个应该会报错(实际上第三个是调用第二个m方法,面试官也说会报错。。。),我感觉第二个调用执行两个m都可以。
//1. m("A", "B"); //2. m("A", null); //3. m("A");
面试官:嗯。。。。你分析的有道理,所以第二个调用会报错。
面试官:(看了下我的简历)问Spring MVC和Spring Boot有什么区别?我:前者是实现MVC架构,或者将Controller使用RequestMapping给映射为http接口的,后者是属于微服务的范畴,我用后者去继承ssm框架。
面试官:那一个请求到了SpringMVC的流程是怎样的,能不能画一下?我:我知道是先被DispatcherServlet被接受,后面就不知道了(其实平时我还能扯一些出来,这实在是被虐的不行了)。。。。
面试官:看来你也只是使用,没有深入去了解它的原理。我:尴尬。。。。
面试官:那今天就到这里,你还有什么想问的吗?我:我觉得您给我的感觉和其他面试官不一样。
面试官:哪里不一样?我:其他面试官问的问题,我看一些面经什么的,基本上都差不多,您问的问题非常独到,是基础,但是也是我的盲点。
面试官:前些年,面试基本上都问HashMap什么的,这些估计你们都把源码都看完了,没什么好问的,这几年喜欢问高并发、ClassLoader、双亲委派,你们都能把他讲得很清楚,这个连我身边一些技术比较牛的同时都做不到。。所以我就很奇怪,然后后来就开始不问这些经常被问的问题了。
我:那您是比较看重基础?
面试官:不,我看重的是一个人的学习能力,潜力,就算你刷了多久多久的题,再牛,在我这里过不了,也不行,只要你在我这里过了,别人说你不行,你也行。我:哇,,,,,,真的是膜拜啊。
面试官:市面上的Java技术书我几乎都看过,大概300多本。我:哇。。。。。。
面试官:我对你简历非常感兴趣,我们组是全栈,我看你写了安卓,我还准备和你聊聊安卓,结果你说你安卓是别的同学做的。。。。我:尬笑。。。
面试官:我非常想你来我们组,和你一起合作,你在学校担任过职务,这对你的沟通能力也有帮助,但就是你的基础有点薄弱,这个非常可惜。我:尬笑。。。。并谢谢他给我机会。。。
完...