
Java 博文
文章平均质量分 80
分享记录以java为主的博客文章。
伊成
happy coding ...
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
JVM学习笔记
Java技术体系的自动内存管理,最根本的目标是自动化地解决两个问题:自动给对象分配内存以及自动回收分配给对象的内存。Java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,Java 世界里“几乎”所有的对象实例都在这里分配内存,但是随着技术发展,Java对象实例都分配在堆上也渐渐变得不是绝对的。在《Java虚拟机规范》中对Java堆的描述是:“所有 的对象实例以及数组都应当在堆上分配[1]”原创 2025-06-28 14:36:05 · 1068 阅读 · 0 评论 -
Java如何远程登录到服务器中执行命令
我们有时候通过业务代码会关联一些东西,那么在这个时候做完操作后有可能需要去其他服务器上执行一些命令,例如我们更换了什么文件,然后需要重启另一个服务,那么这个时候就需要我们去远程执行命令了。 有两种方式,我们可以使用jsch和ganymed来进行实现,两个包都是对SSH2的封装,能够帮助我们远程连接服务器,并且执行命令。 然后调用工具类即可。 首先新建工具类。原创 2025-06-27 09:24:50 · 255 阅读 · 0 评论 -
什么你还不知道 disruptor
我们将定义一个事件(Event),它将携带数据@Override为了让 Disruptor 为我们在内存中预分配这些事件,我们需要一个来执行构造。这可以是一个方法引用,比如@Override创建一个事件处理器(EventHandler)@Override// 有扩展性的写法@Slf4j// 外部可以传入Consumer实现类,每处理一条消息的时候,consumer的accept方法就会被执行一次> consumer;@Override。原创 2025-06-23 18:03:03 · 835 阅读 · 0 评论 -
【回顾基础知识】Collection集合
Collection集合是最上层的接口,是所有集合的父接口下面具体来看:**增**:add() 方法传入的数据类型必须是 Object,所以当写入基本数据类型的时候,会做自动装箱 auto-boxing 和自动拆箱 unboxing。还有另外一个方法 addAll(),可以把另一个集合里的元素加到此集合中。remove()是删除的指定元素。那和 addAll() 对应的,自然就有removeAll(),就是把集合 B 中的所有元素都删掉。原创 2025-06-20 15:00:28 · 584 阅读 · 0 评论 -
保姆级介绍NIO
在Java中,我们知道Java IO是阻塞的,如果在一次读写数据调用时数据还没有准备好,或者目前不可写,那么读写操作就会被阻塞直到数据准备好或目标可写为止。Java NIO则是非阻塞的,每一次数据读写调用都会立即返回,并将目前可读(或可写)的内容写入缓冲区或者从缓冲区中输出,即使当前没有可用数据,调用仍然会立即返回并且不对缓冲区做任何操作。NIO框架是在JDK1.4推出的,它的出现就是为了解决传统IO的不足,本文就将围绕着NIO开始讲解。一切的一切还要从缓冲区开始讲起,包括源码在内,其实这个不是很难,只是需原创 2025-06-20 14:43:23 · 367 阅读 · 0 评论 -
Log4j2 自定义 Appender 详解
在日志管理系统中,Appender 是日志记录组件,负责将日志事件输出到指定的目的地,如控制台、文件、数据库等。Log4j2 作为一款强大的日志框架,支持多种内置的 Appender。然而,在某些特定场景下,我们可能需要自定义 Appender 以满足特定的日志记录需求。本文将详细介绍如何在 Log4j2 中自定义 Appender,一起来看看吧。创建自定义 Appender 类首先,我们需要创建一个继承自 AbstractAppender 的自定义 Appender 类。原创 2025-06-19 10:12:35 · 326 阅读 · 0 评论 -
HashMap源码解读
jdk 1.7 中的 HashMap 采用的是的方式来进行数据的存储,。下面对各个源码中的各个核心方法进行对比。原创 2025-06-12 14:41:04 · 1474 阅读 · 0 评论 -
快速了解JVM的GC历史
Java虚拟机(JVM)的垃圾回收(GC)机制是Java生态系统的核心组件之一,直接影响应用程序的性能和稳定性。从早期的简单标记清除算法,到现代的分代收集、并发回收等复杂策略,GC技术经历了多次重大演进。了解JVM的GC历史不仅能帮助开发者优化应用性能,还能深入理解Java内存管理的设计哲学,本文将梳理JVM垃圾回收的发展历史。原创 2025-06-11 15:16:31 · 960 阅读 · 0 评论 -
如何创建一个不可变类
不可变对象在构造后无法更改,其状态不会被外部修改,特别适用于多线程环境,避免了并发修改的问题。创建不可变类的关键步骤包括:将类声明为final,所有字段为final,不提供setter方法,并在返回可变对象时返回其克隆副本。常见的不可变类包括Java的String和包装类如Integer等。尽管不可变类可能消耗更多内存,但其线程安全性和状态一致性使其在分布式系统中具有重要优势。通过合理设计,可以确保类完全不可变,避免状态泄漏。原创 2025-05-16 15:37:31 · 665 阅读 · 0 评论 -
深入理解final
Java中的final关键字用于修饰类、方法和变量,表示不可更改的特性。final变量一旦初始化后不能被重新赋值,常用于声明常量;final方法不能被子类重写,提高了性能;final类不能被继承,通常用于功能完整的类。使用final关键字的好处包括提高性能、线程安全以及优化代码。此外,final与static常结合使用来定义常量,并且在创建不可变类时也起到关键作用。final关键字在编译时进行静态绑定,减少了运行时的开销,是Java编程中重要的工具之一。原创 2025-05-16 13:26:09 · 936 阅读 · 0 评论 -
Java的进制转换
本文介绍了Java中不同进制的表示方法及其转换规则。Java中,二进制以0b开头,八进制以0开头,十六进制以0x开头,十进制则无前缀。文章详细说明了如何将二进制、八进制和十六进制转换为十进制,以及如何将十进制转换为其他进制。此外,还介绍了二进制与八进制、十六进制之间的转换方法,并简要提及了原码、反码和补码的概念。最后,解释了为什么在计算机科学中,十进制转换为二进制时通常会补全为8位或16位,以确保数据的一致性和处理效率。原创 2025-05-13 17:58:09 · 790 阅读 · 0 评论 -
一文彻底理解Spring AOP【理论篇】
AOP(Aspect-Oriented Programming), 即面向切面编程, 它与 OOP( Object-Oriented Programming, 面向对象编程) 相辅相成, 提供了与 OOP 不同的抽象软件结构的视角.在 OOP 中, 我们以类(class)作为我们的基本单元, 而 AOP 中的基本单元是Aspect(切面)当使用注解@Aspect@Component@Aspect。原创 2025-05-11 11:05:44 · 1232 阅读 · 0 评论 -
微信与支付宝退款接口常见问题解析与解决指南
在支付系统的开发中,退款功能是核心能力之一,但对接微信支付和支付宝时,开发者常因参数错误、环境配置等问题触发各种报错。本文结合两个典型场景——微信退款提示“订单号非法”与支付宝退款报错“交易不存在”,深入分析问题根源,提供解决方案及避坑指南。支付系统的退款接口报错往往源于参数错误、环境配置或订单状态异常。通过本文的案例分析,开发者可以掌握以下核心技巧:1.微信支付:校验订单号来源,优先使用商户订单号退款。2.支付宝:严格管理订单生命周期,区分测试与生产环境。原创 2025-03-19 16:33:28 · 1335 阅读 · 0 评论 -
Keytool常见问题全解析:从环境配置到公钥提取
掌握 keytool 的常见问题解决方案,不仅能提升开发效率,还能避免因证书管理不当导致的应用发布失败。如果你遇到其他问题,欢迎在评论区留言交流!原创 2025-03-13 17:35:21 · 1892 阅读 · 0 评论 -
带你彻底搞明白Java中for、foreach、stream到底谁更胜一筹?
在Java的发展历程中,随着版本的持续更新,为开发者提供了多种实现循环操作的方式。其中包括最为基础的传统for循环、语法更为简洁的增强型foreach循环,以及Java 8全新引入的Stream API。这几种循环方式各具特色,适用于不同的应用场景。接下来,我们将深入探讨它们各自的工作原理,并对其在效率方面的差异进行详细分析。综上所述,在实际的Java编程过程中,如果开发者追求极致的性能表现,并且处理的是相对简单的循环逻辑,那么传统的for循环和foreach循环无疑是更为合适的选择。原创 2025-01-21 09:22:03 · 1286 阅读 · 0 评论 -
@Inject和@Autowired以及@Resource区别
个人在使用上,更偏重使用@Inject,这是jsr330规范的实现,而@Autowired是spring的实现,如果不用spring一般用不上这个,而@Resource则是jsr250的实现,这是多年前的规范。The end.原创 2025-01-12 09:59:24 · 625 阅读 · 0 评论 -
Java中的动态代理
代理模式是常用的java设计模式,他的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类,以及事后处理消息等。代理类与委托类之间通常会存在关联关系,一个代理类的对象与一个委托类的对象关联,代理类的对象本身并不真正实现服务,而是通过调用委托类的对象的相关方法,来提供特定的服务。按照代理的创建时期,代理类可以分为两种。静态代理:由程序员创建或特定工具自动生成源代码,再对其编译。在程序运行前,代理类的.class文件就已经存在了。动态代理。原创 2025-01-05 14:04:05 · 698 阅读 · 0 评论 -
浅谈内存泄露
概念:不需要使用的对象,但是GC无法回收它。宽泛意义上的内存泄漏不良的操作导致对象生命周期变长Y的声明周期结束后, 由于X引用Y导致GC无法回收Y (如果A,B,C生命周期少于X也是同理)当大量内存泄漏,没有内存为新对象分配时发生内存溢出。原创 2025-01-01 13:32:20 · 1072 阅读 · 0 评论 -
Java中的语法糖,你知道的有多少?
语法糖在面试中是常问的一个知识点。了解 Java 中的语法糖原理及用法,帮助大家在学会如何使用 Java 语法糖的同时,了解这些语法糖背后的原理是非常有必要的。语法糖(Syntactic Sugar) 也称糖衣语法,是英国计算机学家 Peter.J.Landin 发明的一个术语,指在计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。简而言之,语法糖让程序更加简洁,有更高的可读性。(有意思的是,在编程领域,除了语法糖,还有语法盐和语法糖精的说法)原创 2024-12-31 18:29:57 · 1121 阅读 · 0 评论 -
多线程中的BlockingQueue你知道的有多少?
在新增的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题。通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便利。本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景。原创 2024-12-30 19:15:18 · 1899 阅读 · 0 评论 -
base64出现空格问题
但是呢,会出现一个问题,byte[] 用base64编码之后可能会出现一些 “+” 加号,使用自定义的 httpUtils 请求的时候,会把 “+” 变成空格。项目中有一个参数是 byte[],在构建 http请求的时候不便参数的传输,于是就想到了 使用base64进行编码之后当成字符串进行传输。或者,将将加密后的字符串替换为 “%2B”, 再将 “%2B"替换回 ‘+’ 号,replace(”%2B", “+”)将加密后的空格全部替换为 ‘+’ 号,replace(" ", “+”);原创 2024-12-29 13:25:21 · 593 阅读 · 0 评论 -
分享几个实用的 Git 技巧
可以这么说,Git在一定程度上拯救了很多开发者的饭碗。只要你经常使用Git保存自己的工作,你就一直有机会可以将代码退回到之前的状态,因此就可以挽回那些你深夜里迷迷糊糊犯下的错误。但是Git的命令行界面可是出了名的难掌握。接下来,就给大家介绍7个比较实用的小技巧,最大限度发挥Git的作用。通常,大部分时间我们都只会用到add、commit、branch和push/pull这些命令。大部分人熟悉这套只往一个方向运转的工作流。原创 2024-12-27 17:32:30 · 631 阅读 · 0 评论 -
Java中三大构建工具的发展历程(Ant、Maven和Gradle)
Maven作为后来者,继承了Ant的项目构建功能,并且提供了依赖关系,项目管理的功能,因此它是一个项目管理和综合工具, 其核心的依赖管理, 项目信息管理, 中央仓库,约定大于配置的核心功能使得Maven成为当前Java项目构建和管理工具的标准选择。Maven之前我们经常使用Ant来进行Java项目的构建,然后Ant仅是一个构建工具,它并未对项目的中的工程依赖以及项目本身进行管理,并且Ant作为构建工具未能消除软件构建的重复性,因为不同的项目需要编写对应的Ant任务。为了解决这个问题,Maven如约而至。原创 2024-12-26 09:22:30 · 1753 阅读 · 0 评论 -
对中文汉字排序的方法总结
在各个系统中,都随处可见根据某个字段进行升序(ASC)或降序(DESC)进行排序展示。但进行中文汉字排序和查找的时候,对中文汉字的排序和查找结果往往都是错误的。为了尽量提供全面的解决方法,本文会从各个层面出发告知有需要的人对应的解决方法。原创 2024-12-24 16:27:10 · 638 阅读 · 0 评论 -
JAVA服务器端发送邮件问题 Could not connect to SMTP host
在开发过程中,发送邮件经过本地测试是没有问题,部署到服务器上后,发送邮件一直报 Could not connect to SMTP host : smtp.yeah.net, port: 465。原创 2024-12-22 13:42:13 · 608 阅读 · 0 评论 -
Mac Book Air M3隐私和安全里没有“任何来源”的解决办法
网上资料说之前的版本在隐私和安全中都有三个选项的,在新版的Mac中则去掉了任何来源这个选项,有些时候是需要这个选项的,那如何开启,查询了一波资料很多都是老的资料和命令。原创 2024-12-15 13:21:14 · 2314 阅读 · 0 评论 -
一文带你完全理解在oracle中for update和for update nowait的区别
首先一点,如果只是select 的话,Oracle是不会加任何锁的,也就是Oracle对 select 读到的数据不会有任何限制,虽然这时候有可能另外一个进程正在修改表中的数据,并且修改的结果可能影响到你目前select语句的结果,但是因为没有锁,所以select结果为当前时刻表中记录的状态。如果加入了for update, 则Oracle一旦发现(符合查询条件的)这批数据正在被修改,则不会发出该select语句查询,直到数据被修改结束(被commit),马上自动执行这个select语句。原创 2024-12-10 15:44:55 · 1805 阅读 · 0 评论 -
保姆级带你使用阿里云短信服务
通过以上代码,可以根据项目的实际需求进行使用。⭕️以上内容也可根据实际情况进行裁剪选择使用,切勿一成不变。The end.原创 2024-12-10 14:47:22 · 1094 阅读 · 0 评论 -
5种IO模型
阻塞和非阻塞是进程在访问数据的时候,数据是否准备就绪的一种处理方式,当数据没有准备的时候。:往往需要等待缓冲区中的数据准备好过后才处理其他的事情,否则一直等待在那里。:当我们的进程访问我们的数据缓冲区的时候,如果数据没有准备好则直接返回,不会等待。如果数据已经准备好,也直接返回。原创 2022-10-24 11:03:26 · 392 阅读 · 0 评论 -
Executors快捷创建线程池的潜在问题
又是一个金九银十的面试季,相信很多小伙伴都会被问过创建线程有几种方式?有不少的博客都会回答有四种创建方式,分别是以下方式:1)继承Thread类创建线程2)实现Runnable接口创建线程3)使用Callable和Future创建线程4)使用线程池例如用Executor框架但是看过阿里巴巴开发规范手册的,都知道在手册里面写着 线程池不允许使用Executors去创建。以上内容分别梳理了Executors四个工厂方法所创建的线程池将面临的潜在问题。原创 2022-10-13 17:54:50 · 707 阅读 · 0 评论 -
分享一个Joda-Time日期时间工具类
在JDK1.8之前,处理日期和时间的方式比较单一,Java中提供了Calendar来处理日期,但是过程较为繁琐。但是在JDK1.8之后,Java更新了time包提供了LocalDate,LocalTime,LocalDateTime等日期时间类来处理较为复杂的关于日期和时间的业务逻辑的方法。现在介绍Joda-Time日期时间工具类,该类库的开发者参与了JDK1.8中time包的开发,所以在那些使用JDK1.8之前的项目,Joda-Time是一个不错的选择。原创 2022-08-23 12:11:09 · 2136 阅读 · 0 评论 -
Redis常问面试题整理
文章出处:Redis常问面试题整理介绍Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的 API的非关系型数据库。传统数据库遵循 ACID 规则。而 Nosql(Not Only SQL 的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称) 一般为分布式而分布式一般遵循 CAP...转载 2020-04-01 17:48:11 · 1008 阅读 · 0 评论 -
Java8日期和时间段的计算
前言在Java8之前,计算日期相差多少天一般的做法都是借助SimpleDateFormat对两个日期格式化之后在进行比较。在编写代码的过程中,计算一个方法具体耗时多少分钟,执行了多少秒等需求,一般也是借助System.currentTimeMillis()。long start = System.currentTimeMillis();//业务逻辑//...long end = ...原创 2020-02-25 16:50:30 · 3853 阅读 · 0 评论 -
adb 无线连接小米手机(免ROOT)
前言adb本身提供了网络调试的功能,即使不用USB数据线连上Android手机的情况下,也可以使用WiFi连接add进行调试。详细的作法如下:解决方法开启USB调试1.打开手机设置,点击“我的设备”,选择“全部参数”2.连续点击MIUI版本几次,返回到设置主界面,点击“更多设置”3.点击“开发者选项”,打开“开启开发者选项”和“USB调试”开启USB调试之后,确保电脑和手机都是使用的...原创 2020-01-27 13:38:00 · 13990 阅读 · 3 评论 -
折腾centos6.5问题小结
折腾centos6.5问题小结安装vmware成功后,会提示要求输入序列号 序列号已经收集起来了。以下是我网络中找到的序列号,亲测可用。VMware Workstation 12序列号: 5A02H-AU243-TZJ49-GTC7K-3C61Ncentos6.5 下载地址 下载地址:http://www.centoscn.com/CentosSoft/iso/2013/1205...原创 2018-08-26 10:20:41 · 642 阅读 · 0 评论 -
Java+adb命令实现自动刷视频脚本
文章来源自己博客,链接: http://www.devcheng.net/post/58251880.html前言最近,看身边的朋友很喜欢看某手视频,某音视频。边看还能赚点点零花钱,最开始的时候也遇到过很多类似的APP,比如有一些看新闻奖励金币,然后金币变成人民币到达多少金额之后可以提现,一般人都是喜欢自己去手把手的去刷,今天我们就用java加adb写一个程序出来实现自动刷视频。准备工作在...原创 2019-12-15 19:47:21 · 9914 阅读 · 4 评论 -
工作三年的java程序员修行之路
原创整理不易,转载请注明出处:我的Java修行之路人生天地之间,若白驹过隙,忽然而已。仔细回忆一下,原来我已修行Java之路已经快三年。 一路的走来,发现未来遥不可及,过去又无法回去,脚步还在继续,每走一步便是一个脚印。三年前,还记得第一次的“Hello world”情景,慢慢的学习javase,渐渐的发现java越来越神奇,学完了javase后,终于开始了javaee,开原创 2015-12-29 22:39:44 · 4400 阅读 · 8 评论 -
jQuery获取Select选择的Text和 Value
jQuery获取Select选择的Text和Value:语法解释:1. $("#select_id").change(function(){//code...}); //为Select添加事件,当选择其中一项时触发2. var checkText=$("#select_id").find("option:selected").text(); //获取Select选择的Text原创 2014-04-30 16:17:42 · 1547 阅读 · 0 评论 -
使用Pushlet向指定用户推送消息
问题的关键就是那个SessionID,Pushlet默认是用java.rmi.server.UID参数的随机字符串作为会话标志,这就造成我们没法跟一个特点的用户对应上,也就是说客户必须在joinListen的时候提供一个他的ID,就像登陆qq时,输入用户名一样。好了,这里就列出怎么修改相关代码,实现上述功能。同样,首先用MyEclipse新建一个web工程,我这里命名为Pushle原创 2014-02-16 20:40:40 · 1737 阅读 · 0 评论 -
2014新版12306接口分析
抓包分析12306的接口分析原创 2014-01-08 22:44:48 · 7208 阅读 · 3 评论