整理-科大讯飞面经

杨大大...大约 5 分钟

自我介绍

面试官,您好。我叫杨路恒,今年24岁,山东济宁人,就读于陕西师范大学,今年研三,软件工程专业,研究方向为知识图谱。大学时间到研究生期间的主要技术栈是Java 。在校期间参与了全国大学生数学建模竞赛和全国大学生英语竞赛,并且在数学建模比赛中担任队长并获得了陕西省一等奖。另外最近一段在联想实习的经历,主要在是对大模型进行开发应用。说到业余爱好的话,一个是比较喜欢通过博客整理分享自己所学知识,现在在CSDN上的访问量达到了44W+。 另一个是喜欢旅游和骑行的方式来放松。这就是我的自我介绍,感谢。

1.项目规模,主要负责啥,有没有写设计文档,怎么进行接口设计?

2.对前端了解吗?有自己写过代码吗?

3.对JVM的理解(对堆的过程进行扩展)

4.项目里有使用多线程并发操作吗?

5.线程池的过程

6.TCP与UDP的了解,一般在什么场景下使用?

7.有一个服务中心,可能有上百万的连接,应该怎么设计,来能知晓每一个连接的主机是存在还是下线

使用心跳机制 - 每个连接的客户端定期向服务端发送心跳包表示仍然在线,服务端如果在一定时间内没有收到心跳包,则认为该连接已断开。可以设置不同的心跳间隔时间用于区分不同类型的连接。

8.有一台部署的服务器,之前一直是正常使用,突然有一天发现一个网页要10s左右才能打开,应该怎么去排查?可能有哪些问题

  1. CPU使用率高 - 登录服务器top命令查看CPU使用率,是否有异常进程占用CPU。优化或隔离高CPU进程。
  2. 内存利用率高 - free命令查看内存使用情况,是否存在内存泄漏或溢出。

9.Mysql了解吧,可以行锁吗?行锁是怎么做的?

MySQL InnoDB存储引擎是通过索引加锁的方式实现行级锁的。

  • InnoDB的行锁是在索引上实现的,不是直接在数据行上加锁。
  • 对主键索引的加锁等同于对数据行的加锁。因此主键索引非常重要。
  • InnoDB行锁有共享锁和排他锁两种模式。

10.数据库的高级调优有做过嘛?除了explain

show processlist

11.一条sql的执行流程

image-20221011144626201
image-20221011144626201

12.我们知道SpringBoot启动的时候是有一个@SpringBootApplication注解的,不用告诉我他包含了哪些注解内容,他在启动的时候做了什么,启动的时候它打的那些日志,是具体做了什么?有了解过吗?

当SpringBoot应用启动时,@SpringBootApplication注解起到核心作用,它触发了一系列自动配置的过程。从打印的启动日志可以看到主要做了以下工作:

加载META-INF/spring.factories中的自动配置类

这行日志表明SpringBoot读取了spring.factories配置文件,并加载了其中的自动配置类。这是SpringBoot实现自动配置的关键所在。

创建Web服务器工厂并进行自动配置

这行日志表示如果是Web应用,SpringBoot会创建嵌入式Web服务器工厂,比如Tomcat,并进行自动配置。

完成自动配置

这行日志最终标示自动配置完成,SpringBoot已经根据依赖的jar包和classpath对应用环境进行了自动配置。

启动completed

启动完成,表示SpringBoot启动过程结束,应用已启动并准备运行。

13.MySQL的事务隔离级别,会产生什么问题

1.脏读

2.不可重复读

3.幻读

14.聚簇索引和非聚簇索引

数据存储方式不同

  • 聚簇索引:索引项和数据行存储在一起,索引本身就是数据。索引项按照主键排序存储在表中。
  • 非聚簇索引:索引项和数据行分开存储。索引项在索引中,数据行在表中。

Leaf节点不同

  • 聚簇索引的叶子节点就是数据页面,包含了完整的数据记录。
  • 非聚簇索引的叶子节点存储索引键值和行指针,指向具体的数据记录。

15.MVCC机制,解决什么问题

解决可重复读隔离级别下幻读问题

16.索引失效的情况

  1. 在索引列上做任何操作,会使索引失效,例如计算、函数、类型转换等
  2. 使用like查询以通配符开头

17.TCP/UDP区别

1.连接

  • TCP 是面向连接的传输层协议,传输数据前先要建立连接。
  • UDP 是不需要连接,即刻传输数据。

2. 服务对象

  • TCP 是一对一的两点服务,即一条连接只有两个端点。
  • UDP 支持一对一、一对多、多对多的交互通信

3. 可靠性

  • TCP 是可靠交付数据的,数据可以无差错、不丢失、不重复、按序到达。
  • UDP 是尽最大努力交付,不保证可靠交付数据。

18.说几个基于TCP的协议

Http、SSH

19.设计模式了解吗

单例模式、工厂模式

20.arraylist里存储person对象,对年龄排序怎么排

使用Java的Collections.sort()结合Comparator来实现。具体步骤如下:

  1. 定义Person类,其中有属性name和age。
  2. 创建一个Person对象数组存入ArrayList中。
  3. 实现一个 Comparator,重写compare()方法,在方法中比较两个Person对象的age大小。
  4. 调用Collections.sort()方法,传入ArrayList对象及自定义的Comparator进行排序。