中大厂应届面试

艾****科技有限公司

1.介绍一下自己(来自哪个学校,什么专业,现在在哪,意向城市是哪,做过什么项目。你老家在哪)

2.你的项目是什么实习项目还是学校作业应用到实际领域中了吗?

3.使用到过哪些微服务组件

  • 注册中心/配置中心 Nacos

  • 负载均衡 Ribbon

  • 服务调用 Feign

  • 服务保护 sentinel

  • 服务网关 Gateway

4.你使用的微服务参与到哪些模块

5.介绍一下nacos的作用

我理解的是主要三块大功能,分别是服务注册 、服务发现、服务状态监控

我们当时项目采用的eureka作为注册中心,这个也是spring cloud体系中的一

个核心组件

  • 服务注册:服务提供者需要把自己的信息注册到eureka,由eureka来保存这

些信息,比如服务名称、ip、端口等等

  • 服务发现:消费者向eureka拉取服务列表信息,如果服务提供者有集群,则

消费者会利用负载均衡算法,选择一个发起调用

  • 服务监控:服务提供者会每隔30秒向eureka发送心跳,报告健康状态,如果

eureka服务90秒没接收到心跳,从eureka中剔除

我看你之前也用过nacos、你能说下nacos与eureka的区别?

我们当时xx项目就是采用的nacos作为注册中心,选择nacos还要一个重要原

因就是它支持配置中心,不过nacos作为注册中心,也比eureka要方便好用

一些,主要相同不同点在于几点:

共同点

Nacos与eureka都支持服务注册和服务拉取,都支持服务提供者心跳方式做

健康检测

Nacos与Eureka的区别

①Nacos支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时

实例采用主动检测模式

②临时实例心跳不正常会被剔除,非临时实例则不会被剔除

③Nacos支持服务列表变更的消息推送模式,服务列表更新更及时

④Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;

Eureka采用AP方式

6.说说Spring、SpringBoot、SpringCloud的常用标签并介绍一下这些标签的作用

Spring:

  • 第一类是:声明bean,有@Component、@Service、@Repository、@Controller

  • 第二类是:依赖注入相关的,有@Autowired、@Qualifier、@Resourse

  • 第三类是:设置作用域 @Scope

  • 第四类是:spring配置相关的,比如@Configuration,@ComponentScan 和@Bean

  • 第五类是:跟aop相关做增强的注解 @Aspect,@Before,@After,@Around,@Pointcut

SpringBoot:

  • Spring Boot的核心注解是@SpringBootApplication , 他由几个注解组成 :@SpringBootConfiguration: 组合了- @Configuration注解,实现配置文件的功能;

  • @EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项

  • @ComponentScan:Spring组件扫描

SpringMVC

  • 有@RequestMapping:用于映射请求路径;

  • @RequestBody:注解实现接收http请求的json数据,将json转换为java对象;

  • @RequestParam:指定请求参数的名称;

  • @PathViriable:从请求路径下中获取请求参数(/user/{id}),传递给方法的形式参数;

  • @ResponseBody:注解实现将controller方法返回对象转化为json对象响应给客户端。

  • @RequestHeader:获取指定的请求头数据,

  • 还有像@PostMapping、@GetMapping这些。

7.说一下IOC、AOP吧

aop是面向切面编程,在spring中用于将那些与业务无关,但却对多个对象产

生影响的公共行为和逻辑,抽取公共模块复用,降低耦合,一般比如可以做

为公共日志保存,事务处理等

8.怎么使用到了AOP,怎么实现的。

我们当时在后台管理系统中,就是使用aop来记录了系统的操作日志主要思路是这样的,使用aop中的环绕通知+切点表达式,这个表达式就是要找到要记录日志的方法,然后通过环绕通知的参数获取请求方法的参数,比如类信息、方法信息、注解、请求方式等,获取到这些参数以后,保存到数据库

10.启动线程的几种方式

在java中一共有四种常见的创建方式,分别是:

  1. 继承Thread类、
  2. 实现runnable接口、
  3. 实现Callable接口、
  4. 线程池创建线程。

通常情况下,我们项目中都会采用线程池的方式创建线程。

11.线程池了解多少

嗯!是这样

在jdk中默认提供了4中方式创建线程池

  • 第一个是:newCachedThreadPool创建一个可缓存线程池,如果线程池长度

超过处理需要,可灵活回 收空闲线程,若无可回收,则新建线程。

  • 第二个是:newFixedThreadPool 创建一个定长线程池,可控制线程最大并发

数,超出的线程会在队列 中等待。

  • 第三个是:newScheduledThreadPool 创建一个定长线程池,支持定时及周

期性任务执行。

  • 第四个是:newSingleThreadExecutor 创建一个单线程化的线程池,它只会

用唯一的工作线程来执行任 务,保证所有任务按照指定顺序(FIFO, LIFO, 优

先级)执行。

12.Mysql用过吗?说说有哪些索引类型

  1. PRIMARY KEY(主键索引)
  • 每个表只能有一个主键索引,它保证了数据的唯一性,并且通常用于标识表中的每一行。
  1. UNIQUE(唯一索引)
  • 用于确保某列或某几列的组合值的唯一性,可以有多个列,但每个组合的值必须唯一。
  1. INDEX(普通索引)
  • 这是最基本的索引类型,没有唯一性的要求,用于提高查询效率。
  1. FULLTEXT(全文索引)
  • 用于对文本数据进行全文搜索,通常用于大型文本字段,如文章内容。
  1. COMPOSITE(复合索引/组合索引)
  • 一个索引包含两个或多个列,适用于多个列经常一起进行查询操作的情况。

13.你怎么去定位sql的效率低,通常会怎么来优化sql

定位

如果一条sql执行很慢的话,我们通常会使用mysql自动的执行计划

explain来去查看这条sql的执行情况,比如在这里面可以通过key和key_len检

查是否命中了索引,如果本身已经添加了索引,也可以判断索引是否有失效

的情况,第二个,可以通过type字段查看sql是否有进一步的优化空间,是否

存在全索引扫描或全盘扫描,第三个可以通过extra建议来判断,是否出现了

回表的情况,如果出现了,可以尝试添加索引或修改返回字段来修复

优化

嗯,这个在项目还是挺常见的,当然如果直说sql优化的话,我们会

从这几方面考虑,比如建表的时候、使用索引、sql语句的编写、主从复制,读写分离,还有一个是

如果量比较大的话,可以考虑分库分表

14.写sql语句的时候需要注意哪些

15.怎么判断命中索引

  1. 使用EXPLAIN关键字 在MySQL中,可以通过EXPLAIN关键字来查看一个查询的执行计划。执行计划中的key列会显示查询中实际使用的索引名称。如果key列的值为NULL,则表示查询没有使用索引;如果显示具体的索引名称,则表示查询使用了该索引。
  2. 查看sys.dm_db_index_usage_stats动态管理视图 在SQL Server中,可以通过sys.dm_db_index_usage_stats动态管理视图来查看索引的使用情况。这个视图提供了索引的使用统计信息,包括user_seeksuser_scansuser_lookupsuser_updates等列,通过这些统计信息可以判断索引是否被使用。
  3. 分析查询计划 在SQL Server中,可以通过查询计划来确定是否使用了索引。如果查询计划中显示使用了索引,那么说明索引已经被成功使用,查询性能较高。如果查询计划中没有使用索引,那么可能需要考虑优化查询或者添加适当的索引来提高查询性能。
  4. 使用SHOW INDEX命令 在MySQL中,可以使用SHOW INDEX命令来查看表的索引信息,包括索引的名称、列、类型等,但这个命令不显示索引的使用情况。
  5. 慢查询日志 开启慢查询日志可以帮助识别那些执行时间较长的查询,通过分析这些查询的日志,可以判断索引是否被有效使用,以及是否需要优化索引。

16.定位慢查询

嗯~,我们当时做压测的时候有的接口非常的慢,接口的响应时间超过了2秒

以上,因为我们当时的系统部署了运维的监控系统Skywalking ,在展示的报

表中可以看到是哪一个接口比较慢,并且可以分析这个接口哪部分比较慢,

这里可以看到SQL的具体的执行时间,所以可以定位是哪个sql出了问题

如果,项目中没有这种运维的监控系统,其实在MySQL中也提供了慢日志查

询的功能,可以在MySQL的系统配置文件中开启这个慢日志的功能,并且也

可以设置SQL执行超过多少时间来记录到一个日志文件中,我记得上一个项

目配置的是2秒,只要SQL执行的时间超过了2秒就会记录到日志文件中,我

们就可以在日志文件找到执行比较慢的SQL了。

17.哪些操作可能会引起sql的效率

  1. 全表扫描
  • 当查询没有使用索引或者索引不适用时,数据库可能会执行全表扫描,这会大大降低查询效率。
  1. 复杂的JOIN操作
  • 涉及多个表的复杂连接操作,尤其是在没有适当索引的情况下,可能会导致查询效率低下。
  1. 子查询
  • 某些情况下,子查询可能会导致查询效率降低,尤其是在子查询中进行多次全表扫描时。
  1. OR条件
  • 使用多个OR条件的查询可能会使索引失效,导致查询性能下降。
  1. 类型转换
  • 在WHERE子句或JOIN条件中进行类型转换可能会导致索引失效。
  1. 函数和表达式
  • 在索引列上使用函数或计算表达式可能会阻止数据库使用索引。
  1. 大数据量的表
  • 对于包含大量数据的表,即使是简单的查询也可能需要较长时间来执行。

18.介绍xxl-job,你在项目中的使用流程

XXL-JOB是一个轻量级的分布式任务调度平台,具有以下特点:

  1. 平台化:提供可视化界面,易于任务管理和监控。
  2. 易部署:快速安装和配置,可以迅速投入使用。
  3. 开发迅速:支持快速开发和部署新的任务。
  4. 学习简单:文档齐全,上手快。
  5. 轻量级:资源占用少,适合各种规模的项目。
  6. 易扩展:支持集群部署,可以根据需求水平扩展。

在项目中使用XXL-JOB的简要流程包括:

  1. 搭建调度中心:下载XXL-JOB源码,执行SQL脚本创建数据库表,配置数据库连接和调度中心信息,然后启动调度中心。
  2. 配置执行器:在业务项目中引入XXL-JOB依赖,配置执行器信息(如AppName、IP、端口等),并创建执行器配置类。
  3. 编写任务Handler:在业务项目中编写具体的任务逻辑,继承XXL-JOB提供的接口或使用注解标注任务。
  4. 创建和管理任务:在XXL-JOB的调度中心界面创建任务,设置任务的调度时间和执行参数。
  5. 启动任务:在调度中心启动任务,执行器接收任务并执行相应的业务逻辑。

19.说一下redis有哪些数据类型,你在什么时候用到了redis

  1. String:简单的键值对,用于缓存和计数器。
  2. List:有序列表,适用于消息队列。
  3. Set:无序集合,自动去重,用于存储唯一项。
  4. Sorted Set:有序集合,支持范围查询,适合排行榜。
  5. Hash:键值对集合,用于存储对象。

20.你是通过什么路径学习的Java

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值