<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[koganlee的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/koganlee</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; koganlee]]></copyright><item><title><![CDATA[Python笔记（一）]]></title><link>https://blog.youkuaiyun.com/koganlee/article/details/125360471</link><guid>https://blog.youkuaiyun.com/koganlee/article/details/125360471</guid><author>koganlee</author><pubDate>Sun, 19 Jun 2022 19:11:22 +0800</pubDate><description><![CDATA[近来准备学习一门脚本语言， 看来Python是东西比较多的，我想往自动驾驶方向靠拢，而且智能驾驶方向需要Python技能。运行python脚本， 直接使用python + 文件名即可。        print("hello, world.") huo print('Hello, word.')双引号和单引号的作用是一样的。


        从键盘中输入： input('tips')，  括号是输入时的提示相关词。...]]></description><category></category></item><item><title><![CDATA[项目应用层协议XML、JSON和protobuf（未完待续）]]></title><link>https://blog.youkuaiyun.com/koganlee/article/details/113927043</link><guid>https://blog.youkuaiyun.com/koganlee/article/details/113927043</guid><author>koganlee</author><pubDate>Mon, 22 Feb 2021 02:22:43 +0800</pubDate><description><![CDATA[协议是一种约定，通过约定，不同的进程可以对一段数据产生相同的理解，从而可以相互协作，存在进程间通信的程序就一定需要协议。 我接触到的项目中基本上在使用XML、JSON等。 XML的使用可以参考我之前的文章《XML2的使用》

做某广播系统的时候， 见到代码中的注释里写着序列化和反序列化， 然后我去百度了相应的含义。

 序列化：把对象转换为字节序列的过程称为对象的序列化。
  反序列化：把字节序列恢复为对象的过程称为对象的反序列化。

序列化的代码就是把对象里存储的信息转成了...]]></description><category></category></item><item><title><![CDATA[从全民K歌中学习Redis的使用]]></title><link>https://blog.youkuaiyun.com/koganlee/article/details/113819674</link><guid>https://blog.youkuaiyun.com/koganlee/article/details/113819674</guid><author>koganlee</author><pubDate>Mon, 15 Feb 2021 21:26:49 +0800</pubDate><description><![CDATA[​ 全民K歌是一款K歌软件，是少数几个已经做到上市的K歌软件，当然还有一款唱吧。那么我们就从全民K歌的业务层来展示如何学习Redis。

首先全民K歌在消息机制中用了生产者-消费者模型， 客户端是消费者消费服务器发送过来的消息，应该是用了Kafka这样的消息队列。业务代码采用PHP或Golang这类支持热更新的语言。

 首先，先介绍Redis有哪些结构， 然后全民K歌中如何使用这些数据结构。


	字符串类型 string
	
	
	哈希类型 hash
	
	
	列表类型 list
...]]></description><category></category></item><item><title><![CDATA[从底层协议的角度来浅谈Linux网络编程（未完待续）]]></title><link>https://blog.youkuaiyun.com/koganlee/article/details/113764339</link><guid>https://blog.youkuaiyun.com/koganlee/article/details/113764339</guid><author>koganlee</author><pubDate>Mon, 08 Feb 2021 23:52:54 +0800</pubDate><description><![CDATA[近来做了一个网络工具项目， 发现网络知识在整个项目中起到了举足轻重的作用，同时也能加深对网络知识的了解， 进而我对《高性能服务器编程》中书的知识点的加强。 那么来说说该怎么学习一下网络编程。

 首先，肯定是要学习协议， 但是个人建议先把代码运行起来，同时配合使用tcpdump或wireshark来学习。 wireshark有图形化界面，更好操作。
...]]></description><category></category></item><item><title><![CDATA[如何在Linux上安装MongoDB并成功启动]]></title><link>https://blog.youkuaiyun.com/koganlee/article/details/109606752</link><guid>https://blog.youkuaiyun.com/koganlee/article/details/109606752</guid><author>koganlee</author><pubDate>Tue, 10 Nov 2020 20:36:11 +0800</pubDate><description><![CDATA[安装：


创建好必要的文件夹：
sudo mkdir -p /opt/mongodb
sudo mkdir -p /data/db             创建数据库文件夹(默认的数据库文件的位置是/data/db,启动时会自动创建)
sudo mkdir -p /opt/mongodb/logs    创建目录
sudo touch /opt/mongodb/logs/mongodb.log      创建空文件！ 注意不是目录而是文件

1.下载MongoDB
wget https://fastdl.]]></description><category></category></item><item><title><![CDATA[散列（哈希）实现以及如何解决散列冲突]]></title><link>https://blog.youkuaiyun.com/koganlee/article/details/109468119</link><guid>https://blog.youkuaiyun.com/koganlee/article/details/109468119</guid><author>koganlee</author><pubDate>Tue, 03 Nov 2020 14:03:36 +0800</pubDate><description><![CDATA[近来上班划水划得起飞，又有时间可以写文章了。

 先总结一下《数据结构与算法分析》中散列的定义：

散列函数：每个关键字被映射到从0到Tablesize -1这个范围中的某个数，并且被放到适当的单元中。这个映射关系被称为散列函数。

散列冲突（哈希冲突）：两个关键字散列到同一个值。



哈希代码：

第一种（适用整数）：


typedef unsigned int Index;

Index Hash(const char *key, int tableSize)
{
    unsigned in..]]></description><category></category></item><item><title><![CDATA[redis 哈希类型以及实现原理]]></title><link>https://blog.youkuaiyun.com/koganlee/article/details/109375216</link><guid>https://blog.youkuaiyun.com/koganlee/article/details/109375216</guid><author>koganlee</author><pubDate>Thu, 29 Oct 2020 23:49:37 +0800</pubDate><description><![CDATA[一种以存储键值对的形式字典结构（key-value）。

哈希类型适合存储对象；使用对象类别和ID构成键名，使用字段表示独享的属性。而字段存储属性值。


hset key field value field2 value2 field3 value3 //这条语句等价于 

hmset key field value field2 value2 field3 value3



例如一扫地机器人， 可以称它为ROBOT:1， 它的功能（function）为清洁（cleaning），它的名称(name)为j]]></description><category></category></item><item><title><![CDATA[C++ lambda表达式]]></title><link>https://blog.youkuaiyun.com/koganlee/article/details/108440104</link><guid>https://blog.youkuaiyun.com/koganlee/article/details/108440104</guid><author>koganlee</author><pubDate>Mon, 07 Sep 2020 07:06:14 +0800</pubDate><description><![CDATA[lambda表达式实际上是对函数对象的一种强化和拓展，可以直接定义匿名的函数对象。


[] (params) {}
[]为引出操作符(lambda introducer)
(params) {}为lambda表达式



lambda表达式的类型成为“闭包”(closure type)。

闭包：能够读取其他函数内部变量的函数。




auto f1 = [](int x) 
{
    return x * x;
};

auto f2 = [](string)
{
    cout &lt;&l..]]></description><category></category></item><item><title><![CDATA[C++11（六） 条件变量（condition_variable）]]></title><link>https://blog.youkuaiyun.com/koganlee/article/details/108437699</link><guid>https://blog.youkuaiyun.com/koganlee/article/details/108437699</guid><author>koganlee</author><pubDate>Sun, 06 Sep 2020 22:08:27 +0800</pubDate><description><![CDATA[前面提到了线程，那么肯定就要说到条件变量。

条件变量是利用线程间共享的全局变量进行同步的一种机制，主要包括两个动作：一个线程等待

条件变量的条件成立而挂起;另一个线程使条件成立（给出条件成立信号）。为了防止竞争，条件变

量的使用总是和一个互斥量结合在一起。

头文件&lt;condition_variable&gt;


	condition_variable
	
	
	​condition_variable_any
	
相同点：两者都能与std::mutex一起使用。

不同点：前者仅限于与 std]]></description><category></category></item><item><title><![CDATA[内存池概念以及实现（完善中）]]></title><link>https://blog.youkuaiyun.com/koganlee/article/details/108313857</link><guid>https://blog.youkuaiyun.com/koganlee/article/details/108313857</guid><author>koganlee</author><pubDate>Mon, 31 Aug 2020 00:33:05 +0800</pubDate><description><![CDATA[概念：内存池则是在真正使用内存之前，先申请分配一定数量的、大小相等(一般情况下)的内存块留作备用。当有新的内存需求时，就从内存池中分出一部分内存块，若内存块不够再继续申请新的内存。这样做的一个显著优点是，使得内存分配效率得到提升。

节点数据结构： d


struct mp_node_s
{
    unsigned char *start;
    unsigned cahr *end;
    struct node *next;
    int failed;   //标识
}

大块内存...]]></description><category></category></item><item><title><![CDATA[C++11（三）]]></title><link>https://blog.youkuaiyun.com/koganlee/article/details/108302171</link><guid>https://blog.youkuaiyun.com/koganlee/article/details/108302171</guid><author>koganlee</author><pubDate>Sun, 30 Aug 2020 01:42:11 +0800</pubDate><description><![CDATA[自动类型推导。

C++是一种强类型的静态语言，任何变量、表达式都要有明确的类型。

例如：long x = 0L;

对于简单的变量，还是很容易写出它的类型，但是比如说类、命名总奖金、模板等类型变量，缺很难写出该变量的类型。

auto:推导某个变量在赋值语句中的类型。

auto x = 0L;



auto只能用于赋值语句中类型的推导。
	atuo总是能推断出值的类型。
	aotu允许使用const /volatile/&amp;/*等修饰，从而等到新的类型。
	auto&amp;&amp;总是推.]]></description><category></category></item><item><title><![CDATA[初探函数指针——为线程传参铺路]]></title><link>https://blog.youkuaiyun.com/koganlee/article/details/108174386</link><guid>https://blog.youkuaiyun.com/koganlee/article/details/108174386</guid><author>koganlee</author><pubDate>Sun, 23 Aug 2020 00:17:58 +0800</pubDate><description><![CDATA[TODO
]]></description><category></category></item><item><title><![CDATA[C++11（五） thread]]></title><link>https://blog.youkuaiyun.com/koganlee/article/details/108115462</link><guid>https://blog.youkuaiyun.com/koganlee/article/details/108115462</guid><author>koganlee</author><pubDate>Thu, 20 Aug 2020 07:49:22 +0800</pubDate><description><![CDATA[C++11标准中添加了线程以及对对线程相关的类。

线程在头文件&lt;thread&gt;中定义。

线程的构造函数：




std::thread::thread
thread(); //只是创建了一个新的线程对象而并不能代表线程。
thread( thread&amp;&amp; other );  //移动构造函数，可以接受从另外一个线程那转移过来的线程。 
template&lt; class Function, class... Args &gt;
explicit thread( Funct]]></description><category></category></item><item><title><![CDATA[MySQL性能优化]]></title><link>https://blog.youkuaiyun.com/koganlee/article/details/108090486</link><guid>https://blog.youkuaiyun.com/koganlee/article/details/108090486</guid><author>koganlee</author><pubDate>Tue, 18 Aug 2020 23:54:00 +0800</pubDate><description><![CDATA[其实就是三点：

查询优化。
	索引优化。
	库表结构优化。
//TODO
]]></description><category></category></item><item><title><![CDATA[线程同步属性锁]]></title><link>https://blog.youkuaiyun.com/koganlee/article/details/108015929</link><guid>https://blog.youkuaiyun.com/koganlee/article/details/108015929</guid><author>koganlee</author><pubDate>Sat, 15 Aug 2020 00:01:18 +0800</pubDate><description><![CDATA[互斥锁（mutex）:确保同一时间只有一个线程访问数据。在访问共享资源前对互斥量进行设置（加锁），在访问完成后释放（解锁）互斥量。只有两个状态：加锁和不加锁状态。



读写锁（rw lock）：与互斥锁相似，不过读写锁允许更高的并行性。

三种状态：

读模式下加锁
	写模式下加锁
	无锁状态。
一次只有一个线程可以战友写模式的读写锁，但是多个线程可以同时占有读模式的读写锁。

自旋锁（spin lock）：

忙则等待。 用于一下情况：锁被持有的时间短，而且线程并不希望在重新调度上花费太多成本。充分压.]]></description><category></category></item><item><title><![CDATA[C++11（四）bind  function mem_fn]]></title><link>https://blog.youkuaiyun.com/koganlee/article/details/107755031</link><guid>https://blog.youkuaiyun.com/koganlee/article/details/107755031</guid><author>koganlee</author><pubDate>Mon, 03 Aug 2020 01:05:25 +0800</pubDate><description><![CDATA[​function
	
相当于一个函数对象的容器，该容器可以容纳函数、lambda表达式、bind()和函数对象。


template&lt; class R, class... Args &gt;class function&lt;R(Args...)&gt;;//其中R代表result_type，即返回类型。容器容纳函数函数的返回值。//Args代表容器容纳函数函数传入的参数。//class... Args代表可变参数，意思就是支持多个参数。


	bind
	
函数适配器，可以适配任意可调用对象..]]></description><category></category></item><item><title><![CDATA[如何使用C++11标准语法的语句写出指向类的成员的指针]]></title><link>https://blog.youkuaiyun.com/koganlee/article/details/107742671</link><guid>https://blog.youkuaiyun.com/koganlee/article/details/107742671</guid><author>koganlee</author><pubDate>Sun, 02 Aug 2020 11:52:28 +0800</pubDate><description><![CDATA[C++11语法中的：mem_fn。 先上定义：


template&lt; class R, class T &gt;
/*unspecified*/ mem_fn(R T::* pm);
//R代表result_type，即返回类型。 
//T代表传入的class或struct。
//pm - pointer to member that will be wrapped.

该函数可以传入struct或class。然后返回一个指向传入object的函数容器。该容器可以指向struct或class的成员变]]></description><category></category></item><item><title><![CDATA[如何做一份清爽且高质量的简历（一）]]></title><link>https://blog.youkuaiyun.com/koganlee/article/details/107737920</link><guid>https://blog.youkuaiyun.com/koganlee/article/details/107737920</guid><author>koganlee</author><pubDate>Sat, 01 Aug 2020 23:14:46 +0800</pubDate><description><![CDATA[简历分为三个等级：低级、中级和高级。

低级：只会罗列自己的工作履历。
	中级：会介绍自己的项目中用到了什么技术。
	高级：不但会详细介绍自己项目用了什么技术，甚至还能突出自己做了什么工作。
先摆上低级类型的简历。



柯江小点评：都毕业两年了，还把自己的获奖信息写在上面，请问是没有内容写了吗？别人根本就不关心你是否结婚。除了国企外谁在乎你的政治面貌。还把学历信息放在最前面， 万一别人就想招一科班的，看到开头就不会往下看了，除非你的学校非常好，不然还是老老实实把学历信息放最后。

  写工作...]]></description><category></category></item><item><title><![CDATA[Redis（一）安装和基本操作]]></title><link>https://blog.youkuaiyun.com/koganlee/article/details/106991290</link><guid>https://blog.youkuaiyun.com/koganlee/article/details/106991290</guid><author>koganlee</author><pubDate>Sun, 28 Jun 2020 01:24:36 +0800</pubDate><description><![CDATA[redis是一个key-value存储系统。和Memcached类似，它支持存储的value类型相对更多，包括string(字符串)、list(链表)、set(集合)、zset(sorted set --有序集合)和hash（哈希类型）。

它是一个内存型数据库，所有的数据都存在内存中，一旦断电会丢失所有数据。所以它必须要持久化，将数据写入磁盘中。

首先，只需要知道有这些知识点，不需要强迫自己记忆，多练习就好。

安装：

直接下载目前最新的6.0.3 版本，下载地址：


htt...]]></description><category></category></item><item><title><![CDATA[在华为外包的工作体验]]></title><link>https://blog.youkuaiyun.com/koganlee/article/details/106879914</link><guid>https://blog.youkuaiyun.com/koganlee/article/details/106879914</guid><author>koganlee</author><pubDate>Sat, 27 Jun 2020 14:52:15 +0800</pubDate><description><![CDATA[作为一名在广州华为中国移动运营商部门做了9个月的外包的人来说一下这种体验。工作地点在潭村广电科技大厦。这边的华为外包是TM模式，通过向外包公司租赁员工在华为办公场地办公。这边华为正式员工不超过10%，大部分都是管理层。正式员工中有少部分SE、开发、测试。正式员工周六上班，外包双休。十分讽刺。大部分都是外包员工，工牌是黄色工带。所以在这里你不会有二等公民的感受，因为大部分人都是外包。这边加班以调休为主，周六周日加班一天，日后可以调休一天。少部分情况下可以拿到加班工资。

其中还有部分正式员工被开，然后那人和外]]></description><category></category></item></channel></rss>