程序员为什么要加班

Posted by & filed under Uncategorized.

  首先,假设这个程序员是一位职场新手甲。他刚大学毕业,没有工作经验。来自产品的需求,他要理解很久才能做。然后开发的过程中会遇到各种问题,如果经验不足以支撑他快速完成任务,那么只能求助于网络,书籍,熟人。如果这些都帮助不了他。他需要求助于同事。但是次数频繁,同事会厌倦于帮他解答;他也会羞于咨询。这时,他一天下来,基本都会卡在一个很简单的问题上。下班了,他还没有完成任务。没错,他需要加班了,因为他的编程能力非常差。     大概没有人会知道他是因为需要处理一个并非高科技的问题。不懂技术的上司以为他是个勤奋的员工,非常看重他。可是,这什么进度还是会这么慢呢?创业的公司可等不起。这一切,如果招到一个有经验的开发人员,这一切的加班似乎都不需要。   Read more […]

Snmp学习笔记

Posted by & filed under Uncategorized.

  相关链接: Snmp学习笔记 使用snmp4j实现Snmp功能(一) 使用snmp4j实现Snmp功能(二) 使用snmp4j实现Snmp功能(三) SNMP是英文“Simple Network Management Protocol”的缩写,中文意思是“简单网络管理协议”。SNMP是目前最常用的环境管理协议。SNMP被设计成与协议无关,所以它可以在IP,IPX,AppleTalk,OSI以及其他用到的传输协议上被使用。SNMP是一系列协议组和规范,它们提供了一种从网络上的设备中收集网络管理信息的方法。SNMP也为设备向网络管理工作站报告问题和错误提供了一种方法。 目前,几乎所有的网络设备生产厂家都实现了对SNMP的支持。领导潮流的SNMP是一个从网络上的设备收集管理信息的公用通信协议。设备的管理者收集这些信息并记录在管理信息库(MIB)中。这些信息报告设备的特性、数据吞吐量、通信超载和错误等。MIB有公共的格式,所以来自多个厂商的SNMP管理工具可以收集MIB信息,在管理控制台上呈现给系统管理员。 SNMP提供了一种统一的、跨平台的设备管理办法。 概念太抽象,先来看一个例子。 我们来做一个最简单的Snmp操作:获取一台机器的机器名,假设其IP是192.168.1.1。 首先要给192.168.1.1安装Snmp环境。Window组件的管理监视工具里包含Snmp,只需要安装一下就可以了。Snmp默认的通信端口是161/162,有的系统需要手动设置,这个可以通过创建筛选器列表来实现,具体怎么设置网上很多,大家可以去搜索一下。另外需要关闭192.168.1.1的防火墙。 接下来需要一个能够进行Snmp通信的工具,比较简单的有snmputil,大家可以去网上下载。 snmputil的命令规则是: snmputil Read more […]

linux中创建超过4g文件的方法

Posted by & filed under Uncategorized.

  linux c 大文件使用 – O_LARGEFILE 2010-07-20 10:09 支持大文件的两种方式: 1、gcc 加 -D_FILE_OFFSET_BITS=64 -D_LARGE_FILE 2、注意一定要定义在include之前 #define _LARGEFILE_SOURCE #define _LARGEFILE64_SOURCE #define _FILE_OFFSET_BITS 64 建议两种方式都加上。 如何create大文件 要大就非常大,1T吧。 有两种方法: 一.dd dd if=/dev/zero of=1T.img bs=1G seek=1024 count=0 bs=1G表示每一次读写1G数据,count=0表示读写0次,seek=1024表示略过1024个Block不写,前面block size是1G,所以共略过1T! 这是创建大型sparse文件最简单的方法。 二.ftruncate64/ftruncate 如果用系统函数就稍微有些麻烦,因为涉及到宏的问题。我会结合一个实际例子详细说明,其中OPTION标志的就是测试项。 文件sparse.c: //OPTION Read more […]

C++虚指针实现及效率

Posted by & filed under Uncategorized.

  转载自:http://blog.chinaunix.net/space.php?uid=22257012&do=blog&id=2655107 单继承虚函数例子 class Point { public: virtual ~Point(); virtual Point& mult( float ) = 0; //  other operations  float x() const { return _x; } virtual float y() const { return 0; } virtual float z() const { return 0; } //  protected: Point( float x = 0.0 ); float _x; }; class Point2d : public Point { public: Point2d( float x = 0.0, float y = 0.0 ) : Point( x ), _y( y ) {} ~Point2d(); // overridden base class virtual functions Point2d& mult( float ); float y() const { return _y; } //  other operations  protected: float _y; }; class Point3d: public Point2d { public: Point3d( float x = 0.0, float y = 0.0, float z = 0.0 ) : Point2d( x, y ), _z( z ) {} ~Point3d(); // overridden base class virtual functions Point3d& mult( float ); float z() const { return _z; } //  other operations  protected: float _z; };   Vtable和VPTR结构 虚函数的实现是通过VTable和vptr。每一个带有虚函数的类都有一个VTable,在编译器生成,每一个带有虚函数的类实例都有一个vptr,该类实例vptr指向该类的VTable,在运行期生成。   如图左部的类实例内存结构,编译器为之生成__vptr__Point的指针,指向该类的VTable。 VTable的结构是一个函数指针数组,数组的每个元素是一个函数指针,指向该类虚函数的地址。因为基类Point的Point::mult()为纯虚函数,因此Point对应的mult函数指针指向一个pure_virtual_called(),抛出调用纯虚函数错误。   如图VTable所示,Point类和其子类的析构函数均在VTable[1],mult在VTable[2],y在VTable[3],z在VTable[4]。如果Point2d增加Point2d自己的虚函数,同时Point3d继承Point2d的虚函数,他们相同的虚函数接口同样对应于相同的VTable数组下标,如VTable[5],此由编译器保证,因而编译器对于虚函数接口能将其转换为函数指针数组的下标。   故,当调用 ptr->z(); 编译器实际调用的是: ( Read more […]

C/C++:读取文件小细节

Posted by & filed under Uncategorized.

以C中读文件时,要非常小心,用二进制处理和用文本方式处理,对于用文本方式写入的文件,操作结果是相同的,但是对于用二进制写入的文件,结果却是大为不同.例如用其对.exe文件进行读取, #include <iostream> #include <ctime> #include <fstream> using namespace std; int main(){ FILE* fp; fp = fopen(“d.txt”, “wb”); char* str = “biao”; fwrite(str, strlen(str), 1, fp); fclose(fp); fp = fopen(“test.exe”, “rb”); fseek(fp, 0L, SEEK_END); int length = ftell(fp); cout << “File length: ” << length << endl; rewind(fp); char ch; int count = 0; while (!feof(fp)) { ch = fgetc(fp); //cout << ch; count++; } cout << endl << count << endl; cout << Read more […]

Dll分配的内存块,应用释放的问题

Posted by & filed under Uncategorized.

转载自:http://blog.csdn.net/blz_wowar/article/details/2176536 写了个程序,在DLL中用malloc分配了一块内存,但是在exe程序中释放,结果程序crash,原因就是: 其原因可能是堆被损坏,这也说明 TestMySticker.exe 中或它所加载的任何 DLL 中有 bug。 想了半天以为是自己的写法有问题,后终于在google上找到了原因,汗。。。   以下文字引用自 http://hi.baidu.com/huhe/blog/item/0b422edd1f1563d98c1029a3.html 很感谢作者的分析 一个模块一个堆,一个线程一个栈。 dll里malloc的内存,在exe里free会出错。 CRT(C运行时期库)不是使用进程缺省的堆来实现malloc(new中调用malloc)的,而是使用一个全局句柄HANDLE _crtheap来分配内存的。这个_crtheap是在XXXCRTStartUp(CRT提供的进口点函数)中创建的。 由于CRT静态连接,则楼主的DLL里有也有一个CRT,因此也有一个_crtheap。而在dll中的new使用dll中的_crtheap句柄分配堆,在exe中的delete使用exe中的_crtheap释放堆,当然失败! 解决办法: 1。在DLL中输出一个函数给EXE调用,专门用来释放由DLL分配的内存; 2。用GlobalAlloc()代替new,用GlobalFree()代替delete; 3。使用单一的堆,分配内存使用HeapAlloc(GetProcessHeap(),0,size),释放内存使用HeapFree(GetProcessHeap(),0,p); 4。把dll和exe的Settings的C/C++选项卡的Code   Read more […]

linux测试磁盘读写IO速度的方法

Posted by & filed under Uncategorized.

  运维工作中,有时会遇到类似于IO特别高,但不能判定是IO瓶颈还是软件参数设置不当导致热盘的问题.这时候通常希望能知道磁盘的读写速度,来进行下一步的决策。 下面是两种测试方法: (1)使用hdparm命令 这是一个是用来获取ATA/IDE硬盘的参数的命令,是由早期Linux IDE驱动的开发和维护人员 Mark Lord开发编写的( hdparm has been written by Mark Lord <mlord@pobox.com>, the primary developer and maintainer of the (E)IDE driver for Linux, with suggestions from many netfolk).该命令应该也是仅用于Linux系统,对于UNIX系统,ATA/IDE硬盘用的可能比较少,一般大型的系统都是使用磁盘阵列的。 使用方法很简单 复制代码 代码如下: # Read more […]

个人整理的Linux Shell语法速查表(用C语言语法来作对比)【转】

Posted by & filed under Uncategorized.

  转自:http://blog.csdn.net/kwiner/article/details/4049640 虽然学过Linux Shell编程,但由于编写Shell脚本的机会实在是比较少(通常在项目初期搭建开发环境时编写得比较多一些),所以一些语法久而久之就会忘了,一个简单的语法去翻书效率实在是慢,所以就个人整理了一个表格,由于我用的编程语言是C/C++,所以在编程的时候往往脑海里面首先浮现的是用C语言怎么去编写它,所以我干脆拿C语言的语法来和Shell编程的语法作个对比表,这样查起来就方便了,哈:   要实现的功能 C语言编程 Linux Shell脚本编程 程序/脚本的参数传递 int main(int argc, char** argv) { if (argv != 4) { printf( “Usage: Read more […]

RedHat未注册而不能使用yum问题解决方法【转】

Posted by & filed under Uncategorized.

  转自:http://blog.sina.com.cn/s/blog_6a1837e90100qssf.html 1.rhel5系统安装的时候其实已经有yum了,刚安装redhat就可以在终端敲入yum,只是会提示没有注册    This system is not registered with RHN.    RHN support will be disabled. 只是因为如果用官方的网站更新的话除非你是用钱买的rhel5.否则它会提示注册之类的。 当然用[root@localhost Desktop]#yum update当然也是不行的 2. 修改源配置文件 #gedit /etc/yum.repos.d/CentOS-Base.repo (我使用的是/etc/yum.repos.d/rhel-debuginfo.repo) 在其中加入以下内容 [base] name=CentOS-5-Base #mirrorlist=http://mirrorlist.centos.org/?release=$releasever5&arch=$basearch&repo=os #baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/ baseurl=http://ftp.sjtu.edu.cn/centos/5/os/$basearch/ gpgcheck=1 gpgkey=http://mirror.centos.org/centos/RPM-GPG-KEY-centos5 #released Read more […]

Linux启动脚本分析之functions【转】

Posted by & filed under Uncategorized.

  转自:http://blog.sina.com.cn/s/blog_6a1837e90100pvdn.html Location: /etc/init.d/functions     functions这个脚本是给/etc/init.d里边的文件使用的。提 供了一些基础的功能,看看里边究竟有些什么。首先会设置umask,path,还有语言环境,然后会设置 success,failure,warning,normal几种情况下的字体颜色。 下面再看看提供的重要方法: ************************************************************************************************** checkpid:检查是否已存在pid,如果有一个存在,返回0(通过查看/proc目录) daemon:启动某个服务。/etc/init.d目录部分脚本的start使用到这个 killproc:杀死某个进程。/etc/init.d目录部分脚本的stop使用到这个 pidfileofproc:寻找某个进程的pid pidofproc:类似上面的,只是还查找了pidof命令 status:返回一个服务的状态 echo_success,echo_failure,echo_passed,echo_warning 分别输出各类信息 success,failure,passed,warning分别记录日志并调用相应的方法 action:打印某个信息并执行给定的命令,它会根据命令执行的结果来调用success,failure方法 strstr:判断$1是否含有$2 confirm: 显示 “Start Read more […]