自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(16)
  • 收藏
  • 关注

原创 单例 模式

单例模式(Singleton Patterm)是一种创建型设计模式,它确保一个类只有一个实例,并提供。单例模式主要用于,例如配置管理器、连接池、线程池、日志对象等。实现单例模式的关键点?:确保外部代码不能通过构造器创建类的实例。:持有类的唯一实例。:提供全局访问点以获取实例,如果实例不存在,则在内部创建。

2025-04-16 17:21:38 456

原创 责任链模式简单实例

假设有一个日志系统,根据日志的严重性级别(错误、警告、信息)将日志消息发送给不同的处理器处理。

2025-04-16 16:18:31 335

原创 工厂模式简单实例

【代码】工厂模式简单实例。

2025-04-16 15:33:40 235

原创 Java 集合框架

实际直接使用两个流ObjectOutputStream 和ObjectInputStream 来进行序列化和反序列化。

2025-04-15 11:09:16 940

原创 完全背包的应用

凑足总额为 j - coins[i] 的最少个数为 dp[ j - coins[ i ] ],那么只需要加上一个钱币coins[ i ]即dp[ j - coins[ i ] ] + 1就是dp[ j ](考虑coins[i])而不会出现{5, 1}的情况。因为递推公式dp[i] += dp[i - nums[j]]的缘故,dp[0]要初始化为1,这样递归其他dp[i]的时候才会有数值基础。因为只要得到nums[ j ],排列个数dp[ i - nums[ j ] ],就是dp[ i ]的一部分。

2025-03-23 23:18:52 707

原创 ThreadLocal

接着看看具体的resize()方法,扩容后的 newTab 的大小为老数组的两倍,然后遍历老的table数组,散列方法重新计算位置,开放地址解决冲突,然后放到新的 newTab ,遍历完成之后,oldTab中所有的 entry 数据都已经放入到 newTab 中了,然后 table 引用指向 newTab。我们先来分析一下使用ThreadLocal时的内存,我们都知道,在JVM中,栈内存线程私有,存储了对象的引用,堆内存线程共享,存储了对象实例。

2025-03-23 15:14:33 2043

原创 线程创建的方法

把线程与任务分离开:Thread代表线程;Runnable代表要执行的任务。]分析Thread 的源码,理清它与 Runnable 的关系。原理之 Thread 与 Runnable 的关系。

2025-03-21 23:54:23 410

原创 类加载器机制

载入、链接和初始化(1)载入:将类的二进制字节码加载到内存中。载入过程 JVM 会做什么?① 通过一个类的全限定名来获取定义此类的二进制字节流。② 将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构。③ 在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口。(2)链接验证:检查类文件格式是否符合 JVM 规范准备:为类的静态变量分配内存并设置默认值。解析:将符号引用替换为直接引用。(3)初始化:执行静态代码块和静态变量初始化。

2025-03-21 14:35:52 1695

原创 完全 背包

首先从dp[i][j]的定义出发,如果背包容量j为0的话,即dp[i][0],无论是选取哪些物品,背包价值总和一定。

2025-03-21 00:02:23 1615

原创 0-1背包应用

有一堆石头,用整数数组stones表示。其中stones[i]表示第i块石头的重量。每一回合,从中选出任意两块石头,然后将它们一起粉碎。假设石头的重量分别为x和y,且x <= y。那么粉碎的可能结果如下:如果x == y,那么两块石头都会被完全粉碎;如果x!= y,那么重量为x的石头将会完全粉碎,而重量为y的石头新重量为y-x。最后,最多只会剩下一块石头。返回此石头最小的可能重量。如果没有石头剩下,就返回0。

2025-03-20 17:56:01 927

原创 JVM垃圾回收机制

(Live Data Counting And Evacuation),制定回收计划,选择多个Region 构成回收集,把回收集中Region的存活对象复制到空的Region中,再清理掉整个旧 Region的全部空间。这个算法的实质在于将一系列 GC Roots 作为初始的存活对象合集,然后从该合集出发,探索所有能够被该集合引用到的对象,并将其加入到该集合中,这个过程我们也称之为。所谓的 GC Roots,就是一组必须活跃的引用,它们是程序运行时的起点,是一切引用链的源头。,每次只使用其中的一块。

2025-03-20 14:21:25 944

原创 对象的四种引用

也称为“幽灵引用”或者“幻影引用”,它是最弱的一种引用关系。一个对象是否有虚引用的存在,完全不会对其生存时间构成影响,也无法通过虚引用来取得一个对象实例。当垃圾收集器开始工作,无论当前内存是否足够,都会回收掉只被弱引用关联的对象。在JDK 1.2版之后提供了。,如果这次回收还没有足够的内存,才会抛出内存溢出异常。在JDK 1.2版之后提供了。是用来描述一些还有用,但非必须的对象。只被软引用关联着的对象,,但是它的强度比软引用更弱一些,被弱引用关联的对象。在JDK 1.2版之后提供了。

2025-03-20 12:27:41 205

原创 内存泄露与内存溢出

很可能存在内存泄漏;或不再使用对象没有及时将对象设置为 null,很可能导致内存泄漏的发生。

2025-03-19 17:03:05 433

原创 JVM中对象的创建

JVM中的对象创建,一般都是一个new指令开始的。内存分配有两种方式,指针碰撞、空闲列表。对于Java语言来说刚开始,接下来。

2025-03-19 16:06:41 354

原创 0-1背包

第i件物品的重量是weigh[i],得到的价值是value[i]。dp[j]可以通过dp[j - weight[i]]推导出来,dp[j - weight[i]]表示容量为j - weight[i]的背包所背的最大价值。dp[j]表示:容量为 j 的背包,所背的物品价值可以最大为dp[j],那么dp[0]就应该是0,因为背包容量为0所背的物品的最大价值就是0。因为对于二维dp,dp[i][j]都是通过上一层即dp[i - 1][j]计算而来,本层的dp[i][j]并不会被覆盖!

2025-03-18 23:09:48 1030

原创 什么是JVM?

全称为即Java 虚拟机,作为 Java 跨平台的基石。Java 源文件在通过Javac 编译器进行编译成Java字节码文件,即.class文件,在通过Java虚拟机对其进行解释成为该平台匹配的机器所可以执行的机器码。

2025-03-18 18:00:06 266

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除