Spring第一篇--IOC和DI
Spring 是什么spring 是一个框架,其通过 IOC(控制反转)和 DI(依赖注入)将一个复杂的系统解耦,从系统之间直接耦合变为各系统同 spring 耦合,从而能够降低系统的耦合度
什么是 IOC正常情况下,对象之间就像齿轮一样紧紧耦合,但是这样带来一个问题,某一个部分挂了,就会导致整个系统不可用,耦合度过高,容易牵一发动全身
耦合关系不仅会出现在对象与对象之间,也会出现在软件系统的各模块之间,以及软件系统和硬件系统之间。如何降低系统之间、模块之间和对象之间的耦合度,是软件工程永远追求的目标之一。为了解决对象之间的耦合度过高的问题,软件专家 Michael Mattson 1996 年提出了 IOC 理论,用来实现对象之间的“解耦”,目前这个理论已经被成功地应用到实践当中。
由于引进了中间位置的“第三方”,也就是 IOC 容器,使得 A、B、C、D 这 4 个对象没有了耦合关系,齿轮之间的传动全部依靠“第三方”了,全部对象的控制权全部上缴给“第三方”IOC 容器,所以,IOC 容器成了整个系统的关键核心,它起到了一种类似“粘合剂”的作用,把系统中的所有对象粘合在一起发挥作 ...
.git里有什么
.git 是什么.git 是一个目录,在 git 中也可称之为仓库,里面有 git 所有的提交记录,提交的文件,分支信息,tag 信息,是 git 的核心
.git 里有什么
探秘.git 文件夹HEADHEAD 是一个引用,引用的具体内容是当前正在工作的分支
configconfig
Git基础
git 是非常知名常用的版本管理系统,本知识库将介绍 git 的使用
使用 Git 前需要做的最小配置配置用户名和邮件git config --global user.name 'zzg'
git config --global user.email 'zzg373692503@hotmail.com'
参数有–global,–local,–systemlocal:区域为本仓库global: 当前用户的所有仓库system: 本系统的所有用户
清除已配置的 name 和 emailgit config --unset --local user.name
git config --unset --global user.name
git config --unset --system user.name
显示 Git 的配置git config --list --local
git config --list --global
同时配置了 local 和 global则优先使用 local 的配置
Git 使用初始化 git 仓库已有代码建立仓库cd 到已有的代码文件夹
g ...
虚拟内存及页表
为什么要使用虚拟内存有助于实现隔离性
虚拟内存的概念给包括内核在内的所有程序专属的地址空间。所以,当我们运行 cat 时,它的地址空间从 0 到某个地址结束。当我们运行 Shell 时,它的地址也从 0 开始到某个地址结束。内核的地址空间也从 0 开始到某个地址结束。
虚拟内存可以比物理内存更大,也可以比物理内存更小
页表(Page Tables)什么是页表页表是在硬件中通过处理器和内存管理单元(Memory Management Unit)实现,页表顾名思义为一个表,其保存了虚拟内存和物理内存的映射关系,页表自身也保存在内存中,因此 cpu 中会有一个专门的寄存器保存页表的内存地址
页表是怎么工作的** 页表中不会为每个地址记录一个条目,这会导致页表体积非常大**页表中保存的是页表的地址
index 和 offset页表中被分为两个部分,一部分被称为 index,一部分被称为 offset,index 用来确定是哪个 page,offset 用来确定 page 中的哪一个字节
假设 offset 是 12,那么 page 中的第 12 个字节被使用了。将 offset ...
操作系统的组织结构
操作系统的的几个组织架构
Isolation。隔离性是设计操作系统组织结构的驱动力。
Kernel 和 User mode。这两种模式用来隔离操作系统内核和用户应用程序。
System calls。系统调用是你的应用程序能够转换到内核执行的基本方法,这样你的用户态应用程序才能使用内核服务。
操作系统的隔离性为什么操作系统要有隔离性
我们在用户空间有多个应用程序,例如 Shell,echo,find。但是,如果你通过 Shell 运行你们的代码时,假设你们的代码出现了问题,Shell 不应该会影响到其他的应用程序。举个反例,如果 Shell 出现问题时,杀掉了其他的进程,这将会非常糟糕。所以需要在不同的应用程序之间有强隔离性。
同样操作系统和用户程序间也需要强隔离性,当应用程序出现问题时,希望操作系统不会因此而崩溃。比如说向操作系统传递了一些奇怪的参数,希望操作系统仍然能够很好的处理它们(能较好的处理异常情况)。也需要在应用程序和操作系统之间有强隔离性。
协同调度假设没有操作系统,来调度应用程序的 cpu 等资源使用,则应用程序如 shell 就会主动定期释放 cpu 等资源。将 ...
1.基本介绍及环境搭建
操作系统的组成
操作系统分为内核态(kernel)和用户态(user)两层
内核态主要负责管理 cpu,内存等计算机资源,并向上层用户态应用提供服务
内核包含文件系统,访问控制等关键组件
Linux 操作系统文件描述符
定义
内核(kernel)利用文件描述符(file descriptor)来访问文件。文件描述符是非负整数。打开现存文件或新建文件时,内核会返回一个文件描述符。读写文件也需要使用文件描述符来指定待读写的文件。
Linux 启动时会打开三个文件描述符 ,分别代号为 0,1,2,代号为 0 的是标准输入(STDIN_FILENO),代号为 1 的是标准输出(STDOUT_FILENO),代号为 2 标准错误输出(STDERR_FILENO)。
根据 Linux 一切皆文件的思想,标准输入,标准输出,标准错误输出均为文件。 这打开的三个文件分别是:/dev/stdin(标准输入文件),/dev/stdout(标准输出文件),/dev/stderr(标准出错文件)。
如果此时去打开一个新的文件,它的文件描述 ...
Java序列化
序列化与反序列化的定义序列化是将对象转换为可传输格式的过程。是一种数据的持久化手段。一般广泛应用 于网络传输,RMI 和 RPC 等场景中。反序列化是序列化的逆操作。 序列化是将对象的状态信息转换为可存储或传输的形式的过程。一般是以字节码或 XML 格式传输。而字节码或 XML 编码格式可以还原为完全相等的对象。这个相反的过程 称为反序列化
Java 对象的序列化与反序列化在 Java 中,我们可以通过多种方式来创建对象,并且只要对象没有被回收我们都可以复用该对象。但是,我们创建出来的这些 Java 对象都是存在于 ** JVM 的堆内存** 中的。只有 JVM 处于运行状态的时候,这些对象才可能存在。一旦 JVM 停止运行,这些对象的状态 也就随之而丢失了。** 但是在真实的应用场景中,我们需要将这些对象持久化下来,并且能够在需要的时候把 对象重新读取出来** 。Java 的对象序列化可以帮助我们实现该功能。对象序列化机制(object serialization)是 Java 语言内建的一种对象持久化方式, 通过对象序列化, 可以把对象的状态保存为字节数组 ,并且可以在有需要的时 ...
Java NIO
NIO 解释NIO 是一种 IO 模型,相对于经典 IO,是非阻塞的。
NIO 模型相比经典 io 基于流的传输,NIO 采用的是缓冲区的方式,基于块的传输
Channel 分类
FileChannel
FileChannnel 允许你向文件里读写内容
DatagramChannel
DatagramChannel 允许你通过 UDP 协议读写网络上的内容
SocketChannel
SocketChannel 允许你通过 TCP 协议读写网络上的内容
ServerSocketChannel
allows you to listen for incoming TCP connections, like a web server does. For each incoming connection a SocketChannel is created.
NIO 读写文件 Demopublic static void main(String[] args) throws IOException {
RandomAccessFile afile=n ...
Java字节及字符操作
字节和字符定义
Bit 最小的二进制单位 ,是计算机的操作部分。取值 0 或者 1
Byte(字节)是计算机操作数据的最小单位由 8 位 bit 组成 取值(-128-127)
Char(字符)是用户的可读写的最小单位,在 Java 里面由 16 位 bit 组成 取值(0- 65535)
字节流操作 byte 类型数据,主要操作类是 OutputStream、InputStream 的子类;不用缓 冲区,直接对文件本身操作。
字符流
Java学习路线
基础字节操作字符操作序列化与反序列化网络操作NIO泛型深入异常处理深入缓存池反射并发编程
http://concurrent.redspider.group/RedSpider.html > https://github.com/RedSpider1/concurrent
设计模式
https://refactoringguru.cn/design-patterns#intro-patterns
框架ServletSpringSpringMVCMybatisSpring Boot