java面试宝典
文章平均质量分 59
希望大家都能找到心仪的工作,学习是一条时而郁郁寡欢,时而开怀大笑的路,加油。如果你通过努力成功进入到了心仪的公司,一定不要懈怠放松,职场成长和新技术学习一样,不进则退。如果有幸我们江湖再见!
阿杰同学
专注Java后端学习!内容涵盖Java面试指南、Spring Boot、Dubbo、Zookeeper、Redis、Nginx、消息队列、系统设计、架构、编程规范等内容。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
史上最全的Spring面试题汇总
一、Spring概述基础1、Spring是什么?有什么特点?(1)Spring是一个轻量级Java开发框架,最早有Rod Johnson创建。(2)Spring设计目标:Spring为开发者提供一个一站式轻量级应用开发平台;(3)Spring设计理念:在JavaEE开发中,支持POJO和JavaBean开发方式,使应用面向接口开发,充分支持OO(面向对象)设计方法;Spring通过IoC容器实现对象耦合关系的管理,并实现依赖反转,将对象之间的依赖关系交给IoC容器,实现解耦;(4)Spring框原创 2021-10-15 11:07:34 · 1728 阅读 · 0 评论
-
Redis面试宝典
1.八股文带你吊打面试官之Redis我们很多小伙伴平时会看很多面试八股文,但是经常遇到一个问题,结论是知道了,但是面试官继续深剖,问我们底层实现,这时我们懵圈了,因此我专门出一期面试突击专题,帮助各位小伙伴快速的准备好面试。2.如何准备Redis面试?①把Redis常用的数据结构了解一遍,并且把他和我们常用的Java语言数据类型关联起来,这样就更容易理解了。②面试官经常问:Redis为什么这么快?读请求并发量存在瓶颈如何优化?写请求并发量存在瓶颈如何优化?数据存储容量存在瓶颈如何优化?如何实现自动故原创 2021-10-16 10:06:40 · 295 阅读 · 0 评论
-
java开发多线程案例
ExecutorService exec = Executors.newCachedThreadPool();List iii = new ArrayList<>();iii.add(“1”);iii.add(“2”);iii.add(“3”);iii.add(“4”);for (String ii : iii) {Runnable runnable = new Runnable() {@Overridepublic void run() {// TODO Auto-gene原创 2020-11-19 10:32:30 · 178 阅读 · 0 评论
-
Java工程师面试题总结及参考答案(一)
1、 JVM结构原理、GC工作机制详解转载于:https://blog.csdn.net/tonytfjing/article/details/44278233一、JVM结构根据《java虚拟机规范》规定,JVM的基本结构一般如下图所示:从左图可知,JVM主要包括四个部分:1.类加载器(ClassLoader):在JVM启动时或者在类运行时将需要的class加载到JVM中。(右图表示了从java源文件到JVM的整个过程,可配合理解。 关于类的加载机制,可以参考http://blog.csdn.n原创 2020-08-11 11:11:23 · 675 阅读 · 0 评论
-
IDEA文件夹目录分层显示
IDEA文件夹目录分层显示原创 2023-05-13 15:38:11 · 9149 阅读 · 0 评论
-
Maven 面试题及答案整理,最新面试题
Maven项目标准目录结构包括src/main/java(源码)、src/main/resources(资源)、src/test/java(测试代码)和target(构建输出)。依赖管理通过坐标(groupId/artifactId/version)和范围(compile/test/provided等)实现,支持传递性依赖和冲突解决(最近优先原则)。生命周期分为clean/default/site,各包含有序阶段(如compile/test/package),插件可绑定阶段执行任务。多模块项目通过父POM聚原创 2025-12-10 11:45:07 · 92 阅读 · 0 评论 -
Java 多线程 面试题及答案整理,最新面试题
摘要:本文系统介绍了Java并发编程的核心概念与技术,包括同步机制(synchronized、volatile、Lock)、线程池管理、线程通信(wait/notify、信号量等)、并发工具类(CountDownLatch、CyclicBarrier等)的使用。重点解析了线程安全实现、死锁处理、原子操作、内存模型(JMM)等关键问题,并提供了生产者-消费者模式、单例模式等典型场景的线程安全实现方案。文章还对比了ReentrantLock与synchronized、ReadWriteLock与StampedL原创 2025-11-27 19:42:30 · 35 阅读 · 0 评论 -
JVM 高级面试题及答案整理,最新面试题
JVM核心机制摘要:JVM包含多种垃圾收集器(如Serial、Parallel、CMS、G1),采用分代回收策略,使用标记-清除、复制等算法。内存分为堆(存储对象)、方法区(类信息)、栈(线程私有数据)等区域。类加载采用双亲委派模型,通过启动类、扩展类和应用程序类加载器完成。对象存活通过可达性分析判断,引用类型包括强、软、弱、虚引用。Java 8用元空间替代永久代,优化了类元数据存储。JVM通过JIT编译器提升性能,并提供VisualVM等工具进行监控调优。原创 2025-11-26 16:12:18 · 165 阅读 · 0 评论 -
Java 最新面试题及答案整理
Java内存模型与核心机制摘要 Java内存模型包含堆(存储对象实例)、栈(线程私有,存储局部变量)、方法区(类信息)和本地方法栈等组件。多线程同步可通过synchronized(基于JVM)或ReentrantLock(API实现,支持公平锁)实现。垃圾回收采用分代收集算法,包括标记-清除、复制等策略。 反射机制支持运行时动态获取类信息、创建对象和调用方法。异常处理通过try-catch-finally机制分离正常与错误逻辑。泛型通过类型擦除实现编译时类型安全。设计模式分为创建型、结构型和行为型三类。 J原创 2025-11-26 14:46:32 · 36 阅读 · 0 评论 -
Maven学习笔记
Maven是一个强大的构建工具,能够自动化构建过程(清理、编译、测试、打包和部署),同时作为依赖管理和项目信息管理工具。它通过中央仓库自动下载构件,支持用户范围配置(如settings.xml)。Maven的生命周期包括clean、default和site三套流程,通过插件绑定实现具体任务。支持聚合与继承机制,dependencyManagement统一管理依赖版本,pluginManagement管理插件配置。此外,Maven还提供仓库管理(本地/远程)、镜像配置、依赖分析等功能,能够优化项目构建流程,确原创 2025-08-14 19:26:06 · 344 阅读 · 0 评论 -
Nginx学习笔记
Nginx是一款高性能的Web服务器和反向代理服务器,具有高并发、低资源消耗等优点。文章全面介绍了Nginx的核心特性和应用场景,包括: 基本概念:正向/反向代理的区别、动静分离原理 核心功能:负载均衡算法(轮询/权重/IP哈希等)、高并发实现机制(异步非阻塞)、限流策略(漏桶/令牌桶算法) 配置管理:虚拟主机配置、健康检查、压缩优化、跨域解决方案 高级特性:CDN整合、高可用配置、模块化设计 常见问题:C10K问题、错误代码解析、性能调优建议 文章还对比了Nginx与Apache的差异,并提供了完整的配置原创 2025-08-14 19:24:54 · 342 阅读 · 0 评论 -
Git 超详细总结!(推荐 )
Git是一个分布式版本控制系统,用于高效管理项目版本。它通过快照方式保存文件状态,只有修改过的文件才会重新存储。Git具有三种文件状态:已修改、已暂存和已提交。基本工作流程包括修改文件、暂存更改和提交更新。Git支持分支管理、合并冲突解决、版本回退、标签标记等功能,还能与远程仓库交互进行代码共享。常用命令包括git add、commit、push、pull、merge等,同时提供stash暂存、cherry-pick选择提交等高级功能。Git通过.gitignore文件管理忽略规则,支持配置多远程仓库,是开原创 2025-08-13 15:33:38 · 343 阅读 · 0 评论 -
几种常见的架构模式
文章摘要:本文系统介绍了8种常见的架构设计模式:1.单库单应用模式(简单但扩展性差);2.内容分发模式(利用CDN加速资源访问);3.查询分离模式(主从分离+ES提升查询性能);4.微服务模式(拆分复杂业务系统);5.多级缓存模式(客户端/网关/业务层缓存);6.分库分表模式(解决单表性能瓶颈);7.弹性伸缩模式(动态资源调配);8.多机房模式(实现异地多活)。每种模式都详细分析了适用场景、实现方案和优缺点,为架构设计提供了系统性的参考框架。原创 2025-08-11 17:12:12 · 102 阅读 · 0 评论 -
10w级别数据Excel导入优化
【摘要】本文针对10万+行Excel数据导入系统的性能优化方案进行了详细阐述。通过四轮迭代优化:1)从原生POI逐行处理改为EasyPOI+批量插入;2)引入数据库查询缓存减少IO;3)采用阿里EasyExcel解决大文件读取问题;4)通过并行流批量插入(每次1000条)优化数据库写入。最终实现41万行数据50秒读取、10万行完整导入95秒的性能提升。关键优化点包括:选择高效Excel工具、数据库操作批量化、多线程处理、避免冗余日志。针对测试环境4G内存服务器的数据库瓶颈,文章提供了具体的代码实现方案和性能原创 2025-08-09 10:54:28 · 515 阅读 · 0 评论 -
订单30分钟未支付自动取消怎么实现?
这样可以看出定时轮由个 3 个重要的属性参数,ticksPerWheel(一轮的 tick 数),tickDuration(一个 tick 的持续时间)以及 timeUnit(时间单位),例如当 ticksPerWheel=60,tickDuration=1,timeUnit=秒,这就和现实中的始终的秒针走动完全类似了。因此,方案二不是太推荐。该方案通常是在小型项目中使用,即通过一个线程定时的去扫描数据库,通过订单时间来判断是否有超时的订单,然后进行 update 或 delete 等操作。原创 2025-08-09 10:35:33 · 283 阅读 · 0 评论 -
读写分离和分库分表详解
摘要:读写分离通过将数据库读写操作分散到不同节点,提升读性能,基于MySQL主从复制实现。分库分表则通过数据分散存储解决单库单表性能瓶颈,但需解决事务、分布式ID等问题。主从复制依赖binlog实现数据同步,但存在延迟问题,可通过强制主库读、优化从库性能等方式缓解。合理使用读写分离和分库分表能有效提升数据库性能,需根据业务场景选择合适方案。原创 2025-08-08 15:22:37 · 227 阅读 · 0 评论 -
《Java程序员涨薪跳槽实战指南(2025版)
《Java程序员涨薪跳槽实战指南(2025版)》 摘要:针对Java开发者职业发展,本文提出系统性提升方案。技术层面需深耕JVM原理、Spring生态及分布式架构,掌握云原生和DevOps工具链;职业策略上建议结合年限选择大厂镀金或架构师路线,运用STAR法则包装高并发优化等实战经验。同步关注AI融合与全栈能力拓展,推荐LeetCode+大厂面经组合训练。通过持续技术投入(建议每周10小时)聚焦云原生/AI等高价值领域,可实现30%-40%的薪资涨幅,资深开发者更有望突破40W年薪。原创 2025-05-30 15:18:28 · 743 阅读 · 0 评论 -
Dubbo 的工作原理
Dubbo工作原理及RPC调用流程:Dubbo采用分层架构设计,包括服务接口层、配置层、代理层、注册中心层等10个层级。工作流程主要分为服务注册、订阅、调用和监控四个步骤。当注册中心宕机时,消费者仍可通信,因为服务提供者地址信息已缓存在本地。一次完整的RPC调用会经过服务代理生成、负载均衡选择、网络传输和结果返回等环节。Dubbo的架构设计确保即使在部分组件故障时仍能维持基本服务能力。原创 2025-05-30 14:54:49 · 60 阅读 · 0 评论 -
为什么使用消息队列?
消息队列的使用及选型考量 消息队列的核心价值在于解决系统架构中的三大问题:解耦系统间依赖、实现异步处理、应对流量高峰削峰。合理使用MQ能够降低系统耦合度,提升响应速度,缓冲突发流量,但同时也带来了系统复杂度增加、可用性降低等挑战。 主流消息队列对比: ActiveMQ/RabbitMQ:万级吞吐,适合中小规模场景 RocketMQ:十万级吞吐,支持大量Topic,阿里系首选 Kafka:超高吞吐,专为大数据场景优化,适合日志采集等实时计算 技术选型需结合具体业务场景,权衡吞吐量、延迟、可靠性等指标,没有绝对原创 2025-05-30 14:53:01 · 205 阅读 · 0 评论 -
Elasticsearch高级面试题汇总及答案
本文汇总了Elasticsearch的高级面试题及其答案,涵盖了多个关键知识点。首先,介绍了Elasticsearch Analyzer的作用及其类型,包括内置和自定义分析器。其次,列举了Elasticsearch支持的配置管理工具,如Ansible、Chef等。接着,解释了logstash与Elasticsearch的结合使用方式,以及Elasticsearch在Linux部署时的优化方法,如内存、CPU、SSD等的选择与配置。此外,还讨论了Elasticsearch的冷热数据分离策略、不同软件包的重要性原创 2025-05-20 17:28:20 · 448 阅读 · 0 评论 -
深入了解 Java IO:各种流的分类与实际应用
好久没搞过 IO 了,老王看到这幅思维导图也是吃了一惊。想想也是,他当初学习 Java IO 的时候头也大,乌央乌央的一片,全是类,估计是所有 Java 包里面类最多的,一会是 Input 一会是 Output,一会是 Reader 一会是 Writer,真不知道 Java 的设计者是怎么想的。看着肺都快要气炸的小二,老王深深地吸了一口气,耐心地对小二说:“主要是 Java 的设计者考虑得比较多吧,所以 IO 给人一种很乱的感觉,我来给你梳理一下。原创 2025-01-21 16:28:52 · 145 阅读 · 0 评论 -
SSO 单点登录详解
SSO 英文全称 Single Sign On,单点登录。SSO 是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。例如你登录网易账号中心()之后访问以下站点都是登录状态。网易直播网易博客网易花田网易考拉网易 Lofter。原创 2025-01-21 16:12:18 · 196 阅读 · 0 评论 -
实现抢红包业务
1000/50 * 1w(qps) = 20w 红包请求。假设平均请求50ms ,单机支持1w qps。原创 2025-01-06 19:38:57 · 120 阅读 · 0 评论 -
扫码登录原理实现
主要为三部分的交互网页、app、服务端。原创 2025-01-06 19:37:18 · 228 阅读 · 0 评论 -
Hystrix 快速入门
Hystrix 是 Netflix 开源的一款容错框架,包含常用的容错方法:线程池隔离、信号量隔离、熔断、降级。Hystrix 官方宣布。但是 Hystrix 的客户端熔断保护,断路器设计理念,有非常高的学习价值。原创 2025-01-03 16:43:01 · 131 阅读 · 0 评论 -
es 在数据量很大的情况下(数十亿级别)如何提高查询效率啊?
举个例子吧,假如你每页是 10 条数据,你现在要查询第 100 页,实际上是会把每个 shard 上存储的前 1000 条数据都查到一个协调节点上,如果你有个 5 个 shard,那么就有 5000 条数据,接着协调节点对这 5000 条数据进行一些合并、处理,再获取到最终第 100 页的 10 条数据。这个问题是肯定要问的,说白了,就是看你有没有实际干过 es,因为啥?举个例子,拿微博来说,你可以把一些大V,平时看的人很多的数据,你自己提前后台搞个系统,每隔一会儿,自己的后台系统去搜索一下热数据,刷到。原创 2025-01-02 19:55:08 · 500 阅读 · 0 评论 -
20道Redis面试题核心技术知识点
Redis全称为:Remote Dictionary Server(远程数据服务),Redis是一种支持key-value等多种数据结构的存储系统。可用于缓存,事件发布或订阅,高速队列等场景。支持网络,提供字符串,哈希,列表,队列,集合结构直接存取,基于内存,可持久化。特点1:丰富的数据类型传统SQL数据库处理二维关系数据;MemCached数据库,键和值都是字符串;文档数据库(MongoDB)是由Json/Bson组成的文档。原创 2024-12-31 10:53:20 · 387 阅读 · 0 评论 -
RabbitMQ入门教程(概念、应用场景、安装、使用)
人一辈子最值得炫耀的不应该是你的财富有多少(虽然这话说得有点违心,呵呵),而是你的学习能力。技术更新迭代的速度非常快,那作为程序员,我们就应该拥有一颗拥抱变化的心,积极地跟进。小伙伴们在继续阅读之前,我必须要声明一点,我对 RabbitMQ 并没有进行很深入的研究,仅仅是因为要用,就学一下。当然了,小伙伴们遇到文章中有错误的地方,不要手下留情,可以组团过来捶我,但要保证一点,不要打脸,我怕毁容。原创 2024-12-25 17:00:13 · 203 阅读 · 0 评论 -
EasyExcel 导出文件
Excel订单信息导出原创 2024-12-20 09:25:58 · 510 阅读 · 0 评论 -
10 分钟快速搞懂 Lambda 表达式
就可以用Lambda表达式简化函数式接口:接口中有且只有一个未实现的方法,这个接口就叫函数式接口如果接口中有超过一个未实现方法,则不是函数式接口,不能用Lambda表达式 如果接口中有一个未实现方法,有一个默认实现方法,则是函数式接口,可以用Lambda表达式。原创 2024-12-19 17:15:39 · 125 阅读 · 0 评论 -
读写分离和分库分表详解
读写分离主要是为了将对数据库的读写操作分散到不同的数据库节点上。这样的话,就能够小幅提升写性能,大幅提升读性能。我简单画了一张图来帮助不太清楚读写分离的小伙伴理解。一般情况下,我们都会选择一主多从,也就是一台主数据库负责写,其他的从数据库负责读。主库和从库之间会进行数据同步,以保证从库中数据的准确性。这样的架构实现起来比较简单,并且也符合系统的写少读多的特点。关于如何避免主从延迟,我们这里介绍了两种方案。原创 2024-12-18 19:10:36 · 328 阅读 · 0 评论 -
IOC & AOP详解(快速搞懂)
IoC (Inversion of Control )即控制反转/反转控制。它是一种思想不是一个技术实现。描述的是:Java 开发领域对象的创建以及管理的问题。例如:现有类 A 依赖于类 B传统的开发方式:往往是在类 A 中手动通过 new 关键字来 new 一个 B 的对象出来使用 IoC 思想的开发方式:不通过 new 关键字来创建对象,而是通过 IoC 容器(Spring 框架) 来帮助我们实例化对象。我们需要哪个对象,直接从 IoC 容器里面去取即可。原创 2024-12-18 18:20:29 · 451 阅读 · 0 评论 -
技术总监:公司不在乎你干了多少活!
大Leader最大的优势其实是势能,也是我们所谓的影响力,因为影响力,很多你拿不到的资源我拿得到,你做不了的跨部门协作我能做。最后,资源在公司里面是可交换的货币,用于你与其他团队的“利益”交换工具,你要善用资源,赚取利益回来,带大家吃肉;Leader感到很委屈,他的逻辑是,我虽然投了大量的精力支持这个同学,但作为管理者,兜底不是应该的吗!换个方式说,你有没有安全感这个事情公司是不关注的,就算是你天天加班,如果项目失败了,还是得背锅。在这个场景下,总监如果不顾大局,天天去跟一线Leader抢活干,这是一种。原创 2024-10-23 14:18:15 · 514 阅读 · 0 评论 -
本系列是《10万字208道Java经典面试题总结(附答案)》的2024修订版。
机器语言是一种指令集的体系,是最早出现的计算机语言。机器语言从属于硬件设备。不同的计算机设备有不同的机器语言.所以机器语言是一种面向机器的语言。计算机指令系统中的指令是由“0”和“1”两种符号组成的代码,并且能被机器直接理解执行,它们被称为机器指令。一个计算机的机器指令的集,就构成了该计算机的机器语言,即计算机可以直接接受、理解的语言。机器语言能利用机器指令精准地描述算法、且编程质量高、所占存储空间小,执行速度快。但是这种程序直观性很差,容易出错,阅读检查和修改调试非常困难。原创 2024-11-07 19:14:57 · 170 阅读 · 0 评论 -
Java学习步骤及路线(超详细)
在 Java 学习这条路上也踩过无数次的坑,恰巧有小伙伴问我 Java 学习的路线,我想着趁这次机会分享自己学 Java 的路线,希望给小伙伴们一点帮助,避开路上的一些坑,一起进大厂。其中,像 JSP 这样比较老的技术,目前在各大互联网公司基本不再使用,已经被 Freemark、Thymeleaf 这样的模板引擎所替代,我们只需要了解基本使用即可。除此之外,如果要深入学习MySQL的使用和原理,可以看极客时间的专栏《MySQL实战45讲》,阿里资深技术专家讲解的课程,有很多生产经常遇到的问题,非常有深度。原创 2024-10-21 10:06:20 · 338 阅读 · 0 评论 -
Java设计模式:策略Strategy模式,以电影票折扣策略为例
多态:多态,是面向对象的程序设计语言最核心的特征。多态,意味着一个对象有着多重特征,能够在特定的情况下。表现不同的状态,从而相应着不同的属性和方法。通俗的说,同一操作作用于不同的对象,能够有不同的解释,产生不同的执行结果。在执行时,能够通过指向基类的指针,来调用实现派生类中的方法。/** * 折扣策略。 * * @author zhangfly * */public interface DiscountStrategy { public double getDiscountPrice(.原创 2022-02-28 19:39:00 · 1312 阅读 · 0 评论 -
Java从天气网爬取历史天气数据
private static String URL = "http://lishi.tianqi.com"; private static String BaseURL = "http://www.tianqi.com"; public static Map<String,Object> getWeather(String city){ Map<String,Object> map = new HashMap<>(); ...原创 2022-01-24 09:25:49 · 948 阅读 · 2 评论 -
解决ThreadLocal在线程池中被重复使用的问题
什么会出现上面的情况呢,明明是第二个查询设置了PageHelper.startPage,但是为什么会影响第一个查询呢. 如果看过PageHelper.startPage源码的小伙伴就会知道PageHelper.startPage的底层是使用ThreadLocal进行实现的,分页参数只会在当前的线程有效. 这么说好像没啥问题对吧.但是我们的web服务器tomcat其实是使用的线程池去接收浏览器的请求的,那么在线程池中线程是复用的.而我们之前设置了PageHelper.startPage的线程也会随着当前任务结原创 2022-06-01 17:35:45 · 1311 阅读 · 0 评论 -
技巧集:nginx作代理时,查看请求被转发到哪台服务器
使用Nginx代理多台服务器实行负载的时候,如何查看某一个请求被转发到哪台服务器上呢?pstream demo {server 127.0.0.1:8781;server 127.0.0.1:8087;} server { listen 80; server_name demo.testcas.com; #charset koi8-r; #access_log logs/host.access.log mai原创 2022-04-21 16:36:11 · 4110 阅读 · 0 评论 -
mybatis xml注释sql 的注意事项
说明:在mybatis 的sql里不是不能写注释,而是注释不能有#{},mybatis仍旧会把#{}算成一个带注入的参数如代码段2所示,mysql数据库更换为oracle数据库时,#{date}需要明确jdbcType,而该代码段中仅将适用于mysql的sql注释,依旧会报同样的错,最好是将注释的sql删除。注意事项1、where语句等用到大于小于等符号时候,需要使用 <![CDATA[ > ]]>或者 <![CDATA[ < ]]>进行识别。2、如果sql文中有原创 2022-04-22 16:26:40 · 2095 阅读 · 0 评论
分享