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


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

面试文稿中回答要点

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

相关推荐
佩奇的技术笔记3 分钟前
Java学习手册:Java开发常用的内置工具类包
java
triticale15 分钟前
【蓝桥杯】P12165 [蓝桥杯 2025 省 C/Java A] 最短距离
java·蓝桥杯
Felven16 分钟前
A. Ideal Generator
java·数据结构·算法
秋野酱24 分钟前
基于 Spring Boot 的银行柜台管理系统设计与实现(源码+文档+部署讲解)
java·spring boot·后端
懒懒小徐24 分钟前
大厂面试-框架篇
面试·职场和发展
JAVA学习通38 分钟前
JAVA多线程(8.0)
java·开发语言
不当菜虚困40 分钟前
JAVA设计模式——(七)代理模式
java·设计模式·代理模式
Luck_ff081041 分钟前
【Python爬虫详解】第四篇:使用解析库提取网页数据——BeautifuSoup
开发语言·爬虫·python
wayhome在哪44 分钟前
大厂必考之大文件上传
面试
天天扭码1 小时前
从数组到对象:JavaScript 遍历语法全解析(ES5 到 ES6 + 超详细指南)
前端·javascript·面试