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 广东

相关推荐

问的很深,我对八股了解不多,被狠狠拷打byd到现在才一面,10月15号做的笔试。要是流程真的走下去不知道走到什么时候问的问题:1. 拷打项目,问的巨深,直接问怎么进行前后端设计,数据库设计,用了哪些东西,产出哪些东西。还好我是组长,勉强答出来一些,但他似乎不太满意,说正常开发流程是这样子的吗?我说,呃我们就是这么开发的。他说哦。2. Springboot为什么这么方便,可以开箱即用?我说简化了配置,有一个启动类。然后答了一堆废话,说不对,然后问启动类的逻辑怎么实现的,我说不知道。3. Mybatis你是怎么用的?说了一下使用过程,mapper,配置文件,service,serveceImpl。然后问Mybatis为什么能这么干?我说因为读取了一些配置文件,底层用jdbc,然后说了一堆废话,他说不对,现在假如要你设计一个mybatis,你会怎么写?我说就正常java的文件读写,读到配置类,做一些字符串处理,拼接成sql字符串。然后又说了一堆废话,接连被打断说不对,然后重新说,又说了一堆废话。然后问:Mybatis的bean为什么可以创建,是在什么时机创建的,为什么别的类可以用到这个bean。我说这还是启动类的问题,启动类的逻辑我不知道。4. Springboot的请求与响应逻辑是什么?我直接老四样,请求-dispatcherservlet-handlermapping-controller,以前背过类似的八股文,凭印象胡讲一通,也不知道说了什么。5. 反问环节:我有什么不足。说我简历写的不行,不能有前端开发写在里面,重点不突出,每个项目写的太多,看起来费劲总结:虽然胡讲一通,但是面试官感觉比较专业,是根据简历出题的,顺水推舟的参杂八股文。没手撕,估计要撕的话得二面。能不能过取决于他到底要不要招人
卑微小徐程序员:这确实有点深,不是单纯八股
查看8道真题和解析
点赞 评论 收藏
分享
3 49 评论
分享
牛客网
牛客企业服务