常见技术场景

news2024/12/23 9:25:48

常见技术场景

1.单点登录这块怎么实现的

1.1 概述

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

以前的时候,一般我们就单系统,所有的功能都在同一个系统上。

image-20230521113500488

单体系统的session共享

  • 登录:将用户信息保存在Session对象中

    • 如果在Session对象中能查到,说明已经登录
    • 如果在Session对象中查不到,说明没登录(或者已经退出了登录)
  • 注销(退出登录):从Session中删除用户的信息

后来,我们为了合理利用资源和降低耦合性,于是把单系统拆分成多个子系统。

image-20230521113544219

多系统即可能有多个Tomcat,而Session是依赖当前系统的Tomcat,所以系统A的Session和系统B的Session是不共享的。

解决系统之间Session不共享问题有一下几种方案:

  • Tomcat集群Session全局复制(最多支持5台tomcat,不推荐使用)
  • JWT(常见)
  • Oauth2
  • CAS
  • 自己实现(redis+token)

1.2 JWT解决单点登录

现在有一个微服务的简单架构,如图:

image-20230521113906521

使用jwt解决单点登录的流程如下:

image-20230521113941467

1.3 回答要点

1,先解释什么是单点登录

单点登录的英文名叫做:Single Sign On(简称SSO

2,介绍自己项目中涉及到的单点登录(即使没涉及过,也可以说实现的思路)

3,介绍单点登录的解决方案,以JWT为例

​ I. 用户访问其他系统,会在网关判断token是否有效

​ II. 如果token无效则会返回401(认证失败)前端跳转到登录页面

​ III. 用户发送登录请求,返回浏览器一个token,浏览器把token保存到cookie

​ IV. 再去访问其他服务的时候,都需要携带token,由网关统一验证后路由到目标服务

2.权限认证是如何实现的

2.1 概述

后台的管理系统,更注重权限控制,最常见的就是RBAC模型来指导实现权限

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

  • 3个基础部分组成:用户、角色、权限

  • 具体实现

    • 5张表(用户表、角色表、权限表、用户角色中间表、角色权限中间表)
    • 7张表(用户表、角色表、权限表、菜单表、用户角色中间表、角色权限中间表、权限菜单中间表)

2.2 RBAC权限模型

最常见的5张表的关系

image-20230521114305463

数据流转

张三具有什么权限呢?

流程:张三登录系统—> 查询张三拥有的角色列表—>再根据角色查询拥有的权限

image-20230521114432028

在实际的开发中,也会使用权限框架完成权限功能的实现,并且设置多种粒度,常见的框架有:

  • Apache shiro
  • Spring security(推荐)

2.3 回答要点

  • 后台管理系统的开发经验

  • 介绍RBAC权限模型5张表的关系(用户、角色、权限)

  • 权限框架:Spring security

3.上传数据的安全性你们怎么控制?

3.1 概述

image-20230521124717749

这里的安全性,主要说的是,浏览器访问后台,需要经过网络传输,有可能会出现安全的问题

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

3.2 对称加密

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

image-20230521125012727

  • 数据发信方将明文和加密密钥一起经过特殊的加密算法处理后,使其变成复杂的加密密文发送出去,

  • 收信方收到密文后,若想解读出原文,则需要使用加密时用的密钥以及相同加密算法的逆算法对密文进行解密,才能使其回复成可读明文。

  • 在对称加密算法中,使用的密钥只有一个,收发双方都使用这个密钥,这就需要解密方事先知道加密密钥。

优点: 对称加密算法的优点是算法公开、计算量小、加密速度快、加密效率高。

缺点: 没有非对称加密安全.

用途: 一般用于保存用户手机号、身份证等敏感但能解密的信息。

常见的对称加密算法有: AES、DES、3DES、Blowfish、IDEA、RC4、RC5、RC6、HS256

3.3 非对称加密

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

image-20230521125136717

解释: 同时生成两把密钥:私钥和公钥,私钥隐秘保存,公钥可以下发给信任客户端.

加密与解密:

  • 私钥加密,持有公钥才可以解密
  • 公钥加密,持有私钥才可解密

签名:

  • 私钥签名, 持有公钥进行验证是否被篡改过.

**优点: ** 非对称加密与对称加密相比,其安全性更好;

缺点: 非对称加密的缺点是加密和解密花费时间长、速度慢,只适合对少量数据进行加密。
用途: 一般用于签名和认证。私钥服务器保存, 用来加密, 公钥客户拿着用于对于令牌或者签名的解密或者校验使用.

常见的非对称加密算法有: RSA、DSA(数字签名用)、ECC(移动设备用)、RS256 (采用SHA-256 的 RSA 签名)

3.4 回答要点

  • 使用非对称加密(或对称加密),给前端一个公钥让他把数据加密后传到后台,后台解密后处理数据
    • 传输的数据很大建议使用对称加密,不过不能保存敏感信息
    • 传输的数据较小,要求安全性高,建议采用非对称加密

4.你负责项目的时候遇到了哪些比较棘手的问题

这个面试题主要考察的是,

  • 你是否有过开发经验
  • 是否是核心开发人员

有4个方面可以回答,只要挑出一个回答就行了

(1)设计模式

  • 工厂模式+策略
  • 责任链模式

回答思路

1,什么背景(技术问题)

2,过程(解决问题的过程)

3,最终落地方案

举例:

①:介绍登录业务(一开始没有用设计模式,所有的登录方式都柔和在一个业务类中,不过,发现需求经常改)

②:登录方式经常会增加或更换,每次都要修改业务层代码,所以,经过我的设计,使用了工厂设计模式和策略模式,解决了,经常修改业务层代码的问题

③:详细介绍一下工厂模式和策略模式(参考前面设计模式的课程)

(2)线上BUG

  • CPU飙高
  • 内存泄漏
  • 线程死锁

回答方式参考上面的回答思路,具体问题可以参考前面的课程(JVM和多线程相关的面试题)

(3)调优

  • 慢接口
  • 慢SQL
  • 缓存方案

(4)组件封装

  • 分布式锁
  • 接口幂等
  • 分布式事务
  • 支付通用

5.你们项目中日志怎么采集的

5.1 问题

1,为什么要采集日志?

日志是定位系统问题的重要手段,可以根据日志信息快速定位系统中的问题

2,采集日志的方式有哪些?

  • ELK:即Elasticsearch、Logstash和Kibana三个软件的首字母
  • 常规采集:按天保存到一个日志文件image-20230521232726959

5.2 ELK基本架构

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

image-20230521232913086

  • Elasticsearch
    Elasticsearch 全文搜索和分析引擎,对大容量的数据进行接近实时的存储、搜索和分析操作。

  • Logstash
    Logstash是一个数据收集引擎,它可以动态的从各种数据源搜集数据,并对数据进行过滤、分析和统一格式等操作,并将输出结果存储到指定位置上

  • Kibana
    Kibana是一个数据分析和可视化平台,通常与Elasticsearch配合使用,用于对其中的数据进行搜索、分析,并且以统计图标的形式展示。

5.3 参考回答

  • 我们搭建了ELK日志采集系统

  • 介绍ELK的三个组件:

    • Elasticsearch是全文搜索分析引擎,可以对数据存储、搜索、分析
    • Logstash是一个数据收集引擎,可以动态收集数据,可以对数据进行过滤、分析,将数据存储到指定的位置
    • Kibana是一个数据分析和可视化平台,配合Elasticsearch对数据进行搜索,分析,图表化展示

6.查看日志的命令

目前采集日志的方式:按天保存到一个日志文件

image-20230521233150276

也可以在logback配置文件中设置日志的目录和名字

image-20230521233220905

需要掌握的Linux中的日志:

  • 实时监控日志的变化

    实时监控某一个日志文件的变化:tail -f xx.log;实时监控日志最后100行日志: tail –n 100 -f xx.log

  • 按照行号查询

    • 查询日志尾部最后100行日志:tail – n 100 xx.log

    • 查询日志头部开始100行日志:head –n 100 xx.log

    • 查询某一个日志行号区间:cat -n xx.log | tail -n +100 | head -n 100 (查询100行至200行的日志)

  • 按照关键字找日志的信息

    查询日志文件中包含debug的日志行号:cat -n xx.log | grep “debug”

  • 按照日期查询

    sed -n '/2023-05-18 14:22:31.070/,/ 2023-05-18 14:27:14.158/p’xx.log

  • 日志太多,处理方式

    • 分页查询日志信息:cat -n xx.log |grep “debug” | more

    • 筛选过滤以后,输出到一个文件:cat -n xx.log | grep “debug” >debug.txt

7.生产问题怎么排查

已经上线的bug排查的思路:

1,先分析日志,通常在业务中都会有日志的记录,或者查看系统日志,或者查看日志文件,然后定位问题

2,远程debug(通常公司的正式环境(生产环境)是不允许远程debug的。一般远程debug都是公司的测试环境,方便调试代码)

远程debug配置

前提条件:远程的代码和本地的代码要保持一致

1.远程代码需要配置启动参数,把项目打包放到服务器后启动项目的参数:

java -jar -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 project-1.0-SNAPSHOT.jar

-agentlib:jdwp 是通知JVM使用(java debug wire protocol)来运行调试环境

transport=dt_socket 调试数据的传送方式

server=y 参数是指是否支持在server模式

suspend=n 是否在调试客户端建立起来后,再执行JVM。

address=5005 调试端口设置为5005,其它端口也可以

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

image-20230521233554657

image-20230521233600556

  1. idea中启动远程debugimage-20230521233715574
  2. 访问远程服务器,在本地代码中打断点即可调试远程

8.怎么快速定位系统的瓶颈

  • 压测(性能测试),项目上线之前测评系统的压力

    • 压测目的:给出系统当前的性能状况;定位系统性能瓶颈或潜在性能瓶颈
    • 指标:响应时间、 QPS、并发数、吞吐量、 CPU利用率、内存使用率、磁盘IO、错误率
    • 压测工具:LoadRunner、Apache Jmeter …
    • 后端工程师:根据压测的结果进行解决或调优(接口慢、代码报错、并发达不到要求…)
  • 监控工具、链路追踪工具,项目上线之后监控

    • 监控工具:Prometheus+Grafana
    • 链路追踪工具:skywalking、Zipkin
  • 线上诊断工具Arthas(阿尔萨斯),项目上线之后监控、排查

    • 官网:https://arthas.aliyun.com/

    • 核心功能:

      image-20230521233926897

      image-20230521233934644

  • 压测工具:LoadRunner、Apache Jmeter …

  • 后端工程师:根据压测的结果进行解决或调优(接口慢、代码报错、并发达不到要求…)

  • 监控工具、链路追踪工具,项目上线之后监控

    • 监控工具:Prometheus+Grafana
    • 链路追踪工具:skywalking、Zipkin
  • 线上诊断工具Arthas(阿尔萨斯),项目上线之后监控、排查

    • 官网:https://arthas.aliyun.com/

    • 核心功能:

      [外链图片转存中…(img-TUClerDc-1686921260411)]

      [外链图片转存中…(img-fH9c5sS9-1686921260411)]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/654317.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

我准备蓝桥杯的这一年

我准备蓝桥杯的这一年 文章目录 我准备蓝桥杯的这一年起步和目标确定渐入佳境焦虑疲惫,一天又一天国赛我来力总结 我将我这段 流水账分为四个阶段。谨以此文,祭奠我这一年来的焦虑、白发~ ,最终也取得了预期的成绩。不知未来再看此章会作何感…

hadoop基础

FileSystem使用 核心类 org.apache.hadoop.fs.FileSystem 文件系统类 抽象类 //静态方法创建对象 public static FileSystem newInstance(URI uri,Configuration conf,String user) /*参数一 URI 分布式文件系统 HDFS的资源地址 NN地址 hdfs://linux01:8020参数二 Configu…

Unity常见框架探索-ET框架探索

简介 ET框架是类ECS的一个Unity前后端框架 论坛地址为:https://et-framework.cn Git地址为:https://github.com/egametang/ET 预备知识 Unity程序集的使用 接入流程 本文将会以7.2版本进行分析。所以直接clone github上的仓库,将工程导…

1743_MATLAB 2-D绘图小结

全部学习汇总: GreyZhang/g_matlab: MATLAB once used to be my daily tool. After many years when I go back and read my old learning notes I felt maybe I still need it in the future. So, start this repo to keep some of my old learning notes servral …

【网络协议详解】——知识点复习(期末不挂科版)

课本: 目录 🕒 1. 概述🕘 1.1 GNS3🕘 1.2 Wireshark 🕒 2. PPP协议🕒 3. VLAN技术🕒 4. STP技术🕒 5. IPV6🕒 6. 路由表🕒 7. RIP协议🕒 8. OSPF…

Jenkins pipeline 中 checkout 代码

pipeline 中 具有checkout 功能的脚本命令如下 git branch: "master", url: "https://gitee.com/liuboliu/******.git"完整的脚本命令如下 pipeline {agent anystages {stage(checkout) {steps {git branch: "master", url: "https://gite…

I2C中为什么线与?为什么要有上拉电阻?

1、为什么采用漏极开路? 首先,连接到 I2C 上的设备是开漏输出的。以漏极开漏输出(OD)为例,是指将输出级电路结构改为一个漏极开路输出的 MOS 管。这样做的好处在于: 防止短路。可以实现“线与”逻辑&#…

移动DICT项目是什么?

DICT项目 我们运营商的伙伴,很多人都知道我们的DICT,但是大家知不知道什么是DICT。你想一想,所谓的DICT,就是指的大数据技术与IT和CT的深度融合。 实际上,DICT的可以拆分成三个词, 第一个DT&#xff0c…

腾讯服务器CentOS Stream 8安装redis详情的步骤

tencent服务器安装的系统版本创建一个新的文件夹 /athena/redis mkdir /athena cd /athena mkdir redis1、切换到 “redis” 目录: cd /athena/redis2、使用 YUM 包管理器安装 GCC、C 和 Make 软件包: yum install gcc-c make -y这条命令将使用 YUM …

C++【set 和 map 学习及使用】

✨个人主页: 北 海 🎉所属专栏: C修行之路 🎃操作环境: Visual Studio 2019 版本 16.11.17 文章目录 🌇前言🏙️正文1、预备知识1.1、关联式容器1.2、键值对1.3、树型结构的关联式容器 2、set2.…

网工内推 | 网络运维专场,弹性工作,14薪

01 南凌科技股份有限公司 招聘岗位:网络运维工程师 职责描述: 1、负责及时响应客户需求、做好客户报障接收,受理与记录工作,及时做好值班记录与故障交接; 2、通过网管平台实时监控客户线路及机房设备的运行状态、性能…

mNGS 02:SnakeMake流程简介

<~生~信~交~流~与~合~作~请~关~注~公~众~号生信探索> 流程代码在&#xff1a;https://jihulab.com/BioQuest/SnakeMake-mNGS 或https://github.com/BioQuestX/SnakeMake-mNGS 教程链接在&#xff1a;https://doc.bioquest.cn/mngs mNGS Pipeline summary Metagenomic nex…

我的世界(MC) Forge 1.20.1 服务端搭建教程

Debian系统使用MCSManager9面板搭建Minecraft Java版MOD服务器的教程&#xff0c;本教程用的Forge1.20.1服务端&#xff0c;用其他服务端的也可以参考一下。 本教程使用Docker来运行mc服&#xff0c;可以方便切换不同Java版本&#xff0c;方便安装多个mc服版本。 视频教程&am…

【网络技术】什么是DNS及常见问题

序言 域名服务器&#xff08;Domain Name Server&#xff0c;DNS&#xff09;是一种用于存储和管理域名解析信息的服务器。它们负责将易于记忆的域名&#xff08;例如 www.example.com&#xff09;转换为与之关联的 IP 地址&#xff08;例如 192.0.2.1&#xff09;&#xff0c;…

基于M300仿地飞行,D2Pros “房地一体”免像控验证

引言 目前&#xff0c;倾斜摄影技术被广泛运用于“房地一体”项目。但在云贵川某些地形起伏较大的地区&#xff0c;运用这项技术还存在一些困难。地形高差太大导致建模精度不够&#xff0c;这是让很多客户感到头疼的问题。 同时&#xff0c;采用分层飞行或者参考最高点加大重…

2023全球数字经济大会——开放原子全球开源峰会观后感及总结

目录 前言 什么是开源&#xff1f; 主会场院士及企业领导的主要观点 展台街采环节互动&#xff08;仅代表个人观点&#xff09; 软硬协同开源分论坛精华观点 1.加速迈入云原生时代-英特尔携手合作伙伴的技术创新与实践 2.英特尔Linux操作系统及12种解决方案示例 3.英特尔基础软…

深度学习--常见激活函数的实现

常见激活函数 简介激活函数的初衷激活函数必须是非线性函数 常见的激活函数与实现Step跃阶函数公式优点缺点应用场景代码实现效果图 Sigmoid函数与代码实现公式Sigmoid函数优点Sigmoid函数缺点代码实现效果图 ReLu公式优点缺点代码效果图 LeakyReLU公式优点缺点代码效果图 tanh…

快速构建机器学习Web应用的神器:Gradio

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️ &#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

FreeRTOS实时操作系统(一)RTOS的基本概念

文章目录 前言操作系统分类编程风格纠正FreeRTOS介绍任务调度方式任务状态 总结 前言 最近买了把75系列的机械键盘&#xff0c;没有数字区域&#xff0c;想起来稚辉君曾经做过一把客制化键盘&#xff0c;于是下载了资料准备学一学&#xff0c;网上很多开源的都是用的ATMEGA32U…

面试专题:Redis

1.redis简介 简单来说 redis 就是一个数据库&#xff0c;不过与传统数据库不同的是 redis 的数据是存在内存中的&#xff0c;所以存写速度非常快&#xff0c; 因此 redis 被广泛应用于缓存方向。另外&#xff0c;redis 也经常用来做分布式锁。redis 提供了多种数据类型来支持不…