自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 秋招之旅,打个总结

尘埃落定1.秋招之路1.秋招之路每个人有每个人的生活态度,有人选择考研就有人选择找工作,这两项无疑都是每一个即将毕业大学生的必经之路吧,或者还有少数人会去选择考公务员,当然这也是一个不错的选择,但是竞争一样很大吧。所谓人生有梦,各自经常,而我选择了找工作!在今年疫情的影响下,我们大三下学期没能如期的开学,所有的课程都变成了网上授课学习,实验室的课程自然也是一样。但是在家里根本没有心思学习,也导致实验室的项目没有很认真的学好,基本功比较差,很多东西没有深入的了解,就知道个大概,所以在面试的时候只要面试官

2020-11-04 12:36:54 310 2

原创 git代码管理的常用命令

GIT1.分支(branch)操作相关命令2.远程仓库相关命令3.版本(tag)操作相关命令1.分支(branch)操作相关命令查看本地分支:$ git branch查看远程分支:$ git branch -r创建本地分支:$ git branch [name] ----注意新分支创建后不会自动切换为当前分支切换分支:$ git checkout [name]创建新分支并立即切换到新分支:$ git checkout -b [name]删除分支:$ git branch -d [name] -

2020-08-11 16:10:33 242

原创 C语言的内存布局

内存布局一张图解释上代码一张图英文版:解释stack段:局部变量存放区域。函数中的局部变量都是存放在栈中data段:初始化为非0全局变量和初始化为非0静态局部变量(static)bss段:(未初始化或者初始化为0的) 全局变量和静态局部变量text段:存放代码,only readheap:自己申请的内存区域(malloc和free)上代码#include <stdio.h>int a = 0; //bss段(全局数据区)int a1 = 1;

2020-08-10 10:55:51 216

原创 Linux下libevent库的使用

libevent1.libevent的好处2.libevent的使用3.libevent编写多线程在了解了libevent的安装后,再来了解一下它的使用,特别是进行多线程的使用。其实这个最大的好处就是他在内部帮你封装好了epoll/select多路复用,并且使用了一些设计模式(比如反应堆模式),用事件机制来简化了socket编程然后要用的时候直接把相应的文件描述符加进去即可!1.libevent的好处假设有N个客户端同时往服务端通过socket写数据,用了libevent之后,你的server程序里

2020-07-23 10:20:19 703 3

原创 Linux下安装libevent的心酸历程

libevent1.libevent的简介2.libevent的安装3.libevent库的主要逻辑4.Reactor(反应器)模式4.1reactor基本知识4.2reactor的优点安装这个libevent的是我学习这么久以来最心酸的一次安装过程了,这次的经历让我明白了,有些链接真的不能全部相信,因为你不知道真实性如何,下次要下载啥,还是去官网下吧,不然下载下来的东西一堆错误,安装这个本来也就四五步的步骤,结果、、、、、、、1.libevent的简介Libevent是开源社区一款高性能的I/O框架

2020-07-21 11:55:23 1264

原创 Linux下JSON通信协议的使用和解析

JSON的使用1.JSON通信协议的概念2.JSON的语法2.1JSON对象2.2JSON数组1.JSON通信协议的概念JavaScript 对象表示法( JavaScript Object Notation) 。是一种轻量级的数据交换格式。 它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式, 但是也使用了类似于C语言家族的习惯( 包括C、 C++、 C#、 Java、 JavaScript、 Perl、 Python等) 。这些特性使JSON成为理想的数据交换语言。 易于人

2020-07-13 13:42:46 1089

原创 Linux下用Gitee(码云)对文件的管理

码云1.什么是码云2.码云的功能3.码云协作模式4.版本和版本控制系统5.创建仓库6.Linux下上传文件7.删除文件此前用做项目的时候码云是配置好的,一直就是直接用的。但是现在登陆一个新的系统要重新配置就忘了步骤了,而且上次是作为一个仓库里的成员,所以并没有很复杂,这次自己搞一个仓库有些步骤还是很关键的,现在总结一下。说到码云,大家第一时间想到的应该是那位“对钱没有兴趣的马云”吧!但是这个码云也是比较有名的,我们一起来了解一下1.什么是码云码云(Gitee.com)是专为开发者提供的稳定、高效、安

2020-07-11 16:29:08 1315 1

原创 AT指令之收发短信

收发短信1.Text模式和PDU模式2.英文短信3.中文短信4.注意:在上一篇分析了一些常用的AT指令后,我们就可以用这些AT指令来打电话或者发短信,那么短信又分为英文短信和中文短信,英文短信比较简单,输入要发的信息就好了,但是中文短信的话就比较复杂了。注意:在有些时候输入的AT指令是不显示的,需要用‘ate1’来显示命令。1.Text模式和PDU模式AT指令收发短信主要有两种模式:Text模式和PDU(Protocol data Unit,协议数据单元)模式。使用Text模式收发短信代码非常简单,

2020-07-03 11:51:12 3546 1

原创 常用的AT指令及小烦恼

常用的AT指令1.AT指令的概念1.AT指令的概念AT(Attention)指令集是从终端设备(Terminal Equipment,TE)或数据终端设备(Data Terminal Equipment,DTE)向终端适配器(Terminal Adapter,TA)或数据电路终端设备(Data Circuit Terminal Equipment,DCE)发送的指令。即是应用于终端设备与PC应用之间的连接与通信的指令。其对所传输的数据包大小有定义:即对于AT指令的发送,除AT两个字符外,最多可以接收1

2020-07-02 13:22:56 1285

原创 串口通信的小见解

串口通信1.串口通信的基本原理1.1同步和异步传输2.串口通信的基本结构3.接口标准串口通信的接口是串行接口,是一种可以将接受来自CPU的并行数据字符转换为连续的串行数据流发送出去,同时可将接受的串行数据流转换为并行的数据字符供给CPU的器件。一般完成这种功能的电路,我们称为串行接口电路。在我看来这就是一个转换器,把并行的数据换个方法发送给其他设备,当然这个方法也有它的优点和缺点,只是运用在不同的地方而已。1.串口通信的基本原理串口 通信(Serial Communications)的概念非常简单

2020-06-30 10:45:10 568

原创 Linux下的文件权限与目录配置

最近看了《鸟哥的Linux私房菜》之后,对文件的权限管理有了新的认识,对文件和目录的权限也有了系统的认知,其中最让我容易混淆的就是“x”权限了!1.用户和用户组在我们要学习文件权限的时候,用户和用户组是一个非常基础并且比较重要的概念,这里其实还有个“第三者”,也就是其他人的概念。由于Linux是个多人多任务的系统,因此可能常常会有很多人同时使用一台主机来进行工作的情况发生,为了考虑到每个人的隐私权和每个人喜好的工作环境,因此文件拥有者(用户)相关的权限设置就显得相当重要。下面通过一个例子来阐述文件拥

2020-06-23 10:16:57 157

原创 linux下同时创建多个进程

同时创建多个进程好久没有写博客了,最近在学校做实验的时候遇到一个同时创建两个进程的实验,让我对多进程编程有了新的认识,就一个进程退出的问题让我纠结了几天!刚开始创建进程时总会出现乱码,进程抢占的问题没有规定,也就是究竟哪个进程先运行没有约定,所以运行的结果是乱的...

2020-06-09 17:19:59 1966

原创 归并排序、快速排序和堆排序及C代码

排序1.归并排序1.1归并排序的概念1.2算法步骤1.3代码示例2.快速排序2.1快速排序的概念2.2算法步骤2.3代码示例3.堆排序3.1堆排序的概念3.2算法步骤3.3代码示例1.归并排序1.1归并排序的概念归并排序(Merge sort)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。作为一种典型的分而治之思想的...

2020-05-07 19:16:16 309

原创 冒泡排序、选择排序和插入排序及C代码示例

排序1.冒泡排序1.1冒泡排序的概念1.2算法步骤1.3代码示例2.选择排序2.1选择排序的概念2.2算法步骤2.3代码示例3.插入排序3.1插入排序的概念3.2算法步骤3.3代码示例1.冒泡排序1.1冒泡排序的概念冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有...

2020-05-05 16:23:44 332

原创 排序的时间复杂度和空间复杂度

时间复杂度和空间复杂度1.时间复杂度2.空间复杂度3.各类排序1.时间复杂度在计算机科学中,算法的时间复杂度是一个函数,它定性描述该算法的运行时间。这是一个代表算法输入值的字符串的长度的函数。时间复杂度常用大O符号表述,不包括这个函数的低阶项和首项系数。使用这种方式时,时间复杂度可被称为是渐近的,亦即考察输入值大小趋近无穷时的情况。例如,如果一个算法对于任何大小为 n (必须比 n0 大)的输...

2020-05-05 15:38:25 881

转载 TCP三路握手和四路挥手及常考面试题

TCP常见面试题为什么连接的时候是三次握手,关闭的时候却是四次握手?答:因为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当Server端收到FIN报文时,很可能并不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,“你发的FIN报文我收到了”。只有等到我...

2020-05-05 14:56:43 243

原创 C语言中的大小端字节序

大小端字节序1.大小端的概念2.为什么有大小端之分3.相关函数3.1htonl()函数3.2C语言中数据是存储在内存中的,而内存空间又被划分为以字节为单位的连续地址空间,那么,我们定义的变量是在内存中如何存储的呢。我们把变量在内存中的存储分为两种,大端字节序存储与小端字节序存储。网络字节序都是大端字节序主机字节序看本身电脑的情况,有可能是大端有可能是小端1.大小端的概念大小端字节序的概念...

2020-05-05 14:37:41 1468 1

原创 深拷贝与浅拷贝的区别----------C语言

深浅拷贝1.深拷贝2.浅拷贝3.二者的区别4.代码示例深拷贝和浅拷贝是只针对Object和Array这样的引用数据类型的。1.深拷贝深拷贝是指源对象与拷贝对象互相独立,其中任何一个对象的改动都不会对另外一个对象造成影响。就比如在我们的日常生活中,张三想要李四的资料,然后张三就在李四这里复制过去,这时张三和李四手里都有相同的一份资料,但这两份资料相互独立,不管是谁修改了他自己手里的内容都对另...

2020-04-22 18:51:22 1572

原创 TLV通信协议以及简单的函数封装

TLV1.什么是TLV2.字节流和字符流2.1字节流2.2 字符流1.什么是TLV通信协议可以理解两个节点之间为了协同工作实现信息交换,协商一定的规则和约定,例如规定字节序,各个字段类型,使用什么压缩算法或加密算法等。常 见的有tcp,udo,http,sip等常见协议。协议有流程规范和编码规范。流程如呼叫流程等信令流程,编码规范规定所有信令和数据如何打包/解包。编码规范就是我们通常所说的编...

2020-04-21 18:56:17 783

原创 嵌入式数据库SQLite的基本使用

SQLite1.SQLite的优点2.常用命令介绍2.1.sqlite3 指令(通常以 . 开头)2.2SQL命令(每个命令以 ;结束)3.SQLite编程函数3.1sqlite3_open()3.2sqlite3_close()3.3sqlite3_errmsg()3.4sqlite3_exec()1.SQLite的优点SQLite是一个非常轻量级自包含(lightweight and se...

2020-04-17 23:14:31 572 1

原创 链表的快慢指针(面试常考)

快慢指针1.链表和数组的区别2.链表的类型3.单链表的快慢指针4.快慢指针的例子4.1判断链表中是否存在环4.2求链表的中间节点4.3查找倒数第N个节点5.快慢指针的好处1.链表和数组的区别链表和数组都是基本的数据结构,但是二者的存储方式不同。数组:数组 在内存中存储,需要一块连续的内存空间,对内存的要求较高,比如需要200MB大小的存储空间,那么这200MB必须是连续的。链表:链表的...

2020-04-17 13:49:29 440

原创 进程间通信(IPC)-------------共享内存(Shared Memory)

共享内存1.共享内存的概念2.共享内存的优缺点3.共享内存的模型4.函数解析4.1shmget()函数4.2shmat()函数4.3shmdt()函数4.4 shmctl()函数5.代码示例1.共享内存的概念共享内存指 (shared memory)在多处理器的计算机系统中,可以被不同中央处理器(CPU)访问的大容量内存。由于多个CPU需要快速访问存储器,这样就要对存储器进行缓存(Cache)...

2020-04-16 21:05:24 1591

原创 进程间通信(IPC)-----------------管道(pipe)和命名管道(fifo)

管道与命名管道1.二者的异同2.管道(pipe)1.二者的异同管道只能在两个具有亲缘关系的进程之间通信,通过命名管道(Named PiPe)FIFO,不相关的进程也能 交换数据。2.管道(pipe)管道是UNIX系统IPC的最古老的形式,所有的UNIX系统都提供此种通信机制。管道的实质是一个内核缓冲区,进程以先进 先出(FIFO, First In First Out)的方式从缓冲区存取数...

2020-04-12 00:56:52 343

原创 进程间通信(IPC)---------------信号(Signal)与信号量(Semaphore)

信号与信号量1.IPC的几种方式2.信号(Signal)3.信号量3.1 信号量的概念3.2 使用步骤3.3函数原型2.4代码示例1.IPC的几种方式首先,先来讲一下fork之后,发生了什么事情。由fork创建的新进程被称为子进程(child process)。该函数被调用一次,但 返回两次。两次返回的区别是子进程的返回值是0,而父进程的返回值则是新进程(子进程)的进程 id。将子进程id返回...

2020-04-07 19:38:24 1950 2

原创 Linux下的网络socket编程---------------多路复用(epoll)

epoll多路复用1.epoll的诞生1.1 select的缺点1.2 epoll出现2.函数参数解析3.代码示例1.epoll的诞生1.1 select的缺点单个进程能够监视的文件描述符的数量存在最大限制,通常是1024,当然可以更改数量,但由于select采用轮询的方式扫 描文件描述符,文件描述符数量越多,性能越差;内核 / 用户空间内存拷贝问题,select需要复制大量的句柄数据结...

2020-04-06 21:23:01 193

原创 Linux下的网络socket编程---------------多路复用(poll)

poll 多路复用1.select和poll的异同2.函数原型及解析3.代码示例1.select和poll的异同select()和poll()系统调用的本质一样,前者在BSD UNIX中引入的,后者在System V中引入的。poll()的机制与 select() 类 似,与 select() 在本质上没有多大差别,管理多个描述符也是进行轮询,根据描述符的状态进行处理,但是 poll() 没有...

2020-04-06 16:43:34 201

原创 五种网络I/O模型

五种网络I/O模型1.四种调节方式2.五种模型3.五种方式的对比1.四种调节方式在Linux下进行网络编程时,我们常常见到同步(Sync)/异步(Async),阻塞(Block)/非阻塞(Unblock)四种调用方式:同步和异步的概念描述的是用户线程与内核的交互方式:同步是指用户线程发起IO请求后需要等待或者轮询内核IO操作完成 后才能继续执行;而异步是指用户线程发起IO请求后仍继续执行,当...

2020-04-06 15:42:47 176

原创 Linux下的网络socket编程-------------多路复用(select )

select多路复用1.I/O多路复用(IO Multiplexing)2.select()参数解析3.示例流程图4.代码示例1.I/O多路复用(IO Multiplexing)IO多路复用模型是建立在内核提供的多路分离函数select基础之上的,使用select函数 可以避免同步非阻塞IO模型中轮询等待的问题,此外poll、epoll都是这种模型。在该种模式下,用户首先将需要进行IO操作的 ...

2020-04-06 15:02:07 424

原创 动态库、静态库以及Makefile的使用

动态库、静态库以及Makefile的使用1.动态库和静态库1.1动态库的概念1.2静态库的概念1.3动态库的制作1.4静态库的制作1.5编译链接2.Makefile的使用2.1Makefile的含义2.2Makefile的结构2.3Makefile的使用2.4Makefile示例2.4.1当前文件夹下的操作2.4.2有子目录文件夹的操作1.动态库和静态库库用于将相似函数打包在一个单元中。然后这...

2020-04-05 23:36:12 790

原创 GCC编译之过程详解

gcc编译过程1.编译过程1.1编译的概念1.2 常用选项2.预处理3.编译、优化1.编译过程1.1编译的概念编译程序读取源程序(字符流),对之进行语法和词法分析,将高级语言指令转换为功能等效的汇编代码,再由汇编程序转换为机器语言,并且按照操作系统对可执行文件格式的要求链接生成可执行程序。编译的完整过程:C源程序—>预编译处理(.c)—>编译、优化程序(.s、.asm)—&gt...

2020-04-05 16:38:55 465

原创 基于Linux下的getopt()/getopt_long()函数进行参数解析

getopt/getopt_long函数进行参数解析1.参数原型2.参数和返回值分析1.参数原型getopt()函数的参数原型int getopt(int argc, char * const argv[], const char *optstring);getopt_long()函数的参数原型int getopt_long(int argc, char * const argv[], ...

2020-04-04 16:46:32 224

原创 类、结构体、联合的区别

类、结构体、联合的区别1.结构体1.1什么是结构体1.2 结构体的定义与声明2.联合体2.1什么叫联合体2.2联合体的定义3.类3.1什么叫类3.2代码示例4.类和结构体的区别5.联合和结构体的区别1.结构体1.1什么是结构体在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型(aggregate data type)的一类。结构体可以被声明为变量、指针或数组等,用以...

2020-04-04 15:21:48 953

原创 基于Linux下的socket网络编程-----------------多线程

多线程编程1.什么叫线程2.线程池3.创建线程4.互斥锁5.死锁6.多线程改写服务器1.什么叫线程线程,有时被称为轻量级进程(Lightweight Process,LWP),是程序执行流的最小单元。一个标准的线程由线程ID,当前指令指针(PC),寄存器集合和堆栈组成。另外,线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它...

2020-03-28 19:36:21 1221 1

原创 进程与线程的区别

进程与线程的区别进程1.进程的概念2.进程的特征3.进程的创建4.进程的状态线程1.线程的概念2.线程的属性3.引入线程的好处4.线程的适用范围5.线程的分类进程和线程的区别进程1.进程的概念狭义定义:进程是正在运行的程序的实例。广义定义:进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执...

2020-03-21 15:23:52 170

原创 基于Linux下的socket网络编程----------多进程

多进程编程1.进程的涵义2.为什么要多进程编程3.进程空间的内部布局4.fork()系统调用5.vfork()系统调用6.wait()与waitpid()7.多进程改写服务器程序1.进程的涵义什么是一个进程?在操作系统原理使用这样的术语来描述的:正在运行的程序及其占用的资源(CPU、内存、系统资源等)叫做进 程。站在程序员的角度来看,我们使用vim编辑生成的C文件叫做源码,源码给程序员来看的但...

2020-03-16 21:08:59 319

原创 数据结构算法浅谈

数据结构算法浅谈1.贪心算法(1)基本要素(2)基本思路(3)算法特性(4)例题分析2.穷举算法(1)基本概述(2)例题分析3.二分查找(1)基本概念(2)查找过程(3)C代码示例1.贪心算法(1)基本要素贪心选择贪心选择是指所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达到。这是贪心算法可行的第一个基本要素,也是贪心算法与动态规划算法的主要区别。贪心选择是采用从顶向下、以...

2020-03-14 13:04:59 389

原创 TCP/IP与OSI模型

TCP/IP与OSI模型1.OSI七层模型***1.物理层******2.数据链路层******3.网络层******4.传输层******5.会话层******6.表示层******7.应用层***2.TCP/IP协议***1.网络接口层******2.网络层******3.传输层******4.应用层***1.OSI七层模型OSI(Open System Interconnection,开...

2020-03-08 12:18:49 412

原创 sizeof()与strlen()的区别

sizeof与strlen的区别1.区别2.代码示例1.区别1、sizeof不是函数,而是一个关键字。strlen()则是一个字符串函数。2、用法:sizeof()用来测给定的数据类型在内存中占的字节长度;strlen()是C语言标准函数库中的标准函数,其功能是:计算字符串的长度,strlen所作的仅仅是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确...

2020-03-08 00:11:21 183

原创 Linux下文件I/O系统调用

I/O文件系统调用1、系统调用和标准IO库函数的区别2、文件描述符1、系统调用和标准IO库函数的区别库是可重用的模块 处于用户态系统调用是os提供的服务 处于内核态 不能直接调用 而要使用类似int 0x80的软中断陷入内核 所以库函数中有很大部分是对系统调用的封装。从宏观上说,系统调用时内核层,C标准库在应用层。2、文件描述符文件描述符是Linux内核为了高效管理已被打开的文件而创建的...

2020-03-07 23:43:31 310

原创 单片机流水灯显示方式

对于单片机的显示方式有很多种:闪烁,交替,流水灯等等。但今天我做的就是流水灯,但实际上所用的代码都差不多,只有把显示方式的子程序改一下即可。我用到的语言是C语言,而且是用键盘控制的。 首先给出代码,然后再分析:#include<absacc.h>#include<reg52.h>#include<intrins.h>#define COM8255 ...

2020-03-03 14:37:14 1245

空空如也

空空如也

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

TA关注的人

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