黑马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(阿尔萨斯)


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

面试文稿中回答要点

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

相关推荐
JavaPub-rodert3 分钟前
一道go面试题
开发语言·后端·golang
AronTing5 分钟前
05-Spring Security 认证与授权机制源码解析
后端·面试
6<76 分钟前
【go】静态类型与动态类型
开发语言·后端·golang
waylon111136 分钟前
【HOC】高阶组件在Vue老项目中的实战应用 - 模块任意排序
前端·vue.js·面试
柚几哥哥6 分钟前
IntelliJ IDEA全栈Git指南:从零构建到高效协作开发
java·git·intellij-idea
技术liul11 分钟前
解决Spring Boot Configuration Annotation Processor not configured
java·spring boot·后端
chushiyunen22 分钟前
dom操作笔记、xml和document等
xml·java·笔记
whisperrr.23 分钟前
【spring01】Spring 管理 Bean-IOC,基于 XML 配置 bean
xml·java·spring
chushiyunen25 分钟前
tomcat使用笔记、启动失败但是未打印日志
java·笔记·tomcat
天上掉下来个程小白32 分钟前
HttpClient-03.入门案例-发送POST方式请求
java·spring·httpclient·苍穹外卖