详解计算机网络
本文是在阅读JavaGuide关于计算机网络相关内容时的个人整理;
请移步:https://javaguide.cn/cs-basics/network/osi-and-tcp-ip-model.html
OSI七层模型很清晰、理论完整,但是太复杂且不适用,所以更多使用tcp/ip协议
应用层:为用户提供了与网络进行交互的接口;
表示层:进行一些数据处理,例如加密解密、编码解码、压缩和解压缩
会话层:管理应用程序之间的会话
传输层:为会话之间的通信提供可靠的数据传输
网络层:IP数据包在传输时的路由和寻址
链路层:对数据帧进行编码、对传输的误差进行纠正
物理层:传输比特流数据
TCP/IP四层模型应用层应用层:以报文为数据单元,使得应用程序之间进行信息交换
常见协议:
基于TCP
HTTP协议(HTTPs):基于 TCP 协议,是一种用于传输超文本和多媒体内容的协议,为 Web 浏览器与 Web 服务器之间的通信而设计的
Websocket协议:客户端和服务端可以同时发送或接收,基于 TCP 连接的全双工通信,通过心跳机制来保持 WebSocket 连接的稳 ...
详解MySQL
三大日志重做日志(redo-log)
(用来干嘛的) InnoDB 存储引擎独有,MySQL崩溃时用来恢复数据:重新执行 Redo Log 中尚未持久化到数据文件的修改操作;
(前置知识)MySQL的查询会把数据页读到缓冲池Buffer Pool中,更新数据会直接在Buffer Pool操作;
(如何做的)把“在某个数据页上做了什么操作”记录到重做日志缓存redo log buffer中,再刷盘;
(事务的特殊)事务执行过程的 redo log 会写入 redo log buffer 中,因为可能会被后台线程刷盘,所以没有提交事务的 redo log 记录也可能被写入磁盘;
(存储形式)硬盘上存储的 redo log 是以一个日志文件组的形式出现的,每个的 redo 日志文件大小都是一样的,会进行循环写入;
二进制日志(bin-log)
(做啥的)逻辑日志,顺序记录所有涉及更新数据的逻辑操作;主从|主备依靠它同步;
(记录格式)statement记录SQL原文;row包含操作的数据,例如now()函数的具体时间,是解析后的SQL语句;mixed会判断是否引起不一致,再选择;
(写入机 ...
详解Redis
核心知识点基本数据类型基本的5种
String(字符串),使用SDS,即Redis自己构建的简单动态字符串来实现;
List(列表),用的是双向链表,支持反向查找;
Hash(散列),键的值是键值对,可以用于存储对象,实现类似Java的HashMap;
Set(集合),无序结构且无重复,支持交并差集的运算,可用于共同关注、粉丝等功能
Zset(有序集合),跳表实现,针对Set中每个元素增加一个权重参数score,根据这个参数有序排列;可以根据score范围获取元素列表,可以用于实现排行榜
特殊的3种
HyperLogLog(基数统计)
Bitmap (位图)⚠️
Geospatial (地理位置)
底层8种类型
简单动态字符串(SDS)
LinkedList(双向链表)
Dict(哈希表/字典)
SkipList(跳跃表):用于Sorted Set
Intset(整数集合):紧凑地存储多个整数⚠️
ZipList(压缩列表)⚠️
QuickList(快速列表)⚠️
缓存读写策略旁路缓存模式Cache Aside Pattern,最经常使用的一种
读:读缓存,读不到则读 ...
Docker模拟分布式结点配置Hadoop
本学期选了分布式系统这门课,作业是搭建一个MapReduce的框架来实现WordCount这个简单Demo,因此需要进行Hadoop环境的配置;这个在我2年前上数据仓库的时候小组里也配置过,但当时不是我负责,这次重新把流程走通一遍;当时是使用Spark+Hive+Hadoop三件套用来对数据仓库进行SQL的查询,参考当时负责人的博客。
构建镜像123# docker安装不多赘述# 拉取ubuntudocker pull ubuntu:latest
去官网下载jdk1.8,即jdk-8u281-linux-x64.tar.gz,并在目录同级构建一个Dockerfile文件,内容如下
123456FROM ubuntu:latestMAINTAINER duanmuADD jdk-8u281-linux-x64.tar.gz /usr/local/ENV JAVA_HOME /usr/local/jdk1.8.0_281ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarENV PATH $PATH:$JAVA_HOME ...
MacOS在外接硬盘中安装docker
当macos空间不足,我们往往想把各种东西放在外接硬盘中,例如虚拟机、游戏等等,如果在系统中安装了docker,其镜像和容器往往也会占据较大的空间,因此将docker放置在外接硬盘中是一件非常nice的事情。采用的核心思想是找到文件系统中存储数据的目录,然后使用软链接的方式将其存放在外接硬盘之中。
首先需要安装docker,这里直接使用brew install docker,如果是安装docker desktop的话会包含“运行时”,但是此时是没有的,直接运行docker pull xxx会报错
12$ docker pull redisCannot connect to the Docker daemon at unix:///Users/xxx/.orbstack/run/docker.sock. Is the docker daemon running?
这里不使用docker desktop for mac,它的资源开销过大,我们使用OrbStack作为macos的运行环境,按照官方文档所述安装即可:brew install orbstack
直接打开OrbStack后 ...
春雨遂川润泽支教夏令营
写在前头感谢同济春雨社团,让我有机会前往江西省南昌市遂川县XX乡的一个小学,开展为期两周的支教夏令营,这是我第一次参加支教活动。非常感谢队伍里的每一个人,以及遇到的每个孩子,你们让这个暑假充满了意义。
流水账的记录8月3日下午到达XX小学,参观了学校整理了行李,这天是周六;周日策划了开营仪式、排了做饭表、课表、作息时间等等,也是这天晚上我生病了,吐了5 6回。我们将孩子们分成2个班级,分别是四年级和五年级,在开营仪式结束后分别召开了班会课,在班会课上进行了“谁是卧底”的破冰游戏,让同学们和老师互相认识。接着就是正式上课,第一节课我们敖老师上了趣味数学我陪课,不知道孩子们听得咋样,我听的津津有味hhh,不用做题的数学还有很有趣的。
这天最后一节课是我的羽毛球课,我的设想是先讲解羽毛球的规则,再教学基本的发球和高远球,然后让他们打打比赛;但是拍子数量非常少,球也没几个,并且孩子们的羽毛球基础实在有点太差,按规则根本打不起来,我反思是我的设想太过理想化了,其实上得不是很顺利。后面直接让他们自由活动打羽毛球了,看的出来他们非常喜欢自由活动,第二天好几个孩子问我什么时候再上体育课,和我小学 ...
新疆游记——北疆大环线
Abstract我们的行程安排参考了xhs上某一篇北疆大环线的地图:
针对该行程大纲,我们进行灵活的调整,最后计划表如下:
天数
安排
-2,-1
Z40次动车,39小时
0
乌鲁木齐休整,闲逛
1
乌鲁木齐 => 天山天池 => 阿勒泰
2
阿勒泰 => 禾木
3
禾木 => 喀纳斯
4
喀纳斯 => 乌尔禾
5
乌尔禾 => 魔鬼城 => 赛里木湖
6
赛里木湖 => 特克斯
7
特克斯 => 琼库什台
8
琼库什台 => 蜜蜂小镇
9
蜜蜂小镇 => 百里画廊 => 独库公路 => 乌鲁木齐
10
各回各家
Before Start
硬卧
第一次坐硬卧,Z40的硬卧还挺难抢;我睡中铺,底下有小孩买了硬座来睡大人的卧铺非常吵,我拿AirPods当耳塞的效果还不错。
租车
租了辆7座商务车(别克GL8),差点没放进6 ...
云南游记
Abstract
6.17:上海浦东机场飞版纳嘎洒机场,取自驾车
6.18:版纳原始森林+曼听公园+总佛寺
6.19:版纳傣族园+中科院植物园
6.20:版纳飞丽江,逛丽江古城
6.21:在玉龙雪山看日照金山,云杉坪+蓝月谷
6.22:从丽江古镇前往去束河古镇
6.23:丽江自驾去昆明,看了海埂大坝和公园1903
西双版纳坐的春秋航空到版纳,飞到一半广播说会提前到(先给我们点好处),然后开始推销免税产品;结果晚了20多分钟,不过晚点的主要原因应该是下大雨,飞机在云层上方盘旋了很久。
一下航班空气明显潮湿不少,果不其然第一天晚上鼻子非常难受,好在睡了一觉基本就没啥了。我们租的车是送车上门的,所以直接在机场取,本来没买保险,在工作人员的推荐下还是买了个半保。我觉得短租可以买一下,比如2-3天,但是时间比较久的话(10天左右),不太有必要买。后续的情况就是在玉龙雪山停车的时候小撞了一下车头保险杠…
我们住在星光夜市附近,那边在修路…不过也不是太影响。
原始森林
前两个片区主要是表演,放飞的孔雀很出片,还有民族乐器表演和竹竿夹脚舞之类,我们没怎么去看。
坐观光车到终点后就是 ...
MacOS配置Charles抓包和手机抓包
序有时候会写一些爬虫代码和脚本,手机端的抓包也越来越重要和有用。Charles可以给手机配置抓包,我之前试验过“羊了个羊”的抓包,这篇文章把整个过程重现一遍。
Charles安装
MacOS下:brew install charles
打开后这个有试用期30天,点击左上角Help有个Register的选项,通过这个网站生成对应的Registered Name和License Key,目前可用
证书配置
如图,点击安装证书
弹出来钥匙串访问,搜索Charles,右键显示简介,然后打开信任扩展栏,选择“始终信任”
回到Charles,钩上macOS proxy,也可以在proxy setting中选择enable on launch。
然后重启电脑,就可以抓到包了,不过这种貌似只能网页,微信qq的聊天信息抓不到,待研究
iOS端
首先应该是要电脑和手机在同一局域网,有三种可能
家庭的小局域网是可以的
学校这种局域网貌似不太行
手机开热点貌似也可以
接着在Charles的help中找到”Local IP Address“,如下
在手机端的wif ...
ubuntu下读取sqlserver备份文件(mdf,ndf,ldf)
如标题所示,sqlserver的备份文件是由.mdf, .ndf和.ldf组成
MDF:主要数据文件,primary data file
主要数据文件包含数据库的启动信息,并指向数据库中的其他文件。用户数据和对象可存储在此文件中,也可以存储在次要数据文件中。每个数据库有一个主要数据文件。
NDF:次要数据文件,Secondary data files
次要数据文件是可选的,由用户定义并存储用户数据。通过将每个文件放在不同的磁盘驱动器上,次要文件可用于将数据分散到多个磁盘上。另外,如果数据库超过了单个 Windows 文件的最大大小,可以使用次要数据文件,这样数据库就能继续增长。
LDF:事务日志,Log data files
事务日志文件保存用于恢复数据库的日志信息。每个数据库必须至少有一个日志文件。
为了方便,下面使用mdf作为这三种文件的统称
在windows上想读取mdf文件非常简单,装个ssms,甚至sqlserver都直接帮你装好了,用系统用户登陆,直接右键数据库,添加就行。
但如果想在linux服务器上如此操作,则需要手动安装sqlserver然后导入。参考 ...