JavaEE初阶
文章平均质量分 94
Java EE (Java Enterprise Edition) ,是一组用于开发大型企业级应用的 Java 技术标准。它提供了一组标准的 API 和架构,以支持企业级应用的开发。能够帮助开发人员快速开发出高性能、可扩展性强的企业级应用,并且提供了许多可重用的组件和工具,以帮助减少开发时间和成本
遇事问春风乄
长风破浪会有时,直挂云帆济沧海
展开
-
【JavaEE初阶】 关于JVM垃圾回收
Java运行时内存的各个区域。对于程序计数器、虚拟机栈、本地方法栈这三部分区域而言,其生命周期与相关线程有关,随线程而生,随线程而灭。并且这三个区域的内存分配与回收具有确定性,因为当方法结束或者线程结束时,内存就自然跟着线程回收了。因此我们本节课所讲的有关内存分配和回收关注的为Java堆与方法区这两个区域。Java堆中存放着几乎所有的对象实例,垃圾回收器在对堆进行垃圾回收前,首先要判断这些对象哪些还存活,哪些已经"死去"。判断对象是否已"死"有如下几种算法。原创 2024-03-08 15:45:47 · 1085 阅读 · 46 评论 -
【JavaEE初阶】 JVM类加载简介
本篇博文的重点内容主要有以下两点类加载的过程双亲委派模型如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成,每一个层次的类加载器都是如此,因此所有的加载请求最 终都应该传送到最顶层的启动类加载器中,只有当父加载器反馈自己无 法完成这个加载请求(它的搜索范围中没有找到所需的类)时,子加载器才会尝试自己去完成加载启动类加载器:加载 JDK 中 lib 目录中 Java 的核心类库,即$JAVA_HOME/lib目录。扩展类加载器。原创 2024-03-08 15:45:37 · 1793 阅读 · 14 评论 -
【JavaEE初阶】 JVM 运行时数据区简介
VM 运行时数据区域也叫内存布局,但需要注意的是它和 Java 内存模型((Java Memory Model,简称JMM)完全不同,属于完全不同的两个概念,它由以下 5 大部分组成。原创 2024-03-07 22:33:57 · 1424 阅读 · 43 评论 -
【JavaEE初阶】 JVM简介
JVM 是 Java Virtual Machine 的简称,意为 Java虚拟机。虚拟机是指通过软件模拟的具有完整硬件功能的、运行在一个完全隔离的环境中的完整计算机系统。常见的虚拟机:JVM、VMwave、Virtual Box。VMwave与VirtualBox是通过软件模拟物理CPU的指令集,物理系统中会有很多的寄存器;JVM则是通过软件模拟Java字节码的指令集,JVM中只是主要保留了PC寄存器,其他的寄存器都进行了裁剪。JVM 是一台被定制过的现实当中不存在的计算机。原创 2024-03-07 22:33:34 · 1054 阅读 · 17 评论 -
【JavaEE初阶】 详解HTTPS协议加密过程
HTTPS 工作过程中涉及到的密钥有三组第一组(非对称加密): 用于校验证书是否被篡改. 服务器持有私钥(私钥在注册证书时获得), 客户端持有公钥(操作系统包含了可信任的 CA 认证机构有哪些, 同时持有对应的公钥). 服务器使用这个私钥对证书的签名进行加密. 客户端通过这个公钥解密获取到证书的签名, 从而校验证书内容是否是篡改过.原创 2023-11-30 16:47:03 · 796 阅读 · 131 评论 -
【JavaEE初阶】 HTTP响应报文
关于HTTP响应报文,大部分都与请求报文类似,这里主要介绍一下响应报文里面的 “状态码” (status code)以下为常见的状态码这是一个最常见的状态码, 表示访问成功.抓包抓到的大部分结果都是 200例如下面抓的这个包可能响应报文正文太大了,网络传输中 “带宽” 是一个稀缺资源, 为了传输效率更高往往会对数据进行压缩。所以在抓包观察响应数据的时候, 可能会看到压缩之后的数据, 形如:我们可以点击点击 Fiddler 中的一下选项即可进行解压缩, 看到原始的内容没有找到资源浏览器输入一个原创 2023-11-29 17:13:20 · 777 阅读 · 57 评论 -
【JavaEE初阶】 HTTP 请求 (Request)详解
Cookie 要回到服务器, 当客户端收到 Set-Cookie 中的数据后, 后续每次请求网页的时候, 给服务器发送的请求报文中都有一个 Cookie 字段, 相当于把 Cookie 里面的值再带给服务器。Cookie (中存储的数据)从服务器来: 第一次登陆一个网站的时候, 服务器会返回一个响应, 在这个响应报文中, 通过 Set-Cookie 把需要存储的值返回给客户端, 客户端进行存储。此时我选择辣度=少辣,香菜=多加,加饭=不加,汤汁=多加,此时类似这种就表示。原创 2023-11-29 17:11:48 · 944 阅读 · 18 评论 -
【JavaEE初阶】 HTTP协议和使用Fiddler抓包
由抓包可知协议格式如下HTTP 报文中此处存在的 "空行"是因为 HTTP 协议并没有规定报头部分的键值对有多少个. 空行就相当于是 “报头的结束标记”, 或者是 “报头和正文之间的分隔符”.HTTP 在传输层依赖 TCP 协议, TCP 是面向字节流的. 如果没有这个空行, 就会出现 “粘包问题”.原创 2023-11-28 13:40:48 · 524 阅读 · 57 评论 -
【JavaEE初阶】 博客系统项目--前端页面设计实现
主要分成四个页面:- 博客列表页- 博客正文页- 博客登陆页- 博客编辑页下面只是部分代码,想要完整代码的小伙伴,可以去博主的gitee码云仓库进行查看原创 2023-11-27 17:07:37 · 653 阅读 · 76 评论 -
【JavaEE初阶】 JavaScript相应的WebAPI
前面学习的 JS 分成三个大的部分ECMAScript: 基础语法部分DOM API: 操作页面结构BOM API: 操作浏览器WebAPI 就包含了 DOM + BOM前面学的 JS 基础语法主要学的是 ECMAScript, 这让我们建立基本的编程思维. 相当于练武需要先扎马步.但是真正来写一个更加复杂的有交互式的页面, 还需要 WebAPI 的支持. 相当于各种招式API 是一个更广义的概念. 而 WebAPI 是一个更具体的概念, 特指 DOM+BOM。原创 2023-11-23 17:23:24 · 774 阅读 · 112 评论 -
【JavaEE初阶】 JavaScript基础语法——贰
关于《【JavaEE初阶】 JavaScript基础语法——贰》就讲解到这儿,HTML 只是描述了页面的骨架结构.使用 CSS 可以针对页面进行进一步美化,JavaScript可以赋予灵魂。关于JavaScript的后续讲解,请关注博主后续创作。原创 2023-11-21 20:28:25 · 1014 阅读 · 79 评论 -
【JavaEE初阶】 JavaScript基础语法——壹
接下来我们一起来感受一下JS的语法,关于语法部分,由于一些逻辑与代码的书写与Java类似,所以博主这里只会重点介绍不同的地方,关于DOM与BOM博主会在后续博文进行讲解原创 2023-11-21 17:42:04 · 722 阅读 · 65 评论 -
【JavaEE初阶】 CSS相关属性,元素显示模式,盒模型,弹性布局,Chrome 调试工具||相关讲解
关于《【JavaEE初阶】 CSS相关属性,元素显示模式,盒模型,弹性布局,Chrome 调试工具||相关讲解》就讲解到这儿,HTML 只是描述了页面的骨架结构.使用 CSS 可以针对页面进行进一步美化。原创 2023-11-20 22:40:46 · 1227 阅读 · 92 评论 -
【JavaEE初阶】 CSS的引入方式和选择器
关于《【JavaEE初阶】 CSS的引入方式和选择器》就讲解到这儿,HTML 只是描述了页面的骨架结构.使用 CSS 可以针对页面进行进一步美化。原创 2023-11-18 12:46:22 · 998 阅读 · 117 评论 -
【JavaEE初阶】 HTML基础详解
HTML 是用来描述网页的一种语言。HTML 指的是超文本标记语言: HyperText Markup LanguageHTML 不是一种编程语言,而是一种标记语言标记语言是一套标记标签 (markup tag)HTML 使用标记标签来描述网页HTML 文档包含了HTML 标签及文本内容HTML文档也叫做 web 页面一个简单的HTML程序,我们可以直接创建一个文本文档然后我们对该文件进行改名,后缀变为.html即可点击既可以运行了那什么是标签呢?原创 2023-11-15 21:38:37 · 1116 阅读 · 105 评论 -
【JavaEE初阶】IP协议简介
IP指网际互连协议,Internet Protocol的缩写,是TCP/IP体系中的网络层协议。设计IP的目的是提高网络的可扩展性:一是解决互联网问题,实现大规模、异构网络的互联互通;二是分割顶层网络应用和底层网络技术之间的耦合关系,以利于两者的独立发展。根据端到端的设计原则,IP只为主机提供一种无连接、不可靠的、尽力而为的数据包传输服务。原创 2023-11-14 16:03:59 · 857 阅读 · 103 评论 -
【JavaEE初阶】 TCP协议详细解析
TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。源/目的端口号:表示数据是从哪个进程来,到哪个进程去;32位序号/32位确认号:后面详细讲;4位TCP报头长度:表示该TCP头部有多少个32位bit(有多少个4字节);所以TCP头部最大长度是15 * 4 = 606位标志位:URG:紧急指针是否有效ACK:确认号是否有效PSH:提示接收端应用程序立刻从TCP缓冲区把数据读走RST:对方要求重新建立连接;我们把携带R原创 2023-11-11 20:03:16 · 1234 阅读 · 103 评论 -
【JavaEE初阶】 TCP滑动窗口与流量控制和拥塞控制
了解确认应答策略的人都知道,对每一个发送的数据段,都要给一个ACK确认应答。收到ACK后再发送下一个数据段。这样做有一个比较大的缺点,就是性能较差。尤其是数据往返的时间较长的时候。那我们就想,既然这样一发一收的方式性能较低,那么我们一次发送多条数据,就可以大大的提高性能(其实是将多个段的等待时间重叠在一起了)。举个例子吧而我们这里的窗口就相当于你一次能带饭的数量,TCP的窗口大小表示的是:窗口大小指的是无需等待确认应答而可以继续发送数据的最大值。上图的窗口大小就是4000个字节(四个段)。发送前四原创 2023-11-11 16:57:48 · 632 阅读 · 65 评论 -
【JavaEE初阶】 TCP三次握手四次挥手(超详细版)
在正常情况下,TCP要经过三次握手建立连接,四次挥手断开连接整体过程如下:该过程对应着很多种状态的转换服务端状态转化[CLOSED -> LISTEN] 服务器端调用listen后进入LISTEN状态,等待客户端连接;[LISTEN -> SYN_RCVD] 一旦监听到连接请求(同步报文段),就将该连接放入内核等待队列中,并向客户端发送SYN确认报文。[SYN_RCVD -> ESTABLISHED] 服务端一旦收到客户端的确认报文,就进入ESTABLISHED状态,可以进行读写数据了。[ESTABLI原创 2023-11-10 19:07:19 · 927 阅读 · 85 评论 -
【JavaEE初阶】 UDP协议的详细解析
UDP是传输层的协议,功能即为在IP的数据报服务之上增加了最基本的服务:复用和分用以及差错检测。UDP的传输形式是基于数据报的,UDP数据报分为首部和用户数据部分,整个UDP数据报作为IP数据报的数据部分封装在IP数据报中,UDP数据报文结构如图所示:UDP首部有8个字节,由4个字段构成,每个字段都是两个字节,首先我们的首部得包含我们发送方的端口和接收方的地址,这样我们的发送端才知道需要发向那里;接收方做出的响应才知道回给谁源端口: 源端口号,需要对方回信时选用,不需要时全部置0.目的端口:目的端口号,原创 2023-11-07 21:39:18 · 725 阅读 · 55 评论 -
【JavaEE初阶】 TCP服务器与客户端的搭建
TCP服务器与客户端的搭建需要借助以下APITCP之间通信通过流进行传输,无论是服务器还是客户端:读取内容用输入流,写入内容用输出流。原创 2023-11-06 21:36:08 · 3190 阅读 · 96 评论 -
【JavaEE初阶】 UDP服务器与客户端的搭建
我们用Java实现UDP数据报套接字编程,需要借用以下API来实现。原创 2023-11-05 22:15:50 · 897 阅读 · 26 评论 -
【JavaEE初阶】 网络编程基础与Socket套接字
网络编程,指网络上的主机,通过不同的进程,以编程的方式实现网络通信(或称为网络数据传输)。当然,我们只要满足进程不同就行;所以即便是同一个主机,只要是不同进程,基于网络来传输数据,也属于网络编程特殊的情况,对于开发来说,在条件有限的情况下,一般也都是在一个主机中运行多个进程来完成网络编程。但是,我们一定要明确,我们的目的是提供网络上不同主机,基于网络来传输数据资源:进程A:编程来获取网络资源进程B:编程来提供网络资源。原创 2023-11-03 14:57:56 · 1385 阅读 · 148 评论 -
【JavaEE初阶】 初识网络原理
网络的发展大致经过如下几个阶段独立模式:计算机之间相互独立;可以理解为单机随着时代的发展,越来越需要计算机之间互相通信,共享软件和数据,即以多个计算机协同工作来完成业务,就有了网络互连。网络互连:将多台计算机连接在一起,完成数据共享。数据共享本质是网络数据传输,即计算机之间通过网络来传输数据,也称为网络通信。根据网络互连的规模不同,可以划分为局域网和广域网局域网,即 Local Area Network,简称LAN。Local 即标识了局域网是本地,局部组建的一种私有网络。局域网内的主机之间能方便的进行网原创 2023-11-02 15:45:06 · 1000 阅读 · 107 评论 -
【JavaEE初阶】 文件内容的读写 —— 数据流
数据流是一串连续不断的数据的集合,就象水管里的水流,在水管的一端一点一点地供水,而在水管的另一端看到的是一股连续不断的水流。数据写入程序可以是一段、一段地向数据流管道中写入数据,这些数据段会按先后顺序形成一个长的数据流。对数据读取程序来说,看不到数据流在写入时的分段情况,每次可以读取其中的任意长度的数据,但只能先读取前面的数据后,再读取后面的数据。不管写入时是将数据分多次写入,还是作为一个整体一次写入,读取时的效果都是完全一样的。“流是磁盘或其它外围设备中存储的数据的源点或终点。”在电脑上的数据有三种存储方原创 2023-11-01 11:16:07 · 875 阅读 · 86 评论 -
【JavaEE初阶】 认识文件与Java中操作文件
我们先来认识狭义上的文件(file)。针对硬盘这种持久化存储的I/O设备,当我们想要进行数据保存时,往往不是保存成一个整体,而是独立成一个个的单位进行保存,这个独立的单位就被抽象成文件的概念,就类似办公桌上的一份份真实的文件一般。同时,随着文件越来越多,对文件的系统管理也被提上了日程,如何进行文件的组织呢,一种合乎自然的想法出现了,就是按照层级结构进行组织 —— 也就是我们数据结构中学习过的树形结构。这样,一种专门用来存放管理信息的特殊文件诞生了,也就是我们平时所谓文件夹(folder)或者目录(direc原创 2023-10-31 16:05:44 · 1869 阅读 · 85 评论 -
【JavaEE初阶】 线程安全的集合类
原来的集合类, 大部分都不是线程安全的.Vector, Stack, HashTable, 是线程安全的(不建议用), 其他的集合类不是线程安全的.为什么不建议使用呢?因为我们在使用的时候,这些类就会自动的加锁,虽然编译器会自动优化为没有锁竞争的线程进行锁消除的优化,但是呢万一编译器没有优化好,就麻烦了所以我们更多的是搭配一下其他方案达到线程安全,比如以下几种。原创 2023-10-26 22:11:57 · 2332 阅读 · 75 评论 -
【JavaEE初阶】 JUC(java.util.concurrent) 的常见类
ReentrantLock是可重入互斥锁. 和 synchronized 定位类似, 都是用来实现互斥效果, 保证线程安全.我们从字面意思上就可以知道 “Reentrant” 这个单词的原意就是 "可重入”,所以ReentrantLock 也是可重入锁.lock(): 加锁, 如果获取不到锁就死等.trylock(超时时间): 加锁, 如果获取不到锁, 等待一定的时间之后就放弃加锁.unlock(): 解锁代码示例如下:🚩ReentrantLock 和 synchronized 的区别synch原创 2023-10-26 21:37:54 · 1715 阅读 · 21 评论 -
【JavaEE初阶】 Callable 接口
Callable 是一个 interface . 相当于把线程封装了一个 “返回值”. 方便程序猿借助多线程的方式计算结果比如我们有以下需求创建线程计算 1 + 2 + 3 + … + 1000, 如果我们不使用 Callable不使用 Callable的实现过程如下:建一个类 Result , 包含一个 sum 表示最终结果, lock 表示线程同步使用的锁对象.main 方法中先创建 Result 实例, 然后创建一个线程 t. 在线程内部计算 1 + 2 + 3 + … + 1000.主线程同时使用原创 2023-10-26 20:05:25 · 1969 阅读 · 54 评论 -
【JavaEE初阶】 Synchronized 原理详解
我们可以看到, synchronized 的策略是比价复杂的, 在背后做了很多事情, 目的为了让程序猿哪怕啥都不懂,也不至于写出特别慢的程序1024程序节祝全体程序员万事如意、身体健康,节日快乐!原创 2023-10-24 15:32:33 · 2343 阅读 · 90 评论 -
【JavaEE初阶】 CAS详解
CAS: 全称Compare and swap,字面意思:”比较并交换“这样解释还是很茫然,我们来看一下一个CAS 涉及到的操作就明白CAS是啥了我们假设内存中的原数据V,旧的预期值A,需要修改的新值B。比较 A 与 V 是否相等。(比较)如果比较相等,将 B 写入 V。(交换)返回操作是否成功意思就是我们现再假设有一个寄存器,里面存储的是A和B的值,我们这里为了后面方便叙述,我们另A= 1,B= 2;还有一个内存里面存储的是V的值,此处先假设V = 1。原创 2023-10-24 12:51:27 · 2269 阅读 · 57 评论 -
【JavaEE初阶】 常见的锁策略详解
接下来讲解的锁策略不仅仅是局限于 Java . 任何和 “锁” 相关的话题, 都可能会涉及到以下内容. 这些特性主要是给锁的实现者来参考的.普通的程序猿也需要了解一些, 对于合理的使用锁也是有很大帮助的悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁。乐观锁:假设数据一般情况下不会产生并发冲突,所以在数据进行提交更新的时候,才会正式对数据是否产生并发冲突进行检测,如果发现并发冲突了,则让返回用户错误的信息,让用户决定如原创 2023-10-23 21:54:18 · 661 阅读 · 68 评论 -
【JavaEE初阶】 线程池详解与实现
线程池,是一种线程的使用模式,它为了降低线程使用中频繁的创建和销毁所带来的资源消耗与代价。通过创建一定数量的线程,让他们时刻准备就绪等待新任务的到达,而任务执行结束之后再重新回来继续待命。线程池最核心的设计思路:复用线程,平摊线程的创建与销毁的开销代价相比于来一个任务创建一个线程的方式,使用线程池的优势体现在如下几点:提升了响应速度是怎么体现的呢?这里博主和大家详细说一下:此时呢,我们的线程池就像方法一,我们可以利用已经存在的线程自己完成操作,而不是去重新创建。Executors 创建方式有以下几个注意上述原创 2023-10-22 22:07:32 · 1460 阅读 · 101 评论 -
【JavaEE初阶】 定时器详解与实现
定时器也是软件开发中的一个重要组件. 类似于一个 “闹钟”. 达到一个设定的时间之后, 就执行某个指定好的代码标准库中提供了一个 Timer 类. Timer 类的核心方法为 schedule .schedule 包含两个参数.第一个参数指定即将要执行的任务代码,第二个参数指定多长时间之后执行 (单位为毫秒)代码示例:下面程序分别有一个定时器,设置了三个不同的时间运行结果如下:结果如我们所示,按照时间顺序进行打印首先我们先来看一下定时器的构成队列中的每个元素是一个 MyTask 对象.MyTask 中原创 2023-10-21 10:54:44 · 963 阅读 · 89 评论 -
【JavaEE初阶】 阻塞式队列详解
阻塞队列是一种特殊的队列. 也遵守 “先进先出” 的原则.阻塞队列能是一种线程安全的数据结构, 并且具有以下特性:当队列满的时候, 继续入队列就会阻塞, 直到有其他线程从队列中取走元素.当队列空的时候, 继续出队列也会阻塞, 直到有其他线程往队列中插入元素.阻塞队列的一个典型应用场景就是 “生产者消费者模型”. 这是一种非常典型的开发模型生产者消费者模式就是通过一个容器来解决生产者和消费者的强耦合问题。那什么是耦合呢?耦合是两个或多个模块之间的相互关联。在软件工程中,两个模块之间的耦合度越高,维护成本越高原创 2023-10-20 10:28:23 · 722 阅读 · 83 评论 -
【JavaEE初阶】 饿汉模式与懒汉模式详解与实现
单例模式是校招中最常考的设计模式之一.那么啥是设计模式呢?设计模式好比象棋中的 “棋谱”. 红方当头炮, 黑方马来跳. 针对红方的一些走法, 黑方应招的时候有一些固定的套路. 按照套路来走局势就不会吃亏.软件开发中也有很多常见的 “问题场景”. 针对这些问题场景, 大佬们总结出了一些固定的套路. 按照这个套路来实现代码, 也不会吃亏.那么什么是单例模式呢?单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种原创 2023-10-14 19:53:09 · 748 阅读 · 14 评论 -
【JavaEE初阶】 volatile关键字 与 wait()方法和notify()方法详解
首先我们知道,volatile是一个关键字,那么它有什么作用?又具有那些特性呢?请看下文volatile修饰的变量, 能够保证 “内存可见性”.这是什么意思呢?首先我们先来看一下下面这个例子:创建两个线程 t1 和 t2t1 中包含一个循环, 这个循环以 flag == 0 为循环条件.t2 中从键盘读入一个整数, 并把这个整数赋值给 flag.预期当用户输入非 0 的值的时候, t1 线程结束但是当我们运行后我们会发现:程序并没有跟我们想象中一样停止这是什么原因呢?其实这就与我们的内存有关了,这里博原创 2023-10-13 18:06:15 · 952 阅读 · 28 评论 -
【JavaEE初阶】 死锁详解
本文重点:死锁咋回事死锁的三个典型情况死锁的四个必要条件如何破除死锁。原创 2023-10-12 11:18:46 · 1427 阅读 · 20 评论 -
【JavaEE初阶】 synchronized关键字详解
我们重点要理解,synchronized 锁的是什么.两个线程竞争同一把锁, 才会产生阻塞等待两个线程分别尝试获取两把不同的锁, 不会产生竞争.原创 2023-10-11 22:02:41 · 937 阅读 · 100 评论 -
【JavaEE初阶】 线程安全
线程安全是多线程编程是的计算机程序代码中的一个概念。在拥有共享数据的多条线程并行执行的程序中,线程安全的代码会通过同步机制保证各个线程都可以正常且准确的执行,不会出现数据污染等意外情况。上述是百度百科给出的一个概念解释。换言之,线程安全就是某个函数在并发环境中调用时,能够处理好多个线程之间的共享变量,是程序能够正确执行完毕。也就是说我们想要确保在多线程访问的时候,我们的程序还能够按照我们的预期的行为去执行,那么就是线程安全了。我们可以这样认为:如果多线程环境下代码运行的结果是符合我们预期的,即在单线程环境应原创 2023-10-10 20:34:47 · 1708 阅读 · 105 评论