VIVO 一面

讲讲你的这个批量导入功能是怎么实现的?

你说的这个监听器是监听什么?

其中的涉密字段转换是怎么转换的?主要是哪些字段转换?

有没有做过批量导出功能呢?假如现在有百万级的数据需要导出,怎么做呢?

没有做过

如果是实现批量导出的话,监听器和实体类的DTO是要重新构建的,还需要再在程序外套一层IO文件输出流的逻辑。

如果现在思考如何实现的话,首先可能需要对数据源进行划分,再通过多线程结合JUC的信号量来进行实现批量导出。

对于百万级别的excel数据的导入,如何优化?

导入的痛点:一次加载百万级别数据到内存,发生OOM

如果一条条循环插入,数据库链接不够用

导出的痛点:

一次查询百万条数据,mybatis查询超时报错

一次加载百万条数据到内存,发生OOM

写到一个Sheet中,打不开

一行一行的写入到Excel,频繁的io操作,CPU飙升

操作高峰期,系统容易内存溢出

解决方式

1、选用合适的excel开源处理框架阿里的 easyexcel

2、百万级别导入方案

逐行解析excel数据,分批读取excel数据放到list,list达到一定数据量持久化到DB,同时清空list列表数据

采用MyBatis的foreach批量保存、myBatis plus批量saveBatch方法保存、spring jadbcTemplate,不过记得配置连接池参数要加上 rewriteBatchedstatements=true

3、百万级别导出方案

分批分页查询db数据到内存,比如一次查询5000条,分20次分批查询出来

每次加载指定大小的数据到内存,比如每次5000条,5000条批量写入到excel以后,清空当前list,释放内存.分多个sheet写入,每个sheet比如放20w,100百万数据放到5个sheet

每次从数据库批量读取指定大小的数据写入到excel,比如每次5000条

4、解决高峰期导入导出资源瓶颈

、从产品侧设计的时候,引导产品,将导入导出功能设计成异步,尽量不要同步等待,虽然牺牲了一点体验,但是长期看对系统的稳定非常重要。(为了产品的体验,可以提供一个统一excel导入导出历史记录功能给产品或运营同学,支持查看对应的下载进度,可追溯)

.前端导入导出按钮控制操作的频率,比如10分钟内不能频繁导入导出。

.后端导入导出采用MQ异步排队处理,防止把内存写爆,CPU打满。

,采用动态配置开关控制导入导出的数量,通过压测预估系统处理数据的阈值默认配置一个,导入导出超过阈值需要产品或运营发邮件申请,开发修改配置,如果业务确实有超大数据量要求,超过阈值太多,引导产品或运营分批导入导出解决。

讲讲你下个项目中的这个主要是做了什么?

回答更新了RABC,需要将老旧方法进行更新,如果对有关Redis中的缓存数据进行了更改,就需要对缓存数据进行实时更新。

主要是通过AOP的注解与Spring的缓存注解结合完成的。

SpringBoot有哪些常用的注解?

1.SpringBoot为什么启动那么快?

Spring Boot之所以能够帮我们简化项目的搭建和开发过程,主要是基于它提供的起步依赖和自动配置。

SpringBoot 的诞生就是为了简化 Spring 中繁琐的 XML 配置,其本质依然还是Spring框架,使用SpringBoot之后可以不使用任何 XML 配置来启动一个服务,使得我们在使用微服务架构时可以更加快速的建立一个应用。

2.SpringBoot starter有了解过吗?有自定义过吗?

starter简单来讲就是引入了一些相关依赖和一些初始化的配置。

Spring官方提供的starter名称为:spring-boot-starter-xxx 例如Spring官方提供的spring-boot-starter-web

第三方提供的starter名称为:xxx-spring-boot-starter 例如由mybatis提供的mybatis-spring-boot-starter

3.在Spring中,对控制反转有了解吗?

4.那为什么在项目里不直接New一个对象,而是采用IOC的方式来进行对象的创建?

5.在容器里装载Bean,通过哪些方式可以对Bean进行获取?

6.条件注解有了解过吗?根据不同的条件来装载Bean

7.Spring怎么来配置事务了解吗?

8.Controller层和Service层也是对象,是不是在容器里管理?

9.对Controller这一层来说,使用它的时候是不是单例作用域?

10.Mybatis操作数据库的原理和JDBC什么关系?

底层还是JDBC来做的

11.Mybatis的缓存层级

12.项目中的用户登录是怎么做的?

13.Session管理的登录态,讲讲Session和Cookie的区别

14.Session每次请求都会带一个SessionID,产生的过程是什么样的?

Session要标识这个请求,服务端来生成,后面每次请求都会带上这个SessionId来标识是同一个请求。

15.Session管理的机制,怎么实现的?

16.你使用Redis主要存储什么数据?

17.Redis可以存储哪些类型的数据?

18.Java里面如何操作Redis?

19.Redis配置的时候需要配置哪些内容?

IP+Port

20.那里用到了Kafka?

21.毕业有论文要求?能正常毕业吗?

22.工作地点有要求吗?

23.手头有Offer吗?

反问:

1.面试官你要不要考察一下数据结构与算法?

今年还是比较难,Vivo的编制比较紧张

2.哪些强化一些比较好?

Spring了解的不是很透彻,所有的应用开发Spring是基础,加强一下。

全部评论
大佬一面过了否
点赞 回复
分享
发布于 2023-03-26 12:12 湖北
写得好详细
点赞 回复
分享
发布于 2023-03-26 12:45 广东
滴滴
校招火热招聘中
官网直投

相关推荐

3 40 评论
分享
牛客网
牛客企业服务