<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>一天</title>
    <description></description>
    <link>http://xml.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>Dojo 之 面向对象</title>
        <author>xml</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xml.javaeye.com">xml</a>&nbsp;
          链接：<a href="http://xml.javaeye.com/blog/183150" style="color:red;">http://xml.javaeye.com/blog/183150</a>&nbsp;
          发表时间: 2008年04月16日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          面向对象三大特性：封装、继承、多态。在熟悉了Java/C#/C++这些高级面向对象语言的语法结构后，我们或多或少会对javascript脚本语言的面向对象感到一些不适，function、prototype、call、apply……<br /><br />    如果真不了解javascript或这几个关键字，先看几篇简文：<br /><br />1.<a href="http://www.cnblogs.com/flyingis/articles/1153555.html" target="_blank">JavaScript 基本组成</a><br />2.<a href="http://www.cnblogs.com/flyingis/articles/1153564.html" target="_blank">ECMAScript 基础</a><br />3.<a href="http://www.cnblogs.com/flyingis/articles/1154367.html" target="_blank">JavaScript 中的对象</a><br />4.<a href="http://www.cnblogs.com/flyingis/articles/1154385.html" target="_blank">JavaScript 中的继承</a><br /><br />    为了消除这种对javascript面向对象语法的不适，众多js库都构建了更符合传统OO编程思想的代码框架，如prototype、mootools等等，引用mootools文档中创建对象的例子<br /><pre name="code" class="js">var Animal = new Class({
    initialize: function(age){
    this.age = age;
    }
}); 
var Cat = Animal.extend({
    initialize: function(name, age){
    this.parent(age);     //将调用Animal的initialize方法;
    this.name = name;
    }
});
var myCat = new Cat('Micia', 20);
alert(myCat.name);     //显示 'Micia'
alert(myCat.age);     //显示 20</pre><br /><br />    Dojo作为一个强大的javascript工具箱，有它自己面向对象的开发方式，用declare解决了对象的创建和继承的问题，文档中的例子：<br /><pre name="code" class="js">dojo.declare("my.classes.bar", my.classes.foo, {
    // properties to be added to the class prototype
    someValue: 2,
    // initialization function
    constructor: function(){
        this.myComplicatedObject = new ReallyComplicatedObject();
    },
    // other functions
    someMethod: function(){
        doStuff();
    }
);</pre><br /><br />    declare的第一个参数是对象名称，最后一个参数指定在这个对象里要添加的内容，包括函数和属性，写个例子<br /><pre name="code" class="js">dojo.declare("Apple", null, {
        price: 5,
        constructor: function(weight) {
            this.total = weight * this.price;
        },
        print: function() {
            alert("The total price is " + this.total);
        }
    }
);
var myapple = new Apple(10);
myapple.print();    //输出结果："The total price is 50"</pre><br /><br />    上例通过declare创建了一个Apple对象，javascript本身没有类的概念，可以使用对象本身来创建新的对象myapple，通过构造函数的参数值计算苹果的总价，print函数输出结果，非常形象的构建了一个Apple“类”，非常容易理解。要注意的是，这里如果声明默认构造函数， "new Apple(10)"将直接执行默认构造函数，带参数的构造函数就被忽略了，并非C++中顺序执行。<br /><br />    注意dojo.declare第二个参数，如果创建一个独立的新对象，可以设为null，当需要从其他一个或多个对象继承时，则为对象名称，这样就方便的实现了对象继承。多个对象继承，declare第二个参数为一数组，第一个元素为原型父对象，其他的为mixin对象，通过代码来理解。<br /><pre name="code" class="js">&lt;script>
    dojo.declare("Apple", null, {
        price : 5,
        constructor : function(weight) {
            this.total = weight * this.price;
        },
//            constructor : function() {
//                alert("Create Apple !");
//            },
        print : function() {
            alert("The total price is " + this.total);
        }
    });
    dojo.declare("AppleTree", null, {
        constructor : function() {
            alert("Create AppleTree !");
        },
        print : function() {
            alert("This is an apple tree");
        },
        additional : function() {
            alert("This is a mixin class");
        }
    });
    
    dojo.declare("GreenApple", [Apple, AppleTree], {
        constructor : function() {
            alert("Getting a green apple");
        }
    });
&lt;/script></pre><br /><br />    创建一个GreenApple对象，测试alert执行顺序！mixin对象的方法将覆盖之前对象中的同名函数，除非子对象也声明了同名函数print。<br /><pre name="code" class="js">//输出
//"The height of the tree is undefined"
//"Getting a green apple"
var gapple = new GreenApple();
//输出，覆盖了Apple对象的print
//"This is an apple tree"
gapple.print();
//"This is a mixin class"
gapple.additional();</pre><br /><br />    dojo/_base/_loader/bootstrap.js有专门的mixin函数，用于对象的拷贝，将一个创建好的对象拷贝到新的对象中<br /><pre name="code" class="js">var copy = dojo.mixin({}, new Apple(2));
copy.print();</pre><br /><br />    print输出结果是"The total price is 10"，mixin参数一定是创建好的对象实例，否则出错！dojo.extend则可以将一个或多个对象的属性、方法拷贝到一个原型上，通过prototype实现继承，这是继承的另外一种方式。<br /><br />    通过declare、mixin、extend，dojo给我们提供了一种方便的对象创建与扩展机制，一般情况下够用了，感觉还是比较方便，使用时也存在一些限制，翻翻源代码就能理解。这里主要是要知道dojo是如何面向对象的，方便我们更好的理解dojo基础功能，及dijit和dojox，dojo最为强大还是它的widgets。本文涉及的js源码：<br />mixin:dojo/_base/_loader/bootstrap.js<br />extend:dojo/_base/lang.js<br />declare:dojo/_base/declare.js
          <br/>
          <span style="color:red;">
            <a href="http://xml.javaeye.com/blog/183150#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 16 Apr 2008 09:50:45 +0800</pubDate>
        <link>http://xml.javaeye.com/blog/183150</link>
        <guid>http://xml.javaeye.com/blog/183150</guid>
      </item>
      <item>
        <title>初识 Dojo</title>
        <author>xml</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xml.javaeye.com">xml</a>&nbsp;
          链接：<a href="http://xml.javaeye.com/blog/180384" style="color:red;">http://xml.javaeye.com/blog/180384</a>&nbsp;
          发表时间: 2008年04月08日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          过去项目中使用过prototype、mootools、还有微软的ASP.Net Ajax，早在dojo0.3版本时就注意到它的存在，当时认为ajax的框架使用哪个都一样，prototype1.4版本时代码非常精简好用，写ajax异步刷新代码、web页面操作、浏览器的兼容都不错，现在发现dojo太强大了，几乎包含了prototype/mootools/ext核心功能，core/dijit/dojox三剑客至少从表面上看，可以解决大部分项目中对客户端体验要求和实际需求。但Google搜索了一番，发现对dojo评价褒贬不一，比如zerozone翻译的《<a href="http://www.javaeye.com/topic/99755" target="_blank">Ext vs. Dojo</a>》，并且对dojo widgets也存在<a href="http://ibmsoft.javaeye.com/blog/58278" target="_blank">一些争议</a>，不过是2007年初的事情了，不知道最新的1.1版本表现如何，不管这些了，因为工作技术的要求，看着IBM、SUN、BEA（现在已经被Oracle收购）等重量级产商的支持，准备义无反顾上Dojo！<br /><br />学习嘛，还是从最基础开始，玩一个基本ajax，参照《<a href="http://dojotoolkit.org/book/dojo-book-1-0" target="_blank">The Book of Dojo</a>》。<br /><br />用VS2005新建一个ASP.Net项目（JSP/PHP/Ruby均可，不影响测试Dojo），看到下面这段代码，相信不用多说什么了<br /><pre name="code" class="html">
&lt;html>
	&lt;head>
		&lt;title>Dojo: Hello World!&lt;/title>
		&lt;!--section 1-->
		&lt;style type"text/css">
			@import "dojoroot/dijit/themes/tundra/tundra.css";
			@import "dojoroot/dojo/resources/dojo.css";
		&lt;/style>
		&lt;script type="text/javascript" src="dojoroot/dojo/dojo.js" djConfig="parseOnLoad:true">&lt;/script>
		&lt;!--section 2-->
		&lt;script type="text/javascript">
			// Load Dojo's code relating to the Button widget
			dojo.require("dijit.form.Button");
		&lt;/script>
		&lt;script>
		function helloCallback(data, ioArgs) {
			alert(data);
		}
		function helloError(data, ioArgs) {
			alert('Error when retrieving data from the server!');
		}		
		&lt;/script>
	&lt;/head>

	&lt;body class="tundra">
		&lt;button dojoType="dijit.form.Button" id="helloButton">Hello World!
		&lt;script type="dojo/method" event="onClick">
			dojo.xhrGet({
				url: 'response.txt',
				load: helloCallback,
				error: helloError
					});
		&lt;/script>
		&lt;/button>
	&lt;/body>
&lt;/head>
</pre><br />helloCallback作为回调函数，异步请求的发送通过dojo.xhrGet完成，helloError处理异常，值得注意的是"dojo.require ("dijit.form.Button");"，引入了dojo的button widget，并且可直接用于html ui构建中，有点类似于服务器端代码顶端的引用，符合OO程序员的习惯，运行页面，直接点击button就可以看到效果。<br /><br />上面例子显示的结果是response.txt中的文本，如果需要增加服务器端的处理，可以将url改成"HelloWorldResponseGet.aspx"，通过GET方式传输。<br /><pre name="code" class="c#">
Response.ContentType = "text/plain";
Response.Write("Hello " + Request.QueryString["myname"] + ", welcome to the world of Dojo!\n");
Response.End();
</pre><br />ASP.Net一定要加上"Response.End();"，否则返回的结果会包含html段。原来的页面更改为：<br /><pre name="code" class="html">
&lt;html>
	&lt;head>
		&lt;title>Dojo: Hello World!&lt;/title>
		&lt;!--section 1-->
		&lt;style type"text/css">
			@import "dojoroot/dijit/themes/tundra/tundra.css";
			@import "dojoroot/dojo/resources/dojo.css";
		&lt;/style>
		&lt;script type="text/javascript" src="js/dojo/dojo.js" djConfig="parseOnLoad:true">&lt;/script>
		&lt;!--section 2-->
		&lt;script type="text/javascript">
			// Load Dojo's code relating to the Button widget
			dojo.require("dijit.form.Button");
		&lt;/script>
		&lt;script>
		function helloCallback(data, ioArgs) {
			alert(data);
		}
		function helloError(data, ioArgs) {
			alert('Error when retrieving data from the server!');
		}		
		&lt;/script>
	&lt;/head>

	&lt;body class="tundra">
		&lt;button dojoType="dijit.form.Button" id="helloButton">Hello World!
		&lt;script type="dojo/method" event="onClick">
			dojo.xhrGet({
				url: 'HelloWorldResponseGet.aspx',
				load: helloCallback,
				error: helloError,
				content: {myname: dojo.byId('name').value }
					});
		&lt;/script>
		&lt;/button>
		Please enter your name: &lt;input type="text" id="name">
	&lt;/body>
&lt;/head>
</pre><br />dojo.xhrGet的参数content用来描述传输的参数，页面增加了一个input元素，dojo.byId？即使没有接触过dojo，估计也能猜到是getElementById()。看运行效果：<br /><img src="http://www.cnblogs.com/images/cnblogs_com/flyingis/dojo1.gif" /><br />输入名字，点击"Hello World!"。<br /><img src="http://www.cnblogs.com/images/cnblogs_com/flyingis/dojo2.gif" /><br />总体上感觉有点像微软，把所有工作都做好了，你只需要怎么去用它的组件和库，一个hello world说明不了问题，以后再逐步深入。
          <br/>
          <span style="color:red;">
            <a href="http://xml.javaeye.com/blog/180384#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 08 Apr 2008 11:19:09 +0800</pubDate>
        <link>http://xml.javaeye.com/blog/180384</link>
        <guid>http://xml.javaeye.com/blog/180384</guid>
      </item>
      <item>
        <title>C++学习笔记--数据类型</title>
        <author>xml</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xml.javaeye.com">xml</a>&nbsp;
          链接：<a href="http://xml.javaeye.com/blog/160723" style="color:red;">http://xml.javaeye.com/blog/160723</a>&nbsp;
          发表时间: 2008年01月31日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          每天花点时间，重新拾起C++，记录一些学习笔记，内容根据自己理解逐步更新。<br /><br />1.指针<br /><br />我们最熟悉的，一个字节由8位构成，一个字由32位构成，这是针对32位操作系统，其实字的大小是依赖于机器的，C++基本数据类型，int/short/long/float/double/long double长度都是以字为单位，如short为半个字，int为一个字，double是两个字，具体它们能代表多少位数据，能存储多大范围的值就需要根据操作系统环境而定。<br /><br />文字常量是不可寻址的，变量可以。根据一个例子学习指针和地址的存储空间变化。<br /><br /><pre name="code" class="c++">
#include "iostream"
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
	/* ival为整型变量 */
	/* pi指向ival地址 */
	/* ppi指向pi地址，即指针的指针 */
	/* *ppi为pi指针所指向的值 */
	int ival = 1024;
	int *pi = &ival;
	int **ppi = &pi;

	cout &lt;&lt; "The value of ival\n"
		&lt;&lt; "direct value: " &lt;&lt; ival &lt;&lt; "\n"  //1024
		&lt;&lt; "indirect value: " &lt;&lt; *pi &lt;&lt; "\n" //1024
		&lt;&lt; "double indirect value: " &lt;&lt; **ppi &lt;&lt; "\n" //1024
		&lt;&lt; "value of *ppi: " &lt;&lt; **ppi &lt;&lt; "\n" //1024
		&lt;&lt; endl;
	/* pi地址加2个单位，对整形变量而言，地址值增加2×4字节=8 */
	pi = pi + 2;
	cout &lt;&lt; pi;

	return 0;
}
</pre><br /><br />2.字符串<br /><br />C风格的字符串和标准C++ string类型，前者是作为标准C++一个部分的标准C库，后者是标准C++提供的string类，主要描述C风格的字符串。<br /><br />字符串为空的定义：<br /><pre name="code" class="c++">
char *pc1 = 0;
char *pc2 = "";
</pre><br /><br />C风格字符串的字符指针总是指向一个相关联的字符数组，通过自增可以前进到终止空字符之后，这个地方容易出错。<br /><pre name="code" class="c++">
#include "iostream"
using namespace std;
const char *st = "The expense of spirit\n";
int _tmain(int argc, _TCHAR* argv[])
{
	int len = 0;
	while ( *st++ )
		++len;
        /* st指针前进到字符串终止空字符之后 */
        /* len长度为字符串长度加1 */
	st = st - len;
        /* 输出内容为"he expense of spirit" */
	cout &lt;&lt; len &lt;&lt; ": " &lt;&lt; st;
	return 0;
}
</pre><br /><br />可以单独增加一个指针计算st长度<br /><pre name="code" class="c++">
const char *p = st;
</pre><br /><br />由于字符指针的底层特性，使得用它表示字符串容易出错，因此C++标准库提供了字符串类抽象的一个公共实现，要使用string类型，必须包含头文件<br /><pre name="code" class="c++">
#include "string"
</pre><br /><br />3.const关键字<br /><br />“试图将一个非const对象的指针指向一个常量对象”的动作都将引起编译错误，const对象的地址只能赋值给指向const对象的指针，但是指向const对象的指针可以被赋以一个非const对象的地址。<br /><br />注意这三者区别：<br /><pre name="code" class="c++">
/* 指向double类型的，定义成const对象的指针 */
const double *pc = 0;
const double minWage = 9.60;
pc = &minWage;
/* 指向int类型的const指针 */
int errNumb = 0;
int *const curErr = &errNumb;
/* 指向double类型的，定义成const对象的const指针 */
const double pi = 3.14159;
const double *const pi_ptr = &pi;
</pre><br /><br />这段代码：<br /><pre name="code" class="c++">
using namespace std;
const int ival = 1024;
const int *const &pi_ref = &ival;
int _tmain(int argc, _TCHAR* argv[])
{
	return 0;
}
</pre><br /><br />如果这样定义就会出错：<br /><pre name="code" class="c++">
const int *&pi_ref = &ival;
</pre><br /><br />定义int*为T，上面的代码等价于：<br /><pre name="code" class="c++">
const T &pi_ref = &ival;
</pre><br /><br />编译器会这样来处理这段赋值计算：<br /><pre name="code" class="c++">
T temp;
temp = &ival;        
const T &pi_ref = temp;
</pre><br /><br />这里temp是"int *"类型，编译器不能强制把"const int *"转变为"int *"类型，原程序没有问题，是因为编译器这样处理了，定义"const int *"为T：<br /><pre name="code" class="c++">
T temp;
temp = &ival;        
T const &pi_ref = temp;
</pre><br /><br />这样就解决了之前类型不匹配的赋值问题。<br /><br />4.数组<br /><br />非const的变量不能被用来指定数组的维数，这是初学C语言时会犯的错误之一。C++不能在编译时刻或运行时刻对数组下标进行范围检查，因此即使程序能够通过编译并执行，但仍可能存在错误。<br /><br />ia[ 1, 2 ]在C++中是合法的，但"1,2"是一个逗号表达式，因此它等价于ia[2]。<br /><br />定义数组<br /><pre name="code" class="c++">
int ia[9] = { 0, 1, 1, 2, 3, 5, 8, 13, 21 };
</pre><br /><br />ia、&ia[0]是等价的，ia+1、&ia[1]是等价的，可以通过指针实现数组的遍历：<br /><br /><pre name="code" class="c++">
#include "iostream"
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
	int ia[9] = { 0, 1, 1, 2, 3, 5, 8, 13, 21 };
	int *pbegin = ia;
	int *pend = ia + 9;
	while ( pbegin != pend ) {
		cout &lt;&lt; *pbegin &lt;&lt; ' ';
		++ pbegin;
	}
	return 0;
}
</pre><br /><br />5.vector容器<br /><br />使用vector需要添加头文件vector，vector有两种不同形式：数组习惯和STL习惯。<br /><br />数组习惯<br />vector&lt;int> ivec(10);//与int a[10]类似<br /><br />STL习惯<br />vector&lt;string> text;<br /><br />6.typedef<br /><br />为内置的或用户定义的数据类型引入助记符号，例如：<br /><pre name="code" class="c++">
typedef vector&lt;int> vec_int;
vec_int vec1(10);//与vector&lt;int> vec1(10);一样
</pre><br /><br />typedef可以用来增强“复杂模板声明的定义”的可读性，增强“指向函数的指针”以及“指向类的成员函数的指针”的可读性。<br /><br /><pre name="code" class="c++">
/* cstr类型非"const char *" */
/* const修饰cstr类型，cstr是一个指针 */
/* cstr是一个指向字符的const指针 */
typedef char *cstring;
extern const cstring cstr;
</pre><br /><br />用typedef可以方便地定义大量pair类型的对象：<br /><pre name="code" class="c++">
typedef pair&lt;string, string> Authors;
Authors joyce("james", "joyce");
Authors musil("robert", "musil");
if (joyce.first == "james" && joyce.second == "joyce")
    /* 满足if条件，处理相关任务 */
</pre><br /><br />7.volatile<br /><br />volatile修饰符的用法和const类似，主要目的是提示编译器，该对象的值可能在编译器未检测到的情况下被改变，因此编译器不能武断的对引用这些对象的代码作优化处理。<br /><br />参考书籍：《C++ Primer》第三版
          <br/>
          <span style="color:red;">
            <a href="http://xml.javaeye.com/blog/160723#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 31 Jan 2008 14:42:40 +0800</pubDate>
        <link>http://xml.javaeye.com/blog/160723</link>
        <guid>http://xml.javaeye.com/blog/160723</guid>
      </item>
      <item>
        <title>走过2007--想起的那些事儿</title>
        <author>xml</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://xml.javaeye.com">xml</a>&nbsp;
          链接：<a href="http://xml.javaeye.com/blog/152370" style="color:red;">http://xml.javaeye.com/blog/152370</a>&nbsp;
          发表时间: 2008年01月02日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          转眼工作一年多，如今再回到校园，看着这些激情万丈的学子，似乎还能找回当年的那种感觉，一年多而已，何必这么感慨！前段时间出差去新疆，在祖国的边远小城碰到了中学时代的好友，一点都没有久违重逢的感觉，但是细数了一下，97年初中毕业已经整整十年了，所以如果十年后再次回到大学校园，不知是不是还能体会得到大学的那种简单与疯狂。<br /><br />有时和同事们一起开玩笑说自己是硕士后——“硕士毕业之后”，现在身边的同事大多都是本科、硕士，甚至还有博士，感觉现在自己头上的硕士光环再也找不到中学时代对硕士的那种向往与崇拜，只是给自己增加了一些从学校到社会过渡的机会，现在硕士、博士给老板打工不都是如此么，从大学到硕士研究生，到现在参加工作，总结一条基本原则，“选对方向、踏实干活”，不管社会环境怎样，就业形势如何，这个基本原则绝对奏效！<br /><br />2007能想起哪些事儿？<br /><br /><ul><li>事业单位和公司</li>不论是企事业单位、还是公司，关键在于顶头上司，单位整体环境其次，如果鱼与熊掌能够兼得那样最好，目前接触到不少客户在事业单位里都是属于郁闷一族，加班加点没准，出了问题不在自己权责之类也有可能帮领导扛一把，出了成绩很可能被放在最后几位或干脆排除在外。饭碗是有保障，但天天端着饭碗和影响自己食欲的人吃饭，还得强迫开心舒坦，做好人事关系也是对人格魅力的极大挑战。反过来公司也有这样的情况，所以会有不少人从事业单位出来，也有N多人梦想着能进事业单位，而绝对不是老一辈革命家所认为的“唯铁饭碗论”，其实适合自己就是对的。07年初我从中科院来到了公司，给自己的这个决定90分。<br /><li>出差和旅游</li>出差最容易让父辈的人理解为公干，出差可以让自己的口袋宽裕一点，出差可以借机旅游，在公司里中低层的员工应该少有这种情况，特别是技术人员，做完事情就go back，忙起来晚上照样加班加点，但是走出去，可以扩大自己视野，丰富自己阅历的好机会，这一年，自己在空中呆了不少日子，跑遍了西北、北方、东北90%省份，加上中部、西南的少数城市，就在毕业之前自己还没有坐过飞机，现在觉得短途出差，动车比飞机更便捷、安全。虽说自己出差几乎全是工作，但吃还是没有落下，年轻的时候，这种感觉不错，累也值得，最重要的是“走万里路，读万卷书”！<br /><li>认同感</li>不论做什么事情，认同感是每位工作者都需要的，程序开发人员在工作岗位上拼死拼活，即使工资中等，但如果能够获得上司领导的认可，也是非常有成就感的，不至于天天想着辞职跳槽，如果再加以物质奖励（加工资、奖金）基本就可以将员工稳住，维持并提升团队的凝聚力和战斗力，这一年自己这方面感觉还行，作为技术人员，其实只要有良好的技术积累，加上能够与人保持良好沟通，基本上可以获得大家的认可，技术工程师长时间与机器交流是工作所限，我们要么成为技术顶尖高手，要么成为行业专家！<br /><li>技术积累</li>最后才提到技术，技术是技术工作者的基石，我们都需要以基础作为工作的开端，技术不断积累的同时寻找自己前进的方向，有人成为了技术精英，多数人成为了技术骨干（骨子里干活的人），有时我们可以放宽自己的视野，以技术为背景，我们可以成就很多其他的事业，如项目经理、测试经理、产品资讯专家、解决方案专家、销售、企业管理，甚至与本行技术没有直接联系的行业，这些因人而异，但在自己年轻的时候可以多些思考。今年自己在客户现场收获不少，更重要的是在公司良好的技术团队中拥有不断前进的激情，今后的主要工作，是系统框架和行业解决方案设计，还有自己感兴趣的技术点。<br /></ul><br />整整一年也有遗憾，迷茫是有的，多挣钱的想法是强烈的，人生在世，有得必有失，这是难免，现在感叹最多的可能就是，“<u>物价上涨、工资不涨，工资上涨、赶不上房价涨</u>”！
          <br/>
          <span style="color:red;">
            <a href="http://xml.javaeye.com/blog/152370#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/92' target='_blank'><span style="color:red;font-weight:bold;">快来参加7月17日在成都举行的SOA中国技术论坛</span></a></li><li><a href='/adverts/106' target='_blank'><span style="color:blue;font-weight:bold;">JavaEye问答大赛开始了！ 从6月23日 至 7月6日，奖品丰厚 ！</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 02 Jan 2008 15:58:33 +0800</pubDate>
        <link>http://xml.javaeye.com/blog/152370</link>
        <guid>http://xml.javaeye.com/blog/152370</guid>
      </item>
  </channel>
</rss>