Java常见的技术场景面试题

本文讨论了单点登录的实现、RBAC权限认证、数据加密策略、项目中遇到的技术挑战、日志采集与分析方法,以及性能测试和故障排查技巧,包括使用Elasticsearch、Logstash和Kibana进行日志管理,以及远程调试在生产环境中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、单点登录这块怎么实现的?

单点登录概述

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

以前的时候,一般我们就单系统,所有的功能都在同一个系统上。

后来,我们为了合理利用资源和降低耦合性,于是把单系统拆分成多个子系统。

现在有一个微服务的简单架构,如图:

使用jwt解决单点登录的流程如下:

参考回答

二、权限认证是如何实现的?

权限认证: RBAC

模型表

三、上传数据的安全性你们怎么控制?

回答:

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

  • 文件很大建议使用对称加密,不过不能保存敏感信息
  • 文件较小,要求安全性高,建议采用非对称加密

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

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

有4个方面可以回答,只要挑出一个回答就行了

举例:

①:介绍登录业务(一开始没有用设计模式,所有的登录方式都柔和在一个业
务类中,不过,发现需求经常改)
②:登录方式经常会增加或更换,每次都要修改业务层代码,所以,经过我的
设计,使用了工厂设计模式和策略模式,解决了,经常修改业务层代码的问题
③:详细介绍一下工厂模式和策略模式(参考我前面设计模式的文章)

五、你们项目中日志怎么采集的?

1、为什么要采集日志?

日志是定位系统问题的重要手段,可以根据日志信息快速定位系统中的问题

2、采集日志的方式有哪些?

  • ELK:即Elasticsearch、Logstash和Kibana三个软件的首字母
  • 常规采集:按天保存到一个日志文件

2.1ELK基本架构

ELK即Elasticsearch、Logstash和Kibana三个开源软件的缩写
  • Elasticsearch:全文搜索和分析引擎,对大容量的数据进行接近实时的存储、搜索和分析操作。
  • Logstash:是一个数据收集引擎,它可以动态的从各种数据源搜集数据,并对数据进行过滤、分析和统一格式等操作,并将输出结果存储到指定位置上
  • Kibana:是一个数据分析和可视化平台,通常与Elasticsearch配合使用,用于对其中的数据进行搜索、分析,并且以统计图标的形式展示
配置文件

 

六、查看日志的命令?

目前采集日志的方式:按天保存到一个日志文件

也可以在logback配置文件中设置日志的目录和名字
查看日志的命令

1、实时监控日志的变化

实时监控某一个日志文件的变化:tail -f xx.log
实时监控日志最后100行日志: tail –n 100 -f xx.log

2、按照行号查询

查询日志尾部最后100行日志:tail – n 100 xx.log
查询日志头部开始100行日志:head –n 100 xx.log
查询某一个日志行号区间:cat -n xx.log | tail -n +100 | head -n 100 (查询100行至200行的日志)

3、按照关键字找日志的信息

查询日志文件中包含debug的日志行号:cat -n xx.log | grep "debug"

4、按照日期查询

sed -n '/2023-05-18 14:22:31.070/,/ 2023-05-18 14:27:14.158/p’xx.log

5、日志太多,处理方式

分页查询日志信息:cat -n xx.log |grep "debug" | more
筛选过滤以后,输出到一个文件:cat -n xx.log | grep "debug" >debug.txt

七、怎么快速定位系统的瓶颈?

比如: 

1、压测(性能测试)

  •  压测目的:给出系统当前的性能状况;定位系统性能瓶颈或潜在性能瓶颈

  • 指标:响应时间、 QPS、并发数、吞吐量、 CPU利用率、内存使用率、磁盘IO、错误率

  • 压测工具:LoadRunner、Apache Jmeter …

  • 后端工程师:根据压测的结果进行解决或调优(接口慢、代码报错、并发达不到要求…)

2、监控工具、链路追踪工具

  • 监控工具:Prometheus+Grafana
  • 链路追踪工具:skywalking、Zipkin

3、线上诊断工具Arthas(阿尔萨斯)

  • 官网:https://arthas.aliyun.com/
  • 核心功能:如下图

火焰图

八、生产环境的问题怎么排查?

已经上线的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

-agentlib:jdwp 是通知JVM使用(java debug wire protocol)来运行调试环境
transport=dt_socket 调试数据的传送方式
server=y 参数是指是否支持在server模式
suspend=n 是否在调试客户端建立起来后,再执行JVM
address=5005 调试端口设置为5005,其它端口也可以


2、idea中设置远程debug,找到idea中的 Edit Configurations...

3. idea中启动远程debug

4. 访问远程服务器,在本地代码中打断点即可调试远程

作为Java技术专家面试的一部分,常见面试题主要集中在算法和数据结构方面。这些问旨在评估面试者对Java编程的理解和应用能力。 一种常见的面试问是要求面试者编写一个算法来解决某个具体的问。这个问可能涉及到数组操作、字符串处理、链表操作、树结构等等。面试者需要根据目要求,使用Java语言编写出一个高效且正确的算法解决方案。这类问可以通过独立思考、分析问、设计算法和编写代码来回答。 另一个常见的问是关于Java中的数据结构和算法的理解。面试官可能会问面试者关于数组、链表、栈、队列、堆、树等常见数据结构的特点和应用场景。面试者需要清楚地解释这些数据结构的定义、操作和复杂度,并能够根据具体的问选择合适的数据结构来解决问。 此外,面试官还可能问到Java中的一些核心概念和特性,例如多线程编程、异常处理、IO操作、集合框架等。面试者需要展示自己对这些概念和特性的理解,并能够灵活运用它们解决实际问。 对于准备参加Java技术专家面试的同学,建议多刷一些常见Java算法和数据结构,加深对Java编程的理解和应用能力。同时,也可以阅读一些相关的面试指南和面试经验,提前准备好对常见的回答。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Java开发专家阿里P6-P7面试题大全及答案汇总(持续更新)](https://blog.csdn.net/qq_17025903/article/details/113927157)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [Java面试题(全)](https://blog.csdn.net/m0_46991147/article/details/125897857)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值