自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

一朵花花

程序媛养成记~~ 记录自己的编程之路

  • 博客(133)
  • 收藏
  • 关注

原创 IP 协议报文格式 【IPv4】

前言: IP 数据报文由首部(称为报头)和数据两部分组成;首部的前一部分是固定长度,共 20 字节,是所有 IP 数据报必须具有的;在首部的固定部分的后面是一些可选字段,其长度是可变的每个 IP 数据报都以一个 IP 报头开始;源计算机构造这个 IP 报头,而目的计算机利用 IP 报头中封装的信息处理数据;IP 报头中包含大量的信息,如源 IP 地址、目的 IP 地址、数据报长度、IP 版本号等;每个信息都被称为一个字段IP 协议报文格式版本号首部长度区分服务 TOS总长度如图所示:版本号占 4

2022-03-15 12:09:10 11467 2

原创 个人博客系统测试用例

个人博客系统测试用例:

2022-03-13 14:57:46 946

原创 认识模板引擎-Thymeleaf

模板引擎什么是模板引擎 ?原理 / 流程Thymeleaf 使用流程1. 通过 maven 引入依赖2. 创建 Html 模板文件3. 编写 Servlet 代码Thymeleaf 常用模板语法什么是模板引擎 ?【作用】模板引擎就是为了使用户界面与业务数据(内容)分离而产生的,它可以分离 Servlet Java 代码和 Html 网页代码(这是相对于 Servlet 直接返回动态页面来说,模板引擎的优点)原理 / 流程Thymeleaf 使用流程Thymeleaf 是 Java 中的模板引擎,

2022-03-10 14:34:45 728

原创 Servlet API详解

Servlet APIHttpServlet核心方法HttpServletRequestHttpServletResponseHttpServlet之前文章写 Servlet 代码的时候,首先第一步就是先创建类,且该类继承自 HttpServlet,并需重写其中的某些方法核心方法方法名调用时机init在 HttpServlet 实例化之后被调用一次destory在 HttpServlet 实例不再使用的时候调用一次service收到 HTTP 请求的时候调用

2022-03-09 10:00:23 652 2

原创 Servlet获取请求数据【HttpServletRequest】

HttpServletRequest方法了解getParamter 方法1.获取url QueryString中的数据2.获取body中表单格式3.获取form-data中的简单数据类型的数据getPart 方法getInputStream 方法当 Tomcat 通过 Socket API 读取 HTTP 请求(字符串),并且按照 HTTP 协议的格式把字符串解析成HttpServletRequest 对象方法了解部分方法:方法描述String getProtocol()返回

2022-03-07 09:19:11 13121 12

原创 Servlet 初识

ServletServlet 是什么?第一个 Servlet 程序: Hello World1.创建项目2.引入依赖3.创建目录4.编写代码5.打包程序6.部署程序7.验证程序简化部署方式安装 Smart Tomcat 插件配置 Smart Tomcat 插件访问出错情况404405500空白页面无法访问此网站总结Servlet 是什么?第一个 Servlet 程序: Hello World1.创建项目使用 IDEA 创建一个 Maven 项目新建项目 → Maven输入项目名称,并且选

2022-02-21 15:02:49 669 8

原创 Tomcat【 HTTP 服务器】

前言: 看到 Tomcat,都知道猫和老鼠里的 汤姆猫,但是,此处的 Tomcat 和猫和老鼠的"汤姆猫"一点关系都没有,Tomcat 本质是一个 Web 服务器Tomcat下载安装目录结构Tomcat 使用之前,我们已经学习了 HTTP协议,就是 HTTP 客户端和 HTTP 服务器之间的交互数据的格式下载安装在 Tomcat 官网 下载即可下载到自己想要存放的位置,然后解压即可,注意解压的目录最好不要包含 “中文” 或 特殊符号 或 空格目录结构针对 Tomcat 目录解压缩之后,可

2022-02-19 19:00:00 1011 8

原创 TCP 其他 7 大特性【滑动窗口机制▲】

滑动窗口机制认识滑动窗口丢包问题处理流量控制拥塞控制 (安全机制)延迟应答捎带应答滑动窗口机制,是在可靠性的前提下,进一步的提高传输效率认识滑动窗口一发一收的方式: TCP 协议需要对数据进行确认后,才可以发送下一个数据包,如图:如上图,发送端每发送一个数据包,都需要得到接收端的确认应答以后,才可以发送下一个数据包,是一问一答的串行过程;即每次传输数据都需要等待一个对应的等待时间,那么传输 N 份数据,就需要等待 N 次应答时间,总的传输时间:N 份数据传输时间 + N 份应答传输时间一发一收的

2022-02-10 22:49:24 2391 10

原创 TCP 协议(包含三次握手,四次挥手)

TCP 特性1.确认应答 (可靠传输的最核心机制)1.确认应答 (可靠传输的最核心机制)可靠传输的最核心机制

2022-01-28 19:58:15 51186 80

原创 JavaScript — DOM API

前言:JS 分为三大部分,之前已经学习了ES(基础语法部分),本篇来讨论第二部分:DOM API — 操作页面结构DOM APIDOM 概念事件基本概念时间三要素JS 代码主要流程获取页面元素querySelector & querySelectorAll操作元素获取 / 修改元素内容innerTextinnerHTML获取 / 修改元素属性获取 / 修改样式属性获取 / 修改表单元素属性操作节点新增节点1.创建元素节点2.插入节点到 DOM 树中删除节点DOM 概念DOM (Docu

2022-01-21 10:30:00 847

原创 JavaScript 对象

对象概念对象的创建1.使用字面量创建对象2.使用 new Object 创建对象3.使用构造函数创建对象理解 new 关键字概念对象是指一个具体的事物在 JS 中,我们前边学到的字符串,数值,数组,函数都是对象,每个对象中包含若干的属性和方法JavaScript 的对象 和 Java 的对象概念上基本一致,只是具体的语法表项形式差别较大对象的创建1.使用字面量创建对象使用 { } 创建对象var a = { }; —— 创建了一个空的对象在 { } 中定义对象的一些属性,多个属性之间

2022-01-20 10:30:00 622

原创 JavaScript 函数

函数语法格式创建函数函数调用参数个数函数表达式作用域作用域链语法格式创建函数// 创建函数 / 函数声明 / 函数定义function 函数名(形参列表) { 函数体 return 返回值;}函数调用函数定义并不会执行函数体内容,必须要调用才会执行,调用几次就会执行几次函数名(实参列表) // 不考虑返回值返回值 = 函数名(实参列表) // 考虑返回值举例:function huahua() { console.log("huahu

2022-01-19 10:30:00 760 2

原创 JavaScript 数组

数组创建数组1.使用 new 关键字创建2.使用字面量方式创建获取数组元素新增数组元素1.通过修改 length 新增2.通过下标新增3.使用 push 进行追加元素删除数组元素创建数组1.使用 new 关键字创建let arr = new Array( );.此处 Array 中的 A 注意要大写2.使用字面量方式创建var arr2 = [ ];var arr3 = [1, 6, ‘hua’, true];.注意: JS 的数组不要求元素是相同类型打印 arr3:获取

2022-01-18 10:30:00 857 2

原创 JavaScript 变量和基本数据类型

JavaScript 的组成:①ECMAScript(简称 ES):规定了 JavaScript 语法 (有多个版本)②DOM:页面文档对象模型,对页面中的元素进行操作 (用户交互,动态的操作页面元素)③BOM:浏览器对象模型,对浏览器窗口进行操作 (如:url,刷新按钮,前进,回退)重要概念:ECMAScript这是一套 “标准”,无论是啥样的 JS 引擎都要遵守这个标准来实现本篇主要学习 ES ,即JavaScript 语法目录认识JavaScriptJS 的书写格式行内式内嵌式外部式注释

2022-01-17 15:40:24 1249

原创 CSS 盒模型

盒模型构成边框基础属性边框会撑大盒子内边距基础写法复合写法外边距基础写法复合写法块级元素水平居中构成每一个 HTML 元素就相当于是一个矩形的 "盒子这个盒子由这几个部分构成border —— 边框content —— 内容padding —— 内边距margin —— 外边距边框基础属性粗细: border-width样式: border-style,默认没边框;solid-实线边框;dashed-虚线边框;dotted-点线边框颜色: border-color支持简写:b

2022-01-14 10:30:00 287

原创 CSS 弹性布局

目录基本概念常用属性justify-contentalign-items总结基本概念flex 是 flexible box 的缩写,意思为 “弹性盒子”任何一个 html 元素,都可以指定为 display:flex 完成弹性布局容器和项目容器 (flex container): 需要添加弹性布局的父元素,被设置为 display:flex 属性的元素项目 ( flex item): 弹性布局容器中的每一个子元素两个基本方向主轴 (flex direction): flex ite

2022-01-13 17:31:42 1461

原创 CSS 基础语法

前言: 之前我们写了 Html 的部分简单标签,本篇,我们将学习 CSS 的基础语法CSSCSS 简介基本语法规范引入方式1.内部样式表2.行内样式表3.外部样式CSS 选择器CSS 常用属性CSS 简介1.什么是CSS??CSS: 层叠样式表 (Cascading Style Sheet)是一组样式设置的规则,用于控制页面的外观样式,实现美化页面的效果,能够做到页面的样式和结构分离2.CSS 的作用实现内容与样式的分离,便于团队开发样式复用,便于网站的后期维护能够对网页中元素位置的排

2022-01-13 13:13:05 688 4

原创 TCP 协议报文格式

前言:前面,我们已经提过TCP 协议属于传输层协议,以及TCP/IP 五层/四层模型数据从应用层开始,会在每一层都会加上头信息,进行封装,再发送到数据接收端TCP 协议报文格式端口号序列号确认号数据偏移字段保留字段标志位字段????窗口大小字段TCP 校验和字段紧急指针字段可选项字段报文格式TCP UDP 的报头和 Http 的报头差别很大;Http 是文本格式的协议 (按照字符串文本的方式处理的),而 TCP / UDP 都是二进制的协议 (以字节 / 比特位为单位进行组织的)TCP 报文是

2022-01-12 10:15:00 14365 12

原创 CSS 选择器

CSS 选择器基础选择器1.标签选择器2.类选择器3.id 选择器4.通配符选择器复合选择器1.后代选择器2.子代选择器3.并集选择器4.伪类选择器4.1.链接伪类选择器:4.2.focus 伪类选择器总结基础选择器1.标签选择器举例:<head> <title>标签选择器</title> <style> p { color: red; } </style>&

2022-01-11 14:36:25 760 7

原创 UDP 协议报文格式

UDP 协议格式每个 UDP 报文分为 UDP 报头和 UDP 数据区两部分报头由 4 个 16 位长(2 字节) 字段组成,分别说明该报文的源端口、目的端口、报文长度和校验值UDP 报文中每个字段的含义:源端口: 操作系统自动分配的这个字段占据 UDP 报文头的前 16 位,通常包含发送数据报的应用程序所使用的 UDP 端口。接收端的应用程序利用这个字段的值作为发送响应的目的地址。这个字段是可选的,所以发送端的应用程序不一定会把自己的端口号写入该字段中。如果不写入端口号,则把这个字段设置为

2022-01-11 10:00:00 5776 7

原创 简单认识 cookie

上篇,我们写了简单的Http Server,本篇仍然使用该代码,来学习 cookie目录使用 cookie设置多个 cookie使用 cookie全部代码链接 (版本2)对其进行部分修改:重启服务器,观察效果:仍使用 fiddler 抓包观察:响应里包含:上述操作就是把 “I am cookie” 写回到浏览器中可以在浏览器里查看:Cookie 是啥?就是一个字符串 (里面内容程序猿自己设定)Cookie 从哪来?从服务器来,服务器会在 header 中引入一个 Set-C

2022-01-09 13:00:00 544 4

原创 线程池工厂类

前言: Java提供的 Executor 都在JUC (java.util.concurrent) 包下面,主要包括:线程池工厂类Executors,线程池实现类ThreadPoolExecutor等线程池 ThreadPoolExecutor 通常都是通过 Executors 来创建的// 返回一个可根据实际情况调整线程个数的线程池Executors.newCachedThreadPool();// 创建一个固定数量的线程池Executors.newFixedThreadPool(10);

2022-01-09 11:00:00 719 1

原创 Html 部分基础标签

前端指的是网页开发“网页” 只是指看到的页面(界面部分,也包含了一些和用户以及和服务器之间的交互逻辑)前端开发所用到的技术,主要是三个核心方面:1.HTML:描述网页的基本结构2.CSS:描述网页的样式3.JavaScript:描述网页和用户之间的交互动作...

2022-01-08 18:00:00 604

原创 Http Server 版本3 - 实现完整的登录过程(Cookie & Session)

前言:之前,我们写了两个版本的 Http 服务器,本篇,再继续实现第三个版本V3 将满足:1.支持返回一个静态的 html 文件2.解析处理 cookie (把 cookie 处理成键值对结构)3.解析处理 body (把 body 中的数据处理成键值对结构)4.实现一个完整的登录功能 (session 的简单实现)request 类:public class Request { private String method; private String url; p

2022-01-07 22:43:15 694 6

原创 简单实现 http Server (版本1、2)

代码实现:public class HttpServerV1 { /* * http 底层要基于 tcp 来实现 * 需要按照 tcp 的基本格式来进行开发 * */ private ServerSocket serverSocket = null; public HttpServerV1(int port) throws IOException { serverSocket = new ServerSocket(port);

2022-01-07 19:00:00 482

原创 初始 http【网络】

前言: 生活中,我们在上网时,打开一个网页,就可以看到网址,如下:https://blog.csdn.net/m0_47988201?spm=1011.2124.3001.5343访问网站使用的协议类型:https(基于 http 实现的,只不过在 http 基础上引入一个加密层)http 和 https 都是应用层协议应用层的协议都需要程序猿来手动指定(自己定制协议)http 协议是基于 tcp 来实现的目录URLurlencode 和 urldecodehttp 协议格式http 请求htt

2022-01-06 19:00:00 664

原创 简单的服务器 TCP版本 熟悉其 API 【网络】

Java 标准库中提供了两种风格DatagramSocket:面向数据报ServerSocket:面向字节流

2022-01-05 18:00:00 455

原创 简单的服务器 UDP版本 熟悉其 API 【网络】

前言: 通过写一个简单的服务器来了解 UDP 的常用API目录UDP服务器程序UDP客户端程序客户端角度理解五元组总结面向数据报 (发送接收数据,必须以一定的数据包为单位进行传输)使用传输层 UDP 协议UDP服务器程序对于一个服务器程序来说,核心流程分为两步:1.初始化 (实例化 Socket 对象)2.进入主循环, 接收并处理请求 (主循环就是一个"死循环")a) 读取数据并解析b) 根据请求计算响应c) 把响应结果写到客户端 此处以一个 echo server 为例:最

2022-01-04 19:00:00 698 8

原创 封装和分用【网络】

也就是各个层次的协议之间是如何协同工作的两个核心操作:1.封装2.分用

2022-01-03 19:00:00 827 6

原创 网络编程—预备知识

目录网络编程—预备知识服务器(server) - 客户端(client)IP / MAC / 端口号五元组网络编程—预备知识服务器(server) - 客户端(client)举例: 客人去餐馆点菜,吃饭~请求——点菜响应——上菜参观无法确定客人啥时候来吃饭,只能一大早就开门,很晚才关门主动发送请求的一方:客户端被动接收请求的一方:服务器服务器无法确定客户端什么时候发送请求,只能提前准备好,并且持续等待,甚至很多服务器 7 * 24 小时==工作IP / MAC / 端口号IP:

2022-01-02 19:00:00 223

原创 网络协议【网络】

目录协议定义作用 ( 为什么要有协议?)协议分层优点OSI 七层模型TCP / IP 五层(或四层)模型协议协议的意思就是字面的意思,双方(通信双方)达成的一种共识~定义协议,网络协议的简称,网络协议是网络通信(即网络数据传输)经过的所有网络设备都必须共同遵从的一组约定、规则。如怎么样建立连接、怎么样互相识别等。只有遵守这个约定,计算机之间才能相互通信交流,它的三要素是:语法,语义,时序为了使数据在网络上从源到达目的,网络通信的参与方必须遵循相同的规则,这套规则称为协议( protocol ),最

2022-01-01 19:10:58 918

原创 Java 定时器

上篇提到了 阻塞队列,本篇我们将优先级队列和阻塞队列结合,得到 阻塞优先队列,以此来实现一个定时器~定时器定义应用场景定时器的实现:定时器构成代码实现:代码分析:忙等一处唤醒,两处阻塞附最终全部代码:完整的执行过程:定义定时器,是多线程编程中的一个重要 / 常用组件定时器可以强制终止请求:浏览器内部都有一个定时器,发送请求后,定时器就开始计时;若在规定时间内,响应数据没有返回,就会强制终止请求定时器,有些逻辑不想立刻执行,而是要等一定的时间之后,再来执行好比一个闹钟,在我们设定好闹钟时间后,到时

2021-12-14 12:51:05 737 6

原创 Java 线程池

线程池线程池概念为什么使用线程池??线程池组成部分线程池 核心操作executeshutdown全部代码:线程池概念在String内部,为了进行一些优化,引入了一个"字符串常量池"线程池是一种多线程处理形式,处理过程中可以将任务添加到队列中,然后再创建线程后自动启动这些任务为什么使用线程池??使用线程池最大的原因是可以根据系统的需求和硬件环境灵活的控制线程的数量,可以对所有线程进行统一的管理和控制,从而提高系统运行效率,避免了频繁创建 / 销毁线程的开销线程池组成部分需要管理两个内容:①要执行

2021-12-12 20:46:21 283

原创 Java 阻塞队列

阻塞队列定义简单介绍 生产者—消费者 模型阻塞队列特点:定义阻塞队列,它是一个特殊的队列,是并发编程中的一个重要基础组件阻塞队列的一个典型应用场景就是 "生产者消费者模型"简单介绍 生产者—消费者 模型以包饺子为例:(假设面和馅是备好的,且 擀面杖只有一个~)方法1: A,B,C 三个人包饺子;这三个人分别进行 擀皮 + 包饺子 过程该方法的锁竞争(擀面杖只有一个)太激烈方法2: 一个人负责擀皮,另外两个负责包饺子,例:A 负责擀皮,B 和 C 负责包饺子这就是"生产者—消费者 模型"

2021-12-09 17:59:37 559 10

原创 单例模式 (饿汉、懒汉)

前言:单例模式,是一种常见的"设计模式"设计模式: 设计模式是一套经过反复使用的代码设计经验,目的是为了重用代码、让代码更容易被他人理解、保证代码可靠性单例模式,场景: 代码中,有些概念,不应该存在多个实例,此时应该使用单例模式来解决例: MySQL JDBC中,第一步就是创建一个 DataSourse 对象,DataSourse 对象,在一个程序中只有一个实例,不应该实例化多份DataSourse 对象可以用单例模式来解决这种场景,保证指定的类只有一个实例 (若尝试创建多个实例,直接编译就会报错

2021-12-08 22:55:11 757 2

原创 动态规划 < 第 3 天 >

题目1.求路径总数分析代码实现:2.最小路径和分析代码实现:1.求路径总数题目:一个机器人在 m×n 大小的地图的左上角(起点)机器人每次可以向下或向右移动。机器人要到达地图的右下角(终点)可以有多少种不同的路径从起点走到终点 ?.备注:m 和 n 小于等于100,并保证计算结果在 int 范围内数据范围:0 < n,m ≤ 100,保证计算结果在32位整型范围内要求:空间复杂度 O(nm),时间复杂度 O(nm)O(nm).示例:输入:2,1返回值:1.输入:2,2

2021-12-08 14:38:52 504 1

原创 动态规划<第 2 天>

三角矩阵题目:给出一个三角形,计算从三角形顶部到底部的最小路径和,每一步都可以移动到下面一行相邻的数字例如:给出的三角形如下:[[2][3,4][6,5,7][4,1,8,3]]最小的从顶部到底部的路径和是2 + 3 + 5 + 1 = 11注意:如果你能只用 O(N) 的额外空间来完成这项工作的话,就可以得到附加分,其中 N 是三角形的总行数思路:动规题目,我们需要分析出状态,状态转移方程,初始状态和返回结果方式① 自上向下解决代码实现:public int

2021-12-07 13:59:33 117

原创 动态规划<第 1 天>

前言:动态规划,简单来说,就是大事化小,小事化无的艺术~动态规划具备特点:把原来的问题分解成了几个相似的子问题所有的子问题都只需要解决一次储存子问题的解动态规划的本质:是对问题状态的定义和状态转移方程的定义(状态以及状态之间的递归关系)动态规划一般从以下4个角度考虑:1.状态定义(要求:定义的状态一定要形成递归关系)2.状态间的转移方程定义3.状态的初始化4.返回结果适用场景:最大值 / 最小值,可不可行,是不是,方案个数1.斐波那契数列递归解法:public int Fi

2021-12-06 12:44:43 415 6

原创 wait 和 notify

由于线程之间是抢占式执行的,因此线程之间执行的先后顺序难以预知.但是实际开发中有时候我们希望合理的协调多个线程之间的执行先后顺序wait( )方法:当操作条件不成熟,就等待notify( )方法:当条件成熟时,通知指定的线程来工作wait( )方法notify( )方法notifyAll( )方法...

2021-12-03 12:12:41 600 8

原创 volatile 关键字

volatile 关键字

2021-12-03 11:57:12 672 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除