常见面试题之常见技术场景

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

1.1 概述

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

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

在这里插入图片描述

单体系统的session共享。

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

    • 如果在Session对象中能查到,说明已经登录

    • 如果在Session对象中查不到,说明没登录(或者已经退出了登录)

  • 注销(退出登录):从Session中删除用户的信息

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

在这里插入图片描述

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

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

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

1.2 JWT解决单点登录

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

在这里插入图片描述

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

在这里插入图片描述

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张表的关系

在这里插入图片描述

数据流转

张三具有什么权限呢?

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

在这里插入图片描述

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

  • Apache shiro
  • Spring security(推荐)

2.3 回答要点

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

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

  • 权限框架:Spring security

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

3.1 概述

在这里插入图片描述

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

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

3.2 对称加密

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

在这里插入图片描述

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

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

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

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

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

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

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

3.3 非对称加密

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

在这里插入图片描述

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

加密与解密:

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

签名:

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

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

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

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

3.4 回答要点

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

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

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

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

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

(1)设计模式

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

回答思路

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

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

3,最终落地方案

举例:

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

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

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

(2)线上BUG

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

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

(3)调优

  • 慢接口
  • SQL
  • 缓存方案

(4)组件封装

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

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

5.1 问题

1,为什么要采集日志?

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

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

  • ELK:即ElasticsearchLogstashKibana三个软件的首字母

  • 常规采集:按天保存到一个日志文件在这里插入图片描述

5.2 ELK基本架构

ELKElasticsearchLogstashKibana三个开源软件的缩写。

在这里插入图片描述

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

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

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

5.3 参考回答

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

  • 介绍ELK的三个组件:

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

6. 查看日志的命令?

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

在这里插入图片描述

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

在这里插入图片描述

需要掌握的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,其它端口也可以

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

在这里插入图片描述

在这里插入图片描述

  1. idea中启动远程debug在这里插入图片描述

  2. 访问远程服务器,在本地代码中打断点即可调试远程。

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

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

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

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

    • 官网:https://arthas.aliyun.com/在这里插入图片描述

    • 核心功能:

      在这里插入图片描述

      在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

DSA之查找(1):线性表的查找

文章目录 0 知识回顾1 查找1.1 查找的概念 2 线性表的查找2.1 顺序查找2.1.1 顺序查找算法2.1.2 顺序查找的性能分析2.1.3 顺序查找的特点 2.2 折半查找(二分)2.2.1 折半查找算法2.2.2 折半查找的性能分析2.2.3 折半查找的特点 2.3 分块查找2.3.1 分块查…

0基础系列C++教程 从0开始 第二课

0基础系列C教程 从0开始 第二课来了&#xff01; 复习第一课内容 1 怎么输出数字“1919810”&#xff1f; 答案&#xff08;关键语句&#xff09;: cout<<"1919810"; 2 怎么输出字符串“Hello World”&#xff1f; 答案&#xff08;关键语句&#xff09;&a…

梯度提升树的基本思想

目录 1. 梯度提升树 VS AdaBoost 2. GradientBoosting回归与分类的实现 2.1 GradientBoosting回归 2.2 GradientBoosting分类 1. 梯度提升树 VS AdaBoost 梯度提升树&#xff08;Gradient Boosting Decision Tree&#xff0c;GBDT&#xff09;是提升法中的代表性算法&#…

朝花夕拾思维导图怎么画?看看这种绘制方法

朝花夕拾思维导图怎么画&#xff1f;绘制思维导图的好处有很多&#xff0c;首先它可以帮助人们更好地组织和管理知识&#xff0c;提高工作效率和学习效果。其次&#xff0c;绘制思维导图可以帮助人们更好地记忆知识点和理解知识点。总之&#xff0c;绘制思维导图可以帮助人们更…

cookie

目录 一、会话技术 二、Cookie 1.创建Cookie 2.使用response响应Cookie给客户端&#xff08;浏览器&#xff09; 3. 获取Cookie 三、Cookie的原理解析 1. 基本实现原理 &#xff08;1&#xff09;响应头&#xff1a;set—cookie &#xff08;2&#xff09;请求头&…

基于 Graviton2处理器构建容器化基因分析工作负载

概述 相对于基于传统 x86架构的处理器来说&#xff0c;Amazon 设计的基于 ARM 架构的 Graviton 处理器为 EC2中运行的云工作负载提供了更佳的性价比。基于 Graviton2 的实例支持广泛的通用型、突发型、计算优化型、内存优化型、存储优化型和加速计算型工作负载&#xff0c;包括…

数字IC实践项目(7)—CNN加速器的设计和实现(付费项目)

数字IC实践项目&#xff08;7&#xff09;—基于Verilog的CNN加速器&#xff08;付费项目&#xff09; 写在前面的话项目整体框图神经网络框图完整电路框图 项目简介和学习目的软件环境要求 资源占用&板载功耗总结 写在前面的话 项目介绍&#xff1a; 卷积神经网络硬件加速…

【C++ 重要知识点总结】自定义类型-类和结构体

类 类的基本特性 数据抽象和封装继承多态 1 类的构成——抽象 概念 数据抽象是一种依赖于接口和实现的分离的编程技术。类的接口包括用户所能执行的操作&#xff1b;类的实现包括类的数据成员、负责接口实现的函数体以及定义类所需要的的各种私有函数。封装实现了类的接口和实…

数据服务:保障数据安全、提升数据价值的利器

04-08把元数据以及在它基础上的五大应用场景&#xff1a;数据发现&#xff08;数据地图&#xff09;、指标管理、模型设计、数据质量、成本优化&#xff0c;全部讲完。这部分内容对应的就是数据中台OneData 方法论。学完这部分内容&#xff0c;你已了解OneData方法论在企业内部…

【业务功能篇55】Springboot+easyPOI 导入导出

Apache POI是Apache软件基金会的开源项目&#xff0c;POI提供API给Java程序对Microsoft Office格式档案读和写的功能。 Apache POI 代码实现复杂&#xff0c;学习成本较高。 Easypoi 功能如同名字easy,主打的功能就是容易,让一个没见接触过poi的人员 就可以方便的写出Excel导出…

MySQL基础扎实——MySQL中各种数据类型之间的区别

在MySQL中&#xff0c;有各种不同的数据类型可供选择来存储不同类型的数据。下面是一些常见的数据类型以及它们之间的区别&#xff1a; 整数类型&#xff1a; TINYINT&#xff1a;1字节&#xff0c;范围为-128到127或0到255&#xff08;无符号&#xff09;。SMALLINT&#xff1…

项目文档管理的基本指南

项目文档是一种关键的项目管理资源&#xff0c;它可以提供清晰度&#xff0c;保证参与项目的每个人都在同一页面上&#xff0c;从而确保项目按时、按预算完成。 本文将讨论项目文档的重要性、如何在项目中使用项目文档以及选择好合适的项目文档管理软件的技巧。 什么是项目文…

代码随想录算法学习心得 49 | 647.回文子串、516.最长回文子序列...

一、最长回文子序列 链接&#xff1a;力扣 描述&#xff1a;给你一个字符串 s &#xff0c;找出其中最长的回文子序列&#xff0c;并返回该序列的长度。 子序列定义为&#xff1a;不改变剩余字符顺序的情况下&#xff0c;删除某些字符或者不删除任何字符形成的一个序列。 思…

【C++】开源:Boost网络库Asio配置使用

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍Asio网络库配置使用。 无专精则不能成&#xff0c;无涉猎则不能通。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&#xff0c;下次…

Form Generator 扩展子表单组件之表单校验(超详细)

一、form-generator是什么?✨ ⭐️ 🌟 form-generator的作者是这样介绍的:Element UI表单设计及代码生成器,可将生成的代码直接运行在基于Element的vue项目中;也可导出JSON表单,使用配套的解析器将JSON解析成真实的表单。 但目前它提供的组件并不能满足我们在项目中的…

【搜索引擎Solr】Apache Solr 神经搜索

Sease[1] 与 Alessandro Benedetti&#xff08;Apache Lucene/Solr PMC 成员和提交者&#xff09;和 Elia Porciani&#xff08;Sease 研发软件工程师&#xff09;共同为开源社区贡献了 Apache Solr 中神经搜索的第一个里程碑。 它依赖于 Apache Lucene 实现 [2] 进行 K-最近邻…

【Apollo学习笔记】—— Routing模块

Routing模块功能 Apollo的routing模块读取高精地图原始信息&#xff0c;用于根据输入RoutingRequest信息在base_map中选取匹配最近的点作为导航轨迹的起点和终点&#xff0c;读取依据base_map生成的routing_map作为生成topo_graph的&#xff0c;然后通过Astar算法在拓扑图中搜…

SSIS对SQL Server向Mysql数据转发表数据 (一)

开发工具 Visual Stuido 2019 、SSIS、SQL Server 2016、Mysql 8.0.30 1、配置VS2019的添加相应的功能&#xff0c;勾选SQL Server Data Tools,下载就行我用的VS2019版本还需要下载下面几个插件&#xff0c;链接我放在下面了 Microsoft Analysis Services Projects - Visual St…

[linux--->应用层网络通信协议]

文章目录 [TOC](文章目录) 一、应用层通信概念1.协议2.信息接收 二、网络计算器实战应用三、http协议1.基本认识2.宏观理解http3.网站内部跳转4.请求方法5.状态码5.1重定向5.2错误码 6.常见报头7.http会话保持功能8.模拟http协议服务器编程 四、https协议1.加密概念2.加密的作用…

esp32_arduino的开发库安装笔记

1.1 Arduino软件下载与安装 Arduino官网下载地址&#xff1a;https://www.arduino.cc/en/software。 1.2在线安装 选择文件 - 首选项。 在附加开发板管理器网址中添加以下链接中的一个。 (1)Stable release link: https://raw.githubusercontent.com/espressif/arduino-es…