![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java EE
文章平均质量分 90
AJIUZ
这个作者很懒,什么都没留下…
展开
-
JVM (基础概念、类加载过程、垃圾回收算法)
常量池中,每个常量都有一个编号,最开始的时候,这个敞亮的引用,也就是a,对应的是这个常量的编号(符号引用),并不是“abcd”。标记过程和标记清除过程差不多,只是在标记完后,不立马进行清除,而是将存活对象都向一端移动,将存活对象移动到一端连续的空间,最后清理掉端外剩余的内存。指无用对象(不再使用的对象)持续占有着内存,或者无用对象的内存得不到及时的释放,从而造成内存空间的浪费。的时候,会将Endn中存活的对象放到一个未使用的Survivor中,并把当前的End和正在使用的Survivor清理掉。原创 2023-05-29 14:26:27 · 1040 阅读 · 0 评论 -
IP协议(网络层重点协议)
(有些包里面的IP地址,可能是永远也到不了的,像这样的包,不能让其在网络上无休止的转发,这样会占用太多硬件资源)因为这里最大的问题就是 IPv4和IPv6是不兼容的,对于一个设备来说,支持IPv4和IPv6需要两个截然不同的机制,而现有的大量的网络设备(路由器...)很可能都是只支持IPv4,不支持IPv6的。内网IP 只是在当前局域网中时唯一的,在不同的局域网里,可以有相同的 内网IP 的设备。现实生活中,运营商的路由器就会在这里修改IP数据报,从内网发出带有这样功能的路由器设备,也叫做 NAT设备。原创 2023-04-09 19:00:35 · 494 阅读 · 0 评论 -
TCP协议、UDP协议(传输层重点协议)
此时收到了 500K 的数据,如果立刻应答,返回的窗口就是 500K,但是处理端处理接收端缓冲区的速度很快,一下子就把 500K 的数据从缓冲区中取走处理了,此时接收端缓冲区的剩余大小变成了 1M,说明可以接收的数据就不止 500K 了。接收端认为连接还在,一旦接收端有写入操作,就能发现连接已经不在了,就会进行 reset。当 我的麦克风 有问题时,我问“老师你能听见我说话吗”就等不到回应了,如果又说了“老师能听到吗”后,还是没有回应,我就知道了这次通信失败了(不具备可靠传输的条件了),于是我就放弃了。原创 2023-04-07 18:06:03 · 3621 阅读 · 0 评论 -
Map 和 Set、搜索树(二叉排序树)、哈希表(哈希桶)(详细)
大致思路方法和上面类似,最主要的区别在于 put 方法 和 get 方法中,元素的处理方面。因此这里只写了二者不同的地方,负载因子和扩容都是一样的。1. 找到 key 的存放下标之前因为 key 是int类型,可以直接使用函数进行计算得到散列地址,但是我们这里的 key 是个泛型。就以自定义类 person 举例,并不能直接通过计算得到散列地址,因此我们要通过在person类中重写 hashCode方法来获得一个 hash 数值,然后再进行散列函数的计算得到散列地址。原创 2023-03-23 22:06:20 · 553 阅读 · 0 评论 -
多线程案例—— 线程池
线程池就是提前创建好了一批线程,放到一个池子中,当有任务来的时候,就从池子中去取出一个线程(就不用从系统这边申请了),去执行这个任务,执行完后又放回到池子中。而把创建好的线程放在池子里,因为这个池子就是用用户态实现的,因此把线程放到池子 / 从池子中取出线程,都是用纯粹的用户态代码实现的,不涉及内核态。因此,自己实现的线程池类中,其构造方法要进行线程的创建,以及有一个方法能将任务注册到 任务队列 中,以便让线程来执行。),执行拒绝策略(招临时员工后,也干不完,就拒绝,不接任务了)(公司内一个员工也没有)原创 2023-03-19 15:55:23 · 322 阅读 · 0 评论 -
多线程案例——定时器
定时器类似一个闹钟,经过指定的时间后执行要求的代码。1.描述一个任务: Runnable +time2.使用优先级队列来组织若干个任务:PriorityBlockingQueue3. 实现 schedule方法来将任务放入优先级队列中4.创建一个线程,用这个扫描线程不断获取队列的队首元素,并且判断时间是否到达5.注意:①让 MyTimerTask支持比较;②解决线程的忙等问题原创 2023-03-18 23:40:47 · 368 阅读 · 0 评论 -
多线程案例——阻塞队列
阻塞队列同样是一个符合先进先出的队列,相比于普通队列,阻塞队列还有其他的功能:基于上述特点的阻塞队列,我们就可以实现“(处理多线程问题的一个典型方式)生产者消费者模型:通过一个容器(阻塞队列),来解决生产者消费者之间的强耦合问题。(生产者生产商品,消费者购买商品)。原创 2023-03-17 18:53:47 · 845 阅读 · 0 评论 -
多线程案例——单例模式(饿汉模式和懒汉模式)
单例模式是设计模式之一,单例模式要求代码中的某个类,只能有一个实例,不能有多个。这种单例模式在开发中非常常见,例如 JDBC 中的 DataSource 这样的对象等等。和饿汉的单例模式是比较着急的去进行创建实例。懒汉的单例模式是不太着急的去创建实例,只是在用的时候才真正创建。原创 2023-03-14 21:03:15 · 521 阅读 · 0 评论 -
多线程——多线程安全(synchronized和volatile)、wait和notify
假设 count = 0,使用线程一和线程二同时对 count++,预期结果是 count = 2,但是如果是上述情况的话,线程一拿走 0 到他的寄存器进行计算得 1,还没将 1 返回到内存中,线程二就像 内存 中 count 的值 0 拿到了他的寄存器中,然后再进行计算得 1,最后两个线程将其寄存器的值返回到内存中 的 count,结果是 1。当一个线程还没有释放锁,然后又尝试获取锁时,会出现如下情况:第一次获取锁成功,第二次获取锁时,锁还没有被释放,则该线程就会一直处于阻塞状态,直到锁被释放。原创 2023-03-14 11:59:14 · 540 阅读 · 3 评论 -
线程的状态、状态之间的相互转换
一、线程的状态。原创 2023-03-13 19:35:19 · 532 阅读 · 0 评论 -
线程的创建、线程的基础方法(详细)
当进程中有多个线程时,此时每个线程都有一个PCB(在Linux 中,进程和线程也没有明显区分,线程被称为轻量级进程),一个进程就对应了一组 PCB。也可能会出现如下情况,因为这里用到了多线程,t1 线程和 t2 线程是并发运行的,所以谁先输出是不确定的。多个线程之间的调度顺序是不确定的,有时需要控制线程的执行顺序,要控制线程之间的顺序,其中一种方法就是线程等待。在如下代码中,调用 join 方法的线程是 main 线程,是针对 t 线程对象调用的,此时就是。join 操作默认情况下,是死等,不合理。原创 2023-03-13 15:31:07 · 1444 阅读 · 0 评论