自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(55)
  • 资源 (1)
  • 收藏
  • 关注

原创 关于经典开源框架STRUTS2的使用

关于STRUTS的技术文章我很早就想写一篇了,只是不知道要写些什么东西,主要是以前没怎么接触过这个框架,因此打算用熟了之后再来写,可能感受会更深一些;其实等我会了之后,依然不知道要写些什么东西,因为总感觉都很简单的样子,没什么重点可述;但基于之前在《Jsp学习——filter的使

2011-08-22 12:42:48 2573

原创 Jsp学习——filter的使用

struts2与先前的struts不同之一就是:struts使用servlet类来处理前台消息,而struts2使用filter类来处理前台消息,有很多人喜欢把filter也称为一种特殊的servlet,因为它确实在struts2中所实现的功能几乎和servlet一个样子刻出来的

2011-08-17 15:16:57 3610

原创 Jsp学习——servlet详解

一、servlet的生命周期在《JSP学习 —— 开篇:JSP,servlet容器,Tomcat,servlet容器之间的关系》一文中,我已经对servlet的生命周期进行了简单阐述,现在,就来进行详细阐述:servlet其实就是一个Java类,它负责响应和处理页面消息。

2011-08-14 20:22:19 4982

原创 JSP学习——JSP基础知识(二)

本篇依然为基础篇,主要讲解Jsp的9个内置对象。Jsp的内置对象为Servlet API的类或接口的实例化,它们的实例化过程由Jsp标准自动进行,意即:我们可以直接使用这些对象,而不需要声明它,这些内置对象分别为:application, config,response,requ

2011-08-09 17:16:52 12637 1

原创 JSP学习——JSP基础知识(一)

1.JSP语句的生明JSP的声明语句格式,,要注意,凡是用JSP声明的变量或函数,在servlet容器翻译成servlet类时,都将其翻译为servlet类的成员变量或函数;当JSP文件被翻译成servlet类后进行实例化时,所有的客户端访问的实例化servlet对象都是同一

2011-08-08 15:32:58 4279

原创 JSP学习 —— 开篇:JSP,servlet容器,Tomcat,servlet容器之间的关系

JSP(JAVA SERVER PAGE)的缩写,其本身就是servlet的简化,是一种动态网页标准,其特点是在HTML代码中嵌入JAVA代码,JSP标签或用户标签来生成网页。至于它为什么会出现,主要原因在于早期的servlet技术在编写代码时经常通篇性的写一大堆HTML标签,静

2011-08-08 14:21:10 9435

原创 几种结构型的设计模式概析【下】——Flyweight模式,Facade模式和Proxy模式【C++实现】

<br />在开发过程当中,有时候对于同一个或很多个大同小异的对象,我们不得不各自创建一个对象来使用它们。这种情况下,我们无意中就会造成很大的存储空间的浪费。Flywight就可以很好的解决这个问题。其UML图如下:<br /> <br /> <br />上图中FlywightFactory中有个对象池(VECTOR实现),用来存放我们要使用的对象,每当我们需要一个新的对象Flyweight时,就在这个对象池中检索看先前是否创建了类似的对象,如果创建了,则直接引用之前的对象,否则新创建一个Flywight对

2011-04-24 15:29:00 1416

原创 几种结构型的设计模式概析【上】——Bridge模式,Adapter模式,Decorator模式【C++实现】

Bridge模式适用于客户需求经常变化时的类的抽象和封装情况。在OO型的程序设计中,用户的需求变化,意味着类的重新抽象和封装,当用户的需求变化十分频繁时,类的重新抽象和封装工作也就颇为频繁,如此以来,将会增加和修改很多类。这对程序开发人员来说,无非是最大的痛苦。Bridge模式就是为此种情况而生,它将类的抽象和实现分为完全独立的两部分,然后通过聚合使两者又保持一定的联系。这与传统的抽象基类之后再继承子类的作用如出一辙,但却少了增加新类的环节,由此以来,程序员维护的类的数量就减少,代码的可读性也大大增加,最重

2011-03-28 14:25:00 1134

原创 几种创建型的设计模式概析【下】——Builder模式,ProtoType模式【C++实现】

Bulider模式和AbstractFactory模式在功能上有些相似,都是负责管理创建复杂对象的组件。与AbstractFactory模式不同的是,Builder模式是将一个对象的创建分成几个小部分,然后一步一步的进行对象的创建;Builder就是在创建的对象的过程中做文章,通过对不同的步骤传入不同的参数,最后得到不同的创建过程。而AbstractFactory模式不会在创建过程中做文章,它所创建的对象过程也没有先后必然的次序关系,而是一次性创建成功。举个例子来说:不同的汽车汽车有很多组件,方向盘,座椅,

2011-03-14 13:40:00 1055

原创 几种创建型的设计模式概析【上】——Factory模式, AbstractFactory模式,Singleton模式【C++实现】

Factory模式只适用于多个具有共同抽象基类的情况,在这种情况下,创建一个用基类的指针指向的子类对象是很吃力的,因为我们需要知道这个子类的名字,而对于大型项目来说,一个父类的子类是何其之多,而且通常情况下,每个程序员只负责其中某一个或某几个类的设计,对于子类的命名当然每个人都各有其好,如此以来,要创建一个新子类的工作是何其麻烦,可能要翻好多代码去领会它们做了什么,然后才能知道需要创建哪个子类。Factory模式就很好的解决了这个问题,它做要达到的目的就是将所有的子类的创建工作都封装到另外一个专门负责创建的

2011-03-14 00:02:00 1572

原创 大三第二学期开学总结

又是一个新学期。这学期大四的童鞋6月份一走,我们这一届就成名正言顺的大四了.....  心情无比的惆怅!在看看上学期开学初给自己制定的目标:c++ primer,effective C++,more effective C++,数据结构(自己封装),STL,多线程,socket,多媒体编程。如今回头看看自己,真正完成的计划严格来说没有一样.... C++ primer 看到后面泛型编程那部分就没再看下去,主要原因是感觉自己对后面部分当初学的比较好,就放弃看下去的计划了。effective C++ 和 Mor

2011-03-03 00:16:00 1451

原创 重谈eixt(0),ExitProcess,和TerminateProcess的区别和联系

首先来谈谈一个进程的执行流程。每个应用程序都有个主函数,在WINDOWS下,只支持两种类型的应用程序——CUI(控制台应用程序)和GUI(图形界面应用程序),相应的,其主函数类型不同。来看下这几个入口函数int WINAPI WinMain(HINSTANCE hinstEx

2011-01-12 18:56:00 23155 3

原创 WINDOWS的内核对象——《windows核心编程》读书笔记

1.内核对象概念凡是OS内核调度时所需要的数据结构都被称为内核对象,其实质是一个结构体对象而已,如进程对象,它的本质为一个PCB(进程控制块),是一个数据结构,用来标识进程的一些属性。这些对象的一个显著特征是:不能由用户来直接改变其内部信息,对于程序员来说,它就是一个黑盒子(

2011-01-09 23:49:00 1104

原创 关于UNICODE/ANSI的问题

标准的ANSI C 字符串函数和它们的等价U n i c o d e 函数 char * strchr(const char *,int);wchar_t * wcschr(const wchar_t *,wchar_t);int strcmp(const char

2011-01-08 18:01:00 2672 1

原创 uc/os-II 源码剖析笔记(1)——几个OS相关的基本概念(二)

一.互斥条件 多个任务共享一个资源时需要注意做到互斥,意即当一个任务在使用一个资源时,其它任务需停止使用该资源(挂起),直到该任务使用完该资源时,其它任务方可使用该资源。 常用的实现互斥的方法有: 1. 关中断2. 信号量3. 使用测试并置位指令4. 禁止任务切换 下面分别来介绍各种方法(其中第3种方法在实时内核中不会用到,不做讨论): (1)关中断 为互斥常用方法,UC/OS-II中中断

2010-12-22 11:47:00 1166

原创 uc/os-II 源码剖析笔记(1)——几个RTOS里面的基本概念(一)

一. 实时操作系统(RTOS)大概分为两种:硬实时和软实时;硬实时对时间要求较为严格,它要求各任务不仅要执行无误而且要做到准时;软实时对时间要求较低,它是以各任务尽可能快的完成为标准,而并未强制规定任务必须在规定的时间内完成。现如今的绝大多数OS体系是硬实时和软实时相结合的策略。二.前后台系统应用程序是一个大循环,里面有各个需要执行的任务,这部分可看成是后台系统;对于一些重要的实时性要求强的任务则放到中断函数中去执行,这部分就是前台系统。一般的应用不复杂的操作系统都会设计成前后台系统,典型的应用为:51单片

2010-12-21 17:19:00 996

转载 一流学生就业,二、三流学生出国或是考研,末流学生创业

<br />“一流学生就业,二、三流学生出国或是考研,末流学生创业”这句话似乎总结了“好学生”“差生”们在社会上的命运。然而,命运却总喜欢弄人,所以,很多末流的学生创业成功了,为那些个一流学生们提供了就业的机会……究竟是什么让学校里的好学生们进入社会以后,反而去向那过去的差生们讨口饭吃呢?要搞清这个现象,就或许要从学校对一个学生的好差评判标准来说起。<br /><br />  众所周知,现在的教育制度明显是为了考试而服务的。因此,一些大脑相对单一,适合死记硬背的孩子们,往往手上会有一份分数漂亮的答卷。他们严

2010-12-17 18:49:00 1098

原创 单片机实验——8X8LED点阵显示技术(二)

<br />利用8X8 点阵挨个显示数字0 到9 的数字,到9后从0重新开始,如此循环。<br /> <br />解决方式一:通过中断方式让所有行值始终为低电平(事实上,并不是一次性让所有行值为低电平,而是挨行设置,CPU的中断时间间隔较短,当挨行设置频率较快时,可近似认为所有行值都为低电平),而列值需要根据具体数字的列值来确定,每秒改一次列值的数字。<br />解决方式二:通过中断方式让所有列值始终为高电平(原理同上),而行值根据具体数字的行值来确定,每秒改变一次行值的数字<br /> <br />以下我

2010-11-30 16:36:00 7779 3

原创 单片机实验——8X8LED点阵显示技术

在8X8 LED 点阵上显示柱形,让其先从左到右平滑移动1次,其次从右到左平滑移动1次,再次从上到下平滑移动1次,最后从下到上平滑移动次,如此循环下去。LED显示原理:显示某一个点时,列值设为1,行值设为0即可编译环境:KEIL C51 V3电路仿真软件:proteus 7.4单片机类型:AT89C52LED类型:MATRIX-8X8-RED单片机上代码如下:#include unsigned char code table1[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xb

2010-11-30 15:48:00 6896 1

原创 单片机实验——电子表(数码管动态显示技术)

(1. 开机时,显示12:00:00 的时间开始计时;(2. P2.0 控制“秒”的调整,每按一次加1 秒;(3. P2.1 控制“分”的调整,每按一次加1 分;(4. P2.2 控制“时”的调整,每按一次加1 个小时;(靠!proteus的7seg-mpx4-cc数码管电器特性仿真不标准,导致显示结果不正常,害我白折腾了7个小时!一直在自己的代码上找错!)编译环境:KEIL C51 V3仿真软件:proteus 7.4单片机类型:AT89C52数码管类型:7seg-mpx4-cc开关选用:BUTTON单片

2010-11-30 01:48:00 6253

原创 单片机实验——让响声器发出“滴,滴”声

<br />编译环境:KEIL C51 V3<br />仿真软件:proteus 7.4<br />单片机类型:AT89C52<br />电阻类型:RES<br />扬声器类型:SPEAKER<br />音频放大器:LM386<br />电容类型:AVX1206NP010P<br /> <br /> <br />单片机上的程序:<br /> <br />#include <reg52.h>char code table[]={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0

2010-11-29 20:28:00 2394 1

原创 单片机实验——0到60秒的计时器(使用硬件中断方式实现)

编译环境:KEIL C51 V3仿真软件:proteus 7.4单片机类型:AT89C52数码管类型:7seg-mpx1-cc (cc——共阴数码管)烧写到单片机上的程序:#include char code table[]={0x3f,0x06,0x5b,0x4f,0x66, 0x6d,0x7d,0x07,0x7f,0x6f};unsigned char count;unsigned char second;void main(){ TMOD=0x01;

2010-11-29 18:46:00 16516 2

原创 单片机实验——4X4矩阵键盘识别技术

用AT89S51 的并行口P1 接4×4 矩阵键盘,以P3.0-P3.3作输入线,以P3.4-P3.7 作输出线;在数码管上显示数字按键的“0-9”序号,其它按键显示0。 原理分析:4X4矩阵键盘每个按键都有它的行值和列值,当每个按键的行值为低电平,列值为高电平时,按键才能起作用,判断是否有按钮按下时,先让这一行通低电平,再通过扫描每一列来判断是否被按下(逐列使列值通高电平),如果被按下,那么这一列的电平此时会成为低电平;如果这一列在扫描时为低电平,说明这一列有按键被按下,而行值是每次在

2010-11-29 12:13:00 6816

原创 单片机实验——0到60秒的计时器

编译环境:KEIL C51 V3仿真软件:proteus 7.4单片机类型:AT89C52程序代码:#include void delay500ms(){ int i,j,k; for( i=0;i

2010-11-28 19:57:00 14380 1

原创 单片机实验——广告灯的左移右移

<br />八个发光二极管L1-L8<br />分别接在单片机的P1.0-P1.7 接口上,输出“0”时,发光二极管亮,开始<br />时P1.0→P1.1→P1.2→P1.3→┅→P1.7→P1.6→┅→P1.0 亮,重复循环<br /> <br /> <br />编译环境:KEIL C51 V3<br />仿真软件:proteus 7.4<br />单片机类型:AT89C52<br /> <br />程序代码:<br /> <br />#include <reg52.h>void delay

2010-11-28 16:24:00 2531

原创 复习——两种基于“交换”的排序方式

基于“交换”的排序方法中,最常见的就是我们平时所熟悉的“冒泡排序”,其时间复杂度为O(n平方);另外一种基于“交换”的排序方法即:快速排序,它是一种对冒泡排序的改进,其平均时间复杂度为O(nlogn);通常,快速排序被认为是所有同等数量级的排序方法中,平均性能最好的。下面代码是对1——100的递增数列分别利用冒泡和快排方法进行从大到小的排序。#includeusing namespace std;const int MAX_SIZE=101;void initial_array(in

2010-11-25 16:00:00 634

原创 复习下几种插入排序

一般插入排序(包括直接插入排序和直接插入排序),时间复杂度为O(N平方),辅助空间大小为O(1);希尔排序也是一种插入排序,但希尔排序由于其时间是所取“增量”序列的函数,这涉及到一些数学上尚未解决的难题,所以,到目前为止,没有人能求出一个较好的增量序列,但大量研究已得出一些局部结论,如有人在大量实验基础上推出:当n在某个范围内,希尔排序所需比较和移动次数约为n的1.3次方,而能肯定的一点是,在增量序列取的不太差的前提下,增量排序的效率肯定高于一般插入排序。增量序列可以有各种取法,但应注意的是:应使增量序列中

2010-11-25 00:10:00 791

转载 一位电子工程大四学生的反思和拷问

博文《教育需要良心——回归工程教育的痛苦思考与实践》真实地反映了现在大学教育中存在的问题,在此我举例证实一下,大四阶段,我也遇到了两位不负责任的老师典型。第一个是教我们电子技术的。她上课的时候完全是照着PPT念,并且PPT都是从网上下载的,她自己都没弄清楚该怎么讲。上实验课就更是不负责了,首先是发了一本实验手册(不是她遍的资料),上面所有的电路都连好了,我们仅仅需要按图连线,看看效果就算结束了。我觉得这种实验根本就不叫动手能力,动手能力应该是自己用自己的大脑思考以后,自己知道要做什么,然后用双手实现自己

2010-11-16 22:50:00 691

原创 多线程编程——几种线程同步机制

先来看看一般的多线程共用一个资源的情况:#include "stdafx.h"#include "windows.h"const int 100;int workID=10;DWORD threadfunone(LPVOID lParam){ for(;;) { workID+=1; Sleep(1000); printf("the workID of threadfunone is:%d/n",workID);

2010-10-30 00:13:00 1026

原创 眼过千遍不如手过一遍——做MFC规则的可共享(shared)DLL

<br />!看文章不仔细,导致自己在这个问题上停留了5个小时! 贴代码。<br /> <br />新建MFC可共享DLL,新建一对话框CDLLDLG,在CXXXAPP.cpp里面添加如下函数<br /> <br />extern "C" void _declspec(dllexport)showdlg(){ AFX_MANAGE_STATE(AfxGetStaticModuleState()); //一定要加上这句,害我折腾了5个小时! CDLLDLG dlg; dlg.DoM

2010-10-27 02:09:00 1135

原创 眼过千遍不如手过一遍——DLL中类和变量的导出

<br />TestDLL头文件:<br />#include<iostream>#pragma onceextern "C" int add(int a,int b);int g_abc;class _declspec(dllexport) testclass{ int a; int b; char c;public: testclass(int a,int b,char c):a(a),b(b),c(c) {} void printo

2010-10-26 20:10:00 940

原创 眼过千遍不如手过一遍——简单动态链接库的编写

链接库文件TestDLL.h#pragma onceextern "c" int _declspec(dllexport)add(int ,int);//注意这里不能是_stdcall,否则编译出错,具体原因我也不知呀!链接库文件TestDLL.cpp#include "TestDLL.h"int add(int a,int b){ return a+b;}测试链接文件testlink.cpp#include#includetypedef (*inport)(

2010-10-26 16:30:00 1953

原创 眼过千遍不如手过一遍——静态链接库的编写

<br />链接库TestSLL头文件:<br /> <br />#pragma onceextern "c" int add(int a,int b);<br />链接库TestSLL源文件<br /> <br />#include "TestSLL.h"int add(int a,int b){ return a+b;}<br /> <br />实现链接文件main.cpp<br /> <br />#include<iostream>#include ".../Tes

2010-10-26 16:02:00 836

原创 从一个小程序来看C++类的存储方式

先来看下例:#includeusing namespace std;class tryinstance{ int a; double b; float c;public: int printout() { cout程序的输出结果为:这个没什么意外,sizeof(try1)的大小为4+空4+8+4+空4=24个字节;问题是函数既然是类的成员函数,为什么不占用大小?在我看来,其实每个成员函数并非为某个对象所有,而是全体类对象所有,每个对象都有一个隐含的

2010-10-26 02:09:00 778

原创 MFC的那些内幕——AfxWinMain的那些事

<br />AfxWinMain函数原形如下:(去掉了原来的很多没用的注释和累赘)<br /> <br />int AFXAPI afxWinMain(...){ CWinApp *pApp=AfxGetApp();//获取全局对象指针(theApp) AfxWinInit(...); pApp->InitApplication(...); pApp->InitInstance(...); pApp->Run();}

2010-10-26 01:33:00 9961 3

转载 深入浅出Visual C++动态链接库(Dll)编程

基础慨念1.概论   先来阐述一下DLL(Dynamic Linkable Library)的概念,你可以简单的把DLL看成一种仓库,它提供给你一些可以直接拿来用的变量、函数或类。在仓库的发展史上经历了“无库-静态链接库-动态链接库”的时代。静态链接库与动态链接库都是共享代码的方式,如果采用静态链接库,则无论你愿不愿意,lib中的指令都被直接包含在最终生成的EXE文件中了。但是若使用DLL,该DLL不必被包含在最终EXE文件中,EXE文件执行时可以“动态”地引用和卸载这个与EXE独立的DLL文件。静态链接库

2010-10-24 15:48:00 1161 1

原创 C++网络编程之——简易的服务器端与客户端

<br />服务器端:<br /> <br />// CSexample.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include "CSexample.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif///

2010-10-18 06:28:00 2813

原创 C/C++内存对齐

一、什么是字节对齐,为什么要对齐? 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特 定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。 对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能从某些特定地址开始存取。比如有些架构的CPU在访问 一个没有进行对齐的变量的时候会发生错误,那么在这种架构

2010-10-06 03:20:00 597

原创 我回来了,继续学习!

9月中下旬我很少更新博客了,这半个月我去做项目了,学校学生处忙助学贷款的老师嫌打印贷款借据和合同太麻烦了,很多过程都要手动操作,但川大不存在这回事! 于是乎找到了我,让我做软件,好。。。做就做吧....   我答应了。  主要涉及到操作WORD信函功能,从EXCEL中读取数据加载到word的信函(模板)中,再打印出来....  在网上查了下,这属于word的二次开发技术  ,但学校图书馆这方面的书少之又少。  只能通过网络来获取相关方面的技术。  我面临着三种开发语言选择:VB,VC#,VC  。 我很想用

2010-09-28 21:57:00 665

原创 自己封装的泛型链表

<br />链表抽象基类,估计以后封装双向链表时我还会用到它。<br /> <br />list_base.h如下:<br /> <br />#ifndef ABLIST_H#define ABLIST_H#include "ListNode.h"template<class type>class ablist{ public: virtual int insert(type value)=0; //将value 插入到链表表头 virtual int i

2010-09-20 05:02:00 672

空空如也

空空如也

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

TA关注的人

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