- 博客(52)
- 收藏
- 关注
原创 JVM(Java虚拟机)
JVM 是 Java Virtual Machine 的简称,意为 Java虚拟机。虚拟机是指通过软件模拟的具有完整硬件功能的、运行在一个完全隔离的环境中的完整计算机系统。1. VMwave与VirtualBox是通过软件模拟物理CPU的指令集,物理系统中会有很多的寄存器;2. JVM则是通过软件模拟Java字节码的指令集,JVM中只是主要保留了PC寄存器,其他的寄存器都进行了裁剪。JVM 是一台被定制过的现实当中不存在的计算机。
2025-12-08 15:11:39
1328
原创 网络层(IP协议) && 数据链路层(以太网)
思考:如果基于UDP实现传输超过64kb的数据要怎么设计?在应用层协议中就可以表示符,指定片偏移,指定标志位。
2025-09-16 22:40:00
1242
1
原创 传输层:UDP/TCP协议
本文对比分析了TCP和UDP两大网络协议的核心特性。UDP作为无连接协议,具有不可靠但高效的特点,其64KB报文长度限制是主要痛点。TCP通过十大核心机制实现可靠传输:1)确认应答保证数据有序到达;2)超时重传应对丢包;3)三次握手/四次挥手的连接管理;4)滑动窗口提高效率;5)流量控制防止接收方过载;6)拥塞控制适应网络状况;7)延迟应答提升吞吐量;8)捎带应答减少报文;9)字节流特性带来的粘包问题及解决方案;10)异常处理机制。文章详细解析了TCP各机制的工作原理,包括状态转换、窗口调整策略等,并讨论了
2025-09-09 19:49:27
1765
1
原创 应用层:HTTP/HTTPS协议
核心就是重复执行同一操作,返回的结果保持一致比如牛吃进去的是草,挤出来的是奶如果每次吃进去的都是草,并且每次挤出来的都是奶,就可以说是幂等如果每次吃进去的是草,挤出来的不都是奶,就不是幂等幂等性,在开发中也是很关键的,设计成幂等之后,请求就可以缓存了。
2025-09-02 12:03:28
1546
1
原创 网络编程--TCP/UDP Socket套接字
网络编程主要涉及应用层和传输层的通信实现。TCP和UDP是两种核心传输协议:TCP提供可靠、面向连接的字节流传输,而UDP则是无连接、不可靠的数据报传输。程序员通过Socket套接字进行网络编程,其中DatagramSocket用于UDP通信,ServerSocket和Socket用于TCP通信。文章通过Java代码示例展示了UDP回显服务器和TCP回显服务器的实现过程,包括请求处理、响应发送等关键步骤。网络编程的核心在于实现不同主机间的进程通信,客户端发送请求,服务器处理并返回响应,这种模式构成了现代网络
2025-08-25 18:37:19
1640
1
原创 Java文件操作/IO
/绝对路径//相对路径,相对于当前项目目录//获得父目录//获得文件名//获得文件路径(与上述构造方法路径相同)//获得绝对路径//获得规范路径(去除..等)
2025-08-18 19:52:52
1489
原创 多线程--CAS原子操作
CAS(比较并交换)是并发编程中的原子操作机制,通过比较内存值与预期值实现线程安全访问。其应用包括实现原子类(如AtomicInteger)和自旋锁。但CAS存在ABA问题,即值被多次修改后恢复原值可能导致误判,如银行账户重复扣款场景。Java通过版本号机制解决ABA问题,并在ConcurrentHashMap中运用CAS优化并发性能,如使用链表头节点作为锁对象和CAS辅助计数。CAS虽高效但需注意极端场景下的线程安全问题。
2025-08-12 16:26:11
1565
原创 多线程--定时器
摘要: 定时器是一种用于在指定时间或时间间隔执行任务的机制,广泛应用于数据备份、日志清理等场景。Java标准库提供Timer类,其schedule方法可安排任务延迟执行。通过分析Timer实现原理,可发现其使用独立线程处理任务队列。文章还详细介绍了如何手动实现定时器,包括使用优先级队列处理任务调度、解决线程安全问题以及优化方案。最后提到Java线程池方案ScheduledExecutorService,它通过多线程处理任务提高了执行效率。
2025-08-04 17:28:51
820
原创 多线程--关于锁的一些知识考点
本文摘要: 锁策略是描述锁特性的抽象概念,主要包括:乐观锁(低冲突预测)与悲观锁(高冲突预测);轻量级锁(低开销)与重量级锁(高开销);自旋锁(用户态循环)与挂起等待锁(内核调度);读写锁(区分读写操作);公平锁(先来先服务)与非公平锁;可重入锁(避免嵌套死锁)与不可重入锁。文章还分析了死锁的三种场景,介绍了synchronized的实现策略,并通过ReentrantLock和Semaphore的代码示例展示了锁和信号量的实际应用。信号量作为广义锁,能控制并发访问资源数量,二元信号量可模拟互斥锁。
2025-07-29 22:24:00
1603
原创 多线程--线程池
即使核心线程数为N,线程池通常只创建处理第一个任务所需的1个线程:线程池会创建新线程来处理任务,直到达到核心线程数:可以显式地提前启动核心线程。
2025-07-21 21:14:00
1390
原创 多线程--单例模式and工厂模式
设计模式是解决常见软件问题的固定套路,可提高代码复用性和可维护性。单例模式确保类仅有一个实例,实现方式包括饿汉模式(类加载时创建)和懒汉模式(首次使用时创建),后者需解决线程安全问题。工厂模式通过封装对象创建过程,解决构造方法冲突,提供灵活的对象创建方式,但可能增加代码复杂性。合理使用设计模式能优化代码结构,但需避免过度依赖。
2025-07-14 22:06:06
1390
原创 多线程--阻塞队列and生产消费者模型
阻塞队列是一种线程安全的先进先出数据结构,具有阻塞特性:当队列为空时出队操作会阻塞,当队列满时入队操作会阻塞。Java中通过BlockingDeque和BlockingQueue接口实现,常用类包括LinkedBlockingDeque、ArrayBlockingQueue等。阻塞队列的核心应用是生产者-消费者模型,它能实现生产者和消费者的解耦合,并起到削峰填谷的作用。文章通过代码示例演示了阻塞队列的使用方法,并展示了如何手动实现一个简单的阻塞队列,包括put和take操作的线程安全处理。该模型通过缓冲区平
2025-07-07 09:49:50
1085
原创 多线程--内存可见性问题以及volatie关键字
内存可见性是导致线程安全问题的常见原因,表现为一个线程修改共享变量后,其他线程无法及时感知。文章通过示例代码演示了线程2修改flag值后,线程1仍因编译器优化而持续读取寄存器缓存,导致死循环。分析了编译器为提高效率将内存读取优化为寄存器读取的机制。提出两种解决方案:1)在循环中插入sleep降低优化必要性;2)使用volatile强制读写内存,确保变量修改对其他线程可见。强调volatile仅解决可见性问题,原子性问题仍需synchronized处理。
2025-06-30 17:42:47
763
原创 多线程-线程安全问题及解决方法
这里列举两种情况情况二👇一个字:贵 而且运行速度是相对的内存就已经很快了像这种bug情况由于随机排序 还有很多a)一个线程一把锁 -- 可重入b)两个线程两把锁b)M个线程N把锁。
2025-06-23 16:21:43
1286
原创 数据库--事务
本文系统介绍了数据库事务的核心概念与应用。首先阐述了事务作为数据库操作基本单位的定义及其"全有或全无"的特性,并以银行转账为例说明其重要性。重点解析了事务的ACID四大特性:原子性、一致性、隔离性和持久性。详细说明了MySQL中事务的使用方法,包括存储引擎选择、基本控制语句和保存点设置。深入分析了四种事务隔离级别(读未提交、读已提交、可重复读和串行化)及其可能引发的并发问题(脏读、不可重复读和幻读),特别指出MySQL默认的可重复读级别通过Next-Key锁解决了大部分幻读问题。最后给出
2025-06-16 22:31:25
1280
原创 数据库-索引
MySQL索引通过B+树数据结构提升查询效率,支持高效的范围查找和排序操作。索引分为主键、普通、唯一等多种类型,其中聚集索引按主键顺序存储数据。创建索引需考虑高频查询列和选择性,避免过多索引影响性能。B+树利用页结构(默认16KB)优化磁盘IO,三层结构可支持2000万+数据的高效检索。合理使用索引能显著提升系统性能,但需平衡查询与写入操作的开销。
2025-06-11 07:38:42
1120
原创 Java语法:抽象类和接口
/抽象类被abstract修饰//抽象方法,不用给出实例@OverrideSystem.out.println("画一个圆");//抽象子类//必须要先初始化//对于成员变量public static final是默认有的public static final String name = "圆";// String name = "圆";//成员方法//对于成员方法public abstrac是默认有的//usb接口//鼠标类实现usb接口。
2025-03-24 08:01:53
1561
原创 Java--多态
System.out.println(this.name + "正在吃东西");//重写eat@OverrideSystem.out.println(this.name + "正在吃虫子");//重写eat@OverrideSystem.out.println(this.name + "正在吃骨头");System.out.println(this.name + "正在吃东西");//重写eat@Override。
2025-03-23 07:19:42
792
原创 Java语法--继承
System.out.println(this.name + "正在吃东西");System.out.println(this.name + "正在喵喵叫");System.out.println(this.name + "正在汪汪叫");System.out.println(this.name + "正在吃东西");System.out.println(this.name + "正在喵喵叫");eat();//访问父类方法mimi();//访问子类方法cat.func();
2025-03-17 13:45:17
1263
原创 Java的类和对象
class Dog{//访问修饰符 类型 变量//成员变量//成员变量//成员方法(狗的行为)System.out.println(name + " 正在汪汪叫");class Dog{//访问修饰符 类型 变量//成员变量//成员变量//成员方法(狗的行为)System.out.println(name + " 正在汪汪叫");//实例化对象//用.号访问成员变量和成员方法(类似于C语言)dog1.name = "大黄";day = day;
2025-03-17 08:32:47
1334
原创 java中的方法(函数)重载
上面是求的是两个整形数字的求和,那么我们要求两个double类型的的数字的求和呢按照c语言的逻辑来写法就是这样↓如果要求三个整形数字相加呢?又要写成这样?什么是方法重载?在Java中,方法重载(Method Overloading)是指在同一个类中定义多个方法名相同,但参数列表(参数的个数、类型、顺序)不同的方法。 上述三个方法我们就能写成这样↓满足方法名一样,分别满足参数列表的类型不一样,个数不一样。调用的时候就会有以上所有的情况,根据传参的
2025-03-10 12:07:09
852
原创 C语言动态内存管理中malloc,calloc,realloc,free函数介绍
/calloc函数int main()//开辟10个大小为int型的内存 也一共40字节return 1;//存放1--10int i = 0;for (i = 0;i < 10;i++)//打印for (i = 0;i < 10;i++)//释放内存(必要)free(p);p = NULL;return 0;//realloc函数int main()return 1;//使用int i = 0;for (i = 0;i < 5;i++)
2025-03-03 09:11:14
1477
2
原创 C语言中结构体的内存对齐
/1字节int i;//4字节char a2;//1字节struct s2char a1;//1char a2;//1int i;//1字节int i;//4字节char a2;//1字节struct s2char a1;//1。
2025-02-24 12:48:26
1387
原创 C语言中的回调函数 以及应用
可以看到再switch的case语句中有大量的冗余 如何改进他就需要用到回调函数了 下面给出改进后的代码我们再结合一下回调函数的定义 回调函数作为参数传参 通过函数指针调用的函数 pa为函数指针 能够调用add,sub等函数 所以add,sub,mul,div为回调函数
2025-02-17 13:05:42
1087
原创 C语言中 assert 和 const 的用法 以及完成优秀的代码 (debug)
int main()//const修饰普通变量时两种形式等价num = 20;return 0;= NULL);= NULL);两种表达是等价的;
2025-02-05 17:26:20
860
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅