自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

雪碧柠七的博客

人生海海

  • 博客(52)
  • 收藏
  • 关注

原创 Docker学习

查看未运行的的containerdocker ps -f "status=exited"或docker container ls -f "status=exited"docker commit命令docker commit: 从容器创建一个新的镜像。OPTIONS说明:a: 提交的镜像作者;c: 使用Dockerfile指令来创建镜像;m: 提交时的说明文字;p: 在commit时,将容器暂停。docker commit [OPTIONS] CONTAINER

2021-05-03 17:29:40 238

原创 中间件学习

中间件参考文档:Go语言高级编程中间件就是非业务的技术类组件,常常使用中间件剥离非业务逻辑。如下是一个简单的web服务,挂载一个简单的路由。package mainimport ( "fmt" "net/http")func hello(wr http.ResponseWriter, r *http.Request) { wr.Write([]byte("hello"))}func main() { http.Handle("/", timeMiddleware(htt

2021-03-24 14:25:13 218

原创 python

title: python学习笔记date: 2019-10-21 03:11:46tags: python学习笔记Python学习Python是一种跨平台的计算机程序设计语言。是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越来越多被用于独立的、大型项目的开发。本文主要记录了在学习python过程中所遇到的一些小知识点,所以很多知识点在随手记录时并未记录地址,所以若有不当,可联系删除。1.__str__ 和__repr__区别.

2020-05-23 22:56:11 343

原创 数据结构 二叉树的遍历(非递归),镜像,完全二叉树判定

先序遍历二叉树(非递归)//非递归前序遍历二叉树void PreOrderByLoop(TreeNode* root){ if(root == NULL) { //空树 return; } ListStack* stack; ListStackInit(&stack); //将根结点入栈 ...

2018-06-14 20:16:47 348

原创 数据结构 二叉树的基本操作(求树的结点数,高度,叶子结点...)

以下代码所测试的树:根据先序遍历结果(带空结点),构造一棵树将树的先序遍历放入数组,空结点用*代替char arr[] = "abd**eg***c*f**";再然后,与递归前序遍历树的方法一样,只是将打印该结点换成创建结点即可。代码实现://根据先序遍历结果(带空结点),构造一棵树TreeNode* _TreeCreate(TreeDataType arr[],size_t size,int*...

2018-06-05 15:22:19 30672 2

原创 数据结构 共享栈(一个数组实现两个栈)

题目解析:代码:#include<stdio.h>#define Max_size 1000typedef char DataType;typedef struct shareStack{ DataType data[Max_size]; int top1; int top2;}shareStack;//初始化void shareStackInit(share...

2018-05-31 10:51:45 1837 1

原创 数据结构 判定字符串是否按照出栈顺序

判定字符串是否按照出栈顺序 代码中所引用头文件源自之前的一篇的完成顺序栈与链式栈博客。题目解析如下:代码如下:#include"seqstack.h"#include<stdio.h>int stackTrue(SeqStack* stack,char* input,char* output){ if(stack == NULL) { //非法输入 return ...

2018-05-30 16:20:30 298

原创 数据结构 两个队列实现一个栈

解题思路:Stack_by_2queue.h#pragma once#include<stdio.h>#include<stdlib.h>#define TITLE printf("\n========================%s==========================\n",__FUNCTION__);#define MaxSize 100...

2018-05-29 11:20:03 181

原创 数据结构 两个栈实现一个队列

解题思路:#pragma once#include<stdio.h>#include<stdlib.h>#define TITLE printf("\n=======================%s=========================\n",__FUNCTION__);typedef char DataType;typedef struct...

2018-05-28 13:37:42 290

原创 C语言实现扫雷小游戏

扫雷小游戏设计思路1.显示游戏界面    若我们需要一个9*9的游戏区域,我们需要设置一个11*11的面板,而只显示9*9部分。2.布置雷     调用rand()函数来获得放置雷的随机坐标,令该点值改为1;3.排雷     ...

2018-05-23 22:45:55 336

原创 数据结构 单链表相关习题3

1.判定两个链表是否相交, 并求出交点解题思路:    两链表若相交,则其最后一个节点必定相同。所以遍历得出两链表的尾节点可得知两链表是否相交。    若两链表相交,则求出两链表长度,相减得其差值len。    较长链表先向后遍历len次,随后两链表同时向后遍历。直到出现两值相同时,该节点即为相交点。//判定两个链表是否相交, 并求出交点 LinkNode* HasCross(LinkNode*...

2018-05-22 19:59:35 244

原创 数据结构 实现一个栈:取栈中的最小值的时间复杂度为O(1)

解题思路:    每次入栈两个元素,一个为将要入栈的value元素,一个位min最小元素。    第一次入栈时,将该元素设为min值,入栈两次该元素。此后,每次入栈value都需和min值比较,若比min值小,则min数据更新为该值。若大于min,则min不变。    此后,先入栈value元素,后入栈min。这样就保证了栈顶元素始终为最小值min。下面上代码:#include"minStack....

2018-05-17 17:48:36 646

原创 数据结构 二叉树的基本操作(递归版本)

此处我们采用孩子表示法来完成遍历:typedef char TreeNodeType;typedef struct TreeNode{ TreeNodeType data; struct TreeNode* lchild; struct TreeNode* rchild;}TreeNode;首先我们先构造一棵树:先序遍历:ABDGHEICFJ中序遍历:GHDBIEAF...

2018-05-17 13:59:42 267

原创 数据结构 单链表相关习题2 (*包含求带环链表环的入口)

1.判断链表是否带环,带环返回1,不带换返回0//判断链表是否带环,带环返回1,不带换返回0int HasCycle(LinkNode* head){ if(head == NULL) { //空链表 return -1; } if(head->next == NULL) { return 0; } LinkNode* low = head; LinkNode...

2018-05-17 12:35:19 213

转载 网络基础 调研Netstat

简介netstat    Netstat是控制台命令,是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息。Netstat用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。    一般用netstat -an 来显示所有连接的端口并用数字表示。    netstat命令的功能是显示网络连接、路由...

2018-05-15 23:43:20 192

原创 网络基础 TCP多进程/多线程服务器

TCP协议TCP协议段格式

2018-05-15 23:18:50 366

原创 网络基础 UDP服务器

UDP协议端格式16位UDP长度, 表⽰整个数据报(UDP⾸部+UDP数据)的最⼤⻓度;如果校验和出错, 就会直接丢弃;UDP特点UDP传输的过程类似于寄信.⽆连接: 知道对端的IP和端口号就直接进行传输, 不需要建立连接;不可靠: 没有确认机制, 没有重传机制; 如果因为网络故障该段无法发到对方, UDP协议层也不会给;应⽤层返回任何错误信息;⾯向数据报: 不能够灵活的控制读写数据的次数和数量;...

2018-05-15 11:42:21 276

原创 网络基础 网络编程套接字

认识IP地址IP地址有两个版本IPv4(32位)和IPv6(128位);IP地址是在IP协议中, 用来标识网络中不同主机的地址;对于IPv4来说, IP地址是⼀个4字节, 32位的整数;我们通常也使⽤ "点分十进制" 的字符串表⽰IP地址, 例如 192.168.0.1 ; 用点分割的每⼀个数字表示⼀个字节, 范围是 0 - 255;认识端口号端口号(port)是传输层协议的内容,标示了这台机器上...

2018-05-15 10:44:30 183

转载 网络基础 UDP/TCP协议

    TCP (Transmission Control Protocol)和UDP(User Datagram Protocol)协议属于传输层协议。其中TCP提供IP环境下的数据可靠传输,它提供的服务包括数据流传送、可靠性、有效流控、全双工操作和多路复用。通过面向连接、端到端和可靠的数据包发送。通俗说,它是事先为所发送的数据开辟出连接好的通道,然后再进行数据发送;而UDP则不为IP提供可靠性...

2018-05-15 09:18:28 196

原创 Linux gdb调试多线程

gdb调试多线程gdb调试多线程的方法和调试多进程相差不多,我们先写一段多线程代码以供测试:#include <stdio.h>#include <pthread.h>void* rout1(void* arg){ printf("I am %s!\n",(char*)arg); return (void*)0;}void* rout2(void* ar...

2018-05-15 00:09:33 2278

原创 Linux gdb调试多进程

gdbgdb是Linux下的调试工具,如果需要调试,则要在编译时加上-g选项,否则无法调试。gdb常用指令:gcc/g++ -g test.c/test.cpp ———-调试前先对源文件进行编译,注意一定要加 -g。 gdb a.out ——— a.out为可已经编译好的可执行文件(当然如果存在语法错误是肯定不能进入gdb调试的)。 list/l 行号 ——- 显示源代码,从指定行号处开始显示,每...

2018-05-14 23:20:17 1888

原创 Linux 守护进程

认识守护进程    守护进程也成为精灵进程,是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待某些发生地事件。守护进程是一种很有用的进程。Linux的大多数服务器就是用守护进程所实现的。     Linux系统启动时会启动很多系统服务进程。这些服务进程没有控制终端,不能直接和用户交互。其他进程都是在用户登陆或运行程序时创建,在运行结束或用户注销时终止,但系统服务进程(守护进...

2018-05-14 15:26:05 497

原创 Linux 进程组/作业/会话

进程组    每个进程除了有一个进程ID之外,还属于一个进程组。进程组是一个或多个进程的集合。通常,它们与同一作业相关联,可以接收来自同一终端的各种信号。每个进程组有一个唯一的进程组ID。每个进程组都可以有一个组长进程。组长进程的标识是,其进程组ID等于其进程ID。    组长进程可以创建一个进程组,创建该组中的进程,然后终止。只要在某个进程组中一个进程存在,则该进程组就存在,这与其组长进程是否终...

2018-05-14 13:55:15 210

转载 Linux 死锁

什么是死锁?    死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。死锁产生的原因及四个必要条件产生死锁的原因主要是:(1) 因为系统资源不足。(2) 进程运行推进的顺序不合适。(3) 资源分配不当等。如果系统资源充足,进程的资源请求都能够...

2018-05-14 09:15:03 197

原创 Linux 线程同步与互斥

为什么线程需要同步与互斥机制⼤部分情况,线程使⽤的数据都是局部变量,变量的地址空间在线程栈空间内,这种情况,变量归属单个线程,其他线程⽆法获得这种变量。但有时候,很多变量都需要在线程间共享,这样的变量称为共享变量,可以通过数据的共享,完成线程之间的交互。多个线程并发的操作共享变量,会带来⼀些问题。        假设两个线程读写相同变量时,线程A读取变量然后给这个变量赋予一个新的值,但写操作需要两...

2018-05-13 21:11:47 128

原创 Linux 线程浅析

什么是线程在一个程序里的一个执行路线就叫做线程(thread)。更准确的定义是:线程是一个进程内部的控制序列。一切进程至少都有一个执行线程。进程和线程进程是承担分配资源的基本单位,线程是调度的基本单位。Linux下线程是轻量级进程。也就是说,Linux下是用进程模拟线程的。每一个用户态线程,在内核中都对应一个调度实体,也拥有自己的进程描述符。 POSIX线程库与线程有关的函数构成了一个完整的系列,...

2018-05-13 16:36:56 301

原创 C语言实现注释转换

此篇博客主要写如何将c风格注释(/*xxx*/)转换为c++风格注释(//xxx).下图即为注释转换的过程图:#include<stdio.h>typedef enum State{ Normal, FOUND_SLAH,//找到/ CPP_State, C_State, FOUND_START//找到*}State;int main(){ FILE* inp...

2018-05-13 14:11:38 345

原创 Linux 编写简易shell,支持输入输出重定向

引用前面写过的代码:https://blog.csdn.net/ihaha233/article/details/79833397将void do_execute(void)替换为新写的void do_shell()即可实现。下面先看代码:#include <unistd.h>#include <sys/wait.h>#include <stdio.h>#...

2018-05-12 22:44:06 786 1

原创 Linux 如何实现信号屏蔽

所需信号集操作函数#include<signal.h>int sigemptyset(sigset_t *set);//初始化set所指向的信号集,使其所有信号对应bit清零int sigfillset(sigset_t *set);//初始化set所指向的信号集,使其所有的对应bit置位int sigaddset(sigset_t *set,int signo);//在该信号集...

2018-05-12 17:44:34 2232

原创 Linux 信号的基本概念及信号捕捉过程

信号的基本概念Linux中信号有64个,常见信号有31个,用kill -l即可查看: 每个信号都有一个编号和一个宏定义名称,这些宏定义可以在signal.h中找到,例如其中定义#define SIGINT 2。所以,使用kill命令时既可以 kill -SIGINT 9527 也可以是 kill -2 9527 其中9527为进程ID。信号处理的常见方式1.忽略此信号2.执行该信号的默认处理过程3...

2018-05-12 16:46:14 470

转载 Linux gdb的安装过程

安装gdb的过程很简单,具体步骤如下:step1:首先检查系统中有没有安装过,有的话用一下命令卸载gdb旧版本step2:安装Texinfo文档系统这个要先切换到rootstep3: 在网址:http://ftp.gnu.org/gnu/gdb下载gdb源码包将源码包放在自己可以找到的位置step4:打开Download目录,用tar -zxvf 命令解压缩你下载的源码包step5:.用以下命令生...

2018-05-12 15:32:54 5134

原创 Linux 网络基础

计算机网络背景独立模式:计算机间相互独立网络互连:多台计算机连接在一起,完成数据共享局域LAN:计算机数量更多了,通过交换机和路由器连接在一起广域网:将远隔千里的计算机都连在一起所谓“局域网”与“广域网”只是一个相对的概念,比如中国范围的广域网也可看做是一个比较大的局域网网络协议OSI七层模型    OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放...

2018-05-10 22:08:09 113

原创 数据结构 单链表相关习题练习

1.逆序打印单链表采用递归的方法即可实现。//逆序打印单链表void LinkListReversePrint(LinkNode* head){ if(head == NULL) { return; } LinkListReversePrint(head->next); printf("[%c] ",head->...

2018-05-10 21:24:17 6435

原创 Linux 将二元信号量P/V操作,封装成动态/静态库,并分别使用并测试

P,V操作     PV操作与信号量的处理相关,P表示通过的意思,V表示释放的意思。     ftok函数,先不去了解它的作用来先说说为什么要用它,共享内存,消息队列,信号量他们三个都是找一个中间介质来进行通信的,这种介质多的是。就是怎么区分开来,就像唯一一个身份证来区分人一样。只要唯一就行,就想起来了文件的设备编号和节点,它是唯一的,但是直接用它来做识别好像不太好,不过可以用它来产生一个号。ft...

2018-04-26 23:34:55 596

原创 Linux 同步与互斥原理,了解生产者与消费者关系

临界资源各进程采取互斥的方式,实现共享的资源称作临界资源。属于临界资源的硬件有打印机、磁带机等,软件有消息缓冲队列、变量、数组、缓冲区等。 诸进程间应采取互斥方式,实现对这种资源的共享。每个进程中访问临界资源的那段代码称为临界区。显然,若能保证诸进程互斥地进入自己的临界区,便可实现诸进程对临界资源的互斥访问。为此,每个进程在进入临界区之前,应先对欲访问的临界资源进行检查,看它是否正被访问。如果此刻...

2018-04-26 17:03:17 316

原创 Linux 进程间通信(管道,消息队列,共享内存)

进程间通信分类管道匿名管道pipe命名管道System V IPCSystem V 消息队列System V 共享内存System V 信号量POSIX IPC消息队列共享内存信号量互斥量条件变量读写锁管道匿名管道#include <unistd.h>功能:创建匿名管道原型int pipe(int fd[2]);参数fd:文件描述符数组,其中fd[0]表⽰读端, fd[1]表...

2018-04-25 17:23:41 333

原创 数据结构 分别实现顺序队列和链式队列

分别实现顺序队列和链式队列实现入队列, 出队列, 和取队首元素顺序队列seqqueue.h#pragma once#include <stdio.h>#include <stdlib.h>#define TITLE printf("\n====================%s====================",__FUNCTION__);#de...

2018-04-15 16:36:04 433

转载 Linux 了解open/read/write/close等文件相关系统调用接口,纵向对比fd与FILE结构体

熟悉open/read/write/close等文件相关系统调用接口1、open函数#include<sys/types.h>#include<sys/stat.h>#include<fcntl.h>int open(const char *pathname,int flags);int open(const char *pathname,int fl...

2018-04-12 18:45:25 261

原创 数据结构 完成顺序栈,链式栈的基本操作

顺序栈的初始化 销毁 入栈 出栈 取栈顶元素 seqstack.h#pragma once#include <stdio.h>#define TITLE printf("\n==========================%s=========================\n",__FUNCTION__);typedef char SeqStackType;ty...

2018-04-11 22:59:17 1270

原创 数据结构 双向链表的简单操作

以下是有关双向链表的一些简单操作,例如增删查改。link.h#pragma once#include <stdio.h>#define TITLE printf("\n========================%s======================\n",__FUNCTION__);typedef char DLinkType;typedef struc...

2018-04-08 20:37:49 162

空空如也

空空如也

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

TA关注的人

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