基础技术分享
文章平均质量分 78
人气青蛙
目前在上海某网络文学公司任职。
曾在杭州、上海等地大型互联网公司工作。
在北京度过了3年美好的硕士研究生生活。
在武汉度过了4年快乐的本科学士生活。
展开
-
Java测试要点分享
csdn上第一篇技术blog,写些什么呢?由于正在等待测试的结果,那就分享一下Java的测试心得吧! 由于测试毕竟不是本职工作,对于一个Java软件开发工程师而言,我个人觉得,需要注意以下几点。 1.强烈建议Java软件开发工程师在有余力的情况下自己对重要的功能点写单元测试,尤其是逻辑单元的单元测试尤为重要。为什么呢?目前,我觉得主要原因是对于接口不变的单元测试,是可以回归的。可以原创 2010-04-12 22:15:00 · 702 阅读 · 0 评论 -
基于jwSMTP的C++发送Email的Demo
由于业务上存在发送报警邮件的需求,一直想找一个简单易用的发送Email的C++库。终于找到了,它就是jwSTMP(http://sourceforge.net/projects/jwsmtp/)。最新的jwSTMP版本(1.32.15)能够跨平台(BSD、Linux和Windows等)的支持以C++代码或者C++库的形式编码发送Email。它可以发送附件、支持多个收件人(最原创 2012-02-15 11:33:40 · 8048 阅读 · 5 评论 -
内存池的实现
相对于在栈空间分配内存,堆中分配内存其实是非常缓慢的。另外,由于堆中分配的内存,需要开发者编码回收,当系统非常庞大时,容易出现分配的内容没有回收导致内存泄露的现象。因此,许多Bible建议开发者尽量使用栈空间,少用甚至不用malloc和free、new和delete;虽然栈的空间较小,但这样的建议随着计算机的位数从32位升级到64位,越来越成为真理。但我还是想说,这是有限制的:原创 2012-02-15 19:45:51 · 2015 阅读 · 1 评论 -
对象池的实现
为了提高new对象的速度,工程师们提出了对象池的解决方案。即一次性分配大量的空间,供开发者创建对象使用;当分配的大量空间不够时,再次分配大量的空间。嗯,这种方式,在内存池中是没有问题的。但是,由于对象构造时需要执行构造函数,析构时需要执行析构函数,这时就需要一种特殊的方式来解决在已经分配了的空间上执行构造函数。这,就是placement new。示例:char * p = new原创 2012-02-15 19:57:13 · 1564 阅读 · 0 评论 -
使用rsync完成Linux服务器间同步目录
以前为了完成多台Linux服务器之间的代码同步功能,都是使用shell脚本和scp命令,导致同步不同的项目都要写新的脚本,这个有明显是重复的工作量。今天突然发现了rsync这个工具,对于对等性质的系统(所有服务器的服务完全一致)而言,能够有效的提高工作效率。rsync的主页地址为:http://rsync.samba.org/ 最新版本为version 3.0.9。安装直接原创 2012-03-08 13:34:47 · 2878 阅读 · 0 评论 -
C++使用libcurl做HttpClient
当使用C++做HTTP客户端时,目前通用的做法就是使用libcurl。其官方网站的地址是http://curl.haxx.se/,该网站主要提供了Curl和libcurl。Curl是命令行工具,用于完成FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE 以及 LDAP的命令的请求及接收回馈。libcurl提供给开发者,用于使用C++跨平台的开发各种原创 2012-06-14 19:25:50 · 101278 阅读 · 25 评论 -
编写Linux C++程序如何影响VIRT(虚存)和RES(实存/常驻内存)
在Linux命令行中执行top命令,可以查询到所有进程使用的VIRT虚拟内存、RES常驻内存和共享内存SHR。那么,什么是VIRT虚拟内存、RES常驻内存和共享内存SHR?我们编写的Linux C++程序如何影响它们呢?查阅资料后,归纳一下。VIRT:1、进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据,以及malloc、new分配的堆空间和分配的栈空间等;原创 2012-07-31 18:59:18 · 14690 阅读 · 1 评论 -
Linux C++程序解决文件句柄(包括socket句柄等)耗尽问题
最近在线上发现一个问题,程序在服务器上跑了3周后,会出现新日志文件创建不出来的问题,另外,该程序需要使用curl访问后端的HTTP服务调用总是失败。日志文件创建不出来由于不是关键业务,一开始没有做太多关注。但是访问后端HTTP服务失败的问题却是很要命。监控报警一响,我们首先尝试解决问题,就重启了所有程序,问题解决。之后,就立马排查这个问题发生的原因。在没有重启程序前,首先怀疑的自然是后端HTT原创 2012-08-01 11:51:18 · 5448 阅读 · 0 评论 -
在Linux服务器上安装Oracle客户端库
1.登录www.oracle.com,并注册一个账号;2.登录以上Oracle官方网站,点击DOWNLOADS->Database->Oracle Instant Client,当前我进入的页面为(http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html)3.根据服务器的环境选择原创 2013-04-16 17:08:31 · 3018 阅读 · 1 评论 -
使用OpenSSL做RSA签名验证 支付宝移动快捷支付 的服务器异步通知
由于业务需要,我们需要使用支付宝移动快捷支付做收款。支付宝给了我们《移动快捷支付应用集成接入包支付接口》见支付宝包《WS_SECURE_PAY_SDK》。支付宝给的服务器demo只有Java、C#、PHP三种,而我们服务器端使用的是C++。这其中就涉及到接收支付宝的服务器异步通知。为了确保接收到的服务器异步通知来至支付宝,我们就必须验证支付宝的签名。坑爹的是,原来PC端使用MD5做签名,估计支原创 2014-07-23 17:44:59 · 45351 阅读 · 4 评论 -
JMX经验点滴
使用Java构建的大规模分布式架构原创 2014-08-25 16:34:10 · 866 阅读 · 0 评论 -
Cassandra V0.7.4 新手入门点滴
<br />Cassandra是有FaceBook开发并开源的一个NoSQL分布式存储。目前是Apache基金会下面的一级项目,它的官方网站是http://cassandra.apache.org/。<br /> <br />相对于Memcache和Redis这些NoSQL(not SQL)或者说Key-Value存储,Cassandra与MongoDB、HBase在形态在趋于一致,为NoSQL(Not Only SQL)。这是因为Cassandra相对于简单的Key-Value存储,能够支持比较复杂的嵌套原创 2011-04-20 21:40:00 · 2810 阅读 · 0 评论 -
基于网络游戏资料数据的搜索系统的设计
目前,越来越多的网络游戏有在官方网站上提供游戏内部数据(道具数据,任务数据,NPC数据,成就数据等)的检索服务的需求。 以前这种系统,基本上是将游戏内部数据抽取出来,放入到数据库中,然后前端系统使用SQL语句来查询(select和like)。这种实现方式,简单、快速,但是,用户在搜索时,只能少输入词、不能多输入字,不支持权重排序(Rank),匹配度不高,体验不太好。 怎样实现一个体原创 2011-06-05 17:19:00 · 1244 阅读 · 0 评论 -
各种互斥量的总结
研究生阶段一直使用C++,到工作时,才接触到Java。写了这么多年的多线程程序,觉得对于互斥(注意,不是同步哦)的各种锁有必要做个总结。 这里我想将Windows,Linux和Java JVM三种环境中使用锁的环境及虽然将Windows,Linux和Java JVM放在一起比较是有些不合适的,但是对基于Windows操作系统C++,Linux操作系统C++及Java程序而言,在应用层面上来原创 2010-04-26 19:55:00 · 2968 阅读 · 2 评论 -
一个Windows C++的线程类实现
Thread.h#ifndef __THREAD_H__#define __THREAD_H__#include #include #include class Runnable{public: virtual ~Runnable() {}; virtual void Run() = 0;};class CThread : public Runnable{private: CThread(); explicit CThread(CThrea原创 2010-08-10 15:16:00 · 13566 阅读 · 10 评论 -
mysql JDBC URL参数解析
<br />mysql JDBC URL格式如下:<br /><br />jdbc:mysql://[host:port],[host:port].../[database][?参数名1][=参数值1][&参数名2][=参数值2]...<br /> <br />常用URL连接属性<br /> <br />characterEncoding 在插入数据时,如果数据的编码类型与数据库的编码类型不一致时,如程序中使用GBK,而数据库的数据类型为utf8,会出现插入数据的字节的类型无法识别的问题。为了解决此原创 2010-06-18 09:57:00 · 21923 阅读 · 1 评论 -
一个Windows C++的线程池的实现
此线程池所依赖的线程类,请参看《一个Windows C++的线程类实现》:http://blog.csdn.net/huyiyang2010/archive/2010/08/10/5801597.aspxThreadPoolExecutor.h#ifndef __THREAD_POOL_EXECUTOR__#define __THREAD_POOL_EXECUTOR__#include "Thread.h"#include #include #include clas原创 2010-08-13 15:30:00 · 9365 阅读 · 15 评论 -
使用QueueUserWorkerItem实现的线程池封装
此线程池所依赖的线程类,请参看《一个Windows C++的线程类实现》:http://blog.csdn.net/huyiyang2010/archive/2010/08/10/5801597.aspxSystemThreadPool.h#ifndef __SYSTEM_THREAD_POOL__#define __SYSTEM_THREAD_POOL__#include "Thread.h"#include #include #include class CThr原创 2010-08-18 12:29:00 · 1767 阅读 · 0 评论 -
简单LRU算法实现的Cache(C++)
<br />#pragma once#include <map>#include <time.h>template<typename CacheKey, typename CacheValue>class LRUCache{public: LRUCache(void); LRUCache(int capacity); ~LRUCache(void); void Put(const CacheKey & key, const CacheValue & value);原创 2010-08-20 21:59:00 · 2791 阅读 · 0 评论 -
MySQL与Transact SQL(MS SQL Server)的SQL语句区别点滴(C++)
<br />最近在写一个数据访问层,要求能够使用MySQL和MS SQL Server。<br /> <br />烦劳从此开始,MySQL与MS SQL Server的大量不一致让人烦不胜烦,为了使其他人不再犯自己工作过程中犯下的错误,并且,有个地方记录自己的心得体会,特分享如下:<br /> <br />这里MySQL使用的是C API<br />MS SQL Server使用的是ADO<br /> <br />一.列类型问题<br />1.时间类型<br />真是不做不知道,做了才知道,MySQL存储日原创 2010-09-02 16:24:00 · 3055 阅读 · 0 评论 -
用户登陆的字节串校验和加密解密点滴
<br /> 最近正在做一个游戏服务器框架的LoginServer的用户信息校验模块。这种校验模块一般都分为两部分,字节串校验解密和数据库数据查询相关。数据库数据查询我比较熟,但是字节串校验解密倒是第一次做。使用OpenSSL,搞了两天才全部搞定。<br /> <br /> 这个过程,总算将大学里学习的一些基础的密码学知识给捡了回来,而且有了更深层次的体会。我相信,如果大学里老师不是照本宣科,让我们在实际中使用一下OpenSSL的库,编编程序,我相信,我绝不会将他教给我的密码学知识全部换给他。这原创 2010-09-27 13:39:00 · 2115 阅读 · 0 评论 -
使用Visual Studio Profiler分析程序性能
<br /> Profiler是Visual Studio中集成的性能分析工具。它主要用于分析程序中所有函数调用所占的耗费时间。它提供了Sample和Instrumentation两种检测方式,能够生成简洁易读的报告。它只适用于Team Suit版本。<br /> <br /> 下面性能分析的环境是在Windows XP SP2,Visual Studio 2008 Team Suit环境。<br /> <br /> 首先,打开您需要测试的程序的解决方案或项目文件,需要说明的是被测试原创 2010-10-12 13:42:00 · 29618 阅读 · 0 评论 -
GoogleTest单元测试框架
<br />早就想将这半年使用GoogleTest的心得体会写下来,以做备忘录。总算在这忙里偷闲的时间,将其记录下来。<br /> <br />不想直接就写我认为的重点和难点的位置。还是从基础开始说起吧。<br /> <br />GoogleTest是Google开发的一套单元测试框架。能够在不同平台上(Windows,Linux,Mac OS X,Cygwin,Windows CE和Symbian)为C++编写的程序做单元测试。<br /> <br />它是基于xUnit架构(如JUnit)的测试框架,支原创 2010-12-09 22:23:00 · 1399 阅读 · 0 评论 -
Key-Value配置信息类(.ini文件信息管理类)的设计与实现
此实现相对于其他实现,能够读取.ini文件或者将类存中的Key-Value信息存储到配置文件中。另外,能够将配置信息合法的以int,long,double,float,std::string等各种类型读取,避免了用户的转换。#ifndef __PROPERTIES_H__#define __PROPERTIES_H__#include /*** @brief 一个Key-Value的配置信息类,可用于读取Key-Value文件(.ini),* 也可以将内存中的Key-Value信息存储到原创 2010-11-01 09:56:00 · 2020 阅读 · 0 评论 -
使用Java读写存储在latin1编码的MySQL中的UTF-8编码的中文
绝大多数情况下,一个项目中,都是使用同一套编码。如,全部使用UTF-8或者GBK。但是当涉及到多个项目合并、新手加入等情况时,不可避免出现使用多套编码的情况。所有字符串都是英文的情况还好,若是出现了中文,就导致了乱码的出现。下面以我碰到的问题的解决方案说明。前置说明:==============Java MySQLUTF-8 utf8ISO-8859-1 latin1==============MySQL数据库使用latin1的编码,导入导出的数据是UTF-8编码的,原创 2011-02-23 15:27:00 · 19698 阅读 · 5 评论