面试官:小伙子,能聊明白JMM给你SSP!我:嘚吧嘚吧一万字,直接征服面试官!面试官:小伙子,能聊明白JMM给你SSP!我:嘚吧嘚吧一万字,直接征服面试官!
写在开头
面试官:小伙子,JMM了解吗?
我:JMM(Java Memory Model),Java内存模型呀,学过的!
面试官:那能给我详细的聊一聊吗,越详细越好!
我:嗯~,确定越详细越好?起码得说一万字,您有时间听完?
面试官:你要是真能说一万字全是干货的话,我当场拍板要你,给你S...[2024/3/18]
走进volatile的世界,探索它与可见性,有序性,原子性之间的爱恨情仇!
写在开头
在之前的几篇博文中,我们都提到了 volatile 关键字,这个单词中文释义为:不稳定的,易挥发的,在Java中代表变量修饰符,用来修饰会被不同线程访问和修改的变量,对于方法,代码块,方法参数,局部变量以及实例常量,类常量多不能进行修饰。
自JDK1.5之后,官网对volatile进...[2024/3/18]
工作中最常见的6种OOM问题工作中最常见的6种OOM问题
前言
最近我写的几篇线上问题相关的文章:《糟糕,CPU100%了》《如何防止被恶意刷接口》《我调用第三方接口遇到的13大坑》发表之后,在全网广受好评。
今天接着线上问题这个话题,跟大家一起聊聊线上服务出现OOM问题的6种场景,希望对你会有所帮助。
1 堆内存OOM
堆内存OOM是最常见的...[2024/3/18]
不要升级!不要升级!MacOS 14.4 引发Java 应用崩溃
如果最近您收到了MacOS 14.4的升级提醒,那么建议你暂时先不要升级!
在x上,Java开发领域的一些大v们,也发现了这个问题,并提醒大家不要升级。
根据Java官方发布的文章了解到,该问题主要是由于macOS上运行的进程可能会访问受保护内存区域中的内存。在 macOS 14...[2024/3/18]
多线程系列(二十一) -ForkJoin使用详解多线程系列(二十一) -ForkJoin使用详解
一、摘要
从 JDK 1.7 开始,引入了一种新的 Fork/Join 线程池框架,它可以把一个大任务拆成多个小任务并行执行,最后汇总执行结果。
比如当前要计算一个数组的和,最简单的办法就是用一个循环在一个线程中完成,但是当数组特别大的时候,这种执行效率比较差,例如下面的示例代码。
long...[2024/3/18]
还在用Calendar操作Date?Java8都弃用了,还不知道它的这款强大的工具吗?
引言
在过去的Java版本中,日期和时间的处理主要依赖于java.util.Date和java.util.Calendar类,然而随着业务系统的复杂以及技术层面的提升,这些传统的日期时间类暴露出了若干显著的不足之处。随着Java8的发布,其引入了一套全新的日期时间API,彻底改变了我们处理日期和...[2024/3/18]
风控规则引擎(一):Java 动态脚本
风控规则引擎(一):Java 动态脚本
日常场景
共享单车会根据微信分或者芝麻分来判断是否交押金
汽车租赁公司也会根据微信分或者芝麻分来判断是否交押金
在一些外卖 APP 都会提供根据你的信用等级来发放贷款产品
金融 APP 中会根据很复杂规则来判断用户是否有借款资格,以及贷款金额。
在简单...[2024/3/15]
JVM内存结构
我们都知道,我们写的Java程序需要先经过编译,生成了.cla 文件(字节码文件)。然而,计算机并不能直接解释.cla 文件里面的内容,这时候就需要一个能加载、解释.cla 文件并且能按.cla 文件里的内容进行处理的一个东西--JVM。
JVM,就是Java虚拟机。它是一种规范,有针对不...[2024/3/15]
netty Recycler对象池
前言
池化思想在实际开发中有很多应用,指的是针对一些创建成本高,创建频繁的对象,用完不弃,将其缓存在对象池子里,下次使用时优先从池子里获取,如果获取到则可以直接使用,以此降低创建对象的开销。
我们最熟悉的数据库连接池就是一种池化思想的应用,数据库操作是非常频繁的,数据库连接的创建、销毁开销很大...[2024/3/15]
在Java中如何优雅的停止一个线程?可别再用Thread.stop()了!
写在开头
经过上几篇博文的学习,我们知道在Java中可以通过new Thread().start()创建一个线程,那今天我们就来思考另外一个问题:线程的终止
自然终止有两种情况:
1. 线程的任务执行完成;
2. 线程在执行任务过程中发生异常。
start之后,如果线程没有走到终止状...[2024/3/15]
缓存把我坑惨了..
故事
春天,办公室外的世界总是让人神往的,小猫带着耳机,托着腮帮,望着外面美好的春光神游着...
一声不和谐的座机电话声打破这份本该属于小猫的宁静,“hi,小猫,线上有个客户想购买A产品规格的商品,投诉说下单总是失败,帮忙看一下啥原因。”客服部小姐姐甜美的声音从电话那头传来。“哦哦,好,我看一...[2024/3/15]
面试官:说说反射的底层实现原理?
反射是 Java 面试中必问的面试题,但只有很少人能真正的理解“反射”并讲明白反射,更别说能说清楚它的底层实现原理了。所以本文就通过大白话的方式来系统的讲解一下反射,希望大家看完之后能真正的理解并掌握“反射”这项技术。
1.什么是反射?
反射在程序运行期间动态获取类和操纵类的一种技术。通过...[2024/3/15]
一张图搞清楚wait、sleep、join、yield四者区别,面试官直接被征服!
写在开头
在线程的生命周期中,不同状态之间切换时,可以通过调用sleep()、wait()、join()、yield()等方法进行线程状态控制,针对这一部分知识点,面试官们也会做做文章,比如问你这些方法的作用以及之间的区别。
那么今天我们就一起来总结一下这几个方法的作用及区别,先画一个思维导图...[2024/3/15]
深入浅出Java多线程(十一):AQS
引言
大家好,我是你们的老伙计秀才!今天带来的是[深入浅出Java多线程]系列的第十一篇内容:AQS(AbstractQueuedSynchronizer)。大家觉得有用请点赞,喜欢请关注!秀才在此谢过大家了!!!
在现代多核CPU环境中,多线程编程已成为提升系统性能和并发处理能力的关键手段...[2024/3/13]
多线程系列(十八) -AQS原理浅析多线程系列(十八) -AQS原理浅析
一、摘要
在之前的文章中,我们介绍了 ReentrantLock、ReadWriteLock、CountDownLatch、CyclicBarrier、Semaphore、ThreadPoolExecutor 等并发工具类的使用方式,它们在请求共享资源的时候,都能实现线程同步的效果。
在使用方...[2024/3/13]
面试准备不充分,被Java守护线程干懵了,面试官主打一个东西没用但你得会
写在开头
面试官:小伙子请聊一聊Java中的精灵线程?
我:什么?精灵线程?啥时候精灵线程?
面试官:精灵线程没听过?那守护线程呢?
我:守护线程知道,就是为普通线程服务的线程嘛。
面试官:没了?守护线程的特点,怎么使用,需要注意啥,Java中经典的守护线程都有啥?
我:不知道。。。 ...[2024/3/11]
Java面试必考题之线程的生命周期,结合源码,透彻讲解!
写在开头
在前面的几篇博客里,我们学习了Java的多线程,包括线程的作用、创建方式、重要性等,那么今天我们就要正式踏入线程,去学习更加深层次的知识点了。
第一个需要学的就是线程的生命周期,也可以将之理解为线程的几种状态,以及互相之间的切换,这几乎是Java多线程的面试必考题,每一年都有大量的同...[2024/3/11]
Java 程序员第一次运行 Python 项目,使用 python-pptx 提取 ppt 中的文字和图片Java 程序员第一次运行 Python 项目,使用 python-pptx 提取 ppt 中的文字和图片
人工智能时代,最需要学习的编程语言是:python 。笔者是个 python 小白,昨天花了两个小时,第一次成功运行起来 python 项目 。
项目是 powerpoint-extractor ,可以将 ppt 文件中的图片提取出来,并输出到固定的目录。
1 安装 python 环境
...[2024/3/11]
『Java 语法基础』面向对象有哪些特性
面向对象编程(OOP) 是一个将现实世界抽象为一系列对象的编程范式,这些对象通过消息传递机制来互相交流和协作。
OOP 的主要特性包括四个基本概念:封装(Encapsulation)、继承(Inheritance)、多态(Polymorphism)以及抽象(Abstraction)。
封装...[2024/3/11]
JavaScript 最新动态:2024 年新功能
前言
随着 Web 技术的日新月异,JavaScript 也在不断地吸收新的特性和技术,以满足日益复杂和多样化的开发需求。在 2024 年,JavaScript 迎来了一系列令人瞩目的新功能,这些功能不仅提升了开发者的效率,也极大地丰富了 Web 应用的表现力和交互性。
在接下来的内容中,我们...[2024/3/7]
面试官让说出8种创建线程的方式,我只说了4种,然后挂了。。。
写在开头
昨天有个小伙伴私信说自己面试挂在了“Java有几种创建线程的方式”上,我问他怎么回答的,他说自己有背过八股文,回答了:继承Thread类、实现Runnable接口、实现Callable接口、使用线程池这四种,但是面试官让说出8种创建方式,他没说出来,面试就挂了,面试官给的理由是:只关注...[2024/3/7]
Java开发者的Python快速进修指南:掌握T检验
前言
T检验是一种用于比较两个独立样本均值差异的统计方法。它通过计算T值和P值来判断样本之间是否存在显著性差异。通常情况下,我们会有两组数据,例如一组实验组和一组对照组。
T检验的原假设是两组样本的均值相等,备假设是两组样本的均值不相等。T检验会计算一个T值,表示两组样本均值之间的差异。同时,...[2024/3/7]
这波操作看麻了!十亿行数据,从71s到1.7s的优化之路。
你好呀,我是歪歪。
春节期间关注到了一个关于 Java 方面的比赛,很有意思。由于是开源的,我把项目拉下来试图学(白)习(嫖)别人的做题思路,在这期间一度让我产生了一个自我怀疑:
他们写的 Java 和我会的 Java 是同一个 Java 吗?
不能让我一个人怀疑,所以这篇文章我打算带...[2024/3/7]
多线程系列(十三) -一文带你搞懂阻塞队列
一、摘要
在之前的文章中,我们介绍了生产者和消费者模型的最基本实现思路,相信大家对它已经有一个初步的认识。
在 Java 的并发包里面还有一个非常重要的接口:BlockingQueue。
BlockingQueue是一个阻塞队列,更为准确的解释是:BlockingQueue是一个基于阻塞机制...[2024/3/7]
开源短信项目 platform-sms 发布了新版本 0.5.0
Github : https: github.com/makemyownlife/platform-sms
短信服务 platform-sms 0.5.0 发布 ,新的版本做了非常多的优化和改进。
1、支持发送任意时间延时短信;
2、优化三方渠道适配器加载逻辑;
3、支持 Do...[2024/3/7]
上来就对标 20k Star 的开源项目,是自不量力还是后起之秀?
先来一段紧箍咒:nvm、fvm、gvm、sdkman、fnm、n、g、rvm、jenv、phpbrew、rustup、swiftenv、pyenv、rbenv...
这些都是用来解决编程语言多版本管理的工具,如果你是个程序员肯定认识或是用过几个,但是刚接触编程的小白,就会有些挠头了。
啥...[2024/3/7]
一次生产环境OOM排查
一、背景
前几天下午飞书告警群里报起了java.lang.OutOfMemoryError: unable to create new native thread告警,看见后艾特了对应的项目负责人但是负责人说没时间,无奈自己亲自上阵。
二、事情经过
2.1 问题排查
从报错信息就可以看出是服务...[2024/3/4]
HashMap很美好,但线程不安全怎么办?ConcurrentHashMap告诉你答案!HashMap很美好,但线程不安全怎么办?ConcurrentHashMap告诉你答案!
写在开头
在《耗时2天,写完HashMap》这篇文章中,我们提到关于HashMap线程不安全的问题,主要存在如下3点风险:
风险1: put的时候导致元素丢失;如两个线程同时put,且key值相同的情况下,后一个线程put操作覆盖了前一个线程的操作,导致前一个线程的元素丢失。
风险2: p...[2024/3/4]
没想到,JDBC 驱动会偷偷修改 sql_mode 的会话值
最近碰到一个 case,值得分享一下。
现象就是一个 update 操作,在 mysql 客户端中执行提示 warning,但在 java 程序中执行却又报错。
问题重现
mysql> create table test.t1(id int&nb...[2024/3/4]
Java HashMap 详解
HashMap
HashMap 继承自 AbstractMap,实现了 Map 接口,基于哈希表实现,元素以键值对的方式存储,允许键和值为 null。因为 key 不允许重复,因此只能有一个键为 null。HashMap 不能保证放入元素的顺序,它是无序的,和放入的顺序并不相同。HashMap ...[2024/3/1]
亚古兽会升级,锁会吗?亚古兽会升级,锁会吗?
亚古兽会升级,锁会吗?
大家好,我是小高先生。在经过对锁的基础知识和对象头概念的学习之后,相信各位已经对锁机制有了初步的了解。在之前的文章中,我有提到过关于锁升级的概念。今天,我想和大家一起深入探讨一下什么是锁升级。借助于我们之前内容的积累,理解这一部分内容将会是轻而易举的。
锁优化背景
锁升...[2024/3/1]
都说了别用BeanUtils.copyProperties,这不翻车了吧
分享是最有效的学习方式。
博客:https: blog.ktdaddy.com/
故事
新年新气象,小猫也是踏上了新年新征程,自从小猫按照老猫给的建议【系统梳理大法】完完整整地梳理完毕系统之后,小猫对整个系统的把控可谓又是上到可一个新的高度。开工一周,事情还不是很多,寥寥几个需求,小猫分...[2024/2/28]
Java面向对象之接口和抽象类的区别一目了然
介绍
相信对于Java面向对象部分,很多人很长一段时间对于接口和抽象类的区别,使用场景都不是很熟悉,同是作为抽象层重要的对象,工作中到底什么情况下使用抽象类,不是很清楚。本文就一次性把这些概念一次性说清楚,不用再烦恼了,哈哈!
核心概念
接口与抽象类最明显的区别可能就是使用上的惯用方式...[2024/2/28]
【Filament】绘制圆形
1 前言
? Filament环境搭建中介绍了 Filament 的 Windows 和 Android 环境搭,绘制三角形中介绍了绘制纯色和彩色三角形,绘制矩形中介绍了绘制纯色和彩色矩形,本文将使用 Filament 绘制圆形。
2 绘制圆形
? 本文项目结构如下,完整代码资源 ...[2024/2/28]
教你如何判断Java代码中异步操作是否完成
本文分享自华为云社区《java代码实现异步返回结果如何判断异步执行完成》,作者: 皮牙子抓饭。
在许多应用程序中,我们经常使用异步操作来提高性能和响应度。在Java中,我们可以使用多线程或者异步任务来执行耗时操作,并且在后台处理过程完成后获取结果。但是,在使用异步操作时,我们通常需要知道异步任...[2024/2/26]
什么是数据同步利器DataX,如何使用?
转载至我的博客 https: www.infrastack.cn ,公众号:架构成长指南
今天给大家分享一个阿里开源的数据同步工具DataX,在Github拥有14.8k的star,非常受欢迎,官网地址:https: github.com/alibaba/DataX
什么是 Datax?
...[2024/2/26]
[技术选型与调研] 流程引擎(工作流引擎|BPM引擎):Activiti、Flowable、Camunda
1 概述:流程与流程引擎
低代码平台、办公自动化(OA)、BPM平台、工作流系统均需要【流程引擎】功能
BPM平台与工作流系统的区别,参见本文档:3.2 章节
流程引擎是任务分配软件(例如业务流程管理)的一项核心技术,其中,工作流引擎在参与者之间交流数据的同时将任务分配给不同的执行...[2024/2/23]
高并发时为什么推荐ReentrantLock而不是synchronized高并发时为什么推荐ReentrantLock而不是synchronized
目录1、最初的 synchronized2、synchronized 的优化3、但是,JAVA的最终答案 JDK 21 LTS 来了
1、最初的 synchronized
它默认对临界资源添加重量级锁,即使可能并不存在竞争,只要走到临界区通通给你加锁。
现在来回答问题:
1) 如果是低于...[2024/2/23]
面试官不按套路出牌,上来就让聊一聊Java中的迭代器(Iterator ),夺命连环问,怎么办?面试官不按套路出牌,上来就让聊一聊Java中的迭代器(Iterator ),夺命连环问,怎么办?
写在开头
某大厂的面试现场,一位目光深邃,头顶稀疏的中年面试官坐在椅子上,这时候的我走了进来。
面试官:“小伙子,学过Java中容器和数据结构了吧?”
我:“嗯,学了”
面试官:“ok,那你来聊一聊Java中的迭代器(Iterator ),要说清楚他们的应用场景哈”
我:“哦,好滴”
...[2024/2/23]
Java里使用AspectJ实现AOP
前言
已经正式从NET转型JAVA。今后开始多写一点JAVA相关的文章。
因为已经正式转Java了,所以,对于Java的一些判断,应该就比以前更准确了。总得来说,java有好的东西,有不好的东西,就语言本身和java的常用组件来讲,并不能判断,java比其他语言高一个档次,当然,也...[2024/2/23]
【libGDX】使用Mesh绘制三角形
1 Mesh 和 ShaderProgram 简介
1.1 创建 Mesh
? 1)Mesh 的构造方法
public Mesh(boolean isStatic, int maxVertices, int maxIndices, VertexAttribute... attribute...[2024/2/23]
多线程系列(三) -synchronized 关键字使用详解
一、简介
在之前的线程系列文章中,我们介绍了线程创建的几种方式以及常用的方法介绍。
今天我们接着聊聊多线程线程安全的问题,以及解决办法。
实际上,在多线程环境中,难免会出现多个线程对一个对象的实例变量进行同时访问和操作,如果编程处理不当,会产生脏读现象。
二、线程安全问题介绍
我们先来看一...[2024/2/21]
【解决方案】Java 互联网项目如何防止集合堆内存溢出(一)
目录前言一、代码优化1.1Stream 流自分页1.2数据库分页1.3其它思考二、硬件配置2.1云服务器配置三、文章小结
前言
OOM 几乎是笔者工作中遇到的线上 bug 中最常见的,一旦平时正常的页面在线上出现页面崩溃或者服务无法调用,查看服务器日志后你很可能会看到“Caused by: ...[2024/2/21]
Java 21 虚拟线程如何限流控制吞吐量
虚拟线程(Virtual Threads)是 Java 21 所有新特性中最为吸引人的内容,它可以大大来简化和增强Java应用的并发性。但是,随着这些变化而来的是如何最好地管理此吞吐量的问题。本文,就让我们看一下开发人员在使用虚拟线程时,应该如何管理吞吐量。
在大多数情况下,开发人员不需要自己...[2024/2/21]
Java集合篇之深度解析Queue,单端队列、双端队列、优先级队列、阻塞队列
写在开头
队列是Java中的一个集合接口,之前的文章已经讲解了List和Set,那么今天就来唠一唠它吧。队列的特点:存储的元素是有序的、可重复的。
队列的两大接口Queue vs Deque
Queue 是单端队列,只能从一端插入元素,另一端删除元素,实现上一般遵循 先进先出(FIFO) 规则...[2024/2/21]
提高Java开发生产力,我选Stream API,真香啊
Java 8 引入的Stream API提供了一种新的数据处理方式,它以声明式、函数式的编程模型,极大地简化了对集合、数组或其他支持数据源的操作。Stream可以被看作是一系列元素的流水线。允许你高效地对大量数据执行复杂的过滤、映射、排序、聚合等操作,而无需显式地使用循环或者临时变量。Strea...[2024/2/19]
多线程系列(二) -Thread类使用详解
一、简介
在之前的文章中,我们简单的介绍了线程诞生的意义和基本概念,采用多线程的编程方式,能充分利用 CPU 资源,显著的提升程序的执行效率。
其中java.lang.Thread是 Java 实现多线程编程最核心的类,学习Thread类中的方法,是学习多线程的第一步。
下面我们就一起来看看...[2024/2/19]
java实现幂等性校验
我们在做web应用的时候通常会遇到前端提交按钮重复点击的场景,在某些新增操作上就需要做幂等性限制来保证数据的可靠性。下面来用java aop实现幂等性校验。
一:首先我们需要一个自定义注解
package com.yuku.yuku_erp.annotation;
import java...[2024/2/19]
多线程系列(一) -线程技术入门知识讲解
一、简介
在很多场景下,我们经常听到采用多线程编程,能显著的提升程序的执行效率。例如执行大批量数据的插入操作,采用单线程编程进行插入可能需要 30 分钟,采用多线程编程进行插入可能只需要 5 分钟就够了。
既然多线程编程技术如此厉害,那什么是多线程呢?
在介绍多线程之前,我们还得先讲讲进程和...[2024/2/19]
Java集合篇之逐渐被遗忘的Stack,手写一个栈你会吗?
正月初九,开工大吉!
2024年,更上一层楼!
写在开头
其实在List的继承关系中,除了ArrayList和LinkedList之外,还有另外一个集合类stack(栈),它继承自vector,线程安全,先进后出,随着Java并发编程的发展,它在很多应用场景下被逐渐替代,成为了Java的遗落...[2024/2/19]