自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 收藏
  • 关注

原创 线程安全的单例模式

线程安全的单例模式:单例模式:属于创建类型的一种常用的软件设计模式,通过单例模式创建的类在当前进程中只有一个实例,一份资源只能被申请加载一次。如何实现:饿汉模式:资源在程序初始化的时候就去加载,后边使用的时候直接使用,使用会非常流畅,但是有可能会加载上根本用不到的资源,而且程序初始化的时间也会较慢懒汉模式:在进行资源的使用时,缺少这个资源才去加载,程序初始化的速度比较快,但是初次加载某个模块时会比较慢,因为这时候需要加载相应的资源。饿汉模式实现方式:使用static将某成员变量定义为

2020-05-15 16:04:43 355

原创 Linux:线程池 / 及如何创建一个线程池

线程池线程池:通俗一点来说,就是一个有着很多线程的池子,线程数量由线程池的最大线程容量控制。当有需要处理的任务到来时,从线程池中取出一个线程去处理这个任务。应用场景:有大量的数据处理请求,需要执行流并行或并发处理若是每次有一个数据请求的到来需要去创建线程去处理,处理完销毁则会产生风险以及一些不必要的消耗:线程如若不限制线程创建的数量,在峰值压力下,线程创建过多,资源耗尽,有程序崩溃的风险。创建一个线程的时间:线程创建+任务处理+线程销毁,如果任务处理的时间占比不高,则说明大量的资源都用于了线程的

2020-05-11 15:48:14 514

原创 Linux/多线程的同步与互斥

线程安全:多个执行流对资源进行争抢访问,但不会产生数据二义性线程安全的实现:同步,互斥同步:通过条件判断实现对临界资源访问的合理性互斥:通过同一时间对临界资源的唯一访问,实现对临界资源访问的安全性互斥锁互斥的实现:互斥锁在多任务处理的操作系统中,多个执行流可能同时要使用某个数据,就假如我们现实中有一台打印机,有许多人要使用,如果不加以控制,比如说排队,上一个人还没有使用完下一个人就是用...

2020-04-24 19:19:37 314

原创 LINUX/ linux操作系统下的多线程/线程控制

线程概念进程中的一条执行流,执行程序中的某段代码功能:进行多任务处理以前学习知道,进程就是pcb,是对正在运行程序的描述,通过pcb操作系统可以实现对程序运行的调度管理。线程是进程中的一条执行流,这个执行流在Linux系统下是通过pcb来调度运行的,在Linux系统下实际上没有线程的概念(即无tcb),实际上Linux系统下线程就是一个pcb,这些pcb共用同一个虚拟地址空间,相较于传统pc...

2020-04-21 18:07:37 784

原创 C++关键字:volatile / 函数重入

volatile用于修饰一个变量,保持变量的内存可见性(cpu在处理的时候每次都从内存获取数据),防止编译器过度优化。cpu在处理数据的时候从内存获取数据加载入寄存器进行处理gcc编译器,在编译程序的时候,如果使用代码优化 -Olevel(1,2,3)选项,发现某个变量使用频率非常高,为了提高效率,直接将这个变量的值设置为某个寄存器的值,以后访问这个变量的时候都直接从寄存器访问,则减少了内存...

2020-04-14 16:15:52 550

原创 LINUX/进程信号相关

进程信号信号:一个软件中断作用:通知进程发生了一个事件,进程中断当前的操作去处理这个事件。生活中的信号多种多样,并且每一个信号都对应一个事件,并且我们可以识别这个信号去处理这个事件操作系统中的信号也是如此,通过kill -l 指令可以查看系统中的信号种类,共有62种信号种类其中1~31号信号是从unix中继承而来的,每个信号都有具体的对应系统事件,属于不可靠信号(有可能信号丢视,造成事...

2020-04-13 15:14:05 135

原创 LINUX/进程通信:共享内存/消息队列/信号量

共享内存共享内存:是在物理内存上开辟一块空间,需要通信的进程通过页表映射这块物理内存地址到各自的虚拟地址空间上,进而可以通过虚拟地址空间访问这块空间,实现数据共享。特性:共享内存是最快的进程通信方式管道通信:这种通信方式,涉及两次用户态与内核态之间的拷贝,将数据写入管道,再从管道中读取数据。共享内存:直接通过虚拟地址访问物理内存实现对共享内存中数据的操作,相比与管道通信少了两次用户态与内...

2020-04-10 19:42:40 176

原创 C++ 构造函数详解

构造函数构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,保证每个数据成员都有一个合适的初始值,并且在对象的生命周期内只调用一次。特性构造函数的名字虽然叫构造,但并不是开空间创建对象,而是对创建的这个对象进行初始化。其特征如下:1:函数名与类名相同2:函数没有返回值3:对象实例化时编译器会自动调用对应的构造函数4:可以重载5.如果类中没有显示定义一个...

2020-04-08 16:00:55 296

原创 LINUX/进程间通信(IPC):匿名管带/命名管道

进程通信(ipc):操作系统为进程间提供的几种通信方式。由于进程具有独立性,每个进程都拥有自己的独立的虚拟地址空间,因此无法直接通信,才需要操作系统提供的几种通信方式。通信方式:匿名管道/命名管道,共享内存,信号量,消息队列管道本质:内核中的一块缓冲区,多个进程通过访问同一块缓冲区(管道)实现通信。种类:匿名/命名匿名管道内核中的缓冲区没有具体的标识符,因此只能用于具有亲缘关系的...

2020-04-06 19:20:31 181

原创 C/C++ 关于extern "c"

extern "c"有时候在一个C++工程中某些函数可能要用C语言的风格编译,在函数前加个exetern “c” ,就是告诉编译器将这个函数用C语言的规则进行编译。当我们需要调用一个用C++实现的动态库或者静态库的接口时,如果是一个C++程序我们就可以成功调用,如果是一个C语言程序,就会调用失败,因为C和C++的函数调用规则是不一样的。如果在这个库里的函数使用exetern “c”,那么C和C...

2020-04-01 15:28:55 241

原创 快速排序及三种排序方法 Hoare法/挖坑法/前后指针法

快速排序算法思想:基于分治的思想,是冒泡排序的改进型。同冒泡排序一样,快速排序也属于交换排序,通过元素之间的比较和交换位置来达到排序的目的。不同的是,冒泡排序在每一轮只把一个元素冒泡到数列的一端,而快速排序在每一轮挑选一个基准元素,并让其他比它大的元素移动到数列一边,比它小的元素移动到数列的另一边,从而把数列拆解成了两个部分。每次把数列分成两部分,究竟有什么好处呢?假如给定8个元素的数列...

2020-03-30 21:38:29 389 1

原创 Linux系统下对进程的控制详解:进程等待/程序替换

进程等待创建出来的子进程如果先于父进程退出,并且父进程没有得到子进程的返回状态,这时子进程就会保存自己的退出原因,使系统资源得不到完全释放从而产生僵尸进程。①如何不产生僵尸进程?父进程等待子进程的退出,获取子进程的返回值,从而避免僵尸进程②关于进程等待有两个函数*1.pid_t wait(int status)阻塞等待任意一个子进程退出,获取子进程的返回值放到status指向的空间中,...

2020-03-26 14:51:13 139

原创 Linux系统下对进程的控制:进程创建/进程终止

进程创建通常情况下使用 pid_t fork(void) 函数创建一个子进程,返回子进程的pid,创建出来的子进程与父进程代码共享,数据独有。写时拷贝技术:子进程复制了父进程,一开始与父进程指向同一块物理内存,因此看起来父子进程完全相同;但是进程间具有独立性,意味着当这块物理内存中的数据即将发生变化时会重新给子进程开辟物理空间,将数据拷贝过来,因此子进程拥有自己独立的数据。代码共享的原因:代...

2020-03-23 21:44:21 174

原创 进程虚拟地址空间以及三种内存管理方式 分页式/分段式/段页式

平时我们都知道地址,是内存单元的编号,指针则是存储变量地址的变量。那么程序是否会有地址呢?程序是不占用内存的,存储在磁盘中,只有当运行时才会将数据载入内存中。进程的狭义概念是一个正在运行中的程序(进程详解看上一篇博客),因此进程是有地址空间的。进程虚拟地址空间假设现在有一个进程,它有一个变量a=100,此时我们创建一个该进程的子进程,子进程的一个特点是代码共享,数据独有。然后在子进程中修改...

2020-03-19 20:22:45 1573

原创 LINUX系统下进程的各种状态/僵尸进程/精灵进程

进程在一般情况下会有这三种情况:1.就绪2.运行3.阻塞在Linux下进程状态更加详细:R / 运行状态:就绪以及正在运行S / 可中断休眠状态:可以被一些中断唤醒的休眠状态D / 不可中断休眠状态:不能被中断唤醒的休眠,只能等待条件满足后自动唤醒T / 停止状态:当前不再运行什么都不做Z / 僵尸状态:进程已经退出,但是没有释放系统资源PS:我们可以使用 ps -aux ...

2020-03-16 18:09:49 447

原创 LINUX/操作系统下的进程相关

进程首先问一个简单的问题,进程是什么?说进程是一个正在运行的程序也没有问题,但是有点狭义。那么程序又是什么呢?程序是一系列有序的指令集和,也就是程序员们所编写的代码,存储在硬盘中,那么运行的话是怎么运行的呢。冯·诺依曼体系结构决定了所有数据指令想要被CPU处理都必须加载入内存。在内存中,对这些指令和数据都有单独的描述,操作系统将这些运行的程序进行描述,然后将这些描述信息组织起来进行管理,...

2020-03-12 19:18:00 149

原创 【C语言】分隔链表 给定一个头结点为 root 的链表, 编写一个函数以将链表分隔为 k 个连续的部分。

给定一个头结点为 root 的链表, 编写一个函数以将链表分隔为 k 个连续的部分。每部分的长度应该尽可能的相等: 任意两部分的长度差距不能超过 1,也就是说可能有些部分为 null。这k个部分应该按照在链表中出现的顺序进行输出,并且排在前面的部分的长度应该大于或等于后面的长度。返回一个符合上述规则的链表的列表。举例: 1->2->3->4, k = 5 // 5 结果 ...

2020-03-11 14:04:13 721

原创 冯·诺依曼硬件体系和操作系统的简单认识

冯·诺依曼硬件体系结构冯·诺依曼是布达佩斯大学数学博士,在现代计算机、博弈论、核武器和生化武器等领域内的科学全才之一,被后人称为“现代计算机之父”、“博弈论之父”。冯诺伊曼硬件体系结构由五个部分组成:输入设备输出设备存储器运算器控制器目前几乎所有的计算机都是以这个体系结构组成。输入设备在我们日常使用中就是键盘,输出设备是显示器终端之类。存储器是计算机的内存,所有设备都围绕内存进...

2020-03-09 16:57:12 1090

原创 LINUX系统下的磁盘存储文件机制

在讲LINUX系统下的磁盘对文件进行存储的方式前,我们先用Window系统进行类比,一般在Windows系统下,会将整块磁盘进行磁盘分区,分成若干个磁盘,如图:用户可以将自己的文件放置至任意磁盘分区中进行存储使用。然而,在LINUX系统下磁盘的分区至少分为两块,如下图:Swap分区:在我们平时使用时,每个软件程序的运行都需要内存空间,而当内存空间在使用时被用完时,如果我们还想去运行其他...

2020-03-05 15:12:38 789

原创 链表简单教程

一·链表的概念及结构链表是一种物理存储结构上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的 。其物理结构和逻辑结构如下图:物理结构逻辑结构由上图可以看出链表是多个结点链接起来进行存储数据的一种数据结构,其中一个结点分别由两个域组成:数据域和指针域。数据域:进行存储数据指针域:存储后继节点在内存中的地址,这个地址就是下一个节点的起始地址由物理结构图也...

2020-02-14 22:09:36 555

原创 [C语言]LeetCode 78.子集 给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)

给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。输入: nums = [1,2,3]输出:[[3],[1],[2],[1,2,3],[1,3],[2,3],[1,2],[]]以题给的示例为例,总共有三个元素,则它总共会有2^3个子集,然后我们需要考虑每个子集里面放几个元素,以及放哪个元素我们可以采用对每个元素...

2020-02-03 18:42:54 2325 3

原创 【C语言库函数】qsort(快速排序)详解&自行编写简单的冒泡排序

qsort函数是C语言函数库自带的快速排序函数原型为:void qsort(void *base,size_t num,size_t size,int ( * comparator ) ( const void *, const void * ))各个参数代表的含义:1.base:表示需要排序的数组中的第一个元素的指针。2.num:表示需要排序的元素个数。3.size:表示数组中每个...

2020-01-14 21:08:20 624

原创 对单链表是否成环的判断

对于链表成环是在单链表中的某个节点的next指针指向了前某个位置的节点,导致链表在逻辑结构上形成了一个环形结构。在这里我们用力扣上的对于链表成环例题作为示例。给定一个链表,判断链表中是否有环。为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。**解题思路:**可以采取设置快慢指针的方法,让s...

2020-01-12 12:40:13 308

原创 关于指针数组的一些问题

首先给定一个指针数组char *p[]={“Shanghai”,“Beijing”,“Honkong”};作用: * = [ ]这个指针数组中存放着三个分别指向这三个字符串的指针。p=指向第一个字符串指针的地址;*p = 指向第一个字符串的指针 ;p[0]=指向第一个字符串的指针*p+n=p[0]+n 指向第一个字符串的指针在第一个字符串中指针后移n位例子:当我们想要输出...

2019-12-02 14:49:40 123

原创 [数据结构]顺序表简单教学(动态开辟内存)

顺序表概念及结构顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储。在数组 上完成数据的增删查改。顺序表一般可以分为:1. 静态顺序表:使用定长数组存储。#define N 100 typedef int SLDataType; typedef struct SeqList { SLDataType array[N]; size_...

2019-12-01 16:14:59 333

原创 实现一个函数,可以左旋字符串中的k个字符

实现一个函数,可以左旋字符串中的k个字符。ABCD左旋一个字符得到BCDAABCD左旋两个字符得到CDAB解题思想:该题根据题意可以知道左旋一次就是将首字符移到最后,其他字符全部前移一个左旋二次就是将前两个字符一块移到最后,其他字符全部前移一个以此类推因此我们只需让前一个字符等于后一个字符,将需要左旋的字符存起来最后赋给最后一个位置的内容。void move(char *str,...

2019-11-24 16:03:21 105

原创 将字符串“I am a student.”逆序输出为“student. a am I”

给到一串字符“I am a student.”,将其输出为“student. a am I”。整体思路为先将整个字符串逆序为‘’.tneduts a ma I"然后再将每个单词进行逆序转换为“student. a am I”那么我们只需先写出将整个字符串逆序的函数就已经将问题解决了大半void reserve_string(char* start, char* end){ whil...

2019-11-03 16:26:35 4263

原创 #C语言 三子棋/多子棋详解

如何用C语言编写一个三子棋小游戏三子棋作为一个游戏,众所周知游戏应该有的框架是1.游戏菜单2.游戏内容3游戏规则(获胜条件)在明白了这三点之后,在脑海中三子棋的游戏框架应该已经初步建立了,接下来我们就开始着手编写代码。首先创建一个头文件,“game.h”,在里面存放需要引用的函数如下:#include<stdio.h>#include<stdlib.h>...

2019-10-11 15:27:01 587 2

原创 (折半查找)在整型有序数组中查找想要的数字,找到了返回下标,找不到返回 - 1.

在一个给定的整形有序数组中查找想要的数字,使用折半查找找到后返回该元素的下标,找不到则返回-1.在计算机科学中,折半搜索(英语:half-interval search),也称二分搜索(英语:binary search)、对数搜索(英语:logarithmic search),是一种在有序数组中查找某一特定元素的搜索算法。搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则搜索过程...

2019-09-24 20:49:59 543

原创 金闪闪的标题

作为一个将来即将进入IT行业,成为一名程序猿的我,兴趣使然的写下了这篇博客。IT在当今社会作为一个热门职业,每个人都想来分一杯羹,然而俗话说的好“没有金刚钻别揽瓷器活”。想要成为一名优秀的程序员道路必然不是一帆风顺,会遇到许许多多意想不到的BUG,我们要做的就是将这些学习路上的BUG逐个击破。在当初选择计算机的这条路时,我就对自己有很明确的目标,下图是当时对自己所做的一些规划如今也是在一步步...

2019-09-16 14:47:33 115

原创 关于C语言数据基本类型的Signed和Unsigned的理解

关于C语言数据基本类型的Signed和Unsigned的理解今天学习C语言的数据这一章遇到了signed和unsignedsigned表示有符号的,其第一个位表示正负,其余位表示大小,例如signed int 大小区间为-128~127。unsigned表示无符号的,所有位都为大小,没有正负,例如unsigned int 大小区间为0~127。一般未做说明以signed为默认值。以上为s...

2019-01-20 13:51:21 15507 3

空空如也

空空如也

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

TA关注的人

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