黑马Java面试教程_P11_技术场景

系列博客目录


文章目录


前言

下面9个问题都是比较通用的,不管你做过什么项目,都会包含下面的技术场景。我们针对的是如何回答这些面试问题,只告诉回答问题的核心要点,和回答问题的思路,并不会再实现一边,如果要深入学习这些内容,要自己系统学习。

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

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

单点登录解决方案如下:

  • JWT(常见)(针对前后端分离的项目,所以比较常见)
  • Oauth2
  • CAS

下面讲解一下,JWT解决单点登录,下面是四个微服务。

面试文稿中回答要点

  1. 先解释什么是单点登录
    单点登录的英文名叫做:Single SignOn(简称SSO)
  2. 介绍自己项目中涉及到的单点登录(即使没涉及过,也可以说实现的思路)
  3. 介绍单点登录的解决方案,以JWT为例
    • 用户访问其他系统,会在网关判断token是否有效
    • 如果token无效则会返回401(认证失败)前端跳转到登录页面
    • 用户发送登录请求,登陆成功后返回给浏览器一个token,浏览器把token保存到cookie
    • 再去访问其他服务的时候,都需要携带token,由网关统一验证后路由到目标服务

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

后台的管理系统,更注重权限控制,最常见的就是RBAC模型来指导实现权限。RBAC(Role-Based Access Control)基于角色的访问控制。

例子:下图中,下面两个是中间表。

张三具有什么权限呢?流程:张三登录系统--->查询张三拥有的角色列表--->再根据角色查询拥有的权限

权限框架:Apache shiro 、Spring security(推荐)

面试文稿中回答要点

  • 后台管理系统的开发经验
  • 介绍RBAC权限模型5张表的关系(用户、角色、权限)
  • 权限框架:Spring security

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

强调的是网络上传输数据如何保证安全性

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

面试文稿中回答要点

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

  • 文件很大建议使用对称加密,不过不能保存敏感信息(密钥容易泄露)
  • 文件较小,要求安全性高,建议采用非对称加密(加解密速度慢,但是比对称加密安全)

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

考察你是否有过开发经验,是不是核心开发人员。

下面提供四个方向,找一个好好准备即可。

面试文稿中回答要点

  1. 什么背景(技术问题)
  2. 过程(解决问题的过程)
  3. 最终落地方案

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

  1. 为什么要采集日志?
    日志是定位系统问题的重要手段,可以根据日志信息快速定位系统中的问题。
  2. 采集日志的方式有哪些?
    ELK:即Elasticsearch、Logstash和Kibana三个软件的首字母。
    常规采集:按天保存到一个日志文件。
    一般使用ELK进行常规采集。

面试文稿中回答要点

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

介绍ELK的三个组件:

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

6.查看日志的命令

考察你是否在线调试过项目。

面试文稿中回答要点

上面图中的前几个比较重要。

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
  2. idea中设置远程debug,找到idea中的 Edit Configurations...
  1. idea中启动远程Debug

    在远程服务器上出错的代码会被自动定位到本地代码上。

面试文稿中回答要点

已经上线的bug排查的思路有两种:

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

  • 第二种方案就是远程Debug,说一下远程debug的大体思路。

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

考察你是否有过线上调试系统的经验。一般压测是必须要做的。

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

具体内容如下:只有压测上线前的工作

  1. 压测(性能测试)

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

    • 监控工具:Prometheus+Grafana
    • 链路追踪工具:skywalking、zipkin
  3. 线上诊断工具Arthas(阿尔萨斯)


横向表示时间越长,所以越容易出现瓶颈。高度是栈的长度。

面试文稿中回答要点

上线前用压测,上线后可以用阿尔萨斯,比如可以通过火焰图来快速定位应用热点。

相关推荐
智算菩萨7 小时前
【OpenGL】6 真实感光照渲染实战:Phong模型、材质系统与PBR基础
开发语言·python·游戏引擎·游戏程序·pygame·材质·opengl
jinanwuhuaguo7 小时前
OpenClaw深度沟通渠道-全景深度解构
大数据·开发语言·人工智能·openclaw
XXOOXRT7 小时前
Ubuntu搭建Java项目运行环境(JDK17+MySQL8.0)超详细教程
java·linux·mysql·ubuntu
是翔仔呐7 小时前
第14章 CAN总线通信全解:底层原理、帧结构与双机CAN通信实战
c语言·开发语言·stm32·单片机·嵌入式硬件·学习·gitee
m0_719084117 小时前
启动命令111
java
客卿1237 小时前
用两个栈实现队列
android·java·开发语言
leaves falling7 小时前
C++模板初阶:让代码“复制粘贴”自动化
开发语言·c++·自动化
java1234_小锋8 小时前
Java高频面试题:谈谈你对SpringBoot的理解?
java·开发语言·spring boot
2301_816651228 小时前
C++模块化设计原则
开发语言·c++·算法
Ulyanov8 小时前
Python GUI工程化实战:从tkinter/ttk到可复用的现代化组件架构
开发语言·python·架构·gui·tkinter