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


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

面试文稿中回答要点

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

相关推荐
誰能久伴不乏4 分钟前
Qt 动态属性(Dynamic Property)详解
开发语言·qt
程序猿阿越8 分钟前
Kafka源码(三)发送消息-客户端
java·后端·源码阅读
似水流年流不尽思念10 分钟前
Spring MVC 中的 DTO 对象的字段被 transient 修饰,可以被序列化吗?
后端·面试
whitepure13 分钟前
万字详解Java中的运算
java
似水流年流不尽思念14 分钟前
为啥 HashMap 中的 table 也被 transient 修饰?其目的是什么?
后端·面试
AAA修煤气灶刘哥15 分钟前
搞定 Redis 不难:从安装到实战的保姆级教程
java·redis·后端
MrSYJ18 分钟前
全局和局部AuthenticationManager
java·后端·程序员
界面开发小八哥22 分钟前
「Java EE开发指南」如何使用MyEclipse中的Web Fragment项目?
java·ide·java-ee·eclipse·myeclipse
枫叶丹443 分钟前
【Qt开发】常用控件(四)
开发语言·qt