- 博客(33)
- 收藏
- 关注
原创 博客不先说结论的人
博客不先说结论的人 为了让全文看来有理有据? ………… 然而,我只想拿到结果。 于是我扫了开头,瞄了结尾,踩一下都显得多余,继续寻找答案。...
2018-08-10 09:14:23 222
原创 WIN10 拨号连接下开启移动热点
win10校园网下开启热点 本段文字用以解决win10下无法建立移动热点,错误提示为:我们无法设置移动热点,因为你的电脑未建立以太网,WIFI或手机网络连接。这个问题可能出现在拨号上网连接的设备上。具体步骤如下: 1. 首先用手机或其他设备建立无线热点。 2. 电脑连接步骤1中的热点,电脑端打开移动热点。 3. 电脑端建立拨号上网连接,断开电脑与手机的无线连接。 4.
2017-12-17 14:37:33 25331 5
原创 TCP与UDP协议的比较
1 UDP的特点 UDP提供不可靠的交付,但也有优点: 1) 发送数据前不需要建立连接,减少开销与发送数据的延迟。 2) UDP不使用拥塞控制,不保证交付,减少了复杂的连接状态表,网络的拥塞不会使源主机的发送速率降低。 3) 数据报首部字节比TCP少,节约开销。 所以UDP适用于实时应用,网络拥塞时允许丢失一点数据。 2 TCP的特点 TCP是面向连接的运输层协
2017-07-25 18:59:13 836
原创 路由生产算法
1 路由的一些概念 路由节点: 一个具有路由能力的主机或路由器,它维护一张路由表,通过查询路由表来决定向哪个接口发送数据包。 接口: 路由节点与某个网络相连的网卡接口。 路由表:由很多路由条目组成,每个条目都指明去往某个网络的数据包应该经由哪个接口发送,其中最后一条是缺省路由条目。 路由条目:路由表中的一行,每个条目主要由目的的网络络地址、子网掩码、下一条地址、发送接口四部分
2017-07-24 16:58:39 436
原创 链表翻转,每K个数翻转一次。
链表翻转,每K个数翻转一次,比如链表1→2→3→4→5→6,k=2,翻转后2→1→4→3→6→5,若k=3,翻转后3→2→1→6→5→4,若k=4,翻转后4→3→2→1→5→6。 解题思路: 寻找每一段的开始与结束,对每一段进行翻转。代码如下(代码不含测试用例以及链表的构建): void _ReserveK(Node** begin, Node** end) {
2017-07-23 22:10:27 1437
原创 代理服务器(Proxy Server)与网络地址转换(NAT)
1 代理服务器概念 一个终端通过代理与另一终端进行连接,提供代理的便是代理服务器。 2 代理服务器的原理 1) 客户端与代理服务器连接。 2) 客户端向代理服务器发送数据请求 。 3) 代理服务器向客户端返回数据(如果代理服务器里有需要的缓存数据,直接返回缓存数据,否则,代理服务器向目的服务器请求数据)。 3 常见的代理服务器 1) HTTP代理,采用http协议的
2017-07-21 12:55:46 3712
原创 ARP协议
1 ARP协议概念 ARP协议的目的:得到的主机的硬件地址。原理:源主机发出ARP请求,询问“IP地址是192.168.0.1的主机的硬件地址是多少”,并将这个请求广播到本地网段(以太网帧首部的硬件地址填FF:FF:FF:FF:FF:FF表示播),目的主机接收到广播的ARP请求,发现其中的IP地址与本机相符,则发送一个ARP应答数据包给源主机,将自己的硬件地址填写在应答包中。 2 ARP报
2017-07-20 12:22:16 222
原创 计算机网络下循环冗余检测(CRC)
1 概念 CRC即循环冗余校验码(Cyclic Redundancy Check[1]):是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。概念来自百度百科CRC校验 2 CRC校验的原理 在数据链
2017-07-19 12:43:52 2735
原创 Linux下守护进程
1 守护进程的概念 守护进程也称精灵进程(Daemon),是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。Linux系统启动时会启动很多系统服务进程,这些系统服务进程没有控制终端,不能直接和用户交互。其它进程都是在用户登录或运行程序时创建,在运行结束或用户注销时终止,但系统服务进程不受用户登录注销的影响,它们一直在运行着。这种进程有一个名称叫守护进
2017-07-18 11:15:00 284
原创 Linux下父进程异步等待子进程
1. 背景知识 我们可以使用wait和waitpid函数清理僵死进程,父进程可以阻塞等待子进程结束,也可以非阻塞地查询是否有子进程结束等待清理(也就是轮询的方式)。采用第一种方式,父进程阻塞了就不能处理自己的工作了;采用第二种方式,程序实现复杂。其实,子进程在终止时会给父进程发SIGCHLD信号,该信号的默认处理动作是忽略,父进程可以自定义SIGCHLD信号的处理函数,这样父进程只需专心处理自
2017-07-17 10:00:56 1757
原创 Linux下线程安全与可重入函数
本文参考《深入理解计算机系统》原书第三版第12章 并发编程 1 线程安全的概念 一个函数被称为线程安全的(thread-safe),当且仅当被多个并发线程反复调用时,它会一直产生正确的结果。如果一个函数不是线程安全的,我们就说它是线程不安全的(thread-unsafe)。 2 四个线程不安全的函数类 1) 不保护共享变量的函数。当我们定义一个全局变量,然后创建多个线程进行对其进行
2017-07-16 22:30:01 384
原创 Linux下信号的产生与递达
1. 信号的概念 一个信号就是一条消息,它通知进程系统中发生了一个某种类型的事件,它属于软件形式的异常,称为Linux信号,它允许进程和内核中断其他进程。 信号的接收:将信号存在该进程的PCB中。 信号的识别:在PCB中找到存在的信号。 2. 信号的产生 1) 用户在终端按下某些键时,终端驱动程序会发送信号给前台进程,例如Ctrl-C产生SIGINT信号。 2) 硬件
2017-07-15 10:59:01 507
原创 Linux下多进程多线程的调试
1. Linux下GDB调试常用命令 在调试前明确:在生成源代码的时候加上 -g 选项,开始使用: gdb binFile,退出: ctrl + d 或 quit。下面是调试的常用命令。 list/l 行号:显示binFile源代码,接着上次的位置往下列,每次列10行。 list/l 函数名:列出某个函数的源代码。 r或run:运行程序。 s或step:进行函数调用
2017-07-14 17:45:11 616
原创 Linux下生产者与消费者模型
1. 概念 有一个或多个生产者生产某种类型的数据,并放在缓冲区里(生产者),有一个消费者从缓冲区中取数据,每次取一项(消费者)。系统保证任何时候只有一个主题可以访问缓存区。所以当生产满时,生产者不会再生产数据;当缓冲区为空时,消费者不会从中移走数据。 接下来解释同步和互斥的概念,然后用代码(链表、环形队列)模拟生产者与消费者的关系。 互斥与同步:假设两个或者更多的进程需要访问一个不可共享
2017-06-15 23:53:33 1596
原创 Linux下的死锁
本文参考《操作系统精髓设计原理》第六章(178~191) 一. 死锁的概念 我们可以把死锁定义为一组相互晶振系统资源或通信的进程间的“永久”阻塞。死锁都会涉及两个或者两个以上进程间对资源的冲突。 一般情况下,如果同一个线程先后两次调用lock,在第二次调用时,由于锁已经被占用,该线程会挂起等待别的线程释放锁,然而锁正是被自己占有的,该线程又被挂起没有机会释放锁,因此就永远处于挂起等待状
2017-06-10 23:29:08 407
原创 Linux下线程的概念和使用
一. 概念 首先Linux并不存在真正的线程,Linux的线程是使用进程模拟的。当我们需要在一个进程中同时运行多个执行流时,我们并不可以开辟多个进程执行我们的操作(32位机器里每个进程认为它 独享 4G的内存资源),此时便引入了线程,例如当我们既需要下载内容,又需要浏览网页时,此时多线程便起了作用。线程是承担调度的基本单位,一个进程可拥有多个线程,它的执行力度比进程更加细致,线程资源共享。
2017-06-10 11:37:38 16368
原创 文件描述符fd和FILE的关系
1.FILE的内容 FILE在C中作为一个结构体存在结构如下: struct _iobuf { char *_ptr; //缓冲区指针 int _cnt; char *_base; //缓冲区基址 int _flag; //文件读写模式 int _file;
2017-05-08 12:39:28 600
原创 优化程序性能
本文参考《深入理解计算机系统》中的第五章,本文中有不详细的地方请查看原书。 本文会出现部分汇编代码,尽量注释,以下为可能出现的优化。 1. 两个指针指向同一个位置void twiddle1(int *xp, int *yp) //*xp进行加两次*yp{ *xp += *yp; *xp += *yp;}void twiddle2(int *xp, int *yp
2017-04-25 17:34:45 298
原创 模拟实现智能指针
智能指针可以用来管理资源,原自构造析构函数(RAII);还可以像原生指针一样使用。本文为模拟实现auto_ptr,scoped_ptr,shared_ptr,下面为这些指针的特点:auto_ptr: 管理权限的转移。scoped_ptr: 防拷贝。shared_ptr:引用计数解决auto_ptr的缺陷。其中shared 自身带有一定缺陷,循环引用,和不可释放数组类,文件类等资
2017-04-17 17:53:04 240
转载 计算从1加到100不使用循环和条件语句。
解决该问题当然可以使用n个printf或cout,但这也太浪费体力了,但如果不能让编译器自己生成这么多printf或cout,也许可以吧。下面的解决分别从递归,宏函数,类以及模板进行解决。参考链接:http://coolshell.cn/articles/3445.htmlhttp://bbs.csdn.net/topics/360087177以下源代码#pragma once
2017-04-09 21:42:10 5163
原创 探索虚函数与多态
测试环境:win10 64位 vs2013一些概念: 虚函数:类的成员函数前面加上virtual关键字,则此成员函数即为虚函数。 重写:在子类定义了一个与父类完全相同的虚函数,则称子类的虚函数重写了父类的虚函数。 多态:多态就是多种形态,C++的多态分为静态多态和动态多态。静态多态就是重载,因为在编译期间决定调用哪个函数,所以称为静态多态;动态多
2017-04-02 10:52:34 240
原创 Linux 中find常用指令
Linux 中find常用指令Linux下find命令可以在目录中搜索文件,并执行指定的操作。1. 命令的格式:find pathname(目录路径) -options(执行的操作)2. 常用操作:-name -perm -user -group -mtime -nogroup -nouser -type -size -name: 按
2017-03-29 20:27:29 236
原创 菱形继承引发的问题和解决方案,以及底层实现的原理.
定义:两个子类继承同一个父类,而又有子类同时继承这两个子类。 如果直接继承会引发访问不明确(二义性),以及数据冗余。如果直接指定访问对象,可解决二义性(第一段代码以及解析图),而要解决数据冗余,则要引入虚函数(第二段代码以及解析图)。 代码一:#include using namespace std; class A{public: i
2017-03-26 16:38:46 2849
原创 关于Linux中进入目录和在其下创建,显示文件所需权限,以及Atime,Ctime,Mtime和含义。
Linux进入目录创建文件需要的权限首先要明白:Linux文件权限分为三类,文件的拥有者u(User),文件所在工作组的用户g(Group)以及其他用户o(Others)。文件属性标志有10位第一个字符为文件类型,接下来每三个一组,共三组分别对应u,g,o,每组的第一位为读标志r可读,第二位为写标志w可写,第三位为x可执行,‘-’表示为不可。对于进入目录:User的
2017-03-23 22:15:16 433
原创 有关日期类的成员函数
有关函数介绍:1. 构造函数:存在默认参数,提供系统默认时间。2.判断日期是否合法的函数:年是否大于默认年分,月是否在12内,天(根据闰年,平年判断)是否合法。3.获得某月天数:·平闰年判断。4.对日期的加减天数,需要借助2,3的函数判断某月天数和判断是否合法,以此进行借位或者进位。5.日期见日期:通过小的天数向上加,统计天数。
2017-03-19 22:40:12 362
原创 有关单链表带环的问题
1.检查链表是否带环,若带求长度,环入口点。 设定两个快慢指针开始时指向起始位置,开始出发,如果这两个指针相交,那么存在环;从交点出发,当再次回到此点便可统计环长度;对与于环入口点,假设快指针每次走两个位置,慢一直走一个。2. 检查两链表否相交(链表不带环)如果两链表得最后一个位置相等,则相交。
2017-03-16 22:46:15 390
原创 单链表的合并,排序与翻转
1.单链表的合并: 合并两个有序(从小到大)链表,首先比较两链表第一个结点值的大小,将小的放入新的链表(创建的临时链表);然后将小的那条链表向后移动一个位置,重复比较。当然,在进行这些处理之前,先处理空链表的情况。2.单链表的排序: 这里排序方式采用之前熟悉的冒泡排序。3.单链表的翻转: 对翻转的要求:遍历一次。这里需要三个指针一个指向当前结点,一个指向下一个结点,一个保存翻转后的链表
2017-03-15 23:11:04 2073
原创 删除或插入无头单链表的非尾结点
解决方案为:一般情况我们想要删除一个结点,我们需要直到上上个位置,而现在并没有,所以我们只需要把下一位置值赋予当前位置,并删除下个位置,并将当前位置指向下下个位置。
2017-03-12 22:44:33 371
原创 有关顺序表操作的函数实现
#include "SeqList.h"void InitSeqlist(pSeqList p) // 顺序表初始化{ p->count = 0; memset(p->arr,0,sizeof(DataType)*MAX);}void PushBack(pSeqList p,DataType d) //后插{ assert(p); if(MAX == p->count
2017-03-06 22:40:26 340
原创 注释转换(从c到c++)
要完成这个问题要考虑以下因素:1. 换行问题/* int i = 0; */int j = 0;/* int i = 0; */int j = 0;2. /*与\*/匹配问题/*int i = 0;/*xxx*/ 3. 多行注释问题/*int i=0;int j = 0;int k = 0;*/int n = 0;4. 连续注释问题 /**/
2017-03-02 20:28:31 203
原创 来到的第一天。
我叫朱超,来到这希望能学到更多的东西。我希望以后能有一家有理想,有工匠精神的公司收留我,我希望每天充满精力,斗志。我讨厌浑浑噩噩。
2016-10-28 15:01:28 187
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人