在实习期间,我有幸参与到面试协助工作中,这使我得以近距离接触到丰富多样的面试场景,也深切体会到不同候选人在技术知识储备和思维方式上的差异。 面试结束后,我意识到这些面试问题是宝贵的学习资源,它们不仅涵盖了编程语言基础、数据结构与算法、数据库、框架等多个关键领域,还涉及到实际项目开发中的各种场景。为了能更深入地理解这些问题,我前往牛客网,在众多资料中精心挑选了一系列完整且具有代表性的面试问题。在此,我要特别感谢那些在牛客网分享面经的同学,是你们的无私分享,让我有了更全面的素材进行学习,原面经出处我都已标清。 之后,借助豆包强大的分析与解答能力,对这些问题进行了全面且深入的剖析,形成了这份面经答案思路汇总。 这份汇总不仅是对面试问题的解答,更是我个人学习和成长的记录。我希望它能为正在求职的同学提供一些参考,帮助大家更好地应对面试挑战;也希望能与同行们分享交流,共同提升我们在技术领域的认知水平。
算法:lc19.删除链表的倒数第N个结点
====================================================
二面
算法:lc102.二叉树的层序遍历
作者:Czzzzzzzz链接:
文本
链接
确认
$ https://www.nowcoder.com/feed/main/detail/d27704499b5c41e0bd0019a8d158a052$ 来源:牛客网
- 先向面试官说明使用快慢指针的思路,这样能在一次遍历中找到目标节点,时间复杂度为O(n)。 - 具体实现步骤:定义两个指针,快指针先向前移动N步;然后快慢指针同时移动,直到快指针到达链表末尾;此时慢指针指向的就是倒数第N + 1个节点,删除其下一个节点即可。 - 注意处理边界情况,如链表为空、N为0、N大于链表长度等,确保代码的健壮性。
列举常用指令,如ls
(列出目录内容)、cd
(切换目录)、mkdir
(创建目录)、rm
(删除文件或目录)、cp
(复制文件或目录)、mv
(移动或重命名文件或目录)、grep
(文本搜索)、top
(查看系统资源使用情况)等,并简单说明每个指令的使用场景和基本参数。
- 向面试官说明使用队列实现层序遍历的思路,即借助队列先进先出特性,按层依次处理节点。 - 具体实现步骤:先将根节点入队;然后循环取出队列头部节点,将其值加入结果列表,并将其左右子节点(若存在)入队;持续循环直到队列为空,此时结果列表即为二叉树的层序遍历结果。 - 注意处理边界情况,如根节点为空时直接返回空列表,确保代码完整、正确。
1、Redis有哪些客户端,有什么区别2、限流算法,漏桶和令牌桶使用场景3、为什么选择RabbitMQ,kafka了解过吗,使用场景4、如何避免消费端重复消费,什么情况下会出现重复收到消息5、粘包半包是什么,怎么在项目中解决的6、自定义的协议有哪些字段7、Springboot怎么做到导入就可以直接使用的8、mysql默认隔离级别,可重复读能够解决幻读问题吗9、举一个可重复读下出现幻读的例子10、mysql有哪些日志,都有什么作用11、插入一行数据,分别什么时候写入这三个日志12、线上项目,没有日志,没后台数据的情况下怎么找出问题算法:lc415字符串相加第一次面试,巨紧张,回答的都不是很好
作者:Czzzzzzzz链接:
文本
链接
确认
$ https://www.nowcoder.com/feed/main/detail/dd1f2a0a303644dab4b53c5be40caf9b?sourceSSR=users$ 来源:牛客网
Kafka是一个高吞吐量的分布式消息系统,它的主要特点是高并发、高扩展性和容错性好。
Spring Boot会扫描classpath
下的META - INF/spring.factories
文件,该文件中定义了各种自动配置类。当我们在项目中引入某个依赖时,Spring Boot会根据依赖的信息,找到对应的自动配置类,并根据项目的配置属性进行自动配置。
例如,当我们引入spring - boot - starter - web
依赖时,Spring Boot会自动配置Spring MVC相关的组件,如DispatcherServlet
、视图解析器等,我们不需要手动进行大量的配置就可以直接使用Web开发的功能。
幻读是指在同一事务中,两次相同的查询返回了不同数量的行。
在可重复读隔离级别下,InnoDB存储引擎通过MVCC(多版本并发控制)和间隙锁机制,在很大程度上解决了幻读问题。MVCC保证了在同一事务内多次读取数据的一致性,间隙锁防止了其他事务在查询范围内插入新的数据。但严格来说,可重复读并没有完全解决幻读问题,对于一些特殊情况,如在事务中先插入一条数据,然后再进行相同条件的查询,还是可能出现幻读现象。
users
表,包含id
和age
两个字段。现在有两个并发事务:
复制
删除
复制
删除
在事务T1中,第一次查询返回了10条记录。在T1事务还未提交时,事务T2插入了一条新记录并提交。当T1进行第二次查询时,发现返回了11条记录,这就出现了幻读现象,因为在T1事务内,两次相同的查询返回了不同数量的行。
i
和j
,分别指向两个字符串的末尾。carry
,用于记录每一位相加的进位。carry
。i
和j
,如果其中一个字符串已经遍历完,继续处理另一个字符串。以下是Python代码示例:
复制
删除
timeline:2.14晚上莫名其妙给我发了个2.20的面试,没电话通知也,但本着经验+1的想法还是面了。
一、实习介绍:
1.介绍实习有含金量的点,实习的工作。(我介绍了实习的项目)
2.接口幂等性
3.慢SQL问题,怎么发现的,场景,怎么排查
4.Mysql索引相关,索引底层,联合索引
5.联合索引和单列索引的区别(单列索引给我挖坑呢,大家注意区分单列中有主键索引和非主键索引)
6.联合索引的使用,要注意什么(最左匹配,范围查询,sql语句上运算)
二、项目介绍:
1.介绍项目有含金量的点,项目的工作(魔改黑马头条)
2.Redis常见数据类型及其底层(重点说了zset)
3.kafka解决mysql和redis的数据一致性问题,其他还有什么方案
4.布隆过滤器是什么,解决什么问题,能消除误判率吗,误判率怎么设置的
5.bitmap的作用,及常见使用场景
6.kafka怎么保证数据不丢失,我做了什么工作吗
7.假如mysql和redis使用kafka解耦之后,有一部分失败导致数据不一致怎么办(引入对账任务)
三、八股:
1.线程池相关知识,常见线程池,线程池核心参数,常见拒绝策略,线程池怎么用
2.jvm相关知识:常见垃圾回收器,常见垃圾回收算法,对象晋升老年代的方法
lc:
文本
链接
确认
$ LCR 026. 重排链表$ (难绷,手撕思路对了,没撕出来,有点不重视这个面试,算法好久没刷了)
总结:感觉问的很常规,没有什么场景题,有一些场景是我通过他的问题引申出来的。最后问了业务,感觉也不是很行,还是安心去滴滴吧,毁约实在不好。(再说了,手撕都没出来,人家给你二面吗hhhhh)
作者:给个面试机会吧链接:
文本
链接
确认
$ https://www.nowcoder.com/$ 来源:牛客网
以下是针对校招水平的面试问题,提供一些常见的回答思路和答案。这些问题涵盖了技术基础、项目经验、算法能力以及软技能等多个方面。
问题:请做一下自我介绍。
回答思路:
示例回答:“大家好,我是XX大学计算机专业的应届毕业生。在校期间,我参与了多个项目,比如基于Spring Boot开发的在线商城系统,负责后端接口设计和数据库优化。此外,我还曾在某公司实习过三个月,主要负责高并发场景下的接口性能优化。我对分布式系统和微服务架构有浓厚兴趣,希望能在贵公司进一步提升自己的技术能力。”
回答思路:
示例回答:“接口幂等性是指同一个请求多次执行产生的结果是一致的,不会因为重复调用而导致数据异常。常见的实现方式包括:
回答思路:
EXPLAIN
分析执行计划。示例回答:“可以通过MySQL的慢查询日志发现慢SQL,通常会设置一个阈值(如1秒)。排查时可以使用EXPLAIN
命令查看执行计划,检查是否存在全表扫描、索引未命中等问题。常见场景包括:
回答思路:
示例回答:“MySQL的索引底层是基于B+树结构实现的。B+树的特点是所有数据存储在叶子节点上,便于范围查询和排序。联合索引的作用是可以通过组合多个字段来提高查询效率,减少索引占用的空间。使用时需要注意最左匹配原则,即查询条件必须从联合索引的第一个字段开始匹配,否则后续字段的索引将失效。”
回答思路:
示例回答:“Kafka可以通过以下方式保证数据不丢失:
acks=all
,确保消息被所有副本确认;min.insync.replicas
参数,确保写入至少N个副本;回答思路:
示例回答:“我参与了一个基于Spring Cloud的电商平台项目,主要负责用户登录模块和订单管理模块。在用户登录模块中,我实现了JWT令牌认证机制,确保用户的会话安全;在订单管理模块中,我优化了高并发场景下的库存扣减逻辑,避免了超卖问题。最终,我们的系统在双十一大促期间成功承载了超过10万QPS的流量。”
回答思路:
示例回答:“Redis的常见数据类型包括String、Hash、List、Set和ZSet。
回答思路:
示例回答:“布隆过滤器是一种空间高效的概率型数据结构,用于判断元素是否存在于集合中。它的特点是速度快、内存占用低,但可能会产生误判(即判断存在但实际上不存在)。误判率无法完全消除,但可以通过增加位数组大小或调整哈希函数数量来降低误判率。”
回答思路:
示例回答:“线程池的核心参数包括:
corePoolSize
:核心线程数;maximumPoolSize
:最大线程数;keepAliveTime
:空闲线程存活时间;workQueue
:任务队列。常见的拒绝策略包括:AbortPolicy
:直接抛出异常;CallerRunsPolicy
:由调用线程执行任务;DiscardPolicy
:直接丢弃任务;DiscardOldestPolicy
:丢弃队列中最旧的任务。”回答思路:
示例回答:“JVM的常见垃圾回收器包括Serial、Parallel、CMS、G1和ZGC等。对象晋升老年代的条件包括:
问题:LCR 026. 重排链表
回答思路:
代码示例:
复制
删除
回答思路:
示例回答:“我的缺点是有时候过于埋头苦干,缺少与团队的沟通交流。但在实习期间,我已经意识到这一点,并学会了在复杂需求下先与同事讨论,理清思路后再动手。同时,遇到问题时我会优先尝试通过论坛或AI工具寻找解决方案,实在解决不了才会寻求同事的帮助。”