自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 网络编程——线程竞争

线程竞争基本概念互斥量(互斥锁)信号量死锁条件变量生产者与消费者模型哲学家就餐问题常考的面试题 基本概念   竞争与同步     同一个进程中的线程能够共享进程中的绝大多数资源,当它们进行随意的竞争时,就会导致共享的资源被破坏、脏数据、不完整、不一致等问题     通过一些方法让线程在竞争资源时相互协调,避免出现数据不完整、不一致等问题,这种就叫做线程同步   原子操作:     在操作的过程中,不会被任何情况打断的操作,叫做原子操作   临界区与临界资源:     被多个线程同时访问的代码叫做临界区,被多

2021-09-30 09:50:50 655

原创 网络编程——线程管理

线程管理基础概念POSIX线程线程管理线程的执行轨迹线程的终止线程的属性 基础概念   1、线程是进程的执行线路,它是进程内部的控制序列,或者说线程是它所在进程的一部分(进程是一个资源单位,线程是进程的一部分,是真正负责执行的)   2、线程是轻量级的,没有它自己独立的代码段、数据段、bss段、堆、环境变量、命令行参数、文件描述符、信号处理函数、当前目录等资源   3、线程有自己独立的栈内存、线程ID、错误码、信号掩码 0002等   4、一个进程可以包含多个线程(多个执行线路),但是至少有一个,这个线程是

2021-09-30 09:41:35 409

原创 网络编程——多路复用相关函数(select、pselect、poll、epoll)

多路复用基础概念selectpselectpollepoll 基础概念 多路复用:   使用一个进程(且只有一个主线程)同时监控若干个文件描述符的读写,这种读写模式叫做多路复用   多用于TCP服务端,用于监控若干个客户端的连接和数据的收发   优点:不需要频繁地创建进程、销毁进程,从而达到节约内存资源、时间资源,也能避免进程之间的竞争、等待   缺点:单个客户端的任务不能耗时太长,否则其它客户端就会感知到。   适合并发量高、任务量短小的情景,例如:web服务器 select fd_set 是文件描述符的

2021-09-22 19:13:02 456

原创 网络编程——基于UDP通信协议实现网络对战五子棋

服务器 #include <stdio.h> #include <getch.h> #include <stdbool.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include

2021-09-22 19:03:25 604

原创 Linux环境编程——基础概念

基础概念程序员必备技能课程介绍UNIX系统介绍Linux系统介绍相关知识GNU编译工具多样性构建过程文件类型:编译参数:预处理指令:库静态库共享库:静态库制作静态库使用静态库:共享库制作共享库使用共享库静态库和共享库的辅助工具环境变量表操作环境变量表的函数错误处理 程序员必备技能 一门编程语言:C语言、C++ 数据结构与算法:表、树、图、查找、排序、STL 操作系统:UNIX、Linux系统 网络编程:TCP\IP(socket技术、TCP、UDP、FTP协议) 数据库:MySQL 界面设计:Qt 课程介绍

2021-09-15 09:40:21 1064

原创 数据结构与算法总结思维导图

2021-08-30 00:05:48 362

原创 标准C语言总结思维导图

2021-08-30 00:05:13 159

原创 数据结构与算法(Day02)——功能受限的表(栈、队列)、封装链表

栈、队列、封装链表功能受限的表栈应用栈的常见笔试面试题队列封装链表封装单链表静态链表循环链表双向链表Linux内核链表通用链表 功能受限的表 栈 只有一个进出的出入口的表结构,先进后出,FILO   顺序栈:     数据项:       存储元素的内存首地址       栈的容量       栈顶位置     运算:       创建、销毁、入栈、出栈、栈满、栈空、栈顶 注意:   栈顶指向顶部的第一个数据,称为满增栈   栈顶指向接下去要入栈的位置,称为空增栈     满减栈    空减栈   链式栈:

2021-08-24 18:48:36 267

原创 关于链表常考的笔试面试题

关于链表常考的笔试面试题: 1、单链表逆序,在原列表的基础上进行调整 struct ListNode* ReverseList(struct ListNode* pHead ) { // write code here //判断第一个元素是否为空,如果为空,则返回NULL;并判断第二个元素是否为空,如果为空,则不需要逆序,直接返回 if(pHead == NULL || pHead->next == NULL) return pHead; //定义三个节点指

2021-08-23 18:36:06 314

原创 数据结构与算法(Day01)——顺序表和链式表

数据结构一、什么是数据结构数据结构的起源数据结构的基本概念数据结构的三个方面二、逻辑关系和存储(物理)关系数据的逻辑结构数据的存储结构逻辑结构与存储结构的对应关系三、数据结构的运算四、顺序表和链式表的实现顺序表:array链式表:list 一、什么是数据结构 数据结构的起源   1968年,美国高德纳教授,《计算机程序设计艺术》的第一卷《基本算法》的出 版,开创了数据结构和算法的先河。   数据结构是一门研究数据之间关系和操作的学科,而非计算方法。   数据结构+算法=程序,沃斯凭借这个观点写的论文,获得了

2021-08-10 20:47:16 227

原创 程序员的每一天(Day8)

复习: 结构: ​ 结构是一种由程序员自己设计的数据类型,用于描述一个事物的各项数据,由若干个基础的数据类型组成 ​ 设计: struct 结构体名 { 类型 成员名; ... }; ​ ​ 定义结构变量: ​ struct 结构体名 结构体变量; ​ 注意:也可以在设计结构体时。直接定义结构体变量 ​ ​ 访问成员: ​ 结构体变量。成员名 ​ 结构体指针->成员名 ​ 初始化: ​ 顺序初始化:struct 结构体名 结构体变量 = {v1,v2,v

2021-08-09 15:35:58 110

原创 程序员的每一天(Day7)——宏、宏函数、宏常量

预处理指令查看预处理的过程预处理指令的分类:#include 文件包含#define 定义宏预定义的宏:常考的笔试面试题:(C语言中与指针相关的知识点有哪些)条件编译封装调试信息宏函数封装提示错误信息宏函数   程序员所编写的代码并不能被真正的编译器编译。需要一段程序把代码翻译以下   翻译的过程叫做预处理,负责翻译的程序叫做预处理器,被翻译的代码叫做预处理指 令,以#开头的代码都是预处理指令 查看预处理的过程  gcc -E code.c 把预处理的结果显示到终端上  gcc -E code.c

2021-07-29 18:46:11 309

原创 字符串操作相关str函数+简易通讯录

复习: 字符串:   由字符组成的串型结构,’\0’是它的结束标志     存在形式:       字符数组:栈内存,值可以修改,要为结束标志 ‘\0’ 预留位置       字符串字面值:代码段,只读,值不可以被修改,修改会产生段错误,末尾会隐藏一个’ \0’ const char* str = “hehe”; sizeof(“hehe”) = 5 末尾由 ‘\0’ sizeof(str) = 4 str是指针,字节恒为4|8 一般使用字符串字面值给字符数组初始化 char str[] = “hehe”

2021-07-27 18:53:02 317

原创 字符与串与字符串

复习: 指针数组与数组指针: ​ 指针数组:成员是指针的数组 ​ int* arr[10]; ​ 数组指针:专门用于指向数组的指针 ​ int (*arr)[10]; 指针与数组名的区别: ​ ​ 数组名是数组的首地址,数组名与数组的内存之间是映射关系,相当于一个特殊的指 针,是常量,是不能修改的 ​ ​ 数组作为函数参数时,会蜕变成指针,所以长度才会丢失,因此需要额外传递长度参数 ​ ​ 所以数组名是可以解引用的,如果指针指向数组,指针可以使用中括号来使用,也就 是指针可以当作数组使用 ​

2021-07-27 18:46:45 212

原创 指针与数组,函数递归,堆内存

什么是指针   类型定义指针变量整型数据代表了内存编号 为什么要使用指针   1、函数之间需要共享变量、输出参数   2、提高传参效率(指针变量4/8字节)   3、使用堆内存时 如何使用指针:   定义: 类型* 变量名_p     变量名以p结尾,与普通变量以示区分     一个*不能连续定义指针变量     初始化为NULL     类型决定了能访问的字节数   赋值: 变量名_p = &变量名 或者 malloc(4)     也可以在定义时直接赋值 注意:地址必须有权限且有意义   解引

2021-07-21 18:43:33 243

原创 与指针的初次邂逅

什么是指针   指针式一种特殊的数据类型,使用它可以定义指针变量,指针变量中存储的也是整型数据,它代表了内存编号,通过这个编号可以访问对应的内存 为什么要使用指针   1、函数之间是相互独立,但有时候需要共享变量     传参是单项值传递     全局变量容易命名冲突,不建议大量使用     使用数组还需要传递数组长度     命名空间是独立的,但是地址空间是同一个,所以指针可以解决这个问题   2、由于函数之间传参是值传递(内存拷贝),对于字节数较多的变量,值传递效率 较低,如果传递的是变量的地址只需要传

2021-07-20 20:23:37 120

原创 不会有人连我都下不过吧——五子棋

复习: 自定义函数: ​  1、函数声明     告诉编译器函数的格式,方便它检查调用这的参数、返回值   2、隐式函数     当调用函数时如果没有函数声明和定义,编译器会猜测函数的格式, 函数的参数按照调用者提供的实参猜测,返回值默认猜测为int类型     C89:完全猜对,没有警告     C99:完全猜对,也会警告   3、函数定义     函数的定义如果出现在调用之前,可以省略声明   4、函数传参 值传递:   普通变量,函数之间不能共享同名变量(局部) 址传递:   数组,数组长度会丢失,需

2021-07-19 19:37:32 115

原创 程序员的每一天(Day6)——实现100的阶乘,自定义函数的练习

一、进制转换: 为什么要使用二进制、八进制、十六进制? ​  因为现在的CPU只能识别高低两种电流,只能对二进制数据进行计算二进制虽然可以直接被CPU识别来计算,但是不方便书写、记录,所以把二进制的数据先转换成八进制的数据是为了方便记录到文档中 ​  随着CPU的不断发展位数不停增加,由早期的8位逐渐发展到现在的64位,因此八进制不再能满足需求,所以发展出了十六进制,由于历史原因八进制还不能完全地退出历史舞台。 十进制转二进制:(转其他进制) ​  求余法:用2对数据求余,记录余数,然后继续对商求余,直到商

2021-07-16 18:59:15 397

原创 小游戏:推箱子与推箱子简化版

  在第一版的代码中,将人在目标点上以及箱子在目标点上另外输出,在后续的获取方向键并处理时,只需减去人和箱子的数字就可以刷新目标点的显示,不会出现“吃”目标点的情况。   而在第二版的代码中,使用偏移值的改变来简化代码,只需通过方向键的按键活动来改变偏移值,就可实现通过两个嵌套的if语句来进行人、箱子、目标点的改变与刷新。 以下是第一版的推箱子代码: #include <stdio.h> #include <getch.h> #include <stdlib.h>//sy

2021-07-14 19:50:39 273 1

原创 程序员的每一天(Day5)——简单的老鼠走迷宫+推箱子

一、跳转语句 goto 可以在函数内任意跳转 ​ 它有可能会破坏已经设计好的分支、循环语句,因此绝大多数公司禁止使用 ​ 但是它在驱动编程时特别适合用于处理异常 ​ 标签名: ​ 。。。 ​ goto 标签名; 练习1:不使用循环语句来计算N的阶乘 #include <stdio.h> int main(int argc,const char* argv[]) { int N = 0,num=1; printf("请输入N的值:"); scanf("

2021-07-13 16:49:39 188

原创 程序员的每一天(Day4)

一、常量   什么是常量:程序在运行期间数值不能变化的叫常量   100   默认int   100u  unsigned int   100lu  unsigned long   100llu  unsigned long long   100l    long   100ll   long long ​ 3.14 默认double ​ 3.14f float ​ 3.14l long double ​ 问题:100年有多少秒,忽略闰平年? ​ 答 :#define SEC(

2021-07-10 11:21:17 109

原创 程序员的每一天(Day3)

C语言简介: BCPL->newB->C->UNIX->Minix->Linux->gcc C语言诞生于1970-1973年,在肯·汤普逊和丹尼斯·里奇(主导)的主导编写下完成,归属于美国贝尔实验室。 C语言是专门为了编写操作系统而诞生的语言,所以天生适合硬件编程,以运行速度快而著称,也非常适合实现数据结构与算法。 由于出现的时间过早,C语言是存在非常多的缺陷的,。也没想到普通人也能使用C语言编程,因此就存在缺陷,但是前辈们总结了一些避免的经验 《C语言的陷阱与缺陷》 C

2021-07-08 19:34:58 99

原创 程序员的每一天(Day2)

网络相关的非系统命令: ​ ftp+ip地址+输入用户名和密码 ​ 采用明码传输,不够安全,有可能被窃听,一般只在公司内部使用 ​ telnet+ip地址+输入用户名和密码 ​ 采用明码传输,不够安全,有可能被窃听,一般只在公司内部使用 ​ 用于远程登录一台服务器进行使用 ​ ssh+用户名@ip地址+密码 ​ 采用加密方式传输,因此比较安全 ​ exit 退出 其他相关命令: tar 压缩\解压文件 -zcvf

2021-07-08 18:47:38 110

原创 程序员的每一天(Day1)

学习工具、网站、方法: 分享代码的平台:Github(上传每个项目)、码云 总结知识点平台:CSDN、博客园---(每周发布一篇总结博客) 笔试面试题:[牛客网](https://www.nowcoder.com/)(专项练习、剑指offer)、[力扣](https://leetcode-cn.com/)、[pat(计算机程序设计能力考试)](https://www.patest.cn) 问答网站:[思否](https://segmentfault.com/)、知乎、 思维导图:xmind(总结归纳知识

2021-07-07 19:11:31 160

空空如也

空空如也

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

TA关注的人

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