自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Nemo

主要是个人学习总结,如有错误还望指正。

  • 博客(71)
  • 收藏
  • 关注

原创 简单记录vue下单元测试及Mock数据

1. vue-cli 创建一个demo创建一个 demovue create demo在VUE-CLI 是有提供测试插件的,所以在构建项目时选择一个测试框架。 运行测试脚本 在package.json 中可以看到运行测试脚本命令npm run test:unit 执行后可以看到对 HelloWord组件测试通过2. 单测流程 一般我们写的单元测试是针对组件或是方法。方法 在src 下创建一个 ut...

2021-03-14 18:58:49 748

原创 理解Vue插槽

引言:在Vue开发中,我们多采用组件化开发。组件化开发最大特点就是对页面结构化划分,组件的复用。而在实际中,页面对组件的需求或许也稍有不同,那么就需要一种需求:为页面定制组件,解决的方式便是通过插槽。实例:<template id="myCpn"> <div class="wrapper"> <h1>自定义组件</h1> <h2>组件内容</h2> </div></templat

2020-06-15 19:03:49 435 2

原创 理解Vue生命周期函数

2020-06-09 15:25:51 196

原创 理解Vue中的MVVM

MVVM是前端视图层的开发思想,主要关注于视图层,是把每个页面分成了M(Model)、 V(View)、 VM(ViewModel)。Model层 数据层 保存的是每个页面单独的数据。 数据可能是固定的,但大多是来自服务器,从网络上获取而来的。 View层 视图层 用于向用户展示的页面UI。 前端开发中,通常是指DOM层。 ViewModel层 视图模型层 是view层和model层之间的调度者。 一方面实现了数据绑定,将Model的改变实时的反应到View

2020-06-09 14:43:05 342

转载 TCP和UDP

本篇转载于:http://blog.csdn.net/qingyixiaoxia微信号:qingyixiaoxia 【内容有所删减。。。】一 TCP和UDP[一] 传输层概览传输层基本特性:1.端到端传输:传输层协议部署于网络边缘的终端节点之上,为应用层提供端到端的数据传输服务。传输层提供的服务呈现为SOCKET接口,通过使用SOCKET接口应用层可以不用关心网...

2019-08-14 12:26:00 199

原创 代理模式

代理模式:为其他对象提供一种代理以控制对这个对象的访问。当今生活越来越方便,即使不出国门也能买到其他国家的商品,这多亏有海外代购。而代购就类似于我们这篇所要介绍的代理模式中的代理。结合实际生活我们可以理解代理模式:由于我们平时可能工作繁忙,可能想要买些海外商品,但是并没有时间让我们出去购物,这时我们就可以通过代购帮我们购买想要的东西。也就是说代购替我们出国购买。代理模式结构图Su...

2019-08-13 17:54:20 295

原创 观察者模式

观察者模式:定义对象与对象之间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并更新。 大家在高中时,每到自习课时都异常活跃:玩手机、聊天、打牌。。。。。然而每每到最活跃的时候,班主任老师就来了,然后收手机、收扑克牌、还要训斥一顿。 为了能让同学有好的自习体验,今天张三同学站了出来,主动帮我们盯梢,如果老师来了就私发条消息给其他同学。其他同...

2019-08-12 17:03:18 155

原创 工厂模式

工厂模式:主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。工厂模式可分为:简单工厂模式(Simple Factory); 工厂方法模式(Factory Method); 抽象工厂模式(Abstract Factory)。这三种模式从上到下逐步抽象,并更具有一般性。为了更加能体会工厂模式的意义,先举一个简单例子。通常我们在实现一个简单计...

2019-08-10 21:34:37 139

原创 单例模式

单例模式--保证一个类仅有一个实例,并提供一个访问他的全局访问点,该实例被程序所有模块共享。单例模式结构图特点通常我们可以让一个全局变量使得一个对象被访问,但不能防止被实例化多个对象。最好方法就是让类自身负责保存它的唯一实例,这个类可以保证没有其他实例可以被创建,并且提供一个访问该实例的方法。 单例模式下,有Singleton类封装其唯一实例,这样它可以严格控制客户端怎样访问以及何...

2019-08-10 17:08:02 107

原创 type_traits

概述type_traits提供了丰富的编译期间计算、查询、判断、转换和选择的帮助类,其被定义在#include <type_traits>下。作用:增强了泛型编程能力; 增强程序的弹性,使得在编译期间就可以做到优化、改进甚至排错,提高代码质量; 它所提供的选择功能一定程度上可以消除冗长的if-else或switch-case语句,降低程序的圈复杂度,提高代码的可...

2019-07-29 18:31:00 2644

原创 右值引用

本文是对《深入理解C++11》和《深入应用C++11:代码优化与工程级应用》中右值引用部分的总结。概述在C++11中增加了新的类型---右值引用(T&&)。通过它可以实现移动语义和完美转发。作用:主要是避免无谓的复制,节省运算存储资源,提高程序性能。 能够更简洁明确地定义泛型函数。左值&右值概念:左值:能对表达式取地址、或具名对象...

2019-07-28 15:14:49 693

原创 static关键字

在C++中static关键字可以用来修饰变量、函数、代码块。被static修饰的数据都被存放在静态存储区,整个程序运行期间一直存在。 修饰全局变量 定义方式:在全局变量前加static关键字,全局变量就定义为全局静态变量。初始化:未经初始化的全局静态变量会被自动初始化为0.特点:- 被static修饰的全局变量,其链接属性由默认的external 变为 internal;...

2019-07-27 20:02:10 136

原创 堆区内存分配

通常我们在动态开辟内存时,会使用malloc函数在堆区开辟空间。#include <stdlib.h>void *malloc(size_t size);// 成功返回已开辟空间的地址,否则返回NULL堆区如图堆区在未初始化的数据区(.bss)之后的开始,用于程序员动态开辟释放的数据区。为了减少内存碎片、降低系统调用开销,系统会为堆区分配一大块内存,将堆区分为多个不...

2019-07-17 17:49:13 2516

原创 虚函数表结构

虚函数表所谓虚函数表就是存放着当前类中所有虚函数地址的表。在实例化一个具有虚函数的类时,这个表也被分配到这个实例对象的内存中,通过虚函数表可以指明所要调用的函数的位置。在C++编译器中虚函数表的地址存放在对象的最前面,这是为了即使多继承下也能快速获取到虚函数表。我们可以通过下示的代码简单看下虚函数表结构:class Base{public: virtual void A(){co...

2019-07-15 18:45:41 4846

原创 五种IO模型

IOIO:数据的读取或写入操作。通过完整的IO分两个阶段: 用户进程空间到内核空间的转换; 内核空间到设备空间的转换。因为在Linux系统下,进程无法直接操作IO设备,必须通过内核协助。除此之外内核为每个IO设备提供缓冲区,以提高IO效率。任何的IO都分为两个步骤:等和数据拷贝。即等待用户进程请求数据到达内核空间,从内核空间将数据拷贝到用户进程空间。五种IO模型: 同步IO:...

2019-07-14 17:19:39 174

原创 Qt-QMainWindow_04

QMainWindow是一个为用户提供主窗口程序的类,包含:一个菜单栏(menu bar)、多个工具栏(tool bar)、多个铆接部件(dock widgets)、一个状态栏(status bar)、一个中心部件(central widget)。菜单栏相关设计: // 包含菜单栏 只能有一个 QMenuBar* bar = menuBar(); // 将菜单栏放...

2019-07-13 16:10:44 138

原创 迭代器

迭代器概述迭代器是一种抽象的设计概念,在设计模式中iterator模式被定义为:提供一种方法,可以按序访问某一聚合物(容器)所含元素,且不暴露该聚合物的内部表达方式。在STL中,迭代器又起着将容器与算法联合到一起的作用。#include <iostream>#include <vector>#include <list>#include &l...

2019-07-11 18:43:10 4817

原创 STL --- 空间配置器

引言:由于整个STL的操作对象都存放在容器之内,而容器一定需要配置空间来放置资料,所以引入了空间配置器。思考:为什么要有空间配置器,而不直接在使用时申请空间? 1. 内存空间碎片化问题 一般在申请空间时,系统将分配足够使用的一段连续空间,由于频繁分配、释放尤其是小块内存,就更容易造成空间碎片的问题(危害:即使内存空间刚好满足一个请求,但由于内存空间分散...

2019-07-07 21:30:55 168

原创 Qt-Lambda表达式_03

Lambda表达式 C++11中的Lambda表达式用于定义并创建匿名的函数对象,以简化编程工作Lambda表达式基本构成:[capture](parameters)mutable->return-type{ statement}[函数对象参数](操作符重载函数参数)mutable->返回值(函数体){函数实现体} ...

2019-06-30 22:03:15 1326

原创 Qt-信号和槽_02

理解信号和槽 我们平时所见的GUI界面中,可以通过操作窗口部件来触发对应事件。这些部件都是有一个回调函数用于响应它们所能触发的事件,回调函数通常是一个指向某一函数的指针。在Qt中,是通过信号与槽来实现,信号就相当于执行某一操作发出的指令,槽就是处理这条指令,通过此方式可以使得互不相关的两个对象建立联系。 槽本质是类的成员函数,其参数可以是任意类型的,它也可以是虚函数...

2019-06-29 23:10:48 195

原创 Qt学习总结_01

Qt是一个跨平台的C++图形用户界面引用程序框架。它是完全面向对象,很容易扩展,允许组件编程。1. 历史 1.1 1991 奇趣科技开发2. 优点2.1 跨平台2.2 效率高,能够快速构建应用程序2.3 接口简单,容易学习2.4 一定程度上简化了内存回收机制。[需要加到children表中]2.5 可进行嵌入式开发2.6 市场份额好3....

2019-06-28 22:12:24 298

原创 HTTP相关总结

HTTP概述: HTTP(Hyper Text Transfer Protocol) 即超文本传输协议,是基于TCP协议之上的,用于从万维网(WWW.)服务器传输超文本到本地浏览器的传送协议。之所以说基于TCP协议,是因为每当浏览器需要从服务器获取网页数据时,都会发出一次Http请求 ,Http会通过TCP建立起一个到服务器的连接通道,当本次请求数据完毕后,Http会立即将TCP连接断...

2019-06-26 23:08:53 158

原创 可执行文件的装载

装载的方式静态装入静态装入:将程序运行所需的指令和数据全部装入内存中。动态装入 很多情况下所需要的内存数量大于物理内存的数量,这可以通过添加内存的方式解决,但是内存较为昂贵,所以就希望通过不增加内存的方式来解决。又根据程序局部性原理:程序运行时,在某一时间段只是执行一小部分数据,我们可以将常用数据部分留到内存,不常用的数据可以存放到磁盘,等需要执行时再拷贝到内存中。这就是动态装...

2019-06-25 20:01:04 320

原创 排序算法 --- 归并排序

归并排序是典型的分治思想(所谓分治即分而治之)的实现。具体实现就是将乱序的序列划分为两个子序列,再将子序列又分别向下划分,直到划分成最小单位(这一过程可以通过递归实现)。在不能划分时,将相邻的两个子序列进行比较,按序排列,将排好的序列向上返回,逐层地比较 -- - > 排序 - - - > 归并,直到最终序列有序。演示:我们随机生成一个乱序序列:每次可以...

2019-05-31 22:17:14 174

原创 实现序列式容器 ---- vector

概述: 在STL诸多容器中vector一定是使用率最高的了,它使用和数据结果上与array相类似,两者唯一差别在于:array是静态空间,而vector是可变空间。因此通常将vector看作可变数组。 由于vector方法较多,在主要此讨论实现vector中要注意的几个点: vector的迭代器: 对于vector而言维护的是一连续线性空间,所以不...

2019-05-30 23:27:29 145

原创 进程信号

目录 信号 信号产生 信号注册 信号阻塞(屏蔽) 信号处理 信号注销信号信号实质是软中断,用于通知进程发生某些事件。 信号作用:通知事件的发生,信号产生之后第一时间也不是直接处理,而是先存储下来,再处理信号。 信号生命周期:信号的产生 ---> 信号的注册 --->...

2019-05-30 00:21:08 240

原创 作业/进程调度算法

首先了解什么是调度?调度实质是一种资源分配,调度程序从内存中选择一个可执行的进程,为之分配CPU。调度的层次?作业从进入系统到后备队列,再从运行到结束退出系统为止,期间经过不同级别的调度:高级调度 高级调度又长程调度或作业调度。是将在外存上处于后备队列中的作业调入内存,为其创建进程、分配资源、放入就绪队列。(外存 ---> 内存)中级调度 ...

2019-05-25 16:51:34 733

原创 MySQL-数据类型

关于数据类型数值类型 1. 整数语法: 整型类型(显示宽度)可以用zerofill在宽度不足时用 0 填充:create table Test1(Id int(10) zerofill);说明:在MySQL中,整型可以指定是有符号的和无符号的,默认是有符号的。 可以通过UNSIGNED来说明某个字段是无符号的。 注意:尽量不使...

2019-05-23 21:57:32 142

原创 String类的实现

C++中为我们提供了字符串类型(string),使得我们在处理字符串时非常方便。在此将实现我们常用的方法。 头文件:#pragma once#define _CRT_SECURE_NO_WARNINGS#include <iostream>#include <cstring>#include <assert.h>usi...

2019-05-21 01:06:00 288

原创 进程间通信:消息队列

消息队列 消息队列特点:是一个全双工通信,可读可写; 具有入口和出口,消息的传输是先入先出的,是以队列形式存储;(与管道相似) 发送的是一个带有类型的数据块。<创建在内核中>(区别于管道字节流传输) 每个消息的最大长度是有上限的(MSGMAX), 每个消息队列的总的字节数是有上限的(MSGMNB), 系统上消息队列的总数也有上限(MSGMNI)。 ...

2019-05-18 23:03:36 467

原创 进程间通信:共享内存

共享内存:特点: 最快的IPC。 原理: 因为共享内存是直接将一块物理内存映射到虚拟地址空间中,不同的进程都能访问共享区的内存区域,因此进行数据传输时候相较于其他通信方式,少了两步用户态与内核态数据拷贝过程,因此共享内存是最快通信方式。读写特性:进程对共享内存大都是读操作,很少是写操作; 进程在执行写操作时,其他程序既不能读也不能写。(独占式的写)...

2019-05-17 22:31:51 351

原创 进程间通信:管道

进程间通信(InterProcessComnuication) 进程间通信:不同进程间传播交换信息。进程间为什么要沟通交流?因为进程的独立性,而在实际工作中往往会出现在一个系统中好几个进程协同工作,那么这进程就需要交流沟通完成协作。也因为进程的独立性,因此进程间的沟通交流将变得困难,复杂。因此就产生了各种进程间通信方式,来解决如何进行进程间通信的问题。进程间通信的目的:...

2019-05-16 19:22:23 394

原创 进程控制

进程创建 以父进程为模板创建子进程,复制父进程的pcb大部分数据(共用代码段,数据独有,有自己的虚拟地址空间)。 fork实现:  在fork()函数执行结束之后,其返回值是存放在eax寄存器中的,在子进程中fork()的结尾处,置0。造成子进程也执行一次fork()的假象。#include <unistd.h>pid_t fork(v...

2019-05-15 23:41:53 1295

原创 链接和编译

在开始学习C语言编程时,我们所写的第一份代码应该就是:#include <stdio.h>int main(){ // 打印 printf("Hello World! \n"); return 0;}最初我们只能知道这段代码执行结果是打印一句: Hello World!但背后具体运行过程是怎样的呢? 通过学习,本篇尝试对...

2019-05-14 20:25:19 207

原创 MySQL-表的操作

表的操作 创建表 语法:CREATE TABLE table_name ( field1 datatype, field2 datatype, field3 datatype) character set 字符集 collate 校验规则 engine 存储引擎;说明:field 表示列名 datatype 表示列的类型 ...

2019-05-13 21:10:43 91

原创 MySQL-库操作

创建数据库语法:CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [, create_specification]...] create_specification:[DEFAULT] CHARACTER SET charset_name[DEFAULT] COLLATE collation_name...

2019-05-12 23:29:01 98

原创 模板的特化和萃取

之前对模板化编程进行了总结(详见https://blog.csdn.net/timecur/article/details/89949643)。这篇将介绍模板的重要概念---模板特化。模板的特化 模板针对某些具体的类型不能处理或者处理结果有误,就需要进行模板特化。// 例如一个比较两元素大小的模板template<class T>T& Max...

2019-05-11 18:05:22 668

原创 C++的类型转换

在C++中,类型转换可分为"隐式类型转换" 和 "强制类型转换"。隐式类型转换 隐式转换会发生在以下几种情况中:将一种算术类型值赋给另一种算术类型变量; 同一表达式包含不同的数据类型; 传递参数给函数时; 函数返回表达式的类型与函数返回值类型不一致时。 初始化和赋值时进行的转换 在编译器实现以下代码: char a = 'a'; int...

2019-05-10 20:40:35 343

原创 C++的多态性

概述 多态性是面向对象编程中的重要特征之一。其是用父类型别的指针(或引用)指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种由于调用子类的不同可以让父类的指针有“多种形态”,这是一种泛型技术。 多态实现方式:函数重载 运算符重载 虚函数多态实现 多态分类 1.编译时多态(静态联编) : 通...

2019-05-09 21:14:01 3471

原创 模板化编程

模板概念: 最初设计C++时,template称为被参数化的类型。参数化是因为类型的相关信息可以从template定义中剥离。类型是指每一个类模板或函数模板基本上都随着它作用或它所内含的类型而有性质上的变化。 而后template被通俗的称为模板。作用:可以根据用户指定的特定类型或特定值,自动产生一个函数或类。实现模板: 在学习或是做题中我们...

2019-05-08 22:55:16 1090

空空如也

空空如也

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

TA关注的人

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