5.红黑数是二叉树,B树和B+树是N叉树,层数更浅,可以减少磁盘IO次数8.常规问题,zset底层是跳跃表,9.不可以用红黑树,红黑树不支持范围查询。10.select,poll
5. 红黑数是二叉树,B树和B+树是N叉树,层数更浅,可以减少磁盘IO次数
8. 常规问题,zset底层是跳跃表,
9.不可以用红黑树,红黑树不支持范围查询。
10. select,poll,epoll
11. 常规问题
12. 类加载的时候,先调用类加载器父类的方法
13.
14.
15.
网易互娱初级
一面
1.自我介绍,简历项目
我简历上的项目是java的,所以感觉面试官也不咋感兴趣
2.C++虚函数继承
并不会C++,所以后面都问的Java
3.Java中GC的过程,分代回收的具体细节
Java就只问了这个问题,二面也就问了这一个
4.树的中序遍历
代码实现,但是我递归遍历的终止条件写错了,后面就问了个更简单的
5.斐波那契
递归,非递归,空间优化,
6.两数之和,三数之和
7.socket编程,工作在哪层,具体流程
回答了C语言socket编程的过程,两个套接字,侦听的和通信的两个套接字
由于我不会C++,所以感觉这一面偏简单。
二面
1.自我介绍,简历项目
2.Java和C++的区别,C++为什么比java快
字节码和机器码,虚拟机和解释器
3.Java GC过程
一面也是这问题,又答了一遍
4.数据结构设计
设计一个队列,可以查询队列中的最大值,入队,出队的时间复杂度
5.数据结构设计
实现一个队列,入队、出队随机删除,给定位置,给定值,查询值所在的位置,以及操作的时间复杂度
6.游戏相关
由于我简历上写了炉石传说老玩家,所以问了炉石传说的问题
一、什么时候开始玩的,当时玩的卡组是啥,现在炉石的活动参加了吗
二、炉石传说中变羊和火球作为两张解牌的区别,竞技场中什么时候抓变羊什么时候抓火球
总体来说,因为我不会C++,所以也没怎么问编程语言,算法感觉也偏简单。
二面面试官还提醒我参加炉石传说马上就有的活动,两面体验都很好,就是隔得时间有点久。
最后求个HR面和offer。
首先是自我介绍,每人说完自己的自我介绍,然后就开始挨个提问。不过好的是,本科和研究生分开的,不然我这个双非本科怕是话都插不上。面试官主要是对项目问问题,然后对技术进行延伸,包括java多线程,后端的框架什么的,反正我也不懂。数据库考的是左外连接和右外连接的区别,还有就是事务的ACID特性。网络提到了http。还有问前端优化什么的,比如说怎样使网页加载更快。还有linux常用的命令,这个挺简单的。c问的就是结构体里面的计算内存大小,堆和栈的区别,还有static修饰函数和变量后的作用。
5. 输出下列的三角形
1
1 2
1 2 3
1 2 3 4
。。。。。
6. 进程和线程的区别
7. tcp都有哪些状态
8. tcp的特点是什么
面向连接可靠的字节流传输协议
3. 瓜子一面(大概40分钟)
1. 输出所有的互不重复的五位数
组合的方法
2. n个人围成一个圈,依次报数,报到m的人出圈,然后再从下一个开始报,问最后一个人第几个出圈的人
约瑟夫问题
3. 死锁产生的条件
(1)互斥条件
(2)占有且等待
(3)不可强制占有
(4)循环等待
4. 全双工和半双工
单工数据传输只支持数据在一个方向上传输;
半双工数据传输允许数据在两个方向上传输,但是,在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信;
5. tcp的半连接是什么
T C P提供了连接的一端在结束它的发送后还能接收来自另一端数据的能力。这就是所谓
下载
6. tcp的三次握手四次挥手说一下
7. time_wait是什么
8. 说一下虚拟内存
虚拟内存是计算机系统内存管理的一种技术。它使得应用程序认为它拥有连续的可用的内存(一个连续完整的地址空间),而实际上,它通常是被分隔成多个物理内存碎片,还有部分暂时存储在外部磁盘存储器上,在需要时进行数据交换。
9. 物理内存只有4g,两个进程,每个进程都需要4g的内存,那么这两个进程可以同时运行吗
不可以
10. 共享锁,排它锁,乐观锁的区别
11. https过程中,私钥的作用是什么,客户端如何判断服务器证书的安全性
有效的证书需要由权威机构CA签名,CA会用自己的私钥来生成数字签名。这个权威机构CA客户端是可以完全信任的,客户端浏览器会安装CA的根证书,由CA签名的证书是被CA所信任的,这就构成了信任链,
瓜子二面(大概40分钟)
1. 死锁产生的条件
2. 写一个死锁的例子
3. 写一个单例模式,多线程访问怎么办
写双重校验的线程安全的单例
4. 一个字符串,按照字符出现的次数输出
5. mysql索引的结构,b+树和b树的区别,b+树有什么优点
6. redis为什么检索快
内存操作
7. redis为什么使用单线程,单线程的好处是什么
减少多线程上下文切换的开销
8. 讲一下COOKIE和session,为什么需要使用COOKIE和session
记录客户端的连接状态
9. 范围查询时索引如何使用
4. 最右一面(大概半小时)
最右面试的体验可以说是不怎么好了,当时是在学校来宣讲,然后现场笔试,第二天去面试,结果去面试的时候面试官就问了几个问题,都是算法的,然后就没了。
1. 给一个整数n,就n的平方根的整数部分,算法的时间复杂度是多少,怎么用二分法求
2. 非递归写二叉树的前序遍历
3. 写一个最长回文子串
4. 写一个反转二叉树(镜像二叉树)
5. 将一些快排的思想,怎么找第k大的数
6. 晨星一面(大概30分钟)
1. 介绍一下自己
2. tcp的三次握手和四次挥手讲一下,握手为什么是三次
3. 如果请求网站的时候发现你请求的特别慢,怎么分析原因,如果你请求的服务器距离很远,速度会慢,这怎么办
4. drop,delete,trunact之间的区别,delete 不加条件删除时和truncate的区别是什么
5. 讲一下面向对象的特性,分别介绍一下
6. 继承的作用是什么,多态的作用是什么
7. 重写和重载的区别是什么
8.hashmap和hashtable的区别
9. 聚集索引和非聚集索引的区别
10. 知道哪些开源框架,mvc,aop了解吗
1)所谓静态常量池,即*.class文件中的常量池,class文件中的常量池不仅仅包含字符串(数字)字面量,还包含类、方法的信息,占用class文件绝大部分空间。
2)而运行时常量池,则是jvm虚拟机在完成类装载操作后,将class文件中的常量池载入到内存中,并保存在方法区中,我们常说的常量池,就是指方法区中的运行时常量池。
为什么要用常量池啊?
jvm 在栈帧(frame) 中进行操作数和方法的动态链接(link),为了便于链接,jvm 使用常量池来保存跟踪当前类中引用的其他类及其成员变量和成员方法。
每个栈帧(frame)都包含一个运行常量池的引用,这个引用指向当前栈帧需要执行的方法,jvm使用这个引用来进行动态链接。
在 c/c++ 中,编译器将多个编译期编译的文件链接成一个可执行文件或者dll文件,在链接阶段,符号引用被解析为实际地址。java 中这种链接是在程序运行时动态进行的。
静态常量池的好处是什么啊?
常量池是为了避免频繁的创建和销毁对象而影响系统性能,其实现了对象的共享。
说下创建一个类在JVM中的过程是怎么样的?
你说下volatile,他的底层是怎么样的?
怎么保证的可见性?
如果我有很多的线程同时访问,我能用使用vovalile吗?
怎么用volatile线程安全?
单例模式的volatile是干嘛的?
禁止指令重排
第7行的代码创建了一个对象,这一行代码可以分解成3个操作
Copy
memory = allocate(); // 1:分配对象的内存空间
ctorInstance(memory); // 2:初始化对象
instance = memory; // 3:设置instance指向刚分配的内存地址
根源在于代码中的2和3之间,可能会被重排序。例如:
Copy
memory = allocate(); // 1:分配对象的内存空间
instance = memory; // 3:设置instance指向刚分配的内存地址
// 注意,此时对象还没有被初始化! ctorInstance(memory); // 2:初始化对象java
这在单线程环境下是没有问题的,但在多线程环境下会出现问题:B线程会看到一个还没有被初始化的对象。
A2和A3的重排序不影响线程A的最终结果,但会导致线程B在B1处判断出instance不为空,线程B接下来将访问instance引用的对象。此时,线程B将会访问到一个还未初始化的对象。
你说下你的秒杀项目是怎么保证健壮性的?
你用了什么方式?
秒杀的核心业务是什么?
怎么防止超卖超卖?
加锁并发现太低了,怎么提高并发?
redis队列说说看?
redisson分段锁你怎么实现?
你用什么作为分段锁的标识?如果是多个不同的IP同时访问怎么保证唯一性呢 ?
09.02 小米面试 35min
1. 自我介绍
2. final 关键字
修饰方法,修饰变量,修饰类
3. static关键字
修饰变量,修饰方法,修饰静态内部类
4. 实习项目中的并发操作
5. 对线程池的了解
6. 为什么会产生死锁
7. java并发 wait 和sleep的区别
8. 设计模式,观察者模式
9. 写反转链表
问题 15min ,代码大概十几分钟,最后问我有什么问题
10.11 小米 二面 33min
隔了一个多月,以为凉了呢
竟然又通知了二面
1. 自我介绍
2. 排序算法了解么,写一下快排
3. 还有什么排序算法,插入排序如何改进为 nlogn的时间复杂度,什么排序算法效率最高呢
4. 什么情况下要用什么排序算法?
5. java 接口和抽象类
6. 为什么java要有抽象类和接口这两种?
7. GC讲一讲
8. 可达性分析中 gc root都包括哪些?
没有了???
一面 10.16 1.5h C++
1、拷贝构造函数什么时候调用?知不知道移动构造函数?
2、C++多态实现原理;多继承中虚指针、虚函数表问题(不会)。
3、一个空类的内存大小?类里面有函数时?类里面有虚函数时?
4、STL中各种容器的实现原理介绍?红黑树有什么性质,它的插入、删除实现过程(他希望介绍涂色、旋转的过程)?介绍自己知道的树,DST、AVL树、B树、红黑树等?哈希表解决冲突的方法?什么时候用map什么时候用unordered_map?怎么用两个栈实现一个队列?
5、网络编程了不了解?说说epoll和select的区别?介绍Socket网络编程?
6、说说虚拟内存实现原理?C++的内存模型介绍?函数递归过程栈的变化?进程和线程的区别,同一进程中的多线程共享哪些东西?
7、介绍自己知道的各种排序算法?说说他们的时间复杂度和空间复杂度(快排空间复杂度是O(logN))?
8、多线程同步编程题,开三个线程,线程A打印3n,线程B打印3n+1,线程C打印3n+2,控制三个线程的同步,顺序打印数字(1 2 3 4 5...)
9、编程题,有三小问。已经定义一个双向链表。
第一问:是顺序打印链表值,并中间接“->”输出;
第二问:反转双向链表;
第三问:给一个值x,将链表中小于x的节点排前面,大于x的节点排后面,小于、大于这两部分中各节点的相对位置保持不变。
面试官人非常好,答不出来的问题也没有直接说就算了继续问下面的,而是不断提示引导,比如上面说的快排的空间复杂度一开始我也没答上来,面试官就从快速排序执行过程慢慢提示,说这个过程有没有什么地方需要开辟新空间等等。
感觉面的不是很好,本来就不抱希望了,但是下午接到网易电话,说一面通过,但是上海人比较满了,然后问我能不能接受广州,我说可以,他说接下来会安排二面。
希望能继续更新二面和hr面。
10.8线上笔试
10.16线上视频一面(共50分钟左右):
1. 项目
2. 讲讲代理,代理细分,Java里的代理
3. JDK的动态代理怎么实现
4. 动态代理底层怎么实现
5. mybatis的缓存
6. 什么时候才能命中二级缓存,什么时候才能存到二级缓存里
7. mybatis的接口和xml交互,用到了代理了吗?
8. Spring的事务传播机制
9. JVM常用的垃圾回收器,
10. CMS的优缺点
11. CMS回收几个阶段是只有自己的线程吗?还是多个线程并行
12. 频繁Full GC,如何排查,用到什么工具
13. 类加载机制
14. synchronized和lock区别
synchronized是关键字,lock是类,
15. synchronized、lock是公平锁还是非公平锁
非公平
16. synchronized的锁升级过程
17. MySQL常用的引擎区别
18. MySQL的索引结构
19. 哪些会索引失效
20. B+树和B树的区别
21. MySQL常用的事务隔离级别
22. MySQL事务隔离级别都解决了什么问题
23. 脏读幻读是什么。
24. 不可重复读,MySQL是什么解决的
25. Redis的数据结构
26. 讲跳表,如果插入这个怎么做的,比如插入第一个数据,存到第几层
27. 手撕两数之和、判断括号是否合法
一面
Innodb的索引实现?
为什么是B+树
Redis的使用,分布式锁的实现
操作系统虚拟内存换页的过程
虚拟内存换页的算法有哪些?
换页算法里面,FIFO有什么缺点?怎么改进?
TCP三次握手
ReentrantLock和synchronized锁的区别
接着上面问,为什么公平锁效率低
公平锁要记住请求的先后顺序
算法题:
滑动窗口,具体忘了~
二面:
……忘的差不多了
三面:
(印象特别深刻的一轮,因为面试官一看就气场特别强大)
大致是三道题
4G内存,40亿整数,全排序该怎么做
算法题:
设计一个MaxStack,在stack基础上增加getMax函数,能够以O1时间复杂度找到栈中现存最大元素
能否减少空间使用?
概率题:
N个能随机等概率生成1-N的数字的骰子,对其做distinct之后的剩下元素个数的数学期望
比方说三个骰子,如果投出 1 1 1,那么distinct之后只剩下1个元素
因为外排序没有学过,加上概率题死活没想明白,就果断挂了,但是运气特别好的是又被捞了起来,继续三轮面试
一面:
数据库的隔离级别?
拥塞
算法题:
若干个线程,有执行的开始时间和结束时间,如果两个线程时间有重叠,那么就需要并行计算,问最多会有多少个并行计算
一棵树,如果从右边看这个棵树,返回从上到下的输出
二面:
HashMap怎么实现?除了链表法还有什么办法解决冲突?
jdk1.8中对hashmap做了什么修改?
如果有若干个线程同时执行HashMap的put操作,会有什么后果? 并发修改异常
协程和线程的区别?
概率题:如果一直抛硬币,直到:如果出现反反正就A赢,如果出现正反反就B赢,那么这是公平的游戏吗?谁获胜的概率大?
手写任意一个排序排序算法
算法题: 如果a[0]a[n-1],那么请找出任意一个点使得a[i-1]a[i+1] 要求logN
三面:
描述堆的实现
如果有一组数字,按照“拿出第一个数在桌上并然后将下一个数放到队尾”一直操作直到数字全部放在桌子上,给你最后在桌子上的数字,请返回最开始数字的顺序
一个数组,找最大的连续子数组和
linux中如果读取文件"/xx/yy/z"请描述过程
最后,感谢字节~
1.几种map,treemap使用场景
2.http1.0和1.1
3.三次握手说下,如果少了最后一次会怎么样
4.200 300 500 都是什么
5.如何获取一万个数前100个最小的
6.先增再减的一个数组,给索引,返回值,怎么实现
其他不记得了。。。。。。
希望能够,但愿吧。。。。????????????
一面 (基础技术面)
- redis的几种数据类型,redis是单线程的,如何优化? redis为什么能做到这么快 ?
高效的数据结构设计,内存操作,非阻塞IO多路复用
- Spring的核心设计理念,SpringMVC的请求流程,MVC的分层在Spring中的实现
- ORM框架如何配置主从数据源,Mybatis原理
- 垃圾收集器用的哪种?CMS和G1的区别,讲一讲CMS垃圾收集的步骤,哪些步骤是并发哪些是并行。知道哪些垃圾收集算法
- 数据库索引了解多少?组合索引的最左原则,innodB和mylSAM的使用场景和区别,簇族索引和非簇族索引的存储区别
- sql优化怎么做,如何判断sql能否用到索引或者大约需要扫描多少行数据。
- HTTP1.0/1.1/2.0 HTTPS的区别与特性
- 讲讲NIO的原理与实现?NIO用到了哪个经典技术思想?JDK1.8中NIO有做什么优化
- SpringMVC、SpringBoot、SpringCloud之间的关系?SpringCoud的注册发现与RPC的实现。
- 知道哪些RPC的方式?有哪些框架?如果让你设计RPC数据交换报文格式你会怎么设计?最重要的是什么?
- 用过哪些日志框架、日志框架间的比较?
- Java中的锁有哪几种?Synchronized 的特性和底层实现?ReentrantLock了解么?AQS锁了解么?
- Java经典特性封装继承多态中的继承,Java的继承有什么缺点?wait()、notify必须在什么情况下使用
Synchronized内部使用。
二面(经理面)
- 讲讲项目中的RocketMq服务化
- Java中的锁知道多少
ReentrantLock
- 有5000w数据的场景,如何做查询性能优化
- 线程、进程、协程的关系。
- 知道Go么,有没有学习过,排不排斥新语言的学习使用
- nginx的高可用,redis的高可用,redis的集群方案,一致性哈希和哈希槽模式下缓存服务器宕机,数据如何迁移
- 怎么让一个定时任务在集群模式下只有一个实例执行?怎么实现分布式锁?怎么高可用?怎么保证一定有且只有一个实例的定时任务成功
三面 (部门领导面)
- 讲讲项目中的高可用实现,知道zookeeper选举算法么?这个nacos如何实现的一致性,知道raft的原理么?选举的机制是什么样的?具体是怎么投票的?
- DNS原理,DNS的轮询规则是怎样的,一个DNS请求是怎样的,如何使用自己的DNS服务器
- 如果现在有一个活动,一共赠送用户100000点券,有一个获取点券的按钮,一个用户只能获取一次,获取的点券算法是一个函数do(s,l),s是用户的等级,L是目前剩余的点券。在这个业务场景下,最需要考虑的是什么(不是多线程竞争问题)
- 现在有一个游戏,玩家有一群建筑,这些建筑一开始是1级,然后点击升级按钮会扣除金币,同时建筑进入升级倒计时。如何设计这个建组等级相关的数据存储?如果有一个排行榜显示用户的建筑等级排行怎么办?如果用户升完级就退出,排行榜怎么保证排名的正确。用户下一次进来如何保证时间的准确性
- 在一个场景下:客户端使用TCP连接服务端通信。服务端如何检测出客户端断开连接?发送心跳是客户端发送好还是服务端发送好?如何在不用客户端/服务端发心跳包的情况下可以检测得到客户端tcp连接已经异常断开?
四面(Hr面)
- 个人信息,之前公司的情况,个人在公司所处的位置
- 学习方法,个人长处,最有成就感的事情
- 问了对技术的看法
- 目前薪资期望薪资
- 最快入职时间
拿到offer