自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 python练习:1.文件去除空行和注释

读取文件 cdays−4-test.txt 内容,去除空行和注释行后,以行为单位进行排序,并将结果输出为 cdays−4-result.txt。 1 #!/usr/local/bin/python3 2 #-*- coding = utf-8 -*- 3 import os 4 import sys 5 6 oldfile = open("cdays-4-test.tx...

2019-08-20 16:58:29 4071

原创 TCP/IP 2.链路层

链路层:以太网和IEEE802分装1》 以太网不是一项技术而是由几个公司一起开发的标准 CSMA/CD冲突检测技术 32bit(IP地址)48bit(MAC地址)2》 IEEE802封装802.3针对CSMA/CD网络802.4针对令牌选线网络802.5针对令牌环网络这三者的共同特性由802.2标注来定义,那就是802网络共有的逻辑链路控制。3》 封装格式两种帧格式都采用48bi...

2019-07-22 10:51:50 190

原创 TCP/IP 1概述

概述:分层链路层:处理与电缆(或其他任何传输媒介)的物理接口细节。网络层;处理分组在网络中的活动,例如分组选路。运输层:为两台主机上的应用程序提供端到端的通讯。应用层:处理特定的应用程序细节。1》实例:运行FTP的两台主机大多数的网络应用程序都被设计成客户-服务器模式双方都有一个或多个协议进行通讯应用程序通常使用户进程,而下三层一般在内核执行应用层关心程序细节,下三层处理通...

2019-07-22 10:07:48 217

原创 STL学习笔记1

1.STL六大组件1.容器(containers):存放数据,如vector、list、deque、set、map2.通用算法(algorithms):如sort、search、copy、erase.3.迭代器(iterator):迭代器分为五种input迭代器,output迭代器、正向迭代器(哈希表)、双向迭代器(list 、map、set)、随机迭代器(vector和双端队列)。(栈队列...

2019-05-06 09:42:58 288

原创 C++ 笔记:函数堆栈调用&调用约定&形参默认值

1.通过加断点—调试----窗口-----转到反汇编可以查看函数的堆栈调用过程:#include<stdio.h>int sum(int lhs, int rhs){ int temp = lhs + rhs; return temp;}int main(){ int a = 10; int b = 20; int rt = 0; ...

2019-05-05 19:21:02 327

原创 进程间通信-管道

1.为什么要进行多进程编程为了解决一个复杂问题,这个任务需要同时处理几件事,一个任务有多个子任务例如:浏览器后台需要处理流量监控,安全监控等接收用户输入。2.一个进程的数据怎么从一个进程到另一个进程进程间通信,方式有:管道,信号量, 共享内存 、消息队列、socket网络通信实质上也是进程间通信。3.管道(进程间传递数据的)无论是有名管道还是无名管道:在同一时刻只能是一端读一端写,是...

2019-04-21 22:15:57 134

原创 信号底层实现机制&进程替换

1.异步处理两个以上进程或线程执行互不影响,同时向下执行,当某个时刻,一个进程或线程会通过系统机制通知其他进程或线程2.同步处理一个进程或线程的执行,需要依赖其他的进程或者线程的执行3.信号的发送kill(1234, SIGINT);//SIFINT == 2底层调用sys_kill(1234, 2);信号触发中断机制,触发中断处理程序,调用信号处理函数。4.信号处理函数被注...

2019-04-21 22:14:22 241

原创 写时拷贝&父子进程文件共享&信号使用

父子进程关系父子进程代码段永远是共享的1.数据:(1)全局变量(2) 局部变量局部变量以及全局变量都是在堆区,而堆区数据不共享malloc仅仅开辟虚拟空间,真正开辟物理空间是在程序中使用开辟的空间时。fork之后有写时拷贝技术fork之后,子进程会拷贝父进程的pcb结构,然后对PCB里面的数据做修改,父进程的页表直接拷贝给子进程。父子进程共享所有的数据空间。当父子进程任意一个进程...

2019-04-21 22:11:45 505

原创 文件操作函数&用户态切内核态的过程

1.Linux上编程完成文件操作:c语言:fopen fread fwrite fclose fseek (库函数)Linux:open read write close seek stat (系统调用)2.系统调用函数内核函数提供给上层的接口,调用在用户态,执行在内核态例子:open函数的系统调用1.触发)0X80中断2.保存程序的上...

2019-04-21 22:10:10 726

原创 进程命令&用户命令

1.进程和程序的概念进程:运行中的程序,执行时将程序加载到内存上,进程是动态的概念程序:存储在磁盘上的可执行的二进制文件c&c++源代码-----》编译-------》链接---------》程序Java源代码-----》编译------》字节码文件 (JVM Java的虚拟机)进程类似于演奏过程,程序类似于乐谱2.进程的五种状态转化图:运行:CPU正在执行进程中...

2019-04-21 17:18:57 482

原创 Linux c程序的编译&链接

Linux下每一步生成文件的后缀源代码 预编译 编译 汇编 链接.c .i .s .o a.out1.预编译:gcc -E .c -o .i处理预编译指令,删除注释2.编译:gcc -S .i词法、语法、解析,代码优化生成符号3.汇编:gcc -c .s可重定位的二进制目标文件...

2019-04-21 15:54:17 178

原创 Linux下C程序的4G空间布局

128G不可访问区char *p = NULL;strcpy(p, "hello");//error程序崩溃的原因访问了不可访问区

2019-04-21 15:47:42 187

原创 gdb

1.Linux调试工具 gdb源代码-------》可执行文件 (Linux下默认)release版本 发行版本debug版本 开发版本 可调试版本(添加了一些debug段)gcc -c main.c -g编译过程中加入debug信息gcc -c main.c -g链接阶段不会加入debug信息gcc -o main main.o2.调试对象:debug 可以单...

2019-04-21 15:46:37 104

原创 链接文件&库文件

1.Linux下文件类型目录 普通 管道 链接 设备2.链接文件在Linux上链接分为两种;(1)软连接:符号链接相当于windows上的快捷方式,存储的是源文件的存储路径,软链接和源文件使用不同inode节点,删除源文件,符号链接失效创建: ln -s 源文件 链接文件2)硬链接:相当于源文件的别名,和源文件使用同一个inode节点创建:ln 源文件 链接文件3.Linux...

2019-04-21 15:44:16 767

原创 Linux文件压缩

文件压缩在Windows下通过第三方软件来完成 7Z/快压Linux使用 tar , gzip打包:tar cf xxx.tar filelist (c–》创建, f—》指定目标是文件而不是设备)压缩:gzip xxx.tar -----》 xxx.tar.gz解压缩:gzip -d xxx.tar.gz解包:tar xf xxx.tar ...

2019-04-21 15:39:38 124

原创 文本编辑(普通文件)vi/vim

1.三种模式:命令模式、插入模式、末行模式命令模式----》插入模式:a ,i ,o ,O插入模式----》命令模式: ESC命令模式----》 末行模式: :/ ?2. 末行模式:q 退出: w 保存: w newfile 另存为: wq 保存退出:q! 强制退出: num 跳到n行:set nu 设置行号:set nonu 取消行号/stri...

2019-04-20 20:50:20 143

原创 Linux文件管理命令

1.什么是操作系统?操作系统是管理软硬件资源,并为用户提供与计算机交互的一种软件。2.Linux和window操作系统的区别?Linux操作系统:1.免费的2.开源的3.允许多用户同时登陆系统工作4.内核相对小Windows:1.不开源2.不免费两种系统目录结构:/bin: 存储系统所使用的命令的可执行文件/home:普通用户的家目录/dev:外部设备/proc:虚拟...

2019-04-20 20:23:34 147

原创 复习-知识点总结(1)

1.有名管道和无名管道的区别?答:管道是半双工的,有名管道的名字等属性信息在磁盘上,数据在内存上,无名管道全部在内存上。有名管道可以任意两个进程间进行通信,而无名管道只可以在父子间进程进行通信。2.进程和线程的区别?答:线程是进程内部的一条执行路径,进程是一个正在运行的程序。在Linux系统下线程与进程实现是一样的,线程就是一个轻量级的进程。进程间通信的方式:管道、共享内存、信号量、信号、消...

2019-03-13 20:44:35 107

原创 vim使用

一、vim的定义?vim是从vi发展出来的一个文本编辑器。二、vim的三种模式基本上vi/vim分为三种模式,分别是命令模式(Command mode)、输入模式(Insert mode)和底线命令模式(last line mode)。刚启动vi后,进入的是命令模式,通过“i”进入输入模式可以开始编辑文本,通过“:”进入底线命令模式可以开始编辑命令。按esc,可以退出输入模式,切换到命令...

2019-03-10 18:39:32 130

原创 Linux下如何编写一个简单的Makefile文件

一、Makefile基本知识点1.makefile文件关系到整个工程的编译规则。(一个工程中的源文件不计其数,其按照类型,功能,模块分别存放在不同的目录中)2.Makefile定义了一系列的规则来指定,那些文件需要先编译,那些文件需要重新编译。3.makefile像一个shell脚本一样,其中也可以执行操作系统的命令。4.makefile一旦写好,只需要一个make命令就可以使得工程完全自动...

2019-03-10 18:07:58 9768 2

原创 内存管理

本文将先从进程内存管理出发,然后到内核中的内存管理1.进程与内存?所有的进程都必须占用一定数量的内存,它或是用来存放从磁盘载入的程序代码,或是存放取自用户输入的数据等等。不过进程对这些内存的管理方式因内存的用途而不一样,有些内存是事先分配的并且统一回收的,而有些却是按照需要动态分配和回收的。对于任意一个进程都会涉及5个数据段。代码段:代码段用来存放可执行文件的操作指令,也就是说它是可执行程...

2019-03-07 15:25:16 112

原创 寻找无序数组中的第K大元素

分析:方法一:排序法,先把这个无序数组进行排序,假设按照从小到大排,则第k个元素就是数组中的第k大元素。排序的时间复杂度最快为o(nlogn)下面用快速排序实现:#include&lt;iostream&gt;template&lt;typename T&gt;T partition(T* arr,int low,int high){ int tmp=arr[low]; whil...

2019-01-23 17:31:33 1897

原创 快速排序及优化

1.快速排序基本思想:Quick Sort基本思想通过一趟排序,把待排序列分为独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可以分别对这两部分记录继续进行排序,已达到这个待排序列有序。一趟快排的具体做法,设两个指针low和high他们的初始分别为low和high,设基准为pivotkey,则首先从high所指位置起向前搜索找到第一个关键字小于基准的值,把它放在low的位置,然后...

2019-01-23 15:14:32 104

原创 算法学习笔记(2):带头结点的BST树

BST树(二叉搜索树/二叉排序树)特点:1.不允许搜索码重复2.根大于左小于右与堆的区别:堆根大于左和右,左右怎么排无关,二叉排序树则左右有序,中序遍历是从小到大。//插入节点bool InsertItem(BsTree &amp;bt,keyType kx){ BstNode *pa=bt.head; BstNode *p=bt.head-&gt;parent; while(p...

2019-01-22 17:46:00 187

原创 C++学习笔记(8)顺序容器-vector

1.vector是STL中最常见的容器,它是一种顺序容器,支持随机访问。vector是一块连续分配的内存,从数组安排的角度看,和数组及其相似。不同的地方就是:数组是静态分配空间,一旦分配了空间的大小,就不可以改变了;而vector是动态分配空间,随着元素的不断插入,它会按照自身的一套机制不断扩充自身的容量。2.vector的扩充机制:按照容器现在的容量的一倍进行增长。vecto容器分配的是一块...

2019-01-22 15:39:16 145

原创 c++学习笔记(9):观察者模式

结合map实现观察者模式1.观察者:观察事件并分发(给这个事件感兴趣的监听者)2.监听者:处理事件一个事件可能存在有一个监听者集合对它感兴趣。所以用到map、与vector容器。//观察者class Observe{public: typedef std::map&amp;lt;int,std::vector&amp;lt;const Listener*&amp;gt; &amp;gt; MMAP;//类型重定...

2019-01-22 13:30:06 93

原创 c++学习笔记(7)继承与多态

1.继承的作用:代码复用2.派生类继承基类的什么东西:  除了基类的构造和析构函数以外的所有成员3.public: 任意位置都可以访问 protected: 本类类中,子类类中访问 private: 本类类中访问 基类中不同的访问限定符下的成员以不同的继承方式在派生类中的访问限定public  protected   privatepublicpu...

2019-01-19 11:38:13 104

原创 Linux学习笔记(5)fork总结以及源码剖析

1.进程的层次每个进程都有父进程,父进程也有父进程,形成了一个以init进程为根的家族树。2. 进程的创建之fork()Linux系统下,进程可以调用fork函数来创建新的进程,调用进程为父进程,被创建进程为子进程。# include &lt;unistd.h&gt;pid_t fork(void);//fork函数的接口fork函数会返回两次,fork函数向子进程返回0,并将子进...

2019-01-03 20:41:39 251

原创 shell编程(Linux)

C语言:编译型,main.c-》main.exe,执行效率高,开发效率低。shell编程:解释型main.sh通过需要通过一个解释器,解释执行main.sh执行效率高开发效率低。Python:解释型语言。脚本其实是传给解释器的参数,脚本主要用在系统维护上。shell的基本语法1.变量(1)本地变量赋值时等号左右不能有空格,判断时等号左右用空格隔开。赋值时单引号和双引号无区别,当右...

2019-01-02 23:34:41 101

原创 Linux学习笔记(4)socket收发消息原理剖析

Linux环境下“一切皆文件”,套接字被视为文件描述符,1.创建套接字#include &amp;lt;sys/type.h&amp;gt;#include &amp;lt;sys/socket.h&amp;gt;int socket(int domain,int type,int protocol);//成功创建返回一个文件描述符,否则返回-1//1.domain:指示协议族的名字,如AF_INET为IPv4//2...

2019-01-02 23:31:08 481

原创 PHP学习笔记:利用Session限制未登录用户的访问

利用Session实现登陆当没有用户输入相关登陆信息时,显示登陆表单页面(5-14.php) ;当有用户登录(表单登陆按钮被按下)时,视情况显示不同页面:情况1:当验证用户的用户名和密码不能通过时,显示错误信息(5-14.php)情况2:当验证用户的用户名和密码通过后,为用户的Session变量赋值,并转到欢迎页(管理页)(5-15.php);当登陆成功后,可以注销登陆,即删除销毁该用户...

2018-12-08 17:13:48 2485

原创 C++学习笔记(6)通用内存池—智能指针

内存池不依赖某个类存在,针对内存池中的每一个资源进行组织结构,要想申请内存,先得知道mdata的数据类型,其次得知道指针域指向哪里。class Node//嵌套的Node类,表示内存池的数据结构 { public: T mdata;//相当于 char mdata[sizeof(T)] Node* pnext; public: Node():pnext(NULL){} };...

2018-12-08 11:06:12 931 1

原创 C++学习笔记(5)迭代器

迭代器:设计了一个统一的遍历容器的方式。这种设计模式叫做迭代器模式。容器中对数据结构进行了一个封装,要想遍历整个数据元素,用普通指针是无法访问容器的数据结构。所以需要设计一个面向对象的指针来访问。可以让容器中提供begin()和end()这个接口,用面想对象的指针通过这两个接口就可以遍历这个容器。begin()//指向第一个有效元素的位置。end()//指向最后一个有效元素的后继的...

2018-11-25 17:17:28 94

原创 静态链表(数据结构)

静态链表:结构体变量中包含数据域和游标域typedef struct Node{ ELEM_TYPE mdata;//数据域 int cursor;//游标}SNode;静态链表:1.数组的下标为0的元素的游标域存放的是未使用链表的第一个节点的下标。2.数组的最后一个元素(SLIST_SIZE-1)存放的是第一个有数据值得元素的下标。3.最后一个元素相当于单链表的头结点。...

2018-11-25 12:40:09 321

原创 c++学习笔记(4)c与c++的区别

1.函数的默认值c++可以给形参设默认值,一般如果函数有声明,默认值放在声明里,默认值自右向左依次设计(压栈的时候是从左向右所以匹配的时候为从右向左)。默认值不能重复赋值。2.inline函数:inline修饰的函数叫内联函数。2.1内联函数的特点为:在函数调用点直接展开。2.2内联函数的选择:当函数执行的开销&amp;lt;函数开栈的开销时,即函数体较小时 建议使用内联函数。(inline函数...

2018-11-23 23:21:20 102

原创 linux学习笔记(3)库 静态库、 共享库

1.库的定义:(1)库是预先编译好的方法的集合。(2)Linux上库的命名一般为libxxx.a(静态库)或者libxxx.so(共享库)(3)库文件常放的地点为/lib或者/usr/lib,库对应的头文件一般放在/usr/include中。2.静态库的生成若有两个方法int add(int x,int y),int main(int x,int y)分别在两个文件夹add.c和max....

2018-11-23 21:12:45 83

原创 Linux学习笔记(2)makefile文件以及如何用gdb调试程序

1.在编译器底层有Makefile,通过make这个命令完成自动化编译。makefile管理工程,实现自动化编译。我的实例里包含main.c add.c max.c三个c程序。我们需要写一个Makefile文件,告诉make命令如何去编译链接这几个文件。(1.)如果这个工程从未编译,那么需要编译所有的c文件并且链接。(2.)如果只是个别c文件被修改,那么只编译被修改的文件,并且链接最终文件...

2018-11-23 20:30:23 448

原创 Java集合框架(3)Set

Set是一个集合,它可以包含一系列不重复的元素。Set接口与List类似,Set在java中只是一个接口,它本身只是声明了Set类应当提供的操作功能,但并未真正实现。//HashSetimport java.util.*;public class TestHashSet{public static void main(String[] args){ HashSet&lt;S...

2018-11-22 18:05:05 171

原创 Java集合框架(2)List,LinkedList

List是java中一种常见的容器。所谓容器,是指它能够容纳其它对象。//利用ArrayList实现完成一个栈结构import java.util.*;class MyStack&lt;T&gt;{ private ArrayList&lt;T&gt; al = new ArrayList&lt;T&gt;(); public boolean push(T e...

2018-11-22 18:00:53 139

原创 Java集合框架(1)

集合类都在java.util包下。Java的集合框架提供了操作一组数据的很多方法,这些方法我们直接调用,不用自己去实现。利用java类库帮我们在程序设计中完成数据结构课程中的各种对象。Collections框架中,主要有4个接口:Collection 表示集合、Set 不允许重复的集合、List可以有重复元素的集合、Map 键-值 映射对集合的特点:用于存储对象的容器(存储对象的引用),集合...

2018-11-22 17:57:10 93

空空如也

空空如也

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

TA关注的人

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