<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Hb_key的博客]]></title><description><![CDATA[努力自律]]></description><link>https://blog.youkuaiyun.com/Hb_key</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Hb_key]]></copyright><item><title><![CDATA[iOS中的延时执行]]></title><link>https://blog.youkuaiyun.com/Hb_key/article/details/107955660</link><guid>https://blog.youkuaiyun.com/Hb_key/article/details/107955660</guid><author>Hb_key</author><pubDate>Wed, 12 Aug 2020 13:50:15 +0800</pubDate><description><![CDATA[一.performSelector方法
必须在主线程中执行，否则无效。不阻塞线程
[self performSelector:@selector(Delay) withObject:nil afterDelay:3.0f];

- (void)Delay {
 NSLog(@"执行"); 
}

二.NSTimer定时器
必须在主线程中执行，否则无效。不阻塞线程
[NSTimer scheduledTimerWithTimeInterval:3.0f target:self selector:@select]]></description><category></category></item><item><title><![CDATA[谜一样的this指针？]]></title><link>https://blog.youkuaiyun.com/Hb_key/article/details/102712049</link><guid>https://blog.youkuaiyun.com/Hb_key/article/details/102712049</guid><author>Hb_key</author><pubDate>Mon, 04 Nov 2019 21:28:53 +0800</pubDate><description><![CDATA[this 指针是一个隐含于每一个非静态成员函数中的特殊指针。它指向调用该成员函数的那个对象。
当对一个对象调用成员函数时，编译程序先将对象的地址赋给 this 指针，然后调用成员函数，每次成员函数存取数据成员时，都隐式使用 this 指针。
当一个成员函数被调用时，自动向它传递一个隐含的参数，该参数是一个指向这个成员函数所在的对象的指针。
this 指针被隐含地声明为: ClassName con...]]></description><category></category></item><item><title><![CDATA[桥接和NAT的定义与区别]]></title><link>https://blog.youkuaiyun.com/Hb_key/article/details/99698159</link><guid>https://blog.youkuaiyun.com/Hb_key/article/details/99698159</guid><author>Hb_key</author><pubDate>Thu, 24 Oct 2019 13:42:37 +0800</pubDate><description><![CDATA[三种模式的简介
VMWare提供了三种工作模式
它们是
bridged(桥接模式)
NAT(网络地址转换模式)
host-only(主机模式)
要想在网络管理和维护中合理应用它们，你就应该先了解一下这三种工作模式。
这里首先大概介绍它们什么情况下需要它们。
bridged相当于创建一台独立的电脑。你可以让它跟主机通信，但是网络需要手工配置
host-only是与主机隔离的，但是虚拟机之间是可以相互...]]></description><category></category></item><item><title><![CDATA[实现有头指针的双向循环链表]]></title><link>https://blog.youkuaiyun.com/Hb_key/article/details/100063431</link><guid>https://blog.youkuaiyun.com/Hb_key/article/details/100063431</guid><author>Hb_key</author><pubDate>Sun, 25 Aug 2019 15:24:14 +0800</pubDate><description><![CDATA[无头单向非循环链表的实现
常见的单链表面试题
DLinkList.h
#pragma once
#include&lt;stdio.h&gt;
#include&lt;stdlib.h&gt;
#include&lt;assert.h&gt;

typedef int DLDataType;
typedef struct ListNode {
	DLDataType data;
	struct L...]]></description><category></category></item><item><title><![CDATA[常见的单链表面试题]]></title><link>https://blog.youkuaiyun.com/Hb_key/article/details/87806261</link><guid>https://blog.youkuaiyun.com/Hb_key/article/details/87806261</guid><author>Hb_key</author><pubDate>Sun, 25 Aug 2019 15:12:39 +0800</pubDate><description><![CDATA[1.从尾到头打印单链表
思路：采用递归的思路，当plist-&amp;amp;amp;gt;next指向的节点为NULL时，递归停止，开始反向依次输出链表上的节点
void TailToHead(ListNode *plist)
{
	if(plist == NULL)
		return;
	TailToHead(plist-&amp;amp;amp;gt;next);
	printf(&amp;amp;quot;%d-&amp;amp;amp;gt;&amp;amp;quot;,plist-&amp;am]]></description><category></category></item><item><title><![CDATA[无头单向非循环链表的实现]]></title><link>https://blog.youkuaiyun.com/Hb_key/article/details/100062262</link><guid>https://blog.youkuaiyun.com/Hb_key/article/details/100062262</guid><author>Hb_key</author><pubDate>Sun, 25 Aug 2019 13:24:06 +0800</pubDate><description><![CDATA[简介
链表是一种物理存储单元上非连续、非顺序的存储结构，数据元素的逻辑顺序是通过链表中的指针链接次序实现的。每个结点包括两个部分：一个是存储数据元素的数据域，另一个是存储下一个结点地址的指针域，由于不必按顺序存储，链表在插入的时候可以达到O(1)的复杂度，比顺序表快得多，但是查找一个节点或者访问特定编号的节点则需要O(n)的时间，而线性表和顺序表相应的时间复杂度分别是O(logn)和O(1)。
分...]]></description><category></category></item><item><title><![CDATA[CentOS7 修改硬件时间和系统时间]]></title><link>https://blog.youkuaiyun.com/Hb_key/article/details/99709361</link><guid>https://blog.youkuaiyun.com/Hb_key/article/details/99709361</guid><author>Hb_key</author><pubDate>Sun, 18 Aug 2019 21:05:39 +0800</pubDate><description><![CDATA[查看系统时间
[root@localhost ~]# date
Tue Jun 13 10:20:13 CST 2017

查看硬件时间
[root@localhost ~]# hwclock --show
Tue 13 Jun 2017 02:11:12 AM CST  -0.848845 seconds

可以看出系统时间比硬件时间快，系统时间是准确的
假如系统时间和硬件时间都不准确
更新系统...]]></description><category></category></item><item><title><![CDATA[vim配置三步走]]></title><link>https://blog.youkuaiyun.com/Hb_key/article/details/99708352</link><guid>https://blog.youkuaiyun.com/Hb_key/article/details/99708352</guid><author>Hb_key</author><pubDate>Sun, 18 Aug 2019 19:51:16 +0800</pubDate><description><![CDATA[vim的强大和必需性让我们相遇，下面直接三步教你配置好你的vim！！！
配置vim
版本要求：

CentOS 7 及以上 64 位系统（其余的Linux系统也是同样的步骤）

安装vimplus(建议在普通用户下安装)：
git clone https://github.com/chxuan/vimplus.git ~/.vimplus
cd ~/.vimplus
./install.sh

安...]]></description><category></category></item><item><title><![CDATA[图解：为虚拟机CentOS 7设置静态IP]]></title><link>https://blog.youkuaiyun.com/Hb_key/article/details/99452261</link><guid>https://blog.youkuaiyun.com/Hb_key/article/details/99452261</guid><author>Hb_key</author><pubDate>Tue, 13 Aug 2019 18:00:39 +0800</pubDate><description><![CDATA[之前在连接虚拟机时，总是会出现IP地址不见的情况，在经过查找资料后，终于找到了这个详细的教程，特此分享！！
1.设置虚拟机的网络连接方式：
按照如下图设置，英文版的对照设置即可

顺序依次为：

虚拟机——》设置——》网络适配器——》勾选设备状态——》选择NAT模式——》确定

2.配置虚拟机的NAT模式具体地址参数：
（1）编辑–虚拟网络编辑器–更改设置

（2）选择VMnet8–取消勾选使用本...]]></description><category></category></item><item><title><![CDATA[static关键字]]></title><link>https://blog.youkuaiyun.com/Hb_key/article/details/99323615</link><guid>https://blog.youkuaiyun.com/Hb_key/article/details/99323615</guid><author>Hb_key</author><pubDate>Mon, 12 Aug 2019 20:32:27 +0800</pubDate><description><![CDATA[前言
在 C 语言中，static 关键字不仅可以用来修饰变量，还可以用来修饰函数。使用 static 关键字修饰的变量称为静态变量。
静态变量的存储方式与全局变量一样，都是静态存储方式。需要特别说明的是，静态变量属于静态存储方式，属于静态存储方式的变量却不一定就是静态变量。
例如，全局变量虽然属于静态存储方式，但并不是静态变量，它必须由 static 加以定义后才能成为静态全局变量。
静态变量作...]]></description><category></category></item><item><title><![CDATA[const关键字]]></title><link>https://blog.youkuaiyun.com/Hb_key/article/details/99311133</link><guid>https://blog.youkuaiyun.com/Hb_key/article/details/99311133</guid><author>Hb_key</author><pubDate>Mon, 12 Aug 2019 18:34:02 +0800</pubDate><description><![CDATA[const 在实际编程中用得并不多，const 是 constant 的缩写，意为“恒定不变的”！它是定义只读变量的关键字，或者说 const 是定义常变量的关键字。
说 const 定义的是变量，但又相当于常量；说它定义的是常量，但又有变量的属性，所以叫常变量。用 const 定义常变量的方法很简单，就在通常定义变量时前面加 const 即可，如：
const  int  a = 10;
con...]]></description><category></category></item><item><title><![CDATA[git的配置]]></title><link>https://blog.youkuaiyun.com/Hb_key/article/details/98731846</link><guid>https://blog.youkuaiyun.com/Hb_key/article/details/98731846</guid><author>Hb_key</author><pubDate>Wed, 07 Aug 2019 12:37:02 +0800</pubDate><description><![CDATA[Git是什么？
一个分布式版本控制系统，和SVN类似，但远比SVN强大的一个版本控制系统 。

Git可以方便的在本地进行版本管理，如同你本地有一个版本管理服务器一样我们可以选择在合适的时间将本地版本推送到统一的版本管理服务器；
Git每次会提取整个代码仓库的完整镜像，相当于对整个代码仓库都进行了一次备份，这样计时版本服务器除了问题，我们可以直接采用本地仓库恢复！结合本地版本管理功能，远程版本管理...]]></description><category></category></item><item><title><![CDATA[动态顺序表的增删改查及相关操作]]></title><link>https://blog.youkuaiyun.com/Hb_key/article/details/98073990</link><guid>https://blog.youkuaiyun.com/Hb_key/article/details/98073990</guid><author>Hb_key</author><pubDate>Thu, 01 Aug 2019 16:46:25 +0800</pubDate><description><![CDATA[顺序表的概念及结构
顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构，一般情况下采用数组存储。在数组 上完成数据的增删查改。
顺序表一般可以分为：

静态顺序表：使用定长数组存储。
动态顺序表：使用动态开辟的数组存储

 // 顺序表的静态存储 
    #define N 100 
    typedef int DataType;
   	typedef struct SeqLi...]]></description><category></category></item><item><title><![CDATA[超详细的结构体声明、定义及初始化]]></title><link>https://blog.youkuaiyun.com/Hb_key/article/details/97903807</link><guid>https://blog.youkuaiyun.com/Hb_key/article/details/97903807</guid><author>Hb_key</author><pubDate>Wed, 31 Jul 2019 12:41:06 +0800</pubDate><description><![CDATA[结构体概念
结构体是由一系列具有相同类型或不同类型的数据构成的数据集合，叫做结构。
在C语言中，结构体指的是一种数据结构，是C语言中聚合数据类型的一类。结构体可以被声明为变量、指针或数组等，用以实现较复杂的数据结构。结构体同时也是一些元素的集合，这些元素称为结构体的成员，且这些成员可以为不同的类型，成员一般用名字访问。
比如存储一个班级学生的信息，肯定包括姓名、学号、性别、年龄、成绩、家庭地址等项...]]></description><category></category></item><item><title><![CDATA[程序猿必学之堆排序]]></title><link>https://blog.youkuaiyun.com/Hb_key/article/details/97615755</link><guid>https://blog.youkuaiyun.com/Hb_key/article/details/97615755</guid><author>Hb_key</author><pubDate>Sun, 28 Jul 2019 16:08:28 +0800</pubDate><description><![CDATA[2、堆排序
要想了解堆排序的过程，首先得知道什么是堆？
要想了解什么是堆，首先得知道什么是二叉树？
而在堆排序中使用的完全二叉树只是二叉树的一种，所以先得了解什么是完全二叉树？
完全二叉树（百度百科）：
若设二叉树的深度为h，除第 h 层外，其它各层 (1～h-1) 的结点数都达到最大个数，第 h 层所有的结点都连续集中在最左边，这就是完全二叉树。
简单来说，就是一棵从上往下，从左往右的必须依次布...]]></description><category></category></item><item><title><![CDATA[深浅拷贝]]></title><link>https://blog.youkuaiyun.com/Hb_key/article/details/89320931</link><guid>https://blog.youkuaiyun.com/Hb_key/article/details/89320931</guid><author>Hb_key</author><pubDate>Tue, 23 Apr 2019 21:42:08 +0800</pubDate><description><![CDATA[先来说一下什么叫拷贝？
所谓拷贝，是把一个事物变成两个的过程，我们了解到最多的拷贝方式应该就是CTRL+C/V吧，但是在C/C++中的拷贝有它独特的地方，独特在哪呢？
独特在于C/C++中拷贝的事物不同：只拷贝指针而不管指针指向的内容，这种称为浅拷贝；拷贝了指针并且拷贝指针指向的内容叫做深拷贝。
先来看一下浅拷贝：
class Func {
public:
	Func(const char* st...]]></description><category></category></item><item><title><![CDATA[不使用加号求两个整数的和]]></title><link>https://blog.youkuaiyun.com/Hb_key/article/details/88541922</link><guid>https://blog.youkuaiyun.com/Hb_key/article/details/88541922</guid><author>Hb_key</author><pubDate>Wed, 13 Mar 2019 21:26:08 +0800</pubDate><description><![CDATA[1、简单直接，负负得正即可
int add(int a, int b)
{
  return a-(-b);
}

2、逐步给其中的一个数+1，另一个数-1（判断需要+1的数的原则是该数&amp;amp;lt;0），加减操作保持平衡即可

注：当要相加的两个数比较大时，这种方法的效率太低

int add(int a,int b)
{
	while(a&amp;amp;gt;0)
	{
		a--;
		b++;
	}
	whi...]]></description><category></category></item><item><title><![CDATA[啥是API？]]></title><link>https://blog.youkuaiyun.com/Hb_key/article/details/88417630</link><guid>https://blog.youkuaiyun.com/Hb_key/article/details/88417630</guid><author>Hb_key</author><pubDate>Tue, 12 Mar 2019 11:36:47 +0800</pubDate><description><![CDATA[阅读编程资料时经常会看到API这个名词，网上各种高大上的解释估计放倒了一批同学，当你在看到下面这一段话时可能就有点头痛了。
“API（Application Programming Interface,应用程序编程接口）是一些预先定义的函数，目的是提供应用程序与开发人员基于某软件或硬件得以访问一组例程的能力，而又无需访问源码，或理解内部工作机制的细节。——百度百科”
下面我们来看一下到底啥是API...]]></description><category></category></item><item><title><![CDATA[宏和函数]]></title><link>https://blog.youkuaiyun.com/Hb_key/article/details/87927720</link><guid>https://blog.youkuaiyun.com/Hb_key/article/details/87927720</guid><author>Hb_key</author><pubDate>Tue, 26 Feb 2019 00:37:17 +0800</pubDate><description><![CDATA[在程序中扩展#define定义符号和宏时，需要涉及以下几个步骤：


调用宏时，首先对参数进行检查，看看是否包含任何由#define定义的符号。如果是，它们首先被替换；
替换文本随后被插入到程序中原来文本的位置，对于宏，参数名被它们的值替换；
最后再次对结果文件进行扫描，看看他是否包含由#define定义的符号，如果是，就重复上述的处理过程。


宏和函数的对比：


宏做的是简单的字符串替换，而...]]></description><category></category></item><item><title><![CDATA[override 和 final 标识符]]></title><link>https://blog.youkuaiyun.com/Hb_key/article/details/86697394</link><guid>https://blog.youkuaiyun.com/Hb_key/article/details/86697394</guid><author>Hb_key</author><pubDate>Tue, 29 Jan 2019 23:05:21 +0800</pubDate><description><![CDATA[实际应用中经常会发现虚函数在C++中会引起很多问题，因为没有一个强制的机制来标识虚函数在派生类中被重写了。virtual关键字并不是强制性的，这给代码的阅读增加了一些困难，因为你不得不去看继承关系的最顶层以确认这个方法是不是虚方法。在派生类中使用virtual关键字会让代码更易读但会出现一些不明显的错误，示例：
class B 
{
public:
   virtual void f(short)...]]></description><category></category></item></channel></rss>