自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 一篇带你了解 JVM ( 面试专用 )

验证是连接阶段的第⼀步,这⼀阶段的⽬的是确保Class⽂件的字节 流中包含的信息符合《Java虚拟机 规范》的全部约束要求,保证这些信 息被当作代码运⾏后不会危害虚拟机⾃⾝的安全。并从某些特定的对象出发,尽可能进行访问的遍历,把所有能够访问到的对象,标记成“可达”,金国扫描完成后,违背标记 的对象,就是 垃圾。准备阶段是正式为类中定义的变量(即静态变量,被static修饰的变量)分配内存并设置类变量初始值(这里指的是默认值,并不是程序中真正的值) 的阶段。“加载”过程中,其中的一个环节。

2025-02-02 21:21:57 910

原创 [ 网络原理 ] TCP协议

其实 TCP 已经很贴心的帮我们将这个问题给解决了, TCP 会有一个 接收缓存区 ,也就是一个内存空间,会保存当前已经收到的数据,以及数据的序号,当发送数据重复时, 接收方就会直接把后来的数据给丢弃,确保应用程序 在读取数据的时候,不会读到同一个数据多次。其实它是有一个等待时间的,当发送方 发出数据一段时间之后,如果在这段时间内,收到 ack ,就视为 数据到达,如果没有收到 ack ,就会视为丢包(可能是数据,也可能是ack),此时就会触发重传机制。TCP将数据视为一连串的字节流,而不是一系列的消息。

2024-05-21 21:28:10 1073

原创 [ 网络原理 ]UDP协议

UDP 并不能保证 数据的可靠传输,它并没有设置 数据丢失后的补救措施,而是,数据发送出去之后,就与 UDP 不相干了。将当前要计算校验和的数据,每个字节进行累加,再将结果保存到这两个字节的变量中,累加过程中溢出也不要紧。由于UDP具有低延迟的特性,它能够提供更快速的数据传输速度,这对于实时性要求高的音视频通信至关重要。前提:在网络传输中,由于一些外部的干扰,可能就让我们的 光/电信号 出现传输出错的情况。: 无论你的原始数据有多长,计算得到的 md5 ,都是一个固定的长度。(上图取自 计算机网络的教材)

2024-05-19 20:38:48 664 1

原创 文件操作(File && IOStream)

Java 中 针对文件的操作 ,主要分为两类:(1): File创建文件,删除文件,判定文件是否存在,判定文件类型,重命名……(2):流对象 ( InputStream,OutputStream )读,写 文件下面我们先来了解 对文件系统的操作。

2024-05-19 15:38:24 1240 1

原创 网络原理 基础知识点

网络 互联的目的是为了 进行网络通信,更具体点就是:网通中不同主机的进程间,基于网络进行传输数据。那在网络中,我们是如何知道将 数据 传输给哪一台 主机呢?这就需要 使用 IP地址 来进行标识。

2024-05-19 15:22:04 889 1

原创 文件 IO

狭义上的文件(file):针对硬盘这种持久化存储的I/O设备,当我们想要进行数据保存时, 往往不是保存成一个整体,而是独立成一个个的单位进行保存,这个独立的单位就被抽象成文件的概 念,就类似办公桌上的一份份真实的文件一般。但是在大部分情况下,我们所说的文件,都是指 硬盘中的文件。首先这里的“文件”与我们平时说的 文件 有些不同,“ 文件 ” 其实是一个 广义 的概念。文件中保存的数据,仅仅是二进制数据,不要求保存的内容是 合法字符(文件中保存的数据,都是字符串,保存的内容都是 合法的字符(

2024-05-18 15:32:08 1004 2

原创 浅谈CAS

CAS:Compare and swap,比较交换,这里比较交换的是内存 和 寄存器中的值。CAS 本质上是一个cpu 的指令,后被操作系统进行封装,提供成 api ,又被JVM封装一遍,同样提供了 api ,最后 供我们程序员 使用。单个的 cpu 指令是原子的,所以我们可以使用 CAS 来完成一些操作,进一步的代替加锁。它是乐观锁乐观锁思想的一种实现,尤其是在并发量大的业务场景下保证单个实例的原子性,使用较为频繁。

2024-05-17 10:17:44 985 1

原创 常见锁策略

为保证线程安全,我们常常进行加锁操作,那在 Java 中都有哪些 锁策略呢?

2024-05-16 23:29:30 891

原创 HashTable, HashMap, ConcurrentHashMap 三者区别

ConcurrentHashMap 是基于 HashTable 的基础上 将一把大锁 分解到 对数组中每个链表 进行加锁,这样,当我们同时操作 HashMap 中的不同链表中的数据时候,就可以在不影响 线程安全的情况下,将效率进一步 提高了。答案是不会,这是因为 ConcurrentHashMap 在底层编码中,谨慎的处理了一些细节,修改的时候,会避免使用一些 非原子的操作,所以 读的时候,要么 读的是修改之前的值,要么是读的修改之后 的值。(3) ConcurrentHashMap 还有一个激进的操作,

2024-05-16 09:31:04 937

原创 死锁

所以,参考上述问题,我们也可以对每把锁进行编号,并规定每次选择编号最小的锁进行优先加锁,这样其他线程 想要加锁的时候,由于编号小的锁以及被使用了,它就只能阻塞等待,就避免出现循环等待的问题了。可是,可能由于代码量太大,我们无法 避免的写出 ” 锁嵌套“ 的情况,所以,我们还是得从 循环等待 入手处理。当一个线程尝试获取多把锁的时候,它会先拿到第一把锁,再尝试获取第二把锁,此时第一把锁并不释放。我们可以将每根筷子编上序号,并规定每次都拿最小编号的筷子,这样 “哲学家就餐” 问题就解决了。

2024-05-15 11:41:27 510

原创 synchronized 原理

某个线程对锁对象进行加锁,这个锁就会绑定这个线程,当这个线程重复对这个锁加锁时, 计数器就会 ++ ,解锁就会 -- , 当我们的计数器 减小到0 时候,这个锁才会彻底释放。对程序来说,当我们多个线程同时对一个锁对象进行加锁,第一个线程先完成加锁操作,第二个对象想要加锁,就必须等第一个线程将锁释放之后才能继续进行加锁操作。我们在对方法进行加锁的时候,有两种加锁写法,可以直接在方法上进行加锁,也可以在方法内部对 调用该方法的对象 进行加锁。当我们刚开始进行加锁时,系统并不会先 进行加锁 ,而是。

2024-05-14 21:03:04 1008 2

原创 线程池

线程的诞生是由于 进程的创建以及销毁,太重量了,效率慢。所以我们引进了 “ 线程 ” ,但是 如果我们进一步提高创建销毁 线程的频率,线程的开销也就不能忽视了。针对 上述问题,有两种典型的方法来解决,来进一步提高效率:1.,相比于线程,将系统调度的过程给省略掉了( 程序猿 手动调度)虽然 Java 标准库中并没有协程,但是有一些第三方库实现了协程。第三方库的协程到底靠不靠谱,我们是不清楚的。所以 在 Java中一般不使用协程。2.

2024-05-06 22:06:07 872 1

原创 单例模式(线程安全)

就如其名,只有单个实例(对象),在有些场景中,希望有的类只有一个对象,不能有多个,这种场景下,就可以使用单例模式。就比如: 许多管理数据的对象,就应该是“ 单例 ”的。那有人就会说,单例这种事情,还需要设计模式吗,我们在写代码的时候,只给这个类 new 一次对象,不去 new 多次,不就可以了吗?这完全取决与 程序员 的编程素养,这种是不可控的。所以,我们就需要让编译器帮我们做监督,确保这个对象不会出现多次。

2024-05-05 22:24:59 773 2

原创 线程安全问题

什么是线程安全问题?怎么解决呢?请看VCR

2024-05-05 16:48:56 842 3

原创 线程的状态

在线程中,当我们想要将代码运行速率适当降低的时候,就会使用 sleep( ) 方法,此时我们调用 getState( ) 方法就会获取 到 Timed Waiting 状态。同样的,调用完 start( ) 方法之后,在 t1 线程中的 run 方法中,出现 wait( ) 方法并且没有被 notify 唤醒之前,线程的状态。当我们创建线程,调用了 start( ) 方法之后,线程就会处于一个 “ 就绪状态 ”,紧接着就会运行我们重写的 run 方法中的代码。线程执行完毕或被强制终止后的状态。

2024-05-04 23:21:44 146

原创 线程(Thread)

要想了解线程(Thread)以及熟悉使用得先从 Java 中的Thread的源码开始了解。

2024-05-04 19:07:12 1268

原创 进程与线程

进程是操作系统资源分配的基本单位,线程是调度执行的基本单位

2024-05-04 17:09:06 404

原创 进程调度的基本过程

进程是程序在计算机中的一次运行活动。通俗来讲,进程就是一个已经跑起来的程序。当我们打开任务管理器的时候,就可以看到计算机中运行的进程(如下图)如上图所示,当每个进程想要执行的时候,系统都会消耗一定的资源:所以说,进程是系统资源分配的基本单位。

2024-05-03 23:29:35 705 1

原创 图书管理系统的简单设计

Java是一门面向对象的语言,那我们在通过Java设计图书管理系统的时候,可以按照一下顺序来进行编程:关于构建图书管理系统,首先你得弄清楚一共有哪几个部分:图书,用户,操作。对于这几个部分你可以分别创建对应的包来进行存储,有利于类的管理。

2024-03-17 19:42:39 1855 1

原创 类和对象

Java是一门面对对象的语言(Object Oriented Program ,简称OOP) , 在面对对象的世界中,一切皆为对象。而面对对象是一种解决问题的思想,主要依赖与对象之间的交互来完成一件事情。2.1 简单认识类什么是类呢?简单来说,类就是对一个实体(对象)进行描述的,主要描述该实体(对象)都有哪些属性,哪些功能 等等。就好比 :洗衣机 它是一个品牌属性:产品品牌,型号,重量,尺寸,颜色……功能:洗衣,烘干,定时……那在java中,又是如何来类的呢?

2024-03-10 17:59:27 1106 1

原创 数据类型与运算符

由于浮点数的内存布局和整数差别很大, 不能单纯的用 2 ^ n 的形式表示数据范围. Java 的 double 类型的内存布局遵守 IEEE 754 标准(和C语言一样), 尝试使用有限的内存空间表示可能无限的小数, 势必会存在一定的精度误差。2. 计算机中的字符本质上是一个整数. 在 C 语言中使用 ASCII 表示字符, 而 Java 中使用 Unicode 表示字符. 因此一 个字符占用两个字节, 表示的字符种类更多, 包括中文. 使用一个字符表示一个汉字.

2024-03-05 20:16:36 869

原创 初见Java——Java开发环境准备

Java是一种优秀的程序设计语言,它具有令人赏心悦目的语法和易于理解的语义。不仅如此,Java还是一个有一系 列计算机软件和规范形成的技术体系,这个技术体系提供了完整的用于软件开发和跨平台部署的支持环境,并广泛 应用于嵌入式系统、移动终端、企业服务器、大型机等各种场合。

2024-03-04 21:24:14 1005 2

空空如也

空空如也

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

TA关注的人

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