企业场景面试题

面试时,在询问一些技术场景问题的时候,通常以如下的问题。这些是每一个项目都需要面对的问题,能够回答这些问题才能够说明有过实际的开发经验,同时从回答种也可以看出我们的真实实力水平👍👍👍

image-20231007192621235

你们项目中单点登录功能是如何实现的?


首先你需要知道的是:单点登录的英文名叫做:Single Sign On(简称SSO),只需要登录一次,就可以访问所有信任的应用系统,常见的解决方法有JWT, Oauth2, CAS等等

回答:

  1. 因为我们项目是使用的是分布式架构,所以,传统的适用于单体应用的session是不能完成单点登录的,但是我们以前的项目是使用的Session,所以我也就简单概括几句。

  2. 在之前的项目,因为我们是单系统项目,所以登录,商品,订单,支付等等功能都集成在一个系统中。各个服务的子域名Session是共享的。我们是将用户信息保存在Session对象中。如果在Session对象能够查到,说明已经登录过了,如果在Session对象查找不到,说明已经退出登录或者压根就没有登录。

  3. 现在由于业务增多了,也为了合理利用资源和降低耦合度,现在的项目的每一个服务都是单独作为一个系统,部署到多台服务器上,就说明了有多个Tomcat,而Session就是依赖当前系统的Tomcat,所以系统A的Session和系统B的Session是不共享的。我们采用的是JWT来实现单点登录功能的。现在有一个微服务的简单架构,如图。

    image-20231007194244146

  4. 首先用户访问其他系统,会在网关判断token是否有效,如果token无效则会返回401(认证失败)前端跳转到登录页面。用户发送登录请求,返回浏览器一个token,浏览器把token保存到cookie,再去访问其他服务的时候,都需要携带cookie数据,由网关拿到cookie中的token统一验证后路由到目标服务

    image-20231007194520567

你们项目中的权限认证是怎么实现的?


回答

  1. 在我们的后台的管理系统,由于更注重权限控制,最常见的就是RBAC模型来指导实现权限,RBAC是由3个基础部分组成的:用户,角色,权限。

    image-20231007201028139

  2. 在我们项目其他地方,比如说前台系统中实现系统权限认证的一种方式是使用Spring Security框架

  3. 我们会配置身份验证管理器(AuthenticationManager):配置自定义的身份验证逻辑,例如基于数据库的身份验证或第三方身份验证。同时定义特定的URL路径需要进行权限验证,以及不同角色所具有的权限。例如,通过使用antMatchers方法,就可以指定某些URL需要特定角色才能访问。

  4. 使用Spring Security框架实现系统权限认证。当用户访问受保护的资源时,Spring Security会自动进行身份验证和授权检查,确保用户具有足够的权限进行访问。这样,我们可以在项目中实现灵活而安全的权限认证机制。

你负责项目的时候遇到了哪些棘手的问题?


这个面试题主要考察的是,是否有一定的开发经验,是否是核心的开发人员。可以从设计模式,线上BUG,调优,组件封装这几个方面回答。

  1. 线上BUG
    1. CPU飙高
    2. 内存泄漏
    3. 线程死锁
  2. 调优
    1. 慢接口
    2. 慢SQL
    3. 设计缓存方案
  3. 组件封装
    1. 分布式锁的封装
    2. 接口幂等
    3. 分布式事务的封装
    4. 支付通用

回答

  1. 我们做的这个XX项目的登录业务,由于时常整合第三方登录,从开始的QQ,微信登录,后面又添加支付宝,微博等等,之前是没有使用设计模式,所有的登录方式都柔和在一个业务类中,后来发现需求经常改。
  2. 登录方式经常会增加或更换,每次都要修改业务层代码,所以,经过我的设计,使用了工厂设计模式和策略模式,解决了,经常修改业务层代码的问题。
  3. 然后就是SQL慢接口的问题了。响应得太慢,通过sentinel工具按照业务链路追踪,当时是支付的业务。由于改业务比较复杂,持久层的操作比较多,所以找起来还是比较麻烦。找到之后也是想了好久,后面为这个表添加了额外的索引才得以解决。

你是如何快速定位系统的瓶颈?


回答

  1. 首先,在我们项目上线之前,我们会给系统做压测。对于一些QPS较低的接口会查找导致响应慢的原因,我们的压测就是为了定位系统的性能瓶颈或者潜在的性能瓶颈
  2. 我们经常使用的是Apache家里面的Jmeter工具进行的压力测试。
  3. 同时呢,我们会使用一定的监控工具,链路追踪工具,在项目上线之后进行监控。监控工具我们使用的是Prometheus+Grafana,链路追踪工具我们是使用的是Zipkin。还会使用线上站短工具Arthas(阿尔萨斯)

image-20231007200031482

posted @   叫授_pront  阅读(21)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示