Python、C++、Linux知识总结

2019.7.30

Linux

进程和线程

1. 守护进程:
在系统后台运行,不受终端控制的进程。
系统启动就存在的, 不予任何终端关联的, 用于处理一些系统级别任务的特殊进程。
查看守护进程: ps -axj

普通进程,可以变成守护进程。

  1. join操作, 多线程, 相关知识点联系整理
    https://www.cnblogs.com/cnkai/p/7504980.html (多线程和join)
    1)当一个进程启动,默认产生一个主线程。 设置多线程时,主线程会创建多个子线程,setDaemon(False)时,主线程执行完自己任务,就退出了。子线程继续执行自己的任务,直到任务结束。
    2)setDaemon(True), 设置子线程为守护线程,主线程一旦结束,全部线程都被终止执行,被迫终止。
    3)join,为了线程同步,主线程任务结束后,进入阻塞状态,等待其他子线程执行结束,主线程才终止。

https://blog.csdn.net/qq_25934401/article/details/81532276 (linux面试总结)

https://www.cnblogs.com/hystj/p/8552757.html

python多线程:

start(). 线程准备就绪,等待CPU调度。
setDaemon(True): 设置为(主线程的)守护线程(主线程结束后,子线程自动结束)。
join(), 逐个执行每个线程,执行完毕后,继续往下执行。
run(), 线程被CPU调度后,自动执行run里的方法。

time.sleep(), 线程暂时挂起。
多线程,需要独占某一资源时,把它锁住,使用互斥锁。
https://www.cnblogs.com/whatisfantasy/p/6440585.html

多进程

Pipe, Queue
进程之间,不共享数据。
每个进程都是由父进程提供的,每启动一个子进程就是从父进程克隆一份数据。
进程同步: 数据输出的时候,保证不同进程的输出内容,在同一屏幕上正常显示,防止乱序。
进程池
进程启动开销很大,多进程会消耗大量内存空间。 因此,使用进程池,
apply(): 同步执行(串行)
apply_async(异步执行, 并行)
erminate(), 立刻关闭进程池
join(), 主进程等待所有子进程执行完毕。
close(), 等待所有进程结束,关闭进程池。

文本处理三剑客

1. awk(处理文本文件的语言,强大的文本分析工具)
https://blog.csdn.net/jin970505/article/details/79056457 (awk详细介绍)

https://blog.csdn.net/weixin_42255666/article/details/81302747#uniq (linux文本常用指令)

2. sed(Stream EDitor, 行编辑器, 流编辑器, 便捷的查看和修改文件。)
一次处理一行内容,处理时,把当前处理的行存储在临时缓冲区,处理完成后把缓冲区的内容输出到屏幕。然后一行行的处理,直到文件末尾。

3. grep(global search, Regular Expression, Print out the line, 全局文本搜索匹配工具)
根据指定模式,对目标文本进行匹配检查,并打印到屏幕上。
^ 匹配开头, $匹配结尾,
-i 忽略大小写, -v 只显示不被匹配到的行, -o, 只显示匹配到的行, -w 匹配整个单词。

wc (对单词总数、行总数、字节总数和字符总数,进行统计)
sort(整理过的文本,显示在屏幕上, 不改变原文件)
uniq (输入中,删除前后相接的重复的行) 常常和sort一起使用。

2019.7.11

C++

C++是一种编译型的、静态类型的(编译时即知道数据类型错误)、通用的、大小写敏感的编程语言, C++支持过程化编程、面向对象编程(封装、继承、多态)、泛型编程(概念、模型化、强化)(C++的两种抽象方法)。

泛型编程的实现:函数模板、类模板,STL是泛型编程思想的具体实现。
STL以**迭代器(Iterators)容器(Containers)**为基础,是一种泛型算法库,容器用来存放操作的东西迭代器是STL的核心,是泛型指针,指向其他对象的对象,迭代器用来遍历对象区间。

C语言最底层,可以和硬件交互,所以是最高级的语言, C++ 融合了高级语言和低级语言的特点, 扩充完善了C语言, 相当于是C语言的一个超集,任何合法的C程序都是合法的C++程序。 C++ > C

C++标准库:
标准C++由三个重要部分组成: 核心语言(提供所有构件快、数据类型、变量、常量等)、 C++标准库(提供大量操作文件、字符串等方法)、标准模板库(STL, 提供大量操作数据机构的方法)

ANSI标准: 编写的C++代码,在任何机器平台上都能编译通过。

C++ 变量声明: extern,(向编译器保证以给定的类型和名称存在,编译时有意义。 当使用多个文件时,只在其中一个文件中定义变量时,使用变量声明; 定义变量的文件在程序链接时使用)
变量可以声明多次,但是定义只能一次。
函数声明,只提供一个函数名。 函数的定义可以在任何地方进行。

全局变量和局部变量: 局部变量里面,局部变量会覆盖全局变量。
C++ 定义常量的方式:1)#define, 2)const

C++指针:
&A, 访问变量A的地址
指针:是一个变量,值为另一个变量的地址。

C++引用
引用只是换个名字,实际上是同一个东西,占用同一个内存。
引用被初始化后,就不能在改变了。
引用在创建时必须初始化,引用不能为空。

引用变量是一个别名,是某个已存在变量的另一个名字。
不存在空引用,引用必须连接到一块合法的内存中。
一旦引用被初始化为一个对象,就不能被指向到另一个对象,指针可以随意指向另一个对象。
引用必须在创建时,被初始化; 指针可以在任何时候被初始化。
int i = 17;
int& r = i; &叫做引用, 为i声明的引用变量。(r是一个初始化为i的整型引用)
double& s = d; s是一个初始化为d的double型引用。
引用在函数中,
1)引用作为形参传递,可以改变实际的交换值;
2)引用作为返回值,C++函数可以返回一个引用,实质返回一个指向返回值的隐藏指针。

虚函数

实现多态机制,必须的。 泛型技术,用不变的代码,实现多种可变的方式
虚函数, 是基类中希望重载的函数,虚函数必须重载,一般调用虚函数,调用的是继承类的版本。

用父类的指针指向其子类的实例。 用父类指针,调用实际子类的成员函数。
https://blog.csdn.net/hit_shaoqi/article/details/79414687

struct和class

访问权限不一样,
struct的成员默认是public,class默认是private。

Python

(1)python对象的三个基本要素:id(身份标识)、 type(数据类型)、 value(值)
语法:
is 和 ‘== ’的区别
‘==‘比较的是数值value,is 比较的是id(身份标识)

(2)python中的迭代器、 生成器、 装饰器
迭代器:是一个抽象概念,对于容器string、list、dict、tuple等等,像for循环一样进行遍历, iter()、 next()两个方法, iter()返回迭代器对象,next()指向下一个。

生成器: 创建迭代器的简单而强大的工具,生成器能做迭代器能做的所有事情, 生成器简洁高效,节省大量内存。 返回数据是使用yield。 next()调用时,生成器返回它脱离的位置,记忆语句最后一次执行的位置和所有的数据值。
大数据文件读取:使用迭代器 for line in file 和生成器 generator。

yield: 生成器,节约系统资源,避免不必要的内存占用,
yield可以算是一个return, 同时也是个生成器的一部分。 带yield的函数是一个迭代器
next(func), 调用next, 函数func正式开始执行,从上一次执行的地方。

(3)GIL(Global Interpreter Lock) 全局解释锁,并不是真的多线程
python底层的设计,保证同一时刻只有一个线程在执行。(python代码的执行由python虚拟机控制),不停地在切换线程,使表面上看起来像是多线程。。。。
range, yield, zip

(4)Linux指令:
find 和 grep的区别:
find:在特定目录下搜索符合要求的文件,就相当于搜索功能,搜索文件的。
grep:文本搜索工具,搜索文本内容的。

(5)python类,实现公有私有。
python属性,默认是公有的。

‘’__ init __“”, 相当于构造函数,创建对象时自动执行的, self实际上就是一个对象(当前创造的类的对象),
“__name”, 两个下划线开头,这个方法或变量,就是私有。类的外部不能被使用。

(6)深拷贝和浅拷贝
浅拷贝:仅仅只是地址指向,不开辟新空间。 改变原始对象的值,同时也会影响拷贝对象的值。
深拷贝:deepcopy,原始对象和拷贝对象的所有
元素地址都没有相同
的了。

python:

  1. 对象直接赋值,属于浅拷贝; 传递了引用。
    改变一个的值,另一个也会直接改变。

  2. copy(), 也是浅拷贝。

  3. 深拷贝, copy.deepcopy(), 包含对象里面的自对象的拷贝,原始对象改变,不会造成新对象的改变。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值