整理-科大讯飞面经
自我介绍
面试官,您好。我叫杨路恒,今年24岁,山东济宁人,就读于陕西师范大学,今年研三,软件工程专业,研究方向为知识图谱。大学时间到研究生期间的主要技术栈是Java 。在校期间参与了全国大学生数学建模竞赛和全国大学生英语竞赛,并且在数学建模比赛中担任队长并获得了陕西省一等奖。另外最近一段在联想实习的经历,主要在是对大模型进行开发应用。说到业余爱好的话,一个是比较喜欢通过博客整理分享自己所学知识,现在在CSDN上的访问量达到了44W+。 另一个是喜欢旅游和骑行的方式来放松。这就是我的自我介绍,感谢。
1.项目规模,主要负责啥,有没有写设计文档,怎么进行接口设计?
2.对前端了解吗?有自己写过代码吗?
3.对JVM的理解(对堆的过程进行扩展)
4.项目里有使用多线程并发操作吗?
5.线程池的过程
6.TCP与UDP的了解,一般在什么场景下使用?
7.有一个服务中心,可能有上百万的连接,应该怎么设计,来能知晓每一个连接的主机是存在还是下线
使用心跳机制 - 每个连接的客户端定期向服务端发送心跳包表示仍然在线,服务端如果在一定时间内没有收到心跳包,则认为该连接已断开。可以设置不同的心跳间隔时间用于区分不同类型的连接。
8.有一台部署的服务器,之前一直是正常使用,突然有一天发现一个网页要10s左右才能打开,应该怎么去排查?可能有哪些问题
- CPU使用率高 - 登录服务器top命令查看CPU使用率,是否有异常进程占用CPU。优化或隔离高CPU进程。
- 内存利用率高 - free命令查看内存使用情况,是否存在内存泄漏或溢出。
9.Mysql了解吧,可以行锁吗?行锁是怎么做的?
MySQL InnoDB存储引擎是通过索引加锁的方式实现行级锁的。
- InnoDB的行锁是在索引上实现的,不是直接在数据行上加锁。
- 对主键索引的加锁等同于对数据行的加锁。因此主键索引非常重要。
- InnoDB行锁有共享锁和排他锁两种模式。
10.数据库的高级调优有做过嘛?除了explain
show processlist
11.一条sql的执行流程
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.索引失效的情况
- 在索引列上做任何操作,会使索引失效,例如计算、函数、类型转换等
- 使用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来实现。具体步骤如下:
- 定义Person类,其中有属性name和age。
- 创建一个Person对象数组存入ArrayList中。
- 实现一个 Comparator,重写compare()方法,在方法中比较两个Person对象的age大小。
- 调用Collections.sort()方法,传入ArrayList对象及自定义的Comparator进行排序。