<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Monkeycn的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Monkeycn</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Monkeycn]]></copyright><item><title><![CDATA[php+mysql decimal字段处理金额遇到误差处理思路]]></title><link>https://blog.youkuaiyun.com/Monkeycn/article/details/112972249</link><guid>https://blog.youkuaiyun.com/Monkeycn/article/details/112972249</guid><author>Monkeycn</author><pubDate>Thu, 21 Jan 2021 21:05:32 +0800</pubDate><description><![CDATA[1确保数据库字段的精度和内存中的精度保持一致





数据库中的金额字段 decimal (18,3)



内存中的变量 $amount 的精度，只要保留3位小数，



更改数据表中的字段值，比如return self::query()-&gt;where("id", $shopId)-&gt;increment("amount", $amount);

才不会出现被mysql自动做四舍五入，导致0.001的差距





2使用bcmath库进行运算



&lt;?php...]]></description><category></category></item><item><title><![CDATA[discuz批量发帖工具]]></title><link>https://blog.youkuaiyun.com/Monkeycn/article/details/50342363</link><guid>https://blog.youkuaiyun.com/Monkeycn/article/details/50342363</guid><author>Monkeycn</author><pubDate>Thu, 17 Dec 2015 15:28:54 +0800</pubDate><description><![CDATA[1. 创建一个mysql数据库 crawler,创建一个采集文章表articles：

CREATE TABLE `articles` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(100) DEFAULT NULL,
`time` datetime DEFAULT NULL,
`content` varchar(300]]></description><category></category></item><item><title><![CDATA[黑苹果，蓝牙折腾经历]]></title><link>https://blog.youkuaiyun.com/Monkeycn/article/details/49047609</link><guid>https://blog.youkuaiyun.com/Monkeycn/article/details/49047609</guid><author>Monkeycn</author><pubDate>Sun, 11 Oct 2015 14:09:07 +0800</pubDate><description><![CDATA[黑苹果安上usb蓝牙驱动]]></description><category></category></item><item><title><![CDATA[Resis 性能测试]]></title><link>https://blog.youkuaiyun.com/Monkeycn/article/details/21161431</link><guid>https://blog.youkuaiyun.com/Monkeycn/article/details/21161431</guid><author>Monkeycn</author><pubDate>Thu, 13 Mar 2014 11:20:14 +0800</pubDate><description><![CDATA[value 长度 1k
SET 速度:  0.0460251 毫秒/1Item
每秒处理的Item个数: 21727 


MSET 速度 : 0.0113217毫秒
每秒处理的Item个数 : 88326






GET 速度  : 0.0420871 毫秒/1Item
每秒处理的Item个数: 27360.2


MGET速度 : 0.0113217 毫秒]]></description><category></category></item><item><title><![CDATA[“拥抱”异常，还是，“固守”返回值？]]></title><link>https://blog.youkuaiyun.com/Monkeycn/article/details/17466713</link><guid>https://blog.youkuaiyun.com/Monkeycn/article/details/17466713</guid><author>Monkeycn</author><pubDate>Sat, 21 Dec 2013 15:16:36 +0800</pubDate><description><![CDATA[我想，作者对于异常的性能可能有一些误会。对于 Java 或 C# 这样的语言，异常的成本无论高低，都是不可回避的，不谈了。对于 C++ 来说，未发生的异常，其成本极其微小，大体上，只是多一个地址入栈的问题。而对于已经发生的异常，这个成本确实比较高，但是，在这种时候，正确性当然压倒 所有性能要求。还有，退出作用域时析构函数必须调用，这个与抛出异常与否无关，throw 也好，return 也好，都会发]]></description><category></category></item><item><title><![CDATA[编写搞质量的程序一些技巧总结]]></title><link>https://blog.youkuaiyun.com/Monkeycn/article/details/16986669</link><guid>https://blog.youkuaiyun.com/Monkeycn/article/details/16986669</guid><author>Monkeycn</author><pubDate>Wed, 27 Nov 2013 15:47:51 +0800</pubDate><description><![CDATA[(1) 用查表法替代又臭又长的switch/case, if/else，且看例子： 
不推荐switch/case例子:
int QCleanlooksStyle::pixelMetric(...)
{
  int ret = -1;
  switch (metric) {
    ...
    case PM_SpinBoxFrameWidth:
      ret = 3;
      ]]></description><category></category></item><item><title><![CDATA[使用VC助手 Visual Assist (VA)为类私有变量生成Get Set操作方法]]></title><link>https://blog.youkuaiyun.com/Monkeycn/article/details/16986429</link><guid>https://blog.youkuaiyun.com/Monkeycn/article/details/16986429</guid><author>Monkeycn</author><pubDate>Wed, 27 Nov 2013 15:35:00 +0800</pubDate><description><![CDATA[写一个类，经常有如下动作： 
class {
public:
   int getVal() { return m_nVal; }
  int setVal(int val) {  m_nVal = val};
private:
   int m_nVal;
};
虽然写Get Set相当简单，但是当变量很多的情况异常繁琐.
Va已经帮我们解决了这个问题,看图：]]></description><category></category></item><item><title><![CDATA[std::map lower_bound,upper_bound的用法举例]]></title><link>https://blog.youkuaiyun.com/Monkeycn/article/details/12676807</link><guid>https://blog.youkuaiyun.com/Monkeycn/article/details/12676807</guid><author>Monkeycn</author><pubDate>Sun, 13 Oct 2013 11:30:29 +0800</pubDate><description><![CDATA[std::map是我们最常用的容器之一，然而 lower_bound, upper_bound很少使用，这里介绍一下经典用法：


k
10
20




std::map mapPrize;
mapPrize[10] = 500;
mapPrize[20] = 600;
mapPrize[30] = 700;


mapPrize.lower_bound(9)->]]></description><category></category></item><item><title><![CDATA[C++ 服务端开发总结]]></title><link>https://blog.youkuaiyun.com/Monkeycn/article/details/9177587</link><guid>https://blog.youkuaiyun.com/Monkeycn/article/details/9177587</guid><author>Monkeycn</author><pubDate>Wed, 26 Jun 2013 13:05:22 +0800</pubDate><description><![CDATA[无聊时候写的：
1.不急于动手，先把架构想好，设计好，形成UML图，和同事讨论
2. 开发前先把所有功能点，边界点都想好，罗列到TODO List
3. 在脑袋瓜清楚的情况写最高效，最健壮的，最通用的代码
4. 服务端开发，异常情况请用断言，把异常消灭在Debug阶段
5. 在一些状态，事件，边界条件点，多打日志，易于后期定位问题
6.一开始的时候使用最稳定简单的方式写，证明稳定后，再]]></description><category></category></item><item><title><![CDATA[CoolFormat 和VS2010完美结合]]></title><link>https://blog.youkuaiyun.com/Monkeycn/article/details/8860067</link><guid>https://blog.youkuaiyun.com/Monkeycn/article/details/8860067</guid><author>Monkeycn</author><pubDate>Sat, 27 Apr 2013 17:38:55 +0800</pubDate><description><![CDATA[CoolFormat真是好东西，可以把源代码格式化成机器，支持多种语言.


(1)下载CoolFormat
https://code.google.com/p/coolformat/





(2) 进入vs2010的外部工具，添加CoolFormat工具






特别注意参数： -f $(ItemPath)
(3) 设置快捷键
菜单进入： “工具”-]]></description><category></category></item><item><title><![CDATA[基于once0.6的高性能socks5服务器：once socks 5]]></title><link>https://blog.youkuaiyun.com/Monkeycn/article/details/6424696</link><guid>https://blog.youkuaiyun.com/Monkeycn/article/details/6424696</guid><author>Monkeycn</author><pubDate>Mon, 16 May 2011 16:18:00 +0800</pubDate><description><![CDATA[http://monkeycn.iteye.com/admin/blogs/1044706]]></description><category></category></item><item><title><![CDATA[安全输入控件 EPowerInput 通过AKLT安全测试]]></title><link>https://blog.youkuaiyun.com/Monkeycn/article/details/6284860</link><guid>https://blog.youkuaiyun.com/Monkeycn/article/details/6284860</guid><author>Monkeycn</author><pubDate>Mon, 28 Mar 2011 23:09:00 +0800</pubDate><description><![CDATA[<br />安全输入控件 EPowerInput<br /><br />介绍：<br />    安全控件是一种为了提升账户安全，防止账户密码等私密信息被木马或病毒窃取的客户端程序.<br />2009年CCTV2对“大小姐”木马案件的系列报道，标志着当前的“木马经济产业链”已经非常成熟，<br />已经成为不可忽视的互联网安全和社会性问题。如何让用户账号信息输入更安全防止被黑客盗取成为互联网信息安全的首要问题，<br />在这样的背景下，要求我们必须通过安全控件这种技术手段加强对用户帐号信息的安全保护。<]]></description><category></category></item><item><title><![CDATA[头文件 const（转）]]></title><link>https://blog.youkuaiyun.com/Monkeycn/article/details/6171098</link><guid>https://blog.youkuaiyun.com/Monkeycn/article/details/6171098</guid><author>Monkeycn</author><pubDate>Mon, 31 Jan 2011 19:27:00 +0800</pubDate><description><![CDATA[<br />2009-12-28 19:11<br />//stdafx.h<br />#pragma once<br />//int yu = 444;//这种方法是错误的，不能在头文件之中定义<br />const   int yuan = 223;//const常量可以在头文件爱你之中定义，可以实现数据共享，和成为个.cpp的纽带<br />#include "targetver.h"<br />#include <stdio.h><br />#include <tchar.h><br />#incl]]></description><category></category></item><item><title><![CDATA[vc2010 mfc 关闭自动写注册表]]></title><link>https://blog.youkuaiyun.com/Monkeycn/article/details/5950835</link><guid>https://blog.youkuaiyun.com/Monkeycn/article/details/5950835</guid><author>Monkeycn</author><pubDate>Tue, 19 Oct 2010 11:19:00 +0800</pubDate><description><![CDATA[<br />vc2010 的mfc的界面增强不少，但是由于采用的是BCG的缘故，默认情况会自动写注册表记录界面状态.<br />在使用CMFCToolBar时候，代码里面改变了工具栏的外观，重新编译，启动应用程序，外观还是没有改变，<br />甚是郁闷，通过google,找到解决方法：<br /> <br /> <br />BOOL Ccib_clientApp::InitInstance()
{
    m_bSaveState = FALSE;
.....................
}<b]]></description><category></category></item><item><title><![CDATA[_bstr_t 与 CString 相互转换 ,BSTR 宽字符串与CString相互转换]]></title><link>https://blog.youkuaiyun.com/Monkeycn/article/details/5881240</link><guid>https://blog.youkuaiyun.com/Monkeycn/article/details/5881240</guid><author>Monkeycn</author><pubDate>Mon, 13 Sep 2010 16:13:00 +0800</pubDate><description><![CDATA[<br /><br />（1）_bstr_t 与 CString 相互转换<br /> <br />_bstr_t bstr;<br />CString strSql;<br />CString->_bstr_t: bstr = (_bstr_t) strSql;<br />_bstr_t->CString: strSql = (LPCSTR) bstr;<br /> <br />（2） BSTR 宽字符串与CString相互转换<br />BSTR bstr;<br />CString strSql;<b]]></description><category></category></item><item><title><![CDATA[mtu 获取]]></title><link>https://blog.youkuaiyun.com/Monkeycn/article/details/5818663</link><guid>https://blog.youkuaiyun.com/Monkeycn/article/details/5818663</guid><author>Monkeycn</author><pubDate>Tue, 17 Aug 2010 16:47:00 +0800</pubDate><description><![CDATA[<br />MTU是什么：<br />      MTU是Maximum Transmission Unit的缩写，意思是最大传输单元。<br />      MTU的单位是字节。 大部分网络设备的MTU都是1500。我们这里谈的MTU是指两台通信主机路径中的最小MTU。它被称作路径MTU。<br />      如果本机的MTU比经过的网关，路由的MTU大，大的数据包就会被拆开来传送，这样会产生很多数据包碎片，增加丢包率，降低网络速度。把本机的MTU设成比网关，路由的MTU小或相同，就可以减少丢包。<br]]></description><category></category></item><item><title><![CDATA[igslot介绍 ]]></title><link>https://blog.youkuaiyun.com/Monkeycn/article/details/5818470</link><guid>https://blog.youkuaiyun.com/Monkeycn/article/details/5818470</guid><author>Monkeycn</author><pubDate>Tue, 17 Aug 2010 16:05:00 +0800</pubDate><description><![CDATA[
  最近在开发一个基于libjingle开源的IM系统，里面有一个其类为has_slots，搜索了一下其资料发现是一个很好用的C++库，先对其简单介绍一下。
1.          简介
      sigslot是一个线程安全、类型安全，用C++实现的sig/slot机制(sig/slot机制就是对象之间发送和接收消息的机制)的开源代码库。是一个非常好用的库,只有一个头文件sigslot.h。
2.    Sigslot实例
      现代的C++项目通常包含大量的C++类和对象，对象之间通]]></description><category></category></item><item><title><![CDATA[C++/c static和匿名命名空间 总结]]></title><link>https://blog.youkuaiyun.com/Monkeycn/article/details/5817138</link><guid>https://blog.youkuaiyun.com/Monkeycn/article/details/5817138</guid><author>Monkeycn</author><pubDate>Tue, 17 Aug 2010 09:26:00 +0800</pubDate><description><![CDATA[<br />static:<br />1、函数之外的变量就是全局变量，这个想法正确吗？ <br />        答:   在C中，完全正确。只不过按有没有加static修饰可以分为静态全局变量和一般全局变量两种。 <br />        2   如果在全局变量的前面加上static   会有什么用？ <br />        答：在C中，静态全局变量意味着两个方面。一、在生命期方面，它与一般全局变量一样，是与整个程序共存亡的；二、在可见性方面，它只在定义它的那个编译单元中可见。比如说，你在test]]></description><category></category></item><item><title><![CDATA[orzAsio代码研究一些笔记,感谢nous]]></title><link>https://blog.youkuaiyun.com/Monkeycn/article/details/5815813</link><guid>https://blog.youkuaiyun.com/Monkeycn/article/details/5815813</guid><author>Monkeycn</author><pubDate>Mon, 16 Aug 2010 15:19:00 +0800</pubDate><description><![CDATA[<br /><br />(1) 组包发送数据<br />if (_ascId.cbId.clr == 0 && _ascId.cbId.id == 0)<br />{<br />return true;<br />}<br /><br />IPacketShrPtr pk = allocPacket();<br />if (!ORZ_NET_DYN_ASSERT(pk != 0, __FILE__, __LINE__, 0))<br />{<br />return false;<br />}<br /> <]]></description><category></category></item><item><title><![CDATA[用 select 实现 定时器功能，摘抄自boost.asio]]></title><link>https://blog.youkuaiyun.com/Monkeycn/article/details/5799962</link><guid>https://blog.youkuaiyun.com/Monkeycn/article/details/5799962</guid><author>Monkeycn</author><pubDate>Mon, 09 Aug 2010 22:25:00 +0800</pubDate><description><![CDATA[  void wait(implementation_type& impl, boost::system::error_code& ec)  {    time_type now = Time_Traits::now();    while (Time_Traits::less_than(now, impl.expiry))    {      boost::posix_time::time_duration timeout =        Time_Traits::to_posix_duration(T]]></description><category></category></item></channel></rss>