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

news2024/9/22 19:31:50

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/在这里插入图片描述

    • 核心功能:

      在这里插入图片描述

      在这里插入图片描述

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

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

相关文章

7.27 作业 QT

要求: 结果图: clock.pro: QT core gui QT texttospeechgreaterThan(QT_MAJOR_VERSION, 4): QT widgetsCONFIG c11# The following define makes your compiler emit warnings if you use # any Qt feature that has been marked deprecated …

No Spring环境Mybatis-Plus批量插入并返回主键的两种方式

批量插入,可以把Mybatis-Plus看作是Mybatis加强版;故Mybatis中的相关操作都可以在Mybatis-Plus中使用;在mysql数据库中支持批量插入,所以只要配置useGeneratedKeys和keyProperty就可以批量插入并返回主键了。 下面是批量插入的Dao层接口 一注解方式: 直接撸代码:…

面向对象编程:深入理解Java接口

文章目录 1. 接口:定义与生活中的类比2. 如何定义一个接口3. 接口中的成员4. 接口的实现4.1 单个接口的实现4.2 多个接口的实现 5. 多态与接口6. 新特性:默认方法与私有方法 接口在Java开发中扮演着重要的角色,它为类之间的交互定义了标准和规…

JDBC的的使用

首先导入jar包。 https://downloads.mysql.com/archives/c-j/ package com.test.sql;import java.sql.*;public class StudySql {public static void init() throws SQLException {Statement stmt null;Connection conn null;ResultSet res null;PreparedStatement pstm…

双点双向重发布实验

第一步配置IP地址 R1: [R1]int Serial 4/0/0 [R1-Serial4/0/0]ip address 12.0.0.1 24 [R1-Serial4/0/0]int g 0/0/0 [R1-GigabitEthernet0/0/0]ip address 14.0.0.1 24 [R1-GigabitEthernet0/0/0]int l0 [R1-LoopBack0]ip address 1.1.1.1 24 R2,R3,R4配置相同 第二步&#x…

一招教你用Java多线程写出死锁!!!

首先我们要知道什么是死锁: 1)进程死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁&am…

今天学学消息队列RocketMQ:消息类型

RocketMQ支持的消息类型有三种:普通消息、顺序消息、延时消息、事务消息。以下内容的代码部分都是基于rocketmq-spring-boot-starter做的。 普通消息 普通消息是一种无序消息,消息分布在各个MessageQueue当中,以保证效率为第一使命。这种消息…

一、Spring源码-ApplicationContext

Spring源码篇-ApplicationContext 一、ApplicationContext ApplicationContext到底是什么?字面含义是应用的上下文。这块我们需要看看ApplicationContext的具体的结构。 通过ApplicationContext实现的相关接口来分析,ApplicationContext接口在具备BeanF…

【正规方程对波士顿房价数据集进行预测】

数据准备 我们首先需要加载波士顿房价数据集。该数据集包含房屋特征信息和对应的房价标签。 import pandas as pd import numpy as npdata_url "http://lib.stat.cmu.edu/datasets/boston" raw_df pd.read_csv(data_url, sep"\s", skiprows22, headerN…

初代AIGC明星独角兽,停摆在大模型元年

唏嘘!AIGC方兴未艾,但国内AIGC领域的昔日龙头独角兽,正站在风雨飘摇的悬崖边。 影谱科技,初代目AIGC明星公司,被爆已经面临经营不善、运营停摆的窘境。 这家成立于2009年的AI影像公司,一直专注大文娱产业…

JAVA线上问题排查降龙十八掌

现场问题一般有以下几种问题 CPU,磁盘,内存,GC问题,网络 同时例如jstack、jmap等工具也是不囿于一个方面的问题的,基本上出问题就是df、free、top 三连,然后依次jstack、jmap伺候,具体问题具体分析即可。 …

Vue3解决:Mockjs 引入后并访问 404(Not Found) 的页面报错问题

1、问题描述: 其一、报错为: GET http://localhost:5173/list 404 (Not Found) ncaught (in promise) AxiosError {message: Request failed with status code 404, name: AxiosError, code: ERR_BAD_REQUEST, config: {…}, request: XMLHttpRequest,…

【C语言初阶】指针篇—上

目录 1. 指针是什么?2. 指针和指针类型2.1 指针-整数2.2 指针的解引用 3. 野指针3.1 野指针成因1. 指针未初始化2. 指针越界访问3. 指针指向的空间释放 3.2 如何规避野指针 1. 指针是什么? 指针是什么? 指针理解的2个要点: > 1…

DAY14_FilterListenerAjaxAxiosJsonfastjson综合案例-axios和html交互

目录 1 Filter1.1 Filter概述1.2 Filter快速入门1.2.1 开发步骤1.2.2 代码演示 1.3 Filter执行流程1.4 Filter拦截路径配置1.5 过滤器链1.5.1 概述1.5.2 代码演示1.5.3 问题 1.6 案例1.6.1 需求1.6.2 分析1.6.3 代码实现1.6.3.1 创建Filter1.6.3.2 编写逻辑代码1.6.3.3 测试并抛…

计算机组成原理问答7

外围设备 1. I/O设备 输入设备(鼠标、键盘)、输出设备(显示器、打印机)、外存设备(光盘、硬盘) 2. I/O接口 又称I/O控制器、设备控制器,负责协调主机与外部设备之间的数据传输。 I/O控制方式 3. 程序查询方式 中断 关中断作用:实现原子操作。屏蔽可屏蔽的中断。…

备战秋招 | 笔试强训16

目录 一、选择题 二、编程题 三、选择题题解 四、编程题题解 一、选择题 1、下列一段 C 代码的输出结果是&#xff08;&#xff09; #include <iostream> class Base { public:int Bar(char x){return (int)(x);}virtual int Bar(int x){return (2 * x);} }; clas…

如何启用路由器dhcp?快解析如何内网穿透?

一、什么是DHCP&#xff1f; 动态主机设置协议&#xff08;DHCP&#xff09;是一种使网络管理员能够集中管理和自动分配 IP 网络地址的通信协议。在网络中&#xff0c;每个联网设备都需要分配独有的 IP 地址。并当有新计算机移到网络中的其它位置时&#xff0c;能自动收到新的…

【阅读笔记】一种暗通道优先的快速自动白平衡算法

解决问题: 自动白平衡算法中存在白色区域检测错误导致白平衡失效的问题,作者提出了一种基于暗通道优先的白平衡算法。 算法思想: 图像中白色区域或者高饱和度区域的光线透射率较低,根据以上特性利用暗通道法计算图像中白色区域。 算法概述: 作者使用何凯明提出的基于暗…

MLP-Mixer:面向视觉的全mlp架构

文章目录 MLP-Mixer: An all-MLP Architecture for Vision摘要本文方法代码实验结果 MLP-Mixer: An all-MLP Architecture for Vision 摘要 卷积神经网络(cnn)是计算机视觉的首选模型。 最近&#xff0c;基于注意力的网络&#xff0c;如VIT&#xff0c;也变得流行起来。在本文…

四种刷题模式的爱刷题无后端无数据库刷题应用网站H5源码

四种刷题模式的爱刷题无后端无数据库刷题应用网站H5源码。提供了简单轻量化的部署方式和详细的四种刷题模式教程。该应用使用JSON作为题库的存储方式&#xff0c;层次清晰、结构简单易懂。 配套的word模板和模板到JSON转换工具可供使用&#xff0c;方便将题库从word格式转换为…