【2024秋招】2023-9-21 度小满信贷系统平台部三面

2023-10-21 16:52

本文主要是介绍【2024秋招】2023-9-21 度小满信贷系统平台部三面,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1 实习

1.1 你做了哪方面的工作

1.2 你负责的是项目中哪一部分

1.3 你这些小需求都是什么类型的呢,介绍一下

1.4 机房换线是你们做的吗

1.5 你具体负责你这个系统中的哪方面的内容呢,比如具体的一个服务

答:服务基本都建的差不多,所以我负责的主要还是在原有的基础上做一些增加操作

1.6 具体有哪些类型的接口

答:

1.7 别人是怎么调用你的呢?调用方是谁呢

答:使用客户端调用我们,我们使用springcloud feign进行rpc调用

1.8 从需求提出到上线经历过哪些步骤

答:运维方跟我商量->系统发布->接收任务->本地编写代码并且测试->测试环境测,然后使用它的人会进行测试->合并到线上环境分支->通过流水线的构建进行发布

1.9 有专门的测试人员测试还是自测

答:没有

1.10 有没有碰到过什么问题呢,怎么解决的呢

答:OOM

1.11 发生oom的文件是手动dump还是自动dump的呢

答:设置heapdumpOnOOM这个参数,还设置了一个dump path,指定dump日志

1.12 你怎么分析dump文件的呢

答:使用mat

1.13 你这个dump文件大概有多大呢,为什么呢

答:当时设置的堆内存是8GB吧,然后dump文件接近8GB

当Java应用发生OutOfMemoryError(OOM)并生成堆转储(heap dump)时,转储文件的大小取决于当时的堆使用情况。

  1. 最大情况: 如果你为JVM设置了8GB的堆大小(通过-Xmx参数),那么在最坏的情况下,即堆几乎完全被使用时,转储文件的大小接近8GB。

  2. 通常情况: 但在实际情况中,当OOM发生时,堆可能没有完全被使用,所以转储文件的大小可能小于8GB,但仍然接近此值。

  3. 压缩: 一些工具和JVM实现提供了在创建时压缩堆转储的功能,这可以显著减小转储文件的大小。例如,使用Oracle HotSpot JVM的-XX:+HeapDumpOnOutOfMemoryError参数生成的转储文件是未压缩的,但可以使用工具(如gzip)进行后续压缩。

  4. 分析工具: 请注意,不是所有的堆分析工具都能处理压缩的转储文件。如果你计划使用特定的工具来分析转储,你应该先检查其对压缩转储的支持情况。

  5. 考虑磁盘空间: 考虑到转储文件可能非常大,确保在配置JVM生成OOM转储时有足够的磁盘空间是很重要的。如果磁盘空间不足,转储过程可能失败。

总的来说,如果为JVM设置了8GB的堆,并期望生成OOM转储,你应该为转储文件预留接近8GB的磁盘空间(或更多,以考虑其他文件和操作系统需求)。

1.14 你这个对象大概占用了多大的空间呢,为什么呢

答:大概6个GB吧,因为老年代和年轻代的比例是2:8,所以老年代的空间是6.4G,但是年轻代中还有一些其他的对象,所以这个对象大概占用gGB左右

1.15 你们g1的年轻代和老年代的比例设置的是多少,是用默认的吗,能不能用默认的呢

答:

对于G1垃圾收集器,默认情况下,年轻代(Young Generation)和老年代(Old Generation)的比例是动态计算和调整的,以满足暂停时间目标(默认情况下是200ms)。

G1垃圾收集器并没有直接提供设置固定年轻代与老年代比例的参数。但它提供了以下参数来影响年轻代的大小:

  • -XX:G1NewSizePercent:这是年轻代最小值占整个堆大小的百分比,默认值为5%。
  • -XX:G1MaxNewSizePercent:这是年轻代最大值占整个堆大小的百分比,默认值为60%。

这意味着,按默认设置,年轻代的大小将会动态调整,在整个堆的5%到60%之间。

然而,G1会根据实际的工作负载和指定的目标暂停时间(通过-XX:MaxGCPauseMillis参数设置)来调整年轻代的实际大小。目标是使垃圾收集的暂停时间尽可能地接近指定的目标。

总的来说,虽然你不能直接设置一个固定的年轻代和老年代的比例,但可以通过上述参数间接地影响和控制年轻代的大小。如果你决定更改这些默认值,建议进行性能测试,以确保修改后的设置能满足你的需求。

1.16 通过mat分析dump文件之后,你是怎么找到那个大的对象呢?你怎么知道这个对象是你的某一个对象呢?

答:

Memory Analyzer Tool (MAT) 是一个非常强大的工具,用于分析Java堆转储文件,并识别内存泄漏和高内存消耗的原因。以下是使用MAT分析转储文件并找到大的或潜在泄露的对象的基本步骤:

  1. 概述报告 (Overview Report):

    • 打开转储文件后,MAT会显示一个概述报告,其中列出了大的对象、大的对象数组和其他可能的内存泄漏的线索。
  2. Histogram视图:(确定大对象)

    • 这是一个对象按类型排序的列表,它显示了每种对象的实例数和它们在堆中占用的总空间。
    • 通过检查这个列表,你可以很容易地看到哪些对象类型占用了最多的内存。
  3. 支配者树 (Dominator Tree):

    • 这个视图显示了哪些对象持有了最大部分的内存。这不仅仅是单个对象的大小,还包括由该对象引用的其他对象的大小。
    • 这有助于找到那些“持有”大量内存的对象。
  4. 路径到GC根:

    • 当你选中一个特定的对象时,可以查看它到垃圾收集根的路径。这有助于确定为什么一个对象没有被垃圾回收。
  5. 泄漏疑点报告 (Leak Suspects Report):

    • 如果MAT识别出可能的内存泄漏,它会生成一个泄漏疑点报告。这个报告可以提供关于潜在泄漏原因的有价值的线索。
  6. 识别自定义对象:

    • 在Histogram或Dominator Tree视图中,对象通常按它们的完整类名列出。通过类名,你可以识别这些对象是来自你的应用的哪一部分,或它们属于哪个特定的库或框架。
  7. 查看对象内容:(确定某一个大对象是自己写的)

    • 当你选中一个对象时,MAT允许你查看其字段和值。这可以帮助你进一步理解为什么某个对象在内存中占用那么多空间。
  8. 查询语言:

    • MAT提供了一个强大的查询语言(OQL),你可以使用它来执行复杂的查询和分析。

总之,分析堆转储文件并识别高内存消耗的原因需要经验和对应用的深入理解。使用MAT提供的工具和视图,结合你对应用的知识,通常可以有效地识别和解决内存相关问题。

1.17 所以你的解决办法是什么呢

答:串行化数据中心

1.18 那有没有考虑过一个数据中心也会导致OOM呢

答:我当时是做了冗余的,大概是考虑到快手的日活再增加一倍,流量增加一倍,然后数据中心的零件增加一倍,同步的数据增加一倍,那么单个数据中心零件可能只是由10w增加到20w这样的,这样内存也是够用的。而零件数量翻倍可能需要好几年才能实现,甚至实现不了

1.19 你的日活的数量根数据中心的数据量关系是什么

答:正相关

1.20 有没有一种情况日活不变,但是机器的使用量变大呢

答:有可能的,可能存在流量突增,比如快手的某一个热点新闻这里的

1.21 你这个项目中之前的日志是怎么记的呢

答:之前的日志做的很粗粒度

1.22 你给这个日志是做了什么优化呢?

答:我的任务是将日志进行分级,然后分发到kafka和ES中

1.23 这个是你mt让你做的,还是你自己想做的

答:mt布置的

1.24 你是怎么做的呢

答:我是将不同级别的日志放到不同的目录下,然后有专门的工具负责将这个数据同步到ES和kafka中

1.25 你在里面做了什么呢

答:主要是将日志进行分级吧,仅仅是改一下logback的配置文件

1.26 我想在每一行的日志里面打印当前机器的ip,怎么做

答:

为了在每条Logback日志中都加上机器的IP,你可以采用以下方法:

1. 获取IP地址

首先,你需要有一个方法来获取机器的IP地址,就像我之前提供的那样。可以创建一个工具类或者在你的主应用类中实现这个方法。

2. 将IP地址加入MDC(Mapped Diagnostic Context)

Logback提供了MDC机制,允许你将额外的上下文信息加入到每条日志消息中。首先,你需要在应用启动时将IP地址放入MDC中。

例如:

import org.slf4j.MDC;public class AppInitializer {public static void initialize() {String ipAddress = getLocalIPAddress(); // 使用之前提供的方法MDC.put("ipAddress", ipAddress);}
}

确保在应用启动时调用AppInitializer.initialize()

3. 在Logback配置中使用MDC

接下来,你需要在logback.xml中配置Logback,以使其使用MDC中的IP地址。这可以通过添加%X转换词来实现。

<configuration><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} [IP: %X{ipAddress}] - %msg%n</pattern></encoder></appender><root level="info"><appender-ref ref="STDOUT" /></root>
</configuration>

注意这里的[IP: %X{ipAddress}]部分,这会从MDC中获取IP地址并将其加入到每条日志消息中。

以上步骤应该使每一条日志都带有机器的IP地址。不过,一旦设置,确保你不要在应用运行期间修改MDC中的IP地址值,以免产生不一致的日志记录。

1.27 curd启动器是怎么做的

答:和mybatisPlus的差别

2 mysql

2.1 现在有一张学生成绩表sc,有sno,class,grade,我现在想要一个sql找出每一个班级分数最高的学生的成绩,班级以及学号?

答:

SELECT s.sno, s.class, s.grade
FROM student_scores s
JOIN (SELECT class, MAX(grade) as highest_gradeFROM student_scoresGROUP BY class
) as max_scores
ON s.class = max_scores.class AND s.grade = max_scores.highest_grade;

2.2 SELECT class, MAX(grade) as highest_grade FROM student_scores GROUP BY class order by highest_grade; 其中order by是对分组后的结果排序呢还是先排序再分组呢

答:先分组,然后再对分组后的结果进行排序

3 秒杀系统

3.1 你为什么会想做秒杀系统呢,而不是单独的订单系统呢

答:是因为能从这个项目中学到很东西

3.2 说说微服务拆分原则,以及你是怎么拆分的

答:

微服务拆分是一个复杂的过程,涉及将单一的、大型应用拆分为多个独立、松耦合的小型服务。正确地拆分微服务可以带来伸缩性、维护性和灵活性的优势,但如果拆分得不好,可能会导致更多的管理负担和复杂性。

以下是一些微服务拆分的基本原则:

  1. 单一职责原则 (Single Responsibility Principle):
    每个微服务应该有一个明确的、独特的功能或责任。这样,当某个功能需要更改或扩展时,只需要修改一个服务。

  2. 领域驱动设计 (Domain-Driven Design, DDD):
    根据业务领域和子领域(也称为边界上下文)将服务划分为独立的微服务。这有助于确保服务之间的职责明确,并减少它们之间的耦合。

  3. 常见模式的识别:
    例如,某些通用功能(如身份验证或日志记录)可能适合作为独立的服务,供其他服务调用。

  4. 避免紧密耦合:
    微服务之间应该松耦合。一个微服务的更改不应该需要更改其他微服务。这也意味着服务间的接口应该保持稳定,即使服务的内部实现发生变化。

  5. 数据库解耦:
    每个微服务应该有自己的数据库或数据存储,以避免多个服务直接访问同一数据库,这可能会导致紧密耦合。

  6. 考虑团队结构:
    Conway’s Law指出,组织结构会影响软件设计。根据团队的能力和结构来拆分微服务可以提高效率,因为每个团队可以完全拥有和管理一个或多个微服务。

  7. 考虑性能和数据一致性:
    某些高吞吐或低延迟的操作可能不适合拆分为微服务,因为网络调用可能会增加延迟。此外,某些业务流程可能需要事务性或强一致性,这可能会影响如何拆分服务。

  8. 迭代和增量拆分:
    开始时,不必急于将所有东西都拆分为微服务。可以从一个宏服务开始,然后根据需要和学到的经验逐渐拆分。

  9. 技术异构性:
    微服务允许使用不同的技术栈为不同的业务需求选择最合适的工具。但同时,这也可能带来管理和维护的复杂性。要在技术多样性和标准化之间找到平衡。

  10. 考虑网络和故障:
    微服务之间的通信是通过网络进行的,这意味着网络延迟和故障是必然的。设计微服务时,要考虑重试、超时和断路器等模式。

当考虑微服务拆分时,除了上述原则外,还需要考虑团队的经验、当前的技术堆栈、业务需求和长期的维护和管理成本。

3.3 秒杀主要体现在哪个地方呢,吞吐量高吗还是

答:对

3.4 你的极限吞吐量怎么得来的

答:是因为我发现进一步提高线程数的时候,它的tps在下降

3.5 有没有可能是发压的地方扛不住了呢

答:不会。

3.6 你在什么样机器上发出这1w个请求呢,为什么能抗住这1w线程或者更多的并发请求呢

答:本地,16GB的内存,8核心,首先我是在本地进行压测的,它不涉及到远程通信,此外它的秒杀接口返回的信息量很少,各个服务也是本地部署,也就是说本机进程之间的通信速度也很快,这样就是说开的这些线程并发数虽然很高,但是也会很快消失。

3.7 那你这里2600TPS没法提高的瓶颈大概是在什么地方呢?假设我想让他提到3000,4000,需要在哪些地方做优化呢

答:对redis进行水平扩展,redis可以分片,然后对每一个微服务都进行集群部署,进行负载均衡,也可以

3.8 刚刚你说对redis做水平扩展,是默认了redis已经是瓶颈了是吗

答:并不一定,得整个系统进行扩展,综合考虑

3.9 你觉得你写的这个系统在,是哪一个地方的资源或者哪一种资源不够,导致需要做水平扩展呢,比如IO,磁盘,网络,线程,内存和cpu

答:

(1)如果是指提升整个的这个微服务的后端系统的总体的tps能力,可以在发压方进行集群部署,然后进行压测,每一个线程随机访问某一个接口

(2)如果是为了提升秒杀接口的tps,我觉得还是订单集群做水平扩展比较好,相当于扩充了它的cpu处理能力吧,这样的话客户端调用秒杀接口的请求可以做负载均衡操作

4 rpc框架

4.1 你从哪儿了解到这个rpc框架

答:

4.2 你用到哪个协议,讲讲

答:用的手写的上层应用协议

4.3 为什么不使用http呢,而是要自定义呢

答:

(1)适配特定应用场景,更加适配,发挥极致性能

(2)想了解netty是如何做到自定义协议的,我自己的自定义能不能跑的通

(3)和http对比一下,深刻了解http的一些机制

4.4 实现序列化的方式有哪些

5 学习能力

5.1 你平常是怎么学习一项技术的

答:首先肯定是因为我现在正需要这一项技术去解决当前的业务问题,所以我会抽取一两周的时间集中攻克这个难题,然后我会看看有没有介绍demo或者视频,更倾向于跟着视频一步步复现,然后实现一些diy的功能,如果跑通了,就应用到自己的业务场景中,最后会再和其他的解决方案做一下对比,看看能不能优化

5.2 学习渠道

答:gpt4,看书,公众号,视频学习

5.3 快手的时候为什么不能转正呢

答:

5.4 有无其他offer,哪个部门

答:用友bip

5.5 后面想去哪些行业和部门

答:待遇为导向,没有特别偏好

5.6 对我们了解多吗

答:…

6 反问

6.1 后面有没有hr面呢

答:可能有,也可能没有

6.2 您管理的是哪个部门呢

答:管理的就是风控下的数据团队

6.3 你们做的大数据也是用java吗

答:上层系统是java,但是底层是hive,spark,python等吗

6.4 你们团队的hive,spark等框架也是自己写的是吗

答:对,很多东西我们自己都会研发一部分,跟开源的有一些区别

6.5 面试结果什么时候出来

答:等这一个批次结束,每一个有一个分数,然后进行排序

这篇关于【2024秋招】2023-9-21 度小满信贷系统平台部三面的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/255701

相关文章

流媒体平台/视频监控/安防视频汇聚EasyCVR播放暂停后视频画面黑屏是什么原因?

视频智能分析/视频监控/安防监控综合管理系统EasyCVR视频汇聚融合平台,是TSINGSEE青犀视频垂直深耕音视频流媒体技术、AI智能技术领域的杰出成果。该平台以其强大的视频处理、汇聚与融合能力,在构建全栈视频监控系统中展现出了独特的优势。视频监控管理系统EasyCVR平台内置了强大的视频解码、转码、压缩等技术,能够处理多种视频流格式,并以多种格式(RTMP、RTSP、HTTP-FLV、WebS

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

综合安防管理平台LntonAIServer视频监控汇聚抖动检测算法优势

LntonAIServer视频质量诊断功能中的抖动检测是一个专门针对视频稳定性进行分析的功能。抖动通常是指视频帧之间的不必要运动,这种运动可能是由于摄像机的移动、传输中的错误或编解码问题导致的。抖动检测对于确保视频内容的平滑性和观看体验至关重要。 优势 1. 提高图像质量 - 清晰度提升:减少抖动,提高图像的清晰度和细节表现力,使得监控画面更加真实可信。 - 细节增强:在低光条件下,抖

2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题

题库来源:安全生产模拟考试一点通公众号小程序 2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题是由安全生产模拟考试一点通提供,流动式起重机司机证模拟考试题库是根据流动式起重机司机最新版教材,流动式起重机司机大纲整理而成(含2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题参考答案和部分工种参考解析),掌握本资料和学校方法,考试容易。流动式起重机司机考试技

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听

【专题】2024飞行汽车技术全景报告合集PDF分享(附原数据表)

原文链接: https://tecdat.cn/?p=37628 6月16日,小鹏汇天旅航者X2在北京大兴国际机场临空经济区完成首飞,这也是小鹏汇天的产品在京津冀地区进行的首次飞行。小鹏汇天方面还表示,公司准备量产,并计划今年四季度开启预售小鹏汇天分体式飞行汽车,探索分体式飞行汽车城际通勤。阅读原文,获取专题报告合集全文,解锁文末271份飞行汽车相关行业研究报告。 据悉,业内人士对飞行汽车行业

高效录音转文字:2024年四大工具精选!

在快节奏的工作生活中,能够快速将录音转换成文字是一项非常实用的能力。特别是在需要记录会议纪要、讲座内容或者是采访素材的时候,一款优秀的在线录音转文字工具能派上大用场。以下推荐几个好用的录音转文字工具! 365在线转文字 直达链接:https://www.pdf365.cn/ 365在线转文字是一款提供在线录音转文字服务的工具,它以其高效、便捷的特点受到用户的青睐。用户无需下载安装任何软件,只