<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Nxin的小抄本]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/jinixin</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; jinixin]]></copyright><item><title><![CDATA[「操作系统」进程 线程 协程]]></title><link>https://blog.youkuaiyun.com/jinixin/article/details/117357254</link><guid>https://blog.youkuaiyun.com/jinixin/article/details/117357254</guid><author>jinixin</author><pubDate>Fri, 28 May 2021 11:58:34 +0800</pubDate><description><![CDATA[作业与进程的区别

	
		前者是由用户提交，后者是由系统自动生成；前者以用户任务为单位，后者是操作系统控制的单位.
		
		
		作业 = 程序 + 数据 + 说明书, 进程 = 程序 + 数据 + PCB
		
		
		一个作业可以分为多个进程来完成
		
	
	
	进程与线程

	
		进程是资源分配的最小单位, 线程是CPU调度的最小单位
		
		
		一个进程下可包含1至多个线程
		
		
		一个进程有独立的地址空间, 故进程间不能共享数据, 该进程下的多个线程共享该进程的地址空间,..]]></description><category></category></item><item><title><![CDATA[「网络」套接字 (Socket)]]></title><link>https://blog.youkuaiyun.com/jinixin/article/details/117333429</link><guid>https://blog.youkuaiyun.com/jinixin/article/details/117333429</guid><author>jinixin</author><pubDate>Thu, 27 May 2021 17:27:09 +0800</pubDate><description><![CDATA[内核态与用户态

	
		内核态: 可以访问系统资源, 比如CPU, 内存, 网络, 外设
		
		
		用户态: 只能访问进程自己的资源, 无法访问系统资源
		
		
		用户态访问系统资源时, 需通过系统调用, 即CPU切到内核态, 读取资源后再切回用户态. 中间涉及堆栈上下文的切换, 为避免频繁切换, 有了"用户缓冲区"和"系统缓冲区"
		
		
		当用户进程需要从"磁盘/网络"中读取数据时, 系统会将"系统缓冲区"的数据复制到"用户缓冲区". 若"系统缓冲区"中没有对应数据, 系统会将当..]]></description><category></category></item><item><title><![CDATA[「网络」HTTP拾零]]></title><link>https://blog.youkuaiyun.com/jinixin/article/details/117333184</link><guid>https://blog.youkuaiyun.com/jinixin/article/details/117333184</guid><author>jinixin</author><pubDate>Thu, 27 May 2021 17:12:49 +0800</pubDate><description><![CDATA[HTTPS

	
		中间人攻击, 攻击者分别与通讯两端建立单独联系, 并交换其收到的数据, 使两端认为会话是私密的, 其实全被中间人控制,防御为HTTPS
		
		
		HTTPS = HTTP + TLS/SSL, HTTP包传递给TLS, 再传递给TCP. HTTPS融合了非对称加密与对称加密, 非对称加密通信仅用于首次交换对称密钥, 之后通信均使用对称加密, 提升速度
		
		
		RSA非对称加密, 私钥自己持有, 公钥所有人持有; 公钥加密, 仅私钥可解密; 私钥加密, 仅公钥可解密
...]]></description><category></category></item><item><title><![CDATA[「Nginx」负载均衡]]></title><link>https://blog.youkuaiyun.com/jinixin/article/details/117333004</link><guid>https://blog.youkuaiyun.com/jinixin/article/details/117333004</guid><author>jinixin</author><pubDate>Thu, 27 May 2021 17:04:23 +0800</pubDate><description><![CDATA[负载均衡

	
		负载均衡关注: 如何将请求分发到集群的不同机器上
		
		
		OSI七层模型

		
			物理层
			
			
			链路层
			
			
			网络层
			
			
			传输层
			
			
			会话层
			
			
			表示层
			
			
			应用层
			
		
		
		工作在应用层的就是七层负载均衡, 工作在传输层的就是四层负载均衡
		
	
	
	四层负载均衡

	
		接收客户端请求后, 需要对流量做NAT处理, 即修改数据包的IP+端口号,..]]></description><category></category></item><item><title><![CDATA[2021春季招聘]]></title><link>https://blog.youkuaiyun.com/jinixin/article/details/117069111</link><guid>https://blog.youkuaiyun.com/jinixin/article/details/117069111</guid><author>jinixin</author><pubDate>Thu, 20 May 2021 11:34:12 +0800</pubDate><description><![CDATA[2021年春季招聘, 获得了以下公司的offer, 感恩

百度/阿里/腾讯/字节/美团/微软/旷视/猿辅导/跟谁学/伴鱼/深信服/格林深瞳/老虎证券

感谢小米
]]></description><category></category></item><item><title><![CDATA[「操作系统」IO多路复用]]></title><link>https://blog.youkuaiyun.com/jinixin/article/details/114669307</link><guid>https://blog.youkuaiyun.com/jinixin/article/details/114669307</guid><author>jinixin</author><pubDate>Thu, 11 Mar 2021 15:44:08 +0800</pubDate><description><![CDATA[本文主要介绍在IO多路复用模型中, 第一阶段使用到的四个函数: select, poll, epoll, kqueue


	select

	
		select函数

		
			定义

			select用来监视多个文件描述符, 当文件描述符所对应事件状态不改变时, select会阻塞. 当某个文件描述符所对应事件状态改变后, select会返回
			
			
			Python案例

			readable_list, writeable_list, execable_list = select.s]]></description><category></category></item><item><title><![CDATA[「Redis」概述]]></title><link>https://blog.youkuaiyun.com/jinixin/article/details/110004723</link><guid>https://blog.youkuaiyun.com/jinixin/article/details/110004723</guid><author>jinixin</author><pubDate>Mon, 23 Nov 2020 18:52:30 +0800</pubDate><description><![CDATA[概述

	
		Redis是由C编写的key-val型内存数据库, 可以被当做数据结构服务器
		
		
		value提供了如下数据结构: string(字符串), list(链表), set(集合), zset(有序集合), hash(字典)
		
		
		与memcache比较

		
			都是key-value型数据库, 都存储在内存中
			
		
	
	
	memcache的value仅支持string

	
		redis支持数据持久化, 重启时可重新加载, memcache不支持持久..]]></description><category></category></item><item><title><![CDATA[「Raft」Raft分布式共识协议]]></title><link>https://blog.youkuaiyun.com/jinixin/article/details/109715648</link><guid>https://blog.youkuaiyun.com/jinixin/article/details/109715648</guid><author>jinixin</author><pubDate>Mon, 16 Nov 2020 10:27:38 +0800</pubDate><description><![CDATA[概述

	
		raft是一种分布式共识协议, raft解决的是多个节点如何达成共识的问题
		
		
		raft保证了高可用, 但不是强一致, 而是最终一致性
		
		
		raft把时间分成了一个个任期, 任期总是以选举开始的, 如果选举失败, 该任期会立即结束
		
		
		在大多数节点挂掉后, 因无法选出leader, 集群就不能对外提供服务了
		
		
		共识算法一般基于复制状态机, 即相同的初始状态 + 相同的输入 = 相同的结束状态. raft通过日志复制与复制状态机实现共识
	..]]></description><category></category></item><item><title><![CDATA[「MySQL」归档日志 重做日志 回滚日志 MVCC]]></title><link>https://blog.youkuaiyun.com/jinixin/article/details/109264591</link><guid>https://blog.youkuaiyun.com/jinixin/article/details/109264591</guid><author>jinixin</author><pubDate>Sat, 24 Oct 2020 19:54:06 +0800</pubDate><description><![CDATA[MySQL分层

	
		接入层 -&gt; MySQL服务层 -&gt; 存储引擎层 -&gt; 系统文件层
		
		
		接入层: 不同语言客户端通过MySQL协议与MySQL服务器连接通信, 该层负责权限验证, 连接池管理
		
		
		MySQL服务层: SQL解析器, SQL优化器, 缓存
		
		
		存储引擎层
		
		
		系统文件层: 保存数据, 索引, 日志
		
	
	
	binlog (归档日志)

	
		逻辑日志, binlog是MySQL Server的日志, 用于..]]></description><category></category></item><item><title><![CDATA[「操作系统」五种IO模型 零拷贝]]></title><link>https://blog.youkuaiyun.com/jinixin/article/details/109037143</link><guid>https://blog.youkuaiyun.com/jinixin/article/details/109037143</guid><author>jinixin</author><pubDate>Mon, 12 Oct 2020 21:15:19 +0800</pubDate><description><![CDATA[内核态与用户态

	
		内核态: 可以访问系统资源, 比如CPU, 内存, 网络, 外设
		
		
		用户态: 只能访问进程自己的资源, 无法访问系统资源
		
		
		用户态需要访问系统资源时, 需要CPU切到内核态, 读取资源后再切回用户态. 中间涉及堆栈上下文的切换, 为避免频繁切换, 有了"用户缓冲区"和"系统缓冲区".
		
		
		当用户进程需要从"磁盘/网络"中读取数据时, 系统会将"系统缓冲区"的数据复制到"用户缓冲区". 若"系统缓冲区"中没有对应数据, 系统会将当前进程挂起..]]></description><category></category></item><item><title><![CDATA[「Nginx」什么是代理]]></title><link>https://blog.youkuaiyun.com/jinixin/article/details/89574956</link><guid>https://blog.youkuaiyun.com/jinixin/article/details/89574956</guid><author>jinixin</author><pubDate>Wed, 30 Sep 2020 18:51:16 +0800</pubDate><description><![CDATA[谈到正向代理和反向代理, 首先就要先了解代理的概念. 代理, 即代理服务器(Proxy Server), 一般我们会省略”服务器”这几个字, 代理在客户端和服务器之间充当中间人.

具体过程如下, 代理接收客户端发来的请求, 代理从请求中解析出目标服务器, 并向目标服务器转发请求, 在得到目标服务器的响应后, 便将响应转发回客户端. 期间代理可以选择性的缓存响应, 以便加速后续相同访问, 因此一般代理都有较大的磁盘空间.

]]></description><category></category></item><item><title><![CDATA[「MySQL」拾零]]></title><link>https://blog.youkuaiyun.com/jinixin/article/details/108859388</link><guid>https://blog.youkuaiyun.com/jinixin/article/details/108859388</guid><author>jinixin</author><pubDate>Mon, 28 Sep 2020 22:53:41 +0800</pubDate><description><![CDATA[存储过程: 预编译的SQL语句, 优点: 1) 避免传递SQL, 使用效率高, 2) 避免对表的直接访问, 权限控制; 缺点: 互联网因迭代快, 写在服务层其实更好. 目前不建议使用
	
	
	varchar不是无限的, 取决于字符集, 一般是65536/字符集规定每个字符最大占用的字节数; char(10)与varchar(10)与int(10)区别
	
	
	超大分页的优化

	
		mysql中"limit offset, num", 是取出offset+num, 然后抛弃前offset条, 这样..]]></description><category></category></item><item><title><![CDATA[「操作系统」内存/编译/并发控制]]></title><link>https://blog.youkuaiyun.com/jinixin/article/details/108722193</link><guid>https://blog.youkuaiyun.com/jinixin/article/details/108722193</guid><author>jinixin</author><pubDate>Tue, 22 Sep 2020 00:09:07 +0800</pubDate><description><![CDATA[编译

	
		编译器: 将源码转成二进制的机器码. 比如gcc, javac

		
			预处理: 替换宏定义和头文件地址
			
			
			编译: 转为汇编
			
			
			汇编: 转为二进制机器码, 此步将产生目标文件
			
			
			链接: 分为静态链接与动态连接

			
				静态连接: 载入代码时就会确定代码地址, 将库一起打包入可执行文件, 因此可执行文件很大, 不方便库升级, 不共享库, 耗内存.
				
				
				动态链接: 调用时才确定代码地址, 共享..]]></description><category></category></item><item><title><![CDATA[「操作系统」调度与死锁]]></title><link>https://blog.youkuaiyun.com/jinixin/article/details/108589316</link><guid>https://blog.youkuaiyun.com/jinixin/article/details/108589316</guid><author>jinixin</author><pubDate>Mon, 14 Sep 2020 22:07:45 +0800</pubDate><description><![CDATA[作业与进程的区别

	
		前者是由用户提交，后者是由系统自动生成；前者以用户任务为单位，后者是操作系统控制的单位.
		
		
		作业 = 程序 + 数据 + 说明书, 进程 = 程序 + 数据 + PCB
		
		
		一个作业可以分为多个进程来完成
		
	
	
	调度

	
		作业调度(高级调度): 把作业从外存调入内存
		
		
		进程调度(低级调度): 进程获得处理器调度
		
	
	
	调度算法

	
		当多个进程(作业)要使用有限资源时, 必须按一定规则选择进程(作业)来占用..]]></description><category></category></item><item><title><![CDATA[「网络」TCP/IP与MAC]]></title><link>https://blog.youkuaiyun.com/jinixin/article/details/108457887</link><guid>https://blog.youkuaiyun.com/jinixin/article/details/108457887</guid><author>jinixin</author><pubDate>Mon, 07 Sep 2020 22:56:52 +0800</pubDate><description><![CDATA[TCP定义

	
		TCP 是一个可靠的, 面向连接的, 基于字节流的, 全双工协议
		
		
		面向连接的: 先建立逻辑连接, 再发送数据
		
		
		可靠的: 超时重传, 流量控制, 拥塞控制
		
		
		基于字节流: 没有固定报文边界
		
		
		全双工: 发送接收并行
		
	
	
	TCP/IP分层

	
		具体分层

		
			应用层: HTTP, FTP, SMTP, DNS, POP3
			
			
			传输层: TCP, UDP; 信息单元为段
			
			..]]></description><category></category></item><item><title><![CDATA[「MySQL」存储结构与索引]]></title><link>https://blog.youkuaiyun.com/jinixin/article/details/108278087</link><guid>https://blog.youkuaiyun.com/jinixin/article/details/108278087</guid><author>jinixin</author><pubDate>Fri, 28 Aug 2020 13:46:50 +0800</pubDate><description><![CDATA[innodb引擎的存储结构

	mysql服务器中对数据的读取和写入是交给存储引擎来处理的

	mysql索引分为聚簇索引, 二级索引和联合索引
	
	
	记录

	
		每条记录存储的格式称为行格式, 一般格式为: "可变字段长度列表,null值列表,记录的头信息,每列的具体数据".
		
		
		头信息的delete_mask位用来标记该记录是否被删除. 头信息的record_type位表示记录类型 (0为普通记录, 1为目录项记录, 2为最小记录, 3为最大记录), 头记录的next_recor..]]></description><category></category></item><item><title><![CDATA[「MySQL」隔离性与锁]]></title><link>https://blog.youkuaiyun.com/jinixin/article/details/108114396</link><guid>https://blog.youkuaiyun.com/jinixin/article/details/108114396</guid><author>jinixin</author><pubDate>Thu, 20 Aug 2020 00:22:58 +0800</pubDate><description><![CDATA[多个事务同时操作带来的问题

	多个事务并发执行, 由此引出隔离性的问题

	
		脏读

		一个事务更新了数据, 另个事务读取了同份数据, 但前份数据回滚了
		
		
		不可重复读

		一个事务中两次查询的数据不一致, 因为之间另一事务提交了更新数据
		
		
		幻读

		一个事务中两次查询到的数据笔数不一致, 因为之间另一事务插入了数据

		
		
	
	
	事务隔离级别

	
		读取未提交内容 (read uncommited)

		事务A可以读到事务B未提交的修改. 会导致...]]></description><category></category></item><item><title><![CDATA[「读书笔记」六月]]></title><link>https://blog.youkuaiyun.com/jinixin/article/details/93708716</link><guid>https://blog.youkuaiyun.com/jinixin/article/details/93708716</guid><author>jinixin</author><pubDate>Sun, 30 Jun 2019 05:58:44 +0800</pubDate><description><![CDATA[六月七日, 坐着摇摇晃晃的绿皮火车从北京到上海参加音乐节, 看到了朴师傅和逃跑, 记得师傅的"你们加油, 我也加油", 也记得逃跑的"希望大家都能拥有美好的爱情". 当然也听了现场版的<空帆船>和<一万次悲伤>, 激动的在起伏人潮中直挺挺站立.
晚上坐夜五路穿过姑苏城, 石路站上来了几个苏州小娘鱼, 静静听她们用家乡话捞家常.没有事先透露归家, 夜半扣门, 我爸认了半天也没认出我来,现在还是想再次紧紧抱着他们. ]]></description><category></category></item><item><title><![CDATA[「操作系统」同步 异步 阻塞 非阻塞]]></title><link>https://blog.youkuaiyun.com/jinixin/article/details/90348502</link><guid>https://blog.youkuaiyun.com/jinixin/article/details/90348502</guid><author>jinixin</author><pubDate>Mon, 20 May 2019 00:16:19 +0800</pubDate><description><![CDATA[同步/异步, 阻塞/非阻塞分别是什么? 本篇文章想简单谈谈.





同步/异步



当请求一个方法时, 调用者需要等待该方法执行完成, 且该方法会返回执行结果, 则对于调用者来说就是"同步"的.

当请求一个方法时, 调用者不需要等待该方法执行完成, 该方法被调用后会立即返回, 注意该方法返回的不是执行结果, 比如返回None(NULL), 则对于调用者来说便是"异步"的.



...]]></description><category></category></item><item><title><![CDATA[「操作系统」进程状态模型]]></title><link>https://blog.youkuaiyun.com/jinixin/article/details/90345661</link><guid>https://blog.youkuaiyun.com/jinixin/article/details/90345661</guid><author>jinixin</author><pubDate>Sun, 19 May 2019 19:27:36 +0800</pubDate><description><![CDATA[进程由程序代码, 相关数据集与进程控制块(Process control block, 简称PCB)所构成. 当处理器开始执行这段代码时, 我们将执行的实体称为进程, 即计算机中已运行的程序.

与进程相关的一些控制信息都保存在进程控制块中, 进程控制块是操作系统支持多进程的关键. 进程控制块中的状态字段用于记录进程目前所处的状态.

进程派生即在一个进程中创建一个新进程, 原先的进程为父进程, 新进程为子进程.]]></description><category></category></item></channel></rss>