数字马力校招补录一二面[凉经]
时间线
- 不记得是什么时候投的,在哪里投的,在官网没查到投递信息
- 6.7提示更新简历信息
- 6.20一面
- 6.21一面通过通知
- 6.28二面
- 6.29挂(挂了,没通知,自己联系hr询问的)
一面
面试形式:钉钉视频面试
面试官:阿里巴巴(我也不知道怎么回事,面试官在自我介绍时,说是阿里巴巴的)
算法题:力扣岛屿数量(30Min),算法写完后,让我说一下思路
在我写算法的30分钟过程中,面试官去看了我简历,因为我简历上有些Github信息,他就去我Github看,我在准备面试过程中,有记录xmind文档,放在了Github仓库,面试官全下载下来看了,在写完算法后,他说他要问的问题,我那上面都有,再背出来就没意思了,所以就问了其他的问题
- 你在Github有开源项目,git cherry-pick这个命令会使用么
- 开源项目星少,没人参与,这个命令只了解过,当时还忘记了是什么
- 知道jvm中的jvm safepoint么(说了知道UnSafe类,不知道这个)
- 过了10天了,其他的记不起来了,还有好几个问题
- 聊我那个项目(博客系统)
- 这个系统和其他系统有什么亮点
- 平时从哪些地方学习新技术
- 还学过其他语言么
- 面试官后面去我博客系统注册登录了,因为是微服务系统,服务器才2C4G,服务器上部署的服务有点多,登录和注册花的时间比较长,我之前测试是15s左右,但是面试官注册的时候,花费了50s,关键还没注册成功,他就问我是什么原因造成响应高的,我说在这个操作里面服务间调用比较多,他说这个不会花费多长时间,让我去服务器排查
- 我登录服务器之后,因为日志记录这一块,service处理时间没记录,我临时改了代码,重新部署,部署之前,把之前运行的日志做了一个备份,md,我备份的时候,提示系统存储使用100%,我查了一下是nacos和sentinel的日志占了10多G,我清除这些日志,重新部署,测试好几次,登录注册时间降到了500ms左右,好尴尬
二面
- 自我介绍在说到项目的时候,介绍一下Github的star数,还有就是这个项目的技术栈,项目的难点和亮点
- 介绍一下自己觉得比较好的项目,没有说难点,只说了技术栈,需要详细介绍一下
- 介绍一下JVM的内存模型在堆,方法区的知识点有待提高,半知
- 让你实现一个程序,让方法区报OOM这里对于方法区的概念没有记熟,只记得方法区能存储常量,但是方法区存储的东西有类的结构信息,包括类的名称,父类的名称,访问权限修饰符,以及类和类中方法的成员变量的字段名称和类型运行时常量池,不仅仅是指字符串常量池,还包括类的全限定名称,父类的名称,访问权限修饰符,字段和方法的名称等静态变量,注意了,静态变量也是存储在方法区中的类的字节码,这里并不是将Student.class整个字节码文件加载到jvm中,而是按需进行加载,是通过类加载器进行加载的构造函数和方法的字节码这个程序没有写出来,我想到的就是通过String.intern()方法将随机的字符串放入方法区,没有想到还有类的全限定名等等
- 说一下知道的分布式锁,这里讲了Redis的setnx,还有Redisssion(但是不知道)
- 分布式锁在这个项目里面是如何来做的项目需要重新写一下,这一块属于是知识盲区
- 点赞功能在高并发情况下,会存在数据安全的问题,那么如果来解决这里说了两个层面,一个是通过锁来实现,synchronized和RetrantLock,还有一个是通过MySQL的for update来实现,但是for update的话,因为只能进行单一操作,被排除如果是使用锁的话,又会存在qps问题
- 假如现在有这么一种情况,有两个线程,线程A对点赞量+1,然后线程2也对点赞量+1,但是需要使线程2+1是在线程1操作成功的情况下去实现的,这种不加锁如何处理没有说出来,这个可以通过乐观锁来实现,cas+版本号,这个CAS操作并不是需要我们使用UnSafe这个类来做,我们可以使用AtomicXXX,因为他是原子操作,最终的步骤就是在数据表上增加一列版本号还有就是使用do{}while()也可以来做,反正就是乐观锁
- 什么是悲观锁,使用悲观锁会存在什么问题(每次都加锁)
- 什么是乐观锁,如何实现一个乐观锁这里回答错了,说了乐观锁是针对于读多写少情况,修改的时候,会判断是否有人改变了这个数据(我忘记了,回答的是,修改的时候,会加一个锁)
- Redis的缺点这里讲到了单线程(但面试官说不是缺点),后面我又说了不能进行复杂的查询,只回答出这个完整的优点:快速:Redis 所有数据都存储在内存中,因此可以快速访问和操作数据,读写速度非常快。多样性:Redis 支持多种数据结构类型,包括字符串、哈希表、列表、集合和有序集合等,能够满足不同的数据存储需求。高并发:Redis 支持高并发访问,可以同时处理大量请求。可扩展性:Redis 可以使用集群方式进行横向扩展,以满足更高的性能需求。持久化:Redis 提供了多种持久化选项,包括快照和日志追加,可以在服务器重启时恢复数据。丰富的功能:Redis 支持多种高级功能,例如发布/订阅模式、Lua 脚本等,可以满足复杂的应用需求。缺点:数据量限制:由于 Redis 所有数据都存储在内存中,所以其数据量受到内存容量的限制。当数据量非常大时,需要使用集群方式扩展 Redis,增加成本和复杂度。无事务支持:Redis 不支持 ACID 事务,无法保证数据的完整性和一致性。存储格式限制:Redis 不支持存储结构化数据,无法像传统关系型数据库那样支持复杂的数据查询和分析。网络传输:Redis 数据需要通过网络传输,如果网络不稳定或延迟较高,可能会影响读写性能。配置和管理:Redis 配置和管理相对较复杂,需要深入了解其配置选项和运行机制。
- Redis中有哪些数据类型我的回答,有8种数据类型,常见的5种说出来了,但是还有三种忘记专业名字了,正确的是有9种,redis的数据结构和底层实现还需要继续学习
- Redis的ZSet使用场景讲了zset是什么,通过分数进行排序,这里只说了一个排行榜,其实还有电话排序,姓名排序
- Redis的跳表这种数据结构了解么说了之前了解过,很长时间没看,忘记了(直接说没了解过是不是更好)
- Redis的持久化机制Aof+rdb
- 假如Redis的内存满了之后,如何解决很长时间没看,忘记了,讲的很模糊
- LFU是什么,如何实现一个LFU讲到了使用HashMap来实现,但是是错的
- MySQL中的主键索引和非主键索引的区别
- B+树和B树索引的区别,为何要用B+树
- 反问环节假如有幸加入贵公司,会做哪些业务有什么建议么
- 面试官又问了一个问题,你会来我们公司么我说了一个,我在昆明投了一些,但是薪资太低了,没什么发展,想去大平台(这是错误的,不能说薪资低)