<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[bkf136114378的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/bkf136114378</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; bkf136114378]]></copyright><item><title><![CDATA[自定义实现strstr字符串查找]]></title><link>https://blog.youkuaiyun.com/bkf136114378/article/details/101174639</link><guid>https://blog.youkuaiyun.com/bkf136114378/article/details/101174639</guid><author>bkf136114378</author><pubDate>Sun, 22 Sep 2019 22:23:35 +0800</pubDate><description><![CDATA[char* my_strstr(char* src, char* dest)
	{				 
		char*  temp = src;        //先创建一个临时指针，指向被查找的字符串
		if (*dest == '\0')        //如果当前要查找的字符串为空，则直接返回空  
		{
			return nullptr;
		}
		while (*temp)       ...]]></description><category></category></item><item><title><![CDATA[线程池的基本概念]]></title><link>https://blog.youkuaiyun.com/bkf136114378/article/details/101173612</link><guid>https://blog.youkuaiyun.com/bkf136114378/article/details/101173612</guid><author>bkf136114378</author><pubDate>Sun, 22 Sep 2019 21:32:05 +0800</pubDate><description><![CDATA[线程池：至少一个线程+任务队列

 首先线程池是一种线程使用模式。

 线程过多会带来调度开销，进而影响缓存局部性和整体性能。而线程池维护者多个线程，等待监督管理者分配可并发执行的任务。即在初始化的时候，创建一定数量的线程（有最大限制），从任务队列中获取任务，进行处理。

 作用：

  1.避免为大量请求创建线程，导致瞬间资源耗尽程序崩溃的问题。

  2.避免大量线...]]></description><category></category></item><item><title><![CDATA[软链接与硬链接的区别]]></title><link>https://blog.youkuaiyun.com/bkf136114378/article/details/100832014</link><guid>https://blog.youkuaiyun.com/bkf136114378/article/details/100832014</guid><author>bkf136114378</author><pubDate>Sat, 14 Sep 2019 18:07:11 +0800</pubDate><description><![CDATA[硬链接：

   硬链接是一个指向inode节点的指针，硬链接想当年于源文件的一个别名，硬链接不占据内存空间。每增加一个硬链接，原文件的inode节点的链接数就+1；当所有的inode节点的链接数减至为0的时候，这个文件才确保被删除了。因为硬链接是一个指向inode节点的指针，所以当源文件被删除以后照样可以通过硬链接进行文件的访问。

硬链接的缺点：

1.不能跨越文件系统进行链接。

2....]]></description><category></category></item><item><title><![CDATA[数据库中事物与索引的简介]]></title><link>https://blog.youkuaiyun.com/bkf136114378/article/details/100811118</link><guid>https://blog.youkuaiyun.com/bkf136114378/article/details/100811118</guid><author>bkf136114378</author><pubDate>Fri, 13 Sep 2019 21:13:12 +0800</pubDate><description><![CDATA[数据库事务：

  是指单个逻辑工作单元执行的一系列操作，要么完全的执行，要么完全得不执行。事务处理可以确保除非事物性单元内的所有操作都成功完成，否则不会永久更新面向数据的资源，通过将一组相关操作组合为要么全部成功要么全部失败的单元，可以简化错误恢复并使应用程序更加可靠。

要想成为事物首先要满足事物的4个条件：

1.原子性：事物是应用中最小的执行单位，如原子是自然界中最小的粒子一 样，事物...]]></description><category></category></item><item><title><![CDATA[STL中vector与List的对比]]></title><link>https://blog.youkuaiyun.com/bkf136114378/article/details/100602069</link><guid>https://blog.youkuaiyun.com/bkf136114378/article/details/100602069</guid><author>bkf136114378</author><pubDate>Sat, 07 Sep 2019 17:20:04 +0800</pubDate><description><![CDATA[vector与list都是STL中重要的序列式容器，由于两个容器的底层结构不同，导致特性以及应用场景不同其主要区别如下：

1.底层结构：

vector的底层结构是采用动态的顺序表实现的（一段连续的空间）。而list的则是一个带头节点的双向循环链表。1

2.成员操作方法：

vector支持随机访问，访问其任意元素的时间复杂度是O(1）。list不支持随机访问，访问某个元素的复杂度为O(N);...]]></description><category></category></item><item><title><![CDATA[图片服务器]]></title><link>https://blog.youkuaiyun.com/bkf136114378/article/details/100512387</link><guid>https://blog.youkuaiyun.com/bkf136114378/article/details/100512387</guid><author>bkf136114378</author><pubDate>Fri, 06 Sep 2019 21:00:35 +0800</pubDate><description><![CDATA[一.目录

 1.项目产生的背景

 2.项目模块的实现

 3.项目的基本测试

 4.项目的扩展

 5.项目中的问题





1.项目产生的背景

   有时候需要向网页上上传一张图片，但是这个网页却不支持基本的图片上传方式。因此我就想设计一个可以存储图片的服务器，通过使用这个服务器来保存我们可能会使用到的图片，并且这个服务器会对每一张图片产生唯一的一个url，用户可...]]></description><category></category></item><item><title><![CDATA[C++11中的右值引用]]></title><link>https://blog.youkuaiyun.com/bkf136114378/article/details/100528823</link><guid>https://blog.youkuaiyun.com/bkf136114378/article/details/100528823</guid><author>bkf136114378</author><pubDate>Tue, 03 Sep 2019 22:40:04 +0800</pubDate><description><![CDATA[引用的概念：

C++98中首次提出了引用的概念，引用即别名。引用变量与其引用实体共用同一块存储空间，而引用的底层是通过指针来实现的，因此使用引用，可以提高程序的可读性。

引用的特性：
1.引用在定义时必须初始化。

2.一个变量可以有多个引用。

3.引用一旦引用一个实体，在不能引用其他实体。

为了提高程序的运行效率，C++11中引入了右值引用，右值引用也是别名，但其只能对右值引用。

...]]></description><category></category></item><item><title><![CDATA[顺时针打印矩阵]]></title><link>https://blog.youkuaiyun.com/bkf136114378/article/details/100127309</link><guid>https://blog.youkuaiyun.com/bkf136114378/article/details/100127309</guid><author>bkf136114378</author><pubDate>Wed, 28 Aug 2019 21:45:58 +0800</pubDate><description><![CDATA[对于一个矩阵，请设计一个算法从左上角(mat[0][0])开始，顺时针打印矩阵元素。

给定int矩阵mat,以及它的维数nxm，请返回一个数组，数组中的元素为矩阵元素的顺时针输出。

测试样例：


[[1,2],[3,4]],2,2


返回：[1,2,4,3]


class Printer {
public:
    vector&lt;int&gt; clockwisePrint(vec...]]></description><category></category></item><item><title><![CDATA[加法运算（不用加减乘除运算符）]]></title><link>https://blog.youkuaiyun.com/bkf136114378/article/details/100087751</link><guid>https://blog.youkuaiyun.com/bkf136114378/article/details/100087751</guid><author>bkf136114378</author><pubDate>Mon, 26 Aug 2019 23:10:40 +0800</pubDate><description><![CDATA[class Solution {
public:
    int Add(int num1, int num2)
    {
      int a,b;
        a=(num1&amp;num2)&lt;&lt;1;    //相与判断，是否有进位如果有进位的话，左移一位
        b=num1^num2;         //异或相当于，对没有进位的元素直接进行相加
     ...]]></description><category></category></item><item><title><![CDATA[二叉树的层序遍历（逐层打印）非递归]]></title><link>https://blog.youkuaiyun.com/bkf136114378/article/details/100062589</link><guid>https://blog.youkuaiyun.com/bkf136114378/article/details/100062589</guid><author>bkf136114378</author><pubDate>Sun, 25 Aug 2019 13:55:08 +0800</pubDate><description><![CDATA[class Solution {
public:
&nbsp;&nbsp;&nbsp; vector&lt;vector&lt;int&gt;&gt; levelOrder(TreeNode* root) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vector&...]]></description><category></category></item><item><title><![CDATA[二叉树的前序非递归遍历]]></title><link>https://blog.youkuaiyun.com/bkf136114378/article/details/100062517</link><guid>https://blog.youkuaiyun.com/bkf136114378/article/details/100062517</guid><author>bkf136114378</author><pubDate>Sun, 25 Aug 2019 13:45:20 +0800</pubDate><description><![CDATA[class Solution {
public:
&nbsp;&nbsp;&nbsp; vector&lt;int&gt; preorderTraversal(TreeNode* root) {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; vector&lt;int&...]]></description><category></category></item><item><title><![CDATA[二叉树的中序遍历非递归]]></title><link>https://blog.youkuaiyun.com/bkf136114378/article/details/100031906</link><guid>https://blog.youkuaiyun.com/bkf136114378/article/details/100031906</guid><author>bkf136114378</author><pubDate>Fri, 23 Aug 2019 10:15:41 +0800</pubDate><description><![CDATA[class Solution {
public:
    vector&lt;int&gt; inorderTraversal(TreeNode* root) {
     
      vector&lt;int&gt;v;
      if(root==nullptr)
        return v;
      stack&lt;TreeNode*&gt;s;
      s.pus...]]></description><category></category></item><item><title><![CDATA[二叉树的非递归后序遍历]]></title><link>https://blog.youkuaiyun.com/bkf136114378/article/details/100023610</link><guid>https://blog.youkuaiyun.com/bkf136114378/article/details/100023610</guid><author>bkf136114378</author><pubDate>Thu, 22 Aug 2019 20:41:15 +0800</pubDate><description><![CDATA[class Solution {
public:
  vector&lt;int&gt; postorderTraversal(TreeNode* root) {




class Solution {
public:
    vector&lt;int&gt; postorderTraversal(TreeNode* root) {
vector&lt;int&gt;v;
if(roo...]]></description><category></category></item><item><title><![CDATA[STL之树形结构的关联式容器]]></title><link>https://blog.youkuaiyun.com/bkf136114378/article/details/99990348</link><guid>https://blog.youkuaiyun.com/bkf136114378/article/details/99990348</guid><author>bkf136114378</author><pubDate>Wed, 21 Aug 2019 20:25:04 +0800</pubDate><description><![CDATA[STL中有很多的容器比如说序列是容器和关联式容器，经常见到的容器有这些：vector，list，deque，forward_lise等，这几个容器通常称为序列式容器，因为其底层为线性序列的数据结构，里面存储的是元素本身。

什么是关联是容器？

关联式容器也是用来存储数据的，与序列式容器不同的是，其里面存储的是&lt;key,value&gt;结构的键值对，在数据检索的时候比序列式容器效率更高。
...]]></description><category></category></item><item><title><![CDATA[I/O多路转接模型]]></title><link>https://blog.youkuaiyun.com/bkf136114378/article/details/99853637</link><guid>https://blog.youkuaiyun.com/bkf136114378/article/details/99853637</guid><author>bkf136114378</author><pubDate>Tue, 20 Aug 2019 16:29:53 +0800</pubDate><description><![CDATA[IO多路转接模型大致分为三种：select模型/poll模型/epoll模型。

IO多路转接模型的功能：可以实现对大量描述符信息进行就绪事件监控，可以让进程针对就绪描述符进行操作；

                    可以让进程/线程避免因为对非就绪的描述符进行操作而阻塞。

                  ...]]></description><category></category></item><item><title><![CDATA[线程安全之死锁]]></title><link>https://blog.youkuaiyun.com/bkf136114378/article/details/99762457</link><guid>https://blog.youkuaiyun.com/bkf136114378/article/details/99762457</guid><author>bkf136114378</author><pubDate>Mon, 19 Aug 2019 21:12:35 +0800</pubDate><description><![CDATA[死锁的概念：多个线程对锁资源进行争抢操作，但是因为推进顺序不当，而导致相互等待，从而导致程序无法继续运行下去。

死锁产生的四个必要条件：

（1）互斥条件：当一个线程正在对锁资源进行操作的时候，其他线程则不能进行操作。

（2）请求与保持条件：一个进程因请求资源而阻塞时，对已获得的资源保持不放。

（3）环路等待条件：若干个线程之间形成一种头尾相接的循环等待资源的关系。

（4）不可剥夺条件：线...]]></description><category></category></item><item><title><![CDATA[构造函数与析构函数可不可以是虚函数？原因是什么？]]></title><link>https://blog.youkuaiyun.com/bkf136114378/article/details/99761524</link><guid>https://blog.youkuaiyun.com/bkf136114378/article/details/99761524</guid><author>bkf136114378</author><pubDate>Mon, 19 Aug 2019 20:56:45 +0800</pubDate><description><![CDATA[构造函数与析构函数可不可以是虚函数？原因是什么？

构造函数不能是虚函数但是析构函数通常确实虚函数。

为什么构造函数不能是虚函数？

假设构造函数是虚函数，那么他就需要通过vtable（简称虚基表）来调用，但是vtable却是在构造函数中进行初始化的，产生了矛盾，所以两者的顺序不能倒置。

析构函数可以是虚函数，且通常大多情况下都是作为虚函数。

 因为虚基表已经在构造函数中初始化好了，我们...]]></description><category></category></item><item><title><![CDATA[指针和引用的区别]]></title><link>https://blog.youkuaiyun.com/bkf136114378/article/details/99710110</link><guid>https://blog.youkuaiyun.com/bkf136114378/article/details/99710110</guid><author>bkf136114378</author><pubDate>Sun, 18 Aug 2019 21:54:15 +0800</pubDate><description><![CDATA[引用和指针的区别（底层空间都是用指针实行的）

（1）引用在定义时必须初始化，而指针不需要初始化。

（2）引用在引用一个实体后就不能在引用其他实体，而指针则可以指向多个实体。

 (3) 没有NULL引用，但有NULL指针。

（4）在sizeof中含义不同：引用结果为引用类型大小，但是指针始终占4个字节空间（在32位操作系统中）。

（5）引用自加即引用实体加1；而指针自加即跳过一个指针...]]></description><category></category></item><item><title><![CDATA[malloc/free和new/delete的区别]]></title><link>https://blog.youkuaiyun.com/bkf136114378/article/details/99702528</link><guid>https://blog.youkuaiyun.com/bkf136114378/article/details/99702528</guid><author>bkf136114378</author><pubDate>Sun, 18 Aug 2019 11:05:53 +0800</pubDate><description><![CDATA[new/delete和malloc/free的区别？

（1）.malloc和free是函数，new和delete是操作符。

（2）.malloc申请的空间不会初始化，new可以初始化。

（3）.malloc申请空间时，需要手动计算空间大小并传递，new只需在其后跟上空间类型即可。

（4）.malloc的返回值是void*因此在使用时必须进行强转，new不需要（因为new的后面是类型）。
...]]></description><category></category></item><item><title><![CDATA[多线程与多进程的区别]]></title><link>https://blog.youkuaiyun.com/bkf136114378/article/details/99452269</link><guid>https://blog.youkuaiyun.com/bkf136114378/article/details/99452269</guid><author>bkf136114378</author><pubDate>Tue, 13 Aug 2019 17:26:16 +0800</pubDate><description><![CDATA[.  多任务的执行-既可以使用多线程也可以使用多进程，哪一个更好？

   1.多线程处理任务的优点：

      多线程共用进程大部分资源

      1.线程间通信除了进程间的方式之外还有更简单的就是全局数据/传参---线程间通信更加 方便。

      2.创建/销毁一个线程的成本相较于进程更低。

      3.线...]]></description><category></category></item></channel></rss>