2025年Java常见面试题

news/2025/9/25 20:35:27/文章来源:https://www.cnblogs.com/sunny3158/p/19111956

2025年Java常见面试题
原文链接:https://zhuanlan.zhihu.com/p/1913568498535360114

  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.mzph.cn/news/917491.shtml

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

相关文章

实用指南:k8s 跟 nacos 关于服务注册以及服务发现

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

9-25

今天满课。。。 最近在忙大创,电控这方面需要合作完成,重拾了单片机的知识 驱动电机使用的是TB6612,驱动130直流电机 使用pwm控制转速 PWM 是 脉冲宽度调制(Pulse Width Modulation)的缩写,是一种通过调节脉冲信…

电子商务网站推广的方法有哪些成都网站设计网站制作公司

关于三次样条插值,计算方法比较复杂,但是静下心来仔细研究也是可以理解的。 本文借鉴文章来源:http://www.cnki.com.cn/Article/CJFDTotal-BGZD200611035.htm 定义: 简单来说就是给定了一些在区间[a,b]的数据点{x1,x2,x3.....xn…

西安网站制作工商上海公司注册名字查询

自诞生以来,OpenStack 似乎一直被质疑,其背后最重要的两大推手 NASA 和 Rackspace 都弃它而去,惠普、思科接连宣布关闭基于 OpenStack 的公有云服务,但是,OpenStack 依旧坚挺。1Q:OpenStack发展历史A:2Q:op…

郑州行业网站建设最适合穷人的四种保险

1.数据类型和变量 Python使用缩进来组织代码块,一般使用4个空格的缩进.使用#来注释一行,其他每一行都是一个语句,当语句以冒号:结尾时,缩进的语句视为代码块.Python对大小写敏感. 1.1 整数 Python可以处理任意大小的整数,包括负整数,写法与数学上写法一致,例如:-100.如果用十六…

AT_agc021_d [AGC021D] Reversed LCS

首先需要注意到一个性质,如果两个序列的最长公共子序列不是一个回文串,一定可以左右扩展成一个回文串,原因显然(但其实并不容易观察到这一性质)。 然后区间 DP 简单求一下区间更改之后的最长回文串即可。

常用注解汇总

常用注解汇总常用注解汇总 原文链接:https://www.cnblogs.com/tqlin/p/11687811.html 常用注解汇总 原文链接:https://www.cnblogs.com/tqlin/p/11687811.htmlSpring Boot 常用注解汇总 一、启动注解 @SpringBootApp…

adb shell 常用文件命令

自动生成 10 个 1m 文件 adb shell for i in $(seq 1 10); do dd if=/dev/zero of=/sdcard/file_$i.bin bs=1048576 count=1; done生成多个不同大小的文件(1MB 到 5MB) adb shell for i in $(seq 1 10); do dd if=/d…

你所不知道的Spring的@Autowired实现细节

你所不知道的Spring的@Autowired实现细节你所不知道的Spring的@Autowired实现细节 原文链接:https://cloud.tencent.com/developer/article/1692933 前言相信很多Java开发都遇到过一个面试题:Resource和Autowired的区…

Java文件编程

目录Java文件编程传统IONIONIO.2总结 Java文件编程 传统IO 传统IO (java.io包)的主要类:FileInputStream/FileOutputStream - 字节流 FileReader/FileWriter - 字符流 BufferedReader/BufferedWriter - 缓冲流 File -…

opencart做外贸网站怎样新乡手机网站建设官网

不需要选中整行,执行光标所在行,按F8就可直接执行; 工具—>首选项—>SQL窗口—>自动选择,勾选自动选择即可。 这样光标放在此行,按F8就可以执行,需要注意的是sql语句必须以分号结束。下期更新

免费个人博客网站模板下载新县住房和城乡规划建设局网站

24年重庆三支一扶报名照不通过怎么处理?

自我介绍与规划

关于我自己: 目前就读于中南林业科技大学涉外学院大数据专业大三,在过往的学习生活里,我更像 “安静的追赶者”—— 成绩稳定在班级中上游,上课认真记笔记、作业按时完成,却很少主动在课堂上发言或参与小组牵头工…

软件工程学习日志2025.9.25

今天我完成了软件设计课程的作业,这是一个非常有用的多语言翻译服务。以下是我的实践总结: 技术实现要点API调用流程 • 注册百度AI开放平台账号并创建应用• 获取API Key和Secret Key • 使用官方SDK进行接口调用核…

从50ms到30ms:YOLOv10部署中图像预处理的性能优化实践 - 实践

从50ms到30ms:YOLOv10部署中图像预处理的性能优化实践 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Con…

申请域名流程后怎样做网站装潢设计软件免费

转自:http://www.ruanyifeng.com/blog/2012/09/linus_torvalds.html作者: 阮一峰日期: 2012年9月 3日除了程序员,大概很少人知道Linux操作系统。它的发明者Linus Torvalds,知道的人就更少了。他本人也很低调&#xff0…

大兴做网站公司wordpress首页布局修改

来源:新华社第17届亚洲-太平洋通讯社组织(亚通组织)全体大会8日在韩国首尔闭幕。大会颁发了亚通组织卓越通讯社品质奖,中国新华通讯社与越南通讯社分别获奖。这是亚通组织主席、阿塞拜疆国家新闻社社长阿斯兰阿斯兰诺夫&#xff0…

苏联的经典数学教材

苏联的经典数学教材苏联的数学教材以其体系严谨、逻辑缜密、内容深刻而享誉世界,形成了独具特色的“苏联学派”风格。这些教材通常不满足于简单地呈现知识,而是致力于培养学生严格的数学思维和独立的解题能力。其典型…

java课基础问题整理与解答

java课基础问题整理与解答常量与变量定义示例 public class cyj { // 1. 定义全局常量,全局变量在项目中通用 public static final int MAX_VALUE = 512; // 2. 定义局部常量,局部变量在本类中使用 private static f…

redis实现分布式锁1

在集群下的并发问题:业务流程:具体实现: ILock点击查看代码package com.hmdp.utils;public interface ILock {// 获取锁boolean tryLock(long timeoutSec);// 释放锁void unlock(); }SimpleRedisLock点击查看代码pa…