单点登录这块怎么实现的
单点登录的英文名叫做: Single Sign On(简称SSO),只需要登录一次,就可以访问所有信任的应用系统

单点登录解决方案
- JWT(常见)
- Oauth2
- CAS
JWT解决单点登录

单点登录这块怎么实现的:
1,先解释什么是单点登录
- 单点登录的英文名叫做:Single Sign On(简称SS0)
2,介绍自己项目中涉及到的单点登录(即使没涉及过,也可以说实现的思路)
3, 介绍单点登录的解决方案,以JWT为例
I.用户访问其他系统,会在网关判断token是否有效
II.如果token无效则会返回401(认证失败)前端跳转到登录页面
lll. 用户发送登录请求,返回浏览器一个token,浏览器把token保存到cookie
IV. 再去访问其他服务的时候,都需要携带token,由网关统一验证后路由到目标服务
权限认证是如何实现的
后台的管理系统,更注重权限控制,最常见的就是RBAC模型来指导实现权限
RBAC(Role-BasedAccess Control)基于角色的访问控制
- 3个基础部分组成: 用户、角色、权限具体实现
- 5张表(用户表、角色表、权限表、用户角色中间表、角色权限中间表)
- 7张表(用户表、角色表、权限表、菜单表、用户角色中间表、角色权限中间表、权限菜单中间表)
RBAC权限模型


- 张三具有什么权限呢?
- 流程: 张三登录系统--->查询张三拥有的角色列表--->再根据角色查询拥有的权限
- 权限框架:
- Apache shiro 、Spring security (推荐)
权限认证是如何实现的
- 后台管理系统的开发经验:
- 介绍RBAC权限模型5张表的关系(用户、角色、权限)
- 权框架: Spring security
上传数据的安全性你们怎么控制?
使用非对称加密(或对称加密),给前端一个公钥让他把数据加密后传到后台,后台负责解密后处理数据

- 文件很大建议使用对称加密,不过不能保存敏感信息
- 文件较小,要求安全性高,建议采用非对称加密
对称加密
文件加密和解密使用相同的密钥,即加密密钥也可以用作解密密钥

- 优点: 加密速度快,效率高
- 缺点: 相对不太安全(不要保存敏感信息)
非对称加密
两个密钥:公开密钥(publickey)和私有密钥,公有密钥加密,私有密钥解密

- 优点: 与对称加密相比,安全性更高
- 缺点: 加密和解密速度慢,建议少量数据加密
遇到过哪些比较棘手的问题
你负责项目的时候遇到了哪些比较棘手的问题?怎么解决的
1,什么背景(技术问题)
2,过程(解决问题的过程)
3,最终落地方案

你们是怎么做压测(性能测试)的
你们项目中日志怎么采集的
1,为什么要采集日志?
- 日志是定位系统问题的重要手段,可以根据日志信息快速定位系统中的问题
2,采集日志的方式有哪些?
- ELK: 即Elasticsearch、Logstash和Kibana三个软件的首字母
- 常规采集: 按天保存到一个日志文件

ELK即Elasticsearch、Logstash和Kibana三个开源软件的缩写

你们项目中日志怎么采集的:
我们搭建了ELK日志采集系统介绍ELK的三个组件:
- Elasticsearch是全文搜索分析引擎,可以对数据存储、搜索、分析
- Logstash是一个数据收集引擎,可以动态收集数据,可以对数据进行过滤、分析,将数据存储到指定的位置
- Kibana是一个数据分析和可视化平台,配合Elasticsearch对数据进行搜索,分析,图表化展示
查看日志的命令
目前采集日志的方式:按天保存到一个日志文件


Linux中查看日志:
- 实时监控日志的变化
- 按照行号查询
- 按照关键字找日志的信息
- 按照日期查询
- 日志太多,处理方式
查看日志的命令。

怎么快速定位系统的瓶颈
怎么快速定位系统的瓶颈
- 压测(性能测试),项目上线之前测评系统的压力
- 监控工具、链路追踪工具,项目上线之后监控
- 线上诊断工具Arthas(阿尔萨斯),项目上线之后监控、排查
压测(性能测试)
- 压测目的: 给出系统当前的性能状况; 定位系统性能瓶颈或潜在性能瓶颈
- 指标: 响应时间、QPS、并发数、吞吐量、CPU利用率、内存使用率、磁盘IO、错误率
- 压测工具: LoadRunner、Apache Jmeter ...
- 后端工程师: 根据压测的结果进行解决或调优(接口慢、代码报错、并发达不到要求...)
监控工具、链路追踪工具
- 监控工具: Prometheus+Grafana
- 链路追踪工具: skywalking、Zipkin
线上诊断工具Arthas(阿尔萨斯)
- 官网:arthas
- 核心功能:


生产问题怎么排查
已经上线的bug排查的思路:
1,先分析日志,通常在业务中都会有日志的记录,或者查看系统日志,或者查看日志文件,然后定位问题
2,远程debug(通常公司的正式环境(生产环境)是不允许远程debug的。一般远程debug都是公司的测试环境,方便调试代码)
远程debug
前提条件: 远程的代码和本地的代码要保持一致
- 远程代码需要配置启动参数,把项目打包放到服务器后启动项目的参数:

- idea中设置远程debug,找到idea中的Edit Configurations...

- idea中启动远程debug

- 访问远程服务器,在本地代码中打断点即可调试远程
重点归类
面试准备
- 企业筛选简历规则
- 简历编写注意事项(亮点)
- 项目怎么找,学习到什么程度
- 面试过程(表达结构、什么样的心态去找工作)
MySQL
- 做过哪些优化(定位慢查询,排查慢查询、超大分页)
- 索引(底层数据结构、聚簇索引、非聚簇索引,覆盖索引)
- 优化经验(索引创建原则、sql优化)
- 事务(事务的特性,隔离级别、事务原理)
Redis
- 缓存相关(缓存击穿、穿透、雪崩、缓存过期淘汰、数据一致性)
- 分布式锁相关(redisson原理)
- 集群(主从、哨兵、分片集群)
SSM
- Spring中AOP(怎么用的,事务失效场景)
- Bean的生命周期和循环依赖
- Springboot动配置原理
- SpringMVC执行流程
微服务
- SpringCloud(常见组件、注册中心、负载均衡、熔断降级)
- 业务问题(限流、接口幂等、分布式事务, 分布式任务调度)
消息中间件
- RabbitMQ和Kafka
- 消息丢失
- 消息堆积
- 消息重复
常见集合
- ArrayListHashMap
- 底层源码
- 原理部分(数据结构)
多线程
- 线程基础(线程创建、状态及切换)
- 线程安全(synchronized、CAS、volatile、AQS、死锁)
- 线程池(7个参数、阻塞队列、核心线程数、项目中怎么用的)
JVM
- 3年以上开发人员
- 垃圾圆收(垃圾回收算法、垃圾回收器)
- JVM调优经验
企业场景问题
- 设计模式(工厂方法、策略、责任链)
- 技术场景
- 单点登录
- 权限认证
- 数据安全
- 项目中的难题
- 日志采集和检索:
- 生产问题排查