epoll原理 https://zhuanlan.zhihu.com/p/63179839https://zhuanlan.zhihu.com/p/64138532https://zhuanlan.zhihu.com/p/64746509
muduo浅析 本人认为,就像启动一个项目要想清楚需求场景,写一个模块最好有一个运行demo一样,了解muduo库应该从场景入手。首先简单介绍muduo库的几个核心模块:Acceptor、Connector、EventLoop、Poller、Channel、Timer。模块简介:Acceptor:(服务端)负责处理新的socket连接,封装了系统调用bind、listen、accept。Connector:(客户端)负责发起新的socket连接。EventLoop:存在于一个线程中,主题是loop函数循环执行po
分库分表 分库分表问题背景解决方案具体分类1、垂直分表:将一个表按照字段分成多表,每个表存储其中一部分字段。2、垂直分库:垂直分表提升了单表检索速度,但是都放在一个数据库里,依然收到单个数据库容量、CPU等资源的限制。垂直分库就是按照业务将表进行分类,分布到不同数据库上。3、水平分库:把同一个表的数据按一定规则拆分到不同数据库中,每个库可以放在不同服务器上。4、水平分表:与水平分库类似。是把同一个数据库下的表分成同意数据库下的多张表,这几张表还是存放在同一个数据库里。问题背景当业务量大了,关系式数据库的单机存储容
5、链路层:ARP 5、链路层:ARP1、链路层的作用2、ARP(Address Resolution Protocol,地址解析协议)1、链路层的作用链路层通常在网络适配器,也就是网卡中实现。提供一下功能:成帧链路接入(MAC协议)可靠交付(确认和重传)差错检测(奇偶校验,最后面加个奇偶校验位,数一数数据中的1加起来是偶数个说明没有发生奇数个比特错误。如果用二维校验的话,甚至可以定位到哪个位出了问题进行纠正)和纠正。循环冗余检测时分多路复用(TDM):分片每个数据传一点。缺点就是太公平了。频分多路复用(FD
4、网络层:三层物理设备:集线器、交换机、路由器【IP、ICMP、BGP、OSPF 4、网络层:三层物理设备:集线器、交换机、路由器【IP、ICMP、BGP、OSPF1、集线器(一层设备,就是什么都不改,直接用)2、链路层交换机(二层设备,修改mac头。解开mac头,根据ip头来操作,如ARP通过ip信息来运作,然后根据mac头来转发。也叫第二层的分组交换机,因为会用到两层)3、路由器(三层设备,修改mac头和ip头。解开mac和ip,看里面的东西。用到了三层)4、分组交换机:全能选手,通用转发在数据包从客户端发出的时候,会经过很多物理设备才最终找到服务端,下面介绍各种服务器。交换机是
3、传输层(TCP、UDP)、socket、SSL 3、传输层(TCP、UDP)、socket、SSL0、传输层选择考虑的因素1、TCP和UDP区别2、UDP协议:端口号(用于多路复用/多路分解来自上层应用的数据)3、TCP协议回忆线索:UDP和TCP的内容,TCP三次握手,四次挥手。三次握手中为什么序号不能都从1开始?起始序号是怎么确定的?四次挥手中,为什么发起端要有三个等待时间?SACK是什么?TCP保证连接稳定性的措施有哪些,都有什么方法解决?socket是以什么样的形式存在于系统中的?怎么连接多个socket?C10K问题是什么?可以怎么解决C10
2、应用层:HTTP、SMTP、DNS、SSL、P2P文件分发、Telnet 应用层:HTTP、SMTP、DNS、SSL、P2P文件分发、Telnet0、协议定义了什么(交流的规矩)1、HTTP协议(HyperText Transfer Protocol,超文本传输协议)2、SMTP(Simple Mail Transfer Protocol,简单邮件传输协议):持续连接3、DNS服务器(基于UDP):负载均衡流程4、SSL(Secure Socket Layer)安全套接字层5、P2P文件分发:BitTorrent6、socket7、如何连接socket回忆线索:HTTP报文结构
杂记 杂记1、无类型域间路由选择(CIDR):2、动态主机配置协议(DHCP,dynamic host configuration protocol)也叫即插即用协议或者零配置协议3、ICMP协议(Internet Control Message Protocol)回忆线索:标题几个缩写的含义、DHCP配置IP地址的流程及报文中的信息、 ping的流程1、无类型域间路由选择(CIDR):将32位的IP地址分为前面的网络号和后面的主机号。用IP地址后面的斜杠标记网络号与主机号的分界点。子网掩码和IP地址取an
总览 分层体系结构的优点:屏蔽细节从上到下:应用层记录的是域名以及正文信息传输层记录的是端口,说我这个要给什么应用的,具体端口是啥我不知道,但是按照约定俗成的规定我应该在XXX端口可以找到它,具体以后是啥端口就以后再说网络层记录的是IP地址,它是网络地址,是一种网络上的通讯地址,比如ip192.168.5.0是服务器的ip地址,我可以将我的电脑ip地址改成这个,那么我就是服务器了。MAC层(Medium Access Control,媒体访问控制)记录的是MAC地址,这个是物理地址,要找到目标端只靠IP
文件系统 回忆线索:inode记录的信息、创建文件的流程、块组及块组描述符表及元块组的设计、打开文件的流程1、文件系统的特点:用户态用文件描述符代表文件进行相关系统调用内核用数据结构表示打开的文件内存中有文件的缓存层文件通过树形结构组织硬盘上对文件有一个索引,记录文件由哪些块组成。文件系统有严格的格式要求,如ext系列格式2、每个文件的inode结构ext4_inode结构内容:读写权限i_mode:文件归属:属于哪个用户i_uid,属于哪个用户组i_gid大小:i_size_io占用块
内存 内存1、进程的地址空间2、虚拟内存的分段机制3、虚拟内存的分页机制4、进程内存的用户态布局5、进程内存的内核态布局6、物理内存的组织方式7、物理页分配(与配置器有关,一级配置二级配置)伙伴系统(Buddy System)8、页面换出9、mmap原理10、TLB快表11、内核态映射回忆线索:虚拟内存的地址空间、分段机制(vm_area_struct的红黑树记录)、分页机制(GDT、多级页表)、物理内存(节点、区域、页)、换入换出、缺页中断虚拟内存1、进程的地址空间用户代码访问用户的数据结构,内核代
进程相关 进程1、进程的生命周期2、进程之间的关系3、进程的数据结构4、函数栈的原理5、调度5.1 概念5.2.1 主动调度的流程:通过__schedule函数实现5.2.2 抢占式调度:时间片用完了。通过__schedule函数实现6、进程创建fork7、线程创建pthread_create(Glibc库的一个函数,不属于系统调用)回忆线索:进程的生命周期、进程的数据结构、进程的调度策略、进程的调度流程1、进程的生命周期首先是文本文件通过编译,产生可重定位目标文件.o,经过链接,生成可执行文件ELF。其中
C++调用python踩坑记录 目录0、参考文档及博客1、环境配置步骤2、C++调用python的方法代码框架:(同样来源于上面这篇博客,可用于测试环境配置成功与否)调用函数0、参考文档及博客重要的东西放前面:用C或者C++编写模块的官方文档:https://docs.python.org/3/extending/index.html我配置环境时的参考博客:https://blog.csdn.net/nanguabing007/article/details/893945411、环境配置步骤这个网上有太多教程了,总结一下就
11、内核级线程 1、用户级线程的局限:用户级线程的切换不需要进入内核,内核不知道各个线程(TCB)的存在,所以如果某个线程进入内核并且发生阻塞后,内核可能会对进程进行调度,从而阻塞了所有的线程。例如chrome中的每个标签页都是线程,如果某个网页卡了,整个浏览器都动不了,其他网页也点不了,因为CPU已经把控制权交给别的进程了。因为内核不知道多线程的存在,自然不能给线程分配硬件,不能发挥多核处理器的优势。多处理器与多核的区别:多核有多个CPU,但是只有一个内存和一个MMU,只有一套内存映射。多处理器有多个内存和MMU。
10、用户级线程:指令的切换 为什么先讲线程?因为线程切换是只有指令序列(PC指针)在切换,加上内存切换才是进程的切换。这是从简入繁的顺序 。1、用户级线程:用户主动切换线程进程 = 资源 + 指令执行序列线程保留了并发的有点,避免了进程切换的代价。指令序列在切换的时候,需要切换PCB中记录的信息,寄存器等。能不能不切换内存映射表(寄存器还是得切换的)?答案是可以的,这就是用户级线程所做的事情。将资源和指令执行分开,一个资源+多个指令执行序列。举个例子:一个浏览器需要从网上下载数据,需要显示文字,需要解压图片,这些不同的任务实
9、多进程图像:包括进程管理和内存管理 1、多进程如何组织的使用程序控制块PCB(Process Control Block)记录进程信息(寄存器信息等),维护多个队列(链表)。执行队列:单CPU的话就一个。就绪队列:CPU空出来了就可以执行了。阻塞队列:等待某些时间才能转化到就绪队列。这三个队列类似于在饭堂排队,一个人在打饭(执行队列),一队人在排队等打饭的窗口(就绪队列),一队人因为等待某些事件,即使CPU空闲也不能运行(例如没带饭卡,等人。在实际情况中就是等待磁盘读写。)2、多进程如何交替:引出调度将PCB块放到不同的队列
百度飞桨7日营——世界冠军带你从零实践强化学习总结 课程大纲学习感悟强化学习一直是我非常感兴趣的领域。为了了解强化学习的原理,我也曾看过伯克利大学的CS 294-112课程来了解相关的知识,但是一直没有找到合适的教程去实践体验一下。这也是7日营里科科老师提到的国内强化学习存在的一个问题,缺少一个难度适中的实践教程,导致强化学习的门槛较高。幸运的是,百度飞桨推出了这期7日营。全程学习下来我能感受到这个课程真的诚意满满。首先,这门课的难度适中,省略了绝大部分公式推导,着眼于让大家能够尽快上手体验一下强化学习。这个切入点我觉得是非常合适的,市面上不缺深入推
刷刷刷刷刷leetcode 题型数组数组945. 使数组唯一的最小增量给定整数数组 A,每次 move 操作将会选择任意 A[i],并将其递增 1。返回使 A 中的每个值都是唯一的最少操作次数。示例 1:输入:[1,2,2]输出:1解释:经过一次 move 操作,数组将变为 [1, 2, 3]。示例 2:输入:[3,2,1,2,1,7]输出:6解释:经过 6 次 move 操作,数组将变为 [...