<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[实践是检验真理的唯一标准]]></title><description><![CDATA[c++, python,  数据结构与算法，自然语言处理与数据挖掘，系统架构，软件架构。]]></description><link>https://blog.csdn.net/coder_yi_liu</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; coder_yi_liu]]></copyright><item><title><![CDATA[算法blog合集]]></title><link>https://blog.csdn.net/coder_yi_liu/article/details/148446992</link><guid>https://blog.csdn.net/coder_yi_liu/article/details/148446992</guid><author>coder_yi_liu</author><pubDate>Thu, 05 Jun 2025 11:48:38 +0800</pubDate><description><![CDATA[https://zhuanlan.zhihu.com/p/600245782https://zhuanlan.zhihu.com/p/696212679https://zhuanlan.zhihu.com/p/291406172【推荐系统】DSSM双塔召回2_pair-wise训练和推理-CSDN博客精通推荐算法1：为什么需要推荐系统（系列文章，建议收藏）-CSDN博客精通推荐算法5：特征交叉 -- 总体架构模型量化详解-CSDN博客https://www.51cto.com/article/706035.]]></description><category></category></item><item><title><![CDATA[python手写kmeans算法]]></title><link>https://blog.csdn.net/coder_yi_liu/article/details/112535466</link><guid>https://blog.csdn.net/coder_yi_liu/article/details/112535466</guid><author>coder_yi_liu</author><pubDate>Tue, 12 Jan 2021 16:43:49 +0800</pubDate><description><![CDATA[kmean聚类是最基础和常见的算法，工程上使用比较常见，spark, sklearn都有实现，本文手写实现kmeans


#!/usr/bin/python
import sys
import random
import math

def create_rand_points(max_x, max_y, count):
    """Create count points (0-x), (0-y).

    """
    points = []
    for i in range(0, count]]></description><category></category></item><item><title><![CDATA[今日头条面试算法题]]></title><link>https://blog.csdn.net/coder_yi_liu/article/details/71554123</link><guid>https://blog.csdn.net/coder_yi_liu/article/details/71554123</guid><author>coder_yi_liu</author><pubDate>Wed, 10 May 2017 17:36:29 +0800</pubDate><description><![CDATA[题目：给定一个整形数组，数组是无重复随机无序的，要求打印出所有元素左边第一个大于该元素的值。]]></description><category></category></item><item><title><![CDATA[高可用，高性能，线程安全，自动数据恢复 redo log 类]]></title><link>https://blog.csdn.net/coder_yi_liu/article/details/52454513</link><guid>https://blog.csdn.net/coder_yi_liu/article/details/52454513</guid><author>coder_yi_liu</author><pubDate>Tue, 06 Sep 2016 22:51:03 +0800</pubDate><description><![CDATA[在金融，电商，等高可用环境下，不允许有任何数据丢失的情况，redo log 是一个不错的低成本高可用方案，其作用有点类似mysql binlog, 下面在生产环境中事件和优化的多线程安全，自己恢复的 c++ redo log 类，在实际生产过程遇到相应问题，很多地方进行优化设计，尽量保持高性能和高可靠性。]]></description><category></category></item><item><title><![CDATA[linux c/c++ 后台开发之—连接池]]></title><link>https://blog.csdn.net/coder_yi_liu/article/details/51163991</link><guid>https://blog.csdn.net/coder_yi_liu/article/details/51163991</guid><author>coder_yi_liu</author><pubDate>Fri, 15 Apr 2016 19:03:09 +0800</pubDate><description><![CDATA[在互联网后台开发中经常需要需要范围一些公共资源，如DB，cache, MQ,  最典型的的就是mysql, memcached, redis, 以及一些代理服务；
通常在高并发，高访问量的情况下，起停连接，是不合适的，也容易将连接占满， 尤其是工作线程多的情况，如果每个工作线程建立连接，如果服务多的情况会使得连接不够用，而且连接有时候会出现空闲的情况；连接池的作用就是保持一定数量的连接，提供给多线程服务使用，通过压力测试配置合适的连接数量，实现性能和资源的最优化。]]></description><category></category></item><item><title><![CDATA[Linux mysql  c API封装]]></title><link>https://blog.csdn.net/coder_yi_liu/article/details/51162219</link><guid>https://blog.csdn.net/coder_yi_liu/article/details/51162219</guid><author>coder_yi_liu</author><pubDate>Fri, 15 Apr 2016 15:57:18 +0800</pubDate><description><![CDATA[mysql 是目前使用量最大的关系型数据库，在互联网公司应用非常广泛，在一些非高并发场景下应用MySQL能大幅降低开发运维和部署的成本。
下面是自己封装的c++ 风格的MySQL客户端，相对原生的c api 使用相对更加简便一些]]></description><category></category></item><item><title><![CDATA[随机算法之—结果集中随机取出N个结果]]></title><link>https://blog.csdn.net/coder_yi_liu/article/details/50353026</link><guid>https://blog.csdn.net/coder_yi_liu/article/details/50353026</guid><author>coder_yi_liu</author><pubDate>Fri, 18 Dec 2015 17:24:03 +0800</pubDate><description><![CDATA[随机算法在互联网产品中随处可见，验证码就是其中一种，还有很多随机出结果的场景，数据挖掘的随机抽样等等
而其中非常常见的一种就是在一个大的结果集中随机高效抽取N个结果下面是自己实现的，在工程中使用的随机取N个结果的随机算法
#include
#include
#include
using namespace std;
template
void rand_n(vector& src, int r]]></description><category></category></item><item><title><![CDATA[shuffle算法及应用]]></title><link>https://blog.csdn.net/coder_yi_liu/article/details/50352701</link><guid>https://blog.csdn.net/coder_yi_liu/article/details/50352701</guid><author>coder_yi_liu</author><pubDate>Fri, 18 Dec 2015 16:58:54 +0800</pubDate><description><![CDATA[shuffle算法（洗牌算法）就是将顺序打乱，一个典型的应该就是音乐播放器随机播放，而在机器学习，数据挖掘，做抽样的时候需要shuffle, 一个好的shuffle算法主要是保证时间复杂度是最小的]]></description><category></category></item><item><title><![CDATA[linux c/c++ 后台开发常用算法之：一致性哈希算法]]></title><link>https://blog.csdn.net/coder_yi_liu/article/details/49669491</link><guid>https://blog.csdn.net/coder_yi_liu/article/details/49669491</guid><author>coder_yi_liu</author><pubDate>Thu, 05 Nov 2015 23:16:46 +0800</pubDate><description><![CDATA[一致性哈希主要应用在大规模高可用性的分布式存储上，尤其是KV存储上面，比如memcaced, redis 集群，相比普通hash % N 的优点在于，但动听增加或者删除节点的时候，数据的迁移会比较小，通常只有部分抖动和迁移。但是其相对于hash %N 的缺点数据均匀性肯定不如 hash %N 尤其是数据的key在一个较小的范围内，容易出现均匀的现象，但是可以通过hash函数调优，以及增加虚拟节点的方法来降低不均匀性。下面试自己写的一个c++版本的一致性哈希算法]]></description><category></category></item><item><title><![CDATA[linux c/c++ 后台开发常用算法之：md5算法c++版实现]]></title><link>https://blog.csdn.net/coder_yi_liu/article/details/49669293</link><guid>https://blog.csdn.net/coder_yi_liu/article/details/49669293</guid><author>coder_yi_liu</author><pubDate>Thu, 05 Nov 2015 22:56:21 +0800</pubDate><description><![CDATA[MD5即Message-Digest
 Algorithm 5（消息摘要算法第五版）的简称，是当前计算机领域用于确保信息传输完整一致而广泛使用的散列算法之一（又译哈希算法、摘要算法等），主流编程语言普遍已有MD5的实现。将数据（如一段文字）运算变为另一固定长度值，是散列算法的基础，
 下面是c++版的MD5算法实现


#include]]></description><category></category></item><item><title><![CDATA[linux c/c++ 后台开发常用组件之: 高性能local cache]]></title><link>https://blog.csdn.net/coder_yi_liu/article/details/49453827</link><guid>https://blog.csdn.net/coder_yi_liu/article/details/49453827</guid><author>coder_yi_liu</author><pubDate>Tue, 27 Oct 2015 20:53:11 +0800</pubDate><description><![CDATA[缓存在后台开发中是经常使用的，通常有通用的缓存服务，开源的有memcache, redis, 但是在数据量不是特别大，性能要求极高的情况，以及减少搭建和维护专门的缓存服务的成本，本地缓存具有很好的性能以及减少运维成本，本地缓存可以显著的减少网络开销，带来更高的性能，还可以避免缓存服务单点问题 ，下面是自己封装的一个基于LRU缓存淘汰算法的多线程安全LRU缓存组件，已经在项目中使用。]]></description><category></category></item><item><title><![CDATA[linux c/c++ 后台开发常用组件之：高级字符串处理库]]></title><link>https://blog.csdn.net/coder_yi_liu/article/details/48143261</link><guid>https://blog.csdn.net/coder_yi_liu/article/details/48143261</guid><author>coder_yi_liu</author><pubDate>Mon, 31 Aug 2015 23:40:35 +0800</pubDate><description><![CDATA[字符串是目前处理是目前工程项目中出现最多的问题，尤其是自然语言处理，文本处理和分析等等，c++目前只提供比较简单的字符串处理函数，不像Python，Java对字符串操作功能强大，下面是自己封装的几个常用字符处理的函数，其实功能实现应该有很多种，但是由于字符串处理是基础函数，需要适当的考虑算法实现的性能。下面是自己实现的一些功能，性能感觉还不错。


/***********************...]]></description><category></category></item><item><title><![CDATA[阿里巴巴面试题，rpc请求保序接收算法]]></title><link>https://blog.csdn.net/coder_yi_liu/article/details/44899823</link><guid>https://blog.csdn.net/coder_yi_liu/article/details/44899823</guid><author>coder_yi_liu</author><pubDate>Mon, 06 Apr 2015 10:07:56 +0800</pubDate><description><![CDATA[分布式系统中，数据经常到达顺序不一致，所以经常需要优先处理先到的有序数据，而不是等所有数据都到了再处理，这个算法在很多的场景比较适应，可以提高系统的吞吐量]]></description><category></category></item><item><title><![CDATA[c++ STL 工程实践的15条建议]]></title><link>https://blog.csdn.net/coder_yi_liu/article/details/41777811</link><guid>https://blog.csdn.net/coder_yi_liu/article/details/41777811</guid><author>coder_yi_liu</author><pubDate>Sat, 06 Dec 2014 20:20:34 +0800</pubDate><description><![CDATA[STL是c++非常重要的一部分，它是很多大神的杰作，高效，稳定，可扩展性好，虽然STL确实存在难以调试，内存碎片的问题（现在机器的内存越来越大，内存碎片的问题基本不太可能成为系统瓶颈，但只要你使用恰当，它能显著提高生产力，并使代码更短，更易维护。
而在工程中，如果不养成好的使用习惯，也容易造成一些问题！]]></description><category></category></item><item><title><![CDATA[linux c/c++ 单机和集群memcached客户端]]></title><link>https://blog.csdn.net/coder_yi_liu/article/details/41118869</link><guid>https://blog.csdn.net/coder_yi_liu/article/details/41118869</guid><author>coder_yi_liu</author><pubDate>Fri, 14 Nov 2014 15:08:26 +0800</pubDate><description><![CDATA[单机和集群分布式memcached 客户端封装]]></description><category></category></item><item><title><![CDATA[linux c/c++ 后台开发常用组件之:高性能阻塞队列]]></title><link>https://blog.csdn.net/coder_yi_liu/article/details/41093453</link><guid>https://blog.csdn.net/coder_yi_liu/article/details/41093453</guid><author>coder_yi_liu</author><pubDate>Thu, 13 Nov 2014 23:37:24 +0800</pubDate><description><![CDATA[阻塞队列是后台开发中多线程异步架构的基本数据结构，像python, java 都提供线程安全的阻塞队列，c++ 可能需要自己实现一个模板。
从性能考虑，自己没有使用STL的queue作为基本数据结构，而是使用循环数组作为基本数据结构，性能应该比queue高，省去了动态内存分配和回收。
确定就是，队列大小不可动态扩展，实际开发中，可以通过压力测试，配置合适的队列大小。
代码量非常小，可以进行工程开发直接使用。]]></description><category></category></item><item><title><![CDATA[linux 下pyhton 删除指定目录下所有的重复内容的文件]]></title><link>https://blog.csdn.net/coder_yi_liu/article/details/17636655</link><guid>https://blog.csdn.net/coder_yi_liu/article/details/17636655</guid><author>coder_yi_liu</author><pubDate>Sat, 28 Dec 2013 19:03:07 +0800</pubDate><description><![CDATA[#!/usr/bin/python

import sys
import os
import filecmp

if __name__ == '__main__':
	"""Delete the dups files.

	"""
	if len(sys.argv) != 2:
		print 'input the dir'
	all_files = []
	for a,b,c in os.wal]]></description><category></category></item><item><title><![CDATA[多线程共享数据的更新的解决办法]]></title><link>https://blog.csdn.net/coder_yi_liu/article/details/17317953</link><guid>https://blog.csdn.net/coder_yi_liu/article/details/17317953</guid><author>coder_yi_liu</author><pubDate>Sat, 14 Dec 2013 13:27:54 +0800</pubDate><description><![CDATA[一个线程负责取数据，每次new 一个新的buffer，接收全量或者增量数据，用一个临时指针指向之前正在使用的数据，新的buffer加载好后，将使用数据的全局指针指向新的buffer，（在切换成新指针的时候加上写锁，其他的地方加上读锁）再delete 临时指针（释放老的数据），这个方法在我之前的一个项目中运行很长时间重来没有出现过问题，这样实现了共享数据只在切换的时候加上写锁，其他地方只有读锁，显著的减少了锁竞争，和锁粒度。实现了数据更新的无缝切换。此方案在数据一致性要求非常严格的场景并不适应，只是适应不经常]]></description><category></category></item><item><title><![CDATA[c++ 工程基础之STL系列 （四） map]]></title><link>https://blog.csdn.net/coder_yi_liu/article/details/17317849</link><guid>https://blog.csdn.net/coder_yi_liu/article/details/17317849</guid><author>coder_yi_liu</author><pubDate>Sat, 14 Dec 2013 13:06:02 +0800</pubDate><description><![CDATA[map在实际工程中应用非常广泛，基本上都会使用到，起内部实现是红黑树，查询和插入，删除复杂度都是log2(n)，尤其在查询操作中非常方便，性能也很高


#include
#include
#include
using namespace std;
int main()
{
	map a;
	map b;
	//插入有两种方式
	a[0] = 0;a[0] = 0;
	a.insert(pa]]></description><category></category></item><item><title><![CDATA[c++ 工程基础之STL系列 （三） set]]></title><link>https://blog.csdn.net/coder_yi_liu/article/details/17191509</link><guid>https://blog.csdn.net/coder_yi_liu/article/details/17191509</guid><author>coder_yi_liu</author><pubDate>Sat, 07 Dec 2013 20:06:48 +0800</pubDate><description><![CDATA[set也是在工程中常用的数据结构，在需要快速查找和插入的场景，也适合一些排重和需要按关键字排序插入的场景。multiset使用的场景应该不是太多，下面主要介绍下set中一些常用的方法。


#include
#include
using namespace std;
struct node
{
int key;
int value;
bool operator 
{
ret]]></description><category></category></item></channel></rss>