![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java EE 初
文章平均质量分 85
学习JavaEE初级的内容
一只小月亮
努力学习的每一天
展开
-
【Java EE】网络原理——HTTPS
HTTPS工作过程中涉及到的密钥有三组。第⼀组(⾮对称加密): ⽤于校验证书是否被篡改. 服务器持有私钥(私钥在注册证书时获得), 客⼾端持有公钥(操作系统包含了可信任的 CA 认证机构有哪些, 同时持有对应的公钥). 服务器使⽤这个私钥对证书的签名进⾏加密. 客⼾端通过这个公钥解密获取到证书的签名, 从⽽校验证书内容是否是篡改过.原创 2024-06-04 08:30:00 · 1084 阅读 · 1 评论 -
【Java EE】网络原理——几种方式构造HTTP请求
从前端角度,除了浏览器地址栏能构造GET请求,form表单能构造GET和POST之外,还可以通过ajax的方式来构造HTTP请求,并且功能更强大。所谓的“接受HTTP响应”,本质上就是从TCP Socket中读取一个字符串,再按照HTTP的格式来解析。我们基于Socket的知识,完全可以构造出一个简单的HTTP客户端程序,用来发送各种类型的HTTP请求。所谓的“发送HTTP请求”,本质上就是按照HTTP的格式往TCP Socket中写入一个字符串。修改上面的代码,把form的method修改为POST。原创 2024-05-30 09:00:00 · 658 阅读 · 0 评论 -
【Java EE】网络原理——HTTP响应
表示访问被拒绝,有的页面通常需要用户具有一定的权限才能访问(登录后才能访问),如果用户没有登录直接访问,很容易就见到403.当服务器负载比较大的时候,服务器处理单条请求的时候消耗的时间就会很长,就可能会导致出现超时的情况。类似于Content-Type,Content-Length等属性的含义也和请求中的含义一致。但是对方的服务器不一定都支持所有的方法(或者不允许用户使用一些其他的方法)当浏览器收到这种响应时,后续的请求都会自动改成新的地址。响应报头的基本格式和请求报头的格式基本一致。原创 2024-05-29 08:30:00 · 860 阅读 · 0 评论 -
【Java EE】网络原理——HTTP请求
Cookie存储了一个字符串,这个数据可能是客户端(网页)自行通过JS写入的,也可能来自于服务器(服务器在HTTP响应的header中通过Set-Cookie字段给浏览器返回数据)互联网上的每个文件都有一个唯一的URL,它包含的信息指出文件的位置以及浏览器应该怎么处理它呢?在登陆页面,输入用户名,密码,验证码之后,点击登录,就可以看到POST请求。另外,HTML中的LInk,img,script等标签,也会触发GET请求。协议名,IP地址/域名,端口号,带层次的文件路径,查询字符串,片段标识。原创 2024-05-28 16:45:48 · 1804 阅读 · 0 评论 -
【Java EE】网络协议——HTTP协议
思考问题:为什么HTTP报文中要存在“空行”?因为HTTP协议并没有规定报头部分的键值对有多少个,空行就相当于是“报头的结束标记”,或者是“报头和正文之间的分隔符”。HTTP在传输层依赖TCP协议,TCP是面向字节流的。如果没有这个空行,就会出现“粘包问题”。原创 2024-05-26 09:00:00 · 1294 阅读 · 0 评论 -
【Java EE】网络原理——DNS
重要的应用层协议——DNS。DNS是一整套从域名映射到IP的系统。原创 2024-05-22 09:00:00 · 610 阅读 · 0 评论 -
【Java EE】网络原理——数据链路层
认识以太网。以太网帧格式。认识MAC地址。对比理解MAC地址和IP地址。认识MTU。MTU对IP协议的影响。MTU对UDP的影响。MTU对于TCP协议的影响。ARP协议ARP协议的作用和ARP协议的工作流程。原创 2024-05-21 16:50:05 · 1021 阅读 · 0 评论 -
【Java EE】网络原理——网络层
在复杂的网络环境中确定一个合适的路径。原创 2024-05-16 22:06:39 · 630 阅读 · 0 评论 -
【Java EE】网络原理——TCP2
出现说明服务器触发了大量的主动断开的TCP连接操作,这样的操作对于服务器来说是不科学的,一般都是客户端主动断开的。TCP引入慢启动机制,先发少量的数据,探探路,摸清当前的网络拥堵状态,再决定按照多大的速度传输数据。窗口越大,网络吞吐量就越大,传输效率就越高,我们的目标是保证网络不拥塞的情况下尽量提高传输效率。在延时应答的基础上,我们发现,很多情况下,客户端服务器在应用层上也是“一发一收”的。只要不是所有的ACK都丢了,也不需要进行任何处理,因为后续的ACk可以进行确认。大量的丢包,我们就认为网络拥塞。原创 2024-05-13 09:00:00 · 810 阅读 · 0 评论 -
【Java EE】网络原理——TCP1
四次挥手的ACK是内核控制的;两次:不可行,此时服务器对于发送能力和接受能力认知是不完整的,需要三次交互才能把客户端掌握的完整情况,告知给服务器。因此,主机B会收到很多的重复数据,那么TCP协议需要能够识别出那些包是重复的包,并且把重复的丢弃掉。在一定时间之内,如果没有收到重传的fin,那么最后一个ack已经被对方收到了,就不会重传fin。每次建立的连接都是一个新的数字,作为起始的序号,差别很大的直接丢弃,防止不同的干扰。通信双方共同协商一下,有的参数不是单方面确认的需要双方共同来确认出来的。原创 2024-05-12 09:28:03 · 1026 阅读 · 1 评论 -
【Java EE】网络原理——UDP
端口号的组成 :IP地址(确认主机)+端口号(主机上的应用程序)。如何定义协议(1)确定传输信息(2)确定数据格式(xml,json,yml,protobutfer)。UDP协议首部中有一个16位的最大长度,也就是说一个UDP能传输的数据最大长度是64kb(包含首部)如果我们需要传输的数据超过64kb,就需要在应用层手动的分包,多次发送,并在接收端手动拼装。如果一个是TCP,一个是UDP,此时重复并不影响。同一个机器上,同一时刻内,端口号不能重复被绑定。本质上,是引入额外的冗余信息,验证原有信息。原创 2024-05-09 16:05:11 · 1285 阅读 · 0 评论 -
【Java EE】文件内容的读写——数据流
修饰符及返回值类型方法签名说明intread()读取一个字节的数据,返回-1代表已经完全读完了。int最多读取b.length字节的数据到b中,返回实际读取到的数量;-1代表以及读完了int最多读取len-off字节的数据到b中,放在off开始,返回实际读取到的数量;-1代表以及读取完了voidclose()关闭字节流说明InputStream只是一个抽象类,要使用还需要具体的实现类。原创 2024-04-21 22:19:46 · 1334 阅读 · 0 评论 -
【Java EE】文件操作
文件的内容,及文件的使用原创 2024-04-18 21:55:53 · 1236 阅读 · 0 评论 -
【Java EE】多线程-进阶-锁策略
ABA的问题:假设存在两个线程t1和t2,有一个共享变量num,初始值A。接下来,线程t1想使用CAS把num值改成Z,那么就需要先读取num的值,记录到oldNum变量中。使用CAS判定当前num的值是否为A,如果为A,就修改成Z。但是,在t1执行这两个之间,t2线程可能吧num的值从A改成了B,又从B改成了A。原创 2024-04-17 22:57:29 · 872 阅读 · 0 评论 -
synchronized 关键字 - 监视器monitor lock
针对每一把锁,操作系统内部都维护了一个等待队列,当这个锁被某一个线程占有的时候,其他线尝试进行加锁,就加不上了,就会阻塞等待,一直等到之前的线程解锁之后,由操作系统唤醒一个新的线程,再来获取到这个锁。按照之前对于锁的设定,第二次加锁的时候,就会阻塞等待,直到第一次的锁被释放,才能获取到第二次锁,但是释放第一个锁也是由该线程来完成的,结果这个线程已经躺平了,也就无法进行解锁操作,这时候就会死锁。还有的虽然没有加锁,但是不涉及“修改”,仍然线程是安全的。一个线程先上了锁,其他的线程只能等待这个线程释放。原创 2024-03-28 09:00:00 · 911 阅读 · 1 评论 -
线程的安全问题
编译器在对于指令重排序的前提是“保持逻辑不发生变化”,这一点在单线程下比较容易判断,但是在多线程环境下就没有那么容易了,多线程的代码执行程度更加复杂,编译器很难在编译阶段对代码的执行效果进行预测,因此激进的重排序很容易导致优化后的逻辑和之前的不等价。由于每一个线程都有自己的工作内存,这些工作内存中的内容相当于同一个共享变量的“副本”,此时,修改线程1的工作内存的值,线程2的工作内存也不一定会发生及时变化。如果多线程环境下代码运行的结果是符合我们预期的,即在单线程环境应该的结果,这说明这个程序是线程安全的。原创 2024-03-26 14:00:00 · 621 阅读 · 0 评论 -
计算机的进程
每个应用程序运行于现代操作系统上时,操作系统会提供一种抽象,好像系统上只有这个程序在运行,所有的硬件资源都被这个程序在使用。这种假象是通过抽象了一个进程的概念来完成的,进程可以说是计算机科学中最重要和最成功的概念之一。进程是操作系统对一个正在运行的程序的一种抽象,换言之,可以把进程看做程序的一次运行过程。进程可以视为操作系统进行资源分配的基本单位。原创 2024-03-21 22:22:56 · 360 阅读 · 0 评论 -
计算机的线程2
2.实现Runnable接口,this表示的是MyRunnable的引用。2.创建Thread 类实例,调用Thread的构造方法时将Runnable对象作为target。serial 串行的完成一系列的运算。concurrency 使用两个线程并行的完成同样的运算。1.继承Thread类,直接使用this就表示当前线程对象的引用。可以观察多线程在一些场合下是可以提高程序的整体运行效率的。1.匿名内部类创建Thread子类对象。继承Thread类来创建一个线程类。创建MyThread类的实例。原创 2024-03-23 08:00:00 · 317 阅读 · 0 评论 -
计算机的线程1
一个进程中可以包含一个线程或多个线程。进程和PCB之间是一对多的关系。进程是系统资源分配的基本单位线程是系统调度执行的基本单位。原创 2024-03-22 09:00:00 · 620 阅读 · 0 评论