自定义博客皮肤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)
  • 收藏
  • 关注

原创 Go 协程并发安全使用map

问题:我们在日常业务开发的时候肯定会用到协程,大部分为了提高整个功能的执行速率,当遇到多个协程并发读写map时大家肯定遇到过一些问题~先举例一个错误示范:// 错误示范package mainimport ( "fmt" "time")func main() { m := make(map[int]int) go func() { //协程1 for { read := m[1] //并发读 fmt.Println("read -> ", read)

2022-01-18 17:36:43 3147

原创 new/delete和malloc/free区别

new/delete和malloc/free区别:1,new从自由存储区域开辟空间,malloc从堆上开辟空间;2,new的返回值类型是安全的,malloc返回值类型不安全;3,new不需要计算内存开辟大小,malloc需要计算开辟内存的大小;4,new申请失败抛出异常,malloc返回NULL;5,new可以进行初始化,malloc不可以进行初始化;6,new是关键字,m...

2019-09-16 22:45:55 206

原创 IP过滤器:实现对访问IP的限制功能

题目描述:在后端服务中需要对恶意IP进行限制,设计一个IP过滤器,实现对IP访问限制功能,对于限制IP有三种形式:(1) 全IP:例:222.205.58.16; (2)前面带*:例:*.58.16(3)后面带*:例:222.205.58.*带*的代表匹配到任意IP段均可,*可代表多个IP 段,并且*只能出现在开头或者结尾;输入描述:输入第一行是过滤规则的条数N和需要过滤的I...

2019-09-16 22:19:23 4031

原创 面向对象思想——oop

面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)是一种计算机编程架构。OOP 的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成。这样做主要是为了“模拟现实”;Object Oriented是建立在“对象”概念基础上的方法学。对象是由数据(成员变量)和允许的操作(成员方法)组成的封装体,与客观实体有直接对应关系,一个对象类定...

2019-08-28 17:36:26 322

原创 const、static、extern用法

const的用法:1、在C语言中,const修饰的变量是"常变量",在编译阶段检查常变量有没有做左值(不可以为左值),其他处理和普通变量相同。2、在C++中,const修饰的变量为"常量",在编译阶段,把用到常量的地方替换成常量初始化的值(常量:(1)常量一定要初始化;(2)不可以做左值;(3)不能间接修改常量的值;);3、在C++中,const修饰的成员变量也不能在类定义处初始化,只...

2019-08-28 14:38:33 342

原创 MySQL——事务、锁机制

一、事务(一组特定sql语句的集合)(1)由于 MyISAM 不支持事务,所以事务是针对于 InnoDB 来说;(2)事务处理可以用来维护数据库的完整性,保证成批的 SQL 语句要么全部执行,要么全部不执行;(3)事务用来管理 insert,update,delete 语句;事务的特性:A:原子性(Atomicity,或称不可分割性) C:一致性(Consistency) ...

2019-08-25 15:36:12 194

原创 MySQL——存储引擎、索引

一、存储引擎<基于表>1.MyISAM底层实现:B+树;不支持外键,不支持事务,支持全文索引;非聚集索引;表锁;.myi(index);.myd(data)2.InnoDB底层实现:B+树;支持外键,支持事务,不支持全文索引;聚集索引;行锁;3.MEMORY“内存”存储;临时表;varchar当作char来处理;当遇到TEXT BOLB关键字不识别,交由MyIS...

2019-08-25 02:20:19 128

原创 MySQL——触发器

创建触发器:创建的原型:--具体实现:创建触发器trigger_pro1,对student表进行插入操作之前触发,计数器@count加一create trigger trigger_pro1beforeinsert,load,replaceon studentfor each row begin set @count = @count + 1; ...

2019-08-21 16:48:19 174

原创 MySQL——select查询

例表:一、普通查询无条件:select * from student; /* "*" 的意思是打印表中所有字段,等同select id,name,age,sex,grade_id,class_id from student;*/有条件:select id,name from studentwhere age = 18; /* "where" 的意思是进行对字段...

2019-08-20 15:05:28 281

原创 MySQL使用教程

SQL语句:(1)DDL(数据定义语言)<结构>create(增) drop(删) alter(改) show(查)(2)DML(数据操纵语言)<数据>insert(增) delete(删) update(改) select(查)(3)DCL(数据控制语言)grant(授权) revoke(回收)数据库:一、创建数据库(create databa...

2019-08-19 15:11:35 163

原创 malloc,calloc,realloc的作用和区别

在c语言中有四个函数可以开辟内存:alloca,malloc,calloc,realloc; (包含#include<stdio.h>)释放内存:free;alloca:是向栈申请内存,因此无需释放(系统回收).malloc:使用最为频繁,因为简单,只需要一个参数,即需要动态开辟内存的字节数,如果堆的连续空间能满足则将分配好的内存首地址返回,失败则返回NULL,mallo...

2019-08-18 15:34:55 274

原创 魔方阵

魔方阵,又称幻方阵。是指组成元素为自然数1,2,3,4……n^2的n*n的方阵,其中每个元素都不相等,且每行、每列以及主、副对角线上哥哥n个元素之和都相等。分为三种情况:奇数魔方阵、单偶数魔方阵和双偶数魔方阵。此博客只以奇数魔方阵为例,下面是算法描述:1、数字1放在方阵第一行中间位置;2、当前数字存放在前一个数字的上一行后一列,注意如果已经到达顶行则上一行为最后一行即把线性的看成环形的...

2019-08-16 15:07:05 482

原创 保护地址模式

80386是一个32位的CPU,也就是它的ALU数据总线是32位的,同时它的地址总线与数据总线宽度一致,也是32位,其寻址能力达到4GB。从理论上说,当数据总线与地址总线宽度一致时,其CPU结构应该简洁明了。但是,80386无法做到这一点。作为X86产品系列的一员,80386必须维持那些段寄存器的存在,还必须支持实模式,同时又要能支持保护模式。Intel选择了在段寄存器的基础上构筑保护模式,并且...

2019-08-16 11:10:13 781

原创 实地址模式(实模式)

实地址模式是指寻址采用和8086相同的16位段和偏移量,最大寻址空间1MB,寻址时将段寄存器的值左移4位加上偏移地址,得到1MB空间内的地址。它是CPU启动的时候的模式,这时候就相当于一个速度超快的8086。8086处理器的寻址目标是1M(2^20)大的内存空间,于是它的地址总线扩展到了20位。但是,一个问题摆在了Intel设计人员面前,虽然地址总线宽度是20位的,但是CPU中“算术逻辑运算单...

2019-08-16 10:09:23 3720

原创 字符串问题——替换字符串中的空格

问题:把字符串中的空格都替换为“%20”。例:输入:“We are happy” 输出:“we%20are%20happy”由于是将空格转化为"%20",也就是将一个字符转为三个字符。(1)第一种方法就是开辟另一个字符串将原字符串修改好然后再拷回去。/* (1) 将字符串中的空格替换为"%20",' '-> "%20" 空...

2019-08-13 17:06:22 504

原创 STL——标准模板库

STL——标准模板库1、容器容器类是管理序列的类,是容纳一组对象或对象集的类。通过由容器类提供的成员函数,可以实现诸如向序列中插入元素,删除元素,查找元素等操作,这些成员函数通过返回迭代子来指定元素在序列中的位置。(1)、顺序容器vector 矢量容器 底层实现:不定长顺序表 #include<vector> 支持随机迭代器list 双向链表容器 ...

2019-08-12 00:32:47 304

原创 求一组数据中,相邻的两个数字之差的绝对值最小的一对数字

题目:给出n个正整数,要求找出相邻的两个数字中差的绝对值最小的一对数字,如果有其他两个数差的绝对值相同,则输出在最前面的一对数。2<n<=100,正整数都在10^16范围内。输入:输入包含两行,第一行为n,第二行是用n个空格分隔的的正整数输出:输出包含一行两个正整数,要求按照原来的顺序输出样例输入:代码实现:#include <iostream>...

2019-08-11 22:42:05 1548

原创 Linux系统,文件操作命令

一、文件基本操作(创建、删除、拷贝、剪切)对文件的基本操作(创建、删除、拷贝、剪切)都分为普通文件和目录文件,具体操作方法如下图:下面是对上图命令的实现:二、文件权限属性的修改:修改属主 'u' (root用户): chown newuser(新属主,用户名) filename(文件名) 修改属组 'g' (r...

2019-07-23 16:38:48 189

原创 Linux环境下,文件的压缩/解压

一、zip格式 zip可能是目前使用的最多的文档压缩格式。优点:可以在不同的操作系统平台上使用。缺点:支持的压缩率不是很高。而tar.gz和tar.bz2在压缩率方面做得非常好。压缩一个zip文件(命令): zip-r newfilename.zip filename (-r是压缩文件,newfilename.zip是指压缩之后的文件名称,filename是指要压缩的...

2019-07-22 19:32:36 78575 2

原创 shell编程

Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。注意:Shell 脚本(shell script),是一种为 shell 编写的脚本程序。业界所说的 shell 通常都是指 shell 脚本,但读者朋友要知...

2019-04-26 16:28:42 824

原创 守护进程(精灵进程)

守护进程也称精灵进程(daemon)是生存期较长的种进程。它们常常在系统自举时启动,仅在系统关闭时才终止。因为它们没有控制终端,所以说它们是在后台运行的。运行周期长,后台运行,不需要和用户交互。守护进程编程流程:1、调用fork,然后使父进程退出(exit)。 这样做实现了下面几点:第一,如果该守护进程是作为一条简单shell命令启动的,那么父进程终止使得shell认为这条命令已经执行...

2019-03-20 15:58:09 983

原创 高性能I/O框架库libevent的介绍和使用

I/O框架库是以库函数的形式,封装了较为底层的系统调用,给应用程序提供的一组更便于使用的接口。I/O框架库的实现原理: (1)以Reactor模式实现。(2)以Proactor模式实现。(3)同时用Reactor和Proactor两种模式实现基于Reactor模式的I/O框架库包括以下几个组件:(1)句柄(Han...

2019-03-15 16:35:53 1125

原创 select、poll、epoll的区别以及epoll的两种模式(LT、ET)以及实现

select和poll的缺点:(1)、每轮循环都要从用户空间往内核空间拷贝数据;(2)、内核轮询,检测每个描述符有没有就绪事件,O(n);(3)、I/O函数返回后,遍历每个描述符找到有事件就绪的描述符,O(n);(select、poll)和(epoll)的区别:(1)、select、poll每次循环都需要从用户空间向内核空间传递数据; epoll直接...

2019-03-13 17:56:35 848

原创 I/O复用技术的系统调用: select()、poll()、epoll()的解释以及使用

I/O复用可以使程序同时监听多个文件描述符,对提高程序的性能很重要;使用I/O复用技术的五种情况: 1、客户端程序要同时处理多个socket; 2、客户端程序要同时处理用户输入和网络连接; 3、TCP服务器要同时处理监听socket和连接socket; ...

2019-03-13 17:30:09 341

原创 vector容器的实现、stack容器适配器的实现

vector容器:功能:像容器一样存放各种类型的对象,是一个存放任意类型的动态数组,能够增加和压缩数据; vector是一个类模板而不是一种数据类型,故对它的定义,需要指定类型;优点:当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间的目的。代码实现:​//Vector容器实现(不定长顺序表)template &lt;typ...

2019-03-01 16:56:19 369

原创 套接字编程(TCP协议)---附代码

TCP的可靠性:1.应答确认   2.超时重传   3.滑动窗口//套接字编程:客户端#include &lt;stdio.h&gt;#include &lt;stdlib.h&gt;#include &lt;unistd.h&gt;#include &lt;string.h&gt;#include &lt;assert.h&gt;#include &lt;sys/socket...

2019-02-22 16:42:55 499

原创 C语言和C++对于内存管理的区别(开辟内存和释放内存)

C语言:1.开辟内存:malloc()               使用malloc 缺点 :  (1)、容易导致越界;例如:int *p = (int *)malloc(1); 明显指针大小为4字节,一个字节明显不够                                                                                       ...

2019-02-22 16:09:53 875

原创 Linux系统使用:《gcc安装教程.txt》

1、 保证系统中桌面上的光盘是 RHEL_6.3 i386 Disc1  2、 打开终端,切换到root用户(终端输入su)3、 切换到/mnt目录下:   cd  /mnt4、在mnt下创建目录文件dvd :  mkdir  dvd5、 执行命令:  mount /dev/cdrom   /mnt/dvd6、 执行命令: cd  /etc/yum.repos.d7、 执行命令:  v...

2018-10-17 21:09:52 196

原创 Linux系统使用技巧:(常见操作)

1、放大终端,"ctrl" + "shift" + "+"2、切换目录,cd ~ (切换到个人家目录)3、pwd 查看当前目录4、ls 查看当前目录的文件和子目录   ls -a 显示所有文件,包括隐藏文件5、清屏,clear,或者ctrl+l6、新建文件夹(目录),'mkdir 文件夹名(目录名)' ,例如 mkdir src 7、编辑文件:'vi 文件名', 点击 ...

2018-10-17 21:03:21 195

原创 数组越界

数组越界是程序员遇到的大问题之一,我只对此做我简单的理解:此时,当n=10的时候依旧满足条件,继续运行,则会将i的地址认为i为arr[10],但实际没有此值。...

2018-07-11 21:35:48 169

原创 进制问题:假设在n进制下,下面的等式成立,567*456=150216,n的值为几?

解答这个问题之前先看一个简单的问题:15*4=112,问系统采用几进制?使用上述方法就可以求出n,但是有时候不能完全排除所有错误选项!就需要进一步再来看这个问题:假设在n进制下,下面的等式成立,567*456=150216,n的值为几?A.9    B.10   C.12    D.18用上述方法只能排出B选项:42%n=6 -----&gt;   9、12、18都满足。对于这个等式  42%n=...

2018-07-11 20:54:51 1335

空空如也

空空如也

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

TA关注的人

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