文章目录
搜狐一面 9.4
-
自我介绍
-
论文
-
go和java比较,优点。go库还不完善,怎么办。
-
撕代码:判断平衡二叉树
-
JVM里面的运行时数据区?
-
详细讲虚拟机栈,里面放什么?
-
栈里面的动态链接是干什么的?
是个指针,指向运行时常量池
-
操作数栈是干什么的?
-
元空间是干什么的?
方法区是抽象含义,元空间是1.8之后,hotspot对方法区的实现。
-
synchronized是怎么实现的?偏向锁、轻量级锁、重量级锁具体怎么实现。
-
volatile怎么实现的?做了哪些限制来实现功能的?除了内存屏障还有什么。
-
禁止指令重排,CPU层面为什么会做重排操作?
为什么重排会提高效率,什么场景下会提高效率?
CPU流水线:每次执行指令的操作差不多,取址译码,采用流水线的形式执行。有些操作可能要等待写回才能执行,可能会打断流水线,CPU执行时试图优化,使指令的执行符合流水线。
TPLINK一面 9.5
- 自我介绍
- 论文
- 说一个最有代表性的项目(项目背景,职责)
- 怎么设计负责的模块的代码结构的?
- 用的什么数据库,自己部署的吗
- HashMap是不是线程安全的,如果想让他线程安全要用什么
- String对象是不可变的,String对象是怎么创建的?
- 项目在Mysql上有什么特定的优化?除了索引还有啥?
- 有用过Redis吗?
- 有了解一些前端的技术吗?
- 有用过ES6吗?
- 有写过组件吗?Vue里的?
- 为啥要去杭州?
美团一面 9.7
-
项目
-
订单号怎么避免冲突
-
mybatis中#和$的区别
-
项目中的索引是怎么设置的
-
数据库中索引的分类
-
聚簇索引和非聚簇索引
-
非聚簇索引一定会回表吗
-
说一下Innodb引擎
-
事务的四种隔离级别
-
不可重复读,幻读会出现什么现象。只能通过加锁解决吗
-
MVCC是用来解决什么问题的
-
Spring boot的优势是什么,为什么用springboot
-
简单介绍spring AOP,是基于什么实现的
-
静态代理和动态代理有什么区别
不会
-
spring IOC
-
Java中经常使用的数据结构
-
ArrayList,LinkedList有什么区别
-
HashMap 1.7和1.8有什么区别(扩容,红黑树)
-
ConcurrentHashMap 1.7和1.8有什么区别
-
1.7有什么劣势?为什么改成1.8
不会
-
JVM垃圾回收方法,标记,清理过程
-
简单介绍CMS的过程,CMS需要STW(stop the world线程停止)吗,为什么能并发标记。
-
CMS在老年代用什么垃圾收集方法,产生的碎片是怎么处理的。
重新标记阶段
-
TCP/IP五层体系结构
-
TCP三次握手,为什么要三次握手。一定要三次握手吗
-
四次挥手过程。一定要四次挥手吗
-
TCP网络传输的过程
-
TCP拥塞控制
-
写个算法,时间复杂度O(N),空间复杂度O(1)排序 1-N个不重复的数(值也是1-N)
滴滴一面 9.8
-
论文说了五分钟
-
项目,查询效率怎么优化
-
java和go的开发栈有什么区别
-
开发过程遇到的问题
-
spring boot主要内容,为什么用它?
-
volatile的作用是什么,除了可见性还有什么?
防止指令重排
-
常见的线程池有哪些?
-
FixedThreadPool的等待队列是什么?如果线程很多,处理时间很长会发生什么
-
JVM内存有哪几部分
-
模拟一个栈溢出
-
垃圾回收有哪几种
-
堆主要分成哪两个区域
-
有真实遇到过JVM方便的问题吗
-
mysql的索引是什么实现的
-
一个应用中mysql如果扛不住怎么办
-
缓存一般怎么来实现
-
缓存穿透、缓存雪崩,怎么解决?
-
spring boot IOC,AOP
-
项目里怎么用的AOP
-
动态代理有哪几类,怎么实现
JDK动态代理,CGLIB
-
项目中git的分支管理是什么情况
-
项目中遇到个bug,修复完要马上上线,也是在develop分支上开发吗
-
如果都在develop上开发,分支怎么解耦
-
说一下TCP
-
拥塞控制有什么方法
-
连接建立;连接断开,服务受到客户端请求后进入什么状态,客户端会进入什么状态,为什么TIME_WAIT
-
Java集合包里的数据结构
-
ArrayList底层怎么实现,扩容是用什么方法扩容的,初始化的时候怎么考虑
-
HashMap底层结构,为什么用红黑树不用平衡二叉树
平衡二叉树的调整起来比较复杂,红黑树调整起来效率高
滴滴二面 9.8
-
论文背景,研究目的
-
项目经历
-
实习期间的收获
-
并发解决的核心问题是什么
CPU和内存之间的速度不一致问题
-
了解的关于并发的技术,同步锁机制
-
volatile是解决什么问题的,可见性是指什么
-
其他并发机制,juc上其他的接口
-
工作学习中用到的并发机制
-
go里面从cpu,指令层面的并发与java有什么区别,go routing是怎么实现
-
java的数据结构
-
hashmap是怎么实现的,线程安全的hashmap
-
java其他技术上了解的比较多的
-
jvm内存模型
-
类的加载过程经历哪些步骤
-
对技术这块还有什么分享的,哪一块了解的比较深的
-
你觉得掌握的比较好的算法?
-
做题,设计cache,定容,实现get(key),put(key, value)
put的时候容量超过了就删除最不常使用的
华为一二三面 9.10
-
写算法:二叉树路径和为某个值(写了十分钟)
-
LinkedList和ArrayList,区别,使用场景
-
Object类和Integer类的equals方法有什么区别,什么时候去比值,什么时候比地址
-
泛型,是在编译时实现还是在运行时
编译时
-
垃圾回收有几种方式
-
垃圾回收器的指标
-
JIT即时编译
对高频执行的代码块,编译成字节码之后,存在内存里
-
实习期间的项目,遇到的问题
-
哪一个项目是比较难比较成功的,开发规模,我的职责
-
初始架构的怎么设计的,什么样的架构
-
数据库表的设计有什么考虑
-
一个业务使用多个表是在数据库层面还是程序层面
-
mybatis在项目中有什么好处
-
spring boot前台调一个url是怎么到后台入口的,http://uri
-
发生过url访问不到接口的情况吗
-
spring boot的用户认证是怎么做的,登录信息怎么判断是否有权限
拦截器?
-
后台接口是怎么测试的,测试的时候直接调接口有鉴权吗
-
论文主要工作是我完成的吗
-
Java常用的容器有哪些
-
List和Set有什么区别
-
Set怎么实现不重复,怎么判断重不重复
-
HashMap哈希碰撞,哈希冲突怎么解决
-
写算法:两个有序数组,找有序数组的中位数。
双指针O(n)
-
项目中数据调优
- 论文情况
- 实习期间的项目
- 读研期间的项目
- 项目规模,团队配合之间的困难,怎么解决
- 介绍论文内容,用了多长时间
- 研究生排名
- 论文里的技术点有什么可以改进的,怎么改进
- 实习时候的笔试成绩不是很好,这段时间怎么锻炼的
- 啥时候毕业
- 工作地有什么要求
- 手上有其他offer吗
- 现在是Java,以后用C或者C++有什么困难吗
- go语言比java有什么区别
- 论文里需要什么仿真实现,模拟协议用的什么软件,论文方法的效率怎么评估
- 协议仿真语言是什么,有没有其他人提供帮助
- 怎么看待华为的核心价值观,对加班的看法
TPLINK二面 9.11
-
你是哪里人啊
-
为什么考虑保到天津大学
-
研究方向是什么
-
缓冲区溢出攻击
栈溢出攻击的过程,不会
-
内存泄漏一般采用什么方式去检测
不会
-
比如说有个C程序,怎么检查有没有内存的泄露
-
静态分析有效果吗,实际使用环境下静态分析的效率
-
我提出的动态分析方法是什么
-
把野指针当做研究领域会不会太细了
-
野指针在编码上能不能杜绝
-
实习期间的项目,为什么用go,go和java比较
-
有台PC机,打开word,键盘输入a之后在PC内部是怎么处理
-
平时的课余爱好
搜狐二面 9.11
-
写算法:写个线程安全的阻塞队列
不会
-
go语言的线程和协程开销有什么区别
不会
-
操作系统里面进程和线程有什么区别,开销有什么区别
-
linux操作系统对进程和线程的实现有什么区别
不会
-
分段和分页都使用来解决什么问题
不会
-
论文的主要内容,有什么特殊的地方
-
写算法:两个有序数组找中位数,O(nlogn)
字节一面 9.14
-
volatile在多核和单核场景下的实现有什么区别吗
单核有必要用?
-
看一段程序,写输出
-
进程间的通信机制
-
进程的空间分布,线程呢
-
写时拷贝
不知道
在linux程序中,fork()会产生一个和父进程完全相同的子进程,但子进程在此后多会exec系统调用,出于效率考虑,linux中引入了“写时复制”技术,也就是只有进程空间的各段的内容要发生变化时,才将父进程的内容复制一份给子进程。
在fork之后exec之前两个进程用的是相同的物理空间(内存区),子进程的代码段、数据段、堆栈都是指向父进程的物理空间,也就是说,两者的虚拟空间不同,其对应的物理空间是一个。当父子进程中有更改相应段的行为发生时,再为子进程相应的段分配物理空间。 -
fork()的返回值有哪几类,父进程和子进程拿到返回值有什么区别
子进程PID
父进程fork()之后返回值为子进程的pid号,而子进程fork()之后的返回值为0 -
系统内存,swap区是干什么用的
不会
Swap分区在系统的物理内存不够用的时候,把硬盘内存中的一部分空间释放出来,以供当前运行的程序使用。 -
buffer, cache是用来干什么
不会
cache是高速缓存,用于CPU和内存之间的缓冲;
buffer是I/O缓存,用于内存和硬盘的缓冲 -
http协议怎么判断请求头结束
空白行,几行?
\r\n\r\n好像是结束符 -
请求头里有什么
-
accept-encoding是用来干什么的,压缩方法有什么
-
http 304是代表什么
不知道
Not Modified,客户端请求的内容,在客户端有缓存,服务器端比较文件最后修改的时间戳,如果不需要重新发送则返回304,否则返回200。 -
SSL的握手过程
-
混合加密分别是用什么算法
-
常见的对称加密,什么是对称加密
-
mysql脏读、幻读
-
输入一个url,拿到页面的过程发生了什么
-
DNS有几种模式
-
TCP连接关闭的时候的状态迁移
-
TIME-WAIT的状态
-
介绍一下巴士项目
-
如何考虑买票的一致性,并发性
-
分布式情况下,数据怎么加锁
-
redis怎么来选择使用哪个db
-
教师端和学生端能看到的页面不一样,怎么鉴权
-
论文详细介绍
不同的路边单元生成的密钥,车辆与路边单元是双向验证的?车辆与路边单元鉴权的逻辑也是一样的吗?车辆假名怎么保证是唯一的?
-
web应用的唯一用户uuid怎么设置
-
很多很多单词,找重复
-
hash冲突解决方法
-
写个代码:二叉树的最大宽度
美团二面 9.16
-
项目背景+内容+职责
-
怎么分析需求
-
项目收获
-
平时怎么学习一门语言,难点
-
https,ssl里面用到的什么算法
-
ssl里的中间人攻击
emmm字节三面也问了,哭,当时怎么没整理
-
Java线程的生命周期
-
sleep()和wait()区别
-
volatile的作用
-
算法题:二叉树路径上的和为某个值的所有路径(写了八分钟)
-
Java的锁,synchronized的锁升级过程
-
CAS过程
-
Lock接口,了解ReentrantLock吗
-
AQS的数据结构
-
ThreadLocal了解吗
-
Springboot的自动装配
-
职业规划
-
算法题:合并两个有序数组,数组A有足够的空间容纳B
双指针,从AB的尾部开始,最大的放到A的尾部
字节二面 9.16
-
论文背景、内容
共享密钥,两个车之间?车辆群组之间?
车辆之间交换什么信息
基站的覆盖范围,圆形还是方形
车辆之间怎么跨基站通信?这个基站区域内发生的事,怎么通知到其他基站
防御的是什么情况 -
char *s1, **s2, ***s3是什么用malloc分配内存的
…
-
算法题:非递归二叉树深度
-
算法题:链表,从尾结点一个个往前面插入,每次间隔一个结点
-
算法题:实现栈的数据结构
以上花了60min…
-
线程阻塞,挂起
-
进程切换的内容保存在哪里
CPU寄存器,进程的状态数据结构
-
TCP四次挥手,三次握手协商了什么东西
-
TCP序号是按什么单位
-
TCP快重传
-
gorutine
字节三面 9.20
-
实习期间的工作
-
https中SSL握手的过程,怎么保证数据安全,有没有可能中间人攻击
-
SNI
SNI(Server Name Indication)是 TLS 的扩展,用来解决一个服务器拥有多个域名的情况。
-
golang的内存管理机制
-
负载均衡算法
-
HashMap多线程场景,Juc怎么控制锁的粒度
-
HashMap的扩容
-
redis的性能高体现在哪些方面
-
网络编程的多路复用机制
-
用UCP实现可靠传输
-
volatile的作用
-
volatile和锁有什么区别
-
DNS工作原理,DNS劫持是发生在哪个阶段
-
算法题:二维字符数组找某个单词是否出现,可以重复走
美团三面 9.25
-
项目,里面用什么协议进行通信,内部服务用什么协议。实习收获。
-
gin框架内部的实现有什么了解。
-
介绍http协议,请求头内容,响应头内容
-
url细分为几个部分,‘?’代表什么,%代表什么
-
java里final关键字
-
浮点数怎么表示,在计算机内部,用01怎么表示
符号,指数位,有效数位
-
mysql有什么数据类型,时间戳有什么
-
算法题:浮点数的立方根
-
算法题:数组构造有序二叉树
-
职业规划
快手一面 10.13
- 项目,开发流程,遇到的困难
- 面向对象的特性,具体介绍
- Java里面的基本数据类型
- int和double的区别,int的范围,double的范围(IEEE 754,科学计数法)
- static关键词
- ArrayList和LinkedList,ArrayList扩容的触发条件,具体扩容机制
- HashMap插入的流程,查找的过程
- 对称加密、非对称加密,什么场景用非对称加密
- https握手过程,为什么要用混合加密
- 排序算法,冒泡和插入的过程、复杂度。快排的流程,优化?
- 堆排序的流程,使用场景
- 算法题:归并两个有序数组,三个呢,n个呢(堆)。
- 介绍几个设计模式,代理模式的思路,场景
快手二面 10.14
-
深挖项目二十分钟(数据库设计,场景题),收获
-
springboot是怎么工作的,反射有几种实现方式
-
配置文件是怎么扫描的
-
@Controller和@Component什么区别和联系
-
mybatis是怎么使用的,怎么实现的
-
@Autowired
-
throw/throws区别
-
final/finally/finalize,定义一个final类怎么写
finalize()是在java.lang.Object里定义的,也就是说每一个对象都有这么个方法。这个方法在gc启动,该对象被回收的时候被调用。
-
hashCode()和equals(),hashMap是怎么使用hashCode的,整个过程。euqals是怎么执行的
-
函数只有返回值不同属于重载吗
-
java中的基本数据类型
-
System.gc()和Runtime.gc()
java.lang.System.gc()只是java.lang.Runtime.getRuntime().gc()的简写,两者的行为没有任何不同。
-
ThreadLocal
-
TCP server端口和UDP server端口冲突,能正常启动吗
不影响
-
Thread重复start()
Thread t = new Thread()
t.start()
t.start()
两者都会抛出java.lang.IllegalThreadStateException,但是本质是不一样的。第一个是重复启动,此时线程处于运行状态,是不允许的;而第二次则是在该线程生命周期已经被终结后企图启动,也是不允许的。 -
jvm调优,说几个参数,默认情况下方法栈一般多大
xmx,xms,xss
-
算法题:用固定长度n的数组实现一个循环队列,put()和pop()方法。(10分钟)