<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Tianzez的博客]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/Tianzez</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; Tianzez]]></copyright><item><title><![CDATA[事务的隔离级别]]></title><link>https://blog.csdn.net/Tianzez/article/details/100986126</link><guid>https://blog.csdn.net/Tianzez/article/details/100986126</guid><author>Tianzez</author><pubDate>Wed, 18 Sep 2019 15:57:28 +0800</pubDate><description><![CDATA[文章目录1. Read uncommitted（读未提交）1.1定义1.2 举例1.3 分析2. Read committed（读提交）2.1 定义2.2 举例2.3 分析3. Repeatable read（重复读）3.1 定义3.2 举例3.3 分析4. Serializable（序列化）4.1 定义4.2 幻读情况举例5. 事务隔离级别与出错情况
1. Read uncommitted（读未...]]></description><category></category></item><item><title><![CDATA[go用smpt包发送邮件, 被抄送收不到邮件bug]]></title><link>https://blog.csdn.net/Tianzez/article/details/86689950</link><guid>https://blog.csdn.net/Tianzez/article/details/86689950</guid><author>Tianzez</author><pubDate>Tue, 29 Jan 2019 14:56:23 +0800</pubDate><description><![CDATA[今天在写一个比较简单的需求: 发送邮件且支持抄送
当时上网搜了一下, 直接用了 smpt 包来发邮件
网上介绍发邮件直接加 “Cc” 字段就可以实现抄送功能了, 但当我测试测试时. 结果是现在邮件上正确显示抄送人了,
但实际上被抄送人并没有收到邮件, 只有收件人收到了.
排查了会发现问题出在 Rcpt 操作上.
Rcpt操作用于标识该电子邮件的计划接收人, 可以有多个RCPT行, 表示发送给多人....]]></description><category></category></item><item><title><![CDATA[Linux下执行 git push, pull 等操作免除输入账号、密码]]></title><link>https://blog.csdn.net/Tianzez/article/details/86650430</link><guid>https://blog.csdn.net/Tianzez/article/details/86650430</guid><author>Tianzez</author><pubDate>Fri, 25 Jan 2019 18:27:05 +0800</pubDate><description><![CDATA[操作步骤:

进入到根目录: cd ~
创建文件 .git-credentials: touch .git-credentials
编辑 .git-credentials : vim .git-credentials
输入如下内容:

https://账号:密码@github.com
// 例如: https://tianzez:12qw34@github.com


保存退出vim编辑, 执行:...]]></description><category></category></item><item><title><![CDATA[I/O多路转接——select、poll 和 epoll]]></title><link>https://blog.csdn.net/Tianzez/article/details/81188263</link><guid>https://blog.csdn.net/Tianzez/article/details/81188263</guid><author>Tianzez</author><pubDate>Wed, 25 Jul 2018 16:41:32 +0800</pubDate><description><![CDATA[

一、select
1. select() 函数
（1）参数timeout
（2）fd_set结构体
（3）函数返回值


2. socket就绪条件
（1）读就绪
（2）写就绪
（3）异常就绪


3. select的特点
4. select的缺点


二、poll
1. poll()函数
（1）参数
（2）events和revents
（3）返回值


2. poll的缺点


三、epol...]]></description><category></category></item><item><title><![CDATA[TCP协议实现qq群聊]]></title><link>https://blog.csdn.net/Tianzez/article/details/81022395</link><guid>https://blog.csdn.net/Tianzez/article/details/81022395</guid><author>Tianzez</author><pubDate>Thu, 12 Jul 2018 21:05:14 +0800</pubDate><description><![CDATA[一、注意的问题


客户端的0号文件描述要设置成非阻塞，这样才能接受其他客户端发的消息。
客户端的读写操作也必须设置成非阻塞。
对服务端使用setsockopt函数，允许创建多个端口号相同的套接字（解决服务器先关闭而引发TIME_WAIT状态的一系列问题）




二、源代码

comm.h



#ifndef __COMM_H__
#define __COMM_H__

#define NAM...]]></description><category></category></item><item><title><![CDATA[利用哈弗曼树实现文件压缩]]></title><link>https://blog.csdn.net/Tianzez/article/details/80989535</link><guid>https://blog.csdn.net/Tianzez/article/details/80989535</guid><author>Tianzez</author><pubDate>Thu, 12 Jul 2018 18:35:36 +0800</pubDate><description><![CDATA[一、基础知识

1. 哈弗曼树

　　给定n个权值作为n个叶子结点，构造一棵二叉树，若该树的带权路径长度达到最小，称这样的二叉树为最优二叉树，也称为哈夫曼树(Huffman Tree)。哈夫曼树是带权路径长度最短的树，权值较大的结点离根较近。...]]></description><category></category></item><item><title><![CDATA[IP报文格式详解]]></title><link>https://blog.csdn.net/Tianzez/article/details/81004380</link><guid>https://blog.csdn.net/Tianzez/article/details/81004380</guid><author>Tianzez</author><pubDate>Wed, 11 Jul 2018 17:36:12 +0800</pubDate><description><![CDATA[


4位版本号：指IP协议的版本。通信双方使用的IP协议版本必须一致，对于IPv4来说，就是4。
4位首部长度：可表示的最大十进制数是15，注意首部长度字段所表示数的单位是32位字（也就是4字节），所以IP头部最大长度是60字节（最小20字节）。
8位区分服务：由3位优先权字段（已弃用），4位TOS字段和1位保留字段（必须置为0）组成。4位TOS分别表示：最小延迟、最大吞吐量、最高可靠性、最小成...]]></description><category></category></item><item><title><![CDATA[计算机网络——TCP协议 && 三次握手 && 四次挥手]]></title><link>https://blog.csdn.net/Tianzez/article/details/80862271</link><guid>https://blog.csdn.net/Tianzez/article/details/80862271</guid><author>Tianzez</author><pubDate>Fri, 29 Jun 2018 22:07:19 +0800</pubDate><description><![CDATA[

一、TCP主要特点
二、可靠性传输的工作原理
1. 停止等待协议


三、TCP报文段的首部格式
四、三次握手
1. 三次握手的具体步骤
2. 第三次握手的意义


五、四次挥手
1. 四次挥手具体步骤
2. 为什么 A 在 TIME-WAIT 状态必须等待 2MSL 的时间？
3. 解决 TIME_WAIT 状态引起的 bind失败的方法









一、TCP主要特点


TCP是面...]]></description><category></category></item><item><title><![CDATA[Linux——进程关系和守护进程]]></title><link>https://blog.csdn.net/Tianzez/article/details/80825543</link><guid>https://blog.csdn.net/Tianzez/article/details/80825543</guid><author>Tianzez</author><pubDate>Wed, 27 Jun 2018 11:01:25 +0800</pubDate><description><![CDATA[Linux知识总结目录索引



一、进程组/作业/会话
0. 终端
1. 进程组
2. 作业
3. 会话


二、守护进程
1. 什么是守护进程
2. 创建守护进程
3. 创建守护进程函数daemon






一、进程组/作业/会话



0. 终端

  在UNIX系统中，用户通过终端登录系统后得到一个Shell进程，这个终端成为Shell进程的控制终端 (Controlling Term...]]></description><category></category></item><item><title><![CDATA[算法 —— 字符串的全排列和组合]]></title><link>https://blog.csdn.net/Tianzez/article/details/80713424</link><guid>https://blog.csdn.net/Tianzez/article/details/80713424</guid><author>Tianzez</author><pubDate>Sat, 16 Jun 2018 16:00:25 +0800</pubDate><description><![CDATA[

一、字符串的全排列 &amp;amp;amp;&amp;amp;amp; 递归
二、字符串的全排列 &amp;amp;amp;&amp;amp;amp; 去重 &amp;amp;amp;&amp;amp;amp; 递归
三、字符串的全排列 &amp;amp;amp;&amp;amp;amp; 去重 &amp;amp;amp;&amp;amp;amp; 非递归
四、字符串的组合 &amp;amp;amp;&amp;amp;amp; 递归





一、字符串的全排列 &amp;amp;amp;&amp;a]]></description><category></category></item><item><title><![CDATA[C++ —— vector容器]]></title><link>https://blog.csdn.net/Tianzez/article/details/80557316</link><guid>https://blog.csdn.net/Tianzez/article/details/80557316</guid><author>Tianzez</author><pubDate>Sun, 03 Jun 2018 15:57:42 +0800</pubDate><description><![CDATA[C++知识总结目录索引



1. resize()
2. reserve()
3. operator[]
4. assign()
5. insert()
6. erase()
7. clear()





1. resize()

void resize (size_type n, value_type val = value_type());

调整数组的容量，接受两个参数。 
1. 如果 ...]]></description><category></category></item><item><title><![CDATA[《剑指offer》面试题61：扑克牌中的顺子]]></title><link>https://blog.csdn.net/Tianzez/article/details/80420172</link><guid>https://blog.csdn.net/Tianzez/article/details/80420172</guid><author>Tianzez</author><pubDate>Wed, 23 May 2018 15:27:59 +0800</pubDate><description><![CDATA[更多剑指offer面试习题请点击：《剑指offer》（第二版）题集目录索引



一、题目
二、解题思路
三、代码实现
四、测试代码
五、测试结果




一、题目

　　从扑克牌中随机抽5张牌，判断是不是一个顺子，即这5张牌是不是连续的。2～10为数字本身，A为1，J为11，Q为12，K为13，而大、小王可以看成任意数字。



二、解题思路

　　这里我们可以把五张牌看作一个数组，数组里面有五...]]></description><category></category></item><item><title><![CDATA[Linux —— 线程互斥]]></title><link>https://blog.csdn.net/Tianzez/article/details/80415961</link><guid>https://blog.csdn.net/Tianzez/article/details/80415961</guid><author>Tianzez</author><pubDate>Wed, 23 May 2018 10:39:37 +0800</pubDate><description><![CDATA[Linux知识总结目录索引



本文目录
一、互斥锁
1. 操作步骤
（1）创建锁
（2）初始化锁
①设置线程的属性


（3）上锁 &amp;amp;&amp;amp; 解锁
（4）销毁互斥锁


2. 死锁
（1）死锁的两种情况：
（2）避免的死锁的原则
（3）临界区代码原则


3. 互斥锁和信号量的区别
4. 线程安全和可重入


二、自旋锁
1. 操作步骤
2. 自旋锁和互斥锁的区别


三、读写锁
...]]></description><category></category></item><item><title><![CDATA[Linux知识总结目录索引]]></title><link>https://blog.csdn.net/Tianzez/article/details/80415543</link><guid>https://blog.csdn.net/Tianzez/article/details/80415543</guid><author>Tianzez</author><pubDate>Wed, 23 May 2018 10:15:12 +0800</pubDate><description><![CDATA[01. vim编程技巧





02. Linux基本命令





03. PCB进程控制块



04. 进程控制





05. 死锁





06. 管道



07. 消息队列





08. 信号量



09. 进程信号



10. 线程概念及基本操作

...]]></description><category></category></item><item><title><![CDATA[Linux —— 线程概念及基本操作]]></title><link>https://blog.csdn.net/Tianzez/article/details/80415493</link><guid>https://blog.csdn.net/Tianzez/article/details/80415493</guid><author>Tianzez</author><pubDate>Wed, 23 May 2018 10:02:23 +0800</pubDate><description><![CDATA[本文转自：https://blog.csdn.net/zhangye3017/article/details/80367223


                    
                更多linux知识点：linux目录索引



1. 什么是线程

  线程是进程执行内部的一个执行分支，在一个进程内部运行的多种执行流；内部本质上是多个线程在同一个地址空间运行；第一个pcb称...]]></description><category></category></item><item><title><![CDATA[《剑指offer》面试题49：丑数]]></title><link>https://blog.csdn.net/Tianzez/article/details/80385144</link><guid>https://blog.csdn.net/Tianzez/article/details/80385144</guid><author>Tianzez</author><pubDate>Sun, 20 May 2018 20:47:21 +0800</pubDate><description><![CDATA[更多剑指offer面试习题请点击：《剑指offer》（第二版）题集目录索引



一、题目
二、解法一
三、实现代码一
四、解法二
五、实现代码二
六、测试两种方法的性能





一、题目

　　我们把只包含因子2、3和5的数称作丑数（Ugly Number）。求按从小到大的顺序的第1500个丑数。例如6、8都是丑数，但14不是，因为它包含因子7。习惯上我们把1当做第一个丑数。 
　　



二...]]></description><category></category></item><item><title><![CDATA[《剑指offer》面试题36：将二叉搜索树转换成双向链表]]></title><link>https://blog.csdn.net/Tianzez/article/details/80383051</link><guid>https://blog.csdn.net/Tianzez/article/details/80383051</guid><author>Tianzez</author><pubDate>Sun, 20 May 2018 16:40:46 +0800</pubDate><description><![CDATA[更多剑指offer面试习题请点击：《剑指offer》（第二版）题集目录索引



一、题目
二、解题思路
三、实现代码
四、测试代码
五、测试结果
六、基础代码
1. 打印双向链表
2. 销毁双向链表
3. 创建二叉树节点
4. 链接二叉树
5. 按中序遍历打印二叉树









一、题目

　　输入一棵二叉搜索树，将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点，只能调整树...]]></description><category></category></item><item><title><![CDATA[C++ —— 模板]]></title><link>https://blog.csdn.net/Tianzez/article/details/80298290</link><guid>https://blog.csdn.net/Tianzez/article/details/80298290</guid><author>Tianzez</author><pubDate>Sun, 13 May 2018 15:36:21 +0800</pubDate><description><![CDATA[C++知识总结目录索引

本文目录：



一、模板的基本概念
1. 什么是模板
2. 模板的分类
（1）模板函数
①书写格式
②代码示例
③调用规则


（2）模板类
①书写格式
②代码示例






三、非类型模板参数
四、特化类型萃取
五、模板的分离编译





一、模板的基本概念



1. 什么是模板

　　模板就是实现代码重用机制的一种工具，它可以实现类型参数化，即把类型定义为参数...]]></description><category></category></item><item><title><![CDATA[《剑指offer》面试题25：合并两个排序的链表]]></title><link>https://blog.csdn.net/Tianzez/article/details/80283999</link><guid>https://blog.csdn.net/Tianzez/article/details/80283999</guid><author>Tianzez</author><pubDate>Fri, 11 May 2018 17:05:46 +0800</pubDate><description><![CDATA[更多剑指offer面试习题请点击：《剑指offer》（第二版）题集目录索引



1. 题目
2. 递归解法
3. 非递归解法





1. 题目

　　输入两个递增排序的链表，合并这两个链表并使新链表中的结点仍然是按照递增排序的。



2. 递归解法

ListNode* MergeR(ListNode* pHead1, ListNode* pHead2)
{
    if (pHead1 ...]]></description><category></category></item><item><title><![CDATA[Linux —— 进程信号]]></title><link>https://blog.csdn.net/Tianzez/article/details/80254692</link><guid>https://blog.csdn.net/Tianzez/article/details/80254692</guid><author>Tianzez</author><pubDate>Wed, 09 May 2018 16:37:38 +0800</pubDate><description><![CDATA[

一、信号的基本概念
1. 什么是信号
2. 哪些情况会产生信号？
3. 如何查看信号
4. 进程收到信号的三种处理方式：
5. 信号的分类


二、操作信号
1. 注册信号 —— signal()函数
2. 给进程发送信号 —— kill()函数
3. 给本进程发信号——raise()函数
4. 给进程组发信号 —— killpg()函数


三、常用的SIGALRM信号
1. 闹钟信号 ——...]]></description><category></category></item></channel></rss>