<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Roamerlin的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Roamerlin</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Roamerlin]]></copyright><item><title><![CDATA[学习Nginx看这篇就够了]]></title><link>https://blog.youkuaiyun.com/Roamerlin/article/details/117913716</link><guid>https://blog.youkuaiyun.com/Roamerlin/article/details/117913716</guid><author>Roamerlin</author><pubDate>Mon, 14 Jun 2021 22:18:08 +0800</pubDate><description><![CDATA[0. NGINX的优点

响应速度快

单次请求响应快，高并发请求响应速度快


高扩展性

低耦合的模块设计框架使得可以扩展大量的第三方模块


高可靠性

每个worker进程相对独立
master进程在一个worker进程挂掉后，会快速启动新worker进程提供服务


低内存消耗

1w个非活跃的http keepalive连接仅消耗2.5M的内存


单机支持10W+的并发连接
支持热部署

master管理进程与worker进程分离设计，使得nginx能够支持热部署功能


支持free bsd]]></description><category></category></item><item><title><![CDATA[详解网络协议栈--TCP协议]]></title><link>https://blog.youkuaiyun.com/Roamerlin/article/details/117161622</link><guid>https://blog.youkuaiyun.com/Roamerlin/article/details/117161622</guid><author>Roamerlin</author><pubDate>Sat, 22 May 2021 15:06:27 +0800</pubDate><description><![CDATA[TCP 协议

TCP协议是一种可靠的、面向连接的字节流服务，源主机在传送数据前需要先和目标主机建立连接。然后在此连接上被编号的数据段按序收发。同时要求对每个数据段进行确认，保证了可靠性。如果在指定的时间内没有收到目标主机对所发数据段的确认，源主机会重传发送该数据段

TCP头部


头部封装

// TCP头 20字节
struct tcphdr {
    unsigned short srcport;     //源端口号
    unsigned short dstport;     //目的端口号]]></description><category></category></item><item><title><![CDATA[详解网络协议栈--IP协议]]></title><link>https://blog.youkuaiyun.com/Roamerlin/article/details/117161417</link><guid>https://blog.youkuaiyun.com/Roamerlin/article/details/117161417</guid><author>Roamerlin</author><pubDate>Sat, 22 May 2021 15:02:42 +0800</pubDate><description><![CDATA[1. 网络分层模型

1.1 物理层

传输的是光电信号

双绞线（电信号）
光纤（光信号）



1.2 网卡

处于物理层和数据链路层之间，不属于网络分层模型中的任何一层
作用是负责A/D转换和数据搬运

接收数据时将光电信号转换成数字信号
发送数据是将数字信号转换成光电信号
网卡芯片负责数据转换，网卡驱动负责搬运数据



1.3 数据链路层

传输的是数字信号（二进制数据）
以太网数据帧结构



以太网帧头：MAC地址只有在局域网内有效，出了局域网就无效了

//以太网帧头 14字节
struct]]></description><category></category></item><item><title><![CDATA[协程的实现原理]]></title><link>https://blog.youkuaiyun.com/Roamerlin/article/details/117161245</link><guid>https://blog.youkuaiyun.com/Roamerlin/article/details/117161245</guid><author>Roamerlin</author><pubDate>Sat, 22 May 2021 14:58:34 +0800</pubDate><description><![CDATA[协程

在了解协程前，我们需要先理清几个概念：同步，异步，阻塞，非阻塞

同步 vs 异步

同步和异步描述的是用户线程与内核的交互方式


同步：指用户线程发起IO请求后需要等待或者轮询内核IO操作完成后才能继续执行
异步：指用户线程发起IO请求后仍继续执行，当内核IO操作完成后会通知用户线程或者调用用户线程注册的回调函数

阻塞 vs 非阻塞

阻塞和非阻塞描述的是用户线程调用内核IO操作的方式，其中同步才区分阻塞和非阻塞，异步则一定是非阻塞


阻塞：指IO操作需要彻底完成后才返回到用户空间
非阻塞：]]></description><category></category></item><item><title><![CDATA[MySQL 基础知识]]></title><link>https://blog.youkuaiyun.com/Roamerlin/article/details/117160904</link><guid>https://blog.youkuaiyun.com/Roamerlin/article/details/117160904</guid><author>Roamerlin</author><pubDate>Sat, 22 May 2021 14:48:37 +0800</pubDate><description><![CDATA[数据库的好处

持久化数据到本地
可以实现结构化查询，方便管理

数据库相关概念

DB：数据库，保存一组有组织的数据的容器
DBMS：数据库管理系统，又称为数据库软件（产品），用于管理DB中的数据
SQL:结构化查询语言，用于和DBMS通信的语言

数据库存储数据的特点

将数据放到表中，表再放到库中
一个数据库中可以有多个表，每个表都有一个的名字，用来标识自己。表名具有唯一性
表具有一些特性，这些特性定义了数据在表中如何存储，类似java中 “类”的设计
表由列组成，我们也称为字段。所有表都是由一个或多]]></description><category></category></item><item><title><![CDATA[设计模式（四）--- 单例模式]]></title><link>https://blog.youkuaiyun.com/Roamerlin/article/details/113803541</link><guid>https://blog.youkuaiyun.com/Roamerlin/article/details/113803541</guid><author>Roamerlin</author><pubDate>Sat, 13 Feb 2021 20:58:20 +0800</pubDate><description><![CDATA[单例模式

1. 定义

保证一个类有且仅有一个实例，并提供一个该实例的全局的访问点

2. 结构

Singleton : 单例类，该类能且仅能创建一个全局唯一的实例，故其构造函数必须私有（防止外界访问），同时提供一个公共的全局接口来访问该实例


3. 示例

单例模式在不同使用场景下，可有多个版本的代码实现，每个版本都有相应优缺点，具体如下所示：



相关知识点回顾：


程序内存分区及其内存销毁情况：

内存堆区 ： 指针，相应的内存需要手动销毁
内存栈区 ： 存放局部变量，接口退出时相应变量自动]]></description><category></category></item><item><title><![CDATA[设计模式（三）--- 观察者模式]]></title><link>https://blog.youkuaiyun.com/Roamerlin/article/details/113777011</link><guid>https://blog.youkuaiyun.com/Roamerlin/article/details/113777011</guid><author>Roamerlin</author><pubDate>Tue, 09 Feb 2021 23:04:33 +0800</pubDate><description><![CDATA[观察者模式

1. 定义

定义对象间一种一对多（变化）的依赖关系，以便当一个对象（Subject）的状态发生改变时，所有依赖它的对象都得到通知并自动更新

2. 结构


Suject：抽象目标，被观察的对象，对象中定义一个观察者集合，集合中包含多个观察者，对象通过attach()方法增加观察者，通过detach()方法删除观察者，通过notify()方法，当自身状态改变时将状态广播给观察者


ConcreteSubject:  具体目标，具体实现notify()方法


Observer:  抽象观察]]></description><category></category></item><item><title><![CDATA[设计模式（二）--- 模板方法]]></title><link>https://blog.youkuaiyun.com/Roamerlin/article/details/113737648</link><guid>https://blog.youkuaiyun.com/Roamerlin/article/details/113737648</guid><author>Roamerlin</author><pubDate>Sun, 07 Feb 2021 11:37:57 +0800</pubDate><description><![CDATA[模板方法（Template Method）
1.  定义

定义一个基类，并在基类中定义操作的算法和接口框架，然后将其中一些接口的实现延迟到派生类类中

2.  结构

AbstractClass（基类）：在基类中定义或声明了一系列基本操作方法（method），每个操作方法都对应算法（templatemethod）中的子步骤，在派生类中可以重新实现；
ConcreteClass（派生类）：实现或者覆盖基类中的基本操作方法


3.  示例


某动物园，有一套固定表演流程，但其中有若干子流程受欢迎程度较低，]]></description><category></category></item><item><title><![CDATA[设计模式(一) ---- 概述与设计原则]]></title><link>https://blog.youkuaiyun.com/Roamerlin/article/details/113308116</link><guid>https://blog.youkuaiyun.com/Roamerlin/article/details/113308116</guid><author>Roamerlin</author><pubDate>Thu, 28 Jan 2021 09:44:19 +0800</pubDate><description><![CDATA[设计模式
1. 定义

设计模式是指在软件开发中，经过验证的，用于解决在特定环境下，重复出现的，特定问题的解决方案

2. 核心思想

找出业务功能中的稳定点和变化点，将稳定点和变化点分离，扩展修改（封装）变化点，让稳定点和变化点的实现层次分离

3. 使用情况

系统的关键依赖点
能明确找到变化点
能明确找到复用方向
对需求变化方向熟悉

4. 重构思想

静态转变为动态
早绑定转变为晚绑定
继承转变为组合
编译时依赖转变为运行时依赖
紧耦合转变为松耦合

5. 类之间的关系
5.1 泛化(General]]></description><category></category></item><item><title><![CDATA[浅谈线程池]]></title><link>https://blog.youkuaiyun.com/Roamerlin/article/details/110195780</link><guid>https://blog.youkuaiyun.com/Roamerlin/article/details/110195780</guid><author>Roamerlin</author><pubDate>Thu, 26 Nov 2020 16:42:28 +0800</pubDate><description><![CDATA[线程池

概念


在系统启动阶段创建一批空闲的线程组成集合，进程运行过程中会将产生的任务提交给线程池，线程池就会分配空闲的线程来执行该任务，任务执行结束后该线程不会销毁退出，而是再次回收到线程池中成为空闲线程，等待执行下一个任务。


工作流程





工作机制


	任务是提交给整个线程池，而不是直接提交给某个线程，线程池接收到任务后，会在内部寻找是否有空闲线程，若有，则将任务交给某个空闲线程处理
	
	
	一个线程同时只能处理一个任务，但可以同时向一个线程池提交多个任务
	
优势


	减少系统资.]]></description><category></category></item></channel></rss>