因为在原公司待的不是很开心,然后决定裸辞了(千万不要裸辞!!!一方面心理压力比较大。另一方面也可能会被压薪资)
裸辞之后没着急找工作,因为原先做的东西比较偏底层,所以也是学习了一段时间先拿小公司练练手,大厂问的东西无外乎项目、基础、算法,这些的话楼主推荐几本书,基本问的东西都在这里面了《Redis设计与实现》、《Mysql技术内幕 InnoDB存储引擎》、《TCP-IP详解卷一》、《HTTP权威指南》、《深入理解Linux内核》、《研磨设计模式》、《数据结构与算法分析-c语言描述》机械工业的那个 我这边是应聘go的开发,学习go的话推荐《Go并发编程实战》、林海的《Go源码解析》最好源码和书一起看
这篇挺长的,抽着看吧
百度
一面
- redis和etcd的区别
从数据结构方面来讲 Redis支持多种数据类型(string,set,list,hash,zset)
从读写性能上来讲,Redis读写性能优异,并且提供了RDB、AOF持久化,而etcd v3的底层采用boltdb做存储,value直接持久化
从使用场景上来看,etcd更适用于服务发现,配置管理,而Redis更适用于非强一致性的需求,比如说是队列,缓存,分布式Session
两者都是KV存储,但是etcd通过Raft算法保证了各个节点间的数据和事务的一致性,更强调各个节点间的通信;Redis则时更像是内存式的缓存,因此来说读写能力很强。
Redis是c开发的,etcd是go开发的,他是源于k8s的兴起作为一个服务发现。
etcd v3只能通过gRPC访问,而redis可以通过http访问,因此etcd的客户端开发工作量高很多。
etcd的Raft算法介绍一下
ping指令的实现,涉及到哪些协议
linux的用户态和内核态,什么时候切换到内核态
为什么说线程的切换比协程要慢
redis、etcd 分布式锁的实现
redis string类型的底层实现
和c语言string的区别
获取字符串长度只需要O(1)的时间复杂度,程序仅需要访问SDS的len属性即可
c语言会产生缓冲区溢出,在Redis中如果需要对SDS进行修改时,API回显检查SDS的空间是否满足修改所需要的要求,如果不满足的话,API会自动将SDS的空间拓展到执行修改所需要的大小,然后才执行实际的修改操作
减少修改字符串时带来的内存重分配次数,SDS通过free属性记录未使用的字节,通过未使用空间,SDS实现了空间预分配和惰性空间释放两种优化策略。是的修改字符串长度N次最多需要执行N次的内存重分配。
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的过程
客户端请求网址,服务器接收到请求后返回证书公钥
客户端验证证书的有效性和合法性,然后生成一个随机值
客户端通过证书的公钥加密随机值,将加密后的密钥发送给服务器
服务器通过私钥解密密钥,通过解密后的密钥加密要发送的内容
客户端通过密钥解密接受的内容
http keep-alive的作用
755 是什么权限? 详细见linux权限入门
7=rwx=4+2+1 5=rx
拥有者可读可写可执行 群组可读可执行 其他组可读可执行linux 查找当前文件后20行
tail -n 20 filenamelinux统计字符出现的个数
grep -o objStr filename|wc -lepoll和poll的区别
本质都是IO多路复用算法题 10进制转7进制
算法题 判断数独的有效性
二面
撕AVL树 撕哈希表
最新2020整理收集的一些面试题(都整理成文档),有很多干货,包含mysql,netty,spring,线程,spring cloud、jvm、源码、算法等详细讲解,也有详细的学习规划图,面试题整理等,需要获取这些内容的朋友关注作者简书【AI乔治】,然后打开作者个人简介按照下图操作扫码免费获取资料-添加备注【简书】即可
知乎
一面
项目
redis的多集群方案
mysql的b+索引
golang的内存分配机制
golang的多态实现
interface的底层实现
二面
只问了两道算法
连续子序列的最大和并返回所有序列
另一道忘了
三面
非递归形式的前序遍历
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 里的函数在堆上申请的空间也不能被 垃圾回收器 回收。
-
空结构体的用处
空结构体不占用内存空间实现set
实现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乔治】,然后打开作者个人简介按照下图操作扫码免费获取资料-添加备注【简书】即可
有疑问加站长微信联系(非本文作者)