2025年Java常见面试题(持续更新)

  1. 数据库事务特性。原子性、一致性、隔离性、持久性
  2. 如何防止SQL注入:使用#不要使用$符号;对所有的入参做校验;使用存储过程;执行预处理语句和参数化查询;最低权限原则;
  3. 微服务拆分的原则:微服务的拆分应该从业务、技术、组织结构三个维度进行考虑。业务上按照DDD领域驱动设计原则来进行拆分,然后根据持续演进原则先粗后细逐步的进行迭代。
    技术上按照单一责任、闭包、服务自治、高内聚低耦合、数据隔离原则进行拆分,也需要考虑性能问题将性能要求高或性能压力大的服务单拆出来,比如流量较大的服务可以做读写分离。还需要考虑稳定性原则,将成熟改动不大的服务拆分为稳定服务,避免频繁发布,改动多业务迭代快的拆分为变动服务。还可以根据安全隔离进行拆分,区分为对外的跟对内的。还要对重复功能进行沉淀,沉淀为通用服务避免重复造轮子。还有不同语言的可以异构成独立服务。
    组织上,根据公司的组织结构来设计,按照康威定律
  4. 拆分完如何验证合理性:还是要从业务、技术、组织结构上来评估合理性,业务上能不能满足当前跟未来的发展;技术上性能、安全性、部署维护成本;组织上是不是促进团队协作跟沟通。微服务的拆分跟合并是一个持续演进的过程,需要不断的迭代优化。
  5. kafka为什么支持高吞吐
    分区分段与并行处理。topic分成多个分区,不同分区在不同服务器上,还对数据进行分段分段之后再加索引,生产者消费者并行处理。
    批量读写、批量压缩
    直接用系统的page Cache,读写都基于内存。又使用了零copy技术直接将数据copy到nic缓冲区,减少数据在用户空间跟内核空间复制。
    顺序写磁盘技术。减少磁盘寻址时间,当然带来的问题就是不能删数据
  6. 使用kafka如何避免消息丢失
    生产者使用ack机制,0消息发出就算成功、1broker的Leader副本收到就算成功、-1Leader跟follower都写入成功;
    broker是异步刷盘也有可能失败,但是设置了一个分区几个副本,设置刷盘频率
    消费者这边设置提交offset的机制,关闭自动提交消费完成之后再提交,支持幂等消费
  7. 数据库三范式。原子性、唯一性、冗余性
  8. MySQL优化
    连接数优化。增加最大连接数、修改默认超时时间释放不活跃的连接,但不要释放连接池;客户端连接池的合理利用
    集群优化,读写分离,分库分表,垂直分库水平分表
    打开慢查询日志,分析慢查询情况
    优化SQL语句,通过explain 执行计划,创建合适的索引,唯一索引、普通索引、复合索引。SQL语句优化,不在索引列使用函数,不在where语句上使用操作符,不在where上进行null判断,不在where使用or来连接条件,模糊查询%在后面。查询多行一定要分页;尽量用连接查询代替子查询
  9. 怎么排查Java程序占用CPU过高
    JPS查看本机线程信息。
    top命令找到占用最高的进程PID,
    在用(top -hp PID)查看进程下的线程ID转换为16进制线程ID TID(printf"%x\n" tid),
    jstack打印线程堆栈。jstack PID命令生成Java进程的线程快照,在快照里面通过TID找到堆栈(jstack pid | grep tid -A 60)
    Jstat监控JVM内存。如果gc过高继续用 jstat -gc pid 3000,如果fgc频率高就用jstack跟jmap分析堆内存使用情况
    Jmap生成内存快照。用jmap -dump:format=b,file=heapdump.phrof pid命令去生成dump文件然后用专用软件如jprofiler
  10. 常用的设计模式
    单例、工厂、适配器、观察者、建造者、策略模式、责任链、代理模式
  11. synchronizedLock的区别
    synchronized:Java关键字,jvm层面实现的隐式锁不需要自己释放,可以加在方法或者代码块,可重入不可中断非公平锁。低竞争模式下性能好,因为使用了CPU的悲观锁,并且排它锁第二个线程获取不到锁会一直等待。偏向锁、轻量级锁、重量级锁
    Lock:是一个类,需要自己手动释放,可重入可中断可以是公平锁也可以非公平,高并发时候性能好,因为是乐观锁,AQS+CAS实现的,AQS就是维护锁状态跟先进先出队列,CAS是硬件级别的原子操作会尝试更新锁状态。
  12. 线程池
    FixedThreadPool,固定大小线程池,比如查询数据库,阻塞队列
    SingleThreadExecutor,单线程,比如处理文件读写,阻塞队列
    CachedThreadPool,动态线程池
    ScheduledThreadPool,定时执行的线程池
    实际使用中自己通过ThreadPoolExecutor创建线程,CPU密集型任务比如视频解码数据加密,核心线程数跟最大线程都可以是CPU线程数+1,线程超过CPU核心数增加上下文切换开销,额外一个线程是因为某线程因为页缺失等原因阻塞时可以继续利用CPU。IO密集型任务可以配置CPU的2倍,最大线程可以设置2~3倍
  13. thrift
    支持二进制跟文本传输协议,支持基本类型、结构体、集合、异常类型、服务类型,底层是RPC远程调用,定义好协议格式,主要是数字
  14. char 跟 varchar区别
    char,固定长度适合保存手机号、身份证号等定长数据,
    varchar,可变长度,适合存name、地址信息,多一位存储长度
  15. MySQL数据库索引
    通过B+树存储,叶子结点存放key跟value,其他节点存放key,叶子结点有引用指向相邻的叶子节点。数据量增加、插入删除数据时会进行重平衡,
  16. SynchronizedMap
    使用分段锁保证性能,一次锁住一个桶默认16个桶,jdk8之后也改用CAS(Compare And Swap)
  17. 并发编程三要素
    原子性、有序性、可见性
  18. CyclicBarrier 和 CountDownLatch 的区别
    count 是线程等待其他线程都执行完当前线程才继续执行,定时任务中并行计算结果出来之后统一处理,计数器只能用一次,
    cyclicBarrier 是所有线程都进入await方法后同时执行, 计数器可以reset,处理复杂场景比如计算错误再来一遍
  19. 技术难点
    如何让上游无感知迁移流量。在原有SDK接口上面增加一个切面吧流量拿到改成调用服务B;处理蜂窝刷新问题,将门店切成10份分散执行,执行中使用线程池并行计算,拿到结果再批量入库。
  20. JVM内存
    堆、方法区是线程共享,虚拟机栈、本地方法栈、程序计数器是线程独有。垃圾回收主要针对堆,堆主要存放new出来的对象(方法中对象引用没有被返回或没有在方法体外被使用),新生代(eden、from suvivor、to suvivor)、老年代。方法区之前存在永久代8之后被元空间替代,永久代有内存溢出风险、垃圾回收效率低、无法动态调整大小、无法回收常量池中的内存。元空间存储在本地内存不在jvm,突破内存限制减少OOM,可以动态调整大小。缺点也可能内存溢出、需要重新考虑内存管理和调优
  21. Sping事务失效
    数据库引擎不支持;没有被Spring管理;非public方法(通过AspectJ代理模式也可以)或者方法被final、static修饰;是否是自调用情况;数据源没配置事务管理器;异常被吞掉没有正确抛出或者抛出的异常类型错误;多线程
  22. ES深分页怎么解决
    Scroll API 适合遍历大量数据,他像一个游标会生成快照,后续分页都按照快照避免了重复排序的开销,适合需要大量遍历数据的场景;Search After 5.0之后引入的分页方式,会基于上一个分页最后一条记录的排序值进行下一个分页查询,避免from + size带来的开销。适合实时分页场景。
  23. Scroll API的快照有啥问题
    新数据写入或者已有数据删除、更新这些变化不会反应在快照中,查询结果不实时;维护快照占用内存资源多;适合一次性批量导出数据,不适合实时交互的分页查询;Scroll Id 游标存在过期问题默认5分钟

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/912777.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/912777.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring AI ——在springboot应用中实现基本聊天功能(ChatModel)

文章目录 前言项目版本依赖引入配置key信息编写测试接口注入ChatModel并普通返回注入ChatModel并流式返回自定义模型对象并直接返回总结前言 在Spring AI 中,CchatClient 是一个所有大模型通用性的调用方式,对绝大多数大模型的功能点都具备封装和见解调用性。 但这一点在部…

78、系统工程生命周期阶段及方法

一、系统工程生命周期的七大阶段 系统工程生命周期涵盖从概念萌芽到系统退役的全过程,通常分为以下七个阶段,每个阶段具有明确目标与核心任务: 1.探索性研究阶段 目标:识别利益相关者需求,探索技术可行性。任务&…

二十九、【用户体验篇】个人中心:用户资料展示与密码修改

二十九、【用户体验篇】个人中心:用户资料展示与密码修改 前言准备工作第一部分:后端实现 - 个人中心 API1. 修改 `UserDetailSerializer` 以支持密码修改2. 在 `api/views.py` 中添加 `UserMeView` 和 `PasswordChangeView`3. 注册个人中心相关 API 路由4. 后端初步测试第二…

STEP-BACK PROMPTING:退一步:通过抽象在大型语言模型中唤起推理能力

摘要 我们提出了 STEP-BACK PROMPTING,这是一种简单的提示技术,可以让LLM进行抽象,从包含具体细节的实例中推导出高层次概念和第一性原理。利用这些概念和原理来引导推理过程,LLM在朝向正确解答路径上显著提升了推理能力。我们在…

Paimon vs. HBase:全链路开销对比

Paimon 在特定场景(如流式 Lookup Join)下,会为了极致的查询性能而引入额外的存储(本地磁盘 LookupFile)和计算(构建 LookupFile)开销。但这是一种用一次性的、可控的开销,换取后续持…

本地的包名导致的AttributeError: module ‘langchain‘ has no attribute ‘verbose‘

你遇到的 AttributeError: module langchain has no attribute verbose 问题,确实可能是因为你的本地文件或目录名与 langchain 官方包冲突,导致 Python 在导入时优先加载了你的本地文件而非真正的 langchain 库。 问题原因 Python 模块加载机制&#xf…

玄机——某学校系统中挖矿病毒应急排查

本篇文章主要记录某学校长期未运营维护的程序,被黑客发现了漏洞,但好在学校有全流量设备,抓取到了过程中的流量包 需要你进行上机以及结合流量分析,排查攻击者利用的漏洞以及上传利用成功的木马 文章目录 靶机介绍1.使用工具分析共…

如何解决wordpress批量删除媒体库中的图片很慢甚至卡死问题

批量删除WordPress媒体库中的图片速度很慢,如果批量删除的图片多会出现CPU100%甚至卡死,出现这个问题通常最主要的原因是服务器性能问题,如果换成性能好的服务器就不会了,比如换Siteground 家的服务器,就不会有这个问题…

深度学习入门day4--手写数字识别初探

鱼书提供的代码可以在github找到。源码地址 环境配置部分可以看前面几篇博客,还是用Anaconda,运行下面代码,可以看哪个库缺失。 import importlib import numpy as np deps {"torch": "torch","torchvision"…

STM32中定时器配置,HAL_Delay的原理,滴答定时器,微秒延时实现,PWM,呼吸灯

目录 定时器基本定时功能实现 CubeMX设置 手动书写代码部分 定时器启动 实现溢出回调函数 HAL_Delay介绍 HAL_Delay实现原理 HAL_Delay的优点 HAL_Delay的缺点 利用滴答定时器(SysTick)实现微秒级延时 PWM PWM介绍 通用定时器中的重要寄存器 PWM中的捕获比较通道 …

飞牛NAS(fnOS)详细安装教程

以下是飞牛NAS(fnOS)的详细安装教程,结合官方指南和社区实践整理而成: 一、准备工作 硬件需求 8GB或更大容量的U盘(用于制作启动盘)待安装设备(支持x86架构的物理机或迷你主机,如天钡…

springboot 显示打印加载bean耗时工具类

一 spring的原生接口说明 1.1 接口说明 Aware是Spring框架提供的一组特殊接口,可以让Bean从Spring容器中拿到一些资源信息。 BeanFactoryAware:实现该接口,可以访问BeanFactory对象,从而获取Bean在容器中的相关信息。 Environm…

OpenGL空间站场景实现方案

OpenGL空间站场景实现方案 需求分析 根据任务要求,我需要完成一个基于Nehe OpenGL的空间站场景,实现以下功能: 完整的空间站场景建模(包含多个模型和纹理贴图)Phong光照模型实现(包含多种光源和材质效果)摄像机键盘控制交互功能解决方案设计 技术栈 C++编程语言OpenG…

基于昇腾310B4的YOLOv8目标检测推理

YOLOv8目标检测 om 模型推理 本篇博客将手把手教你如何将 YOLOv8 目标检测模型部署到华为昇腾 310B4 开发板上进行高效推理(其他昇腾开发版也可参考此流程)。 整个流程包括: 模型格式转换(ONNX → OM)昇腾推理环境配…

前端跨域问题解决Access to XMLHttpRequest at xxx from has been blocked by CORS policy

在前端开发中,跨域资源共享(CORS)是一个常见的问题。它涉及到浏览器安全机制,防止网页从一个域获取资源时被另一个域阻止。错误信息如“Access to XMLHttpRequest at xxx from origin has been blocked by CORS policy”是典型的跨…

[ linux-系统 ] 软硬链接与动静态库

软硬链接 介绍 软链接 通过下图可以看出软链接和原始文件是两个独立的文件,因为软链接有着自己的inode编号: 具有独立的 inode ,也有独立的数据块,它的数据块里面保存的是指向的文件的路径,公用 inode 硬链接 通过…

3D 商品展示与 AR 试戴能为珠宝行业带来一些便利?

对于珠宝行业而言,长久以来,如何让消费者在做出购买决策之前,便能真切且直观地领略到珠宝独一无二的魅力,始终是横亘在行业发展道路上的一道棘手难题。而 3D 互动营销的横空出世,恰似一道曙光,完美且精准地…

电子电气架构 --- SOVD功能简单介绍

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 简单,单纯,喜欢独处,独来独往,不易合同频过着接地气的生活,除了生存温饱问题之外,没有什么过多的欲望,表面看起来很高冷,内心热情,如果你身…

【Java编程动手学】 Java中的运算符全解析

文章目录 一、引言二、算术运算符1、基本概念2、具体运算符及示例 三、关系运算符1、基本概念2、具体运算符及示例 四、自增减运算符1、基本概念2、具体运算符及示例 五、逻辑运算符1、基本概念2、具体运算符及示例 六、位运算符1、基本概念2、具体运算符及示例 七、移位运算符…

【前端】1 小时实现 React 简历项目

近期更新完毕。仅包括核心代码 目录结构 yarn.lock保证开发者每次能下载到同版本依赖,一般不需要特别留意 package.json 是 Node.js 项目、前端项目、npm/yarn的配置文件。 Dockerfile 是用来 定义 Docker 镜像构建过程的文本文件。它是一份脚本,告诉 …