面试刷题9-10

1、自我介绍

2、项目(难点及贡献)

3、虚函数

4、多态

5、数据库了解吗(建议下来用c++与数据库实现一个项目)

回答了解

6、设计模式,讲了一下单例模式中的饿汉单例和懒汉单例

6、设计模式,讲了一下单例模式中的饿汉单例和懒汉单例

单例只有一个实例对象,饿汉式单例开始就初始化,懒汉式单例手动初始化

以上问题是C++最基础的问题,比较容易回答

1.自我介绍

2.final finally finalize的区别

3.重写与重载的区别 重写与重载哪个属于多态

4.static的作用,怎么用?能修饰类吗?修饰方法的话怎么调用,对象能调用吗?

5.有哪些索引,怎么用?

6.内存溢出知道吗?栈会内存溢出吗?

以上问题为Java最基础的问题

一面

  • 自我介绍
  • 实习项目
  • epoll 的好处?

当有IO事件发生时,直接将事件挂到相应的结构体上,内核中采用红黑树和共享内存,效率很高

  • 如何提高并发?

异步,非阻塞IO,线程池,IO多路复用等方法

  • 说一下协程?
  • 说一下协程的调度
  • 说一下在头条的工作
  • 数据分片策略
  • 说一下令牌池
  • kafka 原理了解多少
  • mmap

手撸算法题

给一个循环有序的数字查找目标元素。 

Leetcode原题,先找到分界点,然后在有序位置查找元素。

二面

  • 自我介绍

  • c++ 的 push_back 还有另一个插入方式是什么?有什么区别

push_back插入到最后,insert可以插入到任意位置,但效率低

  • 移动拷贝?

C++11 内容

  • vector 的扩容机制

当数组满的时候,重新找一个位置,两倍扩容。

  • 项目相关的问题

  • epoll 和 poll 的区别?

  • 进程间通信的方式有哪些

  • 之前面试的时间

  • 毕业时间

  • 对哪些感兴趣,想在哪些方面积累

  • 字节实习的工作

  • 工作当中最大的挑战

  • 业余爱好

手撸算法题

  • 两个有序数组合并

  • k 个有序数组归并

  • 输入一个 2 维数组,行和列都从小到大有序,判断给定的值是否存在

  • 定义整数的位数叫做整数的长度,定义一个整数的地位只要大于等于他的高位就是不下降。给一个值 k,求出所有长度为 k 以内的满足不下降的整数的个数。

前三道题目都是Leetcode原题 

三面

三面面试官在开会,2 面面试官沟通了一下,觉得直接可以过了,不需要再3 面。

所以 3 面就变成和 2 面面试官一起吃饭

8月 3 号拿到了依图的意向书参加了依图的 CTO 交流会

 

  • 编程题1 - 请实现 uint32_t IPtoInt(const string IP) ,函数可以将IP字符串(如 “127.0.0.1” )转换到一个 uint32_t 中去(如值为 0xef000001)。(细节:要处理各种异常)
  • 编程题2 - 给定一个 CAS (compare and swap) 函数的签名 int CAS(void** location, void* old, void* new),请实现一个无锁的链表。

 

这两道编程题都是新题,之前没有出现过。

二面 - 1小时2分钟

离一面过了两天。全程都在聊项目,没有编程,是我感觉压力最大的一次面试。面试官往下钻得非常深,而且很多问题都是看你有什么思考。

你们的分布式系统是如何接受事务请求的呢?
那你觉得怎样可以让整个系统可以均匀地进行服务,分配资源?
不说分布式系统吧,一台单机上你要怎么让多核心能够均衡的协调资源呢?
你是如何理解消息传递机制的?
Go里面有原生的消息传递机制对吧,那要是你需要在C++里实现一个,你觉得难度大吗,你会怎么做?
看过相关消息传递机制的源码吗?
你做了很多内存相关的内容,解决内存的争用有哪些方式?
能说说内存的段页式管理吗?
内存的段页式管理是为了解决什么问题?
那非线性地址映射能带来什么好处?

以上为项目相关
 

你学习的操作系统的知识,平时会有用到嘛?

进程,线程常用到
用过 C++11 对吧,C++11 的 memory order 了解吗?
有去了解过通用的内存池技术吗,是看过源码还是读过文档?

内存池
你们用RCU的方式去回收内存,在实践中还是很少的,你们为什么选用 RCU ?
在网络方面你做过相关的工作吗,有去实践过相关的实现吗?还是只是用过库代码?
在存储方向你有做过哪些研究,有过哪些尝试呢?
你之后的职业规划是怎样的呢?

 

四面 - 48分钟

离三面过了一个星期。我不知道这一面的面试官是不是交叉的P9,他只说了他是阿里云的。
这一面全都是coding,别的全都没问。我估计是因为二面三面没有编程,所以四面补一下。我应该是牛客网上第一个阿里四面全是编程的吧,也是第一个挂在四面编程题上的吧。

  • 编程题1 - 请实现 void print_uint32_t(uint32_T) ,函数可以将一个 uint32_t 打印到屏幕上。如 0 打印成 0,15 打印成 F,255 打印成 FF。

把32位无符号整数转化为16进值,不算是常规题,如果现场写的话,需要时间

  • 编程题2 - 给你提供一个 pair 的数组,请将他们插入到数据结构 TREAP 中(下面有解释)。

面试官一开始说“你听说过TREAP这个结构吗?”的时候,我的心里简直是崩溃的,这都啥啥啥?
TREAP 是一种二叉树,每个节点有两个值 a 和 b, 要满足所有的 a 按照二叉搜索树的顺序排列,所有的 b 按照最小堆的顺序排列。面试官说插入的过程中二叉搜索树可以不平衡。
面对新的数据结构不知所措,我接连说了好几种思路面试官都说不对,最后我想出来一个思路 “先按照堆的方式进行插入,然后不符合搜索条件的再去旋转调整”(应该是这样说的),然后面试官说“这样是可以,但是太麻烦了,有没有简单一点的呢,你再想想”……最后22分钟过去了,我也没给出思路,面试官就给下一道题了。

  • 编程题3 - 你觉得C里面的函数指针有什么用呢?(答:可以实现多态)那你用C的函数指针实现一个多态吧。

我最后说的思路是类似C++,弄一个虚表存在对象的首地址上,也没来得及写代码。后来巨佬跟我说,应该是在struct里加一个type类型和大小,然后进行强制类型转换。

最后面试官问我,“你平时写C写的多吗”,“大学期间的代码行数有多少啊”,然后就说“我这边没什么要问的了”。自己知道表现太差,我也就没问他问题。

Anyway,秋招还是要继续,科研还是要继续,生活还是要继续……


 

一面

  • 自我介绍
  • 说一下最近实习做的工作
    • Proxy 做什么
    • 预聚合是什么
    • 连续查询的生命周期?
    • 数据分片的策略?
  • mysql 的索引?
  • b+树和 B 树的差别?

b+树的数据只在叶子节点

TCP 和 UDP 的区别?

什么是有连接?

通信双方建立起连接,像打电话一样,

  • RAFT 协议?
    • 选举过程?
  • 多路复用?epoll
  • 阻塞 IO 非阻塞 IO?

手撸算法题

  • 求一棵树当中任意两个节点最长路径长度
  • 还有一题忘了。。

二面

  • 问发表的文章的工作
  • 研究生阶段的工作和课题
  • 说一下哪些常见的树结构
  • 说一下 有哪些平衡树
  • 说一下红黑树的限制条件
  • 说一下常见的排序
  • 有哪些排序是稳定的排序
  • 堆排序说一下?      (原地建堆过程)
  • 堆如何做调整?      (说下up和down)
  • 建堆的过程?
  • 说一下动态规划
  • 刷了多少题?

这里堆排序问的比较多。堆结构的应用问的比较多

手撸算法题:

给一个乱序的数组 求中位数            (快排操作)

设计题:

两个跨行账户 A,B,A 向 B 转钱。如何设计这个系统?

 

三面

  • 网页翻译使用的是 HTTP 的什么 API? post 将数据通过post上传给服务器,然后服务器处理后传回来

  • zero copy 相关

  • 问了问项目

  • 问了问获奖的情况

手撸算法题:

  • 实现一个多线程打印奇偶数的程序
  • 给你一个 list 都是父子节点的对,写个程序将其转换成森林,如果有环怎么处理?

hr 面

  • 自我介绍
  • 目前拿到的 offer
  • 为什么选择猿辅导
  • 了解猿辅导么
  • 工作地点
  • 未来 3 年的计划
  • 想做哪些方面?
  • 哪些问题问我?

10月给出带薪资的 offer

 

一面(9月5日)

为什么研究生做CV,现在找研发岗位;

描述进程控制块PCB,进程控制块中进程的哪些信息;

这道题目问的比较深

http与https的区别,https为什么能保证安全,客户端与服务端通过https进行交互的过程;

https是http和SSL的结合

面试刷题9-10_第1张图片

要详细描述以上图中的过程。

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给坑了)面试刷题9-10_第2张图片 就是这张图的第一个红框浮现到我的脑海中,然后我就认为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多本。我:哇。。。。。。

面试官:我对你简历非常感兴趣,我们组是全栈,我看你写了安卓,我还准备和你聊聊安卓,结果你说你安卓是别的同学做的。。。。我:尬笑。。。

面试官:我非常想你来我们组,和你一起合作,你在学校担任过职务,这对你的沟通能力也有帮助,但就是你的基础有点薄弱,这个非常可惜。我:尬笑。。。。并谢谢他给我机会。。。

完...

 

 

 

 

 

你可能感兴趣的:(算法)