自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(15)
  • 资源 (2)
  • 收藏
  • 关注

转载 【Go】为什么需要defer

defer作为一种用于注册延迟调用的机制,让函数或语句可以在当前函数执行完毕后(包括通过return正常结束或者panic导致的异常结束)执行,类似c++的析构函数。为什么用defer程序员在编程的时候,经常需要打开一些资源,比如数据库连接、文件、锁等,这些资源需要在用完之后释放掉,否则会造成内存泄漏。但是程序员都是人,是人就会犯错。因此经常有程序员忘记关闭这些资源。Golang直接在语言层面提供defer关键字,在打开资源语句的下一行,就可以直接用defer语句来注册函数结束后执行关闭资源的操作。

2022-01-05 01:51:00 174

原创 【机器数】

https://mp.weixin.qq.com/s?src=11&timestamp=1639310636&ver=3492&signature=GoELodMRgZT7qSkewd9iYtqGOBAmpdyD8vwYCzaR-NtTjJODfBIppvXc0W59gfGHBzUgmobJ2lEiGuWmSHErMDWFZm4Ep-raHb711piQNz1b2pWBG-NVOfgS1Phgja&new=1

2021-12-12 20:10:43 90

原创 【Go】package and import

Go代码用包来组织,包类似其他语言的库和模块。package是golang最基本的分发单位和工程管理中依赖关系的体现。一个包由一个或多个go源文件组成,放在一个文件夹下,每一个源文件的开始都用package来声明,指明这个文件属于哪个包。同一个路径下只能存有一个包。名为main的包比较特殊,用来定义一个独立的可执行程序,而不是库,main包中的main函数也是特殊的,总是程序开始执行的地方。我们要告诉源文件需要哪些包,因此package声明后必须跟着import来导入。import关键字导入的是packa

2021-11-27 16:24:31 193

原创 进线程的同步与互斥中信号量、互斥锁、条件变量之间的区别

在多进程或多线程编程中,往往会因为异步问题,比如在一个线程处理这个资源时,其他线程同时也在对这个资源进行处理,而导致在使用这个资源时可能发生资源被破坏、脏数据、不完整、不一致等问题,尤其是在共享内存时,因此需要对它进行同步或互斥化处理,也就是要求每次只能让单独一个线程对资源进行处理。互斥:为解决临界资源争夺,通过加锁禁止进程或线程间同时运行,必须等前一个运行完才能让后一个运行,具有唯一性和排他性,是一种特殊的同步方式。同步:为解决临界资源争夺,禁止进程或线程间同时运行,让它们按照一定的顺序来运行,即互斥

2021-08-02 12:37:42 211

原创 C++中构造函数和析构函数与虚函数之间的关系要点

首先对构造函数、析构函数、虚函数的概念作出定义。构造函数是类的同名成员函数,当创建类对象时它会自动执行,一般负责对类进行初始化、分配资源。public:类名(参数){p = new int;}注意: 构造函数的访问属性必须是public否则无法创建对象;构造函数可以重载,可以有多个版本的构造函数;调用带参数的构造函数:Test t(实参);默认情况下编译器自动生成一个没有参数的,什么都不做的构造函数,如果一旦显式实现带参数的构造函数,则无参构造不生成,Text t调用无参构造时,如果没

2021-07-19 00:18:02 389 2

原创 信号、进程、线程

一、什么是中断和信号1、中断是一种执行模式,分为软件中断和硬件中断。当程序接受到信息后中止当前正在运行的程序,转而执行其他任务,等到其他任务完成后再返回原进程。2、信号是软件中断的一种,由操作系统发出,程序接收后执行相应的操作。二、可靠信号和不可靠信号建立在早期的信号处理机制的信号(1-31)是不可靠信号,不支持排队,有可能丢失,同一个信号如果连续发送多次,可能只接收到一次。建立在新信号处理机制的信号(34-64)是可靠信号,支持排队,不会丢失。三、信号来源和处理方式硬件异常:除0、无效内存访

2021-07-06 00:50:02 222

原创 C++类对象常见面试题(三)

一、介绍多重继承、钻石继承和虚继承1、多重继承是指当一个子类继承多个父类时,会按照继承表的顺序在子类中排列父类,子类会标记每个父类的位置,当把子类的指针转换成父类指针时,编译器会自动计算父类所在的位置,指针会自动偏移,然后转换给父类指针2、钻石继承: 假如有一个类A,类B和类C都继承了类A,类D又同时继承了类B和类C,此时类A的内容会在类D中存在两份;当子类的父类有共同的祖先时,这种继承被称为钻石继承(1)类B和类C都有类A的内容(2)类D会继承B、C的所有内容,因此就会继承两份类A的所有内容(3

2021-07-03 01:50:21 171

原创 C++类对象常见面试题(二)

一、单例模式的原理1、禁止在类外创建对象:把构造函数私有化2、确保类对象只有一份:在类中定义一个静态指针或类对象3、提供一个获取类对象的接口:设计静态成员函数用于获取类对象二、介绍懒汉模式和饿汉模式饿汉模式的单例:程序运行时就实例化出类对象,不管后期是否用得上,都已经创建完毕优点:绝对不可能被多线程同时运行时创建多份缺点:如果后期用不到,就浪费资源了懒汉模式的单例:程序直到真正使用类对象时才创建对象优点:什么时候使用什么时候创建,如果不使用就不会被创建,节约资源缺点:多个线程同时创建

2021-07-02 23:22:28 376 2

原创 C++类对象常见面试题(一)

1.对象的创建过程a.给对象划分内存空间(栈、堆空间)b.执行初始化列表:根据继承表顺序来调用父类的无参构造,也可以调用父类的有参构造(:父类名(参数))根据成员的定义顺序来调用类类型成员的无参构造函数,也可以调用类类型的有参构造函数(:成员名(参数))初始化其他成员c.执行自己的构造函数、申请资源2、对象的销毁过程a.执行自己的析构函数、释放资源b.根据类类型成员的定义顺序,逆序调用类类型成员的析构函数c.根据继承表的顺序,逆序调用父类的析构函数d.释放对象的内存3、什么是常函数1

2021-06-28 11:20:24 294

原创 C++变量函数使用常见面试题

1. malloc/free 与 new/delete 的区别?身份:函数                 运算符/关键字返回值:void*             带类型的指针参数:字符个数(手动) &n

2021-06-26 00:31:40 118

原创 进程通信、网络通信

进程间通信:是指两个或者多个进程之间交互数据的过程,因为进程之间相互独立,为了协同工作就必须要交互数据进程间通信的分类:1.简单进程间的通信:信号、文件、环境变量、命令行参数2.传统的进程间通信:管道文件3.XSI进程间通信:功能共享内存、消息队列、信号量4.网络2进程间通信:套接字Socket(1)传统进程间通信通过管道,这是UNIX系统中最古老的进程间通信方式,古老意味着所有系统都支持,早期管道文件都是半双工,现有的一些系统的管道支持全双工。管道是一种特殊的文件,它的数据在文件中是流动的,读

2021-06-23 20:18:23 663

原创 虚拟机VirtualBox安装Ubuntu过程

首先得下载安装完VirtualBox,5或者6开头版本都可以,安装时候一路默认,不怎么占空间,所以c盘也没事。Ubuntu的镜像源我用的是网易的网易镜像源

2021-04-28 23:38:52 155

原创 内存常见面试题

1、堆内存与栈内存的区别定义、大小、使用、安全性栈中分配局部变量空间;堆区是向上增长的用于分配程序员申请的内存空间。栈内存存储局部变量、块变量,由操作系统自动申请、释放内存,大小有限,超过限制会产生段错误;堆内存由程序员手动管理,比较麻烦,但是足够大。栈内存系统分配安全度高;堆内存不能与标识符建立联系,只能和指针配合使用。安全性差;在使用过程中可能会造成内存泄漏、产生内存碎片,对编程人员要求高。2、堆内存越界的后果1、破坏malloc的维护信息,导致接下去malloc和free出差2、超过33

2021-04-09 09:22:57 504

原创 内存分段机制、变量类别、修饰变量的关键字

进程映像:进程在内存中的分布情况程序:存储在磁盘上的可执行文件(二进制文件、脚本文件)进程:在系统中运行的程序text 代码段: 二进制指令、常量,只读,强制修改会产生段错误data 数据段: 存储初始化过的全局变量、初始化过的静态局部变量bss 静态数据段:存储未初始化过的全局变量、未初始化过的静态局部变量,该段内存会在运行时先清理为0heap 堆内存: 由程序员手动管理,比较麻烦,但是足够大stack 栈内存: 存储局部变量、块变量,由操作系统自动申请、释放内存,大小有限,超

2021-04-07 10:43:58 125 2

原创 宏定义常见面试题

常见笔试面试题:1.定义一个100年有多少秒的宏#define YEAR_SEC (3600 * 24 * 365 * 100u)添加u防止数据超出界限2.在类型重定义时,#define和typedof的区别?如果是普通类型,它们的功能没有任何区别,如果是指针类型,会造成差异,define只定义最近的变量为指针变量。(1)typedef 仅限于为类型定义符号名称,#define 不仅可以为类型定义别名,也能为数值定义别名,比如可以定义 1 为 ONE。(2)typedef 是由编译器执行解释的,

2021-04-07 10:34:13 767

C语言汉诺塔hanuo.c

C语言汉诺塔程序

2021-04-08

C语言五子棋chess.c

C语言五子棋代码

2021-04-08

空空如也

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

TA关注的人

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