java开发面试:常见业务场景之单点登录SSO(JWT)、权限认证、上传数据的安全性的控制、项目中遇到的问题、日志采集(ELK)、快速定位系统的瓶颈

单点登录(SSO)

单点登录,Single Sign On(简称SSO),只需要登录一次,就可以访问所有信任的应用系统。

如果是单个tomcat服务,session可以共享,如果是多个tomcat,那么服务session不共享。

为此我们需要提出针对单点登录的解决方案。

单点登录解决方案

  • JWT(常见)
  • Oauth2
  • CAS

以最简单的订单和登录服务为例,JWT实现的单点登录时序图如下:

  1. 用户访问其他系统,会在网关判断token是否有效
  2. 如果token无效则会返回401(认证失败)前端跳转到登录页面
  3. 用户发送登录请求,返回浏览器一个token,浏览器把token保存到cookie
  4. 再去访问其他服务的时候,都需要携带token,由网关统一验证后路由到目标服务

权限认证

最常见的就是RBAC模型来指导实现权限。

RBAC(Role-Based Access Control)基于角色的访问控制

由3个基础部分组成:用户、角色、权限,有时还可能加其他业务表(譬如菜单表、订单表)

常见结构如下:

  • 5张表(用户表、角色表、权限表、用户角色中间表、角色权限中间表)
  • 7张表(用户表、角色表、权限表、菜单表、用户角色中间表、角色权限中间表、权限菜单中间表)
    即,基础表+业务表+每张表前后组成的中间表

一般使用的框架是:

Apache shiro 、Spring security(推荐)

上传数据的安全性的控制

使用非对称加密(或对称加密),给前端一个公钥让他把数据加密后传到后台,后台负责解密后处理数据

对称加密

文件加密和解密使用相同的密钥,即加密密钥也可以用作解密密钥。

优点:加密速度快,效率高

缺点:相对不太安全(不要保存敏感信息)

非对称加密

两个密钥:公开密钥(publickey)和私有密钥,公有密钥加密,私有密钥解密

优点:与对称加密相比,安全性更高

缺点:加密和解密速度慢,建议少量数据加密

你负责项目的时候遇到了哪些比较棘手的问题?怎么解决的

从以下几个方面选一个回答即可。(不是很建议用第四个回答)

日志采集

ELK:即Elasticsearch、Logstash和Kibana三个软件的首字母

常规采集:按天保存到一个日志文件

ELK

Logstash是一个数据收集引擎,可以动态收集数据,对数据进行过滤、分析并存储到指定的位置。

Elasticsearch是全文搜索分析引擎,可以对数据存储、搜索、分析。

Kibana是一个数据分析和可视化平台,配合Elasticsearch对数据进行搜索,分析,图表化展示

常见Linux处理日志的命令

  1. 实时监控日志的变化

    • 实时监控某一个日志文件的变化:tail -f xx.log;实时监控日志最后100行日志: tail --n 100 -f xx.log
  2. 按照行号查询

    • 查询日志尾部最后100行日志:tail -- n 100 xx.log
    • 查询日志头部开始100行日志:head --n 100 xx.log
    • 查询某一个日志行号区间:cat -n xx.log | tail -n +100 | head -n 100 (查询100行至200行的日志)
  3. 按照关键字找日志的信息

    • 查询日志文件中包含debug的日志行号:cat -n xx.log | grep "debug"
  4. 按照日期查询

    • sed -n '/2023-05-18 14:22:31.070/,/ 2023-05-18 14:27:14.158/p'xx.log
  5. 日志太多,处理方式

    • 分页查询日志信息:cat -n xx.log |grep "debug" | more
    • 筛选过滤以后,输出到一个文件:cat -n xx.log | grep "debug" >debug.txt

怎么快速定位系统的瓶颈

一般使用以下三个方法。

  1. 压测(性能测试),项目上线之前测评系统的压力
  2. 监控工具、链路追踪工具,项目上线之后监控
  3. 线上诊断工具Arthas(阿尔萨斯),项目上线之后监控、排查

压测

指标:响应时间、 QPS、并发数、吞吐量、 CPU利用率、内存使用率、磁盘IO、错误率

压测工具:LoadRunner、Apache Jmeter ...

监控、链路追踪工具

监控工具:Prometheus+Grafana

链路追踪工具:skywalking、Zipkin

阿尔萨斯

其中第六点生成的火焰图如下:

长度越长,说明占用的cpu时间越多。高度越高,说明递归的层数越多。

相关推荐
砚底藏山河1 分钟前
python量化自定义周期 K 线合成
java·开发语言·数据库·python·金融
慢云智慧空间5 分钟前
从设备智能到空间理解,空间智能终端解决方案商如何重新定义行业标准
后端
利威尔xu15 分钟前
Go IM 源码实战(13):30 个会话只有 2 个红点,未读数错在三条路径
redis·后端·微服务·面试·golang
猿究院_夏燊43 分钟前
MySQL 的四种隔离级别
java·数据库·mysql
薛定谔的猫-菜鸟程序员1 小时前
软件架构设计师开发资料大全(从入门到精通)
后端·python·系统架构·flask·架构设计师
码流子1 小时前
移动收费怎么做?手持终端+App+收费中心的架构实践
java·开发语言·架构
霸道流氓气质2 小时前
AI 流式对话与实时聊天平台:SSE 解码竞态、有状态会话隔离与背压取消的 Vue3 + Spring AI 生产级实战
java·人工智能·spring
云创智城-yuncitys2 小时前
YunParking 4.0:JDK 17 与 Spring Boot 3.2 的停车云升级
java·开发语言·spring boot
文丑颜不良啊2 小时前
LeetCode1661~1680题目解析
java·leetcode
子非鱼@Itfuture2 小时前
关于前后端联调中登录状态/登录信息失效?
java·前端