自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 每日学习

1.给定一个字符串,例如abcabcd请你求得到该字符串中所有的长度大于等于2的子串,并统计每个字串出现的次数思路:1)从第0位开始截取字符串,截取2位,截取3位,…保证起始位+截取个数小于字符串长度;结果:ab,abc,abca,abcab,abcabc2)从第一位截取,截取2位,截取3位,…3)则设从第i位开始,截取gap位<?php $str1 = "abcabcd"; $len=strlen($str1); for($i=0;$i<$len;$i++){

2021-03-05 01:43:27 251 1

原创 排序算法

排序算法1.冒泡排序1)普通写法<?phpfunction tesr(){$arr=[8,3,1,4,6,5,6];$len=sizeof($arr);for($i=0;$i<$len;$i++){ for($j=0;$j<$len-$i-1;$j++){ if(($arr[$j]>$arr[$j+1])){ $tmp=$arr[$j];

2021-03-03 22:12:32 157 1

原创 每日一刷——删除无头链表非尾结点&倒序打印链表

倒序打印链表 采用递归的方法void PrintReverse(Node* head){ assert(head); if (head->_next) { PrintReverse(head->_next); } printf("%d->",head->_data);}删除无头链表非尾结点void Del_N_tail(SListNode*

2017-07-17 22:17:16 269

原创 每日一刷——1.判断两个链表是否相交,若相交求交点(链表不带环&带环)2.fork()问题

1.判断两个链表是否相交,若相交,求交点。(假设链表不带环)Node* GetMeetNode(Node* l1,Node* l2)//获取相交链表的相交节点{ assert(l1); assert(l2); Node* p1 = l1; Node* p2 = l2; int len1 = 0; int len2 = 0; while (p1

2017-07-16 20:05:22 332

原创 每日一刷——一个类不能被继承 &类只能在堆上创建对象&类只能在栈上创建对象。

1.设计一个类不能被继承 2.设计一个类只能在堆上创建对象在堆上创建对象需要用到动态开辟空间,需要使用newnew一个新对象分为两步: 调用operator new()在堆上查找合适大小的空间分配给新对象; 调用构造函数构造对象,对新开辟的空间进行初始化;3.设计一个类只能在栈上创建对象

2017-07-15 21:24:55 307

原创 每日一刷——逆置单链表&&查找倒数第k个节点&&Add函数

1.【基础题】–逆置/反转单链表+查找单链表的倒数第k个节点,要求只能遍历一次链表 ListNode *reverse(ListNode *head) { // write your code here ListNode* newhead = NULL; ListNode* cur = head; while (cur) { List

2017-07-14 21:54:22 207

原创 每日一刷——合并有序链表&&求n个数的和

1.【基础题】–合并两个有序链表,合并以后的链表依旧有序。 ListNode* merge(ListNode* l1,ListNode* l2){if(l1==NULL&&L2==NULL){ return NULL;}else if(l1!=NULL&&l2==NULL){ return l1;}else { return l2;}ListNode*

2017-07-14 21:48:39 226

原创 Linux日常——shell彩色进度条

#!/bin/bashstr=""table=("|" "/" "-" "\\")i=0index=0while [ $i -le 100 ]do if [ $i -lt 20 ]; then printf "[\e[1;31m%-100s\e[0m][%d%%][\e[43;46;31m%c\e[0m]\r" "$str" "$i" "${table[$inde

2017-07-02 22:55:51 320

原创 Linux日常——shell工具之grep(包含正则表达式)、sed

grep行过滤器grep是⼀种查找过滤⼯具 正则表达式在grep中⽤来查找符合模式的字符串。 egrep相当于grep -E,表⽰采⽤Extended正则表达式语法。 fgrep相当于grep - F,表⽰只搜索固定字符串⽽不搜索正则表达式模式,不会按正则表达式的语法解释后⾯的参数。 grep的正则表达式 有Basic和Extended两种规范,它们之间的区别下面有解释。正则表达式规定:⼀些

2017-07-02 22:38:36 3065

原创 Linux日常——shell脚本中 “`”、“$()”、eval 的区别

shell中的命令替换可以使用: ` 或 $() 由反引号括起来的也是⼀条命令,Shell先执⾏该命令,然后将输出结果⽴刻代换到当前命令⾏ 中。 但在某些特殊情况下,它们还是有区别的:#!/bin/bashecho `echo \\\\ `echo $(echo \\\\ ) #!/bin/bashecho `echo \$PATH `echo `echo \\$PATH `ec

2017-06-26 17:35:33 3968

原创 Linux日常——PSH&URG,定时器,三次握手&四次挥手

区别PSH 和URGTCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能,用户数据报协议(UDP)是同一层内[1] 另一个重要的传输协议。在因特网协议族(Internet protocol suite)中,TCP层是位于I

2017-06-19 22:00:28 690

原创 Linux日常——端口

引入端口的原因 在Internet上,各主机间通过TCP/IP协议发送和接收数据包,各个数据包根据其目的主机的ip地址来进行互联网络中的路由选择,把数据包顺利的传送到目的主机。大多数操作系统都支持多程序(进程)同时运行,那么目的主机应该把接收到的数据包传送给众多同时运行的进程中的哪一个呢?显然这个问题有待解决,端口机制便由此被引入进来。端口的分类 软件端口:在协议栈层间抽象的协议端口,它是各种协

2017-06-19 20:24:45 544

原创 Linux日常——路由算法调研

路由表生成算法 路由表 路由器或者其他互联网网络设备上存储的一张路由信息表,该表中存有到达特定网络终端的路径,在某些情况下,还有一些与这些路径相关的度量。 路由器的主要工作 路由器的主要工作就是为经过路由器的每个数据包寻找一条最佳的传输路径,并将该数据有效地传送到目的站点。由此可见,选择最佳路径的策略即路由算法是路由器的关键所在。为了完成这项工作,在路由器中保存着各种传输路径的相关数据——路

2017-06-18 21:38:10 378

原创 Linux日常——NAT技术与代理服务员器调研

NAT技术NAT(Network Address Translation,网络地址转换) 当在专用网内部的一些主机本来已经分配到了本地IP地址(即仅在本专用网内使用的专用地址),但现在又想和因特网上的主机通信(并不需要加密)时,可使用NAT方法。 这种方法需要在专用网连接到因特网的路由器上安装NAT软件。装有NAT软件的路由器叫做NAT路由器,它至少有一个有效的外部全球IP地址。这样,所有使用本

2017-06-18 21:21:36 261

原创 Linux日常——ARP

地址解析协议,即ARP(Address Resolution Protocol)是根据IP地址获取物理地址的一个TCP/IP协议。 主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。 通俗的说: 在⽹络通讯时,源主机的应⽤程序

2017-06-18 21:03:32 457

原创 Linux日常——CRC校验

CRC 即循环冗余校验码(Cyclic Redundancy Check[1] ):是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定。 循环冗余检查(CRC)是一种数据传输检错功能,对数据进行多项式计算,并将得到的结果附在帧的后面,接收设备也执行类似的算法,以保证数据传输的正确性和完整性。 比特在传输过程中可能产生差错:1可能会变成0,0可能变成1,这叫比

2017-06-18 20:54:51 6455

原创 Linux日常——进程组、作业、会话

进程组进程组是⼀个或多个进程的集合。每个进程除了有⼀个pid之外,还属于⼀个进程组。它们的pgid(进程组id)=组长进程的pid。每个进程组有唯一一个进程组id。每个进程组都可以有⼀个组长进程。组长进程可以创建⼀个进程组,创建该组中的进程,然后终⽌。只要进程组还有一个进程,则进程组存在,这与组长进程是否存在无关。作业⼀个前台作业可以由多个进程组成,⼀个后台也可以由多个进程组成,She

2017-06-15 21:42:08 365

原创 Linux日常——信号(4)子进程的异步等待方式

SIGCHLD信号1.进程等待的方式: 阻塞,非阻塞,异步 2.⽤wait和waitpid函数清理僵⼫进程。 ⽗进程可以阻塞等待⼦进程结束,也可以⾮阻塞地查询是否有⼦进程结束等待清理(也就是轮询的⽅式)。 采⽤第⼀种⽅式,⽗进程阻塞了就不能处理⾃⼰的⼯作了; 采⽤第⼆种⽅式,⽗进程在处理⾃⼰的⼯作的同时还要记得时不时地轮询⼀ 下,程序实现复杂。 3.⼦进程在终⽌时会给⽗进程发SIGCHL

2017-06-15 17:19:02 393

原创 Linux日常——信号(3)之线程安全和可重入函数

在深入讲解今天的题目前,我们需要有以下的知识储备:捕捉信号如果信号的处理动作是⽤用户⾃自定义函数,在信号递达时就调⽤用这个函数,这称为捕捉信号。 信号捕捉我在我的第一篇信号博客这有提到过,不过当时只是一部分的知识,这里会进行详细的描述。 1.处理信号的时机 在前面总是说进程收到信号不会立即处理,而是等到何时的时机再处理,这里我们终于学到什么时候最合适了。 当一个进程自己的模式从内核态切换回用

2017-06-14 23:21:35 357

原创 Linux日常——信号(2)之阻塞信号

阻塞信号这里我们需要先了解几个基本概念 信号递达(Delivery) :实际执⾏行信号的处理动作 信号未决(Pending) :信号从产⽣生到递达之间的状态 阻塞:进程可以选择阻塞 (Block )某个信号。 被阻塞的信号产⽣生时将保持在未决状态,直到进程解除对此信号的阻塞, 才执⾏行递达的动作。阻塞:在信号未决状态产生,此时没有对信号做出处理 忽略:在信号递达后进行,忽

2017-06-13 21:41:32 269

原创 Linux日常——信号(signal)

信号是UNIX和Linux系统响应某些条件而产生的一个事件,接收到该信号的进程会相应地采取一些行动。关于信号我们需要了解以下4点: 1、关于进程,如果收到一个信号,它可以识别信号,也知道如何处理该信号。 2、关于处理信号的时机,当一个进程收到一个信号时,它并不会立即处理信号,而是先记下这个信号。(因为此时进程有可能出于不适合处理信号的时机) 3、对于系统而言,它将信号写入它要发送信号的进程的P

2017-06-12 21:35:43 437

原创 数据结构——图

临接矩阵#pragma once#include<iostream>#include<assert.h>using namespace std;// 临接矩阵template<class V,class W,size_t N,bool IsDirector=false>//IsDirector标记是无向图还是有向图,默认无向图class GraphMartix{public:

2017-05-23 21:48:34 293

原创 分享

二叉树两个节点的最近公共父节点template <class T>struct TreeNode{ TreeNode(const T& value = T()) :_data(value) , _left(0) , _right(0) {} T _data;//节点的值 TreeNode<T>* _left;//左孩子 TreeNo

2017-05-20 12:11:39 196

原创 位图、布隆过滤器应用——九章算法大数据处理

位图 一个数组的每个数据的每个二进制位表示一个数据 0–不存在,1–存在 这样并不能存储数据的值,只能存储数据的存在状态。所以,位图的优点是显而易见的。 位图可以节省空间,处理海量数据,可用于在大量数据中查找某个数据是否存在。 布隆过滤器九章算法第七讲——大数据 1)给⼀一个超过100G⼤大⼩小的log file, log中存着IP地址, 设计算法找到出现次数最多的IP地址?! 2)与

2017-05-06 10:00:27 730

原创 Linux日常——进程状态

在Linux下,进程有以下几个状态://下面的状态在 fs/proc/array.c ⽂文件里定义: /* * The task state array is a strange "bitmap" of * reasons to sleep. Thus "running" is zero, and * you can test for combinations of others with * s

2017-04-17 18:25:02 591

原创 Linux日常——安装g++/gdb,以及NET模式的设置

1.安装g++*切换到root用户; *输入yum install gcc-c++ *回车 *出现”Complete!”则成功。 2.安装gdb*切换到root用户; *输入yum install gdb *回车 *出现”Complete!”则成功。3.NET模式的设置我们在安装Linux虚拟机时,一般将网络适配器的模式设置为NEY模式。 然后当我打开虚拟机时,就会发现网络连接

2017-04-08 12:49:10 322

原创 VS使用技巧——如何自动在新建项目中添加语句

平台:VS2013添加内容:#define _CRT_SECURE_NO_WARNINGS 1方法: 1.找到安装VS2013程序的位置 由于这个软件比较大,我们一般在安装时都会更改默认路径()。但如果采用系统默认的安装路径,则为: 2.打开程序所在文件,按下面顺序: 磁盘名:\Microsoft Visual Studio 12.0\VC\vcprojectitems 找到:

2017-04-06 09:49:12 1239

原创 Linux日常——find指令、黏滞位

写在前面 本篇文章我们只使用讨论标题中提到的两个主题,一是Find命令的各种使用;二是了解黏滞位在文件中的作用并学会设置它。find指令 1.命令功能 ▲find指令主要是完成在目录文件中搜索文件并完成指定的操作。 ▲Linux下的find命令非常强大,它可以根据选项的不同完成许多查找工作,大大提高了我们的工作效率。甚至只要你拥有相应的权限,即使这些文件中含有网络文件(NFS),find的

2017-03-25 17:53:26 456

原创 Linux日常—— *** is not in the sudoers file...报错

在执行修改文件所属者时,使用sudo命令时会报以下错误:用户名 is not in the sudoers file. This incident will be reported.报错原因是由于当前用户的用户名没有写入sudo的配置文件中。处理方法: 1.使用su命令切换到root用户。2.给sudo文件添加写权限:chmod u+w /etc/sudoers3.进入sudo文件:vi /et

2017-03-23 22:18:28 375

原创 Linux日常--关于权限的那些事儿

写在前面的背景知识 关于文件 在正式进入今天的正题之前,先要申明Linux中的一个思想——一切皆文件。在Linux系统中,所有的资源都会当成文件对待,这其中包括我们所熟知的输入输出设备(键盘,显示器)等。 Linux中文件分为6类: ①普通文件(音乐、图片等):[-] ②目录文件:[d] ③链接文件:[l] ④设备文件:分为块设备(硬盘)[b];字符设备(键盘、显示器、打印机等)[c]

2017-03-13 20:59:32 416

原创 栈应用----迷宫问题

1

2017-03-09 11:33:50 298

原创 智能指针

RAII(Resource Acquisition Is Initialization) 资源分配即初始化,定义一个类来封装资源的分配和释放,在构造函数完成资源 的分配和初始化,在析构函数完成资源的清理,可以保证资源的正确初始化和释放。智能指针 智能的自动化的管理指针所指向的动态资源的释放。既帮你管理指针,在用完后自动释放。存在意义 用于防止内存泄露的发生。在程序的编写过程中难免会发生

2017-02-22 11:25:33 261

原创 探究菱形继承对象模型

菱形继承定义及形式 简单的理解就是同一个父类被两个不同子类继承,而这两个子类又被另一个新类同时继承,导致出现了一个类似菱形的继承体系,我们将其成为菱形继承。 关于菱形继承的其他解释,我在上一博客中做了介绍(http://blog.csdn.net/haitang_yue/article/details/55211296),这里不做赘述。普通菱形继承代码typedef void

2017-02-16 22:37:02 303

原创 研究菱形虚拟继承和虚表(探索多态的原理)

1.继承定义的理解        C++中存在继承机制。通过继承,我们可以利用已存在的 数据类型来定义新的数据类型,在新的数据类型中不仅有自己新定义的成员外,还包含以前以前旧的成员,即允许程序员在保持原有类特性的情况下对其进行扩展。其中旧的类型成为基类或父类,新的类型成为派生类或子类。继承机制是面向对象程序设计中代码可以复用的最重要的 手段。       以上是书面的解释,通俗的我们可

2017-02-15 16:20:37 439

原创 关于C文件预处理的理解

本文主要介绍:1.预定义符号2.宏和函数的区别3.理解编译链接的整个过程和详细的每个过程1.预定义符号这些符号的值可以给我们提供一些编译C程序文件时的信息,给我们调试或创建日志文件提供便利。以下是对一些预定义符号的具体描述:_FILE_   :提供当前进行编译的源文件名_LINE_  :提供文件当前行的行号_DATE_ :提供文件编译时的日期_TIM

2016-10-17 17:01:42 2556

空空如也

空空如也

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

TA关注的人

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