一年北漂Java妹子,上周刚面试回来后的面试总结,已收获6个offer,建议近期在找工作的收藏必看

AI乔治 · · 2797 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

因为在原公司待的不是很开心,然后决定裸辞了(千万不要裸辞!!!一方面心理压力比较大。另一方面也可能会被压薪资)
裸辞之后没着急找工作,因为原先做的东西比较偏底层,所以也是学习了一段时间先拿小公司练练手,大厂问的东西无外乎项目、基础、算法,这些的话楼主推荐几本书,基本问的东西都在这里面了《Redis设计与实现》、《Mysql技术内幕 InnoDB存储引擎》、《TCP-IP详解卷一》、《HTTP权威指南》、《深入理解Linux内核》、《研磨设计模式》、《数据结构与算法分析-c语言描述》机械工业的那个 我这边是应聘go的开发,学习go的话推荐《Go并发编程实战》、林海的《Go源码解析》最好源码和书一起看

这篇挺长的,抽着看吧

百度

一面

  • redis和etcd的区别
  1. 从数据结构方面来讲 Redis支持多种数据类型(string,set,list,hash,zset)

  2. 从读写性能上来讲,Redis读写性能优异,并且提供了RDB、AOF持久化,而etcd v3的底层采用boltdb做存储,value直接持久化

  3. 从使用场景上来看,etcd更适用于服务发现,配置管理,而Redis更适用于非强一致性的需求,比如说是队列,缓存,分布式Session

  4. 两者都是KV存储,但是etcd通过Raft算法保证了各个节点间的数据和事务的一致性,更强调各个节点间的通信;Redis则时更像是内存式的缓存,因此来说读写能力很强。

  5. Redis是c开发的,etcd是go开发的,他是源于k8s的兴起作为一个服务发现。

  6. etcd v3只能通过gRPC访问,而redis可以通过http访问,因此etcd的客户端开发工作量高很多。

  • etcd的Raft算法介绍一下

  • ping指令的实现,涉及到哪些协议

  • linux的用户态和内核态,什么时候切换到内核态

  • 为什么说线程的切换比协程要慢

  • redis、etcd 分布式锁的实现

  • redis string类型的底层实现

  • 和c语言string的区别

  1. 获取字符串长度只需要O(1)的时间复杂度,程序仅需要访问SDS的len属性即可

  2. c语言会产生缓冲区溢出,在Redis中如果需要对SDS进行修改时,API回显检查SDS的空间是否满足修改所需要的要求,如果不满足的话,API会自动将SDS的空间拓展到执行修改所需要的大小,然后才执行实际的修改操作

  3. 减少修改字符串时带来的内存重分配次数,SDS通过free属性记录未使用的字节,通过未使用空间,SDS实现了空间预分配和惰性空间释放两种优化策略。是的修改字符串长度N次最多需要执行N次的内存重分配。

  4. c字符串只能保存文本数据,SDS可以保存文本或者二进制数据

二面

二面基本是场景设计题,具体忘了,有一说一百度面试体验很好,和面试官一起探讨解决的办法
之后有一道智力题吧,有10个元素存到长度为12的数组中,有两个元素重复,找出这两个元素

比如a+b通过把元素累加在进行减法运算可以得到a+b
通过累乘再进行除法运算可以得到a*b的值
考虑到假如元素溢出,那么可已通过平方累加得到a2+b2的值
根据关系式可以求得a,b的值

三面

  • go和java的区别
    可以从多个角度来讲 比如面向对象来说,多态继承等等
    从运行速度来讲,go的并发模型 channel和goroutine
    从包管理来讲,go mod 包括之前的dep等等

  • go的gmp调度原理

  • cpu的上下文切换问题

  • channel有无缓冲槽的区别
    主要还是从同步和异步来讲

  • redis的zset实现

  • 负载均衡实现
    几道算法题 现场手写的
    堆排的一道问题,string化整型,链表反转

四面

手写了两道算法,单链表的中间节点 一道dp题目 百度的算法题目都是easy到meduim级别的
然后对项目问的比较细,比如在实现的虚拟链路中keepalive是怎么实现的啊,有什么可以优化的点吗
怎么查找程序的性能瓶颈等等

最新2020整理收集的一些面试题(都整理成文档),有很多干货,包含mysql,netty,spring,线程,spring cloud、jvm、源码、算法等详细讲解,也有详细的学习规划图,面试题整理等,需要获取这些内容的朋友关注作者简书【AI乔治】,然后打开作者个人简介按照下图操作扫码免费获取资料-添加备注【简书】即可


滴滴 自动驾驶Vovager

一面

主要是项目和部分基础知识这里记不太清了
算法 剑指63 股票问题
dp[i]=max(dp[i-1],num[i]-num[j])

`func maxProfit(prices []``int``) ``int` `{`

`size := len(prices)`

`if` `size==``0``||size==``1``{`

`return` `0`

`}`

`profit := ``0`

`cost := prices[``0``]`

`for` `i := ``1``; i < size; i++ {`

`cost = min(prices[i], cost)`

`profit = max(profit, prices[i]-cost)`

`}`

`return` `profit`

`}`

问了能不转py

二面

二面主要问了项目以及一道算法题和场景设计题,我个人觉得不具有总结性

三面

*epoll和poll的区别
三面送命了,顺时针打印矩阵,一般按层模拟就好了,我也不知道怎么脑子就抽了


`func spiralOrder(matrix [][]``int``) []``int` `{`

`if` `matrix == nil || len(matrix) == ``0` `|| len(matrix) == ``0` `{`

`return` `[]``int``{}`

`}`

`top := ``0`

`hsize := len(matrix)`

`lsize := len(matrix[``0``])`

`left := ``0`

`bottom := hsize - ``1`

`right := lsize - ``1`

`index := ``0`

`x, y := ``0``, ``0`

`sum := make([]``int``, hsize*lsize)`

`for` `bottom >= top && right >= left {`

`for` `x = left; x <= right; x++ {`

`sum[index] = matrix[top][x]`

`index++`

`}`

`for` `y = top + ``1``; y <= bottom; y++ {`

`sum[index] = matrix[y][right]`

`index++`

`}`

`if` `bottom > top && right > left {`

`for` `x = right - ``1``; x > left; x-- {`

`sum[index] = matrix[bottom][x]`

`index++`

`}`

`for` `y = bottom; y > top; y-- {`

`sum[index] = matrix[y][left]`

`index++`

`}`

`}`

`left++`

`right--`

`top++`

`bottom--`

`}`

`return` `sum`

`}`

最新2020整理收集的一些面试题(都整理成文档),有很多干货,包含mysql,netty,spring,线程,spring cloud、jvm、源码、算法等详细讲解,也有详细的学习规划图,面试题整理等,需要获取这些内容的朋友关注作者简书【AI乔治】,然后打开作者个人简介按照下图操作扫码免费获取资料-添加备注【简书】即可


Aibee

一面

  • 数组中找出和为k的两个元素返回下标 模板题了
    另一道有意思的题目可以参考leetcode 560题

  • 无头结点的链表元素删除

  • 排行榜的设计

  • https加密过程

  • InnoDb的索引模型 详细一些

  • 覆盖索引和非覆盖索引的区别

二面

算法和股票差不多
根据项目延伸来问的一些问题

  • slice的底层实现

  • gmp调度模型

  • golang的gc回收

  • tcp的粘包问题

  • mysql隔离级别

三面

没啥好说的 和面试官互相吹牛逼了

最新2020整理收集的一些面试题(都整理成文档),有很多干货,包含mysql,netty,spring,线程,spring cloud、jvm、源码、算法等详细讲解,也有详细的学习规划图,面试题整理等,需要获取这些内容的朋友关注作者简书【AI乔治】,然后打开作者个人简介按照下图操作扫码免费获取资料-添加备注【简书】即可


小米

一面

  • Redis缓存策略

  • 分布式CAP原理

  • Mysql事务的隔离级别 分别解决了哪些问题?

  • mysql的存储引擎的区别?

  • Redis持久化的区别

  • Grpc的过程

二面

怼了项目 业务上不合适

  • 怎么限制goroutine的数量?

  • redis为什么快?


字节跳动

一面

  • https的过程

    1. 客户端请求网址,服务器接收到请求后返回证书公钥

    2. 客户端验证证书的有效性和合法性,然后生成一个随机值

    3. 客户端通过证书的公钥加密随机值,将加密后的密钥发送给服务器

    4. 服务器通过私钥解密密钥,通过解密后的密钥加密要发送的内容

    5. 客户端通过密钥解密接受的内容

  • http keep-alive的作用

  • 755 是什么权限? 详细见linux权限入门
    7=rwx=4+2+1 5=rx
    拥有者可读可写可执行 群组可读可执行 其他组可读可执行

  • linux 查找当前文件后20行
    tail -n 20 filename

  • linux统计字符出现的个数
    grep -o objStr filename|wc -l

  • epoll和poll的区别
    本质都是IO多路复用

  • 算法题 10进制转7进制

  • 算法题 判断数独的有效性

二面

撕AVL树 撕哈希表

最新2020整理收集的一些面试题(都整理成文档),有很多干货,包含mysql,netty,spring,线程,spring cloud、jvm、源码、算法等详细讲解,也有详细的学习规划图,面试题整理等,需要获取这些内容的朋友关注作者简书【AI乔治】,然后打开作者个人简介按照下图操作扫码免费获取资料-添加备注【简书】即可


知乎

一面

项目

  • redis的多集群方案

  • mysql的b+索引

  • golang的内存分配机制

  • golang的多态实现

  • interface的底层实现

二面

只问了两道算法
连续子序列的最大和并返回所有序列
另一道忘了

三面

  1. 非递归形式的前序遍历

  2. k个有序链表合并

项目问题

  • golang的context包

  • string类型转为[]byte过程发生了什么

  • redis的数据类型及底层实现

  • mysql聚集索引和非聚集索引底层实现

  • b+树和红黑树

腾讯

一面

之前看面经听说腾讯面试官惜字如金,果真就想几个字骗一段话啊

  • golang的多路复用

  • fasthttp为什么快

  • pprof使用

  • 性能调优怎么做

  • http2.0的多路复用怎么实现的

  • 最大连续子序列和

  • mysql怎么监控流量

  • golang调度 能不能不要p

  • 负载均衡哪些算法?

二面

二面基本围绕项目拓展来说的 人家说你简历写的我不问。。
场景设计 秒杀、抽奖、推荐 三剑客
etcd和zk的区别
etcd的Raft算法详细讲一下

三面

项目细问包括一些基础问题没啥好讲的
职业规划等等


BIGO

  • prometheus实际使用

  • linux tcp 半连接

  • 常见的linux指令
    tail pwd chmod lsof netstat top

  • 实现一个压测工具
    golang编写一个http客户端,支持参数httprequest -c 5 -r 1000 http://**** 客户端,输出所有响应

  • string类型加法实现

  • sql题


    `CREATE TABLE IF NOT EXISTS `mytable` (`

    ``id` bigint(``20``) unsigned NOT NULL AUTO_INCREMENT,`

    ``video_id` bigint unsigned NOT NULL DEFAULT ``0``,`

    ``uid` ``int` `unsigned NOT NULL DEFAULT ``0``,`

    ``country` varchar(``194``)  NOT NULL ,`

    ````class``` varchar(``64``)  NOT NULL ,`

    ``status` tinyint(``4``) unsigned NOT NULL DEFAULT ``'0'``,`

    ``video_view` bigint(``20``) unsigned NOT NULL DEFAULT ``'0'``,`

    ``created` timestamp  NOT NULL DEFAULT CURRENT_TIMESTAMP,`

    `PRIMARY KEY (`

    ``id``

    `)`

    `) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;`

    `SELECT * FROM mytable WHERE created > ? AND ``class` `= ? AND country IN (?) ORDER BY created DESC LIMIT ``100``;`

    `SELECT * FROM mytable WHERE ``class` `= ? AND country IN (?) ORDER BY video_view DESC LIMIT ``100``;`

    `SELECT * FROM mytable WHERE created > ? AND ``class` `IN (?) LIMIT ``100``;`

    `SELECT * FROM mytable WHERE created > ? AND country IN (?) LIMIT ``100``;`

怎么建索引?

  • map如何实现顺序读取
    空间换时间
    借助额外的数据结构比如slice 等,对key进行排序,遍历slice得到顺序输出

  • 协程泄***r>如果你启动了一个 goroutine,但并没有符合预期的退出,直到程序结束,此goroutine才退出,这种情况就是 goroutine 泄露。当 goroutine 泄露发生时,该 goroutine 的栈(一般 2k 内存空间起)一直被占用不能释放,goroutine 里的函数在堆上申请的空间也不能被 垃圾回收器 回收。

  • 空结构体的用处
    空结构体不占用内存空间

    1. 实现set

    2. 实现chan struct{} 不占用内存空间,实现传递信号的通道
      剩下的忘了一直在看表了想着还不结束, 面了两个小时

最新2020整理收集的一些面试题(都整理成文档),有很多干货,包含mysql,netty,spring,线程,spring cloud、jvm、源码、算法等详细讲解,也有详细的学习规划图,面试题整理等,需要获取这些内容的朋友关注作者简书【AI乔治】,然后打开作者个人简介按照下图操作扫码免费获取资料-添加备注【简书】即可


面试总结

不知道你们看完了发现没,就一个百度,就要懂很多知识点,那如果阿里巴巴,支付宝,华为、等一线大厂呢?是不是感觉自己还要学习的还有很多~

经过这次面试,我总结一下几点:

1、基本语法

这包括static、final、transient等关键字的作用,foreach循环的原理等等。今天面试我问你static关键字有哪些作用,如果你答出static修饰变量、修饰方法我会认为你合格,答出静态块,我会认为你不错,答出静态内部类我会认为你很好,答出静态导包我会对你很满意,因为能看出你非常热衷研究技术。

2、集合

非常重要,也是必问的内容。基本上就是List、Map、Set,问的是各种实现类的底层实现原理,实现类的优缺点。集合要掌握的是ArrayList、LinkedList、Hashtable、HashMap、ConcurrentHashMap、HashSet的实现原理,能流利作答,当然能掌握CopyOnWrite容器和Queue是再好不过的了。另外多说一句,ConcurrentHashMap的问题在面试中问得特别多,大概是因为这个类可以衍生出非常多的问题,关于ConcurrentHashMap,我给网友朋友们提供三点回答或者是研究方向:

(1)ConcurrentHashMap的锁分段技术

(2)ConcurrentHashMap的读是否要加锁,为什么

(3)ConcurrentHashMap的迭代器是强一致性的迭代器还是弱一致性的迭代器

3、设计模式

设计模式在工作中还是非常重要、非常有用的,23种设计模式中重点研究常用的十来种就可以了,面试中关于设计模式的问答主要是三个方向:

(1)你的项目中用到了哪些设计模式,如何使用

(2)知道常用设计模式的优缺点

(3)能画出常用设计模式的UML图

4、多线程

这也是必问的一块了。会问得深入一些比如说Thread和Runnable的区别和联系、多次start一个线程会怎么样、线程有哪些状态。当然这只是最基本的,出乎意料地,几次面试几乎都被同时问到了一个问题,问法不尽相同,总结起来是这么一个意思:假如有Thread1、Thread2、Thread3、Thread4四条线程分别统计C、D、E、F四个盘的大小,所有线程都统计完毕交给Thread5线程去做汇总,应当如何实现?

聪明的网友们对这个问题是否有答案呢?不难,java.util.concurrent下就有现成的类可以使用。

另外,线程池也是比较常问的一块,常用的线程池有几种?这几种线程池之间有什么区别和联系?线程池的实现原理是怎么样的?实际一些的,会给你一些具体的场景,让你回答这种场景该使用什么样的线程池比较合适。最后,虽然这次面试问得不多,但是多线程同步、锁这块也是重点。synchronized和ReentrantLock的区别、synchronized锁普通方法和锁静态方法、死锁的原理及排查方法等等

5、IO

IO分为File IO和Socket IO,File IO基本上是不会问的,问也问不出什么来,平时会用就好了,另外记得File IO都是阻塞IO。Socket IO是比较重要的一块,要搞懂的是阻塞/非阻塞的区别、同步/异步的区别,借此理解阻塞IO、非阻塞IO、多路复用IO、异步IO这四种IO模型,Socket IO如何和这四种模型相关联。这是基本一些的,深入一些的话,就会问NIO的原理、NIO属于哪种IO模型、NIO的三大组成等等,这有些难,当时我也是研究了很久才搞懂NIO。提一句,NIO并不是严格意义上的非阻塞IO而应该属于多路复用IO,面试回答的时候要注意这个细节,讲到NIO会阻塞在Selector的select方法上会增加面试官对你的好感。如果用过Netty,可能会问一些Netty的东西,毕竟这个框架基本属于当前最好的NIO框架了(Mina其实也不错,不过总体来说还是比不上Netty的),大多数互联网公司也都在用Netty。

6、JDK源码

要想拿高工资,JDK源码不可不读。上面的内容可能还和具体场景联系起来,JDK源码就是实打实地看你平时是不是爱钻研了。

JDK源码其实没什么好总结的,纯粹看个人,总结一下比较重要的源码:

(1)List、Map、Set实现类的源代码

(2)ReentrantLock、AQS的源代码

(3)AtomicInteger的实现原理,主要能说清楚CAS机制并且AtomicInteger是如何利用CAS机制实现的

(4)线程池的实现原理

(5)Object类中的方法以及每个方法的作用

7、框架

老生常谈,面试必问的东西。一般来说会问你一下你们项目中使用的框架,然后给你一些场景问你用框架怎么做,比如我想要在Spring初始化bean的时候做一些事情该怎么做、想要在bean销毁的时候做一些事情该怎么做、MyBatis中$和#的区别等等,这些都比较实际了,平时积累得好、有多学习框架的使用细节自然都不成问题。

如果上面你的问题答得好,面试官往往会深入地问一些框架的实现原理。问得最多的就是Spring AOP的实现原理,当然这个很简单啦,两句话就搞定的的事儿,即使你不会准备一下就好了。

8、数据库

数据库十有八九也都会问到。一些基本的像union和union all的区别、left join、几种索引及其区别就不谈了,比较重要的就是数据库性能的优化,如果对于数据库的性能优化一窍不通,那么有时间,还是建议你在面试前花一两天专门把SQL基础和SQL优化的内容准备一下。

不过数据库倒是不用担心,一家公司往往有很多部门,如果你对数据库不熟悉而基本技术又非常好,九成都是会要你的,估计会先把你放到对数据库使用不是要求非常高的部门锻炼一下。

9、数据结构和算法分析

数据结构和算法分析,对于一名程序员来说,会比不会好而且在工作中绝对能派上用场。数组、链表是基础,栈和队列深入一些但也不难,树挺重要的,比较重要的树AVL树、红黑树,可以不了解它们的具体实现,但是要知道什么是二叉查找树、什么是平衡树,AVL树和红黑树的区别。

10、Java虚拟机

Java虚拟机应该是很重要的一块内容,谈谈Java虚拟机中比较重要的内容

ava虚拟机的内存布局

GC算法及几种垃圾收集器

类加载机制,也就是双亲委派模型

Java内存模型

happens-before规则

volatile关键字使用规则

也许这些内容面试无用,但在走向大牛的路上,不可不会。

11、Web方面的一些问题

Java主要面向Web端,因此Web的一些问题也是必问的。

谈谈分布式Session的几种实现方式?(常用的四种能答出来自然是让面试官非常满意的)

讲一下Session和Cookie的区别和联系以及Session的实现原理

这两个问题之外,web.xml里面的内容是重点,Filter、Servlet、Listener,不说对它们的实现原理一清二楚吧,至少能对它们的使用知根知底。另外,一些细节的方面比如get/post的区别、forward/重定向的区别、HTTPS的实现原理也都可能会被考察到。

最后,如果有兴趣有时间,建议学习、研究一下SOA和RPC,面向服务体系,大型分布式架构必备,救命良方、包治百病、屡试不爽。

最新2020整理收集的一些面试题(都整理成文档),有很多干货,包含mysql,netty,spring,线程,spring cloud、jvm、源码、算法等详细讲解,也有详细的学习规划图,面试题整理等,需要获取这些内容的朋友关注作者简书【AI乔治】,然后打开作者个人简介按照下图操作扫码免费获取资料-添加备注【简书】即可


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2797 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传