- 博客(49)
- 资源 (6)
- 问答 (2)
- 收藏
- 关注
原创 温故而知新
CPU ------------- 如何提高CPU利用率多道程序设计编写监控程序,当程序无须使用CPU时,监控程序就把另外的正在等待CPU的程序启动。分时系统程序运行模式变成了一种协作模式,即每个程序运行了一段时间以后都主动让出CPU给其他程序,使得每个程序都有机会运行一段时间多任务系统将程序任务抽象为进程,所有的应用程序都以进程的方式运行,每个进程都有自己独立的地址空间,进程之间的地址空间相互隔离。CPU由系统进行分配,每个进程根据进程优先级的高低都有机会得到CPU。采用抢占式策略
2021-09-27 21:30:10 186
原创 死锁
死锁当两个进程独占性的访问一个资源,并且彼此等待对方资源的释放,这将会导致两个进程都被阻塞,并且两个进程都不会释放各自占用的资源,这种情况就是死锁(dead lock)。资源可抢占资源: 可以从拥有它的进程中抢占而不会造成其他影响。内存,cpu就是可抢占的资源。不可抢占资源:指的是除非引起错误或者异常,否则进程无法抢占指定资源。比如光盘。死锁的产生与不可抢占资源有关,对于可抢占资源由于操作系统的资源再分配使得进程之前不会产生死锁。死锁如果一组进程中的每个进程都在等待一个事件,而这个事件只.
2020-12-12 23:16:14 254
原创 网络编程学习笔记2 ------ TCP/UDP
网络编程学习笔记2 ------ TCP/UDP1. TCP TCP协议全称是传输控制协议是一种面向连接的、可靠的、基于字节流的传输层通信协议,由 IETF 的RFC 793定义。TCP 是面向连接的、可靠的流协议。流就是指不间断的数据结构,你可以把它想象成排水管中的水流。1.1 TCP连接: TCP三次握手的Socket过程服务器调用socket()、bind()、**listen()完成初始化后,调用accept()**阻塞等待;客户端Socket对象调用connect()向服务器发送了
2020-12-04 23:08:25 168
原创 网络编程学习笔记3 ------ TCP基础
网络编程学习笔记3 ------ TCP基础1. 套接字概念 Socket在TCP/IP协议中,“IP地址+TCP或UDP端口号”唯一标识网络通讯中的一个进程。“IP地址+TCP/UDP端口号”就对应一个Socket。欲建立连接的两个进程各自有一个socket来标识。那么这两个Socket组成的Socket pair就唯一标识一个连接。因此可以用Socket来描述两个网络连接的一对一关系。在网络通信中,套接字一定是成对出现的,一端的发送缓冲区对应对端的接收缓冲区,使用的是同一个文件描述符。IP地址
2020-12-04 23:05:53 227
原创 网络编程学习笔记1 ------ TCP/IP
网络编程学习笔记1 ------ TCP/IP1. TCP/IP TCP/IP 协议栈是一系列网络协议的总和,是构成网络通信的核心骨架,它定义了电子设备如何连入因特网,以及数据如何在它们之间进行传输。TCP/IP 协议采用4层结构,分别是应用层、传输层、网络层和链路层,每一层都呼叫它的下一层所提供的协议来完成自己的需求。TCP/IP协议基本框架: 当通过http发起一个请求时,应用层、传输层、网络层和链路层的相关协议依次对该请求进行包装并携带对应的首部,最终在链路层生成以太网数据包,以太网数据
2020-12-02 23:36:16 204 3
原创 默认析构函数 == 空函数?
C++默认析构函数没有任何特殊的功能 它就是一个空函数???如果是初级的C++入门书籍会告诉你,默认的构造和析构函数都是空函数,他不做任何操作。但实际情况是,严格上来说这句话是错误的。应该分情况讨论如下:一个类是Plain Old Data类型的,即该类的构造函数和析构函数都是平凡的(trivial的),若该类的默认构造/析构函数存在,则他们是空函数。如果一个类不满足POD条件,即该类是非平凡的(non-trivial的),则默认析构函数不是空函数,它将是类中非平凡的类成员变量的析构函数的合成函数
2020-12-02 18:15:37 1757
原创 C++学习笔记14 bind原理
C++学习笔记14bind的基本原理bind的思想实际上是一种延迟计算的思想,将可调用对象保存起来,然后在需要的时候再调用。而且这种绑定是非常灵活的,不论是普通函数、函数对象、还是成员函数都可以绑定,而且其参数可以支持占位符,比如你可以这样绑定一个二元函数auto f = bind(&func, _1, _2);,调用的时候通过f(1,2)实现调用。要实现一个bind需要解决两个问题,第一个是保存可调用对象及其形参,第二个是如何实现调用。下面来分析如何解决这两个问题。保存可调用对象实现bi
2020-12-02 18:04:43 1339
原创 C++学习笔记13 类型转换
C++学习笔记131. const_cast (expr)const_cast 运算符用于修改类型的 const / volatile 属性。除了 const 或 volatile 属性之外,目标类型必须与源类型相同。这种类型的转换主要是用来操作所传对象的 const 属性,可以加上 const 属性,也可以去掉 const 属性。class A { // … }; void Function() { const A *pConstObj = new A; A *
2020-12-02 17:54:28 219 1
原创 C++学习笔记12 多重继承
C++学习笔记121.多重继承多重继承(multiple inheritance)是指从多个直接基类中产生派生类的能力。class D{......};class B: public D{......};class A: public D{......};class C: public B, public A{.....};上面这段代码是有问题的,C继承了A和B,因为A,B都继承D。这使得C从A和B中继承了相同的构造函数。要解决上面问题就要用虚拟继承格式格式:class 类名: virt
2020-12-02 17:53:24 166
原创 C++学习笔记11 命名空间
C++学习笔记111.定义命名空间命名空间的定义使用关键字 namespace,后跟命名空间的名称,如下所示:namespace namespace_name { // 代码声明}为了调用带有命名空间的函数或变量,需要在前面加上命名空间的名称,如下所示:name::code; // code 可以是变量或函数让我们来看看命名空间如何为变量或函数等实体定义范围:实例#include <iostream>using namespace std; // 第一个命名空
2020-12-02 17:39:54 175
原创 C++学习笔记10 异常
C++学习笔记101.异常处理异常是程序在执行期间产生的问题。C++ 异常是指在程序运行时发生的特殊情况,比如尝试除以零的操作。异常提供了一种转移程序控制权的方式。C++ 异常处理涉及到三个关键字:try、catch、throw。throw: 当问题出现时,程序会抛出一个异常。这是通过使用 throw 关键字来完成的。catch: 在您想要处理问题的地方,通过异常处理程序捕获异常。catch 关键字用于捕获异常。try: try 块中的代码标识将被激活的特定异常。它后面通常跟着一个或多个 ca
2020-12-02 17:38:29 404
原创 C++学习笔记9 模板
C++学习笔记91. 模板编译当编译器遇到一个模板定义时,它并不生成代码。只有当我们实例化出模板的一个特定版本时,编译器才会生成代码。普通的函数,函数的声明和定义我们可以放在不同文件中。对于模板则不同,为了生成一个实例化版本,编译器需要掌握函数模板或类模板成员函数的定义。因此,模板的头文件通常既有包括声明也包括定义。2. 模板函数template <typename T>int compare(const T &v1, const T &v2){ if(v1
2020-12-02 17:17:10 183
原创 C++学习笔记8 深拷贝和浅拷贝
C++学习笔记81. 深拷贝和浅拷贝对于带有指针的类我们才需要深拷贝和浅拷贝这个问题。/** @time: 2020/6/1* @author: mmyd*/#include<iostream>#include<cstring>using namespace std;class Str{private: char *ptr;public: Str(const char* p = 0){ if(p){
2020-12-02 17:16:02 175
原创 C++学习笔记7 多态与继承
C++学习笔记71. 防止继承发生class NoDerived final { }; //NoDerived不能作为基类class Base { }; //Last是final的,我们不能继承Lastclass Last final : Base { }; //Last不能作为基类class Bad : NoDerived { }; //错误: NoDerived是final的class Bad2 : Last { }; //错误: Last是final的2. 继承
2020-12-02 17:13:53 137
原创 C++学习笔记6 函数对象
C++学习笔记6对于一个运算符函数来说,它或者是类的成员,或者至少含有一个类类型的参数。//错误: 不能为int重定义内置的运算符int operator+(int, int);1. lambda是函数对象sort(words.begin(), words.end(), [](const string &a, const string &b){ return a.size() < b.size();});class ShorterString{public:
2020-12-01 23:29:27 101
原创 C++学习笔记5 拷贝复制相关
C++学习笔记51. 拷贝构造函数class Com{public: Com(); //默认构造函数 Com(const Com& ); //拷贝构造函数};拷贝构造函数的参数必须是引用类型。为什么如此呢?加入不是引用类型,当我们拷贝初始化的时候,需要将实参拷贝到形参,但为了拷贝实参,我们又必须调用拷贝构造函数,如此循环。string dots(10, '.'); //直接初始化string s(dots); //直接初始化string s2 =
2020-12-01 23:28:26 264
原创 C++学习笔记4 lambda && bind && 智能指针
C++学习笔记41. lambda表达式[captrue list](parameter list) -> return type {function body}我们可以忽略参数列表和返回类型,但必须永远包含捕获列表和函数体。默认情况下,如果一个lambda体包含return之外的任何语句,则编译器假定此lambda返回voidauto f = [] {return 42; };auto f = [i](int t) {cout<<i+t<<endl; };//指
2020-12-01 22:01:20 429
原创 C++学习笔记3 友元
C++学习笔记30.概述友元提供了一种 普通函数或者类成员函数 访问另一个类中的私有或保护成员 的机制。也就是说有两种形式的友元:(1)友元函数:普通函数对一个访问某个类中的私有或保护成员。(2)友元类:类A中的成员函数访问类B中的私有或保护成员优点:提高了程序的运行效率。缺点:破坏了类的封装性和数据的透明性。总结: - 能访问私有成员 - 破坏封装性 - 友元关系不可传递 - 友元关系的单向性 - 友元声明的形式及数量不受限制1.友元函数在类声明的任何区域中声明,而定义则在类的外部。f
2020-12-01 21:51:56 371
原创 C++学习笔记2
C++学习笔记21.Static知识点static是一个修饰符,可以修饰变量,函数。静态变量: 函数中的变量,类对象静态类的成员: 类中的变量和类中的函数静态变量对于static修饰的变量,其生命周期是整个程序的生命周期。类中的变量类中的静态变量,所有类对象共享, 使用A::a这样在类外进行初始化,构造函数不能进行初始化类中的函数类中的静态函数,我们一般使用A::fun这样进行调用,当然我们也可以使用类对象.这样调用。静态函数所有对象实例共享,不能访问非静态数据和函数。2.
2020-12-01 21:41:39 218
原创 C++学习笔记1
C++学习笔记11.变量声明和定义的关系为了运行把程序拆分成多个逻辑部分来编写,c++语言支持分离式编译(separate compilation)机制,该机制允许将程序分割为多个文件,每个文件可被独立编译。为了支持这种分离式编译,c++支持将声明和定义区分开来。声明:规定了变量的类型和名字,在这一点上定义与之相同。声明(declaration)使得名字为程序所知,一个文件如果想使用别处定义的名字必须包含对那个名字的声明。定义:定义还申请了存储空间,也可能会为变量赋一个初始值。定义(definiti
2020-12-01 21:30:48 131
原创 Linux进程与线程
目录进程管理PCB处理器管理级别用户空间进程状态fork原理exec原理僵死进程Zombie和孤儿进程进程间通信pipe通道fifo有名管道mmap/munmap进程管理PCB 进程控制块, 其结构大致如下图。我们的PCB中存在一个files struct, 对应就是一个int数组,数组的每个值都是一个文件描述符。当我们的程序fopen打开一个文件时,PCB会在当前files struct的数组结构中找一个最小且未被使用的描述符作为返回...
2020-11-30 22:22:00 415
原创 文件系统
目录文件系统布局引导块超级块空闲空间块inode文件系统实现连续分配链表分配inode文件系统存储在磁盘上。大部分的磁盘能够划分出一到多个分区,叫做磁盘分区或者是磁盘分片。每个分区都有独立的文件系统,每块分区的文件系统可以不同。磁盘的0号分区称为主引导记录(Master Boot Record, MBR),用来引导计算机。在MBR的结尾是分区表(partition table)。每个分区表给出每个分区由开始到结束的地址。Linux文件系统-----》Lin...
2020-11-30 22:21:26 182
原创 Linux文件系统
ext2文件系统的结构我们知道,一个磁盘可以划分成多个分区,每个分区必须先用格式化工具(例如某种mkfs命令)格式化成某种格式的文件系统,然后才能存储文件,格式化的过程会在磁盘上写一些管理存储布局的信息。这里是一个磁盘分区格式化成ext2文件系统后的存储布局。对于文件系统来说,最小的单位为块,block,一般为4096Bytes,每个块是8个磁盘扇区,一个磁盘扇区为512Bytes。ext2文件系统将磁盘分区按照块组的方式组织起来,每个块组的大小长度,于最小的单位block的大小有关。...
2020-11-30 22:20:45 229
原创 Linux内存管理
目录虚拟地址空间内存管理虚拟地址空间操作系统工作时,会给每个进程分配4G的虚拟地址空间。其中0~3G的空间从下到上依次是代码段,堆,栈。3G~4G是内核空间。假如我们系统的物理内存为2G,a.out和b.out代码段是存储在磁盘空间上,然后我们的物理内存将a.out,b.out加载到内存中,同时为进程虚拟地址空间虚拟一个代码片段地址,但实际的代码片段是存储在物理内存上的。操作系统做的只是将物理内存的代码片段地址 与 进程虚拟地址空间的代码片段虚拟地址做一个映射。。同样每个进程的虚
2020-11-30 22:20:04 110
原创 内存管理
目录无存储抽象存储抽象地址空间交换技术空闲内存管理位图管理:链表管理:虚拟内存MMU映射页表项的结构加速分页过程:转换检测缓冲区(Translation Lookaside Buffer, TLB)软件TLB管理如果虚拟地址空间足够大,那么页表也会足够大页面置换算法最优页面置换算法最近未使用页面置换算法先进先出页面置换算法第二次机会页面置换算法时钟页面置换算法最近最少使用页面置换算法用软件模拟LRU工作集页...
2020-11-30 17:49:39 178
原创 进程和线程
进程和线程一个进程是某种类型的一个活动,它有程序,输入,输出以及状态。单个处理器可以被若干进程共享,它使用某种调度算法决定何时停止一个进程的工作,并转而为另一个进程提供服务。在任何多到程序设计系统中,CPU由一个进程快速切换至另一个进程,使得每个进程各运行几十或几百毫秒。由于CPU在各个进程之间的快速切换,因此每个进程的执行速度是不确定的,进程的执行顺序也是不确定的。对于单处理器系统,由于在一个CPU上的快速切换,因此每个瞬时,只有一个进程在运行,这种情况就是所说的伪并行。...
2020-11-30 10:46:53 174
转载 CPU上下文切换
转载,文章原址https://zhuanlan.zhihu.com/p/52845869目录什么是 CPU 上下文什么是 CPU 上下文切换CPU 上下文切换的类型进程上下文切换系统调用进程上下文切换跟系统调用又有什么区别呢进程上下文切换潜在的性能问题发生进程上下文切换的场景线程上下文切换发生线程上下文切换的场景中断上下文切换解释 对于中断上下文切换 不保存用户态数据问题:什么是 CPU 上下文CPU 寄存器和程序计数器就是 CPU 上下文..
2020-11-30 10:44:19 124
原创 DCGAN 生成二次元头像
8. DCGAN 2019/11/10GAN, 又称生成对抗网络, 也是 Generative Adversarial Nets 的简称我们知道自然界的生物无时无刻都不在相互对抗进化,生物在往不被天敌发现的方向进化, 而天敌则是对抗生物的进化去更容易发现生物。 二者就是在做一个博弈。GAN网络和生物对抗进化一样, 也是一个博弈的过程。 我们通过网络的Generator...
2019-11-17 15:39:58 1294 2
原创 RMSprob & Adam
RMSprob (root mean square prob)Adam:adam 结合了Momentum和RMSprop两种算法:# GRADED FUNCTION: update_parameters_with_adamdef update_parameters_with_adam(parameters, grads, v, s, t, learning_rate...
2019-11-14 11:37:46 600
原创 动量梯度下降法: Gradient Descent With Momentum
动量梯度下降法: Gradient Descent With Momentum1.指数加权移动平均:2.指数加权平均的偏差修正:如图所示:紫色图为这些点集的加权平均,但很显然在刚开始的时候,加权平均不能很好估测数据。所以我们需要通过偏差修正加权平均。3.动量梯度下降法:当我们使用梯度下降算法进行训练的时候,我们的训练过程会出现左图所示, 慢慢摆...
2019-11-14 11:35:04 1150
原创 梯度下降
梯度下降Mini-Batch Gradient Descent1.打乱数据。 将输入的数据x和结果y,进行同步的随机打乱。2.分区。 将打乱后的数据进行分区,每个含有mini_batch_size大小个数据。3.按照分区后的数据,进行梯度下降算法。# GRADED FUNCTION: random_mini_batchesdef random...
2019-11-14 11:31:03 104
原创 梯度消失/梯度爆炸
训练神经网络,尤其是深度神经网络所面临的一个问题就是梯度消失和梯度爆炸,也就是当训练神经网络的时候,导数或者坡度有时会变得非常大,或者非常小,甚至于以指数方式变大或者变小,这加大了训练的难度。神经网络的权重初始化:...
2019-11-14 11:25:38 154
原创 Dropout 正则化 随机失活
在每次迭代中,随机失活(1-keep_prob)%的神经元,使得keep_prob%的神经元保持正常运转。这些失活的神经元将不会接下来的前向传播和反向传播传递数据。当关闭一些神经元时,你实际上修改了你的模型。随机失活背后的思想是,在每次迭代中,你训练一个只使用一个子集神经元的不同模型。当随机失活时,神经元将会对另一个特定神经元的激活就变得不那么敏感,因为另一个神经元随时可能失活。...
2019-11-14 11:23:21 302
原创 机器学习之神经网络
5.神经网络对于单个人工神经网络ANN(Artificial Neural Network)来说,他们往往都是通过多层神经元结构连接组成,并且神经网络中的每层神经元网络都拥有输入和输出,每层都是由多个神经元结构组成。一般多层人工神经网络由输入层、输出层、和隐含层组成。如下图所示,从左开始到右结束,第一层圆圈为输入层,输入向量假设为[x1,x2,x3];第二层圆圈和第三层圆圈为带有4...
2019-11-14 11:09:20 123
原创 1.激活函数
SigmoidTanh:Rectified Linera Unit (ReLU)Leaky Linear Unit (Leaky ReLu)
2019-11-14 11:06:59 88
原创 机器学习之神经网络
神经网络对于单个人工神经网络ANN(Artificial Neural Network)来说,他们往往都是通过多层神经元结构连接组成,并且神经网络中的每层神经元网络都拥有输入和输出,每层都是由多个神经元结构组成。一般多层人工神经网络由输入层、输出层、和隐含层组成。如下图所示,从左开始到右结束,第一层圆圈为输入层,输入向量假设为[x1,x2,x3];第二层圆圈和第三层圆圈为带有4个神经元...
2019-09-05 21:09:37 182
原创 机器学习之误差反向传播算法
误差反向传播算法 我们知道神经网络是由大量的参数即权重构成,神经网络的学习过程则是这些参数的变化更新过程。误差反向传播算法就是用于更新这些参数的。这里我们假设激活函数为Sigmoid。Ps: 在吴恩达机器学习反向传播算法课程中,而不是:这是因为吴恩达中使用的损失函数为:因此:...
2019-09-05 21:06:33 1066
原创 机器学习之正则化
正则化可以用来改善或者减少过拟合问题处理过拟合问题有以下方法:1.丢弃一些不能帮助我们正确预测的特征2.正则化。保留所有的特征,但是减少参数大小过拟合问题:一般是因为拟合函数参数过多,含有过多高次项参数,使得拟合函数尽全力去拟合所有数据,从而造成过拟合,而对新数据的泛化能力弱。如下图:如图三所示,由于X^3, X^4高次项导致了过拟合的产生,当时,我们就能很好拟合数...
2019-09-04 20:35:28 117
原创 机器学习之逻辑回归
由于Logistic回归面对的是分类问题,其结果是离散的,因此我们使用Sigmoid函数进行拟合分类。if g > 0.5 Y = 1if g <= o.5 Y = 0在线性回归中我们使用了表示损失函数loss, 对应本文中的逻辑回归,我们的loss函数如下:但是该函数为一个非凸函数,其图像如下:对于非凸函...
2019-09-02 19:14:47 120
原创 机器学习之特征缩放
特征缩放使得梯度下降速度更快,迭代次数更少1.特征缩放: 将特征取值缩放到[-1, 1]2.均值归一化:x = (x - average) / (max - min)3.标准化: 量化的特征将服从标准正态分布 和分别对应特征的均值和标准差,量化后的特征值将分布在[-1, 1]区间4.Min-Max Scaling量化后的...
2019-09-02 19:11:26 474
MSER 线性时间最大稳定极值区Linear Time Maximally Stable Extremal Regions
2019-01-03
一种现实世界图像文本定位与识别方法
2019-01-03
在eclipse可以正常运行的爬虫程序 , 放在Android 中竟然出错
2017-06-13
各位大神,javafx怎么实现播放本地mp3呀
2016-10-30
TA创建的收藏夹 TA关注的收藏夹
TA关注的人