/images/joke_bear.jpg

子非鱼的技术博客

C++基础(四)inline函数

第五章 函数

inline 函数

将函数声明为inline可以避免函数调用的开销,空间换时间

调用函数步骤:

  1. 返回地址压栈
  2. 函数参数压栈
  3. 计算返回值
  4. 函数部分所有元素出栈,返回值

C++基础(五)static关键字

static关键字

static全局变量

只能在当前文件访问,其他文件不能通过extern访问

static局部变量

定义时创建,程序结束时销毁,修改了生命周期,作用域不变

static类

static对象的构造在main函数前执行,析构在main函数结束后

static成员变量

存在于所有对象且保持一致,可在其他文件访问

计算机网络(四)应用层(网络编程)

第二章 应用层(网络编程)

UDP编程

udpprocess

UdpClient

from socket import *
serverName = "hostname"
severPort = 12000
clientSocket = socket(AF_INET,SOCK_DGRAM) # ipv4,udp
message = "Hello World"
clientSocket.sendto(message.encode(),(serverName,severPort))
modifiedMessage,serverAddress = clientSocket.recvfrom(2048)
print(modifiedMessage.decode)
clientSocket.close()

Udpserver

计算机网络(三)应用层

Chapter 2: 应用层

应用层协议原理

传输层向应用层提供的服务为socket API

socket

简化本主机应用层向传输层发送的非有效信息,通过socket代表一组信息

TCP socket包含源IP,源端口,目标IP,目标端口,连接状态

UDP socket包含源IP,源端口

计算机网络(五)传输层

第三章 传输层

概述

可靠的、保序的传输:TCP

  • 多路复用,解复用
  • 拥塞控制
  • 流量控制(防止接收方缓存区满造成的分组丢失)
  • 建立连接

不可靠、不保序的传输:UDP

  • 多路复用,解复用
  • 没有为尽力而为的IP服务添加更多的其他服务

计算机网络(二)英特网

Chapter 1: Internet

基础概念

网络:由节点和边组成的结构

计算机网络:由主机节点(主机)和数据交换结点(数据的转发,如路由器交换机)构成的网络,边称为数据链路。

还可分为网络边缘(主机),网络核心(数据交换),接入(连接网络边缘和网络核心)

P2P(peer):分布式处理,客户端也可以是服务端

C++面向对象(三)模版

第五章 模版

模版函数(template function)为声明不是定义,在使用时根据输入类型定义

使用模版时,不会使用隐式类型转换

类模版里的每个函数都是函数模版,需要在声明前加上template

C++基础(二)基本数据类型

第二章 C++基础——基本数据类型

基本内置类型

算术类型

类型 含义 最小尺寸
bool 布尔 未定义
char 字符 8位
short 短整型 16位
int 整型 16位
long 长整型 32位
long long 长整型 64位
float 单精度浮点数 6位有效数字
double 双精度浮点数 10位有效数字
long double 扩展精度浮点数 10位有效数字

类型转换

  1. 当一个算术表达式中既有无符号数又有int值时,int会被转换为无符号数
  2. 当从无符号数中减去一个值时,不管这个值是不是无符号数,都必须保证结果不为负(否则为取模后值)

变量

变量声明于定义的关系

变量声明(declaration)定义了变量的类型和名字,定义(definition)在声明外还申请存储空间

如果只想声明,可在变量名前添加关键字extern

C++基础(六)字符串、向量和数组

第三章 字符串、向量和数组

标准库类型String

读写string对象

string s;
cin >> s;   //from empty to empty
getline(cin,s); //one line, stop by ENTER

当把string对象和字符(串)字面值混在一条语句时,必须确保加法运算符(+)两侧的运算对象至少一个是string

标准库类型vector

vector是模板而非类型

C++基础(三)指针

第二章 C++基础——指针

指针是一个变量,其存储的是值的地址,而不是值本身

使用常规变量时,值是指定的量,而地址是派生量,而指针相反

OOP强调的是在运行阶段(而不是编译阶段)进行决策,提供了灵活性,对于内存管理也更加高效

初始化指针

int* ptr_a;
double* ptr_b;

初始化时必须指定所指元素类型,因为对所有指针来说其都是代表一个初始地址,但从该初始地址读多少字节则由指针类型判断

指针也是作为变量存储,只不过其内存空间存的是地址。指针p1,p2有各自的地址&p1,&p2。长度为4B(32位)或8B(64位)。p1,p2表示存储的所指向元素的地址。*p1表示指向元素的值。 image.png

指针注意事项

在C++中创建指针时,计算机将分配用来存储地址的内存,但不会分配用来存储指针所指向的数据的内存(指向不确定)。另外,一定要在对指针提取(*)之前,将指针初始化为一个确定的、适当的地址。

C++基础(四)const限定符

第二章 C++基础——const限定符

const限定符

const对象一经创建后其值不能再改变,所以const对象必须初始化

const int i = 1;

默认情况下,const对象仅在文件内有效。若需在不同文件使用同一const对象,则const变量不管是声明还是定义都添加extern关键字,这样只需定义一次就可以了

extern const int bufSize;

const的引用

用于声明引用的const都是底层const,引用本身已默认为顶层const(无法改变指向)

const型变量只能由const型引用(底层const)

C++基础(一)CPP编译过程、宏以及头文件

第一章 开始

  1. endl将与设备关联的缓冲区(buffer)中的内容刷到设备中。在调试时应保证"一直"刷新流。否则若程序崩溃,输出可能还是缓冲区,导致对于程序崩溃位置的错误推断

  2. 读取数量不定的输入数据可用while (std::in >> value)

    当遇到文件结束符(end-of-file),或遇到一个无效输入时,istream对象状态变为无效,使条件为假

    EOF:在Windows中为Ctrl+Z,UNIX为Ctrl+D

C++编译过程

  1. 预处理(Preprocessing)

“开卷”何必“有益”

有些话小时候听不明白,长大后却会反复想起。

“以后少读读”就是这样一句话。

记得小学阅读课上,我在读一本悬疑小说并写到了读后感作业中,结果第二天就被老师批评,并以“开卷有益”这个成语来教导我说,你这种书以后少读读。

当时,我就觉得老师这种说法一定是错的,但限于那时的表达能力和逻辑能力并不能给出完整的反驳,现写下此文以表述自己的想法。

一个普通人的学习感悟

困惑的起点:学霸的经验为什么没用?

在上学的时候,老师总会在班会课上让学霸分享经验,但真正按照他们的方法学下来也没什么用,而且他们说的还有很多矛盾,比方说:

  • 要不要预习?
  • 学英语要不要去看美剧?

根本就不知道该听谁的。 大学毕业后工作了几年,也遇到了很多优秀的人。原本以为在沟通中很难跟上大佬的思路。但接触下来发现他们平时也嘻嘻哈哈的,和普通人没什么两样。但是他们看上去不用费太多精力就能把事情做好。 我就在想,该怎么变得和他们一样优秀?怎么样去提高自己的学习能力? 每天去上班的路上我都在想这个事情,奇怪的是我好像从来没有思考过这个问题。在上学的时候,我关心的往往是题目,只想着怎么去把题目做对,但从来没有去反思过学习过程有没有问题。在应试教育下,我好像失去了一些思考的能力,每天按部就班得完成老师布置的作业,没有去关注过学习这件事本身。 就这样,我来来回回思考了一星期,得到的都是些模糊的印象,比如说要定期复习,上课认真听讲。然而这都是些感性认识,并不能成体系得去表达学习过程。这时,我接触到了两本书,《学习的逻辑》《认知觉醒》,看完后让我对它有了不一样的认识。

核心洞察:从模糊感到系统性方法

先聊聊视频开头提到的学习经验问题,为什么学霸的学习经验往往都没有用

这可能是因为他们自己都不清楚自己做对了哪些事,可能课前预习或者看剧学英语也有用,但那并不是学习的本质。就好像在说一个成绩优秀的人每天都会吃一个苹果,并不是说吃苹果就会提高成绩,而是人家本来就优秀,和吃什么水果没有关系。

在读完两本书后,我能想到的改进方法是要执行可量化的学习流程,通过指标来评估学习情况,比方说数学的几何模块每个部分的准确率是多少,有没有达到目标,而不仅仅是掌握得一般这种模糊表达。因为只有定量得了解自己的学习情况,才能对薄弱点进行优化。

我的学习流程三阶段

我会把学习流程分为三个阶段:准备阶段,学习阶段和复盘阶段

1. 准备阶段:制定目标,拆解任务

这个阶段的核心是明确方向并规划路径

  • 总目标:比方说考试总分要考多少。
  • 核心目标:之后再细分到每门科目考多少分。
  • 不同阶段的任务
    • 基础阶段:任务主要是整体过一下知识点,不需要花太多时间去死磕压轴题。
    • 强化阶段:要注重不同章节间的联系,挑选些合适的练习题训练。
    • 冲刺阶段:则需要以真题为主了。