<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[AI_Gentleman的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/AI_Gentleman</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; AI_Gentleman]]></copyright><item><title><![CDATA[乐观锁与悲观锁]]></title><link>https://blog.youkuaiyun.com/AI_Gentleman/article/details/103166354</link><guid>https://blog.youkuaiyun.com/AI_Gentleman/article/details/103166354</guid><author>AI_Gentleman</author><pubDate>Wed, 20 Nov 2019 17:16:57 +0800</pubDate><description><![CDATA[悲观锁：

 顾名思义，就是很悲观。每次去拿数据的时候都认为别人会修改数据，所以每次在拿数据的时候都会上锁，这样别人想拿这个数据就会block直到它拿到锁。传统的关系型数据库里边就用到了很多这种锁机制，比如行锁，表锁，读锁。写锁等，这是在做操作之前先上锁。

乐观锁：

 顾名思义，就是很乐观，每次去拿数据的时候都认为别人不会修改，所以不会上锁，但是在更新的时候会判断一下在此期间别人有没有去更...]]></description><category></category></item><item><title><![CDATA[B树与B+树的区别]]></title><link>https://blog.youkuaiyun.com/AI_Gentleman/article/details/103158320</link><guid>https://blog.youkuaiyun.com/AI_Gentleman/article/details/103158320</guid><author>AI_Gentleman</author><pubDate>Wed, 20 Nov 2019 16:38:18 +0800</pubDate><description><![CDATA[B树：

每个节点都存储key和data,所有节点组成这颗树，并且叶子节点指针为NUll



B+树

只有叶子节点存储data，叶子节点包含了这棵树的所有键值对，叶子节点不存储指针。



B树不管是叶子节点还是非叶子节点，都会保存数据，这样导致在非叶子节点中能保存的指针数量变少。指针少的情况下要保存大量的数据，只能增加树的高度，导致IO操作变多，查询性能降低。

在MySQL中，最常用的两个...]]></description><category></category></item><item><title><![CDATA[python 使用pip离线安装库]]></title><link>https://blog.youkuaiyun.com/AI_Gentleman/article/details/103048619</link><guid>https://blog.youkuaiyun.com/AI_Gentleman/article/details/103048619</guid><author>AI_Gentleman</author><pubDate>Wed, 13 Nov 2019 14:39:09 +0800</pubDate><description><![CDATA[在一台不联网的机器上，安装大量的模块。

1. 找一台同系统的联网的机器，安装好所需要的模块。

导入库信息：
pip freeze &gt; requirements.txt

将本机上安装的模块名称和模块的版本号都写入到requirements.txt文件中。可以增删里面的记录。

下载安装包用于离线安装

pip download 地址 -r requirements.txt

地址可以不写...]]></description><category></category></item><item><title><![CDATA[递归-------python代码]]></title><link>https://blog.youkuaiyun.com/AI_Gentleman/article/details/103029368</link><guid>https://blog.youkuaiyun.com/AI_Gentleman/article/details/103029368</guid><author>AI_Gentleman</author><pubDate>Tue, 12 Nov 2019 15:47:15 +0800</pubDate><description><![CDATA[递归三要素：

1. 递归终止条件

2. 终止时处理方法

3. 提出重复问题

例如：

1. 用递归计算出：1*2*3*4*5*6*7*8*......*n


def ride_recursion(n):
    if n == 1:
        return 1
    return n * ride_recursion(n - 1)
print(ride_recursion(4))...]]></description><category></category></item><item><title><![CDATA[基本排序(冒泡，选择，插入，快速)-------python]]></title><link>https://blog.youkuaiyun.com/AI_Gentleman/article/details/103028895</link><guid>https://blog.youkuaiyun.com/AI_Gentleman/article/details/103028895</guid><author>AI_Gentleman</author><pubDate>Tue, 12 Nov 2019 14:56:29 +0800</pubDate><description><![CDATA[import random
import time

data = list(range(1000))
random.shuffle(data)
#时间装饰器
def time_decorate(func):
    def time_count(*args, **kwargs):
        start = time.time()
        result = func(*args, ...]]></description><category></category></item><item><title><![CDATA[关系型数据库设计：三大范式]]></title><link>https://blog.youkuaiyun.com/AI_Gentleman/article/details/103024142</link><guid>https://blog.youkuaiyun.com/AI_Gentleman/article/details/103024142</guid><author>AI_Gentleman</author><pubDate>Tue, 12 Nov 2019 11:26:52 +0800</pubDate><description><![CDATA[目前关系型数据库设计规范中，我们通常用的，说的最多是：

第一范式：要求数据库表中的每一列都是不可分割的原子数据项。

第二范式：数据表中的每一列都和主键相关，而不能只与主键的一部分相关。(主要针对的是联合主键)

第三范式：数据不能存在传递关系，即数据表中的每一列数据都和主键直接相关。

例如：

第一范式：要求数据库表中的每一列都是不可分割的原子数据项。

学号
			姓名
			性别
			...]]></description><category></category></item><item><title><![CDATA[计算机存储]]></title><link>https://blog.youkuaiyun.com/AI_Gentleman/article/details/97912779</link><guid>https://blog.youkuaiyun.com/AI_Gentleman/article/details/97912779</guid><author>AI_Gentleman</author><pubDate>Wed, 31 Jul 2019 14:04:17 +0800</pubDate><description><![CDATA[计算机的常见存储有寄存器、高速缓存、内存、硬盘等。

寄存器就相当于人脑中立刻可以想起来的东西，CPU所做的一切运算都是针对于在寄存器中的数据进行的。寄存器存储了计算机当前要做什么计算（指令寄存器），要计算的数据（数据寄存器），计算到哪一步了（段寄存器）等信息。无论是最早的有寄存器的CPU还是最新最强的的CPU，它们的寄存器数量最多也只有几十个（特殊情况有几百个），也就是说CPU同一时刻能够立刻使...]]></description><category></category></item><item><title><![CDATA[django前端时间格式显示问题：Oct. 10, 2018, 7:42 p.m.可读性格式化]]></title><link>https://blog.youkuaiyun.com/AI_Gentleman/article/details/83003793</link><guid>https://blog.youkuaiyun.com/AI_Gentleman/article/details/83003793</guid><author>AI_Gentleman</author><pubDate>Wed, 10 Oct 2018 21:37:42 +0800</pubDate><description><![CDATA[前端页面从数据库中读取的数据为Oct. 10, 2018, 7:42 p.m.，想要转化为可读性的时间{{ project.check_time|date:&quot;Y-m-d H:i:s&quot; }}

project.check_time  为你读取的时间

|date:&quot;Y-m-d H:i:s&quot;   为时间样式过滤器...]]></description><category></category></item><item><title><![CDATA[pipenv   install 环境问题TypeError: 'module' object is not callable]]></title><link>https://blog.youkuaiyun.com/AI_Gentleman/article/details/82966963</link><guid>https://blog.youkuaiyun.com/AI_Gentleman/article/details/82966963</guid><author>AI_Gentleman</author><pubDate>Mon, 08 Oct 2018 14:33:13 +0800</pubDate><description><![CDATA[问题原因：pip版本不合适

packages/pipenv/utils.py&quot;, line 402, in resolve_deps
    req_dir=req_dir
  File &quot;/usr/local/python3.7.0/lib/python3.7/site-packages/pipenv/utils.py&quot;, line 250, in actually_resolve_deps
...]]></description><category></category></item><item><title><![CDATA[Http错误码]]></title><link>https://blog.youkuaiyun.com/AI_Gentleman/article/details/81234857</link><guid>https://blog.youkuaiyun.com/AI_Gentleman/article/details/81234857</guid><author>AI_Gentleman</author><pubDate>Fri, 27 Jul 2018 11:55:33 +0800</pubDate><description><![CDATA[ 

2xx  成功  
200  正常；请求已完成。  
201  正常；紧接 POST 命令。  
202  正常；已接受用于处理，但处理尚未完成。  
203  正常；部分信息 — 返回的信息只是一部分。  
204  正常；无响应 — 已接收请求，但不存在要回送的信息。  

3xx  重定向  
301  已移动 — 请求的数据具有新的位置且更改是永久的。  
302  已找到 — 请求...]]></description><category></category></item><item><title><![CDATA[http  tcp udp基础知识]]></title><link>https://blog.youkuaiyun.com/AI_Gentleman/article/details/81224112</link><guid>https://blog.youkuaiyun.com/AI_Gentleman/article/details/81224112</guid><author>AI_Gentleman</author><pubDate>Thu, 26 Jul 2018 17:51:46 +0800</pubDate><description><![CDATA[HTTP 协议定义服务器端和客户端之间文件传输的沟通方式

1
			GET
			请求指定的页面信息，并返回实体主体。
		2
			HEAD
			类似于get请求，只不过返回的响应中没有具体的内容，用于获取报头
		3
			POST
			向指定资源提交数据进行处理请求（例如提交表单或者上传文件）。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
		4
	...]]></description><category></category></item><item><title><![CDATA[tcp三次握手，四次挥手]]></title><link>https://blog.youkuaiyun.com/AI_Gentleman/article/details/81209053</link><guid>https://blog.youkuaiyun.com/AI_Gentleman/article/details/81209053</guid><author>AI_Gentleman</author><pubDate>Wed, 25 Jul 2018 19:51:23 +0800</pubDate><description><![CDATA[tcp三次握手
    1.A向B发起建立连接请求：
    2.B收到A的发送信号，并且向A发送确认信息
    3.A收到B的确认信号，并且向B发送确认信号

    通过第一次握手，B知道了A能够发送，通过第二次，A知道了B能发送数据，结合第一次和第二次握手，A知道了B能够接受数据，结合第三次B知道了A能够接受数据

四次挥手：
    1.A向B发起请求，表示A没有数据要发送了
    2...]]></description><category></category></item><item><title><![CDATA[python列表的常用方法]]></title><link>https://blog.youkuaiyun.com/AI_Gentleman/article/details/81206478</link><guid>https://blog.youkuaiyun.com/AI_Gentleman/article/details/81206478</guid><author>AI_Gentleman</author><pubDate>Wed, 25 Jul 2018 17:14:15 +0800</pubDate><description><![CDATA[列表的一些基本操作
方法1：
    list.count()统计
    list = [6,3,4,5,6,7,8,4]
    print(list.count(4))#统计4这个元素在列表中出现的次数

方法2：
    list.append()添加对象
    list = [1,2,3,4]
    list.append('object')#在列表末尾添加新的对象
    prin...]]></description><category></category></item><item><title><![CDATA[Python中的进程，线程，协程]]></title><link>https://blog.youkuaiyun.com/AI_Gentleman/article/details/81178987</link><guid>https://blog.youkuaiyun.com/AI_Gentleman/article/details/81178987</guid><author>AI_Gentleman</author><pubDate>Tue, 24 Jul 2018 16:11:56 +0800</pubDate><description><![CDATA[什么是进程：

     编写完毕的代码，在没有运⾏的时候，称之为程序，正在运⾏着的代码，就成为进程

    进程是一个动态的过程，占有cpu内存的计算机资源，有一定的生命周期

    进程是程序在计算机中一次执行的过程

创建子进程：

    第一种：fork(只在Unix/Linux/Mac上运⾏，windows不可以)

        程序执⾏到os.fork()时，操作系统会创建⼀...]]></description><category></category></item><item><title><![CDATA[python回收机制]]></title><link>https://blog.youkuaiyun.com/AI_Gentleman/article/details/81173648</link><guid>https://blog.youkuaiyun.com/AI_Gentleman/article/details/81173648</guid><author>AI_Gentleman</author><pubDate>Mon, 23 Jul 2018 20:24:12 +0800</pubDate><description><![CDATA[垃圾回收（一）
1. ⼩整数对象池
整数在程序中的使⽤⾮常⼴泛，Python为了优化速度，使⽤了⼩整数对象
池， 避免为整数频繁申请和销毁内存空间。
Python 对⼩整数的定义是 [-5, 257) 这些整数对象是提前建⽴好的，不会被
垃圾回收。在⼀个 Python 的程序中，所有位于这个范围内的整数使⽤的都
是同⼀个对象.
同理，单个字⺟也是这样的。
但是当定义2个相同的字符串时，引⽤计数为0...]]></description><category></category></item><item><title><![CDATA[闭包和装饰器]]></title><link>https://blog.youkuaiyun.com/AI_Gentleman/article/details/81170348</link><guid>https://blog.youkuaiyun.com/AI_Gentleman/article/details/81170348</guid><author>AI_Gentleman</author><pubDate>Mon, 23 Jul 2018 19:50:54 +0800</pubDate><description><![CDATA[在Python中创建一个闭包可以归结为以下三点：

闭包函数必须有内嵌函数
	内嵌函数需要引用该嵌套函数上一级namespace中的变量
	闭包函数必须返回内嵌函数
闭包思考：
1.闭包似优化了变量，原来需要类对象完成的⼯作，闭包也可以完成
2.由于闭包引⽤了外部函数的局部变量，则外部函数的局部变量没有及时释放，消耗内存

 

装饰器：

开放封闭原则：
    封闭：已实现的功能代码块
   ...]]></description><category></category></item><item><title><![CDATA[python生成器和迭代器]]></title><link>https://blog.youkuaiyun.com/AI_Gentleman/article/details/81144598</link><guid>https://blog.youkuaiyun.com/AI_Gentleman/article/details/81144598</guid><author>AI_Gentleman</author><pubDate>Sat, 21 Jul 2018 15:59:30 +0800</pubDate><description><![CDATA[什么是⽣成器
    通过列表⽣成式，我们可以直接创建⼀个列表。但是，受到内存限制，列表
容量肯定是有限的。⽽且，创建⼀个包含100万个元素的列表，不仅占⽤很
⼤的存储空间，如果我们仅仅需要访问前⾯⼏个元素，那后⾯绝⼤多数元素
占⽤的空间都⽩⽩浪费了。所以，如果列表元素可以按照某种算法推算出
来，那我们是否可以在循环的过程中不断推算出后续的元素呢？这样就不必
创建完整的list，从⽽节省⼤量的空间...]]></description><category></category></item><item><title><![CDATA[列结构]]></title><link>https://blog.youkuaiyun.com/AI_Gentleman/article/details/81143591</link><guid>https://blog.youkuaiyun.com/AI_Gentleman/article/details/81143591</guid><author>AI_Gentleman</author><pubDate>Sat, 21 Jul 2018 12:59:13 +0800</pubDate><description><![CDATA[操作

Queue() 创建一个空的队列
	enqueue(item) 往队列中添加一个item元素
	dequeue() 从队列头部删除一个元素
	is_empty() 判断一个队列是否为空
	size() 返回队列的大小
实例：

class Queue(object):
    &quot;&quot;&quot;队列&quot;&quot;&quot;
    def __init__(self):
        self.items = []
...]]></description><category></category></item><item><title><![CDATA[栈的基本操作]]></title><link>https://blog.youkuaiyun.com/AI_Gentleman/article/details/81143540</link><guid>https://blog.youkuaiyun.com/AI_Gentleman/article/details/81143540</guid><author>AI_Gentleman</author><pubDate>Sat, 21 Jul 2018 12:51:16 +0800</pubDate><description><![CDATA[栈的操作

Stack() 创建一个新的空栈
	push(item) 添加一个新的元素item到栈顶
	pop() 弹出栈顶元素
	peek() 返回栈顶元素
	is_empty() 判断栈是否为空
	size() 返回栈的元素个数
实例：

class Stack(object):
    &quot;&quot;&quot;栈&quot;&quot;&quot;
    def __init__(self):
         self.items =...]]></description><category></category></item><item><title><![CDATA[Ubuntu系统（1）]]></title><link>https://blog.youkuaiyun.com/AI_Gentleman/article/details/79920700</link><guid>https://blog.youkuaiyun.com/AI_Gentleman/article/details/79920700</guid><author>AI_Gentleman</author><pubDate>Thu, 12 Apr 2018 22:10:22 +0800</pubDate><description><![CDATA[路径：

绝对路径：以“/”字符开头的路径为绝对路径。根（root）为/

相对路径：不以“/”字符开头

. 当前文件夹（目录）

.. 上一级文件夹

~ 用户主目录

pwd命令：

作用：显示当前的工作路径在哪

ls 命令：

作用：显示指定文件夹或文件信息

常用选项： -l 列表显示详细信息          -a  显示全部的文件/文件夹（包含以.开头的隐藏文件）

cd 命令：
...]]></description><category></category></item></channel></rss>