秋招过程中的一些还不错的问题面经

文章目录

  • 希音
  • 小天才
  • 小米
  • 某低代码独角兽公司
  • 小红书(实习)
  • 某图形数据库开发公司
  • 及时设计
  • 某教育独角兽
  • 必问面试题

这里面记录的是一些基于我当初简历问到的一些我认为比较有意义的问题,没有意义的问题我就忽略了。

希音

一面
自我介绍
对称加密与非对称加密的区别和使用场景?
将一下简历上的数字签名和URL动态加密的实现方式?
如果你暴露给前端的接口其他人也能请求,那么你如何保证之后接收到的密钥是来自于你的前端而非攻击者呢?
你熟练使用gateway网关,和我讲一下你开发网关过程中遇到的问题?
你这里的URL动态加密,你接受到的是加密的URL,那么你如何解密并且将这个解密后的URL能重新转发到你真正的后端服务呢?
你是如何解决你遇到的RocketMQ的消息堆积的问题的?
MySQL索引结构?和我说一下你对索引的理解?
MySQL中连表查询需要注意些什么?
手撕:O(1)空间复杂度判断回文链表—leetcode原题—反转链表即可。
反问

二面
自我介绍
手写代码,对于CompletableFuture,如果有一个任务阻塞超时了,你如何让其他任务直接返回?
你是如何实现文件快速上传的?(文件方块和断点续传)
从Tomcat层面和我聊一下一个项目大概能接受多大的连接数量?(SpringBoot项目对tomcat的线程池大小的设计)
从Linux底层原理层面和TCP、HTTP层面和我聊一下一台机器大概能处理多少的请求?(C10K和C10M问题)
业务设计题,高性能查询系统的设计。
Mock的使用是否了解(状态验证和结果验证)
RocketMQ你是如何解决消息堆积问题的?
业务设计题目,如何保证一个用户积分系统的幂等性?保证用户积分不会重复添加?
反问

一二面都很顺利,两个面试官基本都是面完就已经暗示我可以准备下一面了(吹皮成功)。

三面cto面
cto面其实没啥,因为可能前面两个面试的表现结果比较好,所以这一面反倒没有任何技术上的问题,都只是聊天。对未来的看法,职业的规划,以及说对一些公司内卷情况的分析,这次面试也让我知道了思考问题的方式不能太片面,要从多个角度去分析这个问题。
我们聊到了字节的内卷,cto说如果说cb也就是core business ,那么内卷有意义,因为无论是业务,用户增长都要求开发人员努力,但是对于边缘部门,你其实人员过于饱和了,很多开发人员没有必要存在,那么他们能做的就只是卷所谓的工作时间,增加自己的产出,提升kpi,保证自己能更好的留下来。

小天才

一面
纯八股,不写

二面
你对网关有比较多的了解,请问网关中的限流算法有哪些?
你用的就是springcloudgateway对吗,如果说我现在只是一个单纯的spring项目,你要如何实现一个限流功能呢?
你说你会使用redis存储令牌,那么你是如何设计这样子的一个过程呢?详细说说
说一说spring中用到的设计模式
说说spring中除了单例还有什么级别的?(request、session、global、prototype)
你说到了单例模式,那么我现在有一个controller是单例的,其中通过@autowired了一个request级别的bean对象,请问这个项目启动的时候是否会报错?
既然会报错,那么是为什么?
(因为request级别只有request来的时候才有,那么创建单例的时候没有request,自然依赖注入失败)
那么如何解决这个问题?
(postconstruct、applicationaware)
你说你用过applicationaware,你是在什么场景使用的?
(我提到了我的自研网关项目)
你们一般是如何解决分布式事务问题的?
你用到了mq,那么我们现在有一个自研的mq,我们mq中有两条消息,第一条消息更新mysql如果失败了,我们会把消息放入到队列后面,然后让第二条消息继续去更新mysql,然后第一条也会再次更新,那么此时就会出现了一个数据不一致的问题,丢失修改问题,因为第一条的数据变到了第二条的后面,你如何解决这个问题?
(一开始听错了,以为是设计整个流程,我就说考虑用rocketmq那种offset的机制,保证at least once的消费,如果说第一条消费失败,那么offset不变,继续消费第一条消息直到成功)
你听错我意思了,你只需要解决这两条消息的一个消费顺序的问题,也就是如果第一条在第二条消息后面,你怎么办?
(我说简单的可以考虑在数据库加一个字段,用于存储消息的id)
他说,那么这个id你要怎么生成?
(我说可以考虑直接用时间戳这些)
他说集群项目要是时间戳重复了怎么办?
(我说可以考虑雪花算法等)
他说雪花算法也有可能重复,怎么办?
(我说就正常的redis存储id去拿id,或者mysql自增id的方式也都可以)
他说那你讲讲你自己如何用mysql存储自增id?
(我说简单的方式我们就不说了,面试造火箭(我原话),因为直接mysql的自增id有一些缺点,可以考虑两张表,一张存储id,一张存储下一个获取id的范围,设计好索引,然后两张表一起查获取对应的ID,并且在合理的时间在执行对无用id数据的删除)
现在有一个mysql,包含user和department表,这个department表中包含了多个子部门,也就是子部门的数量是不确定的,请设计一个表结构,帮助我查询出来某个部门所存在的所有用户
(这里我说由于自部门数量不确定,所以我考虑用string或者bitmap类型存储自部门的编号,然后设定一个parentid,自部门编号类似于{1,2,3}这样子,然后partent=0或者null。
然后查询就很简答了啊,userid=3-0-》deparetmenid=0.
然后查询出来0的自部门id字段也就是ids字段「1,2,3」,然后直接查询所有用户depaetmentid=1,2,3范围的用户就可以了。)
他说ok,可以,那么我现在希望呢只是用一条查询sql来帮助我查询某个部门下面的所有用户,同时如果我要修改你这个parentid,你也只能用一条update语句去修改,你怎么做?
(其实这个时候我刚才设计的结构就不合理了,因为一条根本做不到,我说可以考虑额外增加一个字段,这个字段存储其他部门的一些信息,但是由于这个字段要存储其他部门的信息,而且你还需要解析,因为是字符串你肯定得解析,然后我就说我想不出来,因为性能太差了(毕竟是架构面,所以我觉得解决问题甚至不是最重要的,甚至性能才是被我考虑的,这种低性能的解决方式我就直接不回答了))。
你说的额外字段你要怎么设计?
(我说用这个字段存储其他部门的全量路径信息,但是性能爆炸,所以我想不出来更好的了,因为我知道要在一条sql里面就完成update,那肯定得有额外字段了)
反问
(上面那个问题如何解决,哈哈哈哈,没啥其他想了解的,我就想了解怎么解决)
其实你不需要那么考虑性能,解决方法简单的就是设定一个额外字段,这个额外字段存储的是当前部门的父部门的信息,比如你现在有:id=1,ids=「2,3,4」,parentid=0.
id=2,ids=「3,4」,parentid=1.
那么其实你知道你只是修改id=2的父部门,他的ids你是不用变的,也就是你开一个额外字段,存储信息为到达当前部门的全量路径,比如你现在是到达2对吧,那么就设定一个prefixpath = 「1,2」。
然后你现在就能在一条语句中查询出来你的prefixpath了,由于你的ids不用变,你只要变2前面的1就可以了不是吗,你在一条语句中实现predixpath做一下切割,切割到2这个位置,然后你把1改成你的新的parentid就解决了。
其实这个问题确实性能不好,但是能解决,你的设计思路也大致没问题。)

个人感觉:爱了爱了,虽然被拷打了,但是还是很开心。

小天才技术面3,hr面1,hr面薪资不符合预期。

小米

一面
自我介绍
介绍一下你在公司中做的都是些什么
你说你比较了解网关,那你在网关中负责做什么?
那你说说网关的作用是什么?
什么是负载均衡?
有哪些负载均衡的策略?
Dubbo的标签路由的功能是如何实现的?
你说你自己实现了将服务注册到注册中心和配置中心,那你应该挺了解Nacos的,能给我讲讲你对Nacos的理解吗?
那么Nacos是支持AP还是CP协议?
既然都支持,他们分别用的是什么协议?
能和我讲讲是如何实现CP的吗?
Raft协议是如何实现选举的?
那么AP是如何实现的呢?
知道Distro协议的原理吗?
你说你会CompletableFuture,如果现在有多个任务,我希望你在其中一个任务完成时就直接返回,如何实现呢?如果我希望是等待最久的那个任务执行完毕才返回又如何实现呢?
(等待最慢的那个用all,然后用join/get等待所有任务的完成,只要其中一个完成那么用any,用get)
线程池的工作原理?
你的项目用到了Netty,和我说说Netty中的IO模型?
select、poll、epoll的区别?
JVM中CMS和G1垃圾回收器的工作原理和优缺点,以及区别?
JVM是如何处理并发标记过程中对象引用改变的问题?
MySQL中ACID特性是如何实现的?
算法:
一个机器人位于一个m*n网格的左上角,机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角,总共有多少条不同的路径?
反问

二面
自我介绍
你是如何实现抢红包这个功能的?(20min)
用到了Redis,那么Redis是单线程还是多线程的?Redis的线程模型?
提到了网络IO模型,那么IO通信模型有那些?
Java的线程池内部原理/工作原理?
Java如何保证共享变量的线程安全?
Java中ArrayList的扩容机制?
进程、协程、线程的区别?
SQL查询比较慢,如何分析和优化?
如何实现分布式事务?
讲一讲你开发过程中遇到的问题吧?(10min)
反问

oc,但是薪资不符合预期

某低代码独角兽公司

1面
自我介绍
项目介绍
项目难点介绍
围绕项目难点进行询问
(染色指针、OT、分布式OT算法、自适应路由、自适应限流、Raft简单概念)
基本八股:
Exception有哪些分类?
catch最多支持多少个分支?
(我还真不知道,我回答的是,我们知道大的异常要放在末尾,小的细粒度的放在前面,所以我估计可以无限个,但是这主要看你的异常层级,层级越多,catch就可以越多)
SQL注入异常?
XSS/CSRF是什么?如何解决?
mock和spy的区别?
jdk8以及之后的特性有哪些?
http的请求体和响应体包含什么内容?
cookie如何设置?
cookie设置的底层原理是什么?
2面

小红书(实习)

1面
项目介绍一下(讲了20多分钟)
mysql的索引有那些?
mysql的索引类型有那些?
mysql索引的底层原理是什么?
mysql不同索引的使用场景是?
mysql的事务特性?
mysql的explain?
mysql的explain的等级?
mysql的information_schema?
mysql的优化?
redis的一致性hash?
如何解决缓存击穿?
算法:反转链表

2面
项目介绍一下(20分钟。。。。)
你说你在组内完成了大数据量的查询性能的优化,怎么做的?
线上的问题遇到了,你怎么排查的?(问我jstack/jmap/top)
你说你遇到了rocketmq的消息堆积,如何排查的?
redis的rdb和aof的区别?
数据一致性的解决?(Raft以及实现)
冷热分离的解决?
假设你的项目是分布式项目。你已经完成了基于缓存、数据库、JVM的优化,但是性能还是不够,除了在硬件上进行考虑,你还有其他的优化方式嘛?
(这个问题我没正面回答,我的回答方式是说,可以继续考虑细枝末节的优化,比如使用自研RPC进行性能优化)
算法:LRU

4天11个面试。。。只能说,我自己都不记得我面试的是那些公司了。。
且看且珍惜

某图形数据库开发公司

一面
说一说java中的error和exception?
mysql索引失效?
mysql的索引设计原则?
如何理解spring框架?
springboot的自动加载?
Nacos的namespace?
nacos如何实现对服务是否存活的检测的?
如果实例已经变成不健康的,那么是否还会有请求送往这个不健康的实例?
nacos中如何进行服务实例间的负载均衡?
CMS和G1垃圾回收器的区别?
是否在查看过垃圾回收器的日志情况?
如何设定栈空间和堆空间的大小?
线上遇到oom怎么解决和排查?
手写sql
聊一聊最短路径算法和实现
(23面都过了,但是忘记内容了,不过也不难就是了,OC拒)

及时设计

一面
mysql的ACID?
java的集合有哪些?
arraylist的扩容机制?
redis的数据类型?
redis为什么那么快?
关系型数据库和非关系型数据库的区别?
redis的stream?
redis如何实现分布式锁?
设计模式用过哪些,说说。
Mybatis是如何解决sql注入?
算法:实现对一个文件目录的递归遍历,并且得到所有目录内文件和目录的名称
一面通过,但是由于工作时长(12h工作制)的问题,没有浪费时间继续面试了。

某教育独角兽

一面
自我介绍
你目前为止遇到的最大的一个困难是什么?如何解决的?
我们回到技术上,你在技术上遇到的最大的一个困难是什么?如何解决的?
你对与解决这些问题是否有自己的体系呢?
好的,你说你实现了一个配置中心,你在实现配置中心之前是否有调研一些配置中心?
好的,说一说这些配置中心的区别?
说一说nacos和apollo在底层实现上的区别?
好的,那么你是如何实现配置的加载的呢?
好的,你是如何实现配置的动态变更的呢?
好的,你是如何实现心跳机制的呢?
好的,你的配置信息是如何存储的?数据库还是?
好的,你说你了解熟悉raft算法,你是如何使用这个算法的呢,你都做了些什么在组内?
好好,那你是在那些地方进行数据同步的呢?
算法:
请手写一个前缀树,包含增删改查功能。
好的,现在我有一个场景,xxxx,,记不下来了,反正又臭又长:
总结一下就是问,为什么hashmap不用前缀树来做查找?
然后还问,前缀树的优缺点,特点,如何优化前缀树?
(一面挂。。。汗流浃背了老弟,前面都还好,到前缀树真懵了)

必问面试题

如下是我在面试过程中遇到的最高频的问题
1:讲一讲线上遇到的一些问题(比如OOM),然后你是如何排查和解决的呢?
2:mysql事务特性、隔离级别

你可能感兴趣的:(java,java)