存档

2011年4月 的存档

本站右上角Skill小贴士的实现方法

2011年4月30日  2,062 views 没有评论

前几天浏览别人博客的时候发现有个人的网站有skill小贴士,每次刷新页面都会随机显示一条小贴士,我觉得挺不错的,就学了过来。现在将实现的方法记录与此,如果有人也想在自己的网页上添加小贴士的话,可以直接拿去用。

实现这个小贴士,是通过jsp实现的。在网页中想要显示小贴士的地方添加一句

<!-- src当然要换成你自己的js文件地址 -->
<script src="http://codeup.org/js/skills.js" type="text/javascript"></script>

具体在本网站中,因为使用了wordpress的主题,所以不是修改某个页面,而是修改主题模板。在主题编辑中找到顶部然后找到合适的地方添加一个div,然后将上面那段代码填进去就OK了。后面的地址你可以使用自己的js文件,我会附在文章后面(也是从别人那里找来的),或者你也可以直接使用上面的网址,只要通知我一声就好了,反正我的流量用不完……

模板修改显示skill贴士

在模板修中修改显示skill贴士

阅读全文…

malloc()和free()的相关知识

2011年4月28日  4,228 views 2 条评论

之前有一篇文章是写全局变量、静态变量、局部变量、静态局部变量以及栈和堆在内存中的存储区别的,最近我又看了一篇关于C中Malloc函数和Free函数对内存操作的,《浅谈C中的malloc和free》,通过这篇文章,我对C的内存申请以及释放有了新的、全面的认识。我想,不仅是C,C++或者C#等其他语言的内存申请释放应该也是使用相近的方法吧。下面我简单总结了一下《浅谈》的主要内容,再加上一点我自己的理解。

之前,我对malloc和free的了解,仅仅是在C中使用这两个函数来申请和释放内存,只知道怎么使用,用malloc申请一段给定大小的内存,返回一个Void* 指针,当使用完这段内存后需要手动调用free来释放这段内存。

一、malloc() 和 free() 的基本概念和用法:

 

1、函数原型及说明:

void *malloc(long NumBytes): 该函数分配了NumBytes个字节,并返回了指向这块内存的指针。如果分配失败,则返回一个空指针(NULL)。

void free(void *FirstBytes): 该函数是将之前用malloc分配的空间还给程序或者是操作系统,也就是释放了这块内存,让它重新得到自由。

2、函数用法:

这两个函数的用法其实很简单,就是用malloc()申请内存,用完这段内存后交给free()来释放着段内存。简单例子:

#include<stdio.h>
int main()
{
	char *Ptr = NULL;
	Ptr = (char*)malloc(100 * sizeof(char)); //Malloc
	if (NULL == Ptr)
	{
		printf("malloc failed");
		return 1;
	}
	gets(Ptr);
	printf("%s",Ptr);
	//code...

	free(Ptr);//Free
	return 0;
}

阅读全文…

Mb、MB – 存储和网络速度计算单位详解

2011年4月27日  5,437 views 没有评论

Mbps和MBps两个看着一样的兄弟,别看只差一个大小写,但是写法和叫法却不一样,Mbps全称 Megabits Per Second,而MBps的全称则是Megabyte Per Second。

无论用作电脑储存或网络速度的计算单位,Kb/s和KB/s英文字母大写和小写之意义截然不同,这是许多人常会犯错的地方。

而在换算中 bits是最小的单位,代表一个2进制位。

1byte = 8bits
1KB   = 1024 byte
1MB   = 1024 KB
1GB   = 1024 MB
1TB   = 1024 GB

1MBps    = 8Mbps
1Mbps    = 1024Kbps
1Kbps    = 1024bps
1024Mbps = 1Gbps

算下来,可以看出,MBps 和 Mbps 相差8倍,我们上网,供应商开出的1M, 2M, 5M, 8M, 10M 带宽其实都是Mbps而不是MBps,只要换算一下就可以算出我们的实际速度是多大了。

据TMnet Streamyx官方网站披露,除了以太网络标头值(Ethernet Header)之外,这些流失因素包括传输控制协议标头值(TCP Header)有5至10%的传输消耗,而异步传输模式标头值(ATM Header)则多达15%。
因此:1M宽频的实际上网速度是1乘以1024和除去8,得出128KB/s再乘75%,等于96KB/s,就是你的1M宽频网络的真正速率。

分类: 心得笔记 标签: , , ,

全局变量、局部变量、静态全局变量、静态局部变量在内存里的区别以及栈与堆的区别

2011年4月26日  15,601 views 5 条评论

全集变量、局部变量、静态全局变量、静态局部变量在内存中如何存储,有什么区别,栈和堆的区别,这都是C/C++的基础问题。在各种招聘笔试面试中,经常都能够遇到与之相关的问题。前些日子我看了一些与之相关的文章,现在总结一下存放于此。

先分析一下四种变量的区别:

 

一、先由程序的内存分配说起,一个完整的C/C++程序在运行时会占用的内存分为几个部分。

  1. 栈(stack):由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
  2. 堆(heap) :一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。malloc和new等操作实际上就是在堆中申请内存,对象使用完后要手动释放,否则只能等待程序结束时由系统回收,会产生内存泄漏。
  3. 全局区(静态区)(static):全局变量和静态变量是存储在一起的,初始化过的全局变量和静态变量在同一块区域,未初始化的全局变量和静态变量存放在一块相邻的区域内。此区域由系统在程序结束后释放。
  4. 文字常量区:常量字符串存放于此,在程序结束后由系统释放。字符常量就是像这样的 char* str=”abc”;其中的”abc”。在实际情况中,是会复用的,比如变量a和b都赋值为”abc”则实际上他们指向同一块地址。
  5. 程序代码区:存放函数体的二进制代码。

阅读全文…

Delphi中的窗体创建与销毁

2011年4月23日  6,007 views 没有评论

Delphi中的窗体,有模式窗体与非模式窗体两种。两种窗体的调用方式不同,模式窗体使用ShowModal显示,非模式窗体使用Show显示。当显示模式窗体的时候你是不能操作本程序的其他窗体的,你不能把焦点从模式窗体转到其他窗体上。而非模式窗体则没有这种限制,你可以从一个非模式窗体切换到另外一个非模式窗体上。两种窗体的区别仅仅在调用的方式上有区别。

窗体的创建:

当使用Delphi的IDE New一个窗体后,在Project1.dpr文件中,会出现一句

Application.CreateForm(TForm2, Form2);

意思是当程序启动的时候会创建TForm2类的Form2实例,也就是窗体2。这一过程是自动的,不管你是否调用显示Form2,
Form2已经存在了,其OnCreate事件也已经触发了。这时候,如果你想显示Form2,那么可以显式调用Form2的Show或ShowModal方法,以非模式或模式显示窗体。

如果你不想随程序启动而创建窗体,而是动态的创建窗体,那么,你可以删除上面的那句代码,然后在程序中你想动态创建窗体的地方加上以下代码:

 //需要在头部引用TForm2所在的单元文件,并声明Form2变量。
Application.CreateForm(TForm2, Form2);

或者使用

//和上面一样,需要引用并声明。注意,一定不要直接这样写Form2.Create
Form2 := TForm2.Create(Application);

阅读全文…

分类: 心得笔记 标签: , , ,

程序员的基本技能

2011年4月21日  2,100 views 没有评论

酷壳上看到一篇博主陈皓总结的程序员应具备的基本技能,现抄录于此以自勉。

基本技能 技能描述
阅读代码 这个技能需要程序员能够具备读懂已经存在的代码的能力,这样的能力可以让程序员分析程序的行为,了解程序,这样才能和开发团队一起工作,继承维护或是改进现有的程序。
编写程序 编写程序并不包括程序设计。不要以为编程是一件很简单的事情,很多程序员都认为编程只需要懂得程序语言的语法,并把设计实现就可以了。但是这离编写程序还远远不够,使用什么样的编码风格成为编写程序员最需要具备的基本技能。能否使用非常良好的编程风格直接决写了程序员的级别。
软件设计 这一能力直接决定了需要吏用什么样的代码技术达到怎么样的功能,而系统架构设计直接决定了软件的质量、性能和可维护性。并不是所有的程序在这一方面都非常优秀,但每个程序员都需要或多或少的明白和掌握这一基本技能。
熟悉软件工程 每个程序员都应该明白软件工程是什么东西,都应该知道,需求分析,设计,编码,测试,Release和维护这几个阶段。当然,几乎所有的人都知道这些东西,但并不是每个人都很清楚这些东西。现在很多高级程序员都会混淆“需求规格说明书FS”和“概要设计HLD”。另外,程序员还需要知道一些软件开发的方法论,比如:敏捷开发或瀑布模型。
使用程序库或框架 一个程序员需要学会使用已有的代码,无论是标论的程序库,或是第三方的,还是自己公司内部的,都需要学会做。比如:C++中,需要学会使用STL,MFC,ATL,BOOST,ACE,CPPUNIT等等。使用这些东西,可以让你的工作事半功倍。
程序调试 程序调试是分析BUG和解决问题最直接的能力。没有人能够保证程序写出来不用调试就可以运行正常,也没有人可以保证程序永远不会出BUG。所以,熟练使用调试器是一个程序员需要具备的基本技能。
使用IDE 学会使用IDE工具也会让你的工作事半功倍。比如,VC++,Emacs,Eclipse等等,并要知道这些IDE的长处和短处。
使用版本控制 一定要学会使用版本控制工具,什么叫mainline/trunk,什么叫tag,什么叫branch,怎么做patch,怎么merge代码,怎么reverse,怎么利用版本控制工具维护不同版本的软件。这是程序员需要明的的软件配置管理中最重要的一块。
单元测试 单元测试是每个程序都需要做的。很多单元测试也是需要编码的。一定要学会在xUnit框架下进行单元测试。比如JUnit, NUnit, CppUnit等等。
重构代码 每个程序员都需要有最基本的能力去重构目前已有的代码,使代码达到最优但却不能影响任何的已有的功能。有一本书叫《软件的重构》,每个程序员都应该读一下。
自动化编译 程序员需要使用一个脚本,其能自动化编程所有的工程和代码,这样,整个开发团队可以不停地集成代码,自动化测试,自动化部署,以及使用一些工具进行静态代码分析或是自动化测试。

文章来源:酷壳