2024面试题分享
一、技术类
1、你项目中的分布式系统如何保证请求的幂等性?
select id ,name from table_# where id='##' for update;
update table_xxx set name=#name#,version=version+1 where version=#version#
2、Nacos的服务注册发现原理是怎样的?服务注册表的结构是怎样的?注册一个服务的流程是怎样的?
1)服务注册:当一个微服务启动时,它会向Nac0s服务器发送一个注册请求,将自己的服务信息(如服务名、IP地址、端口号等)注册到Nacos服务器的服务注册中心。
2)服务发现:当一个微服务需要调用其他微服务时,它可以通过向Nac0s服务器发送一个服务发现请求,获取指定服务名的所有可用实例信息。Nacos服务器会从服务注册中心中查询到对应的服务实例列表,并返回给调用方。
3)服务健康检査:Nacos服务器会周期性地向微服务发送健康检査请求,以确定微服务是否可用。微服务可以根据收到的健康检查请求作出响应,同时也可以上报自身的健康状况给Nacs服务器,Nacos服务器会根据微服务的健康状况更新服务实例的可用状态,及时删除不可用的服务实例。
4)服务订阅与通知:当一个微服务需要订阅某个服务的变化(如新增或下线实例),它可以通过向Nacos服务器发送一个服务订阅请求来进行订阅。一旦有新的服务实例注册或下线,Nacos服务器会即时通知给订阅方,让其感知服务变化。订阅方可以根据收到的通知及时更新自己的服务实例列表。
综上所述,Nacos通过服务注册发现来实现微服务架构中的服务管理,提供了服务注册、服务发现、服务健康检查和服务订阅与通知等功能。这使得微服务之间的通信更加灵活和简化,同时也提高了整个系统的可靠性和可扩展性。
底层实现原理:https://blog.csdn.net/qq_45038038/article/details/134724228
3、Linux如何查询一个应用占用的磁盘和内存大小?
1)查询磁盘使用情况
使用 du 命令:
du -sh /path/to/application
这将显示应用目录的总大小。
使用 df 命令:
df -h /path/to/application
2)查询内存使用情况
使用 ps 命令结合 awk 和 sort:
ps aux --sort=-%mem | grep [your_application_name] | awk '{print $2, $4, $7}'
这将显示进程ID、内存使用率和进程的名称。
使用 top 或 htop 命令:
在 top 中,你可以按 %MEM 列来排序,找到你感兴趣的应用。
在 htop 中,你可以直接搜索应用名称,并查看其内存使用情况。
使用 /proc 文件系统:
cat /proc/[PID]/status | grep Mem | awk '{print $2, $4}'
将 [PID] 替换为你的应用进程ID。这将显示进程的RSS (Resident Set Size) 和共享内存大小。
3)查询特定进程的资源使用情况
如果你知道应用的进程ID (PID),你可以使用以下命令:
磁盘使用情况:
du -sh /proc/[PID]/fd/* | awk '{print $1}' | xargs du -h | sort -hr | head -n 10
内存使用情况:
cat /proc/[PID]/status | grep Mem | awk '{print $2, $4}'
将 [PID] 替换为你的应用进程ID。
4、SpringBean的生命周期?
SpringBean的生命周期是从Bean实例化之后,即通过反射创建出对象之后,到Bean成为一个完整对象,最终存储到单例池中,这个过程被称为Spring Bean的生命周期。
这个生命周期分为以下几个阶段:
1)实例化:Spring容器根据配置信息或注解创建Bean的实例。可以通过构造函数实例化,也可以通过工厂方法实例化。 2)属性赋值:在实例化后,Spring容器会将配置的属性值或注解中的属性值注入到Bean实例中。这个过程可以通过setter方法注入,也可以通过字段注入。 3)初始化:在属性赋值完成后,Spring容器会调用Bean的初始化方法。在这个阶段,可以进行一些初始化操作,如数据加载、资源准备等。 4)使用:在初始化完成后,Bean就可以被应用程序使用了。在这个阶段,Bean会被注入到其他Bean中,或者通过Spring容器获取并调用其方法。 5)销毁:当应用程序不再需要Bean时,Spring容器会负责销毁Bean。 以上内容仅供参考,更多详细信息可以咨询编程领域的专业人士或访问相关论坛。
5、Spring数据库事务的传播方式有几种,在A类里的M1方法里声明1个事务,然后再调用B类的M2带事务的方法,它们在事务链上是怎样保存的?REQUERY传播 的M2事务回滚后,M1事务会怎样?
总共有7种,分别是:
PROPAGATION_REQUIRED: 这是默认值。如果当前存在事务,那么就使用当前事务。如果没有事务,就新建一个事务。 PROPAGATION_SUPPORTS: 如果当前存在事务,则支持当前事务。如果没有事务,就以非事务的方式继续运行。 PROPAGATION_MANDATORY: 如果当前存在事务,则使用当前事务。如果没有事务,就抛出异常。 PROPAGATION_REQUIRES_NEW: 总是新建一个事务。如果当前存在事务,则挂起当前事务。 PROPAGATION_NOT_SUPPORTED: 运行非事务。如果当前存在事务,则挂起当前事务。 PROPAGATION_NEVER: 非事务地运行,如果当前存在事务,则抛出异常。 PROPAGATION_NESTED: 如果当前存在事务,则嵌套事务作为一个子事务运行。如果当前没有事务,则此行为等价于PROPAGATION_REQUIRED。
M1事务会怎样的详细试验代码:
https://zhuanlan.zhihu.com/p/436332667
总结在注解事务的方法内部捕获了异常则不会触发回滚,否则会进行回滚
6、项目引用了第三方包里的一个服务,这个服务里有一个S1方法有问题,如何查找出项目中哪些方法调用了S1方法?
在不修改第三方包代码的情况下,如何调整S1方法的代码?
7、业务架构、技术架构、部署架构,这三者的关系是怎样的?
8、让你创建一个租户规模1000万的SAAS应用,技术架构应该怎么做?
9、做项目的时候如何保证开发质量?
二、软实力
1、入职后接手一个旧项目开发,如果文档很少、没有人能帮助你了解,你应该怎么做呢?
- 理解项目的目标与功能:首先,你需要深入了解项目的目标和主要功能。这可能需要对代码进行阅读,以及在可能的情况下与项目的早期开发人员交流。
- 审查代码:代码是理解项目结构和功能的关键。从头到尾阅读代码可能是一项庞大的任务,但这是非常重要的。寻找项目的入口点,例如主函数或类,然后逐步深入。
- 查看项目文件:检查项目的文档、邮件、会议记录和其他相关文件,以了解项目的开发背景和决策过程。
- 尝试运行项目:尽可能频繁地运行项目,以便更好地理解其行为。当遇到错误时,尝试理解其背后的原因,这有助于理解代码的逻辑。
- 与团队成员交流:尽管可能没有专人负责协助你,但与团队其他成员的交流仍然非常有价值。他们可能已经对这个项目有一定的了解,或者至少可以提供关于项目的一些线索。
- 编写文档:一旦你对项目的结构和功能有了更好的理解,开始编写文档是个好主意。这不仅可以帮助你巩固理解,还可以为未来的开发工作提供便利。
- 持续学习和探索:软件开发是一个持续学习的过程。随着你对项目的理解加深,你可能需要进一步学习新的概念和工具。
- 请教导师或专业人士:如果有可能,找到一个经验丰富的开发者或导师,向他们请教和学习。这可以帮助你更快地适应新项目。
- 保持积极的心态:接手一个没有充分文档化的项目可能会让人感到沮丧,但请记住,这是一个学习和成长的机会。通过解决挑战,你可以提升自己的技能和知识。
- 定期回顾和计划:为自己设定里程碑和检查点,确保你在项目中取得进展。同时,为未来的工作制定计划,以便更有效地推进项目。
面对这种情况时,请保持耐心和开放的心态。通过不断的努力和学习,你将逐渐掌握这个项目的方方面面。
2、如果手头有很多工作,你如何确定先处理哪些事?
当面临多件工作时,首先要确定优先级,以确保时间和资源得到最有效的利用。以下是一些建议来确定先处理哪些事情:
- 紧急且重要的事项:首先处理那些既紧急又重要的事项。这些任务通常需要立即关注,因为它们对项目的进展或组织的成功有直接的影响。
- 重要的事项:接下来处理重要但非紧急的事项。这些任务虽然不要求立即完成,但它们对组织的长期目标或项目的最终结果有关键影响。
- 紧急的事项:如果存在一些紧急事项,但它们不直接对组织的成功或项目的最终结果产生影响,可以将其排在其他优先级较低的任务之前完成。
- 优先级低的任务:最后处理优先级低的任务。这些任务通常是一些较小的、不重要的或可推迟的工作。
- 评估和重新评估:在处理完紧急和重要的任务之后,重新评估剩余的任务,以确保合理安排时间和资源来完成其他任务。
- 委托或寻求帮助:如果某些任务超出了你的能力范围或优先级,考虑将其委托给其他团队成员或寻求外部专家的帮助。
- 计划和组织:使用项目管理工具、日程安排程序或其他组织工具来帮助跟踪任务、设置截止日期和提醒,以确保工作按计划进行。
- 保持灵活性:在处理多个任务时,要保持灵活性,随时准备调整优先级或应对突发情况。
通过以上方法,可以更有效地管理多项任务,提高工作效率和质量。
3、项目需要加班,但是有人却不愿意加班,作为项目负责人你该怎么做?
作为项目负责人,面对有人不愿意加班的情况,首先要明确项目目标和期限,然后采取以下措施:
- 沟通理解:了解他们不愿意加班的原因,是因为家庭、健康、其他工作等,还是对加班的看法有所保留。理解他们的立场,为他们提供支持和解决方案。例如,提供调休、支付额外工资或安排合理的工作时间。
- 说明重要性:尽可能详细地说明项目的重要性,解释项目成功带来的益处。这可以激发团队成员的责任感和使命感,促使他们愿意为项目加班。
- 合理安排加班:确保加班是必要的,并且尽可能控制在合理范围内。合理安排加班时间,避免过度劳累,确保团队成员在工作之余也有足够的休息和娱乐时间。
- 提供激励:为了鼓励团队成员加班,可以提供一些激励措施,如额外的项目奖金、表扬或晋升机会等。
- 求助上级:如果仍然无法解决问题,可以向上级领导求助。通过与上级沟通,寻求他们的支持和协助,共同解决团队成员不愿意加班的问题。
- 考虑备选方案:如果有人持续不愿意加班,可能需要考虑其他备选方案。例如,寻找其他愿意加班的团队成员、外包或寻找其他合作伙伴来完成项目。
总的来说,需要理解、尊重团队成员的意愿和感受,同时也要确保项目的顺利进行。以上建议仅供参考,具体方法还需根据实际情况灵活调整。
题目的回答仅供参考,如果你觉得有更好的答案,欢迎在评论区留言、讨论