- 博客(465)
- 资源 (8)
- 收藏
- 关注
原创 【Logback】Logback 中的 Appenders
Appender组件负责处理Logback日志写入的任务,该组件必须实现接口,该接口的主要方法总结如下://主要是解决将日志写到哪里去的问题//核心方法Appender接口中其实就一个最核心的方法,即doAppend()方法,且该方法只有一个参数,也就是类型为 E 的对象实例。泛型 E 的实例类型需要根据 logback 的具体模块进行决定,在模块内,E 的类型为ILoggingEvent(日志记录事件),在模块内,E 的类型为。
2024-03-06 13:26:03 706
原创 【Logback】Logback 的配置文件
首先,DefaultJoranConfigurator 会尝试查找“logback.configurationFile” 系统属性上指定的文件。如果可以找到该文件,则会读取并解释该文件,然后进行配置。如果没有找到上述文件,DefaultJoranConfigurator 将尝试在类路径上查找配置文件 “logback-test.xml” 。如果可以找到该文件,则会读取并解释该文件,然后进行配置。如果没有找到上述文件,配置器将继续尝试在类路径中查找配置文件
2024-03-01 18:04:29 620
原创 【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 1152
原创 【Logback】如何在项目中快速引入Logback日志?
Logback 是 Java 社区中使用最广泛的日志框架之一。它是其前身 Log4j 的替代品。Logback 比所有现有的日志框架速度更快,占用空间更小,而且比其他日志框架提供了更多了功能。//日志框架出现的历史顺序:log4j --> JUL–> JCL–> slf4j --> logback--> log4j2。
2024-02-22 13:39:01 1181
原创 【CentOS】Linux 文件与目录管理
在 Linux 中操作与管理文件及目录,需要在不同的目录间进行切换、还要能够建立与删除目录、建立与删除文件,同时还能够寻找文件、查看文件内容等等,这篇文章将介绍以上这些操作的基本命令。
2024-02-19 14:49:59 878
原创 【CentOS】Linux 文件权限与权限修改
用户与用户组是Linux文件权限的重要组成部分。首先,一定要明确用户与用户组的概念:Linux 一般将文件可读写的身份分为三个类别,分别是:拥有者(owner)所属群组(group)其他人(others),且三种身份各有读(read)写(write)执行(execute)等权限。那么,为什么要这样设置呢?这是因为,Linux 是个多人多任务的系统,因此常常会有多人同时使用一台主机的情况,所以需要对用户及其权限进行控制。
2024-01-24 10:29:56 1058
原创 【CentOS】Linux 在线帮助文档命令:help、man 命令与文档汉化
Linux 系统中有非常多的命令,而且不同版本的 Linux 命令也稍有不同,那,这么多的命令都需要我们去死记硬背吗?答案是:当然不需要,我们只需要知道知道怎样使用联机文档就可以了。
2024-01-22 14:37:40 929 1
原创 【网络层】IP 协议和地址解析协议 ARP
互联网网络层采用的设计思路是这样的:网络层要设计得尽量简单,向其上层只提供简单灵活的、无连接的、尽最大努力交付的数据报服务。在网络层在发送 IP 数据报时不需要先建立连接,每一个 IP 数据报都独立发送,与其前后的 数据报无关(不进行编号),且网络层不提供服务质量的承诺。所以,网络层主要提供两种服务:数据包(IP数据报)路由和转发。该层传输的主要是IP数据报,所以本文主要介绍IP数据报的相关知识点。
2024-01-19 14:36:11 837
原创 【链路层】点对点协议 PPP
图右方的绿色方框给出了对 PPP 协议的几个状态的说明。从设备之间无链路开始到先建立物理链路,再建立链路控制协议 LCP 链路。经过鉴别后再建立网络控制协议 NCP 链路,然后才能交换数据。由此可见,PPP 协议已不是纯粹的数据链路层的协议,它还包含了物理层和网络层的内容。
2024-01-15 10:48:03 986
原创 【Java8】Java 中新的日期和时间 API
Java 旧的日期时间类 java.util.Date 和 java.util.Calendar 存在可变性,导致在多线程环境下使用时会存在线程安全问题。在新的 API 中,几乎所有的类都是不可变的,从而保证了线程安全性。此外,旧的 API 命名不清晰,使得日期时间处理相对困难。新的 API 使用了更清晰和直观的命名,使得代码更易读、更易写。
2023-12-28 14:14:42 895
原创 【Java8】Java 中的 Stream 流收集器
Java 中 Stream 流用来帮助处理集合,类似于数据库中的操作。在 Stream 接口中,有一个抽象方法collect,你会发现 collect 是一个归约操作(高级规约),就像reduce一样可以接受各种做法作为参数,将流中的元素累积成一个汇总结果。具体的做法可以通过Collector接口来定义。// collect和reduce都是Stream接口中的汇总方法,collect方法接收一个Collector(收集器)作为参数收集器(Collector。
2023-12-22 14:41:54 966
原创 【Java】Java 中的 final 关键字和 static 关键字
这两个关键字编写代码时会经常用,正确的使用这些关键字,可以形成良好的编程习惯,保护好代码的封装性。
2023-12-15 15:17:43 902
原创 Redis 主库挂了,如何不间断服务?
哨兵机制,是实现 Redis 不间断服务的重要保证。具体来说,主从集群的数据同步,是数据可靠的基础保证;而在主库发生故障时,自动的主从切换是服务不间断的关键支撑。Redis 的哨兵机制自动完成了以下三大功能,从而实现了主从库的自动切换,可以降低 Redis 集群的运维开销:监控主库运行状态,并判断主库是否客观下线;在主库客观下线后,选取新主库;选出新主库后,通知从库和客户端。
2023-11-28 22:20:24 520
原创 Windows 使用的一些小技巧
优化电脑内存与核心数量,由于默认引导高级选项并没有检测优化内存与CPU,因此我们可以根据我们电脑配置进行优化,如果电脑是双核处理器,我们可以将处理器选择为 2 个,此处我直接选择处理器个数的最大数。Check Disk,简称“CHKDSK”,是一种Windows内置的实用程序,可以检查硬盘文件系统的完整性,并可以修复FAT16、FAT32和NTFS硬盘上的各种文件系统错误。然后,会弹出一个文件夹,里边存放的都是各种临时文件,可以手动删除,遇到删不掉的文件,点击跳过即可。
2023-10-29 18:43:54 238
原创 使用 Redis 如何统计一亿个 keys ?
redis 中 Set、Sorted Set、Hash、List、Bitmap、HyperLogLog 的支持情况和优缺点汇总可以看到,Set 和 Sorted Set 都支持多种聚合统计,不过,对于差集计算来说,只有 Set 支持。Bitmap 也能做多个 Bitmap 间的聚合计算,包括与、或和异或操作。当需要进行排序统计时,List 中的元素虽然有序,但是一旦有新元素插入,原来的元素在 List 中的位置就会移动,那么,按位置读取的排序结果可能就不准确了。
2023-10-24 21:59:36 200
原创 并发编程7:线程池的使用
如果没有线程正在等待,并且线程池的当前大小小于最大值,那么ThreadPoolExecutor 将创建一个新的线程,否则根据饱和策略,这个任务将被拒绝。它提供了大量可调节的选项,例如创建线程和关闭线程的策略,处理队列任务的策略,处理过多任务的策略,并且提供了几个钩子方法来扩展它的行为。同样,当线程池中的任务是数据库连接的唯一使用者时,那么线程池的大小又将限制连接池的大小。如果某个线程的空闲时间超过了存活时间,那么将被标记为可回收的,并且当线程池的当前大小超过了基本大小时,这个线程将被终止。
2023-09-07 17:15:30 176
原创 并发编程6:任务或线程的取消与关闭
Java 提供了中断 (Interruption)协作机制,通过该机制能够使一个线程终止另一个线程的当前工作。这种协作式的方法是必要的,我们很少希望某个任务、线程或服务立即停止,因为这种立即停止会使共享的数据结构处于不一致的状态。相反,在编写任务和服务时可以使用一种协作的方式:当需要停止时,它们首先会清除当前正在执行的工作,然后再结束。这提供了更好的灵活性,因为任务本身的代码比发出取消请求的代码更清楚如何执行清除工作。//中断操作应该由中断线程本身去决定何时中断。
2023-09-04 10:47:47 229
原创 并发编程5:如何执行任务?
大多数并发应用程序都是围绕来构造的:任务通常是一些抽象的且离散的工作单元。通过把应用程序的工作分解到多个任务中,可以简化程序的组织结构,提供一种事务边界来优化错误恢复过程,以及提供一种并行工作结构来提升并发性。//目的:如何把一个工作拆解成多个任务,并发执行->清晰的任务边界(独立任务有利于并发)
2023-08-23 14:09:01 162
原创 并发编程4:Java 中的并发基础构建模块
委托是创建线程安全类的一个最有效的策略:只需让现有的线程安全类管理所有的状态即可。Java 平台类库包含了丰富的并发基础构建模块,例如线程安全的容器类以及各种用于协调多个相互协作的线程控制流的同步工具类(Synchronizer)等。Java 并发类的 API 文档,。
2023-08-17 17:38:45 137
原创 并发编程3:如何设计线程安全的类
上边代码稍微改变了车辆追踪器类的行为,在使用监视器模式的车辆追踪器中返回的是车辆位置的快照,而在使用委托的车辆追踪器中返回的是一个不可修改但却实时的车辆位置视图。它并不关心底层的 List 是否是线程安全的,即使 List 不是线程安全的或者修改了它的加锁实现,ImprovedList 也会提供一致的加锁机制来实现线程安全性。为了防止多个线程在并发访问同一个对象时产生的相互干扰,这些对象应该要么是线程安全的对象,要么是事实不可变的对象,或者由锁来保护的对象。
2023-08-09 15:37:23 109
原创 并发编程2:如何进行对象共享?
“发布(Publish)”一个对象的思是指,使对象能够在当前作用域之外的代码中使用。例如,将一个指向该对象的引用保存到其他代码可以访问的地方,或者将引用传递到其他类的方法中。发布内部状态可能会破坏封装性,并使得程序难以维持不变性条件。例如,如果在对象构造完成之前就发布该对象,就会破坏线程安全性。当某个不应该发布的对象被发布时,这种情况就被称为逸出( Escape)。
2023-08-08 15:38:52 125
原创 操作系统18:磁盘I/O速度、磁盘可靠性、数据一致性
一个事务在对一批数据执行修改操作时,要么全部完成,并用修改后的数据去代替原来的数据,要么一个也不修改。事务操作所具有的这种特性,即事务的原子性(Atomic)。作为单个程序单元执行的一系列操作,并不是都可以成为事务,也就是说,如果定义其为事务,则必须同时满足四个属性,即事务属性 ACID。除了上述的原子性外,事务还应具备的属性是:一致性(Consistent),即事务在完成时,必须使所有的数据都保持一致状态隔离性(Isolated)
2023-07-26 11:50:24 1243
原创 Spring Security 授权体系结构
例如,在具有“Admin”和“User”角色概念的应用程序中,希望管理员(“Admin”)能够执行普通用户(“User”)的所有操作。用户可以通过实现 AuthorizationManager 接口来自定义授权控制,同时,Spring Security 附带了一个委托 AuthorizationManager,它可以与各个 AuthorizationManager 进行协作。至此,Spring Security 的授权架构介绍完毕,在这篇文章中,更多的是方法论,具体的使用细节将在后续文章中进行补充。
2023-07-25 17:44:55 480
原创 Spring Security 身份验证的基本类/架构
用作验证用户凭据的基本过滤器。在对凭证进行身份验证之前,Spring Security 通常会使用来请求凭证。doFilter 源码】//总流程//身份认证过滤器的处理流程if (!} else {try {//1- 尝试进行身份验证return;//2-如果验证成功,创建新会话,更新sessionId//3-调用认证成功后处理流程//4-调用认证失败后处理流程//4-调用认证失败后处理流程接下来,可以对提交给它的任何身份验证请求进行身份验证。
2023-07-24 11:22:01 885
原创 Spring Security 的工作原理/总体架构
这些过滤器的排序是Spring官方提供的,后来Spring可能觉得这样展示的意义不大,删去了这部分内容, 补充了一些从日志查看过滤器加载顺序的说明。//首先说,这里就是 Spring Security 的工作原理,重中之重,非常重要,虽然讲的是一个异常过滤器,但是实际上是一个执行流程。// 在Spring 中,Spring 管理过滤器的生命周期,所以 Filter 实例也是 Spring 中的一个Bean。//见名知意,过滤器链的代理 FilterChainProxy 中会持有过滤器链的对象。
2023-07-20 17:18:21 309
原创 前端基础: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 686
原创 操作系统17:外存组织方式和文件存储管理
索引组织方式的主要问题是,每当建立一个索引文件时,应为该文件分配一个索引块将分配给该文件的所有盘块号记录于其中。,称为第一级索引,即系统再分配一个索引块,作为第一级索引的索引块,将第一块、第二块、···.··等索引块的盘块号填入到此索引表中,这样便形成了两级索引分配方式。这种方法的优点是用于分配和回收一个盘块的过程非常简单,但在为一个文件分配盘块时,可能要重复操作多次,分配和回收的效率较低。这样,在为文件分配磁盘空间时,就无须知道盘块的大小,只要根据不同的磁盘容量,选择相应大小的簇,使 NTFS。
2023-07-14 13:21:08 1832
原创 操作系统16:文件共享和文件保护
下图中给出了两个保护域。当用户通过 D5 访问被链接的文件 F8,且正要读 LINK 类新文件时,此要求将被 OS 截获,OS 根据新文件中的路径名去找到文件 F8,然后对它进行读(写),这样就实现了对文件 F8 的共享。号,表示运行在 D1 域中的进程可以将其对文件 F3 的写访问权扩展到域 D3 中去,类似的,在域 D2 中对文件 F2 的读访问权也是一样。,即有多个属于不同用户的多个目录,同时指向同一个文件,虽会破坏树的特性,但这些用户可用对称的方式实现文件共享,而不必再通过其属主目录来访问。
2023-07-14 13:19:22 777 2
原创 操作系统15:文件和文件目录
在对索引顺序文件进行检索时,首先也是利用关键字以及某种查找算法去检索索引表,找到该记录所在记录组中第一个记录的表项,从中得到该记录组第一个记录在主文件中的位置。但为了能实现文件存储空间的动态分配,通常由 Hash 函数所求得的并非是相应记录的地址,而是指向某一目录表相应表目的指针,该表目的内容指向相应记录所在的物理块,如下图所示。索引顺序文件是对顺序文件的一种改进,它基本上克服了变长记录的顺序文件不能随机访问,以及不便于记录的删除和插入的缺点,它是顺序文件和索引文件相结合的产物。单级文件目录如下图所示。
2023-07-13 09:53:34 1629
原创 操作系统14:缓冲区和磁盘调度算法
SCAN 算法既能获得较好的寻道性能,又能防止“饥饿”现象,但是当磁头刚从里向外移动而越过了某一磁道时,恰好又有一进程请求访问此磁道,这时,该进程必须等待,待磁头继续从里向外,然后再从外向里扫描完处于外面的所有要访问的磁道后,才处理该进程的请求,致使该进程的请求被大大地推迟。在设备输入时,先将数据送入第一缓冲区,装满后便转向第二缓冲区。如,用于指示下一个有数据的缓冲区 G 的指针 Nextg,指示下次可用的空缓冲区 R 的指针 Nexti,以及用于指示正在使用的缓冲区 C 的指针 Current。
2023-07-12 09:02:15 1200
原创 操作系统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 2319
原创 操作系统12:I/O系统的功能、模型、接口及 I/O 设备和设备控制器
I/O 系统管理的主要对象是 I/O 设备和相应的设备控制器。其最主要的任务是,完成用户提出的 I/O 请求,提高 I/O 速率,以及提高设备的利用率,并能为更高层的进程方便地使用这些设备提供手段。
2023-07-10 11:01:59 1846
原创 操作系统11:虚拟存储器
一次性,是指作业必须一次性地全部装入内存后方能开始运行。驻留性,是指作业被装入内存后,整个作业都一直驻留在内存中,其中任何部分都不会被换出,直至作业运行结束。由此可以看出,上述的一次性及驻留性特征使得许多在程序运行中不用或暂时不用的程序占据了大量的内存空间,而一些需要运行的作业又无法装入运行,显然,这是在浪费宝贵的内存资源。所谓虚拟存储器,是指具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的一种存储器系统。
2023-07-07 13:29:45 1897
原创 操作系统10:分页存储和分段存储
连续分配方式会形成许多“碎片”,虽然可通过“紧凑”方法将许多碎片拼接成可用的大块空间,但须为之付出很大开销。如果允许将一个进程直接分散地装入到许多不相邻接的分区中,便可充分地利用内存空间,而。基于这一思想而产生了离散分配方式。根据在时所,又可将离散分配分为以下三种:分页存储管理方式//程序分页,存储分块分段存储管理方式。
2023-07-06 09:32:37 3018 1
原创 操作系统9:存储管理之连续分配和对换
若大小为 2^(i+1) 的空闲分区也不存在,则需要查找大小为 2^(i+2) 的空闲分区,若找到则也对其进行两次分割:第一次,将其分割为大小为 2^(i+1) 的两个分区,一个用于分配,一个加入到大小为 2^(i+1) 的空闲分区链表中;,如回收大小为 2^i 的空闲分区时,若事先已存在 2i 的空闲分区,则应将其与伙伴分区合并为大小为 2^(i+1) 的空闲分区,若事先已存在 2^(i+1) 的空闲分区,又应继续与其伙伴分区合并为大小为 2^(i+2) 的空闲分区,依此类推。
2023-07-06 09:31:07 437
原创 操作系统8:存储器的层次结构及程序的装入和链接
在链接成一个装入模块后,原模块 B 和 C 在装入模块的起始地址不再是 0,而分别是 L 和 L+M,所以此时须修改模块 B 和 C 中的相对地址,即把原 B 中的所有相对地址都加上 L,把原 C 中所有相对地址都加上 L+M。由此可见,正确的方法应该是,将取数指中的地址 2500 修改成 12500,即把指令中的逻辑地址 2500 与本程序在内存中的起始地址 10000 相加才得到正确的物理地址 12500。或者说,存储器的速度必须非常快,能与处理机的速度相匹配,否则会明显地影响到处理机的运行。
2023-07-05 16:54:57 370
原创 操作系统7:进程死锁
在系统中有许多不同类型的资源,其中可以引起死锁的主要是,采用互斥访问、不可以被抢占的资源,即临界资源。系统中这类资源有很多,如打印机、数据文件、队列、信号量等。在一组进程发生死锁的情况下,这组死锁进程中的每一个进程,都在等待另一个死锁进程所占有的资源。由于所有这些进程已都无法运行,因此它们谁也不能释放资源,致使没有任何一个进程可被唤醒。这样这组进程只能无限期地等待下去。所以,如果一组进程中的每一个进程都在等待仅由该组进程中的其它进程才能引发的事件,那么该组进程是死锁的(DeadLock)。
2023-07-05 16:28:47 386
原创 操作系统5:线程的概念和线程实现
而用户级线程在切换时则不须转入内核态,而是由运行时系统中的线程切换函数,来执行切换任务,该过程将线程的 CPU 状态保存在该线程的堆中,然后按照一定的算法,选择一个处于就绪状态的新线程运行,将新线程堆栈中的 CPU 状态装入到 CPU 相应的寄存器中,一旦将栈指针和程序计数器切换后,便开始了新线程的运行。对于用户的线程切换而言,其模式切换的开销较大,在同一个进程中,从一个线程切换到另一个线程时,需要从用户态转到内核态,因为用户进程的线程在用户态运行,而线程调度和管理是在内核实现的,系统开销较大。
2023-06-29 16:18:08 476
原创 操作系统4:进程通信类型和通信实现方式
进程通信是指进程之间的信息交换。由于进程的互斥与同步,需要在进程间交换一定的信息,所以它们也是一种进程通信,但只是一种低级的进程通信。//数据量少//过程繁琐在进程之间要传送大量数据时,应当利用 OS 提供的高级通信工具,该工具最主要的//数据量大//使用简单。
2023-06-29 15:32:50 1375 1
护眼插件-浏览器夜间模式
2022-09-08
apache-jmeter-3.1.rar
2020-04-17
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人