<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[loreal8的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/loreal8</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; loreal8]]></copyright><item><title><![CDATA[2021-10-21]]></title><link>https://blog.youkuaiyun.com/loreal8/article/details/120882067</link><guid>https://blog.youkuaiyun.com/loreal8/article/details/120882067</guid><author>loreal8</author><pubDate>Tue, 11 Jan 2022 20:01:25 +0800</pubDate><description><![CDATA[ScrolView定位到某一个组件

]]></description><category></category></item><item><title><![CDATA[C++回文子串]]></title><link>https://blog.youkuaiyun.com/loreal8/article/details/110143342</link><guid>https://blog.youkuaiyun.com/loreal8/article/details/110143342</guid><author>loreal8</author><pubDate>Wed, 25 Nov 2020 22:15:21 +0800</pubDate><description><![CDATA[回文子串
给定一个字符串，你的任务是计算这个字符串中有多少个回文子串（回文串是一个正读和反读都一样的字符串）。
具有不同开始位置或结束位置的回文串，即使是由相同的字符组成，也会被计为是不同的子串。
输入：仅包含一个字符串，长度不会超过 1000。
输出：仅包含一个非负整数， 代表输入字符串有多少个回文子串。
示例:
输入：abc
输出：3
输入：aaa
输出：6
#include&lt;iostream&gt;
#include&lt;string&gt;
#include&lt;vector&gt;
us]]></description><category></category></item><item><title><![CDATA[LRU Cache的数据结构选择以及实现]]></title><link>https://blog.youkuaiyun.com/loreal8/article/details/109242978</link><guid>https://blog.youkuaiyun.com/loreal8/article/details/109242978</guid><author>loreal8</author><pubDate>Fri, 23 Oct 2020 15:45:01 +0800</pubDate><description><![CDATA[LRU
LRU是Least Recently Used的缩写，意思是最近最少使用，它是一种Cache替换算法。 什么是Cache？狭义的Cache指的是位于CPU和主存间的快速RAM， 通常它不像系统主存那样使用DRAM技术，而使用昂贵但较快速的SRAM技术。 广义上的Cache指的是位于速度相差较大的两种硬件之间， 用于协调两者数据传输速度差异的结构。除了CPU与主存之间有Cache， 内存与硬盘之间也有Cache，乃至在硬盘与网络之间也有某种意义上的Cache── 称为Internet临时文件夹或网络内]]></description><category></category></item><item><title><![CDATA[C++两字符串的最长公共子序列的个数及打印出最长公共子序列]]></title><link>https://blog.youkuaiyun.com/loreal8/article/details/109088440</link><guid>https://blog.youkuaiyun.com/loreal8/article/details/109088440</guid><author>loreal8</author><pubDate>Thu, 15 Oct 2020 01:01:50 +0800</pubDate><description><![CDATA[输入两字符串，输出最长的公共子序列长度。
采用动态规划思想。
假设字符串a长度为n，字符串b的长度为m，
使用一个二维数组arr[n+1][m+1]来记录每种情况下最长公共子序列的长度。
初始状态：字符串a空元素，字符串b空元素。这样的情况就填0.也就是二维数组首行首列全为0.
假设:
a{a，b，c，d}
b{b，c，a，d}

行 i 是字符串a的元素，列 j 是字符串b的元素
状态转换方程：如果这个二维数组中的i行字符等于j列中字符的情况，那么arr[i][j]就等于它的左上角arr[i - 1][j]]></description><category></category></item><item><title><![CDATA[图的基本知识总结]]></title><link>https://blog.youkuaiyun.com/loreal8/article/details/108934043</link><guid>https://blog.youkuaiyun.com/loreal8/article/details/108934043</guid><author>loreal8</author><pubDate>Mon, 05 Oct 2020 23:45:31 +0800</pubDate><description><![CDATA[图基本概念顶点和边有向图和无向图完全图邻接顶点顶点的度路径路径长度简单路径与回路子图连通图强连通图生成树图的存储结构邻接矩阵优缺点实现邻接表
基本概念
图是由顶点集合及顶点间的关系组成的一种数据结构：G = (V， E)，其中：
顶点集合V = {x|x属于某个数据对象集}是有穷非空集合；
E = {(x,y)|x,y属于V}或者E = {&lt;x, y&gt;|x,y属于V &amp;&amp; Path(x, y)}是顶点间关系的有穷集合，也叫做边的集合。
(x, y)表示x到y的一条双向通路，即(x]]></description><category></category></item><item><title><![CDATA[并查集的详细解释与应用场景]]></title><link>https://blog.youkuaiyun.com/loreal8/article/details/108654766</link><guid>https://blog.youkuaiyun.com/loreal8/article/details/108654766</guid><author>loreal8</author><pubDate>Thu, 17 Sep 2020 23:16:31 +0800</pubDate><description><![CDATA[并查集并查集原理概念示例并查集实现并查集应用
并查集原理
概念
在一些应用问题中，需要将n个不同的元素划分成一些不相交的集合。开始时，每个元素自成一个单元素集合，然后按一定的规律将归于同一组元素的集合合并。在此过程中要反复用到查询某一个元素归属于那个集合的运算。适合于描述这类问题的抽象数据类型称为并查集(union-findset)。
示例
比如大学刚开学，一个班有10个新同学，起初他们互相不认识。
假设10个同学编号1-10。
用数组的编号代表这些同学，同时数组内初始全为-1（置为-1的原理后边解释）。
]]></description><category></category></item><item><title><![CDATA[Linux进程知识总结]]></title><link>https://blog.youkuaiyun.com/loreal8/article/details/108580712</link><guid>https://blog.youkuaiyun.com/loreal8/article/details/108580712</guid><author>loreal8</author><pubDate>Mon, 14 Sep 2020 17:38:09 +0800</pubDate><description><![CDATA[进程什么是进程描述进程-PCB什么是PCBtask_ struct内容分类组织进程进程状态僵尸进程危害孤儿进程进程优先级查看系统进程用top命令更改已存在进程的nice并行 &amp; 并发虚拟地址fork函数写时拷贝fork调用失败的原因进程等待进程等待必要性进程等待的方法进程程序替换替换原理
什么是进程
课本概念：程序的一个执行实例，正在执行的程序等。
内核观点：担当分配系统资源（CPU时间，内存）的实体 。
描述进程-PCB
什么是PCB
进程信息被放在一个叫做进程控制块的数据结构中，可以理解为进程属]]></description><category></category></item><item><title><![CDATA[C++电话号码的组合]]></title><link>https://blog.youkuaiyun.com/loreal8/article/details/108557672</link><guid>https://blog.youkuaiyun.com/loreal8/article/details/108557672</guid><author>loreal8</author><pubDate>Sun, 13 Sep 2020 00:36:41 +0800</pubDate><description><![CDATA[给定一个仅包含数字 2-9 的字符串，返回所有它能表示的字母组合。
给出数字到字母的映射如下（与电话按键相同）。注意 1 不对应任何字母。
例如:
输入："23"
输出：["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"].

static string str[] = { "","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz" };
class Solution {
public:

 void]]></description><category></category></item><item><title><![CDATA[C++: set和map知识点总结]]></title><link>https://blog.youkuaiyun.com/loreal8/article/details/108491943</link><guid>https://blog.youkuaiyun.com/loreal8/article/details/108491943</guid><author>loreal8</author><pubDate>Wed, 09 Sep 2020 17:19:21 +0800</pubDate><description><![CDATA[set和mapsetmultisetmapoperator[]和at()multimap
set

与map/multimap不同，map/multimap中存储的是真正的键值对&lt;key, value&gt;，set中只放value，但在底层实际存放的是由&lt;value, value&gt;构成的键值对。
set中插入元素时，只需要插入value即可，不需要构造键值对。
set中的元素不可以重复(因此可以使用set进行去重)。
使用set的迭代器遍历set中的元素，可以得到有序序列
set中的元素]]></description><category></category></item><item><title><![CDATA[C++继承，多态复习]]></title><link>https://blog.youkuaiyun.com/loreal8/article/details/108457827</link><guid>https://blog.youkuaiyun.com/loreal8/article/details/108457827</guid><author>loreal8</author><pubDate>Tue, 08 Sep 2020 17:37:23 +0800</pubDate><description><![CDATA[这里写目录标题一级目录
一级目录

]]></description><category></category></item><item><title><![CDATA[C++stringstream的简单介绍以及使用]]></title><link>https://blog.youkuaiyun.com/loreal8/article/details/108436839</link><guid>https://blog.youkuaiyun.com/loreal8/article/details/108436839</guid><author>loreal8</author><pubDate>Sun, 06 Sep 2020 21:19:53 +0800</pubDate><description><![CDATA[在C语言中，如果想要将一个整形变量的数据转化为字符串格式可以使用以下两种方式:
1.itoa()函数。2sprint()函数。
但是两个函数在转化时，都得需要先给出保存结果的空间，那空间要给多大呢，就不太好界定，而且转化格式不匹配时，可能还会得到错误的结果甚至程序崩溃。
int main()
{
int n = 123456789;
char s1[32];
_itoa(n, s1, 10);

char s2[32];
sprintf(s2, "%d", n);

char s3[32];
sprintf]]></description><category></category></item><item><title><![CDATA[C++容器，容器适配器复习]]></title><link>https://blog.youkuaiyun.com/loreal8/article/details/108433394</link><guid>https://blog.youkuaiyun.com/loreal8/article/details/108433394</guid><author>loreal8</author><pubDate>Sun, 06 Sep 2020 21:11:38 +0800</pubDate><description><![CDATA[容器，容器适配器复习深浅拷贝capacityvector 迭代器失效问题vector迭代器失效解决办法vector不用memcpy拷贝的原因list的迭代器失效什么是适配器容器适配器stack 的底层使用什么实现queue的底层用什么实现priority_queue 队列deque （双端队列）为什么选择deque作为stack和queue的底层默认容器什么是分离编译函数模板的优缺点
深浅拷贝
浅拷贝：也称位拷贝，编译器只是将对象中的值拷贝过来。如果对象中管理资源，最后就会导致多个对象共享同一份资源，当一个]]></description><category></category></item><item><title><![CDATA[C++基础复习]]></title><link>https://blog.youkuaiyun.com/loreal8/article/details/108420144</link><guid>https://blog.youkuaiyun.com/loreal8/article/details/108420144</guid><author>loreal8</author><pubDate>Sat, 05 Sep 2020 21:57:11 +0800</pubDate><description><![CDATA[C++基础复习函数重载：引用引用跟指针的区别宏的优缺点auto细则nullptr指针C++中struct和class的区别this指针的特性this指针存在哪里？this指针可以为空吗类的6大默认成员函数默认构造函数初始化列表注意初始化顺序静态成员特性静态成员函数可以调用非静态成员函数吗友元函数友元类内部类C++内存分布new/delete与malloc/free的区别什么是内存泄漏，内存泄漏的危害内存泄漏分类如何避免内存泄漏模板函数匹配规则
函数重载：
必要条件：1.同名函数。2.参数列表不同（参数类型，]]></description><category></category></item><item><title><![CDATA[自制网络工具集合（抓包，扫描主机，扫描端口，获取本机信息，dos攻击）]]></title><link>https://blog.youkuaiyun.com/loreal8/article/details/108373147</link><guid>https://blog.youkuaiyun.com/loreal8/article/details/108373147</guid><author>loreal8</author><pubDate>Thu, 03 Sep 2020 17:54:37 +0800</pubDate><description><![CDATA[网络工具集1.shark抓包工具（1）.数据包格式（2）.系统协议的类型（3）.原始套接字
1.shark抓包工具
（1）.数据包格式
（2）.系统协议的类型
（3）.原始套接字
抓包工具
获取链路层的数据包，手动层层解析，对链路层，网络层，传输层的报头格式有更加深入的理解。
首先从网络层抓取的包都是这个样子的

...]]></description><category></category></item><item><title><![CDATA[在线面试预约系统]]></title><link>https://blog.youkuaiyun.com/loreal8/article/details/108249011</link><guid>https://blog.youkuaiyun.com/loreal8/article/details/108249011</guid><author>loreal8</author><pubDate>Wed, 26 Aug 2020 23:46:56 +0800</pubDate><description><![CDATA[在线面试预约系统
一个可以提供注册登录，预约面试，记录成绩的面试系统。
技术点
http协议，tcp协议，cpp-httplib，线程互斥，C++11特性，jQuery+ajax，数据库操作
项目模块
数据库模块
一共有俩数据表，一个是reg_userinfo，这个表负责存放用户的登录邮箱和密码，同时还会有一个自增长的列id。
另一个是stu_info，存放用户的其他信息，学校啊，年级，电话等等。同时还可以存放用户的笔试详细成绩，预约的面试时间，面试结果等信息。
工具模块
调用boost库里的split函数]]></description><category></category></item><item><title><![CDATA[C++顺时针打印矩阵]]></title><link>https://blog.youkuaiyun.com/loreal8/article/details/108178272</link><guid>https://blog.youkuaiyun.com/loreal8/article/details/108178272</guid><author>loreal8</author><pubDate>Sun, 23 Aug 2020 00:42:05 +0800</pubDate><description><![CDATA[顺时针打印矩阵
#include&lt;iostream&gt;
#include&lt;vector&gt;
using namespace std;

//顺时针打印一个矩阵
class Printer {
public:
 vector&lt;int&gt; clockwisePrint(vector&lt;vector&lt;int&gt; &gt; mat, int n, int m) {
 
  // 思路是先接收外边一圈的数据，再接收收缩一圈的数据，然后依次缩小矩阵
  //这四个最外边的边框]]></description><category></category></item><item><title><![CDATA[C++求最大公约数，最小公倍数（简单几行）]]></title><link>https://blog.youkuaiyun.com/loreal8/article/details/107901224</link><guid>https://blog.youkuaiyun.com/loreal8/article/details/107901224</guid><author>loreal8</author><pubDate>Sun, 09 Aug 2020 22:06:04 +0800</pubDate><description><![CDATA[//最大公约数
int GCD(int x, int y)
{
 int r = x % y;
 while (r) {
  x = y;
  y = r;
  r = x % y;
 }  
 return y;
}
 
//最小公倍数：最小公倍数=两数之积除以最大公约数
int LCM(int a, int b) {
 return a * b / GCD(a, b);
}

]]></description><category></category></item><item><title><![CDATA[C++收件人列表]]></title><link>https://blog.youkuaiyun.com/loreal8/article/details/107868299</link><guid>https://blog.youkuaiyun.com/loreal8/article/details/107868299</guid><author>loreal8</author><pubDate>Fri, 07 Aug 2020 18:28:37 +0800</pubDate><description><![CDATA[链接：收件人列表
NowCoder要给许多客户写电子邮件。正如你所知，如果一封邮件中包含多个收件人，收件人姓名之间会用一个逗号和空格隔开；如果收件人姓名也包含空格或逗号，则姓名需要用双引号包含。
现在给你一组收件人姓名，请你帮他生成相应的收件人列表。
#include&lt;iostream&gt;
#include&lt;string&gt;
using namespace std;
//收件人列表
//输入的是一个二维字符串数组
//动态规划的思想，我们把这些拼到一个长的字符串后边，然后按格式输出

i]]></description><category></category></item><item><title><![CDATA[Linux--UDP通信简单程序]]></title><link>https://blog.youkuaiyun.com/loreal8/article/details/107850198</link><guid>https://blog.youkuaiyun.com/loreal8/article/details/107850198</guid><author>loreal8</author><pubDate>Thu, 06 Aug 2020 21:33:50 +0800</pubDate><description><![CDATA[服务器程序:使用recvfrom函数阻塞接收信息。并将信息用sendto函数发回去


客户端程序:使用sendto函数，发送数据给客户端。然后使用recvfrom函数接收服务器发回的消息。

服务器程序
#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;string.h&gt;
#include &lt;netinet/in.h&gt;
#include &lt;arpa/inet.h&gt;
#include &lt;sys.]]></description><category></category></item><item><title><![CDATA[C++SGI-STL空间配置器原理]]></title><link>https://blog.youkuaiyun.com/loreal8/article/details/107826740</link><guid>https://blog.youkuaiyun.com/loreal8/article/details/107826740</guid><author>loreal8</author><pubDate>Wed, 05 Aug 2020 23:47:18 +0800</pubDate><description><![CDATA[STL空间配置器
为各个容器高效的管理空间(空间的申请与回收)的。

为什么需要空间配置器?
1.在使用new申请空间时，空间申请与释放需要用户自己管理，容易造成内存泄漏
2.频繁向系统申请小块内存块，容易造成内存碎片
3.频繁向系统申请小块内存，影响程序运行效率
4.直接使用malloc与new进行申请，每块空间前有额外空间浪费
5.申请空间失败怎么应对
6.代码结构比较混乱，代码复用率不高
7.未考虑线程安全问题

STL空间配置器的原理:
空间配置器以128作为小块内存与大块内存的分界线，将空间配置器]]></description><category></category></item></channel></rss>