JavaEE初阶
文章平均质量分 65
JavaEE初阶
Pennywise.
这个作者很懒,什么都没留下…
展开
-
浅谈乐观锁与悲观锁
总是假设最坏情况, 每次去拿数据的时候都认为别人会修改, 所以每次在拿数据的时候都会上锁, 这样别人拿数据的时候就会阻塞, 直到锁被释放. 传统数据库用到了很多这种锁机制, 比如行锁, 表锁, 读锁, 写锁等, 都是在做操作之前先上锁. Java 中 synchronized 和 ReentrantLock 等独占锁就是悲观锁思想的实现.原创 2023-06-29 18:35:57 · 108 阅读 · 0 评论 -
数据链路层详解
由于拆出的这些IP数据报只有一份UDP首部,这个UDP首部里能够填写UDP长度的地方,也还是只有2个字节,只能装下64K大小的数据。如果承载的数据长度超过MTU,就会在IP层进行分包,使每个分出来的结果都能在MTU之内。6个字节比4个字节大了6w多倍,所以虽然IPv4不够用了,但是mac地址目前是够用的。虽然MTU有限制但是没关系,IP仍然可以保证传输一个更大的数据。虽然IP能拆包,但仍然不能改变UDP最大长度是64K这样的现实。所以mac地址也不需要动态分配,都是在网卡出厂的时候就写死了。原创 2023-05-12 10:11:14 · 42 阅读 · 0 评论 -
IP协议详解
每个网络上的设备,要能分配一个通常,会把32位整数,转换成点分十进制的表示方式三个点,把这个整数分成4个部分,每个部分,一个字节,每个部分的取值范围0-25532位整数最多能表示约42亿9千万不同的地址但全世界有很多的电脑,很多的服务器,很多的路由器,还有很多的手机如何解决上述问题?原创 2023-05-11 19:44:43 · 109 阅读 · 0 评论 -
UDP详解
每个端口在UDP报文里占两个字节其实端口号的取值范围 0->65536原创 2023-05-11 16:24:48 · 134 阅读 · 0 评论 -
TCP协议详解
而可靠传输是TCP的初心,也是最核心的机制这里的可靠传输,不是说100%的传过去(很难实现)而是尽可能的传过去,如果没有传送过去,发送方至少能自动自己没传过去。原创 2023-05-09 18:04:30 · 503 阅读 · 0 评论 -
TCP/IP 五层网络模型详解
TCP/IP五层网络模型是当下最广泛使用的网络模型,而OSI七层网络模型是仅存在于教科书上的为何需要ICP/IP五层网络模型:在网络通信中的环境其实是非常复杂的,面对复杂的环境,就需要复杂协议;于是就把协议拆分成了多个协议,针对这些小的协议进行分类;同时针对这些不同的类别进行分层:相当于约定了层级和层级之间的调用关系,,不能跨层调用。原创 2023-05-09 10:29:23 · 1771 阅读 · 1 评论 -
文件内容操作(java)
针对,提供了一组类,统称为"字符流"读写的基本单位:字符典型代表:Reader,Writer针对,提供了一组类,统称为"字节流"读写基本单位:字节典型代表:InputStream,OutputStream字节流有很多种读法:读一个100个字节的数据1.一次性读100字节2.一次读50字节,读两次3.一次读20字节,分5次读.......每种流的对象又分为两种:输入:Reader和InputStream输出:Writer,OutputStream。原创 2023-05-07 17:31:47 · 53 阅读 · 0 评论 -
文件操作(java)
我们平时谈到的"文件",指的是硬盘上的文件硬盘(外存)和内存相比:速度:内存比硬盘快很多空间:内存空间比硬盘小成本:内存比硬盘贵持久化:内存掉电后数据丢失,外存掉电后数据还在。原创 2023-05-07 11:18:19 · 28 阅读 · 0 评论 -
CAS如何实现
这样做的目的就是防止在count++的过程中count的值由于别的操作发生了变化,如果这时候将count的值变成count++后的值就导致count的值不准确。在进行++操作后,先看看address里的值是否等于expectValue,如果发生了变化,就不和swapValue进行交换。但是真正的CAS操作其实是一条CPU指令,这一条指令就能完成上述这一段代码的功能。expectValue就是进行++操作时刚拿进去的值。期望值,开始拿进来的时候的值。内存地址,储存的是现在的值。交换值,进行操作后的值。原创 2023-05-06 20:03:40 · 83 阅读 · 0 评论 -
synchronized详解
1.开始时是乐观锁,如果锁冲突频繁,就转换成了悲观锁2.开始时是轻量级锁,如果锁被持有的时间较长,就转换为重量级锁3.实现轻量锁的时候,大概率用的是自旋锁策略4.是互斥锁5.是可重入锁6.是非公平锁。原创 2023-05-06 18:36:53 · 25 阅读 · 0 评论 -
死锁的成因和解决方案
这种情况是当这个线程使用锁后没有进行解锁,然后再次使用锁的时候就会出现死锁的情况.当然,这个只能针对不可重入锁,对于可重入锁不造成影响.出现以下代码时就可能造成死锁当t1和t2同时进行第一把加锁就会出现死锁的情况线程数量和锁数量更多了,就更容易死锁了著名的哲学家的就餐问题这五个哲学家随机的拿起筷子吃饭和放下筷子如果他想拿起筷子,被别人占用了,就会就行等待,等的过程中不会放下已经拿起的筷子;假设这五个哲学家同时拿起左手边的筷子就死锁了但在线程中更加复杂,更容易出现死锁。原创 2023-05-06 17:43:36 · 126 阅读 · 0 评论 -
线程池(java)
核心线程数 可以看作是一个公司的正式员工最大线程数 正式员工+实习生这里解释一下所谓的正式员工和实习生如果当前任务比较多,线程池就会多创建一些"临时线程",也就是实习生如果当前任务少,比较空闲了,线程池就会把多出来的临时线程销毁掉;公司在比较忙的时候就会招一些实习生来缓解压力,但一旦空闲下来,实习生就会面临被辞退的风险临时线程保持存活的时间当公司空闲时,实习生不是立马被辞退,描述了允许实习生最大的摸鱼时间单位:s,min,ms线程池要管理很多任务 这些任务也是通过阻塞对略来组织的。原创 2023-05-05 18:21:31 · 35 阅读 · 0 评论 -
单例模式(java)
单例模式是一种经典的设计模式;设计模式就是软件开发中的棋谱,针对一些常见的场景,总结出来的代码编写套路设计模式有很多种,在校招阶段主要考察两个设计模式.1.单例模式2.工厂模式单例模式:单例 -> 单个实例 -> 一个对象也就是一个程序中的某个类,只能创建出一个对象,不能创建多个对象能够从语法上禁止多创建对象。原创 2023-05-04 15:27:13 · 27 阅读 · 0 评论 -
解决线程不安全
synchronized是java中的关键词,我们可以直接使用这个关键词来实现加锁的效果加锁的目的是什么?原创 2023-05-04 13:44:54 · 21 阅读 · 0 评论 -
多线程(java)
同一个进程里的多个线程之间,一个线程挂了,可能会把整个进程带走,影响到其他线程。当我们创建第一个线程的时候,操作系统就会申请系统资源去建立一个进程,当后续在创建线程,就不必再申请资源了,创建和销毁的效率就提高了不少。但一个进程可能会打开很多文件,这样就会产生一组文件描述符,把这些文件描述符放到一个顺序表这样的结构里,就构成了文件描述符表。而且每次使用一个进程时,就得进行创建,不使用的时候就得进行销毁,这样是非常耗费时间的;而每当我们创造一个进程的时候,就会消耗相对较多的资源,但我们可能会不能完全利用起来;原创 2023-05-03 16:47:10 · 43 阅读 · 0 评论