找工作笔记

操作系统

进程与线程的区别

进程的定义:进程是程序的一次执行过程;
线程是轻量级的进程,他是一个基本的CPU执行单元,也是程序执行流的最小单元
区别:
1、进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位。
2、进程是拥有资源的基本单位,一般来说,线程几乎不拥有系统资源,但是可以访问其隶属的进程的的系统资源。
3、由于创建或者撤销进程,系统都要分配或者回收资源,如内存空间、I/O设备等,因此操作系统所付出的开销要远大于创建或撤销线程时的开销。
4、并发性:在引入线程的操作系统中,不仅进程之间可以并发执行,而且多个线程之间爷可以并发执行
5、进程的地址空间相互独立,同一进程的各线程间共享进程资源。

进程间的通信方式

共享内存

共享内存是最快的进程间通信方式
原因:相对于其他几种方式,共享内存直接在进程的虚拟地址空间进行操作,不再通过执行进入内核的系统调用来传递彼此的数据
VX中提供了两中共享内存的工具,双向链表和环形缓冲

信号量

信号量用于实现进程间的互斥与同步、而不是用于存储进程间的数据通信。
P、V操作

管道/消息队列

是消息的链接表,存放在内核中,用于任务间数据的传递机制

套接字

用于网络间的任务的通信

信号

用于处理异常的标志

多线程编程

C/C++

sizeof与strlen的区别:

strlen是一个函数,他用来计算指定的字符串的长度,但是不包含结束字符(NULL)字符,其原型如下:

size_t strlen(char const*str)
char sArr[] = "ILOVEC";
/*用strlen()求长度*/
printf("sArr的长度=%d\n", strlen(sArr));

上述代码的结果是6。
要特别注意的是:strlen的结构类型为size_t(无符号整型)

/*判断一*/
if(strlen(x)>= strlen(y))
{
}
/*判断二*/
if(strlen(x)- strlen(y)>= 0)
{
}

那么表达式2将永远为真,因此要格外注意。
sizeof
sizeof是一个单目运算符,他的对象可以是数组,指针,类型。
同时,对 sizeof 而言,因为缓冲区已经用已知字符串进行了初始化,其长度是固定的,所以 sizeof 在编译时计算缓冲区的长度。也正是由于在编译时计算,因此 sizeof 不能用来返回动态分配的内存空间的大小。

char sArr[] = "ILOVEC";
/*用sizeof求长度*/
printf("sArr的长度=%d\n", sizeof(sArr));

其结果为7.

C++中类成员的访问权限

首先,C++中的类的访问权限有PUBLIC、Protected、private,类内他们都可以进行访问。
2、在类的内部,只有通过对象能访问public属性的成员,private在类外可以通过友元函数访问,protected类型可以通过继承来访问。

C++中的class与struct的区别

class的默认继承权限和访问权限都是private;
struct的默认的访问权限是public;
另外,class可以定义模板类的形参

左值与右值的概念

左值一般能取地址
右值不能取地址,
左值可以被赋值,右值不可以,左值可变,右值不可变

程序执行过程

预处理:预处理系统的头文件
编译:翻译成汇编语言
汇编:翻译成机器语言指令,生成可重定位的目标文件
链接;将文件合并,生成可执行的目标文件。

虚函数与纯虚函数

含有纯虚函数的基类就是一个抽象类,他不能生成对象。

全局变量和局部变量在内存中的位置

1、栈:由编译器自动分配和释放,存放局部变量和函数参数
2、堆:程序员分配和释放,malloc/free;
3、自由存储区:new/delete
2,3可以合并理解
4、全局/静态存储区:存放全局变量以及静态变量。,归操作系统管理
5、常量存储区:存放常量字符串。

还有一个代码区,但是对程序员是透明的。
1、操作系统把程序load到内存
2、操作系统把内存分为四个区
3、操作系统找到main函数的入口
变量的本质是内存的编号,不是内存,写数据是往变量门牌号对应的写数据。

堆栈的理解

指针的本质在于指向数据的在那个区,如果在栈区,是会出现故障,指向堆区,理解指针的关键在于内存没有内存哪里来的指针,黑马视频15

//注意return不是吧内存块的地址64个字节给return出来,而是把内存块的首地址返回给tmp
char *getMEM2()
{
	char buf[64];
	strcpy(buf,"123456");
	return buf;
}
void main()
{
	char *tmp=NULL;
	tmp=getMEM2();
	上一步getmen2执行完了以后,buf变量由于在栈区,会释放掉,所以导致tem地址指向的内容的数据被释放掉了。
	printf("%s\n",tem);
}

new与malloc的区别

1、malloc与free为C中标准的库函数,new与delete为C++的操作运算符。
2、malloc需要手动的计算开辟空间的大小,new是由编译器自己计算。
3、malloc的返回值类型为VOID*,需要进行强制类型转换,而new直接返回定义的返回值类型。
4、malloc开辟内存空间失败返回NULL,而new抛出异常bac_alloc,可以使用异常机制判断。
5、malloc是在堆上分配内存的,而new不能说是堆上,他为自由存储区,可以在堆上,也可以在静态存储区。
6、malloc分配的内存不够用后,可以用realloc进行扩容或者缩小。
7、new可以自动调用类的构造和析构。delete
可以分配基本类型、数组、类
8、new可以初始化对象,malloc不会,free也不会条用析构函数

new可以分配对象
class test
{
public:
test(int _a)
{
	a=_a;
}
private:
 int a;
}
test *pT1=(test*)malloc(sizeof(test));
free(pT1);
test *p2=new test(10);
delete(p2)

sizeof与strlen的区别?求结构体的长度,字符串部分的概念。

结构体的长度计算

结构体某成员的地址偏移必须为该成员的整数倍,如果不是整数倍,则前面成员变量需要填充。

static关键字

在这里插入图片描述

全局变量和局部变量是否可以重名

答:能,局部会屏蔽全局。要用全局变量,需要使用 ":: " (域解析符)
局部变量可以与全局变量同名,在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。对于有些编译器而言,在同一个函数内可以定义多个同名的局部变量,比如在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。

define与typedef的区别:

#define a 10

#define maxsize 10
//有分号记得
typedef int ElemType;

const

c语言中的const是冒牌货,可以通过指针修改,C++不可以;

const int a=10;
int *p=NULL;
*p=(&a)
*p=20;
//在C中a值可以被修改,在C++中不可以
//C++对const做了加强,

c++对const建立了符号表,就是键值对,
c++中const可以分配内存,也可以不分配内存。
const分配内存的时机,编译器编译的时间。,提供类型检查和作用域检查。
#define是在预处理阶段,单纯的文本替换。
#undef卸载宏定义

引用与指针

1、指针是一个实体,引用时一个别名;
2、普通引用必须要初始化,函数参数除外,而指针可以指向NULL就好
3、引用初始化不可以改变,指针可以改变指向。
4、sizeof指针求得是指针本身大小,sizeof引用所指向对象的大小
5、引用的本质就是指针常量,指向不可以改变,值可以改变。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值