- 博客(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关注的人