Java集合篇之深入解析ArrayList,这六问你答的上来吗?
写在开头
开年第一篇,先祝各位新的一年身体健康,学业有成,事业有成哈,春节期间就是咔咔乱吃,咔咔乱玩,把学习都抛一边子去了,已经9天没有学习了,深深的懊悔,从今天开始,2024年的学习正式开启,一起给我猛冲!!!
书接上回,我们开启了Java集合部分的学习,今天我们就来看一下List,其中它的...[2024/2/18]
Java集合篇之深入解析LinkedList
写在开头
作为ArrayList的同门师兄弟,LinkedList的师门地位逊色不少,除了在做算法题的时候我们会用到它之外,在实际的开发工作中我们极少使用它,就连它的创造者都说:“I wrote it,and I never use it”,想想颇有点好笑,但这并不影响我们去学习它,个人认为它底...[2024/2/18]
深入浅出Java多线程(八):volatile
引言
大家好,我是你们的老伙计秀才!今天带来的是[深入浅出Java多线程]系列的第八篇内容:volatile。大家觉得有用请点赞,喜欢请关注!秀才在此谢过大家了!!!
在当今的软件开发领域,多线程编程已经成为提高系统性能和响应速度的重要手段。Java作为广泛应用的多线程支持语言,其内存模型(...[2024/2/7]
Java锁到底是个什么东西
一、java锁存在的必要性
要认识java锁,就必须对2个前置概念有一个深刻的理解:多线程和共享资源。
对于程序来说,数据就是资源。
在单个线程操作数据时,或快或慢不存在什么问题,一个人你爱干什么干什么。
多个线程操作各自操作不同的数据,各干各的,也不存在什么问题。
多个线程对共享数据进...[2024/2/7]
解决缓存与数据库同步下的同步锁问题之分段锁
契子
在实际业务会我们会使用第三方的缓存例如:Reids、Memcache等;但是,并且我们在查询使用缓存时都得尽可能的保证缓存的一致性,在读取时得保证尽可能的保证缓存拿到的是数据库的最新数据,那么在实现的逻辑上一般都为这样:
1、请求线程先读取缓存实现
2、如果缓存没有数据的话触发读取数据...[2024/2/5]
【进阶篇】Java 实际开发中积累的几个小技巧(一)【进阶篇】Java 实际开发中积累的几个小技巧(一)
目录前言一、枚举类的注解二、RESTful 接口三、类属性转换四、Stream 流五、判空和断言5.1判空部分5.2断言部分文章小结
前言
笔者目前从事一线 Java 开发今年是第 3 个年头了,从 0-1的 SaaS、PaaS 的项目做过,多租户下定制化开发项目也做过,项目的 PM 也做过...[2024/2/5]
服了,一个ThreadLocal被问出了花服了,一个ThreadLocal被问出了花
分享是最有效的学习方式。
博客:https: blog.ktdaddy.com/
故事
地铁上,小帅无力地倚靠着杆子,脑子里尽是刚才面试官的夺命连环问,“用过ThreadLocal么?ThreadLocal是如何解决共享变量访问的安全性的呢?你觉得啥场景下会用到ThreadLocal? ...[2024/2/5]
Collectors.toMap的暗坑与避免方式
使用Java的stream中的Collectors可以很方便地做容器间的转换,可以少写很多代码。但是其中有暗含的坑需要注意和避免,本文探讨Collectors.toMap(JDK8版本)。
Collectors.toMap可以将一个流转化成Map,常见于需要将List转换成Map以便于进一步操...[2024/2/5]
Java并发(二十三)----同步模式之保护性暂停
1、定义
即 Guarded Suspension,用在一个线程等待另一个线程的执行结果
要点
有一个结果需要从一个线程传递到另一个线程,让他们关联同一个 GuardedObject
如果有结果不断从一个线程到另一个线程那么可以使用消息队列
JDK 中,join 的实现、Fu...[2024/2/5]
【踩坑指南】线程池使用不当的五个坑
线程池是 Java 多线程编程中的一个重要概念,它可以有效地管理和复用线程资源,提高系统的性能和稳定性。但是线程池的使用也有一些注意事项和常见的错误,如果不小心,就可能会导致一些严重的问题,比如内存泄漏、死锁、性能下降等。
本文将介绍线程池使用不当的五个坑,以及如何避免和解决它们,大纲如下,
...[2024/2/5]
HanLP — 词性标注HanLP — 词性标注
目录词性的用处词性标注词性标注模型联合模型流水线式词性标注语料库与标注集序列标注模型应用于词性标注自定义词性朴素实现标注语料总结
词性(Part-Of-Speech,POS)指的是单词的语法分类,也称为词类。同一个类别的词语具有相似的语法性质
所有词性的集合称为词性标注集。
词性的用处...[2024/2/2]
线程池参数千万不要这样设置,坑得我整篇文章都写错了,要注意!
你好呀,我是歪歪。
先给大家道个歉:
上周不是发布了这篇文章嘛:《三个烂怂八股文,变成两个场景题,打得我一脸懵逼。》
其中第一个关于线程池的场景,经过读者提醒可能有问题,我又一次用尽浑身解数分析了一波,发现之前确实分析的不对。
这个案例真的是再一次深入的刷新了我对于线程池运行过程的认知...[2024/2/2]
深入浅出Java多线程(五):线程间通信
引言
大家好,我是你们的老伙计秀才!今天带来的是[深入浅出Java多线程]系列的第五篇内容:线程间通信。大家觉得有用请点赞,喜欢请关注!秀才在此谢过大家了!!!
在现代编程实践中,多线程技术是提高程序并发性能、优化系统资源利用率的关键手段。Java作为主流的多线程支持语言,不仅提供了丰富的A...[2024/2/2]
java线程池实现多任务并发执行
Java线程池实现多任务并发执行
1?? 创建一些任务来落地多任务并发执行
每一个数组里面的数据可以看成任务,或者是需要并发的业务接口,
数组与数组之间,可以看作为他们之间有血缘关系,简单来说就是:
taskJksj里面的10个任务执行完之后,才可以执行taskJxdx里面的4个任务,执行完tas...[2024/2/2]
深入剖析Java中的反射,由浅入深,层层剥离!
写在开头
之前更新了不少Java的基础知识,比如Java的类、对象、基础类型、关键字、序列化、泛型、值传递等等,今天要上点深度了,来聊一聊Java中的 反射 !
所谓反射,就是在运行时分析、检查和操作类、接口、方法、属性的行为!
简单感受一下反射
在开始详解反射之前,我们先通过一段代码,...[2024/2/2]
每日一道Java面试题:说一说Java中的异常每日一道Java面试题:说一说Java中的异常
写在开头
任何一个程序都无法保证100%的正常运行,程序发生故障的场景,我们称之为:异常,在Java中对于异常的处理有一套完善的体系,今天我们就来一起学习一下。
老样子,用一段简单的代码开始今天的学习。
我:“小二,上代码!”
JavaBuild君:“好嘞!几位爷,里面请~”
【...[2024/2/2]
Gin 框架之jwt 介绍与基本使用
目录一.JWT 介绍二.JWT认证与se ion认证的区别2.1 基于se ion认证流程图2.2 基于jwt认证流程图三. JWT 的构成3.1 header : 头部3.2 payload : 负载3.2.1 标准中注册的声明 (建议但不强制使用)3.2.2 公共的声明3.2.3 私有的声明...[2024/1/29]
给你一颗“定心丸”——记一次由线上事故引发的Log4j2日志异步打印优化分析给你一颗“定心丸”——记一次由线上事故引发的Log4j2日志异步打印优化分析
一、内容提要
自知是人外有人,天外有天,相信对于Log4j2的异步日志打印早有老师或者同学已是熟稔于心,优化配置更是信手拈来,为了防止我在这里啰里八嗦的班门弄斧,我先将谜底在此公布:log4j2.asyncQueueFullPolicy=Discard & log4j2.discardT...[2024/1/29]
每日一道Java面试题:方法重载与方法重写,这把指定让你明明白白!
写在开头
请聊一聊Java中方法的重写和重载?
这个问题应该是各大厂面试时问的最多的话题之一了,它们几乎贯穿了我们日常的开发工作,在过往的博客中我们多多少少都提到过重载与重写,而今天我们就一起来详细的学习一下这二者的功能与区别!
重载与重写的定义
重写: 类实现接口或者子类继承父类时,保...[2024/1/26]
【南大静态代码分析】作业 4:类层次结构分析与过程间常量传播
作业 4:类层次结构分析与过程间常量传播
实现类层次结构分析(CHA)
dispatch :根据方法调用者的类和方法签名寻找目标方法。
比较显然,是个递归算法。
递归的终止条件有两个,一个是如果一直找不到相应方法,不断递归到父类,最后递归到 Object 在向上递归就是 null ,O...[2024/1/24]
Java开发者的Python快速进修指南:探索15种独特的Python特殊方法
概述
在Python中,特殊方法(也称为魔术方法)是由Python解释器自动调用的,我们不需要手动调用它们,而是使用内置函数来间接地使用它们。举个例子,我们可以实现特殊方法__len__(),然后通过使用内置函数len()来获取对象的长度。同样地,一些特殊方法的调用是隐式的,比如在使用for循环...[2024/1/24]
一文搞清楚Java中的方法、常量、变量、参数
写在开头
在上一篇文章:一文搞清楚Java中的包、类、接口
中我们讲了Java中的包、类和接口,今天继续将剩下的方法、常量、变量以及参数梳理完。
Java中的变量与常量
在JVM的运转中,承载的是数据,而数据的一种变现形式就是“量”,量分为:常量与变量,我们在数学和物理学中已经接触过变量的概...[2024/1/22]
一文搞清楚Java中的包、类、接口一文搞清楚Java中的包、类、接口
写在开头
包、类、接口、方法、变量、参数、代码块,这些都是构成Java程序的核心部分,即便最简单的一段代码里都至少要包含里面的三四个内容,这两天花点时间梳理了一下,理解又深刻了几分。
Java中的包
Java 定义了一种名字空间,称之为包:package。一个类总是属于某个包,类名(比如Per...[2024/1/22]
Java开发者的Golang进修指南:从0->1带你实现协程池
在Java编程中,为了降低开销和优化程序的效率,我们常常使用线程池来管理线程的创建和销毁,并尽量复用已创建的对象。这样做不仅可以提高程序的运行效率,还能减少垃圾回收器对对象的回收次数。
在Golang中,我们知道协程(goroutine)由于其体积小且效率高,在高并发场景中扮演着重要的角色。然...[2024/1/22]
简单介绍JDK、JRE、JVM三者区别
简单介绍JDK vs JRE vs JVM三者区别
文编|JavaBuild
哈喽,大家好呀!我是JavaBuild,以后可以喊我鸟哥,嘿嘿!俺滴座右铭是不在沉默中爆发,就在沉默中灭亡,一起加油学习,珍惜现在来之不易的学习时光,等工作之后,你就会发现,想学习真的需要挤时间,厚积薄发啦!
...[2024/1/10]
为什么Java中“1000==1000”为false,而”100==100“为true?
在日常编程中,我们经常遇到一些看似简单却隐藏着复杂逻辑的问题。
比如,你是否想过为什么在 Java 中表达式1000==1000会返回 false,而 100==100 却返回 true 呢?
Integer a = 100;
Integer b = 100;
System.out.prin...[2024/1/10]
Java 新技术:虚拟线程使用指南(二)Java 新技术:虚拟线程使用指南(二)
虚拟线程是在 Java 21 版本中实现的一种轻量级线程。它由 JVM 进行创建以及管理。虚拟线程和传统线程(我们称之为平台线程)之间的主要区别在于,我们可以轻松地在一个 Java 程序中运行大量、甚至数百万个虚拟线程。
由于虚拟线程的数量众多,也就赋予了 Java 程序强大的力量。虚拟线程适...[2024/1/10]
JavaScript apply、call、bind 函数详解JavaScript apply、call、bind 函数详解
apply和call
apply和call非常类似,都是用于改变函数中this的指向,只是传入的参数不同,等于间接调用一个函数,也等于将这个函数绑定到一个指定的对象上:
let name = ''window''
function getName(param1, param2) {
co...[2024/1/10]
2024年,在风云际会的编程世界里,窥探Java的前世今生,都说它穷途末路,我认为是柳暗花明!
2024年,在风云际会的编程世界里,窥探Java的前世今生,都说它穷途末路,我认为是柳暗花明!
文编|JavaBuild
哈喽,大家好呀!我是JavaBuild,以后可以喊我鸟哥,嘿嘿!俺滴座右铭是不在沉默中爆发,就在沉默中灭亡,一起加油学习,珍惜现在来之不易的学习时光,等工作之后,你就会发...[2024/1/10]
ActiveMQ RCE CVE-2023-46604分析
一、漏洞触发点
org.apache.activemq.openwire.v12包下BaseDataStreamMarshaller类的createThrowable方法。
package org.apache.activemq.openwire.v12;
BaseDataStreamMars...[2024/1/10]
面试官喜欢问Nacos原理?直接把这篇文章甩给他!
大家好,我是三友~~
今天就应某位小伙伴的要求,来讲一讲Nacos作为服务注册中心底层的实现原理
不知你是否跟我一样,在使用Nacos时有以下几点疑问:
临时实例和永久实例是什么?有什么区别?服务实例是如何注册到服务端的?服务实例和服务端之间是如何保活的?服务订阅是如何实现的?集群间数据是...[2024/1/5]
Kernel Memory 入门系列:异步管道
Kernel Memory 入门系列:异步管道
前面所介绍的处理流程都是基于同步管道的,即文档导入的时候,会等到文档处理完成之后才会返回。
但是在实际的应用中,文档很多,而且文档的处理时间也不确定,如果采用同步的方式,那么就会导致整个流程的处理时间过长,也会导致整个流程的阻塞。因此,我们需要一...[2024/1/3]
Java注解,看完就会用
一、什么是注解
定义:注解(Annotation),也叫元数据。一种代码级别的说明。
它是JDK1.5及以后版本引入的一个特性,与类、接口、枚举是在同一个层次。
它可以声明在包、类、字段、方法、局部变量、方法参数等的前面,用来对这些元素进行说明,注释。
二、内置注解
@Override: ...[2024/1/2]
基于源码去理解Iterator迭代器的Fail-Fast与Fail-Safe机制
原创/朱季谦
在Java编程当中,Iterator迭代器是一种用于遍历如List、Set、Map等集合的工具。这类集合部分存在线程安全的问题,例如ArrayList,若在多线程环境下,迭代遍历过程中存在其他线程对这类集合进行修改的话,就可能导致不一致或者修改异常问题,因此,针对这种情况,迭...[2023/12/29]
Java线程池ThreadPoolExecutor源码解析
Java线程池ThreadPoolExecutor源码解析
1.ThreadPoolExecutor的构造实现
以jdk8为准,常说线程池有七大参数,通常而言,有四个参数是比较重要的
public ThreadPoolExecutor(int corePoolSize,
...[2023/12/27]
创建一个双模式跨运行时的 JavaScript 包
本文将指导你发布双模式、跨运行时的 JavaScript 包。了解如何创建与 ESM 和 CommonJS 以及 Node.js、Deno 和浏览器等不同运行时兼容的库。
随着 JavaScript 开发的不断发展,人们越来越需要能在多种环境中运行的强大依赖包。在本文中,我们将探讨如何发布跨运...[2023/12/27]
反向 Debug 了解一下?揭秘 Java DEBUG 的基本原理反向 Debug 了解一下?揭秘 Java DEBUG 的基本原理
Debug 的时候,都遇到过手速太快,直接跳过了自己想调试的方法、代码的时候吧……
一旦跳过,可能就得重新执行一遍,准备数据、重新启动可能几分钟就过去了。
好在IDE 们都很强大,还给你后悔的机会,可以直接删除某个 Stack Frame,直接返回到之前的状态,确切的说是返回到之前的某个...[2023/12/26]
Java并发(二十一)----wait notify介绍
1、小故事 - 为什么需要 wait
由于条件不满足(没烟干不了活啊,等小M把烟送过来),小南不能继续进行计算
但小南如果一直占用着锁,其它人就得一直阻塞,效率太低
于是老王单开了一间休息室(调用 wait 方法),让小南到休息室(WaitSet)等着去了,但这时锁释放开...[2023/12/26]
jextract的使用jextract的使用
写这个博客的目的:新人去看jextract的官网是看不懂的,就算看懂了也不会使用,一头雾水,我会从0开始教如何使用,如何搭配java去调用c函数。
首先我们得了解jextract是什么,官网的解释是一种从本机库头文件机械地生成 Java 绑定的工具。该工具利用 clang C API 来解析与...[2023/12/22]
Java8函数式编程应用
我们经常提到,Java8是革命性的一个版本,原因就是正式引入了函数式编程,那Java的函数式编程在实际应用中到底有什么用呢?结合实际的应用,我整理出了函数式在Java的几个经典用途。
缓求值
惰性求值(Lazy evaluation)是在需要时才进...[2023/12/22]
为啥不建议用BeanUtils.copyProperties拷贝数据
在实际的业务开发中,我们经常会碰到VO、BO、PO、DTO等对象属性之间的赋值,当属性较多的时候我们使用get,set的方式进行赋值的工作量相对较大,因此很多人会选择使用spring提供的拷贝工具BeanUtils的copyProperties方法完成对象之间属性的拷贝。通过这种方式可以很大程度...[2023/12/22]
如何 使 Java、C# md5 加密的值保持一致
Java C# md5 加密值保持一致,一般是编码不一致造成的值不同
JAVA (加密:123456)
C#(加密:123456)
UTF-8
e10adc3949ba59abbe56e057f20f883e
UTF8
e10adc3949ba59abbe56e057f20f8...[2023/12/22]
必知必会Java命令-jps必知必会Java命令-jps
你好,我是阿光。
最近想着把工作中使用过的java命令都梳理一下,方便日后查阅。虽然这类文章很多,但自己梳理总结后,还是会有一些新的收获。这也是这篇笔记的由来。
今天先聊聊 jps 命令。
命令概述?
jps命令是JDK提供的一个工具,用于查看目标系统上的Java进程基本信息(进程ID, ...[2023/12/11]
聊聊数据库连接池 Druid
在 Spring Boot 项目中,数据库连接池已经成为标配,然而,我曾经遇到过不少连接池异常导致业务错误的事故。很多经验丰富的工程师也可能不小心在这方面出现问题。
在这篇文章中,我们将探讨数据库连接池,深入解析其实现机制,以便更好地理解和规避潜在的风险。
1 为什么需要连接池
假如没有...[2023/12/11]
Java并发(十七)----变量的线程安全分析
1、成员变量和静态变量是否线程安全
如果它们没有共享,则线程安全
如果它们被共享了,根据它们的状态是否能够改变,又分两种情况
如果只有读操作,则线程安全
如果有读写操作,则这段代码是临界区,需要考虑线程安全
2、局部变量是否线程安全
局部变量是...[2023/12/11]
Prometheus+Grafana 监控平台实践-搭建&常用服务监控&告警
前言
Prometheus 是一个开放性的监控解决方案,通过各种 Exporter 采集当前主机/服务的数据,和 Grafana 相结合可以实现强大的监控和可视化功能
本篇将分享使用 docker compose 构建 Prometheus+Grafana,并监控之前文章所搭建的主机&...[2023/12/8]
Java开发者的Python快速进修指南:实战之跳表pro版本
之前我们讲解了简易版的跳表,我希望你能亲自动手实现一个更完善的跳表,同时也可以尝试实现其他数据结构,例如动态数组或哈希表等。通过实践,我们能够发现自己在哪些方面还有所欠缺。这些方法只有在熟练掌握之后才会真正理解,就像我在编写代码的过程中,难免会忘记一些方法或如何声明属性等等。
我不太愿意写一些...[2023/12/8]
这下对阿里java这几条规范有更深理解了
背景
阿里java开发规范是阿里巴巴总结多年来的最佳编程实践,其中每一条规范都经过仔细打磨或踩坑而来,目的是为社区提供一份最佳编程规范,提升代码质量,减少bug。
这基本也是java业界都认可的开发规范,我们团队也是以此规范为基础,在结合实际情况,补充完善。最近在团队遇到的几个问题,加深了我对...[2023/12/5]
Java 21 官方速览:全面拥抱虚拟线程
前言
首先,感谢一下不少xdm私信关心我的身体状况,我也不是什么厉害的大佬,点开通知看到一堆私信还是蛮感动的。
近来有意大幅缩短了更新频率,增加了日常调养身体的时间,淋巴结确实变小了,睡眠也逐渐正常,每晚23:30-00:00之间就可以自然入睡,所以精神也好了许多。
上周感冒比较严重,这周才...[2023/12/1]
🔥🔥Java开发者的Python快速实战指南:探索向量数据库之文本搜索
前言
如果说Python是跟随我的步伐学习的话,我觉得我在日常开发方面已经没有太大的问题了。然而,由于我没有Python开发经验,我思考着应该写些什么内容。我回想起学习Java时的学习路线,直接操作数据库是其中一项重要内容,无论使用哪种编程语言,与数据库的交互都是不可避免的。然而,直接操作MyS...[2023/11/29]