- 博客(41)
- 收藏
- 关注
原创 SpringMVC源码笔记一
本文将通过一个简单的示例,来展示自己在看SpringMVC的过程。创建一个项目,很简单创建一个get请求的路由,然后返回hello world的值。接下来我们在DispatcherServlet的doDispatch方法上打一个断点,然后调试。SpringMVC的请求都会到这个方法中来。我们可以看到很多参数,请求ip,端口号等等,请求的uri,请求的Get方法等等。跳过一些对象的初始化过程,来到checkMultipart函数。发现解析器没有被配置,即退出这个函数,那么我们的request还
2021-12-16 11:26:18 908
原创 vscode下mit-scheme配置
sudo apt-get install mit-schemevscodevscode-scheme插件Code Runner插件在json文件下加入"code-runner.executorMap": { "scheme": "scheme <$fullFileName",}
2021-07-18 14:22:24 592
原创 目标文件相关
目标文件目标文件的格式目标文件就是源代码编译后但未进行链接的那些中间文件(win上的.obj文件和linux上的.o文件),它跟可执行文件的内容和结构相似。动态链接库(win上的.dll和linux的.so)以及静态链接库(win的.lib和linux的.a)都按照可执行文件格式存储。file foobar.ofile /bin/bashfile /lib/ld-2.6.1.so目标文件的结构目标文件将不同属性的信息按照节或者段存储。源代码编译后的机器指令经常被放在代码段中,常见的名字
2021-06-18 00:38:43 257 1
原创 Openssl C++ API
Openssl C++ APIBase64将8位二进制信息编码为ASCII码。openssl命令 base64 or-enc base64EVP API EVP_EncodeBlock((unsigned char *)encodeData,sourceDta,16);EVPEVP_PKEY 对象用于存储公钥和(可选)私钥,以及相关的算法和参数。支持的类型有:EVP_PKEY_EC:椭圆曲线密钥(用于 ECDSA 和 ECDH) - 支持签名/验证操作和密钥派生EVP_PKEY_RS
2021-06-15 11:03:19 822 1
原创 I/O复用:select和poll函数
I/O复用:select和poll函数进程预先告知内核,使得内核一旦发现进程指定的一个或多个I/O条件就绪就通知进程的能力是I/O复用。使用场景:客户处理多个描述符时,必须使用I/O复用一个客户同时处理多个套接字一个TCP服务器既要处理监听套接字,又要处理已连接套接字一个服务器既要处理TCP,又要处理UDP一个服务器要处理多个服务或者多个协议I/O模型阻塞式I/O非阻塞式I/OI/O复用信号驱动式I/O异步I/O阻塞式I/O[外链图片转存失败,源站可能有防盗链机制,建议
2021-06-10 17:34:29 153 1
原创 OpenSSL笔记
OpenSSL笔记OpenSSL中的命令man ciphers 查看配置密码套件的详细信息openssl help 第一部分列出所有可用的实用程序 第二部分列出消息摘要命令列表 第三部分列出所有密码命令的列表密钥和证书管理步骤:生成私钥创建证书签名请求CSR并将其发送给CA在服务器上安装CA提供的证书密钥生成密钥算法openssl支持rsa,dsa,ecdsa,eddsa算法。钥匙尺寸RSA密钥20
2021-06-10 16:06:11 105
原创 编译和链接
编译和链接C语言的编译过程预编译gcc -E hello.c -o hello.ig++ hello.c > hello.i预编译过程主要处理#开头的预编译指令。处理规则:删除所有#define,并展开所有的宏定义处理所有条件预编译指令处理#include预编译指令,并将被包含的文件插入到该预编译指令的位置删除所有注释//和/*添加行号和文件名标志保留所有的#pragma编译器指令编译编译指把预处理完的文件进行一系列的词法分析,语法分析,语义分析和优化后生成相应的汇编代
2021-06-09 00:50:31 79
原创 UDP套接字编程
UDP套接字编程[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Jb3h9pYw-1623143489825)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210608110650766.png)]recvfrom和sendto函数#include <sys/socket.h>//前三个参数等同于read和write函数的三个参数:描述符,指向读入或写出缓冲
2021-06-08 23:52:09 186
原创 TCP客户/服务器程序
POSIX信号处理信号是告知某个进程发生某件事情的通知,也称软件中断。通常是异步发生的。信号可以:有一个进程发给另一个进程由内核发给某个进程每个信号都有与之关联的行为,我们可以通过sigaction函数来设定一个信号的处置,并有三种选择。(1)可以提供一个函数,只要有特定信号发生他就被调用。这样的函数称为信号处理函数,这种行为称为捕获信号。SIGKILL和SIGSTOP不能被捕获。(2)我们可以把某个信号的处置设定为SIG_IGN来忽略它。SIGKILL和SIGSTOP不能被忽略。(3)
2021-06-03 18:02:04 139
原创 基本TCP套接字编程
基本TCP套接字编程socket函数#include <sys/socket.h>//family指明协议族,type指明套接字类型,protocol指明协议类型int socket(int family, int type, int protocol);family常值type常值AF_INET或AF_INET6的protocol常值socket函数中family和type参数的组合基本TCP客户/服务器程序的套接字函数AF_前缀表示地址族,PF _ 前缀协议族
2021-06-01 15:58:36 162 3
原创 套接字编程简介
套接字编程简介字节排序函数小端字节序:低位字节存储在起始地址。大端字节序:高位字节存储在起始位置。网际协议:使用大端字节序。字节序转换函数:#include<netinet/in.h>//net to host long374 extern uint32_t ntohl (uint32_t __netlong) __THROW __attribute__ ((__const__));//net to host short375 extern uint16_t ntohs (
2021-05-31 16:42:00 106
原创 动态字符串
动态字符串构造redis使用SDS作为默认的字符串表示。struct sdshdr { // buf 中已占用空间的长度 int len; // buf 中剩余可用空间的长度 int free; // 数据空间 char buf[];};[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JmCspG0t-1622432700875)(C:\Users\Administrator\AppData\Roamin
2021-05-31 11:45:22 304
原创 CS144 Lab0实验四
CS144 Lab0实验四An in-memory reliable byte streambyte stream.hh#ifndef SPONGE_LIBSPONGE_BYTE_STREAM_HH#define SPONGE_LIBSPONGE_BYTE_STREAM_HH#include <string>//! \brief An in-order byte stream.//! Bytes are written on the "input" side and rea
2021-05-16 03:03:50 351
原创 镜像推送到Harbor
镜像推送到Harbor创建Dockerfile并build登录私有仓库登录Harbor根据Harbor官网上的命令进行tag和push
2021-04-27 15:45:53 655 1
原创 Docker命令和Dockerfile指令
Docker常用命令docker info:返回所有容器和镜像的数量,Docker使用的执行驱动和存储驱动,以及Docker的基本配置。docker run:创建并运行容器,该命令会先检查本地是否存在ubuntu镜像,如果本地没用该镜像,则会连接官方的镜像仓库拉去镜像,如果没有就拒绝。docker ps -a:查看当前系统中容器的列表。docker rm:删除容器。docker start :启动容器。docker restart:重启容器。docker create:创建容器,但不运行。d
2021-04-27 15:29:56 143
原创 数据库中的事务
数据库中的事务事务是访问并可能更新各种数据项的一个程序执行单元。特性:ACID原子性:要么执行其全部内容,要么根本不执行。隔离性:确保事务正常执行而不被来自并发执行的数据库语句所干扰。持久性:事务执行后,对数据库的操作是永久性的。一致性:如果一个事务作为原子从一个一致的数据库状态开始独立地运行,则事务结束时数据库必须再次是一致的。隔离性级别可串行化:通常保证可串行化调度。可串行化调度指的是调度在某种意义上等价于一个串行调度。串行调度指的是一次执行一个事务,每个事务仅当前一事务执行完后才
2021-04-03 15:57:33 99
原创 规则优化
规则优化条件优化移除不必要的括号常量传递:某个常量与列的等值匹配,且其他条件包含这个值,就直接进行替换例如a=5 and b>a 则可以变成 a=5 and b>5移除没用的条件表达式计算最好让索引列以单独的形式出现在搜索条件表达式中HAVING子句和WHERE子句的合并常量表检测查询的表中一条记录都没有,或者只有一条记录使用主键等值匹配或者唯一二级索引列等值匹配作为搜索条件来查询这个表外连接消除如果where子句的搜索条件“指定被驱动表
2021-03-28 15:04:41 246
原创 InnoDB的存储方式
InnoDB的存储方式永久存储:存储在磁盘中。非永久存储:存储在内存中。mysql5.6.6之后数据默认存储在磁盘上。磁盘上统计数据innodb_table_stats表字段名描述database_name数据库名table_name表名last_update本条记录最后更新的时间n_rows表中记录的条数clustered_index_size表的聚簇索引占用的页面数量sum_of_other_index_sizes表的其他索引占用
2021-03-27 00:33:10 404
原创 优化成本
优化成本读取一个页面花费的成本默认为1.0。读取以及检测一条记录是否符合搜索条件的成本默认是0.2。找出成本最低的方法的过程:根据搜索条件,找出所有可能使用的索引。计算全表扫描的代价。计算使用不同索引执行查询的代价。对比各种执行方案的代价,找出成本最低的那个方案。全表扫描的代价:聚簇索引占用的页面数该表中的记录数二级索引+回表的代价:扫描区间数量需要回表的记录数index dive:通过直接访问索引对于的B+树来计算机某个扫描区间内对应的索引记录条数。IN语句中对应
2021-03-26 22:56:18 185
原创 表连接
表连接笛卡尔积:连接查询的结果集中包含一个表中的每个记录与另一个表中的每条记录相互匹配的组合。连接步骤:先通过第一个需要查询的表中,即驱动表,查找跟单表查询的条件相匹配的记录,每获取一条记录就去匹配被驱动表中符合单表过滤情况的记录,然后得到最后的结果。内连接和外连接内连接的两个表,若驱动表中的记录在被驱动表中找不到匹配的记录,则该记录不会加入到最后的结果集。外连接的两个表,若驱动表中的记录在被驱动表中找不到匹配的记录,也仍然需要加入结果集。左外连接:左侧的表为驱动表。右外连接:右侧的表炜驱动表
2021-03-25 21:47:58 96
原创 单表访问方法
单表访问方法访问方法即mysql执行查询语句的方法。const:mysql通过主键或者唯一二级索引列定位一条记录的访问方法。ref:搜索条件为二级索引列与常数进行等值比较,形成的扫描区间为单点扫描区间,采用二级索引来执行查询的方法是ref方法。ref_or_null:与ref方法相比,多了值为NULL的二级索引记录。range:对应若干个单点扫描区间或者范围扫描区间。index:扫描全部二级索引记录的访问方法。all:使用全表扫描执行查询的访问方法。等值查找比范
2021-03-25 20:19:32 104
原创 InnoDB表空间
InnoDB表空间表空间就是存放页的地方。类型名称十六进制描述FIL_PAGE_TYPE_ALLOCATED0x0000最新分配,还没使用FIL_PAGE_UNDO_LOG0x0002Undo日志页FIL_PAGE_INODE0x0003段信息节点FIL_PAGE_IBUF_FREE_LIST0x0004Insert Buffer空闲列表FIL_PAGE_IBUF_BITMAP0x0005Insert Buffer位图FIL_PAG
2021-03-22 19:58:33 204
原创 InnoDB数据页结构
InnoDB数据页结构名称中文名占用空间大小简单描述File Header文件头部38字节页的一些通用信息Page Header页面头部56字节数据页专有的一些信息Infimum+Supremum页面中最小记录和最大记录26字节两个虚拟的记录User Records用户记录不确定用户存储的记录内容Free Space空闲空间不确定页中尚未使用的空间Page Directory页目录不确定页中某些记录的相对位置
2021-03-20 22:05:40 86
原创 InnoDB记录存储结构
InnoDB记录存储结构InnoDB是一个将表中的数据存储到磁盘上的存储引擎,我们真正处理数据的时候是在内存中处理,所以我们需要将数据加载到内存中。InnoDB是将数据分成若干页,页的大小一般为16KB,一次最少读取一页。COMPACT行格式额外信息为了方便记录的管理。变长字段长度列表真正的数据内容:第一个二进制位表示标志位:若为0,则是单独字段长度。若为1,则是半个字段长度。数据占用的字节数:放在记录的开头处位置,如果一个字符最多需要的字节数*最多能存字符数<=255,就用1字
2021-03-20 19:45:05 163
原创 Mysql字符集和比较规则
Mysql字符集和比较规则字符集SHOW CHARSET [LIKE 匹配模式];这就是mysql的字符集,第一列表示字符集的名称,第二列表示字符集的描述,第三列表示默认的比较规则,第四列表示最多需要几个字节。比较规则SHOW COLLATION [LIKE 匹配模式];例如这条cp1250表示这个是字符集cp1250的比较规则,ci表示不区分大小写。99表示比较按规则的ID,default表示是否为该字符集默认的比较规则。后缀英文释义含义_aiaccent in
2021-03-19 23:06:12 120
原创 tomcat初始化过程
tomcat初始化过程main方法public static void main(String[] args) { synchronized(daemonLock) { if (daemon == null) { Bootstrap bootstrap = new Bootstrap(); try { bootstrap.init(); } catch (Throwable
2021-03-19 19:44:22 421
原创 tomcat启动流程
tomcat启动流程startup.bat@echo offsetlocalrem 首先设置CURRENT_DIRset "CURRENT_DIR=%cd%"rem 如果CATALINA_HOME不为空,就跳转到gotHomeif not "%CATALINA_HOME%" == "" goto gotHomerem 为空就设置CATALINA_HOMEset "CATALINA_HOME=%CURRENT_DIR%"rem 判断目录下是否有catalina.bat,有的话就跳转if
2021-03-19 15:56:31 229
原创 cs186lab2
Task1根据Inner Node实现Leaf Node的fromBytes方法Inner Node第一个byte表示节点类型,0是内部节点,1是叶子节点,后一个int表示有多少个主键数,孩子节点的个数是主键数+1就是将buffer中的二进制码转换成节点。该方法的意思即先获取方法,然后通过获取nodeType,然后建立keys和children的列表,再次从buffer中获取key数量和值,其中children存放的也是页号,最后创建innernodeLeaf Node第一个byte表示类
2021-03-18 12:37:26 284
原创 垃圾收集器
GC和内存分配策略判断对象是否存货引用计数法在对象中添加一个引用计数器,每当有一个地方引用它,计数器值就加一;引用失效,计数器就减一,任何时刻计数器为0的对象就不可能再被使用。但是这个会出现一个问题,当两个对象已经不被需要时,但是他们互相引用。这两个对象就不能被垃圾收集器收集。可达性分析算法通过GC Root的根对象作为起始节点集,向下搜索,如果可以到达的就是可以使用的,不能到达的是不可能再被使用的。GC Roots包括:虚拟机栈中引用的对象方法区中类静态属性引用的对象方法区中常
2021-03-16 22:20:54 69
原创 Jvm内存分布
Jvm内存分布程序计数器:线程私有,选择下一条要执行的字节码指令,如果执行本地方法,则计数器为空,不会出现任何OutOfMemoryError异常。JAVA虚拟机栈:线程私有,用于存储局部变量表,操作数栈,动态连接,方法出口等信息,局部变量表中存放了8个基础数据类型,对象引用,和returnAddress类型。该区域会出现StackOverflowError和OutOfMemoryError异常。本地方法栈:线程私有,为本地方法服务,会出现StackOverflowError和OutOf
2021-03-16 19:25:37 91
原创 ArrayDeque
ArrayDequeStack已经不被推荐了,现在使用栈和队列的时候推荐ArrayDeque。Resizable-array implementation of the Deque interface. Array deques have no capacity restrictions; they grow as necessary to support usage. They are not thread-safe; in the absence of external synchronizati
2021-03-16 02:03:43 661
原创 ThreadLocal的实现原理
ThreadLocal的实现原理ThreadLocal是用来保证对象被当前线程访问到的。set方法/** * Sets the current thread's copy of this thread-local variable * to the specified value. Most subclasses will have no need to * override this method, relying solely on the {@link #initialValue} *
2021-03-15 22:44:41 83
原创 线程池的五大实现
线程池的实现五大实现newFixedThreadPool:返回一个固定线程数的线程池newSingleThreadExecutor:返回一个只有一个线程的线程池newCachedThreadPool:返回一个可根据实际情况调整线程数量的线程池newSingleThreadScheduledExecutor:返回一个ScheduledExecutorService对象,线程池大小为1。newScheduledThreadPool:返回一个ScheduledExecutorService对象,线程
2021-03-15 15:40:17 148
原创 LinkedList
LinkedListDoubly-linked list implementation of the List and Deque interfaces. Implements all optional list operations, and permits all elements (including null).双链表实现了list和Deque接口。实现所有可选的列表操作,并允许所有元素(包括null)。All of the operations perform as could be
2021-03-15 00:04:25 182
原创 从线程工厂到线程
从线程工厂到线程工厂模式中有四个角色:Factory:抽象的工厂Product:抽象的零件具体的实现工厂具体的实现零件上图就是一个工厂模式。线程池是一个工厂,线程是线程池中的零件。抽象工厂public interface ThreadFactory { /** * Constructs a new {@code Thread}. Implementations may also initialize * priority, name, daemon s
2021-03-14 22:02:18 92
原创 ArrayList源码浅析
ArrayListResizable-array implementation of the List interface. Implements all optional list operations, and permits all elements, including null. In addition to implementing the List interface, this class provides methods to manipulate the size of the a
2021-03-14 01:20:50 138
原创 代理模式
Proxy模式静态代理模式静态代理模式的两种实现,一种根据接口,一种根据继承public interface OrderInterface { String Order(String FoodName);}public class Customer implements OrderInterface { @Override public String Order(String FoodName) { return "点单了" + FoodName;
2021-03-09 20:14:15 106
原创 Singleon模式
Singleon模式想确保任何情况下都绝对只有一个实例的模式称为单例模式。使用场景:数据库的连接池spring bean的单例模式创建和使用写法一:懒汉模式public class Singleton_01 { private static int i = 0; private static Singleton_01 instance; public Singleton_01() { System.out.println(Thread.current
2021-03-09 14:33:12 208
原创 JVM笔记-类加载机制
类加载机制类加载生命周期-XX:+TraceClassLoading打印类加载过程的参数必须初始化的情况遇到new,getstatic,putstatic,invokestatic字节码指令时,若没有进行初始化要进行初始化new关键字实例化对象public class classLoader { public static void main(String[] args) { System.out.println(new father()); }}c
2021-03-06 16:31:20 83
原创 jvm笔记-字节码解释流程
字节码解释引擎解释器和编译器解释器就是通过将一门语言解释成另一门语言进行执行,例如将java解释成C++进行执行而编译器是将程序直接编译成低级语言关于栈的指令集和基于寄存器的指令集栈的指令集就是通过将值压入栈和出栈等操作在操作数栈中进行执行的指令集。寄存器指令集是通过汇编等指令进行操作。寄存器相对于栈而言速度快,但是不可移植,会受到硬件约束。栈指令集速度相对较慢,但可以进行,java就是因为跨平台才火起来的。栈的指令集运行public class calc { public s
2021-03-06 13:52:39 101
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人