自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

CodeMap

程序小白的进阶之路

  • 博客(27)
  • 收藏
  • 关注

原创 条件变量

条件变量是一种线程同步机制,允许多个线程以无竞争的方式等待特定条件(条件不满足时线程挂起并等待)。注意条件变量是用来等待线程的,而不是上锁的,条件变量通常与互斥锁一起使用。条件本身由互斥量保护,线程在改变条件状态之前必须先锁住互斥量,当条件满足时,线程通常解锁并等待条件发送变化,一旦另一个线程修改了环境变量,就会通知相应的环境变量唤醒一个或多个被条件变量阻塞的线程。唤醒后的线程将重新上锁,并测试条件是否满足。1. 初始化条件变量使用条件变量之前需要先对其进行初始化。初始化的方法有两种,一种是静态初始化

2021-04-14 20:29:51 602

原创 Clean Code 代码整洁之道笔记(1-8 章)

Clean Code Chapter 1-8第一章 整洁代码1. 为什么需要代码?2. 混乱的代码3. 什么是整洁代码第二章 有意义的命名1. 名副其实2. 避免误导3. 做有意义的区分4. 使用读得出来的名称5. 使用可搜索的名称6. 避免使用编码7. 避免思维映射8. 类名9. 方法名10. 每个概念对应一个词11. 别用双关语12. 使用解决方案领域名称13. 添加有意义的语境14. 不添加没用的语境第三章 函数1. 短小2. 只做一件事3. 每个函数一个抽象层级4. switch 语句(还要再查查资

2021-04-14 10:21:39 1350

原创 「STL详解」RB-tree 红黑树

RB-tree 红黑树是一种广泛使用的平衡二叉搜索树(BInary Search Tree),也是 SGI STL 为以实现的一种搜索树,作为关联式容器(associated containers)的底部机制。它能确保任何一个节点的左右子树的高度差不会超过二者中较低子树的一倍。RB-tree 满足以下规则:每个节点不是红色就是黑色根节点是黑色如果节点是红色,其子节点必须为黑任意节点到 NULL(数尾端)的任何路径,所含黑节点数必须相同RB-tree 节点设计RBTree 有红黑两种颜色的节

2020-06-21 19:51:27 673

原创 「Linux 操作系统」进程管理命令

任务管理(job control)执行任务管理的操作中,每个任务都是目前 bash 的子进程,即彼此之间是有相关性的。我们无法用任务管理的方式由 tty1 的环境去管理 tty2 的 bash。要执行 bash 的任务管理需要注意:这些任务所触发的进程必须来自 shell 的子进程(只管理自己的 shell)前台:可以控制与执行命令的环境称为前台的任务后台:可以自动执行的任务,无法使用【Ctrl+c】终止,可使用 bg、fg 调用该任务后台中执行的进程不能等待 terminal 或 shel

2020-06-16 20:44:18 284

原创 「操作系统」学习 Shell 脚本

vim 程序编辑器vi 分为 3 种模式:一般命令模式、编辑模式与命令行模式。一般命令模式:用 vi 打开一个文件就直接进入一般命令模式,可以使用【上下左右】进行移动光标,也可以使用【删除字符】或【删除整行】来处理文件内容,也可以使用【复制、粘贴】处理文件内容。编辑模式:按下【i、I、o、O、a、A、r、R】等任何一个字母之后进入编辑模式,使用【Esc】退出。命令行模式:在一般命令模式中输入【: / ?】三个中的任何一个,就能将光标移动到最下面一行,可以提供【查找数据】或读取、保存、批量替换等操作

2020-06-15 17:01:18 274

原创 「Linux 操作系统」文件、目录与磁盘格式

文件权限Linux 一般将文件可读写的身份分为三个类型:拥有者(owner)、所属群组(group)和其他人(others),且三种身份各有读写执行权限。在 Windows 下可执行文件有扩展名来判断,如 .exe、.bat、。com 等,而 Linux 下的客户自行文件由文件权限判断。ls 命令用于查看文件,执行 ls -al 就能看到文件的权限以及拥有者和所属用户组等信息: umask 命令用于查看文件默认权限 修改文件权限文件的权限可以用 chmod 修改,但权限的设置方法有两种,分

2020-06-11 10:55:52 651

原创 「算法」二叉树的四种遍历方式和一些题目

文章目录二叉树的基本概念二叉树的特点完全二叉树二叉树的存储结构二叉树的遍历前序遍历中序遍历后序遍历层序遍历二叉树的相关题目1. 重建二叉树2. 二叉树的下一个节点3. 二叉树的子结构4. 二叉树的镜像二叉树的基本概念二叉树(binary tree)是 n(n>=0)n(n>=0)n(n>=0) 个结点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根结点以及两棵互不相交的、分别称为根节点的左子树和右子树的二叉树组成。每个根节点最多只有两个子节点的就叫做二叉树。二叉树的特点

2020-06-04 21:07:50 606

转载 Windows下使用VS2017搭建FLTK开发环境

转载自博客园:lulipro - 代码钢琴家

2020-05-29 20:59:26 328

原创 「STL详解」容器配接器详解

容器配接器(container adapter)并不是一类容器,它没有提供真正的数据结构实现,并且配接器不支持迭代器。配接器使用已有的容器作为底部结构,将其接口改变,使之符合自己的特性。STL 提供三种容器配接器:stack、queue、priority_queue。1. stackstack 是一种先进后出(First In Last Out, FILO)的数据结构,只有一个接口,允许新增数据、移除数据和取得最顶端数据,即不允许有遍历行为。堆栈都能够用任何顺序容器实现:vector、list、de

2020-05-26 21:15:13 307

原创 「C/C++技术基础」基本数据类型需要注意的问题

C++ 定义了包括算数类型和空类型在内的基本数据类型。其中算数类型包含了字符、整型数、布尔值和浮点数。空类型不对应具体的值。1. 算数类型算数类型分为两类:整形(integral rype,包括字符和布尔类型)和浮点型。 不同的数据类型在不同的操作系统下占用的内存空间也不同,64 位系统下除了指针类型和 long long 类型由 32 位下的 4 字节大小增长为 8 字节外,其余没有变化。char 类型死循环问题char 类型是基本的字符类型,占一个字节(8 位),取值范围位 -128 到

2020-05-25 21:47:32 286

原创 「C/C++技术基础」类的构造、析构与赋值运算

C++ Primer 中描述类的基本思想是数据抽象(data abstraction)和封装(encapsulation)。数据抽象是一种依赖于接口(interface)和实现(implementation)分离的编程技术。类的接口包括用户能执行的操作;类的实现包括类的数据成员、负责接口实现的函数体以及定义类所需的各种私有函数。每个类都分别定义了它的对象被初始化的方式,类通过一个或几个特殊成员函数来控制对象的初始化过程,构造函数(constructor)用来初始化类对象的数据成员,只要类的对象被创建就会执

2020-05-21 16:58:23 193

原创 「STL详解」顺序容器 deque 详解

1. deque 概述vector 是单向开口的连续线性空间,deque 是一种双向开口的连续线性空间,即可以在头尾两端做元素的插入和删除操作。deque 和 vector 的区别:deque 可以在常数时间内对头端进行元素的插入和移除操作;deque 没有容量(capacity)的概念,它是动态地分段连续空间组合而成,随时可以增加一段新空间并连接起来。即 vector 是在旧空间不足时开辟新空间,然后将数据拷贝过来再释放原来的空间;而 deque 则不需要提供空间保留功能。deque 的迭代

2020-05-20 15:38:21 416

原创 「算法」位运算的一些技巧

位运算是把数字用二进制表示,对每一位上的 0 或 1 进行运算。位运算只有五种类型:与(&)、或(|)、异或(^)、左移(<<)和右移(>>)。左移运算和右移运算左移运算符 m<<n 表示把 m 左移 n 位,最左边的 n 位丢弃,同时在最右边补 n 个 0。右移运算符 m>>n 表示把 m 右移 n 位,最右边的 n 位丢弃,如果 m 是无符号数,则用 0 填补最左边的 n 位;如果 m 是有符号数,则用符号位填补最左边的 n 位。对于一个正

2020-05-12 22:47:24 629

原创 「STL 详解」顺序容器 list

list 可以简单的看做是一个双向链表,相比于 vector 的连续线性空间,list 每次插入和删除一个元素,就配置或释放一个元素空间。对任何一个位置的元素插入和移除,list 都是常数时间。list 和 forword_list 十分相似,list 是双向链表,数据由若干个节点构成,每一个节点都包括一个信息块(即实际存储的数据)、一个前驱指针和一个后驱指针;而 forward_list 是一个单向链表,只支持单向顺序访问,在链表的任何位置进行插入/删除操作都非常快。list 的节点list 本身和

2020-05-11 20:38:57 190

原创 「STL详解」顺序容器vector

顺序容器(sequential containers)中的元素是 ordered,但不一定是 sorted。即容器存储的元素在组织形式上是有序的,但在值的排列上不一定有序。C++ 中提供了一个顺序容器 array,STL额外提供了 vector, list, deque, stack, queue, priority-queue 等顺序容器。其中 stack 和 queue 是由 deque 转换而来,技术上称为配接器(adapter)。vector概述vector 和 array 非常相似,array

2020-05-09 13:27:31 263

原创 「STL详解」STL概述和迭代器

什么是STL标准模版库?在我们学习 STL 之前首先了解什么是标准模版库(STL)。STL(Standard Template Library),即标准模板库,是一个高效的C++程序库,包含了常用的基本数据结构和基本算法。为广大C++程序员们提供了一个可扩展的应用框架,高度体现了软件的可复用性。从逻辑层次来看,在STL中体现了泛型化程序设计的思想(generic programming)。在这种思想里,大部分基本算法被抽象,被泛化,独立于与之对应的数据结构,用于以相同或相近的方式处理各种不同情形。从实现

2020-05-08 22:06:24 244

原创 「计算机网络」传输层协议TCP、UDP

网络层只把分组发送到目的主机,但是真正通信的并不是主机而是主机中的进程。传输层提供了应用进程间的逻辑通信,传输层向高层用户屏蔽了下面网络层的核心细节,使应用程序看起来像是在两个传输层实体之间有一条端到端的逻辑通信信道。端口(port):软件端口是应用层的各种协议进程与运输实体进行层间交互的一个地址。TCP/IP的运输层用一个 16 位的端口号来标志一个端口。1. 用户数据协议UDP1.1 U...

2020-05-07 10:32:31 891

原创 「计算机网络」网络层协议总结

因为网络层是整个互联网的核心,因此应当让网络层尽可能简单。网络层向上只提供简单灵活的、无连接的、尽最大努力交互的数据报服务。1. 网际协议IP网际协议IP是使互连起来的许多计算机网络能够通信,TCP/IP体系中的网络层常被称为网际层(internet layer)或IP层。与 IP 协议配套使用的还有三个协议:地址解析协议 ARP(Address Resolution Protocol)...

2020-05-04 20:09:34 1164

原创 「C/C++技术基础」const关键字的理解和使用

1. C/C++中的const全局 const 修饰的变量在 C++ 语言和 C 语言下情况相同,在 C++ 下无法修改局部 const 修饰的变量,但可以用来初始化数组,是真正意义上的常量。const注意事项:const 在 C 语言下默认是外部链接属性,在 C++ 下默认是内部链接属性C 语言下的全局变量默认增加了extern 关键字,C++ 中需要手动添加 extern 关键字来...

2020-05-03 00:04:01 186

原创 「算法」贪心算法的认识和总结

1. 贪心思想贪心算法又称为贪婪法,是用来寻找最优解问题的常用方法。与动态规划不同的是,贪心算法在求解问题时,总是选择对于当前子问题最好的选择。也就是贪心算法的本质是每次只顾眼前利益,并且到最后能获得最大利益。“贪婪”就像是一个贪心的人,每次都只能看到眼前(或局部)的利益最大化,走一步看一步,并且最后能够得到问题(全局)利益的最大化。对于贪心算法,最重要的就是找到每次的局部最优解,而动态规划...

2020-05-01 21:55:00 995

原创 「计算机网络」数据链路层的三个基本问题和MAC帧格式

信道分类:广播信道一对多通信,一个节点发送的数据能够被广播信道上所有的节点接收到。所有的节点都在同一个广播信道上发送数据,因此需要有专门的控制方法进行协调,避免发生冲突(冲突也叫碰撞)。主要有两种控制方法进行协调,一个是使用信道复用技术,一是使用 CSMA/CD 协议。点对点信道一对一通信。因为不会发生碰撞,因此也比较简单,使用 PPP 协议进行控制。1. 使用点对点信道的数...

2020-05-01 09:58:45 2896

原创 「算法」动态规划解题三部曲及题目整理

1. 动态规划基本概念动态规划程序设计是对解最优化问题的一种途径、一种方法,而不是一种特殊算法。不像搜索或数值计算那样,具有一个标准的数学表达式和明确清晰的解题方法。动态规划程序设计往往是针对一种最优化问题,由于各种问题的性质不同,确定最优解的条件也互不相同,因而动态规划的设计方法对不同的问题,有各具特色的解题方法,而不存在一种万能的动态规划算法,可以解决各类最优化问题。1.1 动态规划问题中...

2020-04-30 23:46:56 531

原创 「计算机网络」物理层的一些概念

1. 物理层的基本概念物理层考虑的是怎样才能在连接各种计算机的传输媒体上传输数据比特流,而不是指具体传输媒体。主要任务:确定与传输媒体的接口有关的一些特性,如机械特性、电气特性、功能特性和过程特性。1.1 通信方式信道(channel)是用来表示像某一个方向传送信息的媒体,根据信息在传输线上的传送方向,分为以下三种通信方式:单工通信:单向传输,只能有一个方向的传输而没有反方向的交互。...

2020-04-30 20:51:43 381

原创 「计算机网络」计算机网络基础概念

1. 互联网概述计算机网络(简称网络)是由若干结点(node)和连接这些结点的链路(link)组成。网络中的结点可以是计算机、集线器、交换机或路由器等。而互联网是将多种不同的网络通过路由器连接起来,即互联网是网络的网络。互联网服务提供商(ISP, Internet Service Provider)可以从互联网管理机构获得许多 IP 地址,同时拥有通信线路以及路由器等联网设备,个人或机构向 I...

2020-04-30 19:16:41 502

原创 「Socket技术详解」Tinyhttpd

1. Socket常用函数接口及其原理图解 Socket 函数:1.1 使用socket()函数创建套接字Socket 是应用程序使用网络通信时向系统发送的请求,请求操作系统将网络通信所需的资源。分配给该应用程序返回一个 socket 描述符,随后的连接建立、数据传输等操作都是通过该Socket实现。函数原型:int socket(int af, int type, int proto...

2020-04-25 23:39:56 256

原创 frp配置实现内网穿透

1. frp简介frp是一个可用于内网穿透的高性能的反向代理应用,支持tcp,udp协议,为http和https应用协议提供了额外的能力,且尝试性支持了点对点穿透。具体可参考官方文档本文主要介绍通过ssh访问内网服务器2. 配置前准备一台需要内网穿透的内网服务器(客户端)一台可以访问外网的服务器(服务端,本文使用阿里云云服务器ECS),如果是在校大学生或者24岁以下都可以使用阿里云的...

2019-09-08 20:11:53 447 1

原创 Xshell连接网络地址转换(NAT)模式下的虚拟机

在学校校园网环境下只能连接一台主机,使用桥接网卡模式下虚拟机无法上网,只能通过NAT模式连接。查找到的资料以及自己遇到的问题整理如下。虚拟机网络设置1. 选择虚拟机网络连接模式为NAT模式2. 端口转发设置名称:ssh协议:TCP主机IP:127.0.0.1 (用于之后Xshell连接Ubuntu的主机地址)主机端口:1024~65535之间都行,这里设置成6022 (用于之后X...

2019-09-03 09:56:21 1700 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除