自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 【网络安全】网络安全协议和防火墙

至今为止,大多数部署的 IDS 主要是基于特征的。但事实是不可能阻止所有的入侵行为,有必要采取措施在入侵已经开始,但还没有造成危害或在造成更大危害前,及时检测到入侵,以便尽快阻止入侵,把危害降低到最小。例如,一个邮件网关在检查每一个邮件时,会根据邮件地址,或邮件的其他首部,甚至是报文的内容(如,有没有“导弹”“核弹头”等关键词)来确定该邮件能否通过防火墙。只有使用不加密的 IP首部,互联网中的各个路由器才能识别 IP 首部中的有关信息,把 IP安全数据报在不安全的互联网中进行转发,从源点安全地转发到终点。

2024-04-25 14:02:44 520

原创 【网络安全】在网络中如何对报文和发送实体进行鉴别?

鉴别(authentication)是网络安全中一个很重要的问题。一是要鉴别发信者,即验证通信的对方的确是自己所要通信的对象,而不是其他的冒充者。这就是实体鉴别。实体可以是发信的人,也可以是一个进程(客户端或服务器)。因此这也常称为端点鉴别。二是要鉴别报文的完整性,即对方所传送的报文没有被他人篡改过。

2024-04-23 16:46:13 756

原创 【网络安全】对称加密、非对称加密以及密钥分配

在 2001 年,NIST 曾有一个大致的估计,就是假定有一台高速计算机,仅用 1 秒钟就能够破译 56 位的 DES,那么要破译 128 位的 AES,就需要。//就比如你向你的朋友转账(通信),首先必须知道对方的账号(公钥),然后把钱转到对方的账户上(公钥加密),这样你的朋友使用密码就可以取得到你转账的钱(私钥解密)在许多应用中,人们需要对纯数字的电子信息进行签名,表明该信息确实是某个特定的人产生的。的方案,把一个 64 位明文用一个密钥加密,再用另一个密钥解密,然后再使用第一个密钥加密,即。

2024-04-23 16:25:53 694 1

原创 【运输层】TCP 的流量控制和拥塞控制

当拥塞窗口 cwnd = 24 时,网络出现了超时(图中的点②),这就是网络发生拥塞的标志。这或者是增大网络的某些可用资源(如业务繁忙时增加一些链路,增大链路的带宽,或使额外的通信量从另外的通路分流),或减少一些用户对某些资源的需求(如拒绝接受新的建立连接的请求,或要求用户减轻其负荷,这属于降低服务质量)。需要注意的是,慢开始的“慢”并不是指 cwnd 的增长速率慢,而是指在 TCP 开始发送报文段时,只发送一个报文段,即设置 cwnd=1,目的是试探一下网络的拥塞情况,然后视情况再逐渐增大 cwnd。

2024-04-18 17:36:32 922 1

原创 【运输层】TCP 的可靠传输是如何实现的?

如上图所示,B 收到了序号为 32 和 33 的数据,但序号为 31 的数据没有收到(也许丢失了,也许滞留在网络中的某处)。请注意,B 只能对按序收到的数据中的最高序号给出确认,因此 B 发送的确认报文段中的确认号仍然是 31(即期望收到的序号)。若收到的确认是对重传报文段的确认,但却被源主机当成是对原来的报文段的确认,则这样计算出的 RTTs 和超时重传时间 RTO 就会偏大。同样,若收到的确认是对原来的报文段的确认,但被当成是对重传报文段的确认,则由此计算出的 RTTs 和 RTO 都会偏小。

2024-04-08 13:53:46 1281

原创 【运输层】传输控制协议 TCP

TCP 是面向连接的运输层协议。这就是说,应用程序在使用 TCP 协议之前,必须先建立 TCP 连接。在传送数据完毕后,必须释放已经建立的 TCP 连接。(2)每一条 TCP 连接只能有两个端点(endpoint),每一条 TCP 连接只能是点对点的(一对一)。(3)TCP提供可靠交付的服务。通过TCP连接传送的数据,无差错、不丢失、不重复,并且按序到达。(4)TCP 提供全双工通信。TCP 允许通信双方的应用进程在任何时候都能发送数据。

2024-04-07 10:03:59 1126 1

原创 【运输层】网络数据报协议 UDP

下图中在两个运输层之间有一条虚线,表示在两个运输层之间可以进行通信,而不是一条连接。但这种通信是不可靠的通信,即所发送的报文在传输过程中有可能丢失,同时也不保证报文都能按照发送的先后顺序到达终点。这正是 UDP 通信的特点:简单方便,但不可靠。

2024-04-03 14:39:30 1062

原创 Docker Desktop 在 Windows 上的安装和使用

WSL 指 “”,这是一个在 Windows 10\11 上能够运行原生 Linux 二进制可执行文件(ELF格式)的兼容层。它是由微软与Canonical公司合作开发的,旨在使纯正的Ubuntu、Debian等映像能下载和解压到用户的本地计算机,并且映像内的工具和实用工具能在此子系统上原生运行。这极大地拓展了Windows系统的功能,使用户能够在Windows环境中享受到Linux的强大功能。//Linux容器。

2024-03-29 11:36:31 1326

原创 【Logback】Logback 中的 Appenders

Appender组件负责处理Logback日志写入的任务,该组件必须实现接口,该接口的主要方法总结如下://主要是解决将日志写到哪里去的问题//核心方法Appender接口中其实就一个最核心的方法,即doAppend()方法,且该方法只有一个参数,也就是类型为 E 的对象实例。泛型 E 的实例类型需要根据 logback 的具体模块进行决定,在模块内,E 的类型为ILoggingEvent(日志记录事件),在模块内,E 的类型为。

2024-03-06 13:26:03 793

原创 【Logback】Logback 的配置文件

首先,DefaultJoranConfigurator 会尝试查找“logback.configurationFile” 系统属性上指定的文件。如果可以找到该文件,则会读取并解释该文件,然后进行配置。如果没有找到上述文件,DefaultJoranConfigurator 将尝试在类路径上查找配置文件 “logback-test.xml” 。如果可以找到该文件,则会读取并解释该文件,然后进行配置。如果没有找到上述文件,配置器将继续尝试在类路径中查找配置文件

2024-03-01 18:04:29 765

原创 【Logback】Logback 日志框架的架构

目前,logback 分为三个模块,和。logback-core (核心)模块为其他两个模块奠定了基础。模块扩展了。模块是 log4j 日志的改进版本。logback-classic 模块实现了 slf4j API,因此使用 slf4j API 时,可以轻松地在 logback 和其他日志框架之间来回切换例如 JDK 1.4 中引入的 log4j 或 java.util.logging(JUL)//核心+核心拓展模块用于与 Servlet 容器集成,用来提供日志功能。

2024-02-23 15:06:40 1212

原创 【Logback】如何在项目中快速引入Logback日志?

Logback 是 Java 社区中使用最广泛的日志框架之一。它是其前身 Log4j 的替代品。Logback 比所有现有的日志框架速度更快,占用空间更小,而且比其他日志框架提供了更多了功能。//日志框架出现的历史顺序:log4j --> JUL–> JCL–> slf4j --> logback--> log4j2。

2024-02-22 13:39:01 1298

原创 【CentOS】Linux 文件与目录管理

在 Linux 中操作与管理文件及目录,需要在不同的目录间进行切换、还要能够建立与删除目录、建立与删除文件,同时还能够寻找文件、查看文件内容等等,这篇文章将介绍以上这些操作的基本命令。

2024-02-19 14:49:59 903

原创 【CentOS】Linux 文件权限与权限修改

用户与用户组是Linux文件权限的重要组成部分。首先,一定要明确用户与用户组的概念:Linux 一般将文件可读写的身份分为三个类别,分别是:拥有者(owner)所属群组(group)其他人(others),且三种身份各有读(read)写(write)执行(execute)等权限。那么,为什么要这样设置呢?这是因为,Linux 是个多人多任务的系统,因此常常会有多人同时使用一台主机的情况,所以需要对用户及其权限进行控制。

2024-01-24 10:29:56 1515

原创 【CentOS】Linux 在线帮助文档命令:help、man 命令与文档汉化

Linux 系统中有非常多的命令,而且不同版本的 Linux 命令也稍有不同,那,这么多的命令都需要我们去死记硬背吗?答案是:当然不需要,我们只需要知道知道怎样使用联机文档就可以了。

2024-01-22 14:37:40 985 1

原创 【网络层】IP 协议和地址解析协议 ARP

互联网网络层采用的设计思路是这样的:网络层要设计得尽量简单,向其上层只提供简单灵活的、无连接的、尽最大努力交付的数据报服务。在网络层在发送 IP 数据报时不需要先建立连接,每一个 IP 数据报都独立发送,与其前后的 数据报无关(不进行编号),且网络层不提供服务质量的承诺。所以,网络层主要提供两种服务:数据包(IP数据报)路由和转发。该层传输的主要是IP数据报,所以本文主要介绍IP数据报的相关知识点。

2024-01-19 14:36:11 884

原创 【链路层】点对点协议 PPP

图右方的绿色方框给出了对 PPP 协议的几个状态的说明。从设备之间无链路开始到先建立物理链路,再建立链路控制协议 LCP 链路。经过鉴别后再建立网络控制协议 NCP 链路,然后才能交换数据。由此可见,PPP 协议已不是纯粹的数据链路层的协议,它还包含了物理层和网络层的内容。

2024-01-15 10:48:03 1074

原创 【Java8】Java 中新的日期和时间 API

Java 旧的日期时间类 java.util.Date 和 java.util.Calendar 存在可变性,导致在多线程环境下使用时会存在线程安全问题。在新的 API 中,几乎所有的类都是不可变的,从而保证了线程安全性。此外,旧的 API 命名不清晰,使得日期时间处理相对困难。新的 API 使用了更清晰和直观的命名,使得代码更易读、更易写。

2023-12-28 14:14:42 928

原创 【Java8】Java 中的 Stream 流收集器

Java 中 Stream 流用来帮助处理集合,类似于数据库中的操作。在 Stream 接口中,有一个抽象方法collect,你会发现 collect 是一个归约操作(高级规约),就像reduce一样可以接受各种做法作为参数,将流中的元素累积成一个汇总结果。具体的做法可以通过Collector接口来定义。// collect和reduce都是Stream接口中的汇总方法,collect方法接收一个Collector(收集器)作为参数收集器(Collector。

2023-12-22 14:41:54 1026

原创 【Java】Java 中的 final 关键字和 static 关键字

这两个关键字编写代码时会经常用,正确的使用这些关键字,可以形成良好的编程习惯,保护好代码的封装性。

2023-12-15 15:17:43 949

原创 Redis 主库挂了,如何不间断服务?

哨兵机制,是实现 Redis 不间断服务的重要保证。具体来说,主从集群的数据同步,是数据可靠的基础保证;而在主库发生故障时,自动的主从切换是服务不间断的关键支撑。Redis 的哨兵机制自动完成了以下三大功能,从而实现了主从库的自动切换,可以降低 Redis 集群的运维开销:监控主库运行状态,并判断主库是否客观下线;在主库客观下线后,选取新主库;选出新主库后,通知从库和客户端。

2023-11-28 22:20:24 580

原创 Windows 使用的一些小技巧

​ 优化电脑内存与核心数量,由于默认引导高级选项并没有检测优化内存与CPU,因此我们可以根据我们电脑配置进行优化,如果电脑是双核处理器,我们可以将处理器选择为 2 个,此处我直接选择处理器个数的最大数。​Check Disk,简称“CHKDSK”,是一种Windows内置的实用程序,可以检查硬盘文件系统的完整性,并可以修复FAT16、FAT32和NTFS硬盘上的各种文件系统错误。然后,会弹出一个文件夹,里边存放的都是各种临时文件,可以手动删除,遇到删不掉的文件,点击跳过即可。

2023-10-29 18:43:54 298

原创 使用 Redis 如何统计一亿个 keys ?

redis 中 Set、Sorted Set、Hash、List、Bitmap、HyperLogLog 的支持情况和优缺点汇总可以看到,Set 和 Sorted Set 都支持多种聚合统计,不过,对于差集计算来说,只有 Set 支持。Bitmap 也能做多个 Bitmap 间的聚合计算,包括与、或和异或操作。当需要进行排序统计时,List 中的元素虽然有序,但是一旦有新元素插入,原来的元素在 List 中的位置就会移动,那么,按位置读取的排序结果可能就不准确了。

2023-10-24 21:59:36 260

原创 并发编程7:线程池的使用

如果没有线程正在等待,并且线程池的当前大小小于最大值,那么ThreadPoolExecutor 将创建一个新的线程,否则根据饱和策略,这个任务将被拒绝。它提供了大量可调节的选项,例如创建线程和关闭线程的策略,处理队列任务的策略,处理过多任务的策略,并且提供了几个钩子方法来扩展它的行为。同样,当线程池中的任务是数据库连接的唯一使用者时,那么线程池的大小又将限制连接池的大小。如果某个线程的空闲时间超过了存活时间,那么将被标记为可回收的,并且当线程池的当前大小超过了基本大小时,这个线程将被终止。

2023-09-07 17:15:30 190

原创 并发编程6:任务或线程的取消与关闭

Java 提供了中断 (Interruption)协作机制,通过该机制能够使一个线程终止另一个线程的当前工作。这种协作式的方法是必要的,我们很少希望某个任务、线程或服务立即停止,因为这种立即停止会使共享的数据结构处于不一致的状态。相反,在编写任务和服务时可以使用一种协作的方式:当需要停止时,它们首先会清除当前正在执行的工作,然后再结束。这提供了更好的灵活性,因为任务本身的代码比发出取消请求的代码更清楚如何执行清除工作。//中断操作应该由中断线程本身去决定何时中断。

2023-09-04 10:47:47 253

原创 并发编程5:如何执行任务?

大多数并发应用程序都是围绕来构造的:任务通常是一些抽象的且离散的工作单元。通过把应用程序的工作分解到多个任务中,可以简化程序的组织结构,提供一种事务边界来优化错误恢复过程,以及提供一种并行工作结构来提升并发性。//目的:如何把一个工作拆解成多个任务,并发执行->清晰的任务边界(独立任务有利于并发)

2023-08-23 14:09:01 316

原创 并发编程4:Java 中的并发基础构建模块

委托是创建线程安全类的一个最有效的策略:只需让现有的线程安全类管理所有的状态即可。Java 平台类库包含了丰富的并发基础构建模块,例如线程安全的容器类以及各种用于协调多个相互协作的线程控制流的同步工具类(Synchronizer)等。Java 并发类的 API 文档,。

2023-08-17 17:38:45 146

原创 并发编程3:如何设计线程安全的类

上边代码稍微改变了车辆追踪器类的行为,在使用监视器模式的车辆追踪器中返回的是车辆位置的快照,而在使用委托的车辆追踪器中返回的是一个不可修改但却实时的车辆位置视图。它并不关心底层的 List 是否是线程安全的,即使 List 不是线程安全的或者修改了它的加锁实现,ImprovedList 也会提供一致的加锁机制来实现线程安全性。为了防止多个线程在并发访问同一个对象时产生的相互干扰,这些对象应该要么是线程安全的对象,要么是事实不可变的对象,或者由锁来保护的对象。

2023-08-09 15:37:23 114

原创 并发编程2:如何进行对象共享?

“发布(Publish)”一个对象的思是指,使对象能够在当前作用域之外的代码中使用。例如,将一个指向该对象的引用保存到其他代码可以访问的地方,或者将引用传递到其他类的方法中。发布内部状态可能会破坏封装性,并使得程序难以维持不变性条件。例如,如果在对象构造完成之前就发布该对象,就会破坏线程安全性。当某个不应该发布的对象被发布时,这种情况就被称为逸出( Escape)。

2023-08-08 15:38:52 127

原创 并发编程1:线程安全性概述

当多个线程访问某个类时,这个类始终都能表现出正确的行为,那么就称这个类是线程安全的。//所见即所知。

2023-08-07 17:27:21 116

原创 操作系统18:磁盘I/O速度、磁盘可靠性、数据一致性

一个事务在对一批数据执行修改操作时,要么全部完成,并用修改后的数据去代替原来的数据,要么一个也不修改。事务操作所具有的这种特性,即事务的原子性(Atomic)。作为单个程序单元执行的一系列操作,并不是都可以成为事务,也就是说,如果定义其为事务,则必须同时满足四个属性,即事务属性 ACID。除了上述的原子性外,事务还应具备的属性是:一致性(Consistent),即事务在完成时,必须使所有的数据都保持一致状态隔离性(Isolated)

2023-07-26 11:50:24 1392

原创 Spring Security 授权体系结构

例如,在具有“Admin”和“User”角色概念的应用程序中,希望管理员(“Admin”)能够执行普通用户(“User”)的所有操作。用户可以通过实现 AuthorizationManager 接口来自定义授权控制,同时,Spring Security 附带了一个委托 AuthorizationManager,它可以与各个 AuthorizationManager 进行协作。至此,Spring Security 的授权架构介绍完毕,在这篇文章中,更多的是方法论,具体的使用细节将在后续文章中进行补充。

2023-07-25 17:44:55 510

原创 Spring Security 身份验证的基本类/架构

用作验证用户凭据的基本过滤器。在对凭证进行身份验证之前,Spring Security 通常会使用来请求凭证。doFilter 源码】//总流程//身份认证过滤器的处理流程if (!} else {try {//1- 尝试进行身份验证return;//2-如果验证成功,创建新会话,更新sessionId//3-调用认证成功后处理流程//4-调用认证失败后处理流程//4-调用认证失败后处理流程接下来,可以对提交给它的任何身份验证请求进行身份验证。

2023-07-24 11:22:01 985

原创 Spring Security 的工作原理/总体架构

这些过滤器的排序是Spring官方提供的,后来Spring可能觉得这样展示的意义不大,删去了这部分内容, 补充了一些从日志查看过滤器加载顺序的说明。//首先说,这里就是 Spring Security 的工作原理,重中之重,非常重要,虽然讲的是一个异常过滤器,但是实际上是一个执行流程。// 在Spring 中,Spring 管理过滤器的生命周期,所以 Filter 实例也是 Spring 中的一个Bean。//见名知意,过滤器链的代理 FilterChainProxy 中会持有过滤器链的对象。

2023-07-20 17:18:21 399

原创 前端基础:HTML和CSS简介

HTML 指的是超文本标记语言 (HyperTextMarkupLanguage),标记语言(markup language) 不是一种编程语言,而是一套标记标签标记标签来描述网页W3C_HTML5。W3C_HTML实例。// 页面布局,表单提交等标签内容//一个前端页面的组成:html(标签) + css(样式) + js(动态页面) + 图片等CSS是一种描述 HTML 文档样式的语言,CSS 描述应该如何显示 HTML 元素。CSS指的是层叠样式表C。

2023-07-16 17:37:09 697

原创 操作系统17:外存组织方式和文件存储管理

索引组织方式的主要问题是,每当建立一个索引文件时,应为该文件分配一个索引块将分配给该文件的所有盘块号记录于其中。,称为第一级索引,即系统再分配一个索引块,作为第一级索引的索引块,将第一块、第二块、···.··等索引块的盘块号填入到此索引表中,这样便形成了两级索引分配方式。这种方法的优点是用于分配和回收一个盘块的过程非常简单,但在为一个文件分配盘块时,可能要重复操作多次,分配和回收的效率较低。这样,在为文件分配磁盘空间时,就无须知道盘块的大小,只要根据不同的磁盘容量,选择相应大小的簇,使 NTFS。

2023-07-14 13:21:08 1974

原创 操作系统16:文件共享和文件保护

下图中给出了两个保护域。当用户通过 D5 访问被链接的文件 F8,且正要读 LINK 类新文件时,此要求将被 OS 截获,OS 根据新文件中的路径名去找到文件 F8,然后对它进行读(写),这样就实现了对文件 F8 的共享。号,表示运行在 D1 域中的进程可以将其对文件 F3 的写访问权扩展到域 D3 中去,类似的,在域 D2 中对文件 F2 的读访问权也是一样。,即有多个属于不同用户的多个目录,同时指向同一个文件,虽会破坏树的特性,但这些用户可用对称的方式实现文件共享,而不必再通过其属主目录来访问。

2023-07-14 13:19:22 837 2

原创 操作系统15:文件和文件目录

在对索引顺序文件进行检索时,首先也是利用关键字以及某种查找算法去检索索引表,找到该记录所在记录组中第一个记录的表项,从中得到该记录组第一个记录在主文件中的位置。但为了能实现文件存储空间的动态分配,通常由 Hash 函数所求得的并非是相应记录的地址,而是指向某一目录表相应表目的指针,该表目的内容指向相应记录所在的物理块,如下图所示。索引顺序文件是对顺序文件的一种改进,它基本上克服了变长记录的顺序文件不能随机访问,以及不便于记录的删除和插入的缺点,它是顺序文件和索引文件相结合的产物。单级文件目录如下图所示。

2023-07-13 09:53:34 1878

原创 操作系统14:缓冲区和磁盘调度算法

SCAN 算法既能获得较好的寻道性能,又能防止“饥饿”现象,但是当磁头刚从里向外移动而越过了某一磁道时,恰好又有一进程请求访问此磁道,这时,该进程必须等待,待磁头继续从里向外,然后再从外向里扫描完处于外面的所有要访问的磁道后,才处理该进程的请求,致使该进程的请求被大大地推迟。在设备输入时,先将数据送入第一缓冲区,装满后便转向第二缓冲区。如,用于指示下一个有数据的缓冲区 G 的指针 Nextg,指示下次可用的空缓冲区 R 的指针 Nexti,以及用于指示正在使用的缓冲区 C 的指针 Current。

2023-07-12 09:02:15 1383

原创 操作系统13:中断处理程序和设备驱动程序

当一个进程请求 I/O 操作时,该进程将被挂起,直到 I/O 设备完成 I/O 操作后,设备控制器便向 CPU 发送一个中断请求,CPU 响应后便转向中断处理程序,中断处理程序执行相应的处理,处理完后解除相应进程的阻塞状态。具体的 I/O 操作是在设备控制器的控制下进行的,因此,在设备忙于传送数据时,处理机又可以去干其它的事情,实现了处理机与 I/O 设备的并行操作。CPU 的绝大部分时间都处于等待 I/O 设备完成数据 I/O 的循环测试中,造成对 CPU 的极大浪费。

2023-07-11 11:13:03 2627

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