面试
作者:互联网
1、项目相关
描述下你们项目的技术架构吧?
后台使用的是SpringBoot+SpringMVC+Mybatis+MybatisPlus+Dubbo,Dubbo作为微服务架构技术,redis做数据缓存,mongoDB实现海量数据存储以及地理位置查询,rabbitmq作为消息服务中间件,第三方服务有环信即使通信,阿里云OSS,短信服务,基于SparkMllib推荐系统
Redis在你们项目中有哪些使用场景?
登录功能存放验证码,一些点赞相关的功能,视频点赞啊,朋友圈点赞,评论点赞.
你刚说到项目中使用了MongoDB GEO?能给我简单介绍下吗?
mongodb要进行地理位置查询的话 ,需要建立索引才可以查询,目前有两种 2d 和 2dsphere 前者是能够将数据作为二维平面的点存储起来,后者是在一个球面上面存储起来,然后可以对坐标进行查询
你们项目开发方式是什么?前后端交互方式是什么?说下接口文档编写步骤吧!
前后端分离开发,使用springmvc框架进行交互,数据传递使用的是json类型的进行传递.
你们使用RabbitMq主要在项目中解决了什么问题呢?
日志统计啊,视频,动态审核之类的功能.
你觉得你们项目有什么技术亮点?
项目业务背景是什么(是一款什么样的APP)?
一款交友app,陌生人交友.在这个快节奏的时代.
项目用到了哪些第三方?
环信,阿里云oss,阿里云短信服务,百度人脸识别
Docker容器创建的语法是什么样的?
docker create <image>
我对你们分布式文件存储小视频很感兴趣,能介绍下吗?
使用的是fastDFS分布式文件存储系统, 包括Tracker server 和 Storage server。客户端请求 Tracker server 进行文件上传. 下载,通过 Tracker server 调度最终由 Storage server 完成文件上传和下载。
Tracker server 作用是负载均衡和调度,通过 Tracker server 在文件上传时可以根据一些策略找到 Storage server 提供文件上传服务。可以将 tracker 称为追踪服务器或调度服务器。
Storage server 作用是文件存储,客户端上传的文件最终存储在 Storage 服务器上,Storage server 没有实现自己的文件系统而是利用操作系统的文件系统来管理文件。可以将storage称为存储服务器。
Docker容器日志查看命令是什么?
docker logs -f 容器名
你们项目有哪些工程(项目大致的架构)?分别的用途是什么?
一个后台管理系统的服务,一个app端的服务,一个网关,一个实体类,一个通用模块的,一个自动装配的,一个dubbo远程调用的api模块
你们项目核心功能有哪些?
圈子功能,小视频功能,探花功能,即使通讯
你刚说到你们项目用到了网关?那能详细说下你对网关的理解以及网关在你们项目中怎么使用的吗?
为全部微服务提供唯一入口点,网关起到内部和外部隔离,保障了后台服务的安全性。识别每个请求的 权限,拒绝不符合要求的请求。动态的将请求 路由 到不同的后端集群中。减少客户端与服务的 耦合 ,服务可以独立发展。通过网关层来做映射。
使用的是gateway网关 配合nacos使用.单独写一个gateway网关服务,注册到nacos上面,配置网关路由规则,然后在启动的时候他会到ncaos拉取服务.访问的时候之间访问网关,它会根据请求的路径来路由到指定服务.Sentiel来实现授权规则.
你们项目用了哪些通用解决方案?解决了什么问题?
用户是否点赞,我们使用的是redis进行缓存.比如说评论点赞,小视频点赞,动态点赞.就拿小视频点赞为例,点赞之后用小视频的id作为key,用户id作为值,存入redis中,使用的是hash的数据结构,查询小视频的时候根据小视频id与当前登录用户id判断是否点赞,做出回显.
Mysql优化你们一般怎么做的?
索引优化:
对查询频率较高,且数据量比较大的表,建立索引.
索引字段的选择,最佳候选列应当从where子句的条件中提取,如果where子句中的组合比较多,那么应当挑选最常用,过滤效果最好的列的组合.
使用唯一索引,区分度越高,使用索引的效率越高.
索引并非越多越好,如果该表增,删,改操作较多,慎重选择建立索引,过多索引会降低表维护效率.
使用短索引,提高索引访问时I/O效率,因此也相应提升了Mysql查询效率.
如果where后有多个条件经常被用到,建议建立复合索引,复合索引需要遵循最左前缀法则,N个列组合而成的复合索引,相当于创建了N个索引
复合索引命名规则 index_表名_列名 1_列名 2_列明 3
比如:create index idx_seller_name_sta_addr on tb_seller(name, status, address)
避免索引失效:
如果在查询的时候,使用了复合索引,要遵循最左前缀法则,也就是查询从所有的最左列开始,并且不能跳过索引中的列.
尽量不要在where子句中对字段进行null值判断,否则将导致引擎放弃使用索引而进行全表扫描.
尽量避免在where子句中使用!=或<>操作符,否则将导致引擎放弃使用索引而进行全表扫描.
不做列运算 where age + 1 = 10 ,任何对列的操作都将导致表稻苗,它包括数据库教程函数,计算表达式等,都会是索引失效.
查询 like ,如果是 "%aaa" 也会造成索引失效
应尽量避免在where子句中使用or来连接条件,如果一个字段有索引,一个字段没有索引,将东芝引擎放弃索引而进行全表扫描
SQL语句优化:
1.根据业务场景建立符合所有只查询业务需要的字段,如果这些字段被索引覆盖,将极大的提高查询效率.
2.多表连接的字段上需要建立索引,这样可以极大提高表连接的效率
3.where条件字段上需要建立索引,但where条件上不要使用运算函数,以免索引失效
4.排序字段上,因为排序效率低,添加索引能提高查询效率
5.优化insert语句:批量列插入数据要比单个列插入数据效率高
6.优化order by语句:在使用order by语句时,不要使用 select *,select后面要查有索引的列,如果一条sql语句中对多个列进行排序,在业务允许的情况下,尽量同时用升序或同时用降序
7.优化group by语句:在外面对某一个字段进行分组的时候,Mysql默认就进行了排序,但是排序并不是我们业务所需的,额外的排序会降低效率.所以在用的时候可以禁止排序,使用order by null禁止
select age, count(*) from emp group by age order by null
8.尽量避免子查询,可以将子查询优化为join多表连接查询
配置中心有哪些技术?如何实现热更新?
nacos,springCloudConfig.我们使用的是nacos.
方式一:
在@Value注入的变量所在类上添加注解@RefreshScope
方式二
使用@ConfigurationProperties注解代替@Value注解。
有配置中心后,配置文件加载优先级?
bootstarp.yml>nacos的配置文件>本地application.yml配置文件
网关中局部过滤器、全局过滤器、默认过滤器的加载优先级?
1.每一个过滤器都必须指定一个int类型的order值,order值越小,优先级越高,执行顺序越靠前。
2.GlobalFilter通过实现Ordered接口,或者添加@Order注解来指定order值,由我们自己指定
3.路由过滤器和defaultFilter的order由Spring指定,默认是按照声明顺序从1递增。
默认过滤器->路由过滤器->全局过滤器
全局过滤器中有个order属性,值越少优先级越高
Spring读取配置文件的方式有哪些?
Dubbo和Feign都能基于接口进行远程服务调用,基本原理是什么?
feign是基于http传输协议
dubbo支持多种传输协议(Dubbo,Rmi,Http,Redis等).默认使用dubbo协议,利用Netty,TCP传输
maven管理版本的标签叫什么?
dependencyManagement
Lock锁和Synchronized的异同?
Synchronized是同步代码块,可以用在方法上,Lock只能用在代码里面
Synchronized可以自己释放锁,Lock需要手动释放锁.
Synchronized a线程执行完同步代码会释放锁,b线程执行过程中发送异常会释放锁.
lock需要在finally中手动释放锁(unlock()方法),否则容易造成线程阻塞.
Synchronized的锁可重入,不可中断,非公平
Lock锁可重入,可判断,可公平
Lock锁适合大量同步的代码的同步问题,Synchronized锁适合代码少量的同步问题.
你主要参与项目哪个模块的开发?可以详细说说吗?
圈子功能:
主要有发布动态,动态点赞,评论点赞,查询推荐动态
2、注册登录模块相关
说说你们项目整体的登录流程是什么样的?
首先用户发送验证码,传递手机号给后台,后台生成随机验证码,以手机号为key,将验证码存入redis中,然后调用阿里云短信服务发送验证码
用户拿到验证码,输入验证码登录.后台接收手机号与验证码,根据手机号查询验证码,判断是否存在,然后判断是否正确.
正确就根据手机号查询用户是否存在,如果不存在就是新用户,根据手机号自动注册一个用户.
使用jwt技术,将手机号与用户id生成token返回给客户端.
Cookie + Session登录机制会存在什么问题?
多个微服务之间session
XSS,跨站脚本攻击。攻击者获得页面的js权限,能操作页面的一切,包括Session Storage和未设置HTTP Only属性的Cookie
CSRF,跨站请求伪造,就是钓鱼网站,在网站A,发送一个向网站B的请求,由于浏览器会在请求中加上此域的Cookie,所以如果在浏览器登录了网站B,又打开了钓鱼网站A,网站A构造的前往网站B的请求就会带上你的Cookie,如果Cookie中有用户凭证,服务器认为你是登录用户,请求就会被响应。比如点赞、关注、发色情广告等请求
解决session无法共享有什么技术方案?
使用jwt单点登录技术.也可以将session放到redis中进行同步
什么是跨域?cookie可以跨域吗?
就是请求协议不同,端口不同,ip不同就会产生跨域问题.
能详细介绍下JWT吗?它的优点是什么?你们客户端把token保存在哪儿的?
是一种规范化的token,安全,使用简单,它的加密方式是不可逆的.
放在请求头中.
你们短信平台用的哪一家?集成步骤和注意事项有哪些?
阿里云,照着文档操作.需要前
你们项目的统一鉴权如何实现的,统一鉴权数据解析又是如何实现的?
使用的是gateway中的自定义拦截器来验证token是否有效
在服务中的拦截器中拿到token,取出里面的用户id查询用户信息.判断是否具备权限
你们文件存储解决方案是什么?怎么实现的?
使用的是fastDFD分布式存储系统,运维自行搭建.
客户端从TrackerServer查询可用StorageServer
客户端从StorageServer完成文件上传下载
头像上传功能都用到了哪些技术?
阿里云OSS,百度人脸识别,redis,定时器
首先将图片上传到阿里云服务器,将图片url存入redis的一个用于存储未通过的set集合中,返回一个可以访问的url,调用百度云人脸识别验证是否是人脸,如果是人脸就存入一个通过的set集合中,没有就不存储.
使用定时器每天定时取两个set的交集,也就是人脸不同过的图片url调用阿里云OSS进行图片删除.
Java异常体系是什么?
VO、DTO、BO\Entity\POJO 分别的作用是什么?
VO是服务端返回给客户端的数据
DTO是客户端返回给服务端的数据
BO/Entity/POJO是数据库实体类
你们APP客户能够一直发短信验证码吗?
不能,每个手机号每天只能发送五次验证码.
你们人脸识别解决方案是什么?怎么实现的?
使用的是百度云人脸识别的api.
去百度云申请
有哪些常见的文件存储解决方案?你们项目用到哪些?
阿里云文件存储,FastDFS文件存储.使用的是FastDFS文件存储.
3、项目运用技术相关
你们项目用到了MongoDB,可以详细介绍下这种技术吗?
MongoDB是非关系型数据库产品的一种,是最像关系型数据库的非关系型数据库
是一个开源,高性能,支持海量数据存储的文档型数据库(不支持表关系:只能操作单表)
是一个介于关系型数据库和非关系型数据库之间的产品,是非关系数据库中功能最丰富,它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型
谈谈你们项目通用缓存设计思路,有哪些需要关注的点?
在请求执行Controller逻辑之前,需要有个**请求拦截屏障**。
在Controller执行完Return之后,这个时候可以去获取return的具体值,然后写入缓存,需要有个**请求响应增强屏障**。
1)、是不是**所有的请**求都应该**加缓存**呢?
答案是否定的,一般POST、PUT请求是提交数据,DELETE是删除数据,这种请求加缓存意义不大,只有GET请求是获取数据,加缓存处理意义重大。
2)、是不是**所有的GET请求**都应该**加缓存**呢?
答案是否定的,有的GET请求被访问到的频次很少,没有必要进行缓存,占用内存空间,浪费资源。
缓存加多长的时间呢?
这个问题需要可以灵活配置,不能固定值写死。
如果项目后期**不需要加缓存了**怎么办?
比如缓存崩了,从缓存取不到数据,紧急修复又来不及,此时应该关掉缓存,可以设置一个缓存开关来应对这个状况。
Lombok在你们项目中都有哪些使用场景?
在实体类上面使用.
SpringBoot的核心注解是哪一个?详细说下吧
项目通用缓存有哪些技术实现方案?
拦截器+响应体增强
AOP环绕通知
JDK 8有哪些常用的新特性?
MongoDB用户、权限体系如何建立?
你们项目中的异常都是如何处理的?
项目中用到了Jdk8 Stream流了吗?哪里用到了?
从用户信息中取出用户id使用的是stream,中的map方法返回id,然后使用收集的方法收集list.
Spring Cache是什么?在你们项目中哪里运用到了?解决了什么问题?底层实现原理是什么?
Nginx在你们项目里运用场景是什么?Nginx有什么使用场景?
你们使用到了Mybatis-Plus的哪些特性?
SpringMvc的工作流程大致说下吧
MongoDB集群有哪些种类,分别有哪些特点?
SpringMvc常用接参方式有哪些?
SpringBoot的自动装配原理是什么?
对象之间属性拷贝如何实现的?原理是什么?
枚举在项目中的使用场景?
Spring的常用注解有哪些?
如何实现分布式主键自增?
Dubbo内部结构是什么样的?工作流程图说下吧
如何排查Mysql慢查询?
事务特性是什么?mysql事务隔离级别有哪几种?默认是哪种?oracle呢?
Spring的@RequestBody和@ResponseBody注解分别有什么作用?
你们项目配置中心用的什么技术?如何实现的?
Dubbo注册中心挂了,还能进行服务调用吗?为什么?
Rabbitmq有哪几种消息模式?
SpringBoot自动装配原理是什么?
什么是ThreadLocal?有哪些特点?项目中使用场景是什么?
ThreadLocal底层原理,为什么会有内存泄漏问题,怎么解决?
你们访问系统时,权限校验实现的机制、流程是什么样的?
MonggoDB适用于什么数据存储场景?
mysql索引类型有哪些?
基于springboot自动装配原理去抽取公共组件的步骤?
Mysql的数据结构是什么?由哪两部分构成?
B+tree和Btree的区别是什么?时间复杂度是多少?
Spring Async是什么?在你们项目中哪里运用到了?解决了什么问题?底层原理是什么?
MongoDB使用场景是什么?你们项目用它来存储什么数据?
项目中token是怎么实现统一校验的?解析的用户数据放在哪里的?
什么是FastDFS?内部结构是什么样的?工作机制是什么样的?
如何对一个List集合进行分页?
描述一下虚拟机的内存结构?
MongoDB和mysql对比,概念上有什么异同?
MongoDB客户端你们一般用什么?
4、交友模块相关
可以说说探花卡片有哪些功能,它的实现流程和细节?
搜附近这个功能我挺感兴趣,能详细介绍下吗?如何进行实现的?
你们使用MongoDB Geo实现了什么功能?
交友模块的缘分值是怎么计算出来的?
有哪些技术可以实现地理位置的存储和查询?
今日佳人这个功能的数据来源是哪里?库表设计是怎样的?
推荐列表这个功能的实现流程是怎么样的?
交友模块都有哪些功能?
一个List的每个实体需要从另一个List实体中获取数据,如何提高效率?
Redis是单线程还是多线程?为什么读写效率那么快?
你们项目中用到了Dubbo,为什么要用到它?
Dubbo技术体系几个重要角色是什么?
list如何转map?
你们项目中用户的喜欢列表和不喜欢列表redis缓存为什么用set结构?
为什么使用Nacos+Dubbo的微服务体系?
点击推荐列表进去,都展示什么信息?里面有哪些功能?
你们项目有几个Dubbo工程,都用来做什么的?
探花卡片的喜欢和不喜欢功能设计细节可以说说吗?为什么这么设计?
探花模块最近访客是怎么实现的?
5、圈子模块相关
你们圈子模块都有哪些核心功能?
可以说说这个圈子模块的技术实现设计思路吗?
你们圈子数据存放在哪儿的?为什么分三张表来存储呢?
发布动态的流程从前到后能详细说说吗?为什么在写数据到时间线表时要用到异步机制?
圈子有哪些浏览动态的场景?你们是如何提高圈子模块各种列表浏览场景的查询效率的?
可以说说查看好友朋友圈的设计思路和实现流程吗?
查看推荐动态的实现流程是怎样的?
LinkedList、ArrayList、HashMap底层实现了解吗?ArrayList扩容是原来几倍,HashMap呢?
说说你们项目中运用的MongoDB分片集群吧,分片策略有哪些?
Dubbo负载均衡策略有哪些?可以在哪里进行配置?优先级是?
Dubbo协议有哪些?默认是哪种?
Dubbo与Feign的相同之处和不同之处有哪些?
浏览自己的发布的动态实现流程是怎么样的?
线程运行参数有哪些?
圈子互动数据存储设计思路是怎样的?为什么这样设计?
圈子点赞/取消点赞操作的实现流程?
项目中有哪几处点赞的场景,实现逻辑都一样吗?
线程池有几个核心参数,分别是哪些?
Dubbo超时重试机制了解过吗?超时默认是几秒?重试默认是几次?可以在哪儿配置?优先级是什么?
多线程的实现方式有哪些?
sleep和wait的区别?
线程间通讯的方法有哪些?
你们评论表存储了哪几种评论场景的数据,为什么这么设计?
发布动态的图片都是存储在哪里的?
如何存储对多个主体进行互动的数据?
你们项目如何实现互动的多级评论的?
为什么推荐动态列表比好友动态列表多一个喜欢功能呢?
6、小视频模块相关
小视频模块都有哪些核心功能?
可以说说小视频发布的流程吗?
小视频都是存储在哪里的?为什么存储在这里?
小视频存储要如何实现访问加速?
小视频点赞、评论如何实现的
小视频关注功能的实现流程是怎样的?
小视频列表展示的数据来源是什么?展示逻辑又是什么样的?
7、消息模块相关
消息模块都有哪些核心功能?
你们项目如何实现即时通讯的?
项目如何完成与环信进行集成?
你们后端与环信集成主要是哪些方面?
你可以说说【聊一下】功能实现流程吗?
即时通讯,还不是好友时,如何实现聊天的?
如何实现双方成为好友的,流程是什么样的?
你们系统中用户成为好友有哪些场景?
消息模块的点赞、喜欢、评论消息列表的实现逻辑?
8、我的模块相关
我的模块有哪些核心功能?
说说通知设置可以用来控制什么业务?
互相喜欢、喜欢、粉丝数量展示的实现流程是怎么样的?
说说黑名单设置可以用来控制什么业务?
Mybatis #{}和${} 的区别什么?一般用哪个?
可以聊下互相喜欢、喜欢、粉丝列表展示的实现流程吗?
说说用户间的喜欢/不喜欢功能在系统中有哪些操作的地方?
系统用户手机号的修改流程可以说说吗?
Lombok在项目中有哪些作用?
Mysql有多少种数据类型,Java的Boolean对应可以用哪种数据类型?
我的模块中我的动态实现流程是怎样的?
项目中陌生人问题设置用途是什么?
9、后管系统相关
后台管理系统的核心功能有哪些?
从项目架构角度,后台管理系统发起请求的执行流程是什么?
你们公司网关用的什么技术?为什么搭建网关系统?有哪些作用?如何搭建网关系统?
什么是网关动态路由?什么是静态路由?
什么是全局过滤器?什么是局部过滤器?
什么是配置中心?如何实现的?
管理员登录分为哪几个步骤?如何实现的?
用户管理有哪些核心功能?
用户冻结/解冻功能有哪些实现思路,你们项目如何实现的?
数据统计功能有哪几个步骤?是如何实现的?
数据采集环节如何进行?为什么考虑用MQ?
RabbitMq在项目中进行消息收发的流程?
如何实现数据的定时统计?一般会有哪些技术方案?
什么是定时任务?SpringTask的集成步骤?
说说什么是内容审核?动态审核的技术实现流程?
10、推荐系统相关
你们项目推荐数据的业务场景有哪些?
你们的业务是怎么实现推荐的?用的什么技术?
你们后端java组与推荐系统组完成对接需要做哪些工作?
你们推荐用的什么算法了解吗?
完成动态推荐、小视频推荐,你们后端需要做什么?
为什么要用到RabbitMQ发动态或者小视频的日志操作消息?
标签:项目,实现,什么,哪些,你们,面试,索引 来源: https://www.cnblogs.com/fengziHHH/p/16098165.html