https
参考资料HTTPS原理和TLS认证流程全解析 - 知乎 (zhihu.com)
TLS 1.0 至 1.3 握手流程详解 - en_oc - 博客园 (cnblogs.com)
HTTPS协议http协议是明文传输,内容容易被中间人拦截后获取,且中间人可伪装为服务器,向客户端发送伪装的响应。
https在http应用层和tcp传输层中间加了一层SSL安全层,整个加密过程都没有侵入原先的http协议,故对http协议进行了很好的兼容。
TLS/SSLTLS协议就是SSL协议,SSL在被网景公司(Netscape)开发出来后,SSL1.0未公布,2.0具有重大缺陷,96年发布3.0,在SSL3.0的下一个版本便是TLS1.0,在此之后迭代TLS1.0、1.1、1.2和1.3,目前应用最广泛的为TLS1.2。
TLS加密原理类似于TCP会通过握手来建立连接,TLS也会通过握手来交换一些必要的基础信息。
既然TLS是为了保证传输安全,那肯定要对传输的数据进行加密,加密的方式一般有对称加密和非对称加密。
对称加密加密和解密都用的同一个密钥,由于CS方式的特殊性,如果采用对称加密,则会存 ...
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 ...
java反编译相关
字符串replace问题某系统升级后并不是向下兼容的,新系统在运行后,自定义的模块一直报错NoSuchMethodException,查阅代码发现该方法属于在旧系统中存在但是新系统中移除的一个方法,为保证自定义模块继续执行,需要反编译新系统的源码添加该方法来适配自定义的调用。但在某个类的反编译结果中出现了一个很奇怪的现象。该段代码通过jd-gui反编译的结果如下:
123String a;...a.replace(false, '1');
已知String类没有首个参数为布尔值的replace方法,不做修改的话编译肯定是无法通过的。根据经验,猜测应该是原字符转成数字之后,jd-gui又转成布尔值了,而表示成布尔值之后为false的数,按理来说是0。于是使用java的命令行反编译工具javap,反编译结果如下:
1javap -c -v Trace.class > Trace.txt
1234: iconst_05: bipush 497: invokevirtual #3 // Method java/lang/String.repla ...
windows集成身份验证配置edge浏览器
某系统与windows域控配置了sso,故可以使用计算机用户账号登录该系统。当前已可以使用计算机用户账号登录该系统,期望效果为打开系统登陆页面自动登录而无需手动输入用户名和密码。
参考资料配置浏览器以将 Windows 集成身份验证 (WIA) 与 AD FS 配合使用 | Microsoft Learn
IE浏览器配置自动登录打开IE设置菜单中的Internet选项,安全:自定义级别,滑倒最下面,在用户身份验证-登录中旋转自动使用当前用户名和密码登录。
edge浏览器配置系统设置Internet属性
开始菜单搜索 ”inetcpl.cpl“,打开internet属性,设置方式同IE
windows server 默认是允许IE发起自动登录请求的,edge需要在域服务器上设置下(也有可能是新版的edge需要设置)
查看
域管理员权限打开powershell,执行
1Get-AdfsProperties | select -ExpandProperty WiaSupportedUserAgents
可以查看当前支持的浏览器
虽然结尾是.*Edge,但新版的Edge并不支持,故我猜想 ...
深入理解计算机系统
资料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 ...
红黑树
参考资料树(数据结构名词)_百度百科 (baidu.com)
图解:什么是B树?(心中有 B 树,做人要虚心)一文读懂B-树 - 知乎 (zhihu.com)
B树详解与实现 - 知乎 (zhihu.com)
(53条消息) B树、B-树、B+树、B*树介绍_Zzzzzzzz_hu的博客-CSDN博客
图解:什么是红黑树? - 知乎 (zhihu.com)
P9 3 3 1 Balanced Search Trees Red Black BSTs Coursera_哔哩哔哩_bilibili
树概念
单节点是一棵树,树根为其本身
空集合成为空树,空树没有节点
一个节点含有的子树的根节点称为该节点的子节点
一个节点含有的子节点个数称为该节点的度
度为0的节点称为叶节点或终端节点
度不为0的节点称为非终端节点或分支节点
父节点也称双亲节点
一棵树中最大的节点度称为树的度
节点的层次为其父节点的层次+1,根节点为第一层
树的高度或深度为树中最大的节点层次
多棵互不相交的树称为森林
种类
无序树
树中任意节点的子节点之间没有顺序关系
有序树
书中任意节点的子节点之间有顺序关系
二叉树
度 ...
Java百科(八股文)
说点什么”八股文“为大众所知是一种明清时代的考试题目格式,一种为应试而生的文体。而 Java八股文之所以叫也叫八股文,很大原因是因为其同样是为了应试而生的。
从来以为技术性的岗位面试中,应当是交流彼此的开发思想,谈论各自学习方法以及问题解决能力等,但现如今的Java面试,自从Java八股文出现之后,便成为了招聘者与应聘者的题库,招聘者从其中挑选出问题,而应聘者不管真实能力如何,只需要熟背Java八股文,便可以获得一份不错的工作。招聘方迅速从庞大的应聘者群体中筛选需要的人才,应聘者也需要在短时间的交流中展现自己的能力,这也是招聘方与应聘者都无可奈何的一件事。
我从来喜欢的学习方法为:先使用,再学习。这是因为在使用的过程中,可以碰到各种问题,这个时候再去找相关资料阅读,会对这个点有很深的印象。而如果先学习的话,很多时候都会不明就里,即使记住了,也不知道这个概念会在哪里用到,过不了一周便会忘记。故如果是为了应试而去背诵Java八股文,里面的很多知识点就算记住了,其实也不会对开发能力有多少提升。
然而,如果Java八股文褪去其”应试“的这层外衣,其本质上是一本很不错的Java百科。并且在开发者 ...
图像二值化
参考资料为什么图片识别要将彩色图像灰度化? - 知乎 (zhihu.com)
一文搞懂图像二值化算法 - 知乎 (zhihu.com)
起因起因是有一个将图像显示到一个128*64大小的oled屏幕的需求,该屏幕只能显示黑白图像,所以需要将图像先处理为黑白两种颜色,经过查询了解到这种操作叫做图像的二值化。
具体流程分为先将图像转为灰度图像,再将灰度图像转为二值图像
灰度化分量法思想为取rgb三个分量中的某一个分量作为灰度值,比较三个分量哪个效果好用哪个;
123gray1(x,y)=r(x,y)gray2(x,y)=g(x,y)gray3(x,y)=b(x,y)
最大值法取三个分量中最亮的作为灰度值
1gray(x,y)=max(r(x,y),g(x,y),b(x,y))
平均值法取三个分量的平均值作为灰度值
1gray(x,y)=(r(x,y)+g(x,y)+b(x+y))/3
加权平均法将三个分量以不同的权值进行加权平均。由于人眼对绿色的敏感最高,对蓝色敏感最低,按下式对RGB三分量进行加权平均能得到较合理的灰度图像
1gray(x,y)=0.299*r(x,y)+0.578 ...
Maven安装与配置
下载这里注意,如果要配合idea使用,需要查询idea版本与maven版本的适配关系,不匹配将会导致无法在idea中使用maven。
Maven – Download Apache Maven
下载apache-maven-***-bin.zip
解压将压缩包中的内容解压到文件夹,这里解压到D:\tools\maven
环境变量用户变量中配置M2_HOME为D:\tools\maven\apache-maven-3.9.2
系统变量配置Path添加%M2_HOME%\bin
配置打开maven根目录下的conf目录下的settings.xml
本地仓库1<localRepository>D:\tools\maven\mvnr</localRepository>
阿里云镜像12345678<mirrors> <mirror> <id>alimaven</id> <mirrorOf>central</mirrorOf> <nam ...