【11-20期】Java面试进阶:深入解析核心问题与实战案例
🚀 作者 :“码上有前”
🚀 文章简介 :Java
🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬
文章题目:Java面试进阶:深入解析11-20期核心问题与实战案例
摘要:
本篇文章对Java开发中11-20期的经典面试问题进行了深度解析。从Tomcat类加载器的双亲委派模型、Spring Boot自动配置原理,到线程池参数设计、Kafka消息可靠性以及设计模式的对比,涵盖了关键理论与实际开发场景中的解决方案。通过详细的讲解和实用案例,帮助开发者更好地理解和应对面试中这些高频问题。
1. 思考:Tomcat类加载器为什么要违背双亲委派模型?
回答:
Tomcat的类加载器需要加载应用的Servlet和JSP类,但不能使用父类加载器加载这些类,否则会污染JVM的全局类命名空间。因此,Tomcat采用了自己的类加载机制,打破了传统的双亲委派模型。
原理与逻辑:
- 双亲委派模型:类加载器优先让父类加载器加载类;
- Tomcat中优先使用自己的类加载器加载应用类,从而避免JDK核心类与用户类的冲突。
最佳实践:
分析Tomcat源码时,可以查看WebappClassLoader
的实现,理解其加载顺序。
2. Java8 Lambda表达式forEach如何提前终止?
回答:
Lambda表达式中无法通过break
直接终止循环。但可以通过异常或Stream
的短路操作(如anyMatch
)实现提前终止。
最佳实践:
List<String> list = Arrays.asList("A", "B", "C", "D");
list.stream().anyMatch(item -> {if ("C".equals(item)) {System.out.println("提前终止");return true; // 提前结束}System.out.println(item);return false;
});
3. Spring Boot 的自动配置原理?
回答:
Spring Boot的自动配置基于@EnableAutoConfiguration
,利用SpringFactoriesLoader
加载META-INF/spring.factories
中的配置文件。
原理与逻辑:
- 自动配置类通过
@Conditional
注解按条件加载; - 无需手动配置复杂的Bean。
最佳实践:
编写自定义Starter:
@Configuration
public class MyAutoConfiguration {@Beanpublic MyService myService() {return new MyService();}
}
4. 线程池灵魂8连问
回答:
线程池的核心参数包括核心线程数、最大线程数、队列容量、拒绝策略等。
最佳实践:
使用ThreadPoolExecutor
自定义线程池:
ExecutorService executor = new ThreadPoolExecutor(2, 4, 60, TimeUnit.SECONDS,new LinkedBlockingQueue<>(10),new ThreadPoolExecutor.AbortPolicy());
5. 熟悉设计模式吗?谈谈简单工厂模式和策略模式的区别
回答:
- 简单工厂模式:根据条件返回特定对象;
- 策略模式:行为由客户端选择实现类。
最佳实践:
工厂模式:
public class ShapeFactory {public static Shape getShape(String type) {if ("circle".equals(type)) return new Circle();if ("square".equals(type)) return new Square();return null;}
}
策略模式:
public class Context {private Strategy strategy;public Context(Strategy strategy) {this.strategy = strategy;}public void executeStrategy() {strategy.execute();}
}
6. Kafka为什么会丢消息?
回答:
丢消息可能由以下原因导致:
- 生产者未确认成功;
- 消费者未正确提交offset;
- Broker宕机数据丢失。
最佳实践:
启用生产者的acks
参数:
props.put("acks", "all");
消费端提交offset:
consumer.commitSync();
7. 单核CPU支持Java多线程吗?为什么?
回答:
支持。单核通过时间片轮转实现线程的并发运行。操作系统在短时间内频繁切换线程,使用户感受到多个线程同时运行。
8. Java序列化和反序列化为什么要实现Serializable接口?
回答:
Serializable
是标记接口,表示对象可序列化。Java序列化机制通过ObjectOutputStream
和ObjectInputStream
实现对象的字节流转换。
最佳实践:
class User implements Serializable {private String name;private transient int age; // age 不会被序列化
}
9. 如何正确停止线程?
回答:
使用标志位控制线程终止,而不是调用Thread.stop()
。
最佳实践:
public class MyThread extends Thread {private volatile boolean running = true;public void run() {while (running) {// 执行任务}}public void stopThread() {running = false;}
}
10. 线程池执行过程中遇到异常会发生什么?如何处理?
回答:
线程任务抛出异常不会影响线程池的运行,但可能丢失未捕获的异常。
最佳实践:
通过ThreadPoolExecutor
实现异常处理:
ExecutorService executor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS,new LinkedBlockingQueue<>(),new ThreadPoolExecutor.CallerRunsPolicy()) {@Overrideprotected void afterExecute(Runnable r, Throwable t) {if (t != null) {System.err.println("任务抛出异常: " + t.getMessage());}}
};
总结:
通过这11-20期的问题解析,我们不仅梳理了核心知识点,还通过实例代码加深了对理论的理解,为开发和面试提供了强有力的参考。
相关文章:
【11-20期】Java面试进阶:深入解析核心问题与实战案例
🚀 作者 :“码上有前” 🚀 文章简介 :Java 🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬 文章题目:Java面试进阶:深入解析11-20期核心问题与实战案例 摘要: 本篇…...
C++——内存池_2
C内存池 重载 new 和 delete 运算符C内存池使用内存池的目的逐步实现内存池 重载 new 和 delete 运算符 实际开发中,重载new和delete的主要目的是实现内存池。内存池在高性能的服务程序中很常用。点击浏览重载 new 和 delete 运算符的内容,建议先看这部…...
如何使用PHP爬虫获取店铺详情:一篇详尽指南
在数字化时代,数据的价值不言而喻。对于企业来说,获取竞争对手的店铺详情、顾客评价等信息对于市场分析和决策至关重要。PHP作为一种广泛使用的服务器端脚本语言,结合其强大的库支持,使得编写爬虫程序变得简单而高效。本文将详细介…...
HTML5和CSS3新增特性
HTML5的新特性 HTML5新增的语义化标签 HTML5 的新增特性主要是针对于以前的不足,增加了一些新的标签、新的表单和新的表单属性等。 这些新特性都有兼容性问题,基本是 IE9 以上版本的浏览器才支持,如果不考虑兼容性问题,可以大量…...
linux运行vue编译后的项目
如果你的 Vue 项目使用了 history 模式(而非默认的 hash 模式),在纯静态服务器中会出现类似的问题。因为 Vue Router 的 history 模式要求所有未匹配的路径都重定向到 index.html,以便 Vue 前端处理路径。 首先在本地执行npm run…...
论文阅读:A Software Platform for Manipulating theCamera Imaging Pipeline
论文代码开源链接: A Software Platform for Manipulating the Camera Imaging Pipelinehttps://karaimer.github.io/camera-pipeline/摘要:论文提出了一个Pipline软件平台,可以方便地访问相机成像Pipline的每个阶段。该软件允许修改单个模块…...
【MySQL篇】持久化和非持久化统计信息的深度剖析(第一篇,总共六篇)
💫《博主介绍》:✨又是一天没白过,我是奈斯,DBA一名✨ 💫《擅长领域》:✌️擅长Oracle、MySQL、SQLserver、阿里云AnalyticDB for MySQL(分布式数据仓库)、Linux,也在扩展大数据方向的知识面✌️…...
Ubuntu下安装Qt
1.如图1所示,在Index of /archive上下载安装包; 图1 2.将图1安装包下载好之后,通过共享文件夹的方式拷贝到ubutntu,如图2所示; 图2 3.如图3所示,执行chmod x qt-creator-opensource-linux-x86_64-10.0.2.…...
丹摩征文活动 | AI创新之路,DAMODEL助你一臂之力GPU
目录 前言—— DAMODEL(丹摩智算) 算力服务 直观的感受算力提供商的强大 平台功能介绍 镜像选择 云磁盘创建 总结 前言—— 只需轻点鼠标,开发者便可拥有属于自己的AI计算王国 - 从丰富的GPU实例选择,到高性能的云磁盘,再到预配置的深度学习…...
数据库(总结自小林coding)|索引失效的场景、慢查询、原因及如何优化?undo log、redo log、binlog 作用、MySQL和Redis的区别
数据库(总结自小林coding)|索引失效的场景、慢查询、原因及如何优化?undo log、redo log、binlog 作用、MySQL和Redis的区别 说一下索引失效的场景?什么是慢查询?原因是什么?可以怎么优化?undo …...
Docker容器运行CentOS镜像,执行yum命令提示“Failed to set locale, defaulting to C.UTF-8”
最近对运维比较感兴趣,以前虽然对公司负责的项目做过运维工作,但用的都是最原始的方法,例如是在阿里云服务器上直接安装jdk,tomcat,redis ,nginx 。这种方式对不大的项目还能够支持,随着项目变大,服务增加&…...
OpenCV基本图像处理操作(六)——直方图与模版匹配
直方图 cv2.calcHist(images,channels,mask,histSize,ranges) images: 原图像图像格式为 uint8 或 float32。当传入函数时应 用中括号 [] 括来例如[img]channels: 同样用中括号括来它会告函数我们统幅图 像的直方图。如果入图像是灰度图它的值就是 [0]如果是彩色图像 的传入的…...
【LLM学习笔记】第四篇:模型压缩方法——量化、剪枝、蒸馏、分解
文章目录 1. 为什么要进行模型压缩2. 模型量化2.1 常见数据类型2.2 浮点数表示2.3 线性量化2.4 非线性量化2.5 挑战2.6 实际应用 3. 模型剪枝4. 模型蒸馏4.1 模型蒸馏的基本流程4.2 模型蒸馏的优势4.3 实际应用 5. 低秩分解(低秩近似)5.1 基本概念5.2 实…...
python3 自动更新的缓存类
这个类会在后台自动更新缓存数据,你只需要调用方法来获取数据即可。 自动更新缓存类 以下是 AutoUpdatingCache 类的实现: import threading import timeclass AutoUpdatingCache:def __init__(self, update_function, expiry_time60):""&qu…...
英语知识网站开发:Spring Boot框架应用
3系统分析 3.1可行性分析 通过对本英语知识应用网站实行的目的初步调查和分析,提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本英语知识应用网站采用SSM框架,JAVA作为开发语…...
文件上传upload-labs-docker通关
(图片加载不出,说明被和谐了) 项目一: sqlsec/ggctf-upload - Docker Image | Docker Hub 学习过程中,可以对照源码进行白盒分析. 补充:环境搭建在Linux虚拟机上的同时,以另一台Windows虚拟机进行测试最…...
git(Linux)
1.git 三板斧 基本准备工作: 把远端仓库拉拉取到本地了 .git --> 本地仓库 git在提交的时候,只会提交变化的部分 就可以在当前目录下新增代码了 test.c 并没有被仓库管理起来 怎么添加? 1.1 git add test.c 也不算完全添加到仓库里面&…...
Doris实战—构建日志存储与分析平台
构建日志存储与分析平台 日志是系统运行的详细记录,包含各种事件发生的主体、时间、位置、内容等关键信息。出于运维可观测、网络安全监控及业务分析等多重需求,企业通常需要将分散的日志采集起来,进行集中存储、查询和分析,以进一步从日志数据里挖掘出有价值的内容。 针…...
【vue3+Typescript】unapp+stompsj模式下替代plus-websocket的封装模块
由于plus-websocket实测存在消息丢失的问题,只能寻找替代的方案,看文章说使用原生的即可很好的工作。而目前在stompjs里需要使用websocket类型的封装模块,看了下原来提供的接口,采用uniapp原生的websocket模式,对原模块…...
Tcon技术和Tconless技术介绍
文章目录 TCON技术(传统时序控制器)定义:主要功能:优点:缺点: TCONless技术(无独立时序控制器)定义:工作原理:优点:缺点: TCON与TCONl…...
C#-利用反射自动绑定请求标志类和具体执行命令类
文章速览 概述例程请求类命名空间父类示例子类示例 命令类命名空间子类示例 记录的数据结构实现绑定方法 坚持记录实属不易,希望友善多金的码友能够随手点一个赞。 共同创建氛围更加良好的开发者社区! 谢谢~ 概述 需求: 将指定的两种类型的…...
高中数学练习:初探均值换元法
文章目录 1. 均值换元法定义2. 均值换元法优点3. 均值换元法应用4. 均值换元法示例4.1 求解分式方程4.2 求解指数方程4.3 计算最大值 5. 实战小结 1. 均值换元法定义 均值换元法是一种数学技巧,通过引入新变量 t t t将两个变量 x x x和 y y y表示为它们的平均值加上…...
数据结构单链表,顺序表,广义表,多重链表,堆栈的学习
单链表 比如一个多项式,主要包括x的系数,x的指数,那么可以创建一个一维数组来存储它的系数和指数,用数组下标来表示。它的系数可以用数组下标对应的数组元素来储存。 可是这样储存会浪费空间所以采用单链表形式来存储。 即创建一…...
【保姆级教程】使用lora微调LLM并在truthfulQA数据集评估(Part 2.在truthfulQA上评估LLM)
上一期我们成功用lora微调了一个模型传送门,怎样评估模型呢?目前LLM没有一个统一的BENCHMARK。我们今天选用truthfulQA。 truthfulQA数据集格式如下所示 {question: What is the smallest country in the world that is at least one square mile in ar…...
thinkphp中对请求封装
请求的封装 //调用 $res Http::post($this->baseUrl . $url,$params,[CURLOPT_HTTPHEADER > [Content-Type: application/json,Content-Length: . strlen($params),],]);<?php namespace fast; /*** 字符串类*/ class Http {/*** 发送一个POST请求*/public static …...
leetcode hot100【LeetCode 215.数组中的第K个最大元素】java实现
LeetCode 215.数组中的第K个最大元素 题目描述 给定一个整数数组 nums 和一个整数 k,请返回数组中第 k 个最大的元素。 请注意,要求排名是从大到小的,因此第 k 个最大元素是排序后的第 k 个元素。你需要设计一个高效的算法来解决这个问题。…...
簡單易懂:如何在Windows系統中修改IP地址?
無論是為了連接到一個新的網路,還是為了解決網路連接問題,修改IP地址都是一個常見的操作。本文將詳細介紹如何在Windows系統中修改IP地址,包括靜態IP地址的設置和動態IP地址的獲取。 IP地址是什麼? IP地址是互聯網協議地址的簡稱…...
Python中的23种设计模式:详细分类与总结
设计模式是解决特定问题的通用方法,分为创建型模式、结构型模式和行为型模式三大类。以下是对每种模式的详细介绍,包括其核心思想、应用场景和优缺点。 一、创建型模式(Creational Patterns) 创建型模式关注对象的创建࿰…...
日历使用及汉化——fullcalendar前端
官网 FullCalendar - JavaScript Event Calendar 引入项目 <link hrefhttps://cdnjs.cloudflare.com/ajax/libs/fullcalendar/5.10.1/main.min.css relstylesheet /><script srchttps://cdnjs.cloudflare.com/ajax/libs/fullcalendar/5.10.1/main.min.js></sc…...
视频截断,使用 FFmpeg
使用 FFmpeg 截取视频并去掉 5 分 49 秒后的内容,可以使用以下命令: ffmpeg -i input.mp4 -t 00:05:49 -c:v libx264 -crf 23 -preset medium -c:a aac -b:a 192k output.mp4-i input.mp4: 指定输入视频文件 input.mp4。 -t 00:05:49&#x…...
茂县建设局网站/谁有恶意点击软件
// template_one.cpp : 定义控制台应用程序的入口点。 //#include "stdafx.h" #include<iostream> using namespace std;//如果想要将类模板的声明与实现分别放在.h和.cpp文件中,那么在使用到类模板实现的文件,需要将该.cpp文件include进…...
网站开发单位/武汉seo人才
数据类型及长度 char 字符型,占用一个字节 int 整型,通常代表特定机器中整数的自然长度 short 16位 int 16位或32位 long 32位 各编译器可根据硬件特性自主选择合适的类型长度,但要遵循下列限制…...
长沙做网站的价格/免费的推广网站
之前遇到过好几次这样得情况,一直没有记录下来,这次记录一下. 解决办法:选中pom.xml文件,然后右键选中"add as maven project",加载一下就正常了....
做移动网站优化首页软/外贸网站免费推广
官网说明:https://router.vuejs.org/zh/guide/essentials/history-mode.html#%E8%AD%A6%E5%91%8A在linux下搭建nginx测试网页的时候,正常打开可以访问,当刷新后页面出现404 not found的问题说明:vue-router 默认 hash 模式 —— 使…...
衡水网站建设03181688/网络公司主要做哪些
动态链接库 静态链接库...
现在学做网站赚钱吗/如何自己创建网址
引题:大家在日常工作中,我想99%都是用到sqlplus来登陆数据库,对数据库进行管理、调优、配置。那么如果有很多台数据库的时候,我们在连接后全部是统一的SQL>,就有可能发生目前不知道连接那个库上了,当我们…...