
Java基础
文章平均质量分 90
程序员徐述
公号:程序员徐述
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
重生之我在操作系统当线程
作为操作系统的最小调度单元,我的一生是资源争夺与秩序构建的缩影。“每一次上下文切换,都是效率与公平的权衡;每一把锁的争夺,都是安全与性能的博弈;每一次内存访问,都是速度与一致性的较量。从诞生到消亡,我在并发的洪流中挣扎求生,也在混沌的世界中寻找秩序。线程的世界,正如人类社会一般复杂而微妙,唯有不断学习与进化,才能在这场永不停息的竞争中立于不败之地。作者:徐述公众号:程序员徐述关注我,一起探索程序员的奇妙世界!原创 2025-03-07 09:00:00 · 584 阅读 · 0 评论 -
一行CompletableFuture代码引发的P0级事故!
这次事故,源于一段暗藏风险的代码。高并发下,默认线程池不堪重负,引发连锁反应,致使系统瘫痪。线程池配置失当:直接沿用默认参数,未结合业务负载、服务器性能调校,高并发场景易过载。异常处理缺位:捕获异常后不记录、不上报,还遗漏异步任务异常捕获,问题排查困难。并发安全失控:共享变量操作未加锁,使用非线程安全集合类,高并发下数据错乱。任务依赖混乱:不规划任务启动顺序,也不考虑依赖失败策略,一处出错就全盘皆输。线上无小事,生产环境中要注意:默认配置是魔鬼,高并发下没有侥幸!原创 2025-03-02 22:24:44 · 748 阅读 · 0 评论 -
并发工具类库加持,线程安全真的万无一失?
综上,希望今天这篇文章对你帮助!原创 2025-02-27 09:00:00 · 917 阅读 · 0 评论 -
美团面试题:线上线程池的参数,到底如何设置?
我监控:实时采集线程池的运行状态。策略:根据监控数据定义调整策略。调优:结合压测和调优,找到最佳参数组合。自动化:实现自动化调整,提高响应速度。面试官(点头):不错,思路很清晰,看来你对这个问题理解得挺透彻。准备明天就来入职吧。最后,我最近弄了一个Java技术交流群,讨论面试、后端等领域知识,如果你感兴趣,加我微信备注加群,我拉你入群哈~(我的微信号:shawne11)目前已经有近 100 人加入。如果你已经在群里,请忽略~综上,希望今天这篇文章对你帮助!原创 2025-02-23 22:06:43 · 907 阅读 · 0 评论 -
面试被问线程两次 start,我直接尬住了
通过前面的分析,相信大家已经明白了:start() 方法只能调用一次。如果尝试调用两次,程序会抛出 IllegalThreadStateException 异常。这是因为线程的生命周期是单向的,从创建(NEW)到运行(RUNNABLE),再到终止(TERMINATED)。一旦线程开始执行,它的状态会逐步推进,最终结束,无法回退。如果你觉得这篇文章对你有帮助,欢迎关注我的公众号【程序员徐述】,回复“666”,获取更多关于面试题汇总。希望大家都能在技术道路上越走越远,面试顺利!原创 2025-02-20 22:50:42 · 310 阅读 · 0 评论 -
面试必考题:核心线程不被回收,你真的会答吗?
核心线程的“保命”机制默认情况下,allowCoreThreadTimeOut 为 false,核心线程的 timed 为 false。核心线程会调用 workQueue.take(),一直阻塞等待任务,而不会被回收。核心线程的回收条件如果显式设置 allowCoreThreadTimeOut 为 true,核心线程会调用 workQueue.poll,在超时后退出。另外,如果线程池关闭,核心线程也会退出。死循环的作用:让线程持续获取任务,并动态响应线程池状态变化。原创 2025-02-19 22:02:48 · 725 阅读 · 0 评论 -
面试必考题:线程池创建后,里面到底有没有线程?
问:线程池创建后,里面到底有没有线程?线程池创建时,内部并没有线程。线程是按需创建的,只有在任务提交时才会根据核心线程数、任务队列和最大线程数的配置来创建线程。问:如何让线程池创建后就有线程?如果希望线程池创建后就有线程,可以使用或预热核心线程。线程池的设计非常精妙,理解其背后的原理,才能更好地使用它。希望这篇文章能帮你彻底搞懂线程池的初始化过程,下次面试再遇到这个问题,就可以自信地回答了!如果你觉得这篇文章对你有帮助,欢迎关注我的公众号【程序员徐述】,回复“666”,获取更多关于面试题汇总。原创 2025-02-15 17:33:38 · 300 阅读 · 0 评论 -
线程池创建陷阱:为什么阿里禁止使用Executors?
Executors 的工厂方法虽然方便,但隐藏了线程池的核心参数和配置,容易导致资源耗尽、拒绝策略不灵活、难以监控和调优等问题。相比之下,直接使用 ThreadPoolExecutor 构造函数创建线程池,可以更精细地控制线程池的行为,更好地适应实际业务需求。原创 2025-02-12 21:51:33 · 970 阅读 · 0 评论 -
黄子韬点赞数为何变负?揭秘抖音 Bug 真相
其实背后是一个经典的计算机问题——Integer 溢出。Integer 溢出就是当一个整数超过了计算机能表示的最大或最小范围时,结果就会“回绕”到相反的极端,比如最大值加一会变成最小值。-2^31,即;2^31 - 1,即2147483647。超过最大值时,循环到最小值。小于最小值时,循环到最大值。// 最大值 2147483647// 溢出,结果变为 -2147483648当达到2147483647后,再多一个赞,数值就会变成,从正数直接跳到负数。这也提醒我们,原创 2025-01-13 09:00:00 · 978 阅读 · 0 评论 -
Java程序死锁问题定位与解决
一定是发生在并发中;互不相让:当两个(或更多)线程(或进程)相互持有对方所要的资源,又不主动释放,导致程序陷入无尽的阻塞,这就是死锁。死锁特点:两个或多个线程(进程)相互等待对方释放资源,导致所有线程都无法继续执行。解决方法:避免一个线程持有多个资源的情况,或使用超时机制,如果一个线程在一定时间内没能获得锁,就放弃等待。活锁特点:线程仍然在运行,但由于不断地响应对方,始终没有实际进展。解决方法:为避免活锁,可以设置超时机制,或者使用协调机制来避免线程之间过度的反应。饥饿。原创 2024-11-26 19:57:06 · 1151 阅读 · 0 评论 -
NPE:三目运算符导致空指针问题
我们都知道,Java中并没有指针,所谓的【Java指针】实际上指的是 Java 中的引用。空指针就是指向空的引用。当引用为空时,如果尝试调用它所指向对象的成员变量或方法,就会抛出空指针异常。成员变量和方法是属于对象的(排除静态成员),它们只有在对象存在时才能被访问。空指针并不指向任何对象,因此它没有对应的成员变量和方法。当通过空指针尝试访问这些属性或方法时,就会导致空指针异常。原创 2024-11-16 10:13:11 · 892 阅读 · 0 评论 -
JavaAgent 技术原理及实战
利用 javassist 对 Log 框架进行切面增强。利用 Spring 的拦截器技术实现了 Web 请求的 traceId 初始赋值。通过整合 dubbo SPI,结合 dubbox 调用拦截器,实现 traceId 的拦截及赋值。引入TransmittableThreadLocal 解决父子线程上下文传递的问题。原创 2024-03-31 18:06:11 · 1873 阅读 · 0 评论 -
揭秘Java switch语句中的case穿透现象
在开始揭秘case穿透现象之前,我们先简单回顾一下switch语句的基本用法。switch语句用于根据变量的不同取值执行相应的代码块。// 执行代码块1break;// 执行代码块2break;...default:// 默认代码块switch case支持的6种数据类型:switch 表达式后面的数据类型只支持byte、short、int整形类型、字符类型char、枚举类型和java.lang.String类型。根据expression的值,程序会跳转到对应的case。原创 2023-10-29 12:55:47 · 1509 阅读 · 0 评论 -
一文彻底弄懂ConcurrentHashMap
一文彻底弄懂ConcurrentHashMap原创 2022-10-06 10:05:00 · 7057 阅读 · 1 评论 -
HashMap 硬核 10 连问
HashMap 10 连问原创 2022-10-03 21:36:49 · 774 阅读 · 0 评论 -
一文弄懂 HashMap 中的位运算
位运算的奇淫技巧原创 2022-10-03 20:59:42 · 1705 阅读 · 1 评论 -
深入剖析 HashMap
深入理解 HashMap。原创 2022-10-03 20:32:57 · 858 阅读 · 0 评论 -
Java 并发之 AQS 详解(下)
Java 并发之 AQS 详解原创 2022-09-04 20:56:07 · 556 阅读 · 0 评论 -
Java 并发之 AQS 详解(上)
Java 并发之 AQS 详解原创 2022-09-04 19:58:07 · 697 阅读 · 0 评论 -
Java 线程池实现原理及实战
ThreadPoolExecutor万字详解原创 2022-08-07 17:45:23 · 841 阅读 · 0 评论 -
一文读懂JVM架构解析
JVM 架构解析Java 架构JVMJVM是如何工作的?类加载器子系统运行时数据区执行引擎每个 Java 开发人员都知道字节码经由 JRE(Java运行时环境)执行。但他们或许不知道 JRE 其实是由 Java虚拟机(JVM)实现,JVM分析字节码,解释并执行它。作为开发人员,了解 JVM 的架构是非常重要的,因为它使我们能够编写出更高效的代码。本文中,我们将深入了解 Java 中的 JVM 架构和 JVM 的各个组件。首先我们介绍一下 JDK、JRE 以及 JVM 之间的关系。Java 架构J原创 2022-04-16 23:48:53 · 2285 阅读 · 1 评论 -
面试官:谈谈你对 Java 平台的理解
谈谈你对 Java 平台的理解参考回答知识点面向对象平台无关性JVM类加载机制垃圾回收异常处理面试的时候,经常会有面试官问:请你谈谈对 Java 平台的理解,「Java 是解释执行」,这句话正确吗?其实这个问题,问得有点笼统。题目本身是非常开放的,往往考察的是多个方面,比如,基础知识理解是否很清楚;是否掌握 Java 平台主要模块和运行原理等。个人认为,回答这类开放性问题的思路,可以从宏观的角度出发,从浅入深,由点到面。总的来说可以从如下几个方面来回答:面向对象:封装、继承、多态;平台无关性:原创 2022-04-10 11:19:20 · 1338 阅读 · 0 评论 -
[Java高级](二)泛型
JAVA 泛型中的通配符 T,E,K,V,?1、前言2、泛型带来的好处3、泛型中通配符3.1、? 无界通配符3.2、上界通配符 < ? extends E>3.3、下界通配符 < ? super E>3.4、? 和 T 的区别3.5、Class 和 Class<?> 区别1、前言Java 泛型(generics)是 JDK 5 中引入的一个新特性,泛型提供了...转载 2019-09-02 21:35:03 · 360 阅读 · 0 评论 -
[Java高级](五)【Java8新特性】lambda表达式与函数式接口
lambda表达式详解1、Java8新特性1.1、lambda表达式基本语法语法简化常用示例示例1:方法引用示例2:构造方法的引用示例3:lambda 表达式创建线程示例4:遍历集合示例5:删除集合中的某个元素示例6:集合内元素的排序闭包问题1、Java8新特性Java8于2014年发布,相比于Java7,Java8新增了非常多的特性,如lambda表达式、函数式接口、方法引用、默认方法、新工具(编译工具)、Stream API、Date Time API、Optional等。1.1、lambda表达转载 2021-07-07 10:43:46 · 236 阅读 · 0 评论 -
[Java高级](三)时间复杂度计算
正值疫情,家中闭关,早起看新闻确诊人数已过万,不禁唏嘘,在此真切希望长风破浪会有时,直挂云帆济沧海。感激奋斗在一线的医护人员。时间复杂度1、概念2、各时间复杂度介绍2.1、O(1)2.2、O(logn)、O(nlogn)对数阶时间复杂度2.3、O(m+n)、O(m*n)2.3.1加法法则2.3.2 乘法法则2.3.3 循环不仅与n有关,还与执行循环所满足的判断条件有关。1、概念时间复杂度是指...转载 2020-02-01 10:37:32 · 819 阅读 · 2 评论 -
[Java高级](一)IO输入输出
字节流和字符流(输入流和输出流)1、什么是流2、字节流2.1、字节输入流3、字符流1、什么是流流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作。根据处理数据类型的不同分为:字符流和字节流;根据数据流向不同分为:输入流和输出流。输入流是相对程序而言的,外部传入数据...原创 2019-08-29 20:32:47 · 241 阅读 · 0 评论 -
[Java高级](四)Filter和Interceptor
Filter和Interceptor1、过滤器(Filter)1.1、Filter的三种实现方式1.1.1、无路径无顺序@Component1.1.2、有路径无顺序@WebFilter+@ServletComponentScan1.1.3、有路径有顺序@Configuration1.2、Filter各方法的作用2、过滤器(Interceptor)2.1、code2.2、方法及作用2、Filter和Interceptor区别1、过滤器(Filter)Filter也称之为过滤器,它是Servlet技术中最实原创 2021-01-10 21:37:04 · 304 阅读 · 0 评论 -
[java基础-数据结构] ArrayList其他方法解析
/** *返回此列表中的元素数。 */ public int size() { return size; } /** * 如果此列表不包含元素,则返回 true 。 */ public boolean isEmpty() { //注意=和==的区别 return size == 0; } /** * 如果此列表包含指定的元素,则返回true 。 ...转载 2021-02-03 22:51:56 · 161 阅读 · 0 评论 -
[java基础-数据结构] List集合
List集合1、ArrayList核心源码分析2、ArrayList扩容机制3、常见问题3.1、Arraylist 与 LinkedList 区别?3.2、ArrayList 与 Vector 区别呢?为什么要用Arraylist取代Vector呢?List 集合是线性数据结构的主要实现,集合元素通常存在明确的上一个和下一个元素,也存在明确的第一个元素和最后一个元素。List 集合的遍历结果是稳定的。该体系最常用的是ArrayList和LinkedList两个集合类。ArrayList是容量可以改变的非转载 2021-01-26 22:32:49 · 424 阅读 · 0 评论 -
[java基础] 04 - 深入理解HashMap
深入理解HashMap底层原理剖析-JDK1.81、HashMap 存储结构1、HashMap 存储结构``HashMap 根据键的 hashCode 值存储数据,大多数情况下可以直接定位到它的值,因而具有很快的访问速度,但遍历顺序却是不确定的。 HashMap 最多只允许一条记录的键为 null ,允许多条记录的值为 null 。HashMap 非线程安全,即任一时刻可以有多个线程同时写 ...转载 2019-11-28 11:31:06 · 273 阅读 · 0 评论 -
[java基础] 03-final关键字
final 在 Java 中是一个保留的关键字,可以声明变量、方法、类。转自:腾讯面试,我竟然输给了final关键字1、什么是final变量 / 类 / 方法?任何变量前被 final 修饰就是 final 变量,定义的类前被 final 修饰就是 final 类,任何方法前被 final 修饰就是final方法。当用 final 修饰一个类时,表明这个类不能被继承。如下图箭头指向的地方,...转载 2019-03-13 17:09:53 · 221 阅读 · 0 评论 -
java基础02-静态代码块的执行方式和顺序
转自:静态代码块的执行方式和顺序1、静态代码块格式static{ 执行语句}特点:随着类的加载而执行,且只执行一次,并优先于主函数。用于给类初始化的。2、执行顺序:示例一静态代码块随着类加载而加载有多个静态代码块的,按代码块前后顺序加载一个代码块,只执行一次。class StaticCode1{ static{ ...转载 2019-03-13 16:34:44 · 201 阅读 · 0 评论 -
java基础01-String为什么不可变
String为什么不可变什么是不可变对象?区分对象和对象的引用为什么String对象是不可变的?什么是不可变对象?众所周知, 在Java中, String类是不可变的。那么到底什么是不可变的对象呢? 可以这样认为:如果一个对象,在它创建完成之后,不能再改变它的状态,那么这个对象就是不可变的。不能改变状态的意思是,不能改变对象内的成员变量,包括基本数据类型的值不能改变,引用类型的变量不能指向其他...转载 2019-03-13 15:27:46 · 223 阅读 · 0 评论