【面经】2024春招-软件开发工程师-后端方向1

面经整理系列:

【面经】软件开发工程师-后端方向1

岗位与面经

岗位介绍

JD:
美团-软件开发工程师-后端方向-1小时左右
金融服务平台 技术平台

岗位职责
1.负责各类后台服务和业务系统的需求分析、系统设计、开发实现;
2.参与后端模块、数据平台、基础服务等的开发工作;
3.分析并优化业务流程,参与系统长期架构设计与规划,探索合理、可扩展的系统模型,通过自动化等手段提升研发效率,提升需求迭代速度与系统能力;
4.保证系统稳定性,提升系统的容灾、降级及应急能力,提升系统的可用性和可维护性,协同QA保证高质量开发交付,优化系统性能、及时排查线上故障,保证系统稳定;
5.积极主动协调相关团队完成项目,促进团队合作,积极影响其它成员。

任职要求
1.本科及以上学历;
2.掌握一种以上的开发语言,包括但不限于Java、C、C++、Python、Golang等,了解MySQL等基本使用,熟练使用SQL语句,会常用的shell命令;
3.具有扎实的数据结构、操作系统、数据库、算法、网络等计算机基础知识;
4.优秀的学习能力和自驱力,对新技术有强烈的求知精神,能深入代码研究,能通过英文论文等第一手资料了解业界新技术,积极学习新技术提升自我、提升团队;
5.优秀的逻辑思维能力,特别是流程梳理能力和建模能力,善于从复杂系统表象中分析问题。具有较强的解决问题能力,对解决复杂问题充满激情;
6.善于交流,有良好的团队合作精神和协调沟通能力,有一定推动能力。

具备以下经验者优先:
1.有参与各级计算机竞赛并获奖经历;
2.有原创的技术博客或者开源项目或者参与过知名的开源项目。

岗位亮点:
1.美团业务场景复杂,能够接触商家、销售、广告营运、骑手等的各种需求,流量超大,且仍在高速发展中,相关的后台系统建设非常具有挑战性;
2.公司技术氛围浓厚,对外有知名的技术博客,对内有技术学院和技术委员会,大牛众多,各层级的技术交流和培训机制非常完善。

部门面经(重点):

虽然每个组的差异还是会很大,但是精确到小组是不可能的,所以就重点看下每个部门的面经把。

参考1:nowcoder.com/discuss/534122060923015168
参考2:nowcoder.com/discuss/353158636098756608
参考3:nowcoder.com/feed/main/detail/7239f89bc2d646a19e58287609f29c4d


其他美团面经(后端开发):

1、nowcoder.com/feed/main/detail/669a5dabed334ca79f0b0cb5e29fe4c8
2、nowcoder.com/feed/main/detail/59a30a62caed422c8a3d907ec1705e8d
3、nowcoder.com/feed/main/detail/c192fd36058b4f5780d617439a604248
4、nowcoder.com/feed/main/detail/e2aadc517ed24d179894193698fc8ec6

基础1:数据库 & 网络

1、重点

  • 最左索引规则?b = 2 and c = 3 and a > 1 会走吗?
  • Redis 的数据结构?Hash 的底层实现?为什么用压缩列表
  • Redis 怎么做持久化的? AOF 和 RDB 的优缺点?宕机时的损失?
  • 用缓存会有什么问题?(一开始以为是一致性问题)(击穿、雪崩)如何避免?
  • 事务的隔离等级? 可重复读怎么解决幻读?

2、重点

  • 你觉得网关稳定性要考虑哪些方面?
    网关的配置编排如何实现的?
    Mock 服务怎么实现的?我记得支付宝有通用的 Mock 框架,你们的 Mock 服务和他们的有啥区别?
    MySQL 的聚簇索引和非聚簇索引有什么区别?
    Redis 的基本数据类型有哪些?zset 底层是什么实现的?跳表是个什么样的结构?
    Redis 哨兵机制了解吗?
    观察者模式了解吗?

3、重点

  • RDB 和 AOF 有啥区别?有什么优劣势?

  • 用过哪些设计模式?

  • MySQL 的那些日志文件了解吗?都是干啥的?

4、重点:

  1. TCP和UDP的区别
  2. HTTPS如何保证安全
  3. UDP如何实现可靠传输
  4. MySQL的undolog日志原理 如何实现回滚
  5. redolog原理
  6. 讲一下两阶段提交
  7. binlog日志如何实现主从复制
  8. 聊一下建立索引需要注意的地方
  9. 如何优化sql语句
  10. 事务有哪些特性
  11. MySQL的Innodb有哪些锁 锁的原理

5、补充

  • 2.Redis数据怎么更新
  • 3.MySQL索引的数据结构
  • 4.MySQL事务隔离级别
  • 2.redis相关的(项目中怎样用的,持久化策略,缺点,为什么快等等)
  • 然后问了MySQL和Redis的一堆八股,完全不会,面试官估计也有点难绷,之后开始问简单点的

6、补充:

  • 2.redis中常用的数据结构
    3.redis抽奖功能实现,其他的数据结构可以做什么
    4.redis在项目中做什么,为什么速度快
    5.二级缓存,缓存一致性怎么解决
    7.项目上线没,流量大不大
    6.谈谈对MySQL的了解吧
    7.索引相关,项目中哪里用到了索引,为什么这么用
    8.事务相关,四大特性等等

讲讲对Mysql的认识?

  • MySQL:效率(索引),准确性(事务和锁),原理(日志和内存池)

  • Redis: 长期存储(持久化,AOF,RDB),更新(过期策略,内存淘汰),存储(缓存,雪崩,击穿,5类数据结构),分布式(主从复制,哨兵,集群)

介绍一下数据库范式

  • 比如用户表中的地址信息,拆分为省、市这种明确的字段,可以按独立的字段检索、查询。
    第一范式,要求将列尽可能最小的分割,希望消除某个列存储多个值的冗余的行为
  • 比如订单表中的商品分类、详情信息,只需要由商品信息表存储一份即可。
    第二范式,要求唯一的主键,且不存在对主键的部分依赖,希望消除表中存在冗余(多余)的列
  • 比如用户表中不需要存储额外的 其所在城市的人口、城市特点等信息。
    第三范式,要求没有间接依赖于主键的列,即仍然是希望消除表中冗余的列

基础2:系统 & 语法

1、重点

  • 为什么用 epoll?为什么不用 select 和 poll?ET 和 LT 区别?怎么选择?优缺点?
  • 跳表结构?时间空间复杂度?

2、重点

  • 讲讲 Spring 的 IOC?

3、重点

  • 中间件学啥了?

  • RPC 核心的技术要点是啥?Sofa RPC 支持哪些序列化方式,和 Dubbo 有啥区别?为啥用 Hessian?你知道序列化最关心什么?

  • 分布式事务怎么解决的?实践过吗?

  • 为啥要看别的机会?

  • 你对 Java 哪一块知识点比较熟?为啥对 JVM 和并发编程比较熟?为啥看这两块?

  • 有一个主线程,主线程里有 5 个任务,5 个任务独立执行,互不依赖,但是需要这 5 个都执行完了,才能整体返回,这个场景有多少种解决方法?

  • JVM 学啥了?这玩意为啥看两遍?实际上用到过 JVM 吗?

  • Java 基础的源码看过吗,看过啥源码?为啥看源码?

  • HashMap 线程不安全是吧,不安全的点在哪啊?你知道 resize() 方法吗?

4、重点:

  1. CPU和GPU的区别
  2. java的集合相关
  3. HashMap相关
  4. ConcurrentHashMap相关
  5. Java内存区域有哪些
  6. 对象的创建过程
  7. 说一下内存分配原则
  8. 有哪些垃圾收集算法
  9. Spring的IOC的原理
  10. SpringBoot的原理
  11. BeanFactory和FactoryBean的区别
  12. SpringBoot有哪些注解

5、补充:

  • IOC容器和AOP在项目里的应用

  • Spring、Spring MVC、Spring Boot、Spring Cloud的区别

  • 9.做项目时遇到的难题,这里刚开始说偏了,说了两个编程时遇到的java相关问题

  • 10.用到的设计模式,单例,装饰,适配器,代理。怎么用到项目里的

  • 3.问了SpringAOP和IOC的相关概念(我简历上写了对应的)

  • springboot,springMVC和spring有什么区别

  • arraylist和linkedlist使用场景

  • hashmap扩容,和hashtable的区别

  • 什么叫做线程不安全

  • 线程池参数,实际配置参数要考虑什么

  • 线程数和CPU关系

  • threadlocal目的和使用场景

  • jvm内存结构

  • 说说gc算法,新生代和老年带对象怎么回收,gc roots有哪些

Spring、Spring MVC、Spring Boot、Spring Cloud的区别

  • 简而言之,Spring 是一个全功能的 Java 应用程序框架,Spring MVC 是用于构建 Web 应用程序的一部分,Spring Boot 是简化 Spring 应用程序开发和部署的工具,而 Spring Cloud 则是用于构建分布式系统和微服务架构的工具集合
  • Spring 是一个全功能的 Java 应用程序框架,用于构建企业级应用程序。
    Spring 提供了依赖注入(Dependency Injection)、面向切面编程(Aspect-Oriented Programming)、事务管理、数据访问、消息传递等功能。
    Spring 的核心是 Spring Framework,它提供了基本的控制反转(Inversion of Control)和面向切面编程的功能。
  • Spring MVC 是 Spring Framework 的一部分,用于构建基于模型-视图-控制器(Model-View-Controller,MVC)设计模式的 Web 应用程序。
    Spring MVC 提供了用于处理 Web 请求和响应的组件,包括控制器、视图解析器、拦截器等。
    开发人员可以使用 Spring MVC 来构建 Web 应用程序,实现 URL 路由、请求参数处理、数据绑定、视图渲染等功能。
  • Spring Boot 是 Spring Framework 的扩展,旨在简化基于 Spring 的应用程序的开发和部署。
    Spring Boot 提供了自动配置(Auto-configuration)、起步依赖(Starter Dependencies)等功能,使得开发人员可以快速搭建和运行基于 Spring 的应用程序,而无需手动配置大量的设置。
    Spring Boot 还集成了嵌入式的 Web 服务器,简化了应用程序的部署过程。
  • Spring Cloud 是为构建分布式系统和微服务架构而设计的一组工具和框架。
    Spring Cloud 提供了诸如服务注册与发现、负载均衡、断路器、分布式配置等功能,以帮助开发人员构建和管理分布式系统。
    Spring Cloud 基于 Spring Boot 构建,并与各种云平台和服务(如Netflix OSS、Consul、Ribbon 等)集成,提供了一套完整的解决方案来构建和管理微服务架构。

在项目中,IOC(控制反转)容器和AOP(面向切面编程)是 Spring 框架的两个核心概念,它们分别提供了不同的功能和应用场景。

  1. IOC 容器的应用:

    • 在项目中,IOC 容器负责管理应用程序中的对象依赖关系。通过 IOC 容器,开发人员不再需要手动管理对象之间的依赖关系,而是将依赖关系的控制交给了容器来管理。
    • 开发人员通常通过配置文件(如 XML 配置、Java 注解等)或者使用 Java 代码来告诉 IOC 容器如何创建、配置和组装对象。
    • 在项目中,IOC 容器的应用使得代码更加模块化、松耦合,提高了代码的可维护性和可测试性。
  2. AOP 的应用:

    • 在项目中,AOP 提供了一种在程序运行时横向切割应用程序的能力,允许开发人员在应用程序的核心业务逻辑之外插入横切关注点(Cross-cutting Concerns)。
    • 横切关注点通常是与业务逻辑无关的功能,如日志记录、性能监控、安全检查等。
    • 开发人员可以通过创建切面(Aspect)并定义切点(Pointcut)和通知(Advice)来实现 AOP。切点指定了在何处应用通知,而通知则定义了在切点处执行的具体逻辑。
    • 在项目中,AOP 的应用使得开发人员能够将横切关注点与核心业务逻辑分离,提高了代码的可维护性和可重用性,同时也减少了重复代码的编写。

综上所述,IOC 容器和 AOP 在项目中的应用可以帮助开发人员更好地管理对象依赖关系和处理横切关注点,从而提高了代码的可维护性、可测试性和可扩展性。

在配置线程池时,需要考虑一系列参数以确保线程池的性能、稳定性和资源利用率。以下是一些需要考虑的重要参数:

  1. 核心线程数(corePoolSize)

    • 核心线程数是线程池中保持活动状态的线程数量。当有任务提交时,即使空闲,核心线程也会一直保持存活状态,直到线程池关闭。
    • 核心线程数的设置应该考虑到系统的负载情况和任务的性质,避免过大或过小导致资源浪费或任务等待时间过长。
  2. 最大线程数(maximumPoolSize)

    • 最大线程数是线程池中允许存在的最大线程数量。当任务队列满了且正在运行的线程数达到核心线程数时,线程池会创建新的线程来处理任务,直到达到最大线程数。
    • 最大线程数的设置应该考虑到系统资源限制以及任务处理的并发需求,避免过大导致资源耗尽或过小导致任务堆积。
  3. 任务队列(workQueue)

    • 任务队列用于存放尚未被执行的任务。线程池会根据任务队列的状态来判断是否需要创建新的线程来处理任务。
    • 任务队列的选择可以是有界队列(如 ArrayBlockingQueue)或无界队列(如 LinkedBlockingQueue),选择适合业务场景的队列以平衡内存消耗和任务堆积。
  4. 线程存活时间(keepAliveTime)线程存活时间单位(unit)

    • 线程存活时间指的是当线程池中的线程数超过核心线程数时,空闲线程的存活时间。超过存活时间的空闲线程会被终止。
    • 存活时间的设置应该考虑到任务提交的频率和任务的处理时间,避免过短导致频繁地创建和销毁线程,或者过长导致资源浪费。
  5. 拒绝策略(RejectedExecutionHandler)

    • 拒绝策略定义了当任务无法被接收时的处理方式,例如抛出异常、丢弃任务或者调用者自行处理。
    • 拒绝策略的选择应该考虑到业务需求和系统的稳定性,确保未处理的任务能够得到妥善处理。
  6. 线程工厂(ThreadFactory)

    • 线程工厂用于创建新的线程,可以自定义线程的名称、优先级、守护状态等属性。
    • 线程工厂的定制可以帮助在出现线程问题时更好地进行线程跟踪和调试。
  7. 其他参数

    • 其他一些可选的参数包括任务执行超时时间、任务执行完成后的钩子函数、任务执行统计等,根据具体需求进行配置。

在配置线程池时,需要综合考虑系统的负载情况、任务的性质和数量、系统资源的限制等因素,以及避免出现资源浪费、性能瓶颈和任务堆积等问题。

模板3:算法 & 项目

1、重点

  • 自我介绍
  • 拷打项目,成功率?高并发?压测?
  • 接受转语言吗?(我有得选吗?)
  • 了解什么设计原则?
  • sql 题一个表(stu、class)中被学生选超过五次的课程和数量
  • Linux 命令排序并去重 a.txt 的内容输出到另一个文件
  • C++ 多生产者多消费者自定义环形缓冲区(写了快一百行,万幸没问题)
  • 反问:后续流程?一轮技术加 HR;接受 C++ 吗?没有语言要求(谁信);业务?扫码结账那个牌子
  • 总结:强度还是很大,手撕写了一百行,算是常考题了还是要多总结一下多练练
    感觉答得没什么毛病,手撕也凑合,四个工作日后感谢信,三战团子没进过二面,呜呜呜太菜了
  • 面过同一个部门,也是一面挂,看到佬也过不去释然了,应该是他们要求太高了

2、重点

  • 自我介绍
  • 先做一道题,剑指 Offer II 049. 从根节点到叶节点的路径数字之和
  • 介绍一下实习的项目
  • 你觉得你最擅长的是什么?
  • 在支付宝实习有哪些收获?
  • 平常看什么书?
  • 反问:你们这边做什么业务

3、重点

  • 自我介绍
  • 问实习的项目
  • 实习压力大吗? 对自己成长满意吗? 你实习期间最大的成长是啥? 学到啥了?
  • 这个项目你们搞过几次 Code Review?上线之后缺陷是什么样子的?有关注过吗?投产用了吗?
  • 项目经历是你自己搞的吗?博客网站能访问吗?
  • 现在在面哪些公司?为啥面这些公司?
  • 对地理位置有要求吗?
  • 你这些相关课程分算高的吗?专业排名多少?
  • 对美团的意向?
  • 反问:具体讲一下业务(支付、平台、收单、收银台、交易、结算、会员中心、认证中心)(我补充下,这边可以为业务做xx价值)
  • 对我有什么建议,哪些方面可以提升一下?(我回去提高下)
  • 结果多久能出来(很想进,不会放鸽子)
  • 美团的新人培养机制

4、重点

  • 聊项目和实习
  • 时间太久远,只能回想出来这么多问题了
  • 没有做题

5、重点

  • 全程扣实习做的项目的细节 其中穿插问一下相关的八股
  • 聊了一下《高性能MySQL》和《DDIA》中的知识点
  • 做题:链表中的两数相加

6、重点:

  • 自我介绍
  • 职业规划
  • 本科和研究生时期印象最深的事 有哪些遗憾的事
  • 有哪些offer
  • 做的项目有哪些收获

7、补充:

  • 手撕的是一道合并有序数组
  • 11.两道编程题,都不难,但是第一次手撕有点紧张,以后要练练压力编程了
  • 1.面试官先进行了部门的业务及自我介绍
  • 4.项目的数据库是怎样设计的,举一个表的例子,有哪些字段等等
  • 7.一道Java集合的操作题目,不是算法
  • 自我介绍
  • 项目拷打
  • 手撕是二叉树层序遍历,我直接说不会然后就反问结束

补充

一面45分钟左右

项目 & 算法
1、两个项目,选一个有个性的讲一下,难点和挑战是什么?
2122. 买卖股票的最佳时机 II
我讲一下大概的思路:贪心的找递增序列。 
什么样的递增序列呢? 我理解是可以反悔的,就算后面有更高的,再减一下就行。
可以调试一下吗? 边界条件有点问题
class Solution {
public:
    int maxProfit(vector<int>& prices) {
        int res = 0;
        for(int i = 1; i < prices.size(); i++){
            if(prices[i]>prices[i-1]) res += prices[i]-prices[i-1];
        }
        return res;
    }
};
3、技术栈是什么?主要是Java和MySQL。可以接受转语言。
4、业务是做什么的?上海,金融支付业务,用户打开了金融相关的,然后记录数据,推荐给用户,对算法没有指定的要求。我讲一下推荐系统,之前项目里python用了协同过滤,两个维度,用户和商品,记录用户的标签数据,访问数据,相乘后得到用户对某个商品的可能喜欢程度,做一个推荐,先粗排再精排。

八股:
+ Java了解吗,对springboot的理解,微服务的理解,将很多东西整合起来。讲一下JVM的原理,可以跨平台。
+ http协议?什么层的,get/post四种方法,put了解吗,https为什么安全,具体流程。
+ TCP为什么可靠?三次握手四次挥手,丢包了怎么办,滑动窗口实现机制讲一下。
+ 没问数据库(白看了一天)


  • 8
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
2023年3月11日,美团聘笔试中共包含五道编程题目。以下是对每道题目的简要说明: 1. 题目一:这道题目要求解决一个数字统计的问题。可能涉及到的知识点包括数据结构、循环和条件判断等。解决问题的思路可能是使用字典等数据结构来保存统计结果,并使用循环逐个读取输入数据并进行统计。 2. 题目二:这道题目可能是一个字符串处理的问题。需要使用字符串的方法进行操作,如提取、拼接、查找和替换等。可能的解决思路包括使用正则表达式、切片和遍历等。 3. 题目三:这道题目可能涉及到算法和数据结构的知识。可能是一道涉及到数组、链表、树等数据结构的问题。解决思路可能包括遍历、递归、搜索和排序等。 4. 题目四:这道题目可能是一个动态规划的问题。需要根据给定的条件和规则,通过动态规划的方式求解问题。解决思路包括定义状态和转移方程,使用递推或记忆化搜索进行求解。 5. 题目五:这道题目可能是一个图论或网络问题。需要根据给定的图或网络结构,解决一个相关的问题。可能涉及到广度优先搜索、深度优先搜索、最短路径等知识。解决思路可能包括使用图或网络的相关算法进行求解。 以上只是对这五道编程题目的一些可能情况进行的简要描述,具体的题目内容可能会有所不同。希望这些信息能对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小哈里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值