.25 19:30 - 20:30 一面
网络:
- tcp三次握手失败,tcp会如何操作?
答:
这个问题的本质是判断我们对tcp的状态转换是否能有比较深刻的理解。只要理解了下面的状态转换图,很容易回答上述问题。
第58行指明了当第三次握手失败时的处理操作,可以看出当失败时服务器并不会重传ack报文,而是直接发送RTS报文段,进入CLOSED状态。这样做的目的是为了防止SYN洪泛攻击。
- 输入URL流程
答:
1.URL解析:
2.DNS查询
3.建立TCP连接:
4.发送HTTP请求
5.服务器永久重定向
6.服务器处理请求
7.返回响应结果
8.浏览器接受响应
9.HTML解析
10.断开连接
篇幅所限,这里就不展开讲了,简单提一下,不理解具体原理的同学可以看看我这份《计算机网络面试题集》,在里面会有详细的论述
Java:
- 抽象类和接口的区别,使用场景
答:
区别:
① 抽象类有构造方法,接口没有构造方法
② 抽象类可以包含普通方法,接口中只能是public abstract修饰抽象方法(Java8之后可以)
③ 抽象类只能单继承,接口可以多继承
④ 抽象类可以定义各种类型的成员变量,接口中只能是public static final修饰的静态常量
使用场景:
1.抽象类的使用场景
既想约束子类具有共同的行为(但不再乎其如何实现),又想拥有缺省的方法,又能拥有实例变量
如:模板方法设计模式,模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中某些步骤的具体实现。
2.接口的应用场景
① 约束多个实现类具有统一的行为,但是不在乎每个实现类如何具体实现
② 作为能够实现特定功能的标识存在,也可以是什么接口方法都没有的纯粹标识。
③ 实现类需要具备很多不同的功能,但各个功能之间可能没有任何联系。
④ 使用接口的引用调用具体实现类中实现的方法(多态)
- 枚举类的使用场景
答:
1. 单例
2. 有穷对象的集合
实习项目:
- 介绍一下微众的项目
- 什么叫CICD
- 做了什么事情,为什么用Github Actions,不用Jenkis,有什么区别吗
项目:
- 运行流程
- 架构设计
- 如果输入一个请求,怎么跑的
项目这块根据自己的项目经验答就行了,我当时答的是一个在线会议系统项目,
线程并发:
- 什么叫同步异步
答:
同步,就是A要从B得到一些结果,A等着B出结果,B做不完A就一直等着。同步就相当于顺序执行。
异步,就是A要从B得到一些结果,A告诉B它要结果,然后做自己的事,B做完后通知A结果是xxx。异步的意思就是非顺序执行的。至于执行的顺序是什么,这是不确定的。而某个任务要执行到什么时间结束,这要看分给这个任务的CPU时间。时间到了就结束(分时系统,大部分情况都是这样)。
- 什么叫阻塞非阻塞
答:
当你把水放到电水壶里,按下开关后,你可以坐在水壶前面,别的事情什么都不做,一直等着水烧好。你还可以先去客厅看电视,等着水开就好。
对于你来说,坐在水壶前面等待就是阻塞,去客厅看电视等待就是非阻塞。
阻塞请求:A调用B ,A一直等着B的返回,别的事情什么也不干。
非阻塞请求:A调用B,A不用一直等着B的返回,先去忙别的事情了。
所以说,阻塞指的是调用方一直等待别的什么事都不做;非阻塞指的是调用方先去忙别的事情。
算法:
- 合并有序链表
- 简化Linux路径
这两道算法题还是挺简单的,也比较常见,面试之前就刷过,这里也不展开讲了,不会做的可以看看我之前刷题的一本手册
怎么白嫖应该知道了噻?
一面二面和HR面我就都不展开讲了,不然这篇文章太过冗长了,把面试官问的问题贴出来给大伙看看,不会的题可以自己去网上找找答案。
8.30 20:00 二面
实习项目:
- 介绍一下微众的项目?介绍我参与的事情?
- 什么叫CICD?
- 遇到了什么困难?怎么解决的?
项目:
- 介绍一下项目的架构设计
- 讲解了我怎么设计负载均衡算法的,以及每种策略的适用场景
- 注册中心是如何实现服务的发现和引入的
- 注册中心能否处理容灾情况(不能,我都没有那么多服务器,哪里来的容灾功能)
Java:
- 正则表达式(尬住了,这个没怎么用)
- 引用传递和值传递的区别
- Java 是面向对象的语言,你是怎么理解的,相对于 C 语言,你感觉有什么优势呢
网络:
- 三次握手过程
- 如果第三次握手没有回复会出现什么情况
- 这种机制有什么缺陷吗(SYN 泛洪攻击)
- SYN 泛洪攻击怎么解决
9.1 10:00 - 10:30 三面
实习项目:
- 介绍一下微众的项目?介绍我参与的事情?
- 什么叫CICD?
- 遇到了什么困难?怎么解决的?
数据结构:
- 给一个场景:有很多图片,然后我们需要对图片进行存储,以及查找,有什么数据结构比较适合?
- 如果我要加速查询的速率,你要怎么设计?
架构设计:
- 如果一台服务器,然后要对单机进行拓展,你要怎么设计后续的拓展工作?
操作系统:
- Linux 怎么进行解包的?
- 你刚才讲到里面有两个过程,一个是中断,一个是复制,你会怎么处理这两个过程,使其加速?(我扯了 Netty 的零拷贝机制,但好像不对,面试官说我的思路很有趣)
网络:
- TCP 保证可靠性传输的手段有哪些?
面完不到半个小时,内推我的师兄就发微信来恭喜我,发现官网变成了等待 hr 面的状态。
这里要夸一波面试官,面试官在我讲的时候闭麦,安心听我讲完,对于我答得不是很好的地方也会指出来,nice!而且三面的面试官问我对网络通信是否感兴趣,那可太有兴趣了,不然我也不会去看 Netty 的源码hhh
9.7 11:00 - 11:30 hr面
聊天为主:
- 地区
- 职位考虑
- 对于 offer 的选择
- 成绩情况
- 为什么不读研
- 实习做了什么
- 对于腾讯的看法
- 更看重哪些方面
好了,就写到这里吧,今年我一直在有意收集面试真题,到现在总算是整理出来一份Java面试八股文,