<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[icenic的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/icenic</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; icenic]]></copyright><item><title><![CDATA[光伏数据采集分析系统]]></title><link>https://blog.youkuaiyun.com/icenic/article/details/102540599</link><guid>https://blog.youkuaiyun.com/icenic/article/details/102540599</guid><author>icenic</author><pubDate>Mon, 14 Oct 2019 03:07:24 +0800</pubDate><description><![CDATA[这个数据采集系统可以算作一个物联网项目。主要就是通过工控机的串口连接各种类型的智能直流电表、智能交流电表、CR1000环境数据采集器和逆变器，然后实时采集各种相关数据存到本地，然后统一上传到云平台进行统计分析并生成各种报表。这一堆设备里面我只知道电表，其他根本没概念，串口程序也从来写过，所以本来也没想答应。但是没想到国庆假期的第一天我就收到了朋友寄过来的一大堆设备，并给了一套他们之前用的程序源码，...]]></description><category></category></item><item><title><![CDATA[智能客服客户端程序开发]]></title><link>https://blog.youkuaiyun.com/icenic/article/details/102518344</link><guid>https://blog.youkuaiyun.com/icenic/article/details/102518344</guid><author>icenic</author><pubDate>Sat, 12 Oct 2019 14:34:18 +0800</pubDate><description><![CDATA[这个国庆节作死，答应别人在七天内做2个项目。智能客服项目是其中一个，当时是答应给隔壁兄弟团队做的。他们说实在搞不定了，节后要上线，我就因为随口说了一句：“这有什么难的”，结果祸从口出，这事情就落我头上了。

录音识别是智能客服大项目计划里面的一部分，简单说就是客户在跟用户聊天的时候，实时从声卡上抓取音频数据，然后发送给阿里云-智能语音交互识别成句子文本后，再发送给我们的智能客服助手服务器，生成提示...]]></description><category></category></item><item><title><![CDATA[实现一个高性能的断路器]]></title><link>https://blog.youkuaiyun.com/icenic/article/details/101128911</link><guid>https://blog.youkuaiyun.com/icenic/article/details/101128911</guid><author>icenic</author><pubDate>Sun, 22 Sep 2019 17:58:00 +0800</pubDate><description><![CDATA[1背景

之前运维的同事时不时的提起尽快为我们的金融网关系统写个熔断模块，不然心理总觉得不踏实，担心哪天某个业务系统挂了，直接把网关给拖垮。趁着现在金融行业不景气，股民还是韭菜状态没心思炒股，系统流量不大，时间也比较充裕的大背景下就先把这事做了。

2思路

现在常见的一些熔断框架，包括使用手册、源码大概都看了下，思路都是大同小异，差不多都是围绕3种状态来考虑的。

这3个状态就决定了当前断路器的...]]></description><category></category></item><item><title><![CDATA[Mybatis的一级缓存导致的异常问题解决]]></title><link>https://blog.youkuaiyun.com/icenic/article/details/78516563</link><guid>https://blog.youkuaiyun.com/icenic/article/details/78516563</guid><author>icenic</author><pubDate>Mon, 13 Nov 2017 01:55:19 +0800</pubDate><description><![CDATA[一【问题】

因为有些敏感字段是必须加密存储的，为了不让数据安全存储的要求影响正常的业务逻辑，就写了个MyBatis插件来解决这个问题。之前一直都没出什么问题，可是后来有同事告诉我这个插件有时会出现解密异常的错误。


二【分析】
因为这个插件已经在线上跑了大半年了，一直都很稳定，所以我想肯定不是加解算法的问题。后来我调试了一下，发现是因为默认情况下，在一个事务会话里面MyBatis会]]></description><category></category></item><item><title><![CDATA[一个数据库死锁问题]]></title><link>https://blog.youkuaiyun.com/icenic/article/details/78178846</link><guid>https://blog.youkuaiyun.com/icenic/article/details/78178846</guid><author>icenic</author><pubDate>Mon, 09 Oct 2017 04:07:52 +0800</pubDate><description><![CDATA[一【场景】


之前系统在运行过程中，老是报一个诡异的死锁检测异常: Error Code: 1213
Deadlock found when trying to get lock; try restartingtransaction。最后仔细研究了一下终于解决了。场景模拟如下：
数据库中2张表：用户表:users，和订单表orders。用户表里面有个字段total用来累计每个用户的订单]]></description><category></category></item><item><title><![CDATA[解决了一个Web网页显示不全的BUG]]></title><link>https://blog.youkuaiyun.com/icenic/article/details/51319345</link><guid>https://blog.youkuaiyun.com/icenic/article/details/51319345</guid><author>icenic</author><pubDate>Thu, 05 May 2016 02:26:15 +0800</pubDate><description><![CDATA[一【绪论】
最近开发一个Web系统的过程中遇到了一个诡异的BUG，花了2天时间解决，感觉如释重负。
这个BUG的现象是这样的：一个很普通的JSP网页，本来显示很正常，后来我在这个html页面上加了一些控件元素，并修改了下CSS, JavaScript代码，并加入了些中文字符。本来是觉得没什么问题，可是在服务器上跑起来就发现浏览器上这个页面显示一片空白，同时其他页面却显示正常。另外，我用的Tom]]></description><category></category></item><item><title><![CDATA[关于LINUX的文件锁的一些心得]]></title><link>https://blog.youkuaiyun.com/icenic/article/details/8892461</link><guid>https://blog.youkuaiyun.com/icenic/article/details/8892461</guid><author>icenic</author><pubDate>Thu, 09 May 2013 12:42:35 +0800</pubDate><description><![CDATA[在之前的一个项目中用到了文件锁，从网上粗略的查了下资料就匆匆忙忙的用上了，虽然当时也有一些疑惑，但是由于项目进度比较紧，也没有多想。现在，终于有点时间可以稍微静下心来看看这个文件锁到底是怎么一回事了。

从内核实现的角度来看，每当创建一把文件锁的时候，系统就会实例化一个struct file_lock对象，这个file_lock对象会记录锁的相关信息：如锁的类型（共享锁，独占锁）、拥有这把锁的]]></description><category></category></item><item><title><![CDATA[进程内存占用监控脚本]]></title><link>https://blog.youkuaiyun.com/icenic/article/details/8856315</link><guid>https://blog.youkuaiyun.com/icenic/article/details/8856315</guid><author>icenic</author><pubDate>Fri, 26 Apr 2013 21:29:20 +0800</pubDate><description><![CDATA[最近做系统维护的时候，发现系统里面总有那么几个进程的内存占用量不断的在往上涨，直接导致整个系统崩溃。因为该服务器上同时还运行着其他几个服务进程，为了不让其受到影响，就写了个shell脚本，发现有进程的内存占用率达到上限时，就将其杀死。
该脚本可以既可以根据指定的进程号进行监控，也可以根据正则表达式指定进程名进行监控。

具体代码如下：

#! /bin/bash

PNAME=
PID=]]></description><category></category></item><item><title><![CDATA[C语言字符数组的初始化研究]]></title><link>https://blog.youkuaiyun.com/icenic/article/details/8730955</link><guid>https://blog.youkuaiyun.com/icenic/article/details/8730955</guid><author>icenic</author><pubDate>Sun, 31 Mar 2013 22:16:08 +0800</pubDate><description><![CDATA[有一天一个朋友问了我一个很有意思的问题。他问我如果用C代码在一个函数里面写一行字符串初始化代码，如“char str[]="hello world"，那么该字符串是如何被初始化的呢？
开始我不以为然，立刻回答：该字符串应该是程序在运行时，通过立即数寻址直接写入堆栈中的嘛。结果该朋友反问了一句：真的吗？我隐约觉得不对劲，等回来我写了段代码看看它到底是怎么初始化的。
代码（test.c）如下：]]></description><category></category></item><item><title><![CDATA[内存池的设计]]></title><link>https://blog.youkuaiyun.com/icenic/article/details/7981803</link><guid>https://blog.youkuaiyun.com/icenic/article/details/7981803</guid><author>icenic</author><pubDate>Mon, 17 Dec 2012 11:24:38 +0800</pubDate><description><![CDATA[一【内存池概述】
内存池是一种存在于进程中，对程序运行时动态分配的内存进行管理的机制。它主要有三个功能：1减少内存碎片；2防止内存泄露；3减少因频繁请求内存动态分配而造成系统调用过于频繁。
第一点：内存碎片分为内部碎片和外部碎片。内部碎片：就是系统给你分配了一个内存块，你只使用了其中一部分，那剩余的一部分就是内部碎片了。而外部碎片：就是系统内存空间里面夹杂在两个已分配内存块之间的空闲内存。一般]]></description><category></category></item><item><title><![CDATA[C++异常类设计]]></title><link>https://blog.youkuaiyun.com/icenic/article/details/7724889</link><guid>https://blog.youkuaiyun.com/icenic/article/details/7724889</guid><author>icenic</author><pubDate>Sat, 14 Jul 2012 18:59:36 +0800</pubDate><description><![CDATA[一【概述】

在平时的开发过程中，我发现很多程序员都不愿意使用异常类。问他们为什么不用，回答无非有以下几种：1. 使用异常类太麻烦了，没有返回错误码的方式方便；2. 已经习惯C语言中使用以返回错误码的方式来处理异常情况了；3.
 C++的异常类的代码编写加重了程序员负担，提高了开发成本；4. C++代码中有时需要调用一些C库，而C语言是返回错误码的，所以为了统一风格也就将就着使用返回值了。那]]></description><category></category></item><item><title><![CDATA[STL string 类型探秘]]></title><link>https://blog.youkuaiyun.com/icenic/article/details/7681311</link><guid>https://blog.youkuaiyun.com/icenic/article/details/7681311</guid><author>icenic</author><pubDate>Thu, 21 Jun 2012 00:14:18 +0800</pubDate><description><![CDATA[一【概述】
在C语言中，我们一般用char数组来定义一个字符串，那么既然是数组我们往往需要提前判断字符串的最大长度，可问题是谁也不知道这最大长度究竟有多长，而且这也是很多编程BUG的根源。那么在C++标准库中，我们可以通过string类型来定义一个字符串，就不必考虑数组长度等这么多底层的东西，只需要考虑业务功能的实现就可以了。

虽然有了现成的string类型，可是string这个类是如何实]]></description><category></category></item><item><title><![CDATA[log4cplus源码分析]]></title><link>https://blog.youkuaiyun.com/icenic/article/details/7614004</link><guid>https://blog.youkuaiyun.com/icenic/article/details/7614004</guid><author>icenic</author><pubDate>Tue, 29 May 2012 21:01:01 +0800</pubDate><description><![CDATA[1【引题】
虽然从本科起就学的C++，然后在工作的2年时间中也不断的在用C++写代码，虽然基本的语法和一些常用的库函数已经滚瓜烂熟，可是总觉得自己写的代码还不是很专业，特别是看到那些老外们写得代码，从设计，到编码风格，再到各种编程技法的使用有很多都是值得学习和领悟的。于是，就决定静下心来找点开源的代码来研习。
因为LOG4CPLUS代码量不是很大，而且功能也不是非常复杂，不就是记个日志么，呵呵]]></description><category></category></item></channel></rss>