- 博客(35)
- 收藏
- 关注
原创 Linux日常总结:cookie与session
参考:https://www.cnblogs.com/lonelydreamer/p/6169469.htmlcookie和session出现的原因其实它俩之所以出现,就是为了解决HTTP协议无状态的缺陷的。HTTP协议本身是无状态的,这和它本来存在的目的是一样的,因为客户端每次只需要在服务器上下载某些文件,客户端和服务器并没有太大的意义去记录彼此过去的行为,但是人总是爱偷懒的嘛,作为用户,如...
2019-01-18 15:09:05
615
原创 C++:强制类型转换
强制类型转换C++和C语言存在四种基本类型:整型,浮点型,字符型,布尔型。在C语言中,程序里时常会发生隐式类型转换和强制类型转换,但是他们却没有明显的区分,这就会让我们程序猿耗费多余的精力去区分它们,因此在C++里,就添加了static_cast、const_cast、reinterpret_cast、dynamic_cast,explicit四个关键字,来让我们程序猿很好的区分哪儿是隐式类型...
2018-08-13 08:22:21
1415
原创 常出现程序崩溃的几种状况
常出现程序崩溃的几种状况程序崩溃对于程序猿来说,时经常出现的问题,如果你都没有出现过,那大佬快收下我的膝盖吧。程序崩溃一般都发生在运行时期,而崩溃的原因一般都是程序猿的失误所导致的,在这里我就总结了这几种程序崩溃的读取未赋值的变量这个错误一般是由于程序猿粗心大意,没有给变量初始化和赋值,导致该变量的值为脏值。函数栈溢出函数栈溢出一般是由两种情况引起的: 1、定义了一个...
2018-08-11 08:41:21
8960
原创 C++:四种智能指针
智能指针智能指针在C++中非常常用,在学习指针指针的时候,发现创造它的大佬太牛逼了,为了以后学习,我就对它进行了一些总结为马产生了智能智能在平时写代码的时候,时常会忘记释放自己动态开辟出来的资源,因此我们在处理相关逻辑的时候就会变得异常的谨慎,但是即使这样,有一些隐形的一些问题,还是会导致资源被泄露了,让人防不胜防啊。有这样的困惑,就有大佬来帮我们解决这个困惑了,这不大佬们就创造出了智...
2018-08-08 21:16:08
962
原创 Linux:centos7更换阿里yum源
最近打算写python爬虫,但是这需要urllib2的一些库,这里就需要来安装python-pip来安装一些所需要的库,但是我使用的centos7的yum源是默认的,下载不了,所以就需要更改一下yum源改为国内的一些知名的yum源,我就将我的改为了阿里源,具体的操作步骤如下:1、打开yum源配置文件 cd /etc/yum.repos.d/ 2、备份一下原有的源,以备出错了可以更改回来...
2018-08-01 07:27:11
1723
原创 Linux:进程间关系和守护进程
进程间关系几个基本概念1、进程组 每个进程不仅有一个进程ID,还属于一个进程组。进程组是一个或者多个进程的集合。每个进程组拥有一个唯一的进程组ID。每个进程组可以有一个组长进程。组长进程的标识是,其进程组ID等于其进程ID。组长进程可以创建一个进程组,创建该组中的进程,然后终止。只要在某个进程组中一个进程存在,则改进程组就存在,这与其组长进程是否终止无关。 如上图,sleep了三个...
2018-06-01 17:33:53
257
原创 死锁问题
死锁的定义如果一组进程中的每一个进程都在等待仅由改组进程中的其它进程才能引发的时间,那么该组进程就是死锁的。死锁的产生几种情况竞争不可抢占性资源引发死锁竞争可消耗资源引发死锁进程推进顺序不当引发死锁产生死锁的四个必要条件互斥条件请求和保持条件不可抢占条件循环等待条件互斥条件互斥条件也就是进程之间的互斥性,当一个进程访问某种资源时,该资源只能被一...
2018-05-28 16:03:58
284
原创 生产者消费者模型和读者写者模型的实现
生产者消费者模型和读者写者模型使我们常见的关于线程同步与互斥有关的模型,它们的实现对理解线程同步互斥有很好的帮助。生产者消费者模型如上图,生产者生产一个产品并放到仓库中,消费者从仓库中取产品,生产和消费者两个动作是互斥的,而生产者和生产者,消费者和消费者之间是同步的。具体代码实现如下:#include <stdio.h> ...
2018-05-28 12:12:57
295
1
原创 数据结构之二叉搜索树的实现
二叉搜索树二叉搜索树的定义二叉搜索树又被称为二叉排序树,它或者是一颗空树,或者是具备以下性质的二叉树若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左右子树也分别为二叉搜索树二叉搜索树的操作它属于二叉树,所以它的初始化和创建销毁都和二叉树相同,不同的主要就是插入,查找和删除。插入 在...
2018-05-28 11:58:45
193
原创 练习
题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。思路:因为该数字超过了数组的长度的一半,因此该数在数组出现的次数都超过了其他所有数字出现次数之和,所以我们可以使用下面这个算法来求解。算法:初始化一个数组arr,并求出该...
2018-05-27 11:34:19
171
原创 线程的同步和互斥
学习线程的同步和互斥,我们首先需要明白的就是同步和互斥,它们是为了什么。同步是为了在安全的条件下,使线程具有顺序性,而互斥是为了保证数据的安全性。线程互斥(mutex)为神马需要线程互斥?大多数情况,线程使用的数据都是局部变量,变量的地址空间实在线程栈空间中,这种情况下,变量归属单个进程,其他线程无法获取该变量。但有时,很多变量都需要线程共享,这些共享的变量称为共享变量,可以通...
2018-05-24 11:06:34
275
原创 (Linux)线程基础
什么是线程线程是比进程的执行粒度更细的一个执行流(线程是进程的子集),是进程内部的执行分支(可理解为线程是在进程的地址空间内运行),是调度的基本单位。一个进程至少有一个执行线程Linux没有真正的线程,但它用进程来模拟实现线程,而这种进程被称为轻量级进程。线程用TCB管理,但是Linux下没有TCB,因此Linux用PCB模拟TCB,创建进程只有创建PCB,再分配资源即可,并且cup认...
2018-05-21 11:22:36
165
原创 C语言实现堆
堆的概念如果有一个关键码集合K={K0,K1,…,Kn-1},把它的所有元素按完全二叉树的顺序存储方式存储在一个数组中,并满足: Ki <= K2*i + 1且Ki <= K2*i + 2(Ki < K2*i + 1且Ki >= K2*i + 2)i = 0,1,2,…,则称为大堆(或小堆)。通俗点说,堆就是一个任意节点都小于(或大于)其左右孩子节点的一个二叉树。...
2018-05-21 10:34:25
10829
1
原创 TCP(传输控制协议)协议段格式
TCP全称传输控制协议(Transmission Control Protocol),是传输层的一条可靠地重点协议。TCP协议段格式 16位的源端口号:标示该进程自己 16位目的端口号:标示我要向哪个进程发送数据 32位的序列号/32位确认序列号:为了满足全双工的安全机制而存在的,它有以下四个功能:保证基本的可靠性是数据可以按序到达支持超时重传高效 4位的首部长度:表示...
2018-05-18 18:00:33
1087
原创 用阿里云服务器充当TCP服务器的一些注意事项
最近几天学了TCP后就不仅仅想让其可以再局域网为生效,想让其在广域网访问,因此就将TCP服务器放在阿里云服务器上,就出现了下面的情况 显示bind错误,但是查看8080端口时,显示没被使用,这就让我有点懵逼了,最后请教了下大佬才知道,要通过广域网通信的时候,局域网和局域网之间通过路由器来通信,但是当我们使用阿里云ECS服务器的公网IP地址时,会被路由器自动的屏蔽掉,因此,我们此时填写IP时就不能...
2018-05-10 17:47:11
8812
2
原创 C实现迷宫问题
迷宫问题分析 用二维码创建一个m*n的迷宫地图,1表示通路,0表示障碍,从迷宫中寻找出路。迷宫问题大致有三种情况实现:使用递归和非递归方法实现简单的迷宫问题如果迷宫有多条出路,求最短出路针对复杂迷宫问题寻找最短出路下面对其依次进行分析:1、使用递归和非递归方法实现简单的迷宫问题 这里的简单迷宫问题就是只有一条出路,且出路不带环,实现它的主要思路就是应用回溯的思想...
2018-05-04 13:09:33
476
原创 进程间通信(Linux)
进程间通信(IPC,InterProcess Communication)是指在不同进程之间传播或交换信息。IPC方式包括管道(匿名管道和命名管道),消息队列,共享内存,信号量等。一、管道管道是Unix中最古老的进程间通信方式,我们把从一个进程连接到另一个进程的一个数据流称为“管道”。管道(匿名管道)的特点:只能用于具有共同祖先的进程(具有血缘关系的进程)之间进行通信;通常,...
2018-04-30 12:22:07
157
原创 栈和队列面试题
一、最小栈 最小栈其实和栈没有什么区别的,唯一的区别在于最小栈是可以在O(1)时间内得到当前的栈空间里,最小的值。解决这个问题提供两种方法: Round1: 创建一个辅助栈,比较当前元素和辅助元素栈顶元素的大小 ...
2018-04-26 08:20:56
282
原创 Linux文件系统
在Linux下,我们要查看文件信息可以使用ls -l命令[rlh@localhost ~]$ ls -l总用量 14440drwxr-xr-x. 2 root root 25 4月 17 21:42 bitdrwxr-xr-x. 2 rlh rlh 6 3月 29 22:02 Desktopdrwxr-xr-x. 2 rlh rlh ...
2018-04-20 12:39:05
209
原创 Linux的系统调用open,write,read,close,及相关总结
在进行C语言学习的时候我们了解到了C语言相关的一些IO操作,如fopen,fwrite,fread,fprintf,fclose等相关函数,他们都是由C库函数提供的一些函数,是将操作系统的系统调用加以封装,虽说Linux是由C语言实现的,但为了使我们更加的了解Linux,就需要了解更接近与底层的一些IO操作,因此就需要来了解下基本的系统调用—open,write,read,close首先我们来...
2018-04-20 11:32:13
1047
原创 链表经典练习题
链表经典练习题 一、从尾到头打印单链表 因为单链表是有指向的,前一节点只能指向下一节点,因此为了实现从尾到头打印链表可以使用一种非常简单的方法就是递归,先遍历再输出。 代码实现:void LinkListReversePrint(LinkNode* head){ 85 if(head == NULL){ 86 return;//空链表 8...
2018-04-16 14:55:57
23276
5
原创 队列的实现(顺序表和链表)
队列 队列其最主要的特点就是先进先出,因此在用顺序表和链表实现它的时候就要注意,它的入栈和出栈就要使用头插和尾删或者尾插和头插,他们的对应关系不能搞错。队列实现有以下动作:创建队列入队列出队列取队列首元素销毁队列队列的两种实现:顺序表实现://SqQueue.h#pragma once ...
2018-04-12 10:47:20
457
原创 栈的实现(顺序表和链表形式)
栈的实现 要实现栈首先我们需要了解什么是栈,即就是栈的定义。 栈和队列是很想像的,但是他们有一个根本的区别,栈是后进先出,而队列是先进先出,因此要好好区分这一点。实现栈需要实现栈的以下几个动作:创建栈入栈出栈取栈顶元素销毁栈因此它相对于实现顺序表和链表来说是比较简单的,因为实现顺序表、链表往往动作是非常多的。栈的入栈和出栈实现时就是使用头插和头删或者是尾插和尾删,这...
2018-04-12 10:24:20
382
原创 带头结点双向链表的实现
带头结点的双向链表较带头结点的单向链表来说,其思路更加简单,更好实现,但是要注意一点就是双向链表有prev和next两个指针,其指向要思路清晰。 下面是实现代码:\\DLinkList.h#pragma once#include<stdio.h>#include<stdlib.h>#include<stddef.h>typedef char DL...
2018-04-09 18:01:11
339
原创 字符串函数及字符串函数的实现(1)
C语言中关于字符和字符串的操作是非常多的,操作字符和字符串往往就要用到字符串相关的函数。因此在这里我们就先来了解下函数库中的字符串函数,并且自己实现字符串函数。 strlensize_t strlen ( const char * str );字符串是以‘\0’作为结束标志,strlen函数是用于求字符串的字符长度(不包括‘\0’),它的返回值是字符串‘\0’前字符的个数。s...
2018-04-03 15:46:56
361
原创 静态顺序表的实现(C)
引言 要实现静态顺序表,我们首先需要知道什么是顺序表。 顺序表是指用一段地址连续的存储单元依次存取数据元素的线性结构。 顺序表采用的是连续的地址空间,这是与链表的本质区别。对于连续的地址空间,我们一般采用数组,而数组又分为静态数组和动态数组。我们本次要实现的就是采用静态数组的顺序表。 实现静态顺序表的操作静态顺序表的结构体typedef char SeqListType;...
2018-03-29 11:03:15
479
原创 无头结点无环的单链表实现
//linklist.c#include <stdio.h>#include <stdlib.h>#include <string.h>#include "linklist.h"#define TESTHEADER printf("\n============%s=========", __FUNCTION__)//初始化链表void Link...
2018-03-26 17:23:27
217
原创 进程控制
一、进程的创建,终止,等待进程创建 创建进程主要有两个函数fork函数和vfork函数(头文件 unistd.h)。 fork函数创建进程时,它的父子进程代码共享,数据自己各自拷贝一份,也就是所谓的写时拷贝。使用fork函数有这两种情况: 父进程希望复制自己,使父子进程同时执行不同的代码段 一个进程要执行一个不同的程序fork函数调用失败时,主要原因是系统内的进程太...
2018-03-22 11:26:39
157
原创 进程
一、进程的调度算法 进程的调度算法大致分为五种: 1、时间片轮转调度算法(RR):给每个进程固定的执行时间,根据进程到达的先后顺序让进程在单位时间片内执行,执行完成后便调度下一个进程执行,时间片轮转调度不考虑进程等待时间和执行时间,属于抢占式调度。优点是兼顾长短作业;缺点是平均等待时间较长,上下文切换较费时。适用于分时系统。2、先来先服务调度算法(FCFS):根据进程到达的先后顺序执行进程...
2018-03-21 16:51:53
192
原创 Linux开发工具
一、编辑器 WordPress开发人员对常用的代码编辑器进行的评分: 第一名:VIM Vim是WordPress开发人员中最流行的代码编辑器。它是免费的,在Linux开发人员中享有良好的声誉。该编辑器是开放源码并高度可配置的,它提供了跨平台兼容性。此外,它可以在Dos中工作。 Vim可能不会在新用户中受到欢迎,因为它具有一定的学习曲线。以下是Vim附加的部分功能: ·整合...
2018-03-21 12:07:39
251
原创 Linux操作系统的基本指令及相关知识
一、Linux基本指令ls 主要用于查看目录下的所有子目录和文件或者文件名以及其他信息 常用选项 a 列出目录下的所有文件 i 输出文件的i节点的索引 k 以k字节的形式表示文件大小 l 列出文件的详细信息pwd 显示用户所在目录cd 将当前目录改变到指定目录 常用选项 .. 返回上一级目录 ~ 进入加目录touch 新建文件,更改日期时间mkdir 在当...
2018-03-21 09:26:51
140
原创 自定义类型:结构体、枚举、联合
C语言的三种自定义类型:结构体,枚举,联合 一、结构体 1.结构体的声明 struct tag { member-list;//在C语言中定义结构体时,其成员变量不能为空 }variable-list; 例: struct student //最好不要省略结构体标签(tag),否则以后定义结构体变量的时候就必须在此处定...
2018-03-15 09:17:04
150
原创 指针数组,数组指针,函数指针,函数指针数组,指向函数指针数组的指针
指针数组:指针数组可以说成是”指针的数组”,首先这个变量是一个数组,其次,”指针”修饰这个数组,意思是说这个数组的所有元素都是指针类型,在32位系统中,指针占四个字节。 数组指针:数组指针可以说成是”数组的指针”,首先这个变量是一个指针,其次,”数组”修饰这个指针,意思是说这个指针存放着一个数组的首地址,或者说这个指针指向一个数组的首地址。 区分指针数组跟数组指针主要看变量是先跟‘’还是‘[
2018-01-27 11:38:31
137
原创 程序员的养成之路
初入编程之大道,学编程之精髓,日后必当竭尽全力。 做任何事都应该给自己定个目标,在编程之路上我的终极目标的就是super程序员。 在学习编程中,自学才是关键,要合理应用各种资源,寻找相关书籍及相关教学资源。 决定做一件事就要全身心的投入进去,所以以后不要再问啥时敲代码而是应该问啥时玩了。 天美,完美世界,西山居等等游戏制作公司等着我吧,不久我就来了。
2017-11-12 13:44:48
310
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人