自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 收藏
  • 关注

原创 第三章 线程传参详解,detach()大坑,成员函数做线程函数

1、若传递int这种简单类型参数,建议都是值传递,不要用引用。防止节外生枝。2、如果传递类对象,避免隐式类型转换。全部都在创建线程这一行就构建出临时对象来,然后在函数参数里,用引用来接,否则系统还会构造一次对象,浪费//终极结论:3、建议不使用detach(),只使用join(), 这样就不存在局部变量失效导致线程对内存的非法引用问题。

2023-04-16 11:32:15 329

原创 第二章 线程启动、结束、创建线程多方法

传统多线程程序主线程要等待子线程执行完毕,然后自己再最后退出,而detach()打破了这种规则,detach分离的意思,也就是主线统程不和子线程汇合了,你主线程执行你的,我子线程执行我的,你主线程也不必等我子线程运,你可以先执行结束,这并不影响我子线程的执行。为什么引入detach(),我们创建了很多子线线程,让主线程逐个等待子线程结束,这种编程方法不太好,所以引入了detach(),好比之前拓展里的写法,就是主线程逐个等待子线程。1、程序运行起来,生成一个进程,该进程所属的主线程开始自动运行。

2023-04-01 18:17:22 168

原创 第一章 C++11 并发与多线程概念

1、线程是用来执行代码的2、把线程这个东西理解成一条代码的执行通路(道路),一个新线程代表一条新的通路3、一个进程自动包含一个主线程,主线程随着进程默默的启动并运行,我们可以通过编码来创建多个其他线程(非主线程),但是创建的数量最大都不建议超过200-300个,至于到底多少个合适,大家在实际的项目中可以不断调整和优化,有的时候线程太多的时候效率反而会降低4、因为主线程是自动启动的,所以一个进程中最少也是有一个线程(主线程),进程和主线程感觉是爹和儿的关系。

2023-04-01 14:00:00 163

原创 《软件设计师考试学习笔记》-1考试简介

软件设计师考试简介

2023-02-11 22:12:29 110

原创 《计算机网络》学习——第5章 运输层

5.1 运输层协议概述5.1.1 进程之间的通信1、从通信和信息处理的角度看,运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是用户功能中的最底层。2、只有位于网络边缘部分的主机的协议栈才有运输层。3、网络层为主机之间提供逻辑通信,而运输层为应用进程之间提供端到端的逻辑通信。5.1.2 运输层的两个主要协议1、用户数据报协议UDP(User,Datagram Protocol);传输控制协议TCP(Transmission Control Protocol)2、UDP

2022-04-02 16:38:34 2966

原创 《计算机网络》学习——第4章 网络层

4.1 网络层提供的两种服务1、互联网采用的设计思路:网络层向上只提供简单灵活的、无连接的、尽最大努力交付的数据报服务。2、虚电路服务与数据报服务的的对比(1)虚电路服务(2)数据报服务(3)对比4.2 网际协议IP1、网际协议IP是TCP/IP体系中最主要的协议之一,也是最重要的互联网标准协议之一。2、与IP协议配套使用的还有三个协议:(1)地址解析协议ARP(Address Resolution Protocol)(2)网际控制报文协议ICMP(Internet Contro

2022-03-30 10:40:14 1361

原创 《计算机网络》学习——第3章 数据链路层

1、数据链路层使用的信道(1)点对点信道:该信道使用一对一的点对点通信方式。(2)广播信道:该信道使用一对多的广播通信方式。2、从整个互联网来看,局域网仍属于数据链路层的范围。3.1 使用点对点信道的数据链路层3.1.1 数据链路和帧1、链路:链路(link)是一条无源的点到点的物理线路段,中间没有任何其他的交换结点。一条链路只是一条通路的一个组成部分。2、数据链路:数据链路(data link)除了物理线路外,还必须有通信协议来控制这些数据的传输。若把实现这些协议的硬件和软件加到链路上,

2022-02-28 21:28:25 2233

原创 《代码整洁之道》阅读笔记——第13章:并发编程

13.1 为什么要并发1、并发是一种解耦策略,把做什么和何时做分解开,进而改进应用程序的吞吐量和结构。我理解的吞吐量是同时执行的任务数量。2、关于并发:(1)并发会在性能和编写额外代码上增加一些开销;(2)正确的并发是复杂的,即便对于简单的问题也是如此;(3)并发缺陷并非总能重现,所以常被看做偶发事件而忽略,未被当作真的缺陷看待;(4)并发常常需要对设计策略的根本性修改。13.2 并发编程所面临的挑战多个线程之间的相互影响。13.3 并发防御原则1、单一权责原则(SRP):类/方法/组...

2021-12-23 20:12:48 327

原创 《代码整洁之道》阅读笔记——第12章:迭进

第12章:迭进12.1 通过迭进设计达到整洁目的开发时要遵循简单设计的5条规则12.2 规则1:运行所有测试全面测试并持续通过所有测试的系统就是可测试的系统。12.3 规则2:重构提升内聚性,降低耦合度,切分关注面,模块化系统性关注面,缩小函数和类的尺寸,选用更好的名称等。如何理解重构?不改变软件可观察行为的前提下,改善其内部结构,以提高理解性和降低修改成本。作为开发者, 应当把重构作为开发的一部分,一边开发一边重构。在快速堆叠代码,实现基本需求功能的基础上,写好测试用例,保证功能不变,

2021-12-21 21:02:08 161

原创 《代码整洁之道》阅读笔记——第11章:系统

第11章:系统11. 1 如何建造一个城市即在编写代码时,如何在较高抽象层级,即系统层级保持整洁。11.2 将系统的构造与使用分开分解main:将全部构造构成搬迁到main或者被称之为main的模块中。工厂。有时应用程序要负责何时创建对象,此时可以使用抽象工厂模式。我对于抽象工厂模式还不是很理解。依赖注入,其可实现分离系统的构造和使用。具体没搞明白。11.3 扩容11.4 Java代理Java代理适用于简单的情况,例如在单独的对象或类中包装方法调用。11.5 纯Java AOP框

2021-12-03 22:04:43 364

原创 《代码整洁之道》阅读笔记——第10章:类

第10章:类10.1 类的组织Java中的约定:类应该先写变量,后写函数。大致顺序,公共静态常量、公共变量->私有静态变量、私有实体变量->公共函数->公共函数的私有工具函数。我觉得这个规定也不是一层不变的,还是得按照团队的规则和习惯比较好。封装10.2 类应该短小类的名称应该描述其权责,否则可能类就太长了。单一权责原则:类或模块应有且只有一条加以修改的理由。内聚:如果一个类中的每个变量都被每个方法所使用,则该类具有最大的内聚性。但是并不是内聚性越大越好,在保持内聚性越高

2021-12-02 21:46:56 292

原创 《代码整洁之道》阅读笔记——第9章:单元测试

第9章:单元测试9.1 TDD三定律定律1:在编写不能通过的单元测试前,不可编写生产代码。解释:先写测试用例。定律2:只可编辑刚好无法通过的单元测试,不能编译也算不通过。解释:编译错误也算失败,测试用例必须有针对性。定律3:只可编写刚好足以通过当前失败测试的生产代码。解释:一个产品代码必须建立在一个测试用例成功的基础上,如果需要写新的产品代码必须从第1步开始。9.2 保持测试整洁测试代码和生产代码一样重要,都需要你保持整洁,脏乱差的测试代码将会阻碍生产代码的修改。9.3 整洁的测试整洁

2021-12-01 17:22:01 580

原创 《代码整洁之道》阅读笔记——第8章:边界

第8章:边界对边界的理解如下:有效数据和无效数据的分界点,往往作为程序员编写程序的判断点,是程序员容易犯错的地方,也是测试人员重点测试的内容。我们把这些分界点的值找到,并进行测试的方法,称为边界值法。...

2021-11-29 21:38:21 137

原创 《代码整洁之道》阅读笔记——第7章:错误处理

第7章:错误处理

2021-11-29 09:01:56 159

原创 《代码整洁之道》阅读笔记——第6章:对象和数据结构

第6章:对象和数据结构书中提到的对象和数据结构,我的理解是对象指的是面向对象的编程,而数据结构指的是面向过程的编程。

2021-11-26 21:51:10 292

原创 《代码整洁之道》阅读笔记——第5章:格式

第5章:格式

2021-11-23 21:59:32 220

原创 《代码整洁之道》阅读笔记——第4章:注释

第4章:注释注释的恰当用法是弥补我们在用代码表达意图时遭遇的失败。我比较认同注释就是代码没有很好的表示时的一种解释,注释并不会被维护,所以错误的注释会带来不必要的麻烦。

2021-11-02 22:18:54 92

原创 《代码整洁之道》阅读笔记——第3章:函数

第3章:函数

2021-11-01 22:41:23 91

原创 《代码整洁之道》阅读笔记——第1、2章

第1章 整洁代码第2章 有意义的命名

2021-10-21 20:49:11 72

原创 《计算机网络》学习——第2章 物理层

2.1 物理层的主要任务物理层的主要任务描述为确定与传输媒体的接口有关的一些特性。1)机械特性。指明接口所用接线器的形状和尺寸,引脚数目和排列,固定和锁定装置等。2)电气特性。指明在接口电缆的各条线上出现的电压范围。3)功能特性。指明某条线上出现的某一电平的电压的意义。4)过程特性。指明对于不同功能的各种可能时间的出现顺序。2.2 物理层下面的传输媒体物理层下面的传输媒体包括1)导引型传输媒体:双绞线、同轴电缆、光缆。2)非导引型传输媒体:短波通信、微波通信(微波接力通信、卫星通信)、红外

2021-09-28 20:09:26 340

原创 《计算机网络》学习——第1章 概述

1.1 互联网的两个重要基本特点连通性和共享。1.2 什么是ISPISP(Internet Service Provider),互联网服务提供商,比如中国移动等1.3 什么是IXPIXP(Internet eXchange Point),互联网交换点,其主要作用就是允许两个网络直接相连并交换分组,而不需要再通过第三个网络来转发分组。1.4 数据传送节点的三种交换方式三种交换方式在数据传送阶段的主要特点:1)电路交换:整个报文的比特流连续地从源点直达终点,好像在一个管道中传送;2)报文交换:整个

2021-09-28 20:02:13 253

原创 使用邻接表的方式实现图

1 基本概念1.顶点:图中的数据元素2.边:顶点之间的连接3.权重:边可以带权重,用来表示从一个顶点到另一个节点的成本。4.路径:路径是由边连接的顶点组成的序列5.环:环是有向图中国的一条起点和终点为同一个节点的路径。6.图的分类:按边有无方向分为有向图,无向图;按边有无权重分为权重图,无权重等等。其分类方式很多,就不一一列出。7.度:无向图中顶点的边数,有向图中还分为入度和出度。8.连图图:若图中任意两个顶点都是连通的,称为连通图,在有向图中,称为强连通图。2 图的存储结构图的存储结

2021-09-17 22:47:25 1430

原创 二叉搜索树

1 为什么要使用二叉搜索树?我们知道搜索算法有顺序搜索,二分搜索,还有散列表(也叫哈希表),而二叉搜索树是另一种搜索算法,利用二叉树的结构可以提高搜索效率。2 二叉搜索树的性质二叉搜索性:小于父节点的键都在左子树中,大于父节点的键则都在右子树中。左子树的所有键都小于根节点的键,右子树的所有键则都大于根节点的键。3 代码实现Python版本:有两个类分别是BinarySearchTree和TreeNode。首先看看TreeNode,其提供了很多辅助函数,大大简化了BinarySearchTree

2021-09-16 20:31:23 85

原创 利用二叉堆实现优先级队列

1 什么是优先级队列1.1 定义优先级队列是队列的一个重要变体,优先级最高的元素在最前,优先级最低的元素在最后。1.2 实现方式列表或数组的插入时间复杂度是O(n),排序的时间复杂度是O(nlogn),二叉堆的时间复杂度是O(logn)。因此优先级队列用二叉堆来实现。1.3 应用在图算法中,优先级队列是一个非常有用的数据结构。2 二叉堆2.1 堆堆(Heap)是一类数据结构,它们拥有树状结构,且能够保证父节点比子节点大(或小)。大根堆,父节点比子节点大;小根堆,父节点比子节点小。2.2

2021-09-15 15:35:05 605

原创 树中的重要概念

1 基本术语及定义1.1 根节点根节点:是树中唯一没有入边的节点。1.2 父节点父节点:一个节点是其所有子节点的父节点1.3 子节点子节点:一个节点通过出边与子节点相连1.4 兄弟节点兄弟节点:具有同一个父节点的节点称为兄弟节点1.5 叶子节点叶子节点:叶子节点没有子节点1.6 层数节点n的层数是从根节点到n的唯一路径长度1.8 高度高度:树的高度是其中节点层数的最大值。1.9 树树(Tree)是n(n≥0)个结点的有限集。n=0时称为空树。在任意一棵非空树中:(1)有且仅有

2021-09-14 21:27:47 1865

原创 C++实现树的遍历

树的遍历1 遍历方式1.1 前序遍历前序遍历定义:在前序遍历中,先访问根节点,然后递归地前序遍历左子树,最后递归地的前序遍历右子树。1.2 中序遍历中序遍历定义:在中序遍历中,先递归地中序遍历左子树,然后访问根节点,最后递归地中序遍历右子树。1.3 后序遍历后序遍历定义:在后序遍历中,先递归地后序遍历左子树,然后递归地后序遍历右子树,最后访问根节点。1.4 层序遍历层序遍历定义:按层从左至右2 案例3 代码实现#include<iostream>#includ

2021-09-13 23:23:06 2151 1

原创 二叉树的应用之解析树

解析树解析树的定义简单的说,解析树常常用于真实世界的结构表示,例如句子或数学表达式。具体可参考链接解析树如何C++创建一个完全表达式的解析树呢?例如"( 3 + ( 4 * 5 ) )",该表达式中的每个字符之间用空格隔开。具体代码如下:#include<iostream>#include<string>#include<vector>#include<stack>using namespace std;//二叉树的构建class Bi

2021-09-13 20:22:19 233

原创 C++实现二叉树的创建

简单二叉树的创建#include<iostream>using namespace std;//简单二叉树的创建## class BinaryTree {public: //初始化 BinaryTree(int val) { this->val = val; this->leftChild = nullptr; this->rightChild = nullptr; } //插入左子节点 void insertLeft(int newNode)

2021-09-09 23:17:28 1089

空空如也

空空如也

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

TA关注的人

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