tcp
TCP三次握手ACK和ack
ACK:TCP协议中的一个标志位,标识是否对上一个包进行了确认操作
ack:32位确认号,等于上一个包的序列号seq+1
此外
SYN:同步标志位,用于建立会话连接
seq:32位序号,通过该序号确认发送的数据是有序的
步骤
第一次,客户端将SYN位置1,表示开始建立同步会话。产生一个随机数x作为序列号seq,保存至TCP报文首部的序列号字段中。知名客户端打算连接的端口,将该数据包发送给服务器端,接着客户端进入SYN_SENT状态,等待服务端的响应。
第二次,服务端接收到数据包,先检查SYN标志位,发现为1,得知客户端要建立链接。于是服务端构造数据包:将SYN位和ACK位都置为1,表示当前要建立同步连接且对上一个包进行了确认,将ack字段填充为x+1,接着随机产生一个随机数y填入seq字段,发送给客户端,服务器进入SYN_Rcvd状态。
第三次,客户端检查ack字段是否为x+1,若接收到了,则将ack字段置为y+1发送给服务端,服务端接收后检查ack字段为y+1则建立连接。此时客户端和服务端进入ESTABLISHED状态,开始传输数据。
...
深入理解计Java虚拟机
参考资料《深入理解Java虚拟机:第3版》
概述Java,91年诞生,95年发布
09年sun被oracle收购
运行时数据区
其中,方法区和堆是所有线程共享的数据区,虚拟机栈、本地方法栈、程序计数器为每份线程独有的。
程序计数器当前线程所执行的字节码的行号指针,由于线程切换后需要恢复执行环境,故每条线程都需要一个独立的程序计数器来保存执行位置,这样才能保证各条线程之间互不影响。
如果当前线程执行方法为本地(native)方法,则当前线程该计数器值为空
虚拟机栈Java虚拟机栈也是线程私有,描述Java方法执行的线程内存模型:每个方法执行时,Java虚拟机都会创建一个栈帧,该栈帧用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每个方法从被调用直至执行完毕的过程,对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。
局部变量表中存储的编译期可知的各种Java虚拟机基本数据类型(boolean、byte、char、short、int、float、long、double)、对象引用和returnAddress类型。在局部变量表中这些值会占用不同大小的变量槽,其中64位的long和doubl ...
深入理解计算机系统
资料CS:APP3e, Bryant and O’Hallaron (cmu.edu)
15-213/15-513 Introduction to Computer Systems (cmu.edu)
Kernighan The C Programming Language
Bits,Bytes,Integer
Byte = 8bits
二进制每四位可以转为一个十六进制
地址是由机器字长决定的,比如64位的机器表示地址是64位长=8字节
基于布尔运算来进行位运算
布尔运算
AND & 交
A&B = 1 when A和B都为1
Or | 并
A|B=1 when A和B至少有一个为1
Not ~ 补
~A=1 when A = 0
Exclusive-Or(Xor) | 对称差
A^B=1 when A和B值不同
非位运算:&&,||,!
0为假,非0为真,且有短路运算
位移操作
左移 x << y
高位丢失,低位补0
右移 x >&g ...
Java百科(八股文)
说点什么”八股文“为大众所知是一种明清时代的考试题目格式,一种为应试而生的文体。而 Java八股文之所以叫也叫八股文,很大原因是因为其同样是为了应试而生的。
从来以为技术性的岗位面试中,应当是交流彼此的开发思想,谈论各自学习方法以及问题解决能力等,但现如今的Java面试,自从Java八股文出现之后,便成为了招聘者与应聘者的题库,招聘者从其中挑选出问题,而应聘者不管真实能力如何,只需要熟背Java八股文,便可以获得一份不错的工作。招聘方迅速从庞大的应聘者群体中筛选需要的人才,应聘者也需要在短时间的交流中展现自己的能力,这也是招聘方与应聘者都无可奈何的一件事。
我从来喜欢的学习方法为:先使用,再学习。这是因为在使用的过程中,可以碰到各种问题,这个时候再去找相关资料阅读,会对这个点有很深的印象。而如果先学习的话,很多时候都会不明就里,即使记住了,也不知道这个概念会在哪里用到,过不了一周便会忘记。故如果是为了应试而去背诵Java八股文,里面的很多知识点就算记住了,其实也不会对开发能力有多少提升。
然而,如果Java八股文褪去其”应试“的这层外衣,其本质上是一本很不错的Java百科。并且在开发者 ...
sax
sax介绍sax与dom解析不同的是,他是自顶向下的,边扫描边解析,适用于大数据量的,只有读取需求的时候
使用我们使用的xml源数据为
1234567891011121314<Persons> <person> <id>14233222322323</id> <name>张三</name> <age>15</age> <isMen>true</isMen> </person> <person> <id>14233222322323</id> <name>李四</name> <age>15</age> <isMen>true</isMen> </person></Persons>
这里我们的需 ...
Vite
Vite用于搭建前端项目的脚手架
npm+vite相当于后端的maven
使用Vite创建项目1npm create vite
初次使用会提示下载vite依赖,输入y继续
输入工程名
选择依赖的框架
选择语法 JS or TS
下载依赖vite创建好工程后有package.json,但并没有下载依赖,npm i 下载package.json中的依赖
pathpath 模块主要用于生成绝对路径,这样可以在项目代码中使用相对路径别名来引用文件和目录。具体地,path.resolve 函数用于将相对路径解析为绝对路径。
下面是代码中 path 用法的详细解释:
123456789import path from "path";// ... 其他代码 ...resolve: { alias: { '@': path.resolve(__dirname, './src') }}
**import path from "path";**:这行代码从 Node. ...
ajax
AjaxAsynchronous JavaScript and XML
可以在不重新加载整个页面的情况下,与服务器交换数据
不需要浏览器插件,只需要运行JavaScript执行
Ajax的一种实现方式:XMLHttpRequest
不必等待响应回来就可以继续操作甚至可以发送下一个ajax请求
Ajax的实现
原生JS实现方式
第三方封装好的工具如 jquery
使用框架 vue axios
原生JS123456789101112function getMessage(){ var request = new XMLHttpRequest(); // request.readState 1 2 3 4,其中4为收到响应 // 回调函数 request.onreadystatechange=function(){ if(request.readyState == 4 && request.status == 200){ document.write(request.respons ...
boobLab实验
参考资料手把手教你拆解 CSAPP 的 炸弹实验室 BombLab - 知乎 (zhihu.com)
环境准备WSL2的ubuntu,安装了vim,gcc以及gdb
炸弹下载1wget csapp.cs.cmu.edu/3e/bomb.tar
压缩包中包括可执行文件bomb本体,源码bomb.c,以及一份README
源码123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119/*************************************************************************** * Dr. Evil& ...
camel
一些专业名词EIP: enterprise integration pattern
SLA: service-level agreement 服务等级协议
认识CamelCamel的消息模型MESSAGEmessage按照一个方向流动,从发送方到接收方。
message包含以下部分
body
object类型,无大小限制,若发送接收两方使用不同的body格式,camel提供了适配器组件
headers
键值对的形式,存储一些与消息由关的值,比如发送方的标识,或者消息的编码、验证信息等。
key为大小写不敏感的唯一值,value可以为任意object,且对大小,数量无限制,以map存储
attachments
附件,web service或者email 中使用
每个message都有一个string类型的id标识,其唯一性由消息的创建者保证。
message也有失败标识“fault flag”,在一些协议中比如soap,错误信息和返回的消息是不同的消息。 但它们都属于合法的响应
EXCHANGEexchange是message在routing过程时的容器
结构如下
Exchan ...
echarts
系统图遍历各关系突出显示1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859// 获取节点与关系用于操作var lines = option.series[0].links;var items = option.series[0].data;// 初始化状态,若定义初始化状态则此部分无用for (var ii in items) { items[ii].symbolSize = 10; items[ii].label.show = true;}for (var jj in lines) { lines[jj] = { source: lines[jj].source, target: lines[jj].target, lineStyle: { color: 'white' ...