Loading

摘要: 【声明】 本文转载自 Union-Find算法详解 - GitHub Union-Find 算法,也就是常说的并查集算法,主要是解决图论中「动态连通性」问题的。 问题描述 简单说,动态连通性其实可以抽象成给一幅有 N 个结点的图连线,其中结点按 0~N 编号。 Union-Find 算法主要需要实现 阅读全文
posted @ 2021-01-25 14:55 JakeLin 阅读(145) 评论(0) 推荐(0)
摘要: 排序算法 排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。 冒泡排序 顾名思义,就像一堆气泡,大的气泡往上冒,一次遍历完的结果是待排序的气泡中最大的气泡冒出到有序序列。 【步骤】 从第一个元素 阅读全文
posted @ 2021-01-25 14:52 JakeLin 阅读(56) 评论(0) 推荐(0)
摘要: 买卖股票的最佳时机(动态规划) 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。 如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。 注意:你不能在买入股票前卖出股票。 来源:力扣(LeetCode)https://leetcode-c 阅读全文
posted @ 2021-01-25 14:50 JakeLin 阅读(99) 评论(0) 推荐(0)
摘要: 丑数的定义 我们把只包含质因子 2、3 和 5 的数称作丑数(Ugly Number)。 1, 2, 3, 4, 5, 6, 8, 9, 10, 12 是前 10 个丑数。 丑数的判断 依次循环除以2、3、5直到不能整除,最后值为1则为丑数。 bool isUgly(int num) { if(nu 阅读全文
posted @ 2021-01-25 14:48 JakeLin 阅读(312) 评论(0) 推荐(0)
摘要: 并发模式是指I/O处理单元和多个逻辑单元之间的协调完成任务的方法。 并发模式中,**“同步”指的是程序完全按照代码序列的顺序执行;“异步”**指的是程序的执行需要由系统事件来驱动。 领导者/追随者模式 领导者/追随者模式是多个工作线程轮流获得事件源集合,轮流监听、分发并处理事件的一种模式。 领导者线 阅读全文
posted @ 2021-01-25 14:45 JakeLin 阅读(516) 评论(0) 推荐(0)
摘要: 并发模式中,“同步”指的是程序完全按照代码序列的顺序执行;“异步”指的是程序的执行需要由系统事件来驱动。 阅读全文
posted @ 2021-01-25 14:44 JakeLin 阅读(630) 评论(0) 推荐(0)
摘要: 同步I/O模型通常用于实现Reactor模式,异步I/O模型则用于实现Proactor模式。 Proactor模式 与 Reactor 模式不同,Proactor 模式将所有 I/O 操作都交给主线程和内核来处理, 工作线程仅仅负责业务逻辑。 主线程:负责监听已连接文件描述符上是否有事件发生。 内核 阅读全文
posted @ 2021-01-25 14:40 JakeLin 阅读(211) 评论(0) 推荐(0)
摘要: 主线程只负责监听事件发生,其余工作(接受连接、读写数据、处理客户请求)均由工作线程完成。 阅读全文
posted @ 2021-01-25 14:38 JakeLin 阅读(147) 评论(0) 推荐(0)
摘要: I/O模型中,同步和异步关注的是消息通信机制。阻塞和非阻塞关注的是程序在等待调用结果时的状态。 阅读全文
posted @ 2021-01-25 14:37 JakeLin 阅读(121) 评论(0) 推荐(0)
摘要: TCP连接的建立过程——"三次握手"。TCP连接的释放——"四次挥手"。 阅读全文
posted @ 2021-01-25 14:36 JakeLin 阅读(213) 评论(0) 推荐(0)
摘要: 物理层 频分复用:所有用户在同样的时间占用不同的带宽资源 时分复用:所有用户是在不同的时间占用相同的频带宽度 波分复用:光的频分复用 集线器:工作在物理层,简单的转发比特,不进行碰撞检测。不同鹏颛臾使用不同的速率则不能使用集线器互连。 数据链路层 主要信道:点对点信道 、广播信道 三个基本问题:封装 阅读全文
posted @ 2021-01-25 14:35 JakeLin 阅读(436) 评论(0) 推荐(0)
摘要: Linux网络编程中,基本TCP套接字操作:socket、bind、listen、accept、connect、close 阅读全文
posted @ 2021-01-25 14:34 JakeLin 阅读(336) 评论(0) 推荐(0)
摘要: 编译器驱动程序 大多数编译系统提供编译器驱动程序(compiler driver),它代表用户在需要时调用语言预处理器、编译器、汇编器、和链接器。 我们所常说的 “编译生成可执行文件” 实际包括以下过程: 预处理器 (某些编译系统,预处理器被集成到 编译器 中) cpp [other argumen 阅读全文
posted @ 2021-01-25 14:33 JakeLin 阅读(2442) 评论(2) 推荐(0)
摘要: dynamic_cast:有虚函数的类,指针或引用,类层次结构中进行转换(主要是向上转换); const_cast:去掉 const 或 volatile 属性; static_cast:编译期间转换,没有运行时类型检查来保证转换的安全性; reinterpret_cast:仅仅重新解释类型,没有对 阅读全文
posted @ 2021-01-25 14:26 JakeLin 阅读(188) 评论(0) 推荐(0)
摘要: 程序使用 new 从堆(自由存储区)分配内存,在不需要时,应使用 delete 将其释放。这个内存管理过程由程序员控制,内存泄露是困扰C/C程序员的一大难题。,C11中引入了智能指针的概念,方便管理堆内存。使用普通指针,容易造成堆内存泄露(忘记释放)、二次释放、程序发生异常时内存泄露等问题等,使用智 阅读全文
posted @ 2021-01-25 14:17 JakeLin 阅读(155) 评论(0) 推荐(0)
摘要: 概念 现代计算机中内存空间都是按照**字节(byte)**划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特 定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。 如果一个变量的内存地址 阅读全文
posted @ 2021-01-25 14:15 JakeLin 阅读(577) 评论(0) 推荐(0)
摘要: 今天听了听侯捷的 C++面向对象高级编程 原本觉得貌似很基础的知识,但是其中还是有所收获,该笔记对此进行记录。 阅读全文
posted @ 2021-01-25 14:13 JakeLin 阅读(726) 评论(0) 推荐(0)
摘要: 红黑树本质是一个二叉搜索树,每个节点非黑即红,再加上一些特性,变成平衡二叉搜索树(平衡性比AVL-tree弱一些)。红黑树的插入、删除、查找操作的时间复杂度是 O(logN)。 阅读全文
posted @ 2021-01-25 14:12 JakeLin 阅读(157) 评论(0) 推荐(0)
摘要: 进程间通信方式中管道是最基础的一种方式。管道(pipe和FIFO)是一种伪文件。管道数据只能单向流动,并且只能一次性读取。管道是借助内核实现的。 阅读全文
posted @ 2021-01-25 14:10 JakeLin 阅读(313) 评论(0) 推荐(0)
摘要: 环境: Linux CentOS 7 3.10.0-1062.9.1.el7.x86_64 强调:server 包含在http内部,每一个server都是一个虚拟主机(站点)!!! Nginx服务器安装配置 安装依赖 yum install pcre* -y yum install openssl* 阅读全文
posted @ 2021-01-25 14:06 JakeLin 阅读(215) 评论(0) 推荐(0)
摘要: CVM存储在 /var 下,虽然固态硬盘大部分存储空间,都给了 /var ,但是虚拟机多一点,就担心空间不足。于是便通过以下步骤对 /var 进行扩容。 更新--查看磁盘分区情况: [root@localhost ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUN 阅读全文
posted @ 2021-01-25 14:04 JakeLin 阅读(218) 评论(0) 推荐(0)
摘要: stack是一种先进后出(First In Last Out, FILO)的数据结构。只有一个出口。queue是一种先进先出(First In First Out, FIFO)的数据结构。有两个出口,从最底端加入元素、最顶端取出元素。 阅读全文
posted @ 2021-01-25 14:01 JakeLin 阅读(94) 评论(0) 推荐(0)
摘要: heap也就是数据结构中的堆,逻辑上可以看成一颗完全二叉树。binary max heap 作为 priority_queue 的底层机制。STL提供的是max-heap。 阅读全文
posted @ 2021-01-25 13:59 JakeLin 阅读(127) 评论(0) 推荐(0)
摘要: 前两天与师兄讨论到I/O复用,I/O复用在UNIX网络编程中,提供了三个系统调用,分别是select、poll、epoll。对于这三个系统调用的使用我已有coding,但是追其原理还有点捋不完整,这一篇博客记录通过源码阅读剖析select底层实现。 阅读全文
posted @ 2021-01-25 13:55 JakeLin 阅读(980) 评论(0) 推荐(0)
摘要: 先上图 read、write函数常常被称为 Unbuffered I/O。指的是无用户输入级缓冲区,但不保证不使用内核缓冲区。 系统I/O与标准库I/O差异 用户程序在读写文件时既可以调用C标准I/O库函数,也可以直接调用底层的系统I/O函数,有什么区别呢? 使用系统I/O函数每次读写都需要进入内核 阅读全文
posted @ 2021-01-25 13:51 JakeLin 阅读(128) 评论(0) 推荐(0)
摘要: Linux进程内存地址空间分布,记录各部分所存储的数据,4G的地址空间为虚拟地址,最大支持地址空间大小 阅读全文
posted @ 2021-01-25 13:48 JakeLin 阅读(336) 评论(0) 推荐(0)
摘要: 生成站点地图,提交给搜索引擎,使得可以使用搜索引擎搜索到博客信息 阅读全文
posted @ 2021-01-25 13:46 JakeLin 阅读(84) 评论(0) 推荐(0)
摘要: 由于个人感觉,找图片困难(有选择困难症......),虽然使用了图床,但是原本使用的Butterfly主题需要配置图片让我有点难受(是我太菜了)。现在切换为最新的NexT主题,记录当前主题配置。 阅读全文
posted @ 2021-01-25 13:44 JakeLin 阅读(174) 评论(4) 推荐(0)
摘要: 配置信息 [root@iZwz9c74ta983j746ynevpZ ~]# uname -a Linux iZwz9c74ta983j746ynevpZ 3.10.0-1127.10.1.el7.x86_64 #1 SMP Wed Jun 3 14:28:03 UTC 2020 x86_64 x8 阅读全文
posted @ 2021-01-25 13:41 JakeLin 阅读(270) 评论(0) 推荐(0)
摘要: TL list是一个双向链表(double linked list)。SGI STL提供了另一个单向链表(single linked list)也就是slist。 slist与list差异: slist迭代器是单向的Forward Iterator,list迭代器是双向的Bidirectional 阅读全文
posted @ 2021-01-25 13:39 JakeLin 阅读(82) 评论(0) 推荐(0)
摘要: deque概述 deque 是一种双向开口的连续线性空间。可以在头尾两端分别做元素的插入和删除操作。 deque是有一段一段的定量连续空间构成,是动态分段连续。 deque 和 vector 的差异: deque 允许于常数时间内对两端进行元素的插入或移除操作。 deque 没有容量,它是动态地以分 阅读全文
posted @ 2021-01-25 13:38 JakeLin 阅读(110) 评论(0) 推荐(0)
摘要: vector 常被称为向量容器,因为该容器擅长在尾部插入或删除元素,在常量时间内就可以完成,时间复杂度为O(1);而对于在容器头部或者中部插入或删除元素,则花费时间要长一些(移动元素需要耗费时间),时间复杂度为线性阶O(n)。 vector实现的关键在于其对大小的控制以及重新配置时的数据移动效率。 阅读全文
posted @ 2021-01-25 13:37 JakeLin 阅读(171) 评论(0) 推荐(0)
摘要: 迭代器(iterator)是一种抽象的设计理念,通过迭代器可以在不了解容器内部原理的情况下遍历容器。除此之外,STL中迭代器一个最重要的作用就是作为容器(vector,list等)与STL算法的粘结剂,只要容器提供迭代器的接口,同一套算法代码可以利用在完全不同的容器中,这是抽象思想的经典应用。 从实 阅读全文
posted @ 2021-01-25 13:35 JakeLin 阅读(114) 评论(0) 推荐(0)
摘要: STL list 容器,又称双向链表容器,即该容器的底层是以双向链表的形式实现的。这意味着,list 容器中的元素可以分散存储在内存空间里,而不是必须存储在一整块连续的内存空间中。 基于这样的存储结构,list 容器具有一些其它容器(array、vector 和 deque)所不具备的优势,即它可以 阅读全文
posted @ 2021-01-25 13:33 JakeLin 阅读(101) 评论(0) 推荐(0)
摘要: 先谈operator new()和malloc() new:指我们在C++里通常用到的运算符 operator new():指对new的重载形式,它是一个函数,并不是运算符 函数operator new中调用malloc()进行内存分配。 malloc实际内存分配得到的内存空间如下: new 运算符 阅读全文
posted @ 2021-01-25 13:32 JakeLin 阅读(148) 评论(0) 推荐(0)
摘要: 源代码:SGI-STL V3.3 注:SGI STL并不是原封不动的被用于GCC,所以在GCC中使用STL可能会和SGI STL有一些微小的区别 STL六大组件 容器 -- containers 配置器 -- allocators 算法 -- algorithms 迭代器 -- iterators 阅读全文
posted @ 2021-01-25 13:30 JakeLin 阅读(203) 评论(0) 推荐(0)
摘要: Weave Scope 安装 在 master 上通过以下命令安装Weave Scope: kubectl apply -f "https://cloud.weave.works/k8s/scope.yaml?k8s-version=$(kubectl version | base64 | tr - 阅读全文
posted @ 2021-01-25 13:27 JakeLin 阅读(362) 评论(0) 推荐(0)
摘要: 1. centos 7 配置 关闭防火墙、关闭selinux、更新源 #防火墙 systemctl disable firewalld.service #关闭Selinux sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/con 阅读全文
posted @ 2021-01-25 13:23 JakeLin 阅读(442) 评论(0) 推荐(0)
摘要: 简介 Markdown 是一种轻量级标记语言,它允许人们使用易读易写的纯文本格式编写文档。 Markdown 编写的文档可以导出 HTML 、Word、图像、PDF等多种格式的文档。 Markdown 编写的文档后缀为 .md, .markdown。 编辑器 Typora 官网:https://ty 阅读全文
posted @ 2021-01-25 11:44 JakeLin 阅读(133) 评论(0) 推荐(0)