自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

LESS IS MORE

DON'T FORGET 代码是用来把事情变简单的

  • 博客(20)
  • 收藏
  • 关注

原创 python学习:异常处理、with用法以及utf8中文显示

# !/usr/bin/env python# -*-coding:utf8-*-# 为文件中每行的开头添加行号def addLineNumberForFile(srcFilePath, dstFilePath): if srcFilePath == dstFilePath: raise NameError('Invalid arguments, ' + 'p1 = ' + srcF

2013-04-04 20:15:24 2006

原创 生产者消费者实现

代码编译:gcc main.c -o test -lpthread代码跑起来是这个样子的:源代码:#include #include #include #include #define MAX_DATA_NUM (10)typedef struct tagObject{ int iData; pthread_cond_t stCond; pthread

2013-03-25 22:28:51 927

原创 懒人的python——一次执行多条linux命令

今天在公司搞了半天EE2I,一直在敲相同的命令累死了。每次运行ee2i.sh temp命令后,都要到cd到某个目录下执行下一个shell脚本。做完一次后又要删除临时文件。总之,重复工作很多,我的指甲都敲累了。所以晚上回到家就写了个类似的python脚本来自动化执行这些讨厌的重复工作,也顺便多学点python的知识。import osimport sysimport shutilimp

2013-01-10 23:20:52 9812

原创 MySQLdb python模块安装

打算边学习MySQL命令,边用python来连接数据库。安装过程总体上比较顺利,但中途还是遇到一些问题。首先,下载MySQLdb压缩包后,运行python setup.py build命令,出现找不到mysql_config的问题。网上搜索后知道少了libmysql-dev和libmysqlclient-dev两个包。由于之前没有安装新立得包管理器,所以先安装这个,命令是 sudo a

2013-01-03 21:04:13 880

原创 Coding前的思考

代码前的思考:1. 分析需求,分类需求,定义接口,封装变化2. 设计框架,模块化,分析模块间的协作过程3. 持续重构,调整接口4. 优化性能

2012-09-26 15:57:31 492

原创 DLNA 维护笔记

1. VARIANT结构体_variant_t类实现了对VARIANT结构体的封装,可以避免指针的问题。使用_variant_t时,出现链接错误的解决方法:添加comsupp.lib库。C#中与其对应的类是object.2. 今天(2012/8/1)写了段得意的代码: template class MetadataPropertyExtractor{ public: t

2012-08-01 08:04:43 735

原创 C++ 构造析构的顺序

#include class A{public: A(){ std::cout << "A ctor" << std::endl; } ~A(){ std::cout << "A dtor" << std::endl; }};class B{public: B(){ std::cout << "B ctor" << std::endl; } ~B(){

2012-06-29 08:47:08 595

原创 代码可读性例子

using namespace log4cplus;using namespace log4cplus::helpers;int main(){ Logger _logger = Logger::getInstance("test"); { SharedObejctPtr _append(new ConsoleAppender()); { std::auto_ptr _

2012-06-27 11:12:05 674

原创 string与数值类型的转换以及stringstream的注意点

#include #include templatevoid convertStringToAnyValue(const std::string& strValue, ValueType& val){ std::stringstream ss(strValue); ss >> val;}templatevoid convertAnyValueToString(std::st

2012-05-25 15:36:53 893

原创 两个大数相乘的C++实现

#include #include #include class BigIntegerMultiplier{private: /// 判断两个字符串可不可以表示一个整数 static inline bool isNumber(const char* s) { if(0 == s || '\0' == *s++) return false; while('\0' !=

2012-04-22 19:41:18 2486

原创 一道关于杀猪的面试题

题目:假设有n头待宰的猪,杀猪的人比较变态,他会先杀单数位置上的猪,一次杀完之后,将剩下的猪按照原来的相对位置,又从1开始排列,接着宰单数位置上的猪,直到最后杀完为止。那里有压迫哪里就有反抗,有这么变态的屠夫,就有非常聪明的猪猪。问题是最聪明的猪会站在什么位置,才能保证最后一个被宰? 解这道题目的思路跟约瑟夫环有点类似:    首先在只有一头猪的时候,最后被宰的猪的位置肯定为1;

2012-04-14 18:33:42 1375

原创 POCO库的Logging framework

纪念下我曾经的一句名言:需求是软件开发的根本准则。Logging architecture 需求一:记录需要包含的内容?消息的内容、消息生成的时间和地点、消息的重要性。这些东西都有Message对象来描述。一条记录就是一个Message对象。Message对象非常像一个装饰模式,Text是Message的内容,Message中的其它属性是对Text的装饰(或者用描述

2012-04-10 08:10:27 2881 1

原创 订阅者模式(观察者模式)

#include #include #include struct Notification{ virtual ~Notification() { } virtual void process() = 0;};class SubscriberA: public Notification{public: //Notification virtual void proc

2012-04-05 16:34:17 1353

原创 可复用的全排列实现

偶然在网上看到一道面试题,细看下才发现是曾经被面试过的全排列问题。于是手痒,想以OOD的思想重新实现一番。实现可复用软件的一个重要原则是:封装变化。是故,看下全排列代码中哪些因素是不稳定的: 1.  元素的数据类型。元素的类型可能是int, double, char等基本数据类型,不过,大部分情况下应该是用户自定义的类型。 2.  元素的存储方式。 3.  找到一个新排列后,如

2012-04-04 11:39:12 713

原创 迭代器

迭代器提供了一致的方法来访问不同类型容器内的元素,从而解除数据存储和访问之间的耦合。容器以一定的方式存储数据,比如,二叉树、链表、集合等等。数据存储和访问之间的解耦极大地提高了代码的复用性。 Python 对迭代器的约定是这样的,它实现了next方法,next方法返回下一个元素,如果没有下一个元素就抛出StopIteration的异常。为了获取某个容器对象的迭代器,python提供了内建的

2012-04-03 21:30:42 622

原创 C++逗号运算符重载

#include #include class Person{ int _id; std::string _name; unsigned int _age;public: explicit Person(int id): _id(id){ } Person(std::string name, unsigned int age):_id(0), _name(name), _a

2012-03-23 16:48:35 3551 2

原创 std::shared_ptr 和 std::weak_ptr的用法以及引用计数的循环引用问题

在std::shared_ptr被引入之前,C++标准库中实现的用于管理资源的智能指针只有std::auto_ptr一个而已。std::auto_ptr的作用非常有限,因为它存在被管理资源的所有权转移问题。这导致多个std::auto_ptr类型的局部变量不能共享同一个资源,这个问题是非常严重的哦。因为,我个人觉得,智能指针内存管理要解决的根本问题是:一个堆对象(或则资源,比如文件句柄)在被多个对

2012-03-17 10:56:38 36818 2

原创 程序崩溃在delete某个对象时

记录一些bugs,以便在今后的面试或debug时使用。即使有天不coding了,也可把它当做记忆来回味。A* a = new DerivedA();if(0 != a){ delete a; // crash!!!}delete 对象a时程序crash了,这是怎么回事呢?经过排查原来DerivedA内部的某个成员变量被delete了两次。这是哪个粗心的CPPER写的程序啊?

2012-03-10 19:49:52 2562 1

原创 OOD实践之依赖倒置原则

OOD设计之依赖倒置原则:解耦高层模块和底层模块的利器是让两者皆依赖于抽象。抽象是什么呢?抽象是一个约定,在C++中这个约定可通过一个纯虚类来表示,Java中便是interface。为什么要解耦高层模块和底层模块啊?因为谁都不想被谁锁定喽。e.g. 有两个模块:一个是用于管理图像的模块 A,另一个是对图片进行编解码的模块 B;显然模块 A 在读取图片的时候要依赖于模块B提供的图片解码服务,在保存图

2012-03-10 19:29:57 698

原创 POCO C++ SOCKET

// client program#include "Poco/Net/DatagramSocket.h"#include "Poco/Net/SocketAddress.h"#include "Poco/Timestamp.h"#include "Poco/DateTimeFormatter.h"int testUdpClient(){ const char* ipa

2012-03-05 16:50:17 5006

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除