JavaEE
文章平均质量分 86
²º¹⁷旧人不必等
别叹气,运气会跑掉的
展开
-
Cookie 和 Session 的工作流程
Session和Cookie简单总结原创 2023-08-24 18:42:37 · 2619 阅读 · 58 评论 -
HTTPS 的加密流程
漫画图生动详解https加密流程,中间人攻击,证书等详细介绍 欢迎阅读,如有错误 还请指出原创 2023-08-16 12:11:02 · 3584 阅读 · 66 评论 -
HTTP 协议的基本格式和 fiddler 的用法
HTTP协议格式总结原创 2023-08-14 23:01:30 · 2988 阅读 · 62 评论 -
IP 协议的相关特性和数据链路层相关知识总结
IP协议相关特性 数据链路层基础总结原创 2023-08-12 10:47:49 · 3259 阅读 · 51 评论 -
UDP 的报文结构和注意事项
第一种方案(不推荐):通过代码的方式针对应用层数据报进行手动的分包,拆分成多个包通过多个UDP数据报进行传输。第二种方案(推荐):不用UDP,换成TCP(TCP没有这样的限制)如果传输超过64KB的数据,该如何设计?UDP 和TCP 的区别?原创 2023-08-11 12:05:15 · 447 阅读 · 32 评论 -
TCP 协议十大相关特性总结
如果发送方没有接收到回来的ACK相应,等待一段时间后,发送方默认该数据已经丢失,会重新发送该条数据给对方,如果依然没有接收到ACK回应,那么会再次发送 ,但是每次发送的时间间隔会越变越长 , 这就是超时重传。在接收方和发送方里面存在一个"心跳包",双方会周期性发送一个小数据,判断对方是否存活,如果检测到发送方没有心跳回应,那么就默认发送方没了,接收方也就停止接收数据.当TCP发送多条数据,数据都存储再缓冲区中,由于我们的数据是字节流的,所以我们的数据很有可能会粘到一起,无法区分出哪些是一条数据。原创 2023-08-10 11:21:48 · 1909 阅读 · 29 评论 -
网络基本概念
以下图为例,假设要在应用层发送一份邮件,在传输至物理层时,每一层会将该数据包封装成一个新的数据包,其中上层的头部或尾部包含了该层的一些控制信息和协议标识,以便下层能够正确地使用该数据包。以下图为例,假设接收方从物理层接收到一个数据包,那么在经过每一层时,都会将该层的头部和尾部信息去除,直到应用层,此时才能得到原始的邮件数据。有了IP地址和端口号,可以定位到网络中唯一的一个进程,但还存在一个问题,网络通信是基于二进制0/1数据来传输,如何告诉对方发送的数据是什么样的呢?简单说:端口号用于定位主机中的进程。原创 2023-08-09 21:38:14 · 646 阅读 · 30 评论 -
File 类和 InputStream, OutputStream 的用法总结
InputStream 只是一个抽象类,要使用还需要具体的实现类。关于 InputStream 的实现类有很多,基本可以认为不同的输入设备都可以对应一个 InputStream 类,我们现在只关心从文件中读取,所以使用FileInputStream。下面代码是一些普通方法的使用例子。原创 2023-08-06 22:06:40 · 462 阅读 · 23 评论 -
总结 IO、存储、硬盘、文件系统相关常识
初识网络相关知识原创 2023-08-06 10:55:39 · 576 阅读 · 11 评论 -
锁策略, cas 和 synchronized 优化过程总结
锁策略, cas 和 synchronized 优化过程总结原创 2023-08-05 10:48:31 · 341 阅读 · 21 评论 -
synchronized总结
如果竞争进一步激烈, 自旋不能快速获取到锁状态, 就会膨胀为重量级锁 执行加锁操作, 先进入内核态在内核态判定当前锁是否已经被占用 如果该锁没有占用, 则加锁成功, 并切换回用户态.如果该锁被占用, 则加锁失败. 此时线程进入锁的等待队列, 挂起. 等待被操作系统唤醒.经历了一系列的沧海桑田, 这个锁被其他线程释放了, 操作系统也想起了这个挂起的线程, 于是唤醒 这个线程, 尝试重新获取锁。修饰的类或对象的所有操作都是原子的,因为在执行操作之前必须先获得类或对象的锁,直到执行完才能释放。原创 2023-08-03 11:31:33 · 406 阅读 · 7 评论 -
死锁的成因和解决方案
这段随机的等待时间让其它线程有机会尝试获取相同的这些锁,并且让该应用在没有获得锁的时候可以继续运行(加锁超时后可以先继续运行干点其它事情,再回头来重复之前加锁的逻辑)。如果五位哲学家在完全相同的时刻进入餐厅,并同时拿起左边的餐叉,那么这些哲学家就会等待五分钟,同时放下手中的餐叉,再等五分钟,又同时拿起这些餐叉。吃东西的时候,他们就停止思考,思考的时候也停止吃东西。线程1先获取锁A再获取锁B, 线程2先获取锁B再获取锁A, 线程1在获取锁B的时候等待线程2释放B,同时线程2在获取锁A的时候等待线程1释放A。原创 2023-08-02 18:11:26 · 1776 阅读 · 12 评论 -
HashTable, HashMap, ConcurrentHashMap 总结
HashMap是Java中的一个数据结构,它实现了Map接口。HashMap通过一个哈希表来存储key-value键值对,并且支持高效地添加、删除和查找操作。在HashMap中,key和value可以为任何非空对象,而且可以为null。HashMap的特点包括:快速访问,高效的插入和删除,非线程安全。HashMap也是Java中最常用的集合之一。HashTable是Java中的一个数据结构,也实现了Map接口。它与HashMap相似,都是通过哈希表来存储键值对。然而,HashTable是线程安全的,它的各种原创 2023-08-02 17:15:48 · 215 阅读 · 3 评论 -
总结线程池
线程池是一种线程管理的机制,它维护着多个可重用的线程,在需要时分配线程去处理任务。线程池包含了一个任务队列,用来存放需要执行的任务,以及一个线程集合,用来执行任务。通过使用线程池,可以避免频繁地创建和销毁线程,从而减少了系统资源的消耗,提高了系统的性能和效率。线程池还可以控制任务的执行速度,避免因为任务量过大而导致系统崩溃的情况发生。同时,线程池也可以管理线程的数量,避免线程数量过多,导致系统资源的浪费和线程调度的效率降低。原创 2023-08-01 12:38:56 · 224 阅读 · 6 评论 -
单例模式 -- 懒汉模式&饿汉模式
懒汉模式是一种单例模式的实现方式,它的特点是在首次访问单例对象时才进行对象的实例化。懒汉模式的优点是可以避免在程序启动时就进行对象的实例化,节省了系统的资源。可能两个线程会同时进行new操作 , 这样我们多线程创建了多个对象 , 就不是单例模式了 , 主要导致该问题的是由于这里面涉及到了对singleton的修改操作,失去了原子性,为了保证原子性,我们想到了加锁,从而实现线程安全问题。饿汉模式是一种单例模式的实现方式,它的特点是在程序启动时就进行对象的实例化。上面的懒汉模式的实现是线程不安全的.原创 2023-07-13 22:00:04 · 2639 阅读 · 3 评论 -
线程安全问题的原因和解决方案
循环了很多次 此时我们的编译器便做出了优化 ,不再重复读取内存上的值 ,只读取一次放在CPU中 , 这样过后我们的t2即便改变了flog的值 , 但是由于t1不在读取内存上的值 , 所以我们的循环没有停下来, 此时,volatile就能发挥作用了。如果一个进程或线程正在执行时,出现了一些特殊情况(如I/O请求、中断请求等),操作系统就会暂时中止当前进程或线程的执行,切换到其他进程或线程的执行,以便处理这些请求。我们的预期是,当t2修改了flog的值之后,使flog不再为0,此时跳出循环,线程t1结束。原创 2023-07-10 17:38:08 · 118 阅读 · 4 评论 -
Java 线程的几种状态
:当线程因为某些原因无法运行时,例如等待某个资源、等待 IO 完成等,它处于阻塞状态。如果调用 sleep()、 suspend()、 wait()等方法,线程都将进入堵塞状态。就绪状态(READY):当线程已经准备好被调度执行,但是当前没有分配到 CPU 时间片时,它处于就绪状态。):当线程对象被创建时,它处于新建状态,此时系统已经为该线程分配了必要的资源,例如线程栈等。):当线程因为某个条件而需要等待时,例如等待某个锁、等待某个信号量等,它处于等待状态。3、造成线程阻塞后,线程回到哪个状态了?原创 2023-07-10 15:30:45 · 142 阅读 · 4 评论 -
Thread类的基本用法
所以此时如果我们想让新线程先执行 我们就需要使用Thread类的join方法,这个方法是可以规定哪一个线程先执行的,还是这个代码我们在主线程中加一行代码,就可以让新的线程先执行,新的线程执行完然后执行主线程,注意,哪个在哪个线程中加入这个方法,就是让线程进行等待(阻塞状态)在上面这个代码中 ,创建了一个新线程,那先执行新的线程还是执行主线程,答案是不确定,先执行谁都是有可能的,此时的新线程和主线程是并发(并行+并发)执行的,而系统的调度是无序的,所以先执行哪一个线程都有可能。在这种方法中,等待线程调用。原创 2023-07-09 22:51:27 · 73 阅读 · 2 评论 -
JavaEE进程调度的基本过程
JavaEE进程调度的基本过程原创 2023-05-27 16:15:24 · 77 阅读 · 4 评论 -
进程和线程的区别和联系
进程是操作系统资源分配的基本单位, 进程是指正在运行的程序实例。每个进程都有自己的内存空间、代码、数据和资源。操作系统通过管理进程来控制计算机的资源分配。每个进程都有一个唯一的标识符,称为进程 ID,以便操作系统可以识别和管理它。进程可以与其他进程通信,并且可以启动其他进程以执行不同的任务。。原创 2023-07-08 21:46:09 · 81 阅读 · 1 评论