blogjava-凯发k8网页登录

blogjava-凯发k8网页登录http://www.blogjava.net/mlh123caoer/无为则可为,无为则至深! zh-cnsat, 08 apr 2023 20:42:35 gmtsat, 08 apr 2023 20:42:35 gmt60服务器端java vm参数配置http://www.blogjava.net/mlh123caoer/archive/2011/11/06/362893.html草儿草儿sun, 06 nov 2011 05:18:00 gmthttp://www.blogjava.net/mlh123caoer/archive/2011/11/06/362893.htmlhttp://www.blogjava.net/mlh123caoer/comments/362893.htmlhttp://www.blogjava.net/mlh123caoer/archive/2011/11/06/362893.html#feedback0http://www.blogjava.net/mlh123caoer/comments/commentrss/362893.htmlhttp://www.blogjava.net/mlh123caoer/services/trackbacks/362893.html
 内部服务参数配置:
java_opts="-server -xx: useparnewgc -xms1024m -xmx2048m -xx:maxnewsize=128m -xx:newsize=128m -xx:permsize=96m -xx:maxpermsize=128m -xx: useconcmarksweepgc -xx: cmspermgensweepingenabled -verbose:gc -xx: printgcdetails -xx: printgctimestamps -xx:cmsinitiatingoccupancyfraction=1 -xx: cmsincrementalmode -xx:maxtenuringthreshold=0 -xx:survivorratio=20000 -xx: usecmscompactatfullcollection -xx:cmsfullgcsbeforecompaction=0  -xx:cmsincrementaldutycyclemin=10 -xx:cmsincrementaldutycycle=30 -xx:cmsmarkstacksize=8m -xx:cmsmarkstacksizemax=32m"

前端应用参数配置:
 java_opts="-server  -xmx4096m -xms4096m -xmn480m -xss256k -xx:permsize=128m -xx:maxpermsize=256m -xx: useconcmarksweepgc -xx:parallelgcthreads=8 -xx:cmsfullgcsbeforecompaction=0 
-xx: usecmscompactatfullcollection -xx:survivorratio=8 -xx:maxtenuringthreshold=7 -xx:gctimeratio=19 
-xnoclassgc -xx: disableexplicitgc -xx: useparnewgc -xx:-cmsparallelremarkenabled -xx:cmsinitiatingoccupancyfraction=70 -xx:softreflrupolicymspermb=0" 

参数说明:

-xmx1280m:设置jvm最大可用内存为1280m。最大可设为3550m。具体应用可适当调整。

-xms1280m:设置jvm初始内存为1280m。此值可以设置与-xmx相同,以避免每次垃圾回收完成后jvm重新分配内存。

-xmn480m:设置年轻代大小为480m。整个堆大小=年轻代大小 年老代大小 持久代大小。持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,sun官方推荐配置为整个堆的3/8。

-xss256k:设置每个线程的堆栈大小。jdk5.0以后每个线程堆栈大小为1m,以前每个线程堆栈大小为256k。更具应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。

-xx:permsize=64m:指定 jvm 中 perm generation 的最小值。 这个参数需要看你的实际情况。可以通过jmap 命令看看到底需要多少。

-xx:maxpermsize=128m:指定 perm generation 的最大值

-xx: useconcmarksweepgc设置并发收集器

-xx:parallelgcthreads=8配置并行收集器的线程数,即:同时多少个线程一起进行垃圾回收。此值最好配置与处理器数目相等。

-xx:cmsfullgcsbeforecompaction=0由于并发收集器不对内存空间进行压缩、整理,所以运行一段时间以后会产生“碎片”,使得运行效率降低。此值设置运行多少次gc以后对内存空间进行压缩、整理。

-xx: usecmscompactatfullcollection打开对年老代的压缩。可能会影响性能,但是可以消除碎片。

-xx:survivorratio=8每个survivor space 和 eden之间的比例。

-xx:maxtenuringthreshold=7设置垃圾最大年龄。如果设置为0的话,则年轻代对象不经过survivor区,直接进入年老代。对于年老代比较多的应用,可以提高效率。如果将此值设置为一个较大值,则年轻代对象会在survivor区进行多次复制,这样可以增加对象再年轻代的存活时间,增加在年轻代即被回收的概率。

-xx:gctimeratio=19设置垃圾回收时间占程序运行时间的百分比,公式为1/(1 n)。

-xnoclassgc禁用类垃圾回收,性能会有一定提高。

-xx: disableexplicitgc当此参数打开时,在程序中调用system.gc()将会不起作用。默认是off。

-xx: useparnewgc设置年轻代为并行收集。可与cms收集同时使用。

-xx:-cmsparallelremarkenabled在使用 useparnewgc 的情况下 , 尽量减少 mark 的时间。

-xx:cmsinitiatingoccupancyfraction=70指示在 old generation 在使用了 70% 的比例后 , 启动 concurrent collector。

-xx:softreflrupolicymspermb=0每兆堆空闲空间中softreference的存活时间。



草儿 2011-11-06 13:18
]]>
java heap dump触发和分析http://www.blogjava.net/mlh123caoer/archive/2011/10/04/360020.html草儿草儿tue, 04 oct 2011 14:31:00 gmthttp://www.blogjava.net/mlh123caoer/archive/2011/10/04/360020.htmlhttp://www.blogjava.net/mlh123caoer/comments/360020.htmlhttp://www.blogjava.net/mlh123caoer/archive/2011/10/04/360020.html#feedback0http://www.blogjava.net/mlh123caoer/comments/commentrss/360020.htmlhttp://www.blogjava.net/mlh123caoer/services/trackbacks/360020.html

为了分析java应用的内存泄漏,使用thread dump往往解决不了问题。使用jstat【eg:-gcutil pid 1000 5】工具查看运行的java应用的heap size,perm size ,survivor ratio等,当时你无法知道是什么对象把堆填满了。

     什么是 java heap dump

      首先需要搞懂什么是java heap,java heap是分配给实例类和数组对象运行数据区,所有java线程在运行期间共享heap中的数据。java heap dump相当于java应用在运行的时候在某个时间点上打了个快照(snapshot)。

     如果你不懂啥是snapshot,点击

     触发 java heap dump

有以下方法出发heap dump

  1. 使用$java_home/bin/ -dump来触发,eg:jmap -dump:format=b,file=/home/longhao/heamdump.out
  2. 使用$java_home/bin/中的mbean,到mbean>com.sun.management>hotspotdiagnostic>操作>dumpheap中,点击 dumpheap按钮。生成的dump文件在java应用的根目录下面。
  3. 在应用启动时配置相关的参数 -xx: heapdumponoutofmemoryerror,当应用抛出outofmemoryerror时生成dump文件。
  4. 使用。启动虚拟机加入-xrunhprof:head=site,会生成java.hprof.txt文件。该配置会导致jvm运行非常的慢,不适合生产环境。


     分析 java heap dump

     1:使用ibm heapanalyzer

    是一款免费的jvm内存堆的图形分析工具,它可以有效的列举堆的内存使用状况,帮助分析java内存泄漏的原因。

    下载解压后有一个ha413.jar,执行: java -xmx512m -jar ha413.jar /home/longhao/heapdump.out

     执行结果如图所示:


   

     2:jhat

   是用来分析java堆的命令,可以将堆中的对象以html的形式显示出来,包括对象的数量,大小等等,并支持对象查询语言oql,分析相关的应用后,可以通过http://localhost:7000来访问分析结果。

    示例: $java_home/bin/jhat -j-xmx512m /home/longhao/dump.out


     3:eclipse memoryanalyzer

   是一个快速并且功能强大的java heap分析器,能够帮助你查找内存泄漏和减少内存消耗。在file>acquire heap dump>configure>hprof jmap dump provider设置一下分析应用的jdk,点击相关应用列表来生成heap dump并分析。

    

    在socket,nio中的有些api中,申请的内存是直接向os要的,在堆中分析内存是查看不到的,可以通过-xx:maxdirectmemorysize=来设置应用向os直接申请的最大内存数。



草儿 2011-10-04 22:31
]]>
配置linux系统环境变量的三种方法http://www.blogjava.net/mlh123caoer/archive/2011/08/26/357357.html草儿草儿fri, 26 aug 2011 07:11:00 gmthttp://www.blogjava.net/mlh123caoer/archive/2011/08/26/357357.htmlhttp://www.blogjava.net/mlh123caoer/comments/357357.htmlhttp://www.blogjava.net/mlh123caoer/archive/2011/08/26/357357.html#feedback0http://www.blogjava.net/mlh123caoer/comments/commentrss/357357.htmlhttp://www.blogjava.net/mlh123caoer/services/trackbacks/357357.html

在linux下进行java开发需要配置环境变量,下面介绍了三种配置环境变量的方法。


1.修改/etc/profile文件

如果你的计算机仅仅作为开发使用时推荐使用这种方法,因为所有用户的shell都有权使用这些环境变量,可能会给系统带来安全性问题。

 

(1)用文本编辑器打开/etc/profile

 

(2)在profile文件末尾加入:

java_home=/usr/share/jdk1.5.0_05

path=$java_home/bin:$path

classpath=.:$java_home/lib/dt.jar:$java_home/lib/tools.jar

export java_home

export path

export classpath

 

(3)重新登录

 

注解:

a. 你要将 /usr/share/jdk1.5.0_05jdk 改为你的jdk安装目录

 

b. linux下用冒号“:”来分隔路径

 

c. $path / $classpath / $java_home 是用来引用原来的环境变量的值,在设置环境变量时特别要注意不能把原来的值给覆盖掉了,这是一种常见的错误。

 

d. classpath中当前目录“.”不能丢,把当前目录丢掉也是常见的错误。

 

e. export是把这三个变量导出为全局变量。

 

f. 大小写必须严格区分。

 

2. 修改.bashrc文件  

这种方法更为安全,它可以把使用这些环境变量的权限控制到用户级别,如果你需要给某个用户权限使用这些环境变量,你只需要修改其个人用户主目录下的.bashrc文件就可以了。

 

(1)用文本编辑器打开用户目录下的.bashrc文件

 

(2)在.bashrc文件末尾加入:  

set java_home=/usr/share/jdk1.5.0_05

export java_home

set path=$java_home/bin:$path

export path

set classpath=.:$java_home/lib/dt.jar:$java_home/lib/tools.jar

export classpath

 

(3)重新登录

 

3. 直接在shell下设置变量

不赞成使用这种方法,因为换个shell,你的设置就无效了,因此这种方法仅仅是临时使用,以后要使用的时候又要重新设置,比较麻烦。

 

只需在shell终端执行下列命令:

export java_home=/usr/share/jdk1.5.0_05

export path=$java_home/bin:$path

export classpath=.:$java_home/lib/dt.jar:$java_home/lib/tools.jar



草儿 2011-08-26 15:11
]]>
db dml,dcl,ddl具体包含哪些操作http://www.blogjava.net/mlh123caoer/archive/2011/08/25/357307.html草儿草儿thu, 25 aug 2011 13:50:00 gmthttp://www.blogjava.net/mlh123caoer/archive/2011/08/25/357307.htmlhttp://www.blogjava.net/mlh123caoer/comments/357307.htmlhttp://www.blogjava.net/mlh123caoer/archive/2011/08/25/357307.html#feedback0http://www.blogjava.net/mlh123caoer/comments/commentrss/357307.htmlhttp://www.blogjava.net/mlh123caoer/services/trackbacks/357307.htmlddl 
data definition language (ddl) statements are used to define the database structure or schema. some examples: 

create - to create objects in the database 
alter - alters the structure of the database 
drop - delete objects from the database 
truncate - remove all records from a table, including all spaces allocated for the records are removed 
comment - add comments to the data dictionary 
rename - rename an object 

dml 
data manipulation language (dml) statements are used for managing data within schema objects. some examples: 

select - retrieve data from the a database 
insert - insert data into a table 
update - updates existing data within a table 
delete - deletes all records from a table, the space for the records remain 
merge - upsert operation (insert or update) 
call - call a pl/sql or java subprogram 
explain plan - explain access path to data 
lock table - control concurrency 

dcl 
data control language (dcl) statements. some examples: 

grant - gives user's access privileges to database 
revoke - withdraw access privileges given with the grant command 

tcl 
transaction control (tcl) statements are used to manage the changes made by dml statements. it allows statements to be grouped together into logical transactions. 

commit - save work done 
savepoint - identify a point in a transaction to which you can later roll back 
rollback - restore database to original since the last commit 
set transaction - change transaction options like isolation level and what rollback segment to use 

草儿 2011-08-25 21:50
]]>
calenderhttp://www.blogjava.net/mlh123caoer/archive/2009/11/06/301491.html草儿草儿fri, 06 nov 2009 12:49:00 gmthttp://www.blogjava.net/mlh123caoer/archive/2009/11/06/301491.htmlhttp://www.blogjava.net/mlh123caoer/comments/301491.htmlhttp://www.blogjava.net/mlh123caoer/archive/2009/11/06/301491.html#feedback2http://www.blogjava.net/mlh123caoer/comments/commentrss/301491.htmlhttp://www.blogjava.net/mlh123caoer/services/trackbacks/301491.html

 import java.util.calendar;

import java.util.gregoriancalendar;

public class caltest {

public static void main(string[] argv) {

caltest caltest = new caltest();

caltest.cal(2009, 11);

}

public void cal(final int year, final int month) {

calendar calendar = new gregoriancalendar();

calendar.set(year, month-1, 1);

int week = calendar.get(gregoriancalendar.day_of_week) - 1;

int days = calendar.getactualmaximum(gregoriancalendar.day_of_month);

system.out.println();

system.out.println("日\t一\t二\t三\t四\t五\t六");

for(int i = 0; i < week; i ) {

system.out.println("\t");

}

for(int i = 1; i <= days; i ) {

system.out.print(i "\t");

if((week i)%7 == 0) {

system.out.println();

}

}

}


}


运行效果:




草儿 2009-11-06 20:49
]]>
java开发者需坚守的十大基本准则http://www.blogjava.net/mlh123caoer/archive/2009/09/29/296938.html草儿草儿tue, 29 sep 2009 11:52:00 gmthttp://www.blogjava.net/mlh123caoer/archive/2009/09/29/296938.htmlhttp://www.blogjava.net/mlh123caoer/comments/296938.htmlhttp://www.blogjava.net/mlh123caoer/archive/2009/09/29/296938.html#feedback1http://www.blogjava.net/mlh123caoer/comments/commentrss/296938.htmlhttp://www.blogjava.net/mlh123caoer/services/trackbacks/296938.html

有许多标准和实践准则可适用于java开发者,但此处要说的,是每个java开发者需坚守的基本原则。

   
一、为代码加注释。虽然每个人都知道这点,但有时却不自觉忘了履行,今天你“忘了”加注释了吗?虽然注释对程序的功能没什么“贡献”,但过一段时间,比如说两星期之后或者更长,回过头来看看自己的代码,说不定已经记不住它是干什么的了。如果这些代码是你个人的,那还算是走运了,不幸的是,当然了,大多数时候都是别人的不幸,很多时候大家都是在为公司写代码,写代码的人也许早已经离开了公司,但别忘了一句古话,有来有往嘛,为他人,也为我们自己,请为你的代码加上注释。

   二、不要让事情复杂化。程序员有时候总是对简单问题想出复杂的凯发天生赢家一触即发官网的解决方案,比如说,在只有五个用户的程序中引入ejb、对程序实现了并不需要的框架(framework),之类的还有属性文件、面向对象凯发天生赢家一触即发官网的解决方案、多线程等等。为什么要这样做呢?也许我们并不知道是否这样会更好,但这样做也许可以学到一些新东西,或者让自己更感兴趣一些。如果是不知道为什么这样做,建议多请教经验丰富的程序员,如果是为了个人的目的,麻烦让自己更专业一点。

   
三、始终牢记——“少即是好(less is more)并不总是对的”。代码效率虽然很重要,但在许多凯发天生赢家一触即发官网的解决方案中,编写更少的代码并不能改善这些代码的效率,请看下面这个简单的例子:

if(newstatuscode.equals("sd") && (selloffdate == null || todaydate.compareto(selloffdate)<0 || (lastuseddate != null && todaydate.compareto(lastuseddate)>0)) || (newstatuscode.equals("obs") && (obsdate == null || todaydate.compareto(obsdate)<0))){ newstatuscode = "nyp"; }

能看明白if条件语句是干什么的吗?能想出来是谁写的这段代码吗?如果把它分成两段独立的if语句,是不是更容易理解呢,下面是修改后的代码:

if(newstatuscode.equals("sd") && (selloffdate == null || todaydate.compareto(selloffdate)<0 || (lastuseddate != null && todaydate.compareto(lastuseddate)>0))){ newstatuscode = "nyp"; }else if(newstatuscode.equals("obs") && (obsdate == null || todaydate.compareto(obsdate)<0)) { newstatuscode = "nyp"; }

是不是读起来容易多了呢,在此只是多加了一个if和两个花括号,但代码的可读性与可理解性就一下子提高了一大截。

   四、请不要硬编码。开发者经常有意“忘记”或忽略掉这点,因为有些时候开发日程逼得实在太紧。其实,多写一行定义静态变量的代码能花多少时间呢?

public class a { public static final string s_constant_abc = "abc"; public boolean methoda(string sparam1){ if (a.s_constant_abc.equalsignorecase(sparam1)){ return true; } return false; } }

现在,每次需要将“abc”与其他变量进行比较时,不必记住实际代码,直接引用a.s_constant_abc就行了,而且在今后需要进行修改时,也可在一处修改,不会翻遍整个源代码逐个修改了。

 五、不要“创造”自己的框架(framework)。确切来说,有数以千计的各种框架存在,而且大多数是开源的,这些框架都是优秀的凯发天生赢家一触即发官网的解决方案,可用于日常程序开发中,我们只需使用这些框架的最新版本就行了,至少表面上要跟上形势吧。被大家广为接受的最为明显的一个例子就是struts了,这个开源web框架非常适合用在基于web的应用程序中。是不是想开发出自己的struts呢,还是省点力气吧,回头看看第二条——不要让事情复杂化。另外,如果正在开发的程序只有3个窗口,就不要使用struts了,对这种程序来说,不需要那么多的“控制”。

   六、不要使用println及字符串连接。通常为了调试方便,开发者喜欢在可能的所有地方都加上system.out.println,也许还会提醒自己回过头来再来删除,但有些时候,经常会忘了删除或者不愿意删除它们。既然使用system.out.println是为了测试,那么测试完之后,为什么还要留着它们呢,因为在删除时,很可能会删除掉真正有用的代码,所以不能低估system.out.println危害啊,请看下面的代码:

public class badcode { public static void calculationwithprint(){ double somevalue = 0d; for (int i = 0; i < 10000; i) { system.out.println(somevalue = somevalue i); } } public static void calculationwithoutprint(){ double somevalue = 0d; for (int i = 0; i < 10000; i) { somevalue = somevalue i; } } public static void main(string [] n) { badcode.calculationwithprint(); badcode.calculationwithoutprint(); } }

从测试中可以发现,方法calculationwithoutprint()执行用了0.001204秒,作为对比,方法calculationwithprint()执行可是用了10.52秒。

要避免浪费cpu时间,最好的方法是引入像如下的包装方法:

public class badcode { public static final int debug_mode = 1; public static final int production_mode = 2; public static void calculationwithprint(int logmode){ double somevalue = 0d; for (int i = 0; i < 10000; i) { somevalue = somevalue i; myprintmethod(logmode, somevalue); } } public static void myprintmethod(int logmode, double value) { if (logmode > badcode.debug_mode) { return; } system.out.println(value); } public static void main(string [] n) { badcode.calculationwithprint(badcode.production_mode); } }

另外,字符串连接也是浪费cpu时间的一个大头,请看下面的示例代码:

public static void concatenatestrings(string startingstring) { for (int i = 0; i < 20; i) { startingstring = startingstring startingstring; } } public static void concatenatestringsusingstringbuffer(string startingstring) { stringbuffer sb = new stringbuffer(); sb.append(startingstring); for (int i = 0; i < 20; i) { sb.append(sb.tostring()); } }

在测试中可发现,使用stringbuffer的方法只用了0.01秒执行完毕,而使用连接的方法则用了0.08秒,选择显而易见了。

七、多关注gui(用户界面)。再三强调,gui对商业客户来说,与程序的功能及效率同等重要,gui是一个成功程序的最基本部分,而很多it经理往往都没注意到gui的重要性。在现实生活中,许多公司可能为了节省开支,没有雇用那些有着设计“用户友好”界面丰富经验的网页设计者,此时java开发者只能依赖他们自身的html基本功及在此领域有限的知识,结果,很多开发出来的程序都是“计算机友好”甚于“用户友好”。很少有开发者同时精通软件开发及gui设计,如果你在公司“不幸”被分配负责程序界面,就应该遵守下面三条原则:

1、 不要再发明一次轮子,即不做无用功。现有的程序可能会有类似的界面需求。
2、 先创建一个原型。这是非常重要一步,用户一般想看到他们将使用的东西,而且可以先利用这个原型征求用户的意见,再慢慢修改成用户想要的样子。
3、 学会换位思考。换句话来说,就是从用户的角度来审查程序的需求。举例来讲,一个汇总的窗口可以跨页或者不跨页,作为一个软件开发者,可能会倾向于不跨页,因为这样简单一些。但是,从用户的角度来看,可能不希望看到上百行数据都挤在同一页上。

   八、文档需求不放松。每个商业需求都必须记录在案,这可能听上去像童话,似乎在现实生活中很难实现。而我们要做的是,不管开发时间多紧迫,不管最终期限多临近,对每个商业需求都必须记录在案。

   九、单元测试、单元测试、单元测试。关于什么是单元测试的最好方法,在此不便细说,只是强调,单元测试一定要完成,这也是编程中最基本的原则。当然了,如果有人帮你做单元测试自然是最好,如果没有,就自己来做吧,当创建一个单元测试计划时,请遵守以下三条最基本的原则:

1、 先于编写类代码之前编写单元测试。
2、 记录单元测试中的代码注释。
3、 测试所有执行关键功能的公有方法,这里不是指set和get方法,除非它们是以自己独特方式执行set和get方法。

   十、质量,而不是数量。有些时候因为产品问题、期限紧迫、或一些预料之外的事情,导致常常不能按时下班,但一般而言,公司不会因为雇员经常加班而对之表扬和奖励,公司只看重高质量的工作。如果遵守了前九条原则,你会发现自己写出的代码bug少且可维护性高,无形中质量提高了一大步。



草儿 2009-09-29 19:52
]]>
java中class.getresource用法http://www.blogjava.net/mlh123caoer/archive/2009/09/29/296937.html草儿草儿tue, 29 sep 2009 11:43:00 gmthttp://www.blogjava.net/mlh123caoer/archive/2009/09/29/296937.htmlhttp://www.blogjava.net/mlh123caoer/comments/296937.htmlhttp://www.blogjava.net/mlh123caoer/archive/2009/09/29/296937.html#feedback0http://www.blogjava.net/mlh123caoer/comments/commentrss/296937.htmlhttp://www.blogjava.net/mlh123caoer/services/trackbacks/296937.html阅读全文

草儿 2009-09-29 19:43
]]>
工作中的十不要(适用于工作不久的同事)(转)http://www.blogjava.net/mlh123caoer/archive/2008/10/11/233703.html草儿草儿sat, 11 oct 2008 01:39:00 gmthttp://www.blogjava.net/mlh123caoer/archive/2008/10/11/233703.htmlhttp://www.blogjava.net/mlh123caoer/comments/233703.htmlhttp://www.blogjava.net/mlh123caoer/archive/2008/10/11/233703.html#feedback7http://www.blogjava.net/mlh123caoer/comments/commentrss/233703.htmlhttp://www.blogjava.net/mlh123caoer/services/trackbacks/233703.html第一:不要认为停留在心灵的舒适区域内是可以原谅的。
  
  每个人都有一个舒适区域,在这个区域内是很自我的,不愿意被打扰,不愿意被push,不愿意和陌生的面孔交谈,不愿意被人指责,不愿意按照规定的时限做事,不愿意主动的去关心别人,不愿意去思考别人还有什么没有想到。这在学生时代是很容易被理解的,有时候这样的同学还跟“冷酷”“个性”这些字眼沾边,算作是褒义。然而相反,在工作之后,你要极力改变这一现状。否则,你会很快变成鸡尾酒会上唯一没有人理睬的对象,或是很快因为压力而内分泌失调。但是,如果你能很快打破之前学生期所处的舒适区域,比别人更快的处理好业务、人际、**之间的关系,那就能很快的脱颖而出。
  
  在会议上,一个停留在心灵舒适区域的人会消极的听取领导的话语,消极的待命,很死的完成上级交给的事情,但从来不关心此事以外的任何事情,更不会想到多做一步,让接下来的别人的工作更加容易上手。而敢于打破这个舒适区域的人,敢于在适当的时候提出自己的看法和不理解,并在得到上级认可和指点之后把手头的工作尽快的完成,并随时接受别人的批评和调整。(注意:永远不要等待别人把你的想法说出来,这是典型的前者)
  
  在工作上,当前者遇到一名新的同事,他会装作没有看见,继续自己的工作。殊不知新来的同事不久就变成了自己的上司。而后者则大方客气的自我介绍,并了解对方和自己的关系。
  
  在聚会上,前者总是等待别人发言,并喜欢私下里评论对方的言语;如果这个桌子上没有人发言,那直到用餐结束,也没有人认识你。而后者是勇敢的和一同吃饭的开始介绍和闲谈,这看起来很困难,有时候会有失面子,但往往你会发现,对方是多么希望能和你说几句话。
  
  以上只是很小的几个例子,但是要说明的是,大学生在走出校园的同时就要在工作上把校园中的“随意性”从身边赶走,尽早的冲出自己的舒适区域,开始做好和这个社会交流的准备。 
  

  第二:不要把“好像”;“有人会……”;“大概”;“晚些时候”;“或者”;“说不定”之类放在嘴边。尤其是和上级谈论工作的时候。
  
  我十分痛恨听到的一句话是:“我晚些时候会把这个文件发给所有的人”;因为这往往预示着我必须时刻提醒他不要忘记。同样,以下这些言辞也会让人觉得厌恶至极:
  “到时候有人会把那些东西都准备好”
  “大概是明天”
  “明天或者后天客户会过来拜访”
  “好像他说……”
  
  一般是人都会这样说话的,因为这样第一给自己留下了广阔的余地,第二也不会给别人造成很大的压迫感,好像什么事情一定要弄个水落石出似的。说实话大学里面再用功的人都有一半是混的。一个人要么是在课堂上是混的,要么下课之后是混的。两个都没有带有混的色彩的人,要么是超级牛人,要么是神经病。所以,就因为人人都在混的,所以校园是一个浪漫的地方,校园也容易让人单纯。所以学生社团的工作往往是效率很低的,我现在回想起学校里做的工作,当时还觉得挺卖力的,但工作了之后才开始感觉到什么是效率。当你进入了用金钱计算时间的地方之后,你要尽可能的避免在学校里养成的这种习惯。如果上级问你什么时候能实施你给他的承诺,而你回答“今晚或者明天早上”这样的答案对于他来说完全等同于你没有回答,并且还给他留下了一个坏印象。(当然,这样的回答往往在学校社团,学生会工作中是常见的)
  
  有一个寓言故事,一只小老鼠刚刚出世不久,老鼠妈妈问小老鼠:你现在能看见了吗? 小老鼠说:能。 老鼠妈妈说:那你能看到那块红薯吗? 小老鼠说:是的。老鼠妈妈说:那是一块石头,这说明你不但还看不见东西,你连嗅觉都还没有。
  
  似是而非的应答往往一样会暴露出你更多的弱点。可能是以下中的一个或几个:
  1.你之前没有想到这个工作,或者一直在拖延。
  2.你没有责任心,认为这些并不重要。
  3.你应付上级。
  4.你不敢说真话。
  5.你喜欢逞能,答应一些做不到的事情。
  6.你不能独立工作。
  
  当你的上级在以上选项中怀疑的时候,潜意识中你已经同时具备了以上所有的弱点了。
  
  相反的看来,这样的回答,总是让上司恼火。
  第一,他的问题没有得到回答,只是起到了提醒你的作用。
  第二,他依然需要记住提醒你,因为他不知道你是否真正已经落实了工作。
  第三,他不知道有多少你已经做了的事情中,都是这样没有落实的。(这点非常致命)
  第四,往往因为没有得到满意的答案,上司自己的计划不得不被耽搁或推迟或不能给出明朗的结束时间。
  
  所以---------
  甲问:你什么时候能把要这个漏洞修好?
  乙说:我已经通知他们了,他们大概明天就会来修的。
  一天后
  甲问:维修公司什么时候回来,你找的是哪家维修公司?
  乙说:好像他们说安排不出人来,如果可以的话,今天晚上或者明天下午就能过来。
  一天后
  甲问:漏洞怎么还没有修好?
  乙说:我晚点再问问他们。
  甲说:今天下午之前不解决,明天不用来上班了。 
  
  
  第三:不要拖延工作
  
  很多人喜欢在学习和玩耍之间先选择后者,然后在最后时间一次性赶工把考试要复习的东西突击完成。但是在工作中请不要养成这样的习惯,因为工作是永远做不完的,容不得你“突击”。又或者,当你在徘徊和彷徨如何实施的时候,你的领导已经看不下去,自己去做了。----这是一个危险的信号。
  
  往往我们总是想把事情从头到尾全部想好了,才开始走第一步-----就摔倒了。
  
  举个例子: 我小学的时候第一次给我一个喜欢的女孩子打电话的时候,想象了各种情况-------1,她接电话的时候在做作业。2,她在做作业,她妈妈接的电话。3.她也很无聊,很想找人说话。4.她正在被父母训斥。 5.她正在想另外一个男孩。6.她父亲接电话。 7.她家正好来了什么亲戚,亲戚接了电话。 8.她接了电话,但父母就在身边,说话不方便。。。。。等等等等。我整整想了一个下午,想好了各种情况的心理准备和应对的策略。然后勇敢的拿起电话机,按下了那几个按钮。结果-------她不在家。
  
  所以,当你徘徊不前而手足无措的时候,你要意识到你正在拖延工作。徘徊是因为害怕这个事情可能发生的后果需要自己承担或应付。工作的时候需要一种起码的自信,相信自己有能力,不管下一步是什么状况,我都能把它引导到我需要的那条线上去的。另外,告诉自己,不要想太多时间,如果不知道,就赶快求助,或想办法,苦恼和忧虑会给你更多的压力也会把剩下的时间蚕食殆尽。
  
  
  另外,警告一下:永远不要想,我知道了,先把上级派的事情放一下,等这集《越狱》看完再说。----90%的情况下,你会忘记,或者来不及,因为这件事需要比你原先想象要更多的时间。说做就做,一直是很好的习惯。 
  
  
  第四:不要认为理论上可以实施就大功告成了!
  
  这点太重要了,往往当真正实施的人开始做了才会发现计划完全等于鬼话。如果不亲自实践,做计划的人会早晚被实施的鄙视。永远需要提升自己的办实事的能力,而不是空谈。
  
  首先,如果你是做办公室工作的,或者做策划和计划的。请千万不要把你自己都认为不太可能或者很难做到的事情,让别人试试看。比如,用一个下午的时间在人流量很少的地方举办露天歌唱会。这会让执行的人觉得你在玩他,拿他做实验。没错,理论上,在任何地方都能举办歌唱会,但是,在不同的地方,执行的人的心情是不一样的。
  
  其次,和执行的人讨论你的安排。比如,新来的你的下属,你可以安排她坐在任何地方,但是如果那是一个很难和大家接触的角落,这可能比你什么都不安排更差。的确,理论上一个人要坐下来,需要的只是空间。但事实上远远不止那些。
  
  再次,不要奢望一切会随着你的计划进行。理论上这个会议会持续两个小时,但是,这是“不考虑在开场后的30分钟全场都在调试话筒”,或者“场下没有提出如此尖锐的问题”的前提下的状态。 大学生已经习惯了把事情做到 "理论上看上去很美"的程度了。 论文,ppt讲演,考试,辩论赛…… 这些校园智商大比拼,都是教我们如何完美的做好“纸上谈兵”的功夫。 你一定要相信自己能“搞定”事情的能力比想象的弱。
  
  如果你是在学校的学生,测试一下自己,能否能搞定以下这些状况:
  1.学校要制作一套校服,由你去寻找供应商,砍价,至少有三家公司的报价。
  2.学校保安抓住一个学生偷窃,怎么处理?
  3.学校的一个很重要路段的路灯坏了,你能否让它三天内继续亮起来。
  4.食堂需要请一位专门烧清真菜的厨师,一周内到岗位。
  
  当你开始思考以上这样的问题的时候,你会发现,他的思路和“看过去两年这个公司的业绩趋向,做出一个下个季度的市场策划方案”要相差极大。你会发现后者只要你做到“看上去很完美”,没有人知道按照你这样做结果会怎样。而上述的工作你只要一想,就会体会到不少的压力。因为你不处理好,结果就是明显的失败更大的问题就会相继发生。
  对了,这种感觉就是“工作”给你的感觉!这就是“工作”和“纸上谈兵”的差别! 
  
  
  第五:不要让别人等你
  
  在任何情况下都不要让别人放下手头的工作来等你。在大学中可能只是同寝室的人的几句半开玩笑的抱怨,在工作上很可能导致你的潜在凯发k8网页登录的合作伙伴的丢失。
  
  你在做一个工作的同时要知道别人的进度,而永远不要落后。
  这不像是在考试,你比别人做的慢,别人可以先交卷,你到时间了做不完你自己承受扣分。在工作中的情况是这样的:这是一场没有人能做完的考试,所有的人,都分配做一张试卷的不同部分,有的人分到的是阅读理解,有的人做的是完形填空,有的人做的是语法…… 然后大家做完了相互抄,这样,所有人都做完了。 如果大家都把各自的部分做完了,而你却还在没有做完,那么做得快的别人会开始做你的那部分题目,然后也是相互抄。慢慢地,大家会发现你的工作量完全可以由另外人来代替,整个团队中可以不需要你,这个时候,没有人从你这里得到试卷的答案,也没有人会给你他们的答案--------很不幸,你已经没有利用价值了。
  
  请一定记住这个例子。 
  第六:不要认为细节不重要
  
  在大学里,往往做事粗枝大叶,看看差不多就行了。相反,在企业里管理的精髓就在于将简单的事情做到细节。一个慌忙寻找保险箱钥匙的动作就很有可能丧失你晋升财务主管的机会。
  
  公司的管理,其实需要的并不是把很难的事情做到90%----比如,优化管理层的核心工作流程、改变公司在当地政府面前的形象,提高产品质量,改善工作环境…… 而管理要做的是把每个简单的事情做到100%-----比如,把公司的每个人的档案都按照一定的规律整齐的存放起来、在门卫设立一个外来人员的签到台、把会议室多余的椅子拿走、和电视台讲好下个礼拜三来公司做采访、把试用装送到客户手里、在生产的咖啡上加一个口子、给下一期的封面人物拍照……等等如此。 如果你能把所有细节的问题都如实做到,那你才有开口升职的本钱。
  
  很多人在毕业的时候不知道自己将来要做什么,于是就和自己说:我以后做管理吧!做管理?问一下自己,如果,公司资产被偷窃了,所有员工士气低下,办公室杂乱无章,公司电梯又坏了,打印机没墨了,采购计划超支了,产品滞销了,客户迟到了……你愿意解决这样的问题,并从小事开始做起吗?想好了这些再考虑是否把管理看得太空洞了。 
  

  第七:不要表现得消极,仅仅因为你所做的事情不是你的兴趣所在。
  
  很显然,在学生时代,当做到自己喜欢的时候,我们会pay200%的精力去创造,但如果是枯燥的事务,我们便懒得理睬,最好能有办法应付过去。但在工作上80%你所做的事情都是繁琐而看似机械的,如果仅仅为此而表现的闷闷不乐,那么你会郁闷更久。要知道你的上司已经为这个项目够烦恼了,你还想让他看到你的表情吗?
  
  学会喜欢自己的工作,并把注意力放在日常工作能学到些什么上去。如果现在你努力的抱怨工作,那么接下来你就是努力的寻找工作。尽量少用“有趣”,“好奇”之类的词语来描述自己想要的工作,而是“充实”,“有成就感”,“乐意”
  之类。
  想想以下职位,你会发现生活中很多工作不是在等你有很好的状态下让你做的很有趣的事情:
  1.高速公路收费口的收费员:一天都是面对一个小窗口,把一张卡片送出去,这样要持续好几年。
  2.学校食堂厨师:永远在烧大排和鸡腿。烧一年。
  3.作家:交稿期要到了,我还在孕育灵感,两个星期没吃早饭了。
  4.外科医生:刚刚睡着,马上叫我做一个3小时的手术。这样至少一周一次。
  5.门市部销售:产品不好卖,8点上班来就坐在店门口,一个人,坐到晚上6点,今天没有一个人来,和昨天一样。
  6.公交司机:我开车不用你指挥。这条线路我开了三年了。
  7.宠物商店店员:生意不好,还要一早就过来听着20条狗的叫声一整天,听一年。
  8.公司职员:晚上两点下班,第二天还要8点上班。关键是路上还要一小时。这样已经一个月了。
  
  再想想自己是不是只是接触了这个工作一个月或者才碰到没几个困难,这个时候抱怨的声音最大。
  千万不要想着去选择一个有趣的职业,因为没有那样的工作存在。没有哪一“种”行业是开心的,因为如果有,那所有人都去干那个了。最多试着问问自己本身的兴趣吧。self exploration。 
  
  
  第八:绝对不要把改善工作能力仅寄托在公司培训上
  
  人绝对不可能经过一次培训就脱胎换骨。相反,集体培训上学到的东西往往是最用不上的信息。 就像食堂烧大锅菜一样,总没有你最想吃的菜,因为这样做容易,并且不容易得罪人。
  
  很多学生很看重所选的公司有没有培训,这说明,你不但不知道这个公司做什么,你甚至不知道怎样学习这些技能。
  我的感悟是如果你不知道怎么学你想要的知识,也不知道你想要的知识是什么,你只会做出两种行为:1。等待别人来教你,并且等待别人发现你不知道的地方。2.寻找现成的答案并且拷贝。期待公司培训的人,就很大概率上是第一种人(不排除极少真正优秀的公司培训)
  
  许多的同学有这样的习惯思维:
  因为,这个公司的培训能结束达到多少多少的程度
  又因为,这个程度正好是我想达到的
  所以我尽力进这家公司
  因为我进了这家公司
  所以它自然会使我达到了这个期望的程度。
  
  我们把参加培训和达到效果很幼稚的画上了等号。其实往往集体培训上所得到的信息是最没有实际操作价值的。永远不要期望单靠听课,靠老师把同样的东西给所有的人,你会得到比别人更多。把更多的心思放在观察和思考自己的需要上,找到问题的所在再通过观察和实践得到的答案才是真正的知识。
  
  所以,刚刚开始工作,什么都不会,不要认为那样是正常的,因为公司还没有培训过呢!等我接受培训了之后,我就全都会了。如果你一无所知还等待别人会可怜你的无知而施舍你知识,那你会为你的无知而付出更多的智商。 
  
  
  第九:不要推卸责任
  
  推卸责任是害怕的条件反射。不要认为别人看不出这点。
  
  我记得我小学里的一件事情。我一次作业没有带来,老师要训斥我,说:你怎么老是作业不带?
  我当时说:不是。。。。 当我正要支支吾吾时候,老师说:什么不是?你带来了没有?
  我说:没有
  老师说:那不就是没有带!什么不是!就是!
  
  之后我就发现,我只是害怕承担责任而条件反射似的就说了“不是”,仔细观察一下周围,你会发现,身边有无数的人在用“不是”作为被责问之后的第一反应。
  其实现在很多人面对工作也是这样,当上级责问的时候,很条件反射的就做出了推卸动作,然而这样的动作,接下来往往是无力的辩解,以及一些很粗糙的借口。这样会让上司感到你这个人很难沟通,并且很不真实。
  
  
  另外一种情况,就是无论什么情况下,我指责一个人,他永远是强调客观。其实这点才是学生最典型的特征。这说明他太容易受到其他事物的影响,并受它们决定。如果你和上司之间会出现以下类型的对话,想想是不是需要改一下你的处事方法。
  
  甲:为什么到现在还没有给副总看你的报告!
  乙:刚才c在打印,我在等他结束,现在他大概好了吧,我去看看
  乙:还有点东西要修改
  乙:b也要把东西给副总,我因为等他
  乙:a他说我报告不用给副总看(a是乙的同级同事)
  乙:不知道副总在不在哦,他的门关着。
  乙:d他叫我帮他打印文件!怪他!(d是乙的同级同事)
  乙:我的杯子突然找不到了,在找杯子。
  
  
  不愿意负责任的人的不利在于他会让上司怀疑他的忠诚程度,因为上司给他的命令往往会因为一个小事情而被搁置或者打折执行,转而被他人的意识所改变。 
  
  
  第十:不要对自己说“我是大学生”
  
  这点包涵了很多信息。
  1.不要认为自己有多清高
  2.不要仍然以学生的标准要求自己
  3.不要感觉低人一等
  4.不要等待别人的关怀
  5.不要把这个作为犯错误自我安慰的借口
  6.不要忘记搞清楚,公司究竟给自己的待遇是多少,老练些,这不是在做志愿者。
  
  品格是处理好人际关系的基础,也是确保人际关系质量的关键。除此之外,人际交往的技巧也是尤为重要的。有些人做好事会让人感激一辈子,而有些人帮了别人却可能费力不讨好,不但得不到感激和回报,还让人心存嫉恨。将同样的产品以相同的价格推销给同一个客户,有些业务员可能被粗暴地赶出门,有些业务员却可能签到大单,甚至被客户奉为上宾。 
  人际交往的技巧是一个非常庞杂的话题,囿于篇幅,在这里只能结合我的切身体会做一些简单的列举,挂一漏万在所难免了。 
  1. 多给别人鼓励和表扬,尽量避免批评、指责和抱怨,不要逼别人认错。 
  2. 要学会倾听。不要说得太多,想办法让别人多说。 
  3. 如果你要加入别人的交谈,先要弄清楚别人究竟在说什么。 
  4. 交谈之前尽量保持中立、客观。表明自己的倾向之前先要弄清楚对方真实的倾向。 
  5. 注意对方的社交习惯并适当加以模仿。 
  6. 不要轻易打断、纠正、补充别人的谈话。 
  7. 别人有困难时,主动帮助,多多鼓励。 
  8. 不要因为对方是亲朋好友而不注意礼节。 
  9. 尽可能谈论别人想要的,教他怎样去得到他想要的。 
  10. 始终以微笑待人。 
  11. 做一个有幽默感的人。但是在讲笑话的时候千万不要只顾着自己笑。 
  12. 做一个脱离低级趣味的人。 
  13. 跟别人说话的时候尽量看着对方的眼睛,不管你是在说还是在听。 
  14. 转移话题要尽量不着痕迹。 
  15. 要学会聆听对方的弦外之音。也要学会通过弦外之音来委婉地表达自己的意思。 
  16. 拜访别人一定要事先通知。 
  17. 不要在别人可能忙于工作或者休息的时候打电话过去。除非是非常紧急的事情。 
  18. 给别人打电话的时候,先问对方是否方便通话。 
  19. 一件事情让两个人知道就不再是秘密。 
  20. 你在背后说任何人的坏话都迟早有一天传入这个人的耳朵。 
  21. 不要说尖酸刻薄的话。 
  22. 牢记他人的名字。养成偶尔翻看名片簿、电话本的习惯。 
  23. 尝试着跟你讨厌的人交往。 
  24. 一定要尊重对方的隐私,不管是朋友还是夫妻。 
  25. 很多人在一起的时候,当你与其中某个人交谈,请不要无视其他人的存在。 
  26. 要勇于认错。 
  27. 以谦卑的姿态面对身边的每一个人。 
  28. 给予他人同情和谅解。 
  29. 尽可能用“建议”取代“命令”。 
  30. 不要轻易做出承诺。承诺的事情就一定要尽可能做到。



草儿 2008-10-11 09:39
]]>
oome错误抛出原因http://www.blogjava.net/mlh123caoer/archive/2008/09/20/230104.html草儿草儿sat, 20 sep 2008 03:20:00 gmthttp://www.blogjava.net/mlh123caoer/archive/2008/09/20/230104.htmlhttp://www.blogjava.net/mlh123caoer/comments/230104.htmlhttp://www.blogjava.net/mlh123caoer/archive/2008/09/20/230104.html#feedback0http://www.blogjava.net/mlh123caoer/comments/commentrss/230104.htmlhttp://www.blogjava.net/mlh123caoer/services/trackbacks/230104.html
oome错误抛出原因(排列以发生的可能性为据):
  1. java heap中无法申请到足够的内存用于创建新的object,jvm会抛出oome错误
      根据异常发生的日志分析,有可能是因为pop3受信时,发生死锁,导致旧对象无法释
      放,java heap 内存超过最大分配内存,oome抛出。
   2. native memory jvm正常运行和 jni调用第三方库时分配内存。native内存会在jvm进程所
      需要的内存向系统申请,如果jni调用不能申请到内存就会抛出oome错误。
   3. process memory size 不够。这种可能性比较小。


草儿 2008-09-20 11:20
]]>
一个男人今生想和老婆做的45件事http://www.blogjava.net/mlh123caoer/archive/2008/09/02/226331.html草儿草儿tue, 02 sep 2008 04:33:00 gmthttp://www.blogjava.net/mlh123caoer/archive/2008/09/02/226331.htmlhttp://www.blogjava.net/mlh123caoer/comments/226331.htmlhttp://www.blogjava.net/mlh123caoer/archive/2008/09/02/226331.html#feedback5http://www.blogjava.net/mlh123caoer/comments/commentrss/226331.htmlhttp://www.blogjava.net/mlh123caoer/services/trackbacks/226331.html

2让妳躺在我的腿上静静的看书,然后抚摩妳的头发。



3在洗澡的时候帮妳搓背。


4当妳不吃饭的时候哄着妳吃,再不行就喂妳吃。 


5 和妳去趟西藏。



6 把我的牙刷偷偷的和妳换一下。


7 当妳说自己累的很,不想做饭时,把妳抱上床盖上被子,然后亲自给妳做我最拿手的方便面!



8 没有理由的亲亲妳。



9认真听妳说的每句话。


10妳写的东西我一定做第一个读者,并且不管妳写的怎样都鼓励你。


11每年秋天都和妳去登山。


12经常抱着妳,背着妳,哪怕是在大庭广众之下。


13每天醒来先看看妳熟睡的样子,轻轻吻妳一下。


14经常逗的妳想哭又想笑。


15陪妳逛街,和妳一起做饭。


16在街上走的时候不让妳离开自己1米。


17和妳一起抚养孩子长大。 


18在妳特殊时期的时候给妳端上我做的红糖荷包蛋,看妳把泪水蹭到我胸前。 


19在生活中让着妳,妳错了也是我的错,吵架后肯定我先道歉。但是在是非方面却要一丝不苟。



20听妳叫我傻瓜等一切妳想叫我的名字。


21晚上故意叫醒妳,听妳庸懒的声音。


22在妳无助时能在妳身边帮妳。


23帮妳梳头时不弄疼妳。


24在妳专心看书时不打搅妳。


25和妳抢吃的,把最有营养最好吃的留给妳。 


26陪妳去海边,听妳踏浪时的欢乐叫声。 


27帮妳卖菜时顺便买束花给妳。 


28钱包里总是有妳的照片,或者是全家福。


29过马路的时候都要抓住妳的手。


30下班后只要看见家里的灯灭了就一定自己开门,绝不吵醒妳。 


31半夜故意把妳的被子踢开让妳往我被窝里钻。



32在妳生病时,守在妳身边,给妳塞塞被角,摸摸妳的额头,把妳拥入怀中。



33给妳买妳心仪以久的东西。 


34听妳的话不抽烟,少喝酒,多吃水果,定时吃饭。 


35打雷的时候对妳说“来我抱着妳睡”因为我知道妳害怕打雷。



36我们吵架后,会在客厅睡,让妳好好想一想,再等妳来给我盖被子。


37留一点点的胡子,在亲妳的时候偷偷的扎你的脸。 


38在妳70岁的时候陪妳去看夕阳。 


39和妳一起看鬼片,安慰妳说“别怕,有我呢!” 


40当妳趴在阳台的栏杆上时,从妳身后揽住妳。 


41不许妳说谢谢,对不起之类的话,那样会很见外。 


42下雨的时候出现在妳面前。 


43没钱的时候会肉麻的说“老婆,给点零用钱吧!” 


44当妳和孩子在公园里嬉戏时,坐在一边享受着。


45每天都感激上天让我们相遇,相知,相爱……


草儿 2008-09-02 12:33
]]>
8故事 8哲理http://www.blogjava.net/mlh123caoer/archive/2008/08/15/222219.html草儿草儿fri, 15 aug 2008 05:22:00 gmthttp://www.blogjava.net/mlh123caoer/archive/2008/08/15/222219.htmlhttp://www.blogjava.net/mlh123caoer/comments/222219.htmlhttp://www.blogjava.net/mlh123caoer/archive/2008/08/15/222219.html#feedback0http://www.blogjava.net/mlh123caoer/comments/commentrss/222219.htmlhttp://www.blogjava.net/mlh123caoer/services/trackbacks/222219.html
1、建筑师
     一位夫人打电话给建筑师,说每当火车经过时,她的睡床就会摇动。
     “这简直是无稽之谈!”建筑师回答说,“我来看看。”
    建筑师到达后,夫人建议他躺在床上,体会一下火车经过时的感觉。
  建筑师刚上床躺下,夫人的丈夫就回来了。他见此情形,便厉声喝问:“你躺在我妻子的床上干什么?”
  建筑师战战兢兢地回答:“我说是在等火车,你会相信吗?”
【顿悟】
  有些话是真的,却听上去很假;有些话是假的,却令人无庸置疑。
  
2、引诱
  英国绅士与法国女人同乘一个包厢,女人想引诱这个英国人,她脱衣躺下后就抱怨身上发冷。先生把自己的被子给了她,她还是不停地说冷。
   “我还能怎么帮助你呢?”先生沮丧地问道。
   “我小时候妈妈总是用自己的身体给我取暖。”
   “小姐,这我就爱莫能助了。我总不能跳下火车去找你的妈妈吧?”
【顿悟】
  善解风情的男人是好男人,不解风情的男人更是好男人。
  
3、调羹
  麦克走进餐馆,点了一份汤,服务员马上给他端了上来。
  服务员刚走开,麦克就嚷嚷起来:“对不起,这汤我没法喝。”
  服务员重新给他上了一个汤,他还是说:“对不起,这汤我没法喝。”
  服务员只好叫来经理。
  经理毕恭毕敬地朝麦克点点头,说:“先生,这道菜是本店最拿手的,深受顾客欢迎,难道您……”
   “我是说,调羹在哪里呢?”
【顿悟】
  有错就改,当然是件好事。但我们常常却改掉正确的,留下错误的,结果是错上加错。
  
4、穿错
  饭厅内,一个异常谦恭的人胆怯地碰了碰另一个顾客,那人正在穿一件大衣。
  “对不起,请问您是不是皮埃尔先生?”
  “不,我不是。”那人回答。
  “啊,”他舒了一口气,“那我没弄错,我就是他,您穿了他的大衣。”
【顿悟】
  要做到理直气壮,并不是件容易的事情。理直的人,往往低声下气;而理歪的人,却是气壮如牛。
  
5、回电
   一个苏格兰人去伦敦,想顺便探望一位老朋友,但却忘了他的住址,于是给家父发了一份电报:“您知道托马的住址吗?速告1
  当天,他就收到一份加急回电:“知道。”
【顿悟】
  当我们终于找到最正确的答案时,却发现它是最无用的。
  
6、伤心故事
  有三个人到纽约度假。他们在一座高层宾馆的第45层订了一个套房。
  一天晚上,大楼电梯出现故障,服务员安排他们在大厅过夜。
  他们商量后,决定徒步走回房间,并约定轮流说笑话、唱歌和讲故事,以减轻登楼的劳累。
  笑话讲了,歌也唱了,好不容易爬到第34层,大家都感觉精疲力竭。
  “好吧,彼德,你来讲个幽默故事吧。”
  彼德说:“故事不长,却令人伤心至极:我把房间的钥匙忘在大厅了。”
【顿悟】
   我们痛苦,所以幽默;我们幽默,所以快乐。
  
7、卖书
   一个很有名的作家要来书店参观。书店老板受宠若惊,连忙把所有的书撤下,全部换上作家的书。作家来到书店后,心里非常高兴,问道:“贵店只售本人的书吗?”
   “当然不是。”书店老板回答,“别的书销路很好,都卖完了。”
【顿悟】
  “拍马屁”是个奇怪的词:你象是在奉承他,又象是在侮辱他。
  
8、帮忙
  在邮局大厅内,一位老太太走到一个中年人跟前,客气地说:“先生,请帮我在明信片上写上地址好吗?”
  “当然可以。”中年人按老人的要求做了。
  老太太又说:“再帮我写上一小段话,好吗?谢谢!”
  “好吧。”中年人照老太太的话写好后,微笑着问道:“还有什么要帮忙的吗?”
  “嗯,还有一件小事。”老太太看着明信片说,“帮我在下面再加一句:字迹潦草,敬请原谅。”
【顿悟】
  你若不肯帮忙,人家会恨你一个星期;如果帮得不够完美,还不如……


草儿 2008-08-15 13:22
]]>
大连心情http://www.blogjava.net/mlh123caoer/archive/2008/08/15/222159.html草儿草儿fri, 15 aug 2008 02:05:00 gmthttp://www.blogjava.net/mlh123caoer/archive/2008/08/15/222159.htmlhttp://www.blogjava.net/mlh123caoer/comments/222159.htmlhttp://www.blogjava.net/mlh123caoer/archive/2008/08/15/222159.html#feedback3http://www.blogjava.net/mlh123caoer/comments/commentrss/222159.htmlhttp://www.blogjava.net/mlh123caoer/services/trackbacks/222159.html        ……本以为回来可以放松一下心情,没想到会被人扫地出门,回到大连只验证了半年前的一句话,“时间会证明你会离开我”,早已料到的结局,没想到来得这么早。大连的天气也领悟了我的感受,这几天一直阴沉沉的,对于大连的留恋变的很淡,…… 希望自己对于以后的选择更慎重一些。
       这次回来,也有些对不起朋友,没有看一看他们,希望下次补偿一下。

草儿 2008-08-15 10:05
]]>
十五个必须让男朋友知道的事情!http://www.blogjava.net/mlh123caoer/archive/2008/05/17/201075.html草儿草儿sat, 17 may 2008 04:47:00 gmthttp://www.blogjava.net/mlh123caoer/archive/2008/05/17/201075.htmlhttp://www.blogjava.net/mlh123caoer/comments/201075.htmlhttp://www.blogjava.net/mlh123caoer/archive/2008/05/17/201075.html#feedback2http://www.blogjava.net/mlh123caoer/comments/commentrss/201075.htmlhttp://www.blogjava.net/mlh123caoer/services/trackbacks/201075.html本文由   嘎嘎   发表在: 

二,

三,

四,

五,

六,

七,

八,

九,

十,

十一,

十二,

十三,

十四,

十五,



草儿 2008-05-17 12:47
]]>
打死不能嫁的十种男人http://www.blogjava.net/mlh123caoer/archive/2008/05/17/201073.html草儿草儿sat, 17 may 2008 04:46:00 gmthttp://www.blogjava.net/mlh123caoer/archive/2008/05/17/201073.htmlhttp://www.blogjava.net/mlh123caoer/comments/201073.htmlhttp://www.blogjava.net/mlh123caoer/archive/2008/05/17/201073.html#feedback5http://www.blogjava.net/mlh123caoer/comments/commentrss/201073.htmlhttp://www.blogjava.net/mlh123caoer/services/trackbacks/201073.html本文由   平平   发表在: 











草儿 2008-05-17 12:46
]]>
grails application now working on glassfish v3http://www.blogjava.net/mlh123caoer/archive/2008/03/10/185015.html草儿草儿mon, 10 mar 2008 03:53:00 gmthttp://www.blogjava.net/mlh123caoer/archive/2008/03/10/185015.htmlhttp://www.blogjava.net/mlh123caoer/comments/185015.htmlhttp://www.blogjava.net/mlh123caoer/archive/2008/03/10/185015.html#feedback0http://www.blogjava.net/mlh123caoer/comments/commentrss/185015.htmlhttp://www.blogjava.net/mlh123caoer/services/trackbacks/185015.htmlrecently reported to me about his grail app not deploying on . the problem reported was that the grail app was taking lots of time to deploy on glassfish v3 preview 2. although such failures are not acceptable but considering glassfish v3 is a complete new architecture, is still under development and feature incomplete and above all the preview releases do not go thru the normal test cycle so such bugs can appear.

this issue was discussed at the glassfish , see the discussion and the corresponding .

the good news is that quickly found out what the problem was and after the code went thru reviews, it was checked in and the fix went into yesterday's build.

here is how i created and deployed a grails application on glassfish v3:

create a simple grails app

setup grails this is the standard way you would setup the grails environments:

    export path=$grails_home/bin:$path
export grails_home=/tools/grails

 

 

create a simple grails app
    vivekmz@boson(555)> grails create-app myfirstgrailsapp
welcome to grails 1.0.1 - http://grails.org/
licensed under apache standard license 2.0
grails home is set to: /tools/grails
base directory: /ws/sb
environment set to development
note: no plugin scripts found
running script /tools/grails/scripts/createapp.groovy
[mkdir] created dir: /ws/sb/myfirstgrailsapp/src
[mkdir] created dir: /ws/sb/myfirstgrailsapp/src/java
[mkdir] created dir: /ws/sb/myfirstgrailsapp/src/groovy
[mkdir] created dir: /ws/sb/myfirstgrailsapp/grails-app
[mkdir] created dir: /ws/sb/myfirstgrailsapp/grails-app/controllers
[mkdir] created dir: /ws/sb/myfirstgrailsapp/grails-app/services
[mkdir] created dir: /ws/sb/myfirstgrailsapp/grails-app/domain
[mkdir] created dir: /ws/sb/myfirstgrailsapp/grails-app/taglib
[mkdir] created dir: /ws/sb/myfirstgrailsapp/grails-app/utils
[mkdir] created dir: /ws/sb/myfirstgrailsapp/grails-app/views
[mkdir] created dir: /ws/sb/myfirstgrailsapp/grails-app/views/layouts
[mkdir] created dir: /ws/sb/myfirstgrailsapp/grails-app/i18n
[mkdir] created dir: /ws/sb/myfirstgrailsapp/grails-app/conf
[mkdir] created dir: /ws/sb/myfirstgrailsapp/test
[mkdir] created dir: /ws/sb/myfirstgrailsapp/test/unit
[mkdir] created dir: /ws/sb/myfirstgrailsapp/test/integration
[mkdir] created dir: /ws/sb/myfirstgrailsapp/scripts
[mkdir] created dir: /ws/sb/myfirstgrailsapp/web-app
[mkdir] created dir: /ws/sb/myfirstgrailsapp/web-app/js
[mkdir] created dir: /ws/sb/myfirstgrailsapp/web-app/css
[mkdir] created dir: /ws/sb/myfirstgrailsapp/web-app/images
[mkdir] created dir: /ws/sb/myfirstgrailsapp/web-app/meta-inf
[mkdir] created dir: /ws/sb/myfirstgrailsapp/lib
[mkdir] created dir: /ws/sb/myfirstgrailsapp/grails-app/conf/spring
[mkdir] created dir: /ws/sb/myfirstgrailsapp/grails-app/conf/hibernate
[propertyfile] creating new property file:
/ws/sb/myfirstgrailsapp/application.properties
[copy] copying 2 files to /ws/sb/myfirstgrailsapp
[copy] copying 2 files to /ws/sb/myfirstgrailsapp/web-app/web-inf
[copy] copying 5 files to /ws/sb/myfirstgrailsapp/web-app/web-inf/tld
[copy] copying 87 files to /ws/sb/myfirstgrailsapp/web-app
[copy] copying 17 files to /ws/sb/myfirstgrailsapp/grails-app
[copy] copying 1 file to /ws/sb/myfirstgrailsapp
[copy] copying 1 file to /ws/sb/myfirstgrailsapp
[copy] copying 1 file to /ws/sb/myfirstgrailsapp
[propertyfile] updating property file:
/ws/sb/myfirstgrailsapp/application.properties
created grails application at /ws/sb/myfirstgrailsapp

start glassfish v3

    vivekmz@boson(735)> glassfish/bin/asadmin start-domain
mar 7, 2008 7:43:04 pm com.sun.enterprise.v3.server.appserverstartup run
info: hk2 initialized in 281 ms
mar 7, 2008 7:43:04 pm com.sun.enterprise.v3.server.appserverstartup run
info: com.sun.enterprise.naming.impl.serviceshookup@51b48197 init done in 307 ms
mar 7, 2008 7:43:04 pm com.sun.enterprise.v3.server.appserverstartup run
info: com.sun.enterprise.v3.services.impl.cmdlineparamprocessor@9c0ec97 init done in 310 ms
mar 7, 2008 7:43:04 pm com.sun.enterprise.v3.server.appserverstartup run
info: com.sun.enterprise.v3.server.systemtasks@1fd0fafc init done in 382 ms
mar 7, 2008 7:43:04 pm com.sun.enterprise.v3.server.appserverstartup run
info: com.sun.enterprise.v3.services.impl.logmanagerservice@388ee016 init done in 411 ms
mar 7, 2008 7:43:04 pm com.sun.enterprise.v3.server.appserverstartup run
info: com.sun.enterprise.v3.services.impl.housekeeper@a210b5b init done in 413 ms
mar 7, 2008 7:43:04 pm com.sun.enterprise.v3.services.impl.grizzlyproxy start
info: listening on port 8080
mar 7, 2008 7:43:04 pm com.sun.enterprise.v3.services.impl.grizzlyproxy start
info: listening on port 8181
mar 7, 2008 7:43:04 pm com.sun.enterprise.v3.services.impl.grizzlyproxy start
info: listening on port 4848
mar 7, 2008 7:43:04 pm com.sun.enterprise.v3.server.appserverstartup run
info: com.sun.enterprise.v3.services.impl.grizzlyservice@506f9b8e startup done in 630 ms
mar 7, 2008 7:43:04 pm com.sun.enterprise.v3.server.appserverstartup run
info: com.sun.enterprise.security.securityservicesutil@585976c2 startup done in 732 ms
mar 7, 2008 7:43:04 pm com.sun.enterprise.v3.server.appserverstartup run
info: glassfish v3 started in 733 ms

you can see above it took 733ms to boot up!

deploy the grails app

now that i have built myfirstgrailsapp, it is time to deploy. so first i will create a war file:

    vivekmz@boson(558)> cd myfirstgrailsapp/
vivekmz@boson(559)> grails war

 

now let's deploy to glassfish v3:
    vivekmz@boson(749)> ../glassfish/bin/asadmin deploy myfirstgrailsapp-0.1.war
success : myfirstgrailsapp-0.1 deployed successfully
properties=(name=myfirstgrailsapp-0.1)

the server log tells, it took about 9.7 seconds to deploy it:

[#|2008-03-07t20:19:03.580 0000|info|glassfish10.0|javax.enterprise.system.tools.deployment|_threadid=12;_threadname=thread-4;|deployment of myfirstgrailsapp-0.1 done is 9765 ms|#]

now when i accessing http://localhost:8080/myfirstgrailsapp-0.1/ my grails app appears in the firefox:

 

has been going thru continuous improvements and the development team is busy making it rock solid while adding new features to it. continue sending your feedbacks to .

草儿 2008-03-10 11:53
]]>
我奋斗了18年,不是为了和你一起喝咖啡!http://www.blogjava.net/mlh123caoer/archive/2007/12/28/171312.html草儿草儿fri, 28 dec 2007 12:19:00 gmthttp://www.blogjava.net/mlh123caoer/archive/2007/12/28/171312.htmlhttp://www.blogjava.net/mlh123caoer/comments/171312.htmlhttp://www.blogjava.net/mlh123caoer/archive/2007/12/28/171312.html#feedback13http://www.blogjava.net/mlh123caoer/comments/commentrss/171312.htmlhttp://www.blogjava.net/mlh123caoer/services/trackbacks/171312.html3年前,麦子的一篇《我奋斗了18年才和你坐在一起喝咖啡》引起多少共鸣,一个农家
子弟经过18年的奋斗,才取得和大都会里的同龄人平起平坐的权利,一代人的真实写照
。然而,3年过去,我恍然发觉,他言之过早。18年又如何?再丰盛的年华叠加,我仍
不能和你坐在一起喝咖啡。

  那年我25,无数个夙兴夜寐,换来一个硕士学位,额上的抬头纹分外明显,脚下却
半步也不敢停歇。如果不想让户口打回原籍,子子孙孙无穷匮,得赶紧地找份留京工作
。你呢?你不着急,魔兽世界和红色警报?早玩腻了!你野心勃勃地筹划着“创业创业
”。当时李彦宏、陈天桥、周云帆,牛人们还没有横空出世,百度、google、完美时空
更是遥远的名词,可青春所向披靡不可一世,你在校园里建起配送网站,大张旗鼓地招
兵买马,大小媒体的记者蜂拥而至。334寝室很快在全楼名噪一时,小姑娘们从天南地
北寄来粉粉的信纸,仰慕地写道:“从报上得知你的精彩故事……”得空,爬上楼顶吹
吹风,你眉飞色舞地转向我,以照顾自己人的口气说,兄弟,一起发财如何?

  好呀,可惜,我不能。创业于你,是可进可退可攻可守的棋,启动资金有三姑六眷
帮忙筹集,就算铩羽而归,父母那三室一厅、温暖的灶台也永不落空。失败于我,意味
着覆水难收一败涂地,每年夏天,为了节省三五百块钱的机器钱,爹娘要扛着腰肌劳损
在大日头下收割5亩农田。我穿着借来的西服完成了第一次面试,戴着借来的手表与心
爱的女孩进行了第一次约会。当你拿到了第一笔投资兴奋地报告全班时,我冷静地穿越
大半个北京城,去做最后一份家教。没错,“这活儿技术含量忒低”,但在第一个月工
资下发前,我租来的立锥之地与口粮全靠它维持。

  不多久,互联网就遭遇了寒流,你也对创业意兴阑珊,进了家国有性质的通信公司
,我被一家外企聘用。坐井观天的我,竟傻傻地以为扳回了一局。明面上的工资,我比
你超出一截,税后8000,出差住5星级宾馆,一年带薪休假10天。玩命一样地投入工作
,坚信几年后也有个童话般的结尾,“和公主过上幸福的生活”。

  好景不长,很快,我明白了为什么大家说白领是句骂人的话。写字楼的套餐,标价
35,几乎没人搭理它。午餐时间,最抢手的是各层拐角处的微波炉,“白领”们端着带
来的便当,排起了长长的队伍。后来,物业允许快餐公司入住,又出现了“千人排队等
丽华”的盛况。这些月入近万的人士节约到抠门的程度。一位同事,10块钱的感冒药都
找保险公司理赔;另一位,在脏乱差的火车站耗上3个小时,为的是18:00后返程能多
得150元的晚餐补助。

  这幕幕喜剧未能令我发笑,我读得懂,每个数字后都凝结着加班加点与忍气吞声;
俯首帖耳被老板盘剥,为的是一平米一平米构筑起自己的小窝。白手起家的过程艰辛而
漫长,整整3年,我没休过一次长假没吃过一回鸭脖子;听到“华为25岁员工胡新宇过
劳死”的新闻,也半点儿不觉得惊讶,以血汗、青春换银子的现象在这个行业太普遍了
。下次,当你在上地看见一群人穿着西装革履拎着ibm笔记本奋力挤上4毛钱的公交车,
千万别奇怪,我们就是一群it民工。

  惟一让人欣慰的是,我们离理想中的目标一步步靠近。

  突如其来地,你的喜讯从天而降:邀请大家周末去新居暖暖房。怎么可能?你竟比
我快?可豁亮的100多平方米、红苹果家具、37寸液晶大彩电无可质疑地摆在眼前。你
轻描淡写地说,老头子给了10万,她家里也给了10万,老催着我们结婚……回家的路上
,女朋友郁郁不说话,她和我一样,来自无名的山城。我揽过她的肩膀,鼓励她也是鼓
励自己,没关系,我们拿时间换空间。

  蜜月你在香港过的,轻而易举地花掉了半年的工资,回来说,意思不大,不像tvb
电视里拍的那样美轮美奂;我的婚礼,在家乡的土路、乡亲的围观中巡游,在低矮昏暗
的老房子里拜了天地,在寒冷的土炕上与爱人相拥入眠。幸运的是,多年后黯淡的图景
化作妻子博客里光芒四射的图画,她回味:“有爱的地方,就有天堂。”

  我们都想给深爱的女孩以天堂,天堂的含义却迥然不同。你的老婆当上了全职太太
,每天用电驴下载《老友记》和《越狱》;我也想这么来着,老婆不同意,你养我,谁
养我爸妈?不忍心让你一个人养7个人。当你的女孩敷着倩碧面膜舒服地翘起脚,我的
女孩却在人海中顽强地搏杀。

  两个人赚钱的速度快得多。到2004年年底,我们也攒到了人生中第一个10万,谁知
中国的楼市在此时被魔鬼唤醒,海啸般狂飙突进,摧毁一切渺小虚弱的个体。2005年3
月,首付还够买西四环的郦城,到7月,只能去南城扫楼了。我们的积蓄本来能买90平
方米的两居来着,9月中旬,仅仅过去2个月,只够买80多平。

  没学过经济学原理?没关系。生活生动地阐释了什么叫资产泡沫与流动性泛滥。这
时专家跳出来发言了,“北京房价应该降30%,上海房价应该降40%。”要不,再等等
?我险些栖身于温吞的空方阵营,是你站出来指点迷津:赶快买,房价还会涨。买房的
消息传回老家,爹娘一个劲儿地唏嘘:抵得上俺们忙活半年。在他们看来,7500元一平
方米是不可思议的天价。3年后的2008,师弟们纷纷感叹,你赚大发了,四环内均价1万
4,已无楼可买。

  几天前,我看见了水木上一句留言,颇为感慨:“工作5年还没买房真活该,2003
年正是楼市低迷与萧条之时。等到今天,踏空的不仅是黄金楼市,更是整个人生。”

  真要感谢你,在我不知理财为何物之时,你早早地告诉我什么叫消费什么叫投资。

  并非所有人都拥有前瞻的眼光和投资的观念。许多和我一样来自小地方、只知埋头
苦干的兄弟们,太过关注脚下的麦田,以至于错过一片璀璨的星空。你的理论是,赚钱
是为了花,只有在流通中才能增值,买到喜爱的商品,让生活心旷神怡。而我的农民兄
弟——这里特指是出身农家毕业后留在大城市的兄弟,习惯于把人民币紧紧地捏在手中
。存折数字的增长让他们痴迷。该买房时,他们在租房;该还贷时,他们宁可忍受7%
的贷款利率,也要存上5年的定期。辛苦赚来的银子在等待中缩水贬值。他们往往在房
价的巅峰处,无可奈何地接下最后一棒;也曾天真地许愿,赚够100万就回家买房。可
等到那一天真的到来,老家的房价,二线、三线城市甚至乡镇的都已疯长。

  这便是我和你的最大差别,根深蒂固的分歧、不可逾越的鸿沟也在于此。我曾经以
为,学位、薪水、公司名气一样了,我们的人生便一样了。事实上,差别不体现在显而
易见的符号上,而是体现在世世代代的传承里,体现在血液里,体现在头脑中。18年的
积累,家庭出身、生活方式、财务观念,造就了那样一个你,也造就了这样一个我,造
就了你的疏狂佻达与我的保守持重。当我还清贷款时,你买了第二套住房;上证指数
6000点,当我好容易试水成为股民,你清仓离场,转投金市;我每月寄1000元回去,承
担起赡养父母的责任,你笑嘻嘻地说,养老,我不啃老就不错了;当我思考着要不要生
孩子、养孩子的成本会在多大程度上折损生活品质时,4个老人已出钱出力帮你抚养起
独二代;黄金周去一趟九寨沟挺好的了,你不满足,你说德国太拘谨美国太随意法国才
是你向往的时尚之都……

  我的故事,是一代“移民”的真实写照——迫不得已离乡背井,祖国幅员辽阔,我
却像候鸟一样辗转迁徙,择木而栖。现行的社会体制,注定了大城市拥有更丰富的教育

资源、医疗资源、生活便利。即便取得了一纸户口,跻身融入的过程依然是充满煎熬,
5年、10年乃至更长时间的奋斗才获得土著们唾手可得的一切。曾经愤慨过,追寻过,
如今,却学会了不再抱怨,在一个又一个缝隙间心平气和。差距固然存在,但并不令人
遗憾,正是差距和为弥补差距所付出的努力,加强了生命的张力,使其更有层次更加多
元。

  可以想见的未来是,有一天我们的后代会相聚于迪斯尼(这点自信我还是有的),
讲起父亲的故事,我的那一个,虽然不一定更精致更华彩,无疑曲折有趣得多。那个故
事,关于独立、勇气、绝地反弹、起死回生,我给不起儿子名车豪宅,却能给他一个不
断成长的心灵。我要跟他说,无论贫穷富贵,百万家资或颠沛流离,都要一样地从容豁
达。

  至此,喝不喝咖啡又有什么打紧呢?生活姿态的优雅与否,不取决于你所坐的位置
、所持的器皿、所付的茶资。它取决于你品茗的态度。

  我奋斗了18年,不是为了和你一起喝咖啡。



草儿 2007-12-28 20:19
]]>
acegi配置文档 http://www.blogjava.net/mlh123caoer/archive/2007/12/16/168120.html草儿草儿sun, 16 dec 2007 13:38:00 gmthttp://www.blogjava.net/mlh123caoer/archive/2007/12/16/168120.htmlhttp://www.blogjava.net/mlh123caoer/comments/168120.htmlhttp://www.blogjava.net/mlh123caoer/archive/2007/12/16/168120.html#feedback0http://www.blogjava.net/mlh123caoer/comments/commentrss/168120.htmlhttp://www.blogjava.net/mlh123caoer/services/trackbacks/168120.html阅读全文

草儿 2007-12-16 21:38
]]>
acegi学习小结 http://www.blogjava.net/mlh123caoer/archive/2007/12/16/168117.html草儿草儿sun, 16 dec 2007 13:31:00 gmthttp://www.blogjava.net/mlh123caoer/archive/2007/12/16/168117.htmlhttp://www.blogjava.net/mlh123caoer/comments/168117.htmlhttp://www.blogjava.net/mlh123caoer/archive/2007/12/16/168117.html#feedback0http://www.blogjava.net/mlh123caoer/comments/commentrss/168117.htmlhttp://www.blogjava.net/mlh123caoer/services/trackbacks/168117.html一、基本原理
acegi认证授权主要基于两大技术,一是filter机制,二是aop的拦截机制。通过filtersecurityinterceptor很好地实现了对uri的保护,通过methodsecurityinterceptor实现了对service的方法的拦截保护,通过acl 实现了对prototype类型的object进行过滤和保护。

二、基本概念
httpsessioncontextintegrationfilter 存储securitycontext in httpsession
channelprocessingfilter 重定向到另一种协议,如http到https

concurrentsessionfilter 因为不使用任何securitycontextholder的功能,但是需要更新sessionregistry来表示当前的发送请求的principal,通过在web.xml中注册listener监听session事件,并发布相关消息,然后由sessionregistry获得消息以判断当前用户的session数量。

authenticationprocessingfilter 普通认证机制(大多数用这个)

casprocessingfilter cas认证机制

basicprocessingfilter http协议的basic认证机制

httprequestintegrationfilter authentication 从容器的httpservletrequest.getuserprincipal()获得

jbossintegrationfilter 与jboss相关。

securitycontextholderawarerequestfilter 与servlet容器结合使用。

remembermeprocessingfilter 基于cookies方式进行认证。

anonymousprocessingfilter 匿名认证。

exceptiontranslationfilter 捕获所有的acegi security 异常,这样要么返回一个http错误响应或者加载一个对应的authenticationentrypoint

authenticationentrypoint 认证入口

三、acegi认证授权流程
1、filtertobeanproxy 负责代理请求给filterchainproxy

2、filterchainproxy 方便的将多个filter串联起来,如上面基本概念中提到的各种filter,当然如果对uri进行授权保护,也可以包含filtersecurityinterceptor。注意各filter的顺序。

3、abstractsecurityinterceptor 调度中心。负责调用各模块完成相应功能。
filtersecurityinterceptor 对uri进行拦截保护
aspectjsecurityinterceptor 对方法进行拦截保护
methodsecurityinterceptor 对方法进行拦截保护

4、authenticationmanager 用户认证
-> authenticationprovider 实际进行用户认证的地方(多个)。
-> userdetailsservice 返回带有grantedauthority的userdetail或者抛出异常。

5、accessdecisionmanager(unanimousbased/affirmativebased/consensusbased) 授权
-> accessdecisionvoter(rolevoter/baseaclentryvoter) 实际投票的voter(多个).

6、runasmanager 变更grantedauthority

7、afterinvocationmanager 变更返回的对象
-> baseinvocationprovider 实际完成返回对象变更的地方(多个)。

 



草儿 2007-12-16 21:31
]]>
acegi框架介绍 http://www.blogjava.net/mlh123caoer/archive/2007/12/16/168116.html草儿草儿sun, 16 dec 2007 13:29:00 gmthttp://www.blogjava.net/mlh123caoer/archive/2007/12/16/168116.htmlhttp://www.blogjava.net/mlh123caoer/comments/168116.htmlhttp://www.blogjava.net/mlh123caoer/archive/2007/12/16/168116.html#feedback0http://www.blogjava.net/mlh123caoer/comments/commentrss/168116.htmlhttp://www.blogjava.net/mlh123caoer/services/trackbacks/168116.html【it168 专稿】对于任何一个完整的应用系统,完善的 认证和授权机制是必不可少的。acegi security(以下简称acegi)是一个能为基于spring的企业应用提供强大而灵活安全访问控制凯发天生赢家一触即发官网的解决方案的框架,acegi已经成为 spring官方的一个子项目,所以也称为spring security。它通过在spring容器中配置一组bean,充分利用spring的ioc和aop功能,提供声明式安全访问控制的功能。虽然,现在 acegi也可以应用到非spring的应用程序中,但在spring中使用acegi是最自然的方式。
acegi可以实现业务对象方法级的安全访问控制粒度,它提供了以下三方面的应用程序的安全:

? url资源的访问控制
    如所有用户(包括其名用户)可以访问index.jsp登录页面,而只有授权的用户可以访问/user/adduser.jsp页面。acegi允许通过正则表达式或ant风格的路径表达式定义url模式,让授权用户访问某一url匹配模式下的对应url资源。

? 业务类方法的访问控制
    spring容器中所有bean的方法都可以被acegi管理,如所有用户可以调用bbtforum#getrefinedtopiccount()方法,而只有授权用户可以调用bbtforum#addtopic()方法。

? 领域对象的访问控制
    业务类方法代表一个具体的业务操作,比如更改、删除、审批等,业务类方法访问控制解决了用户是否有调用某种操作的权限,但并未对操作的客体(领域对象)进 行控制。对于我们的论坛应用来说,用户可以调用bbtforum#updateuser(user user)方法更改用户注册信息,但应该仅限于更改自己的用户信息,也即调用bbtforum#updateuser()所操作的user这个领域对象必 须是受限的。

    acegi通过多个不同用途的servlet过滤器对url资源进行保护,在请求受保护的url资源前,acegi的servlet过滤器判断用户是否有权访问目标资源,授权者被开放访问,而未未被授权者将被阻挡在大门之外。
    acegi通过spring aop对容器中bean的受控方法进行拦截,当用户的请求引发调用bean的受控方法时,acegi的方法拦截器开始工作,阻止未授权者的调用。 
    
    对领域对象的访问控制建立在对bean方法保护的基础上,在最终开放目标bean方法的执行前,acegi将检查用户的acl(aeccess control list:访问控制列表)是否包含正要进行操作的领域对象,只有领域对象被授权时,用户才可以使用bean方法对领域对象进行处理。此外,acegi还可 以对bean方法返回的结果进行过滤,将一些不在当前用户访问权限范围内的领域对象剔除掉——即传统的数据可视域范围的控制。一般来说,使用acegi控 制数据可视域未非理想的选择,相反通过传统的动态sql的凯发天生赢家一触即发官网的解决方案往往更加简单易行。

    从本质特性上来说,servlet过滤器就是最原始的原生态aop,所以我们可以说acegi不但对业务类方法、领域对象访问控制采用了aop技术方案, 对url资源的访问控制也使用了aop的技术方案。使用aop技术方案的框架是令人振奋的,这意味着,开发者可以在应用程序业务功能开发完毕后,轻松地通 过acegi给应用程序穿上安全保护的“铁布衫”。

acegi体系结构
    乘飞机前需要通过安检,乘客必须提供身份证以验证其身份。在通过安检进入候机室后,国航、海航、南航等不同航空公司的飞机陆续到达,但你只能登上机票上对 应航班的飞机。在登机后,只能坐在机票对应的座位上——你不能抢占他人的座位,你不能在座位上刻字留念、你不能要求空姐打开机窗……

    乘飞机的过程最能体现安全控制的流程,我们可以从中找到身份认证、资源访问控制、领域对象安全控制的对应物:安检对应身份认证,登机对应资源访问控制而按号就座则对应领域对象安全控制。
    acegi通过两个组件对象完成以上安全问题的处理:authenticationmanager(认证管理器)、accessdecisionmanager(访问控制管理器),如图 1所示:


图 1 acegi体系结构

    securitycontextholder是框架级的容器,它保存着和所有用户关联securitycontext实例, securitycontext承载着用户(也称认证主体)的身份信息的权限信息, authenticationmanager、accessdecisionmanager将据此进行安全访问控制。
   
    securitycontext的认证主体安全信息在一个http请求线程的多个调用之间是共享的(通过threadlocal),但它不能在多个请求之 间保持共享。为了解决这个问题,acegi将认证主体安全信息缓存于httpsession中,当用户请求一个受限的资源时,acegi通过 httpsessioncontextintegrationfilter将认证主体信息从httpsession中加载到 securitycontext实例中,认证主体关联的securitycontext实例保存在acegi容器级的 securitycontextholder里。当请求结束之后,httpsessioncontextintegrationfilter执行相反的操 作,将securitycontext中的认证主体安全信息重新转存到httpsession中,然后从securitycontextholder中清 除对应的securitycontext实例。通过httpsession转存机制,用户的安全信息就可以在多个http请求间共享,同时保证 securitycontextholder中仅保存当前有用的用户安全信息,其整体过程如图 2所示:


图 2 securitycontext在httpsession和请求线程间的转交过程


    当用户请求一个受限的资源时,authenticationmanager首先开始工作,它象一个安检入口,对用户身份进行核查,用户必须提供身份认证的 凭证(一般是用户名/密码)。在进行身份认证时,authenticationmanager将身份认证的工作委托给多个 authenticationprovider。因为在具体的系统中,用户身份可能存储在不同的用户信息安全系统中(如数据库、ca中心、ldap服务 器),不同用户信息安全系统需要不同的authenticationprovider执行诸如用户信息查询、用户身份判断、用户授权信息获取等工作。只要 有一个authenticationprovider可以识别用户的身份,authenticationmanager就通过用户身份认证,并将用户的授 权信息放入到securitycontext中。

   当用户通过身份认证后,试图访问某个受限的程序资源时,accessdecisionmanager开始工作。 accessdecisionmanager采用民主决策机制判断用户是否有权访问目标程序资源,它包含了多个accessdecisionvoter。 在访问决策时每个accessdecisionvoter都拥有投票权,accessdecisionmanager统计投票结果,并按照某种决策方式根 据这些投票结果决定最终是否向用户开放受限资源的访问。


、操作类都在这些组件类的基础上进行操作。在进入acegi框架的具体学习前,有必要事先了解一下这些承载acegi框架重要概念的组件类。
    首先,我们要接触是userdetails接口,它代表一个应用系统的用户,该接口定义了用户安全相关的信息,如用户名/密码,用户是否有效等信息,你可以根据以下接口方法进行相关信息的获取:
    string getusername():获取用户名; 
     string getpassword():获取密码; 
     boolean isaccountnonexpired():用户帐号是否过期; 
     boolean isaccountnonlocked():用户帐号是否锁定; 
     boolean iscredentialsnonexpired():用户的凭证是否过期; 
     boolean isenabled():用户是否处于激活状态。
    当以上任何一个判断用户状态的方法都返回false时,用户凭证就被视为无效。
    userdetails还定义了获取用户权限信息的方法:grantedauthority[] getauthorities(),grantedauthority代表用户权限信息,它定义了一个获取权限描述信息(以字符串表示,如 priv_common)的方法:string getauthority()。


图 3 用户和权限

    在未使用acegi之前,我们可能通过类似user、customer等领域对象表示用户的概念,并在程序中编写相应的用户认证的逻辑。现在,你要做的一 个调整是让原先这些代表用户概念的领域类实现userdetails接口,这样,acegi就可以通过userdetails接口访问到用户的信息了。 

    userdetails可能从数据库、ldap等用户信息资源中返回,这要求有一种机制来完成这项工作,userdetailsservice正是充当这 一角色的接口。userdetailsservice接口很简单,仅有一个方法:userdetails loaduserbyusername(string username) ,这个方法通过用户名获取整个userdetails对象。
authentication代表一个和应用程序交互的待认证用户,acegi从类似于登录页面、cookie等处获取待认证的用户信息(一般是用户名密码)自动构造authentication实例。


图 4 acegi的认证用户

    authentication可以通过object getprincipal()获取一个代表用户的对象,这个对象一般可以转换为userdetails,从中可以取得用户名/密码等信息。在 authentication被authenticationmanager认证之前,没有任何权限的信息。在通过认证之后,acegi通过 userdetails将用户对应的权限信息加载到authentication中。authentication拥有一个 grantedauthority[] getauthorities()方法,通过该方法可以得到用户对应的权限信息。
    authentication和userdetails很容易被混淆,因为两者都有用户名/密码及权限的信息,接口方法也很类似。其实 authentication是acegi进行安全访问控制真正使用的用户安全信息的对象,它拥有两个状态:未认证和已认证。userdetails是代 表一个从用户安全信息源(数据库、ldap服务器、ca中心)返回的真正用户,acegi需要将未认证的authentication和代表真实用户的 userdetails进行匹配比较,通过匹配比较(简单的情况下是用户名/密码是否一致)后,acegi将userdetails中的其它安全信息(如 权限、acl等)拷贝到authentication中。这样,acegi安全控制组件在后续的安全访问控制中只和authentication进行交 互。

由于acegi对程序资源进行访问安全控制时,一定要事先获取和请求用户对应的authentication,acegi框架必须为authentication提供一个“寓所”,以便在需要时直接从“寓所”把它请出来,作为各种安全管理器决策的依据。

    securitycontextholder就是authentication容身的“寓所”,你可以通过 securitycontextholder.getcontext().getauthenication()代码获取authentication。 细心观察一下这句代码,你会发现在securitycontextholder和authentication之间存在一个getcontext()中 介,这个方法返回securitycontext对象。securitycontext这个半路杀出来的程咬金有什么特殊的用途呢?我们知道 authentication是用户安全相关的信息,请求线程其它信息(如登录验证码等)则放置在securitycontext中,构成了一个完整的安 全信息上下文。securitycontext接口提供了获取和设置authentication的方法:
 authentication getauthentication()
 void setauthentication(authentication authentication)


图 5 认证用户信息存储器

    securitycontextholder是acegi框架级的对象,它在内部通过threadlocal为请求线程提供线程绑定的 securitycontext对象。这样,任何参与当前请求线程的acegi安全管理组件、业务服务对象等都可以直接通过 securitycontextholder.getcontext()获取线程绑定的securitycontext,避免通过方法入参的方式获取用户 相关的securitycontext。

    线程绑定模式对于大多数应用来说是适合的,但是应用本身会创建其它的线程,那么只有主线程可以获得线程绑定securitycontext,而主线程衍生 出的新线程则无法得到线程绑定的securitycontext。acegi考虑到了这些不同应用情况,提供了三种绑定securitycontext的 模式:
 securitycontextholder.mode_threadlocal:securitycontext绑定到主线程,这是默认的模式;
 securitycontextholder.mode_global:securitycontext绑定到jvm中,所有线程都使用同一个securitycontext;
 securitycontextholder.mode_inheritablethreadlocal::securitycontext绑定到主线程及由主线程衍生的线程中。
    你可以通过securitycontextholder.setstrategyname(string strategyname)方法指定securitycontext的绑定模式。

  用户认证过程
  acegi支持多种方式的用户认证:如典型的基于数据库的认证、基于ldap的认证、基于yale中心认证等方式。不同的认证环境拥有不同的用户认证方式,现在我们先抛开这些具体的细节,考察一下acegi对受限资源进行访问控制的典型过程:
    1.你点击一个链接访问一个网页;
    2.浏览器发送一个请求到服务器,服务器判断出你正在访问一个受保护的资源;
    3.如果此时你并未通过身份认证,服务器发回一个响应提示你进行认证——这个响应可能是一个http响应代码,抑或重定向到一个指定页面;
    4.根据系统使用认证机制的不同,浏览器或者重定向到一个登录页面中,或者由浏览器通过一些其它的方式获取你的身份信息(如通过basic认证对话框、一个cookie或一个x509证书);
    5.浏览器再次将用户身份信息发送到服务器上(可能是一个用户登录表单的http post信息、也可能是包含认证信息的http报文头);
    6.服务器判断用户认证信息是否有效,如果无效,一般情况下,浏览器会要求你继续尝试,这意味着返回第3步。如果有效,则到达下一步;
    7.服务器重新响应第2步所提交的原始请求,并判断该请求所访问的程序资源是否在你的权限范围内,如果你有权访问,请求将得到正确的执行并返回结果。否则,你将收到一个http 403错误,这意味着你被禁止访问。
    在acegi框架里,你可以找到对应以上大多数步骤的类,其中exceptiontranslationfilter、authenticationentrypoint、authenticationprovider以及acegi的认证机制是其中的代表者。

    exceptiontranslationfilter是一个acegi的servlet过滤器,它负责探测抛出的安全异常。当一个未认证用户访问服务器 时,acegi将引发一个java异常。java异常本身对http请求以及如何认证用户是一无所知的, exceptiontranslationfilter适时登场,对这个异常进行处理,启动用户认证的步骤(第3步)。如果已认证用户越权访问一个资源, acegi也将引发一个java异常,exceptiontranslationfilter则将这个异常转换为http 403响应码(第7步)。可见,acegi通过异常进行通讯,
exceptiontranslationfilter接收这些异常并作出相应的动作。

    当exceptiontranslationfilter通过java异常发现用户还未认证时,它到底会将请求重定向哪个页面以要求用户提供认证信息呢? 这通过咨询authenticationentrypoint来达到目的——acegi通过authenticationentrypoint描述登录页 面。

    当你的浏览器通过http表单或http报文头向服务器提供用户认证信息时,acegi需要将这些信息收集到authentication中,acegi 用“认证机制”描述这一过程。此时,这个新生成authentication只包含用户提供的认证信息,但并未通过认证。
authenticationprovider 负责对authentication进行认证。authenticationprovider究竟如何完成这一过程呢?请回忆一下上节我们所介绍的 userdetails和userdetailsservice,大多数authenticationprovider通过 userdetailsservice获取和未认证的authentication对应的userdetails并进行匹配比较来完成这一任务。当用户认 证信息匹配时,authentication被认为是有效的,authenticationprovider进一步将userdetails中权限、 acl等信息拷贝到authentication。
当acegi通过认证机制收集到用户认证信息并填充好authentication后,authentication将被保存到securitycontextholder中并处理用户的原始请求(第7步)。

    你完全可以抛开acegi的安全机制,编写自己的servlet过滤器,使用自己的方案构建authentication对象并将其放置到securitycontextholder中。也许你使用了cma(container
managed authentication:容器管理认证),cma允许你从threadlocal或jndi中获取用户认证信息,这时你只要获取这些信息并将其转换为authentication就可以了。

   安全对象访问控制
    acegi称受保护的应用资源为“安全对象”,这包括url资源和业务类方法。我们知道在spring aop中有前置增强、后置增强、异常增强和环绕增强,其中环绕增强的功能最为强大——它不但可以在目标方法被访问前拦截调用,还可以在调用返回前改变返回 的结果,甚至抛出异常。acegi使用环绕增强对安全对象进行保护。
    acegi通过abstractsecurityinterceptor为安全对象访问提供一致的工作模型,它按照以下流程进行工作:
    1. 从securitycontext中取出已经认证过的authentication(包括权限信息);
    2. 通过反射机制,根据目标安全对象和“配置属性”得到访问目标安全对象所需的权限;
    3. accessdecisionmanager根据authentication的授权信息和目标安全对象所需权限做出是否有权访问的判断。如果无权访问,acegi将抛出accessdeniedexception异常,否则到下一步;
4. 访问安全对象并获取结果(返回值或http响应);
5. abstractsecurityinterceptor可以在结果返回前进行处理:更改结果或抛出异常。     acegi称受保护的应用资源为“安全对象”,这包括url资源和业务类方法。我们知道在spring aop中有前置增强、后置增强、异常增强和环绕增强,其中环绕增强的功能最为强大——它不但可以在目标方法被访问前拦截调用,还可以在调用返回前改变返回 的结果,甚至抛出异常。acegi使用环绕增强对安全对象进行保护。     acegi通过abstractsecurityinterceptor为安全对象访问提供一致的工作模型,它按照以下流程进行工作:     1. 从securitycontext中取出已经认证过的authentication(包括权限信息);     2. 通过反射机制,根据目标安全对象和“配置属性”得到访问目标安全对象所需的权限;     3. accessdecisionmanager根据authentication的授权信息和目标安全对象所需权限做出是否有权访问的判断。如果无权访问, acegi将抛出accessdeniedexception异常,否则到下一步; 4. 访问安全对象并获取结果(返回值或http响应); 5. abstractsecurityinterceptor可以在结果返回前进行处理:更改结果或抛出异常。


图 6 abstractsecurityinterceptor工作流程

    安全对象和一般对象的区别在于前者通过acegi的“配置属性”进行了描述,如“/view.jsp=priv_common”配置属性就将 “/view.jsp”这个url资源标识为安全对象,它表示用户在访问/view.jsp时,必须拥有priv_common这个权限。配置属性通过 xml配置文件,注解、数据库等方式提供。安全对象通过配置属性表示为一个权限,这样,acegi就可以根据authentication的权限信息获知 用户可以访问的哪些安全对象。
    根据安全对象的性质以及具体实现技术,abstractsecurityinterceptor拥有以下三个实现类:
 filtersecurityinterceptor:对url资源的安全对象进行调用时,通过该拦截器实施环绕切面。该拦截器使用servlet过滤器实现aop切面,它本身就是一个servlet过滤器;
 methodsecurityinterceptor:当调用业务类方法的安全对象时,可通过该拦截器类实施环绕切面;
 aspectjsecurityinterceptor:和methodsecurityinterceptor类似,它是针对业务类方法的拦截器,只不过它通过aspectj实施aop切面。


  acegi版本升级的一些重大变化 
    acegi项目开始于2003年,acegi团队在发布新版本时非常谨慎,在本书写作之时,acegi最新版本为1.0.3。在此之前acegi已经发布 了10多个预览版本,由于acegi框架优异的表现,许多大型应用早在acegi 1.0正式版本发布之前(2006年5月),就已经采用acegi框架作为其安全访问控制的凯发天生赢家一触即发官网的解决方案。

    在acegi社区里,来自世界各地众多优秀的安全领域专家对acegi的改进和发展献计献策,acegi团队广泛听取并吸收各种有益的建议,将它们融入到acegi的框架中,使acegi成为构建在spring基础上企业应用的首选安全控制框架。
acegi 1.0.3版本相比于早期预览版本发生了很大的变化,对于需要进行acegi版本的项目来说,了解这一变化特别重要。下面,我们列出acegi的一些重大的升级更新:
 包名的更新:在0.9.0及之前的版本中,acegi采用net.sf.acegisecurity包名前缀,在1.0.0版本之后更改为 org.acegisecurity(hibernate也走过相同的道路,好在acegi在正式版本发布之时就完成了这种转变);

 acl模块的调整:acl模块发生了重大的调整,acegi团队接收了社区大量关于acl模块的反馈意见,重新设计了acl模块的底层结构,在性能、封装 性、灵活性上得到了质的提升。事实上,acegi使用org.acegisecurity.acls包代替了原来的 org.acegisecurity.acl包,后者将在后期的版本中删除,由于这种伤筋动骨的变化,将很难兼容原来acl模块。不过,目前基于新框架的 acl模块还没有进行充分的测试,acegi承诺在1.1.0版本发布时提供最终的实现;

 删除了contextholder及其相关类:在acegi 0.9版本中,contextholder及其相关类被彻底从acegi项目中删除。contextholder可以在多个http请求中共享同一个 threadlocal,这和spring提倡的threadlocal只应在同一线程中共享相悖。现在,acegi使用 securitycontextholder替换contextholder,它的生命周期是一个http 请求;

 使用filterchainproxy同时代理多个过滤器:在早期的版本中,acegi通过filtertobeanproxy将web.xml中的 servlet过滤器定义转移到spring容器中。这比直接在web.xml中配置servlet过滤器要方便一些,但是acegi框架往往需要定义多 个servlet过滤器,使web.xml配置文件变得冗长难看。在acegi 0.8版本中提供filterchainproxy,它可以同时代理多个servlet过滤器并保证过滤器的顺序。因此在新版本中, filterchainproxy成为推荐的选择。

    小结
    acegi是spring项目下一个成熟的安全访问控制框架,它允许利用了spring ioc的aop的功能完成安全对象的访问控制。在acegi框架中,securitycontextholder处于非常核心的位置,它是存放认证管理器 用户安全信息securitycontext的“容器”,securitycontext保存着用户安全访问控制所需的信息,直接被访问决策管理器使用。 httpsessioncontextintegrationfilter通过在securitycontextholder和httpsession中 摆渡securitycontext,使多个请求线程可以共享同一个securitycontext。


草儿 2007-12-16 21:29
]]>
java学习笔记 - 基础篇http://www.blogjava.net/mlh123caoer/archive/2007/12/16/168109.html草儿草儿sun, 16 dec 2007 13:04:00 gmthttp://www.blogjava.net/mlh123caoer/archive/2007/12/16/168109.htmlhttp://www.blogjava.net/mlh123caoer/comments/168109.htmlhttp://www.blogjava.net/mlh123caoer/archive/2007/12/16/168109.html#feedback0http://www.blogjava.net/mlh123caoer/comments/commentrss/168109.htmlhttp://www.blogjava.net/mlh123caoer/services/trackbacks/168109.html一、面向对象的编程概念
观察现实对象两个性质:状态、行为。
面向对象的好处:模块化、隐藏信息。
继承:子类从父类(超类)继承状态和行为;子类可以改变父类的状态和行为。
接口:是无关对象用来进行彼此交互的设备;一个对象可以实现多个接口。
二、语言基础
变量
对象将它的状态存储在变量中;变量是一个由标识符命名的数据项。
声明变量的形式:<类型> <名称>
java语言两大数据类型
原始类型数据(基本数据类型)、引用类型。
原始类型数据是不能再分解的数据类型(8种:byte、short、int、long、float、double、char、boolean),数据在作为函数参数是以“传值”方式工作的;
整数           byte:1字节长的整数;8位有符号的二进制补码整数
                  short:短整数;16位有符号的二进制补码整数
                  int:整数;32位有符号的二进制补码整数
                  long:长整数;64位有符号的二进制补码整数
实数            flat:单精度浮点数;32位ieee 754浮点数
                  double:双精度浮点数;64位ieee 754浮点数
其他类型 char:单一unicode字符;16位unicode字符
                  boolean:布尔值(true或false);8位/1位(8位空间,1位数据)
     
引用类型包括类(class)、接口(interface)、数组(array)。引用类型有时也称复合类型,它是可以分解为基本类型的数据类型,其数据在作为函数参数时是以“传址”的方式工作的。与原始类型相对,引用类型变量的值是对由此变量代表的一个值或一组值的引用(也就是地址)。
如:
原始类型 int a = 3; //“a”表示变量名称,“3”表示变量值;如果写成“final int a = 3;”,“final”表示不可改变值,所以这里的3(变量值)不可变
引用类型 staing b = "hello java"; //“b”表示引用名称,“hello java”表示字浮串数组
流程控制语句
循环         while、do - while、for
判断         if - else、switch - case
异常处理 try – catch – finally、throw
分支         break、continue、label :、return
循环:
while和do – while语句:while语句用于在条件保持为true时反复执行一个代码块;
do – while语句的代码块中的语句至少被执行一次。
for语句:
for语句提供一种迭代某个范围内的值的紧湊方式。
判断:
if – else 语句:if语句使程序能够根据某些条件有选择地执行其他语句;
switch语句用于根据一个整数表达式有条件的执行语句;
注意:必须要有明确的break语句,否则,流程控制将一个接一个的经过后面的case语句
比较if语句和switch语句(if语句可以用于根据某范围的值或条件进行判断;switch语句只用于根据单个整数值进行判断)。
异常处理语句:
当程序发生错误时,程序会抛出一个异常,程序的正常流程被中断;
分支语句:break、continue语句可以和标签语句一起使用,也可以没有标签;
标签是放在一个语句前的标识符,标识符后跟一个冒号;
continue 语句:continue语句用于跳过for、while、do – while循环的当前迭代;
return 语句:返回一个值;不返回值。
三、对象基础和简单数据结构
创建对象:声明一个变量来引用变量;对对象进行实例化(构造器);
用new操作符和构造器从类创建对象。
两种方式使用一个对象:引用一个对象的变量;调用对象的方法。
字符和字符串
java平台包含三个用于处理字符数据的类:
character:包含单个字符值;定义了一些可用于操作和检查单字符数据的方法(character类的对象实例包含单个字符值,可用character对象替代基本类型char)。
string:这个类用于处理由多个字符组成的不可改变的数据。
stringbuffer:存储和操作由多个字符组成的可改变的数据。
字符串和字符串缓冲区
string:不能改变自身的值。
stringbuffer:用于将被修改的字符串。
得到字符串或字符串缓冲区的长度
length方法:返回字符串或字符串缓冲区中包含的字符数。
capacity方法:stringbuffer特有;返回分配给字符串缓冲区的空间量,而不是被使用的空间量。
string类没有capacity方法,因为字符串不能改变。
通过索引从字符串或字符串缓冲区得到字符
charat(int)方法:得到字符串或字符串缓冲区某索引位置上的字符。
注意:第一个字符串的索引为0;最后一个字符的索引为length – 1;
substring(int), substring(int,int):从字符串或字符串缓冲区中得到多个字符。
在字符串中搜索字符或子字符串
string类提供了两个访问器方法:indexof 方法从字符串的开头向前搜索;lastindexof 方法从字符串的末尾向后搜索;
stringbuffer类不支持indexof和lastindexof方法。
操作字符串
string类有几个方法看起来可以修改字符串。当然,字符串是不能被修改的,所以,这些方法实际上是创建并返回包含结果的另一个字符串。
修改字符串缓冲
字符串缓冲是可以修改的,stingbuffer提供了几个用于修改字符串缓冲区的数据的方法;
如果修改字符串缓冲区的操作造成字符串缓冲区的大小超出它的当前容量,那么字符串缓冲区会自动分配更多的内存。
字符串和编译器
编译器在很多地方自动的使用string和stringbuffer类来处理字符串直接值和字符串连接;
编译器为它遇到的每个字符串直接值自动创建一个新的string对象;
可以使用 操作符连接字符串。
四、类和继承
实现继承:extends关键字
为类提供构造器
构造器用于初始化类的新对象:构造器不是方法,没有返回类型;构造器的声明中可以使用以下访问说明符:
–      private
–      protected
–      public
–      无说明符
将信息传递给方法或构造器
参数类型;
参数名称;
按值传递:参数是原始类型,方法不能改变其值;参数是引用类型,方法不能改变其引用,但可以改变引用对象的值。
从方法返回值
在方法声明中声明方法的返回类型;eturn语句返回值的数据类型必须匹配方法声明的返回类型;方法可以返回原始类型,也可以返回引用类型。
使用this关键字
在实例方法或构造器中,this引用当前对象,也就是被调用的方法或构造器所属的对象;在构造器中,还可以使用this关键字调用相同类中的另一个构造器。
控制对类成员的访问
访问说明符决定其他类是否可以使用某个成员或调用某个方法。java编程语言支持四种用于成员变量和方法的访问级别:private、protected、public和(如果没有指定)package。
访问级别
private:类
无说明符:类、包
protected:类、包、子类
public:类、包、子类、所有类
实例和类成员的初始化
可以在声明的同时进行初始化,但是有一些限制:
–      必须以一个赋值语句表达初始化方式
–      初始化表达式不能调用任何被声明为抛出非运行时异常的方法
–      如果初始化表达式调用一个抛出运行时异常的方法,那么它不能进行错误恢复
使用静态初始化块初始化类成员;
实例成员的初始化。
覆盖和隐藏方法
覆盖(override)(实例方法):
–      子类中的 个实例方法与超类中的实例方法具有相同的标记和返回类型
–      方法的标记:名称,参数数量、参数类型
–      覆盖方法可以具有不同的throws子句
–      覆盖方法的访问说明符允许访问限制只能比被覆盖方法的多
–      子类不能覆盖超类中声明为final的方法
–      子类必须覆盖超类中声明为abstract的方法,否则子类本身必须是抽象的
覆盖和重载(overload);
覆盖和隐藏(类方法)。
隐藏成员变量
在类中,如果一个成员变量与超类中的成员变量同名(即使它们的类型不同),那么它隐藏超类成员变量;
在子类中,不能通过简单名称引用超类中的成员变量,而是必须通过super访问它;
代码可读性差,不建议隐藏成员变量。
使用super
使用super调用被覆盖的方法;使用super调用被隐藏的成员变量;使用super在构造器中调用超类的构造器。
使用object的后代
每个类都是object类的直接后代或间接后代;
object类定义了所有类都必须有的基本状态和行为:
–      clone
–      equals和hashcode
–      finalize
–      tostring
–      getclass
–          notify、notifyall和wait
编写final类和方法
将类声明为final,即类不能被子类化:
–      通过防止系统被改版来提高系统的安全性
–      出于设计上的原因,某些类不需要子类
final方法:
–          在方法声明中使用final关键字表示这个方法不能被子类覆盖
编写抽象类和方法
抽象类:
–      表示一个抽象的概念,不应该被实例化
–      abstract关键字
抽象方法:
–      没有实现的方法,允许子类提供这些方法的实现细节
–          如果抽象类只包含抽象方法,那么它应该被定义成接口
创建类的小结    
类的定义有两个部分:
–     类声明
–     类体:成员变量、方法、构造器
访问说明符——控制对成员变量和方法的访问方式;
类变量、类方法,static方法关键字
实例成员、实例方法
五、接口和包
实现接口:implements关键字
类可以实现多个接口,implements关键字后面跟以逗号分隔的接口列表;
如果有extends关键字,implements子句应该在extends子句的后面;
类要么必需实现接口及其超接口中的所有方法,要么类必须被声明为抽象的;
类中的方法标记(名称和参数列表)必须匹配接口中的方法标记。
将接口作为类型使用
在定义了一个新接口是,就是在定义一个新的引用数据类型;
定义可一用接口,实例化是必须用类。
接口不能改变
从语法的角度看,接口可以被改变;
从设计的角度看,一个已经在系统中被广泛使用的接口,不能轻易被改变;
如果改变了接口,实现原接口的类都将无法工作;
应该尽可能的考虑接口所提供的方法;
如果要改变接口,用继承的方式定义新的接口。
接口小结
接口定义了一种功能描述,定义了对象之间进行通讯的协议;
接口定义由接口声明和接口体组成;
接口包含一组方法的声明,但没有方法的实现;
实现接口的类必须实现接口中声明的所有方法;
接口名称可以作为数据类型使用。
创建和使用包
创建包:
–     将package语句作为类或接口源代码文件中的第一条语句
–     类或接口的源代码和类文件的路径名与包的名称相对应
使用另一个包中的接口或类:
–     类或接口的限定名
–     导入类或接口
–     导入类或接口所在的整个包
六、使用异常处理错误
什么是异常:异常(exception)是在程序执行期间中断指令的正常流程的事件。
try
try {
       statements
}
statements是包含一个或多个可能抛出异常的语句。
catch
每个catch块是一个异常处理器,它处理由其参数指定的异常类型
try{
       ......
} catch(exceptiontype name) {
       ……
} catch (exceptiontype name) {
       ……
}
finally
finally块是可选的,它提供一种机制,其目的是无论try块中是否发生异常都确保进行清理工作;
无论是否发生异常,都会执行finally块中的代码。
throw语句
throw语句需要一个参数:一个可抛出的(throwable)对象;可抛出对象是throwable类的子类。
throwable类及其子类
throwable类有两个直接子类:
–     error
–     exception
error:
–     java虚拟机的动态链接故障或其它“硬”故障,一般的程序不应该捕获error,也不能抛出error
exception:
大多数程序抛出并捕获从exception类派生的对象。exception表示发生了一个问题,但并不是严重的系统问题。你写的多数程序将抛出并捕获exception(而不是error)。
–     exception表示发生了一个问题,但并不是严重的系统问题
–     exception的不同子类表示可能发生的各种异常
异常的优点:将错误代码与“常规”代码分离;将错误沿调用堆栈向上传递;对错误类型进行分组和区分。
异常的小结
程序可以使用异常表明发生了错误;
程序可以使用throw语句抛出异常;
异常是一个对象(throwable的子类);
程序可以使用try、catch语句finally来捕获异常:
–     try语句标识出可能发生的异常
–     catch语句标识出异常处理器
–          finally代码块不论抛出异常与否都会被执行,适用于清理工作
七、线程:同时执行多个任务
只要用到线程就必须继承或接口:thread
只要用到线程就必须要用run方法。
什么是线程:
–     线程是程序内的一个单一的顺序控制流程
–     线程本身不是程序,不能单独运行,它在一个程序内运行
–     多个线程可以同时运行,在一个程序内执行不同的任务
定制线程的run方法
run方法执行线程的工作;
run方法实现了线程的运行行为;
run方法可以做任何可以用语句实现的事。
为线程提供run方法:
–     继承thread类,并覆盖run方法
–     实现runnable接口
thread类进行子类化和覆盖run
public class simplethread extends thread {
       public simplethread(string str) {
           super(str);
       }
       public void run() {
           for (int i = 0; i < 10; i ) {
               system.out.println(i " " getname());
               try {
                   sleep((long)(math.random() * 1000));
               } catch (interruptedexception e) {}
           }
           system.out.println("done! " getname());
       }
}
实现runnable接口:如果一个类已经继承了另一个类,那么要想实现线程就必须实现runnable接口。
在线程中结果是随机产生的,如果想锁定对象就要使用synchronized关键字意思为锁定方法所有在的对象。在对象被解锁前,其他线程不能调用相同对象上的被同步的方法。意思为执行一个对象后激活另一个对象,自身暂时睡眠,等待另一个对象执行完毕,在执行下一步,反复如此。
八、io:读和写

如何使用管道流:管道用于将一个线程的输出连接到另一个线程的输入

如何封装流:流经常被以下的这种形式封装起来,以便组合许多流的各种功能

对象的串行化:java.io包中的两个流——objectinputstream和objectoutputstream是字节流,他们的工作与其他输入和输出流类似。但他们的特殊之处在于它们可以读写对象。

对对象进行串行化:如果将一个不能串行化的对象传递给writeobject方法,那么它抛出一个notserializable exception。对象只能在它的类实现了serializable接口的情况下被串行化。

为类提供对象串行化:只有在对象的类实现了serializable接口情况下,对象才是可串行化的。所有,如果想要对你的类的实例进串行化,这个类必须实现serializable接口。serializable接口是一个空接口,也就是说,他不包含任何方法声明;它的作用只是表明这个类的对象可以被串行化。

i/o复制小程序(copy.java),如下:

import java.io.file;
import java.io.filereader;
import java.io.filewriter;
import java.io.ioexception;
//以上是此程序用到的io类的包,也可以用“import java.io.*”

public class copy {
       public static void main(string[] args) throws ioexception {
file inputfile = new file("d:\\temp\\helloworld.java"); //目标文件路径,java中路径地址只能用“\\”或“/”不能使用“\”
file outputfile = new file("d:\\temp\\outagain.java"); //复制后新文件保存路径

           filereader in = new filereader(inputfile);
           filewriter out = new filewriter(outputfile);
           int c;

           while ((c = in.read()) != -1) //一直循环到0表示已经复制完毕,所以这里使用不等于负1
              out.write(c);

           in.close(); //关闭读文件对象
           out.close(); //关闭写文件对象
       }



草儿 2007-12-16 21:04
]]>
就业“五险一金”详解http://www.blogjava.net/mlh123caoer/archive/2007/12/16/168090.html草儿草儿sun, 16 dec 2007 09:54:00 gmthttp://www.blogjava.net/mlh123caoer/archive/2007/12/16/168090.htmlhttp://www.blogjava.net/mlh123caoer/comments/168090.htmlhttp://www.blogjava.net/mlh123caoer/archive/2007/12/16/168090.html#feedback0http://www.blogjava.net/mlh123caoer/comments/commentrss/168090.htmlhttp://www.blogjava.net/mlh123caoer/services/trackbacks/168090.html关于五险一金:什么是五险一金
五种保险包括:养老保险、医疗保险、失业保险、工伤保险和生育保险;
“一金”指的是住房公积金。
其中养老保险、医疗保险和失业保险,这三种险是由企业和个人共同缴纳的保费;工伤保险和生育保险完全是由企业承担的,个人不需要缴纳。这里要注意的是“五险”是法定的,而“一金”不是法定的。
“五险一金”的缴费比例是什么?
目前北京地区:
养老保险缴费比例:单位20%(其中17%划入统筹基金,3%划入个人帐户),个人8%(全部划入个人帐户);
医疗保险缴费比例:单位10%,个人2% 3元;
失业保险缴费比例:单位1.5%,个人0.5%;
工伤保险根据单位被划分的行业范围来确定它的工伤费率;
生育保险缴费比例:单位0.8%,个人不交钱。
住房公积金缴费比例: 根据企业的实际情况,选择住房公积金缴费比例。但原则上最高缴费额不得超过北京市职工平均工资300%的10%。
(统筹基金即:在养老保险制度从国家—单位制逐渐向国家—社会制转变的过程中需要国家统筹,以解决经济发展不平衡及人口老龄化等问题。(1)以企业缴费为主建立社会统筹基金2)由职工和企业缴费为主建立个人帐户3)政府负担养老保险基金的管理费用。这种社会统筹和个人帐户相结合的半基金制有利于应付中国人口老龄化危机,逐渐分散旧制度到新制度的转轨成本,逐步实现由企业养老保险制度到个人养老保险制度的转变。)
四险一金的缴纳额度每个地区的规定都不同,基数是以工资总额为基数。有的企业在发放时有基本工资,有相关一些补贴,但有的企业在缴纳时,只是基本工资,这是违反法律规定的。具体比例要向当地的劳动部门去咨询。
关于养老保险、失业保险和医疗保险的支取,是在法定允许的情况下才可以领取,是由社保登记部门来发放,比如“养老保险,要达到法定的年龄才可以,失业保险金的领取也是要具备条件,比如你到户口所在地的街道办事处办理失业证明,同时又办了求职证,就是指你失业以后还必须有求职的意愿,这样的条件才可以领取。如果失业之后你不想工作,那么就不能给你发保险金。另外,养老金和失业金是不能同时享受的。
•试用期内是否享有保险?
在试用期内也应该有享受保险,因为试用期是合同期的一个组成部分,它不是隔离在合同期之外的。所以在试用期内也应该上保险。另外,企业给员工上保险是一个法定的义务,不取决于当事人的意思或自愿与否,即使员工表示不需要交保险也不行,而且商业保险不能替代社会保险。养老保险的享受待遇:累计缴纳养老保险15年以上,并达到法定退休年龄,可以享受养老保险待遇:
1、按月领取按规定计发的基本养老金,直至死亡。
基本养老金的计算公式如下:
基本养老金=基础养老金+个人账户养老金+过渡性养老金
=退休前一年全市职工月平均工资×20%(缴费年限不满15年的按15%)+个人账户本息和÷120+指数化月平均缴费工资×1997年底前缴费年限×1.4%。
2、死亡待遇。(1)丧葬费(2)一次性抚恤费(3)符合供养条件的直系亲属生活困难补助费,按月发放,直至供养直系亲属死亡。
注意:养老保险应尽量连续缴纳,根据有关文件规定,凡企业或被保险人间断缴纳基本养老保险费的(失业人员领取失业保险金期间或按有关规定不缴费的人员除外),被保险人符合国家规定的养老条件,计算基本养老金时,其基础性养老金的计算基数,按累计间断的缴费时间逐年前推至相应年度上一年的本市职工平均工资计算(累计间断的缴费时间,按每满12个月为一个间断缴费年度计算,不满12个月不计算)
举例来说吧:
如果你2020年退休,正常你的基础养老金是2019年的社会平均工资×20%,但是如果你在退休之前养老保险中断了30个月,就是中断了2.5年,按2年算,你的基础养老金就是2017年社会平均工资×20%
医疗保险的享受待遇
1、门、急诊医疗费用
在职职工年度内(1月1日-12月31日)符合基本医疗保险规定范围的医疗费累计超过2000元以上部分;
2、结算比例:  
合同期内派遣人员2000元以上部分报销50%,个人自付50%;
在一个年度内累计支付派遣人员门、急诊报销最高数额为2万元。
3、 参保人员要妥善保管好在定点医院就诊的门诊医疗单据(含大额以下部分的收据、处方底方等),作为医疗费用报销凭证;  
4、 三种特殊病的门诊就医:参保人员患恶性肿瘤放射治疗和化学治疗、肾透析、肾移植后服抗排异药需在门诊就医时,由参保人就医的二、三级定点医院开据"疾病诊断证明",并填写《北京市医疗保险特殊病种申报审批表》,报区医保中心审批备案。这三种特殊病的门诊就医及取药仅限在批准就诊的定点医院,不能到定点零售药店购买。发生的医疗费符合门诊特殊病规定范围的,参照住院进行结算;
5、住院医疗
● 住院押金:符合住院条件的参保人员,在收入住院时,医院收取参保人员部分押金,押金数额由医院根据病情按比例确定。如被派遣人员单位和参保人员未能按时足额缴纳医疗保险费的,住院押金由派遣人员个人全额垫付;
● 结算周期:参保人员住院治疗每90天为一个结算周期:不超过90天的,每次住院为一个结算周期;
● 恶性肿瘤患者门诊放射治疗和化学治疗、肾透析、肾移植后服抗排异药、患有精神病需常年住院的患者其发生的医疗费用每360天为一个结算周期;
● 参保人员在定点的社区卫生服务中心(站)的家庭病床治疗发生的医疗费用,每90天为一个结算周期;
● 参保人员出院或阶段治疗结束时,需由派遣人员个人先与医院结清应由派遣人员个人自费和自付的费用,应由基本医疗保险统筹基金和大额医疗互助资金支付的医疗费用,由医院向医保中心申报审核、结算;  
● 参保人员住院治疗,符合基本医疗保险规定范围的医疗费的结算,设定基本医疗统筹基金支付起付线和最高支付额;
● 起付线第一次住院为1300元,以后住院为650元,最高支付限额为5万元;超过最高支付上限的(不含起付标准以下以及派遣人员个人负担部分)大额医疗费用互助
资金支付70%,派遣人员个人负担30%。在一个年度内最高支付10万元。住院费用的结算标准,在一个结算周期内按医院等级和费用数额采取分段计算、累加支付的办法。
(各项比例有调整时,按新的标准执行)
注意啊:非因公交通事故,医保是免责的!
失业保险享受待遇
失业保险连续缴纳一年以上,档案退回街道后。可以在街道享受失业保险待遇。
1.失业保险金:是指失业保险经办机构按规定支付给符合条件的失业人员的基本生活费用,它是最主要的失业保险待遇。失业保险待遇根据北京市相关文件执行;
2. 领取失业保险金期间的医疗补助金:是指支付给失业人员领取失业保险金期间发生的医疗费用的补助。根据北京市有关政策法规执行;
3. 领取失业保险金期间死亡的失业人员的丧葬补助金和其供养的配偶、直系亲属的抚恤金按有关规定执行。
工伤保险享受待遇
在合同期内不幸发生意外,需向企业索取情况说明,并加盖企业公章,尽快(最好在三个工作日内)申请工伤认定并需提供下列材料:
1、初次治疗诊断书或住院病历;
2、 职业病诊断证明(原件、复印件各一份);
3、 交通事故需提供交通大队的事故裁决书或交通部门的交通事故证明;
4、 身份证复印件;
5、 有效期内的劳动合同原件
生育保险享受待遇
可以报销与生育有关费用  
报销范围包括,生育津贴、生育医疗费用、计划生育手术医疗费用、国家和本市规定的其他与生育有关的费用。  
生育津贴按照女职工本人生育当月的缴费基数除以30再乘以产假天数计算。生育津贴为女职工产假期间的工资,生育津贴低于本人工资标准的,差额部分由企业补足。  
生育医疗费用包括女职工因怀孕、生育发生的医疗检查费、接生费、手术费、住院费和药品费。计划生育手术医疗费用包括职工因计划生育发生的医疗费用。
现在要求,医保缴够20年,养老交够15年才有资格领养老金和享受退休后的医保报销。

然后还有一点在网上查不出来的东西:
首先 如果去非户口所在地工作 比如原户口在北京 而去深圳工作 无论户口是否转过去深圳 万一将来不在深圳工作了 那么在深圳交的五险一金 能否转出来 就很成问题!因为现在全国五险一金这个东西没有联网 只有北京市内的联网了 就是说 如果你本来在北京的一家单位工作 几年后跳到另外的一个北京单位工作 这样五险一金是没有问题的 但是从其他省市跳的话 转的时候会很麻烦 能不能转还成问题
关于前面提到的五险中的三险是企业和个人共同交纳 意思是这样 比如对于养老保险 比如你的工资是2000 那么你个人要交纳8% 单位给交纳15%(以上数据都是假设), 这些钱都存到你的一个帐户里 等到你满足了可以享受养老保险的时候 才可以支取(具体条件见前面) 然后考虑到上面一段写的内容 万一要是转不了的话 那么你的钱就白交了 还取不出来  
所有企业和个人共同交纳的部分都是这样的 住房公积金也是这样 比如按照工资乘以比例 假如你每个月要交500 单位给你交1000 如果你跳槽了 这些钱又不能转 那么你每个月500就白交了 也不能取出来——因为你不符合享受住房公积金的条件,只有到买房子的时候才能取出来。
那么有人可能会问了 那我如果不打算在刚开始工作的城市发展一辈子 为了防止将来转不出来五险一金 我能不能不交纳?答案是不能 至少三险那部分是国家强制必须上的 所以比较无奈。另外关于五险一金上缴的基数,就是拿你哪部分工资乘以那个百分比的问题,是这样的,首先来看一下工资的构成:基本工资+各项福利 奖金,很多企业都是只按照基本工资上五险一金的,因为如果按照三部分来算的话,你个人上的多一些,但是单位给你上的更多(企业和个人共同交纳的五险一金 都是个人交小头 单位交大头) 所以很多企业为了给自己省钱 基数都是能少则少,另外对于福利部分 有很大猫腻 这个大家将来签合同的时候一定要问!
前面说过,住房公积金也是企业和个人共同交纳的,但是企业给你交的那部分,早晚也是你的(只要你将来买房的话 是可以一次性取出来的)。比如说,你每个月按照比例交500,单位可能给你贴1000,虽然在你买房子之前,这1500是取不出来的,但理论上说那1000也是给你的,那么有的企业就会把那1000算做给你的福利,其实不应该算的 !!!! 因为那1000是虚的,是你在不买房子的时候,就取不出来的,所以大家在签的时候,要问清楚这福利里面有没有包括住房公积金,小心啊小心!

草儿 2007-12-16 17:54
]]>
2008年 大工it应届硕士待遇情况http://www.blogjava.net/mlh123caoer/archive/2007/12/08/166201.html草儿草儿sat, 08 dec 2007 00:48:00 gmthttp://www.blogjava.net/mlh123caoer/archive/2007/12/08/166201.htmlhttp://www.blogjava.net/mlh123caoer/comments/166201.htmlhttp://www.blogjava.net/mlh123caoer/archive/2007/12/08/166201.html#feedback7http://www.blogjava.net/mlh123caoer/comments/commentrss/166201.htmlhttp://www.blogjava.net/mlh123caoer/services/trackbacks/166201.html  
上很少看到这样的帖子和说明,反正自己也不找工作了,全部说一遍,万一有人看到我这 
 
帖子了,也算对他有所交待哈哈,待遇在我这里全部可以看到,感觉网上的帖子抄来抄去 
 
,鄙视之,所以打算自己写个帖子,除去那些谣言。常常听到人说这个公司待遇怎么差, 
 
但事实上却是很好。说这个公司待遇怎么好,待遇却是很差。所以决定自己以自己的经历 
 
和周围同学的待遇情况,将所知道的公司的待遇,公司招聘人员的态度,公司的好坏,招 
 
聘诚信度全部列出来,当然是指2008年的校园招聘。 
 
1。浙大网新待遇: 9000,8000,7000*13,分为几个级别,主要看你面试和笔试成绩,然后 
 
还有两个月的浮动奖金,住房公积金也有。保险也有,和微软一起工作,工作后应该可以 
 
跳到微软,感觉笔试组织的很混乱我当时收到电话去笔试结果竟然没有试卷去抢了份题答 
 
了,迟到了30多分钟答题。 
 
2。美国道富:很轻松,待遇7500。几个月知道,同学有拿到的也有去的,不过感觉并没有 
 
想象中的那么多。 
 
3。神州数码:5000*16个月,其他不知道不过不少人把它拒了或者毁约不知道为什么,分 
 
笔试和面试。 
 
4。珠海矩力:6500*14个月还有年终奖感觉还可以,招聘从组织上来说不错。 
 
5。深圳睿初:10k*13,听说是被amsl(阿斯麦)给收购了,面试3次全是技术和算法,最 
 
后还有一轮美国总部的面试。感觉面试管态度很好,而且说2个星期后给通知就给通知了, 
 
总的来说诚信度还可以。 
 
6。ibm(cdsl):7500*13 800*12,同学有五个去那边了,四个做硬件的,一个做软件的。 
 
 
 
7。趋势科技:offer上说10w多一点,有一个同学去了,也有一个同学把它给拒了,面试听 
 
说人也很好。 
 
8。大唐:8-10w,承诺是给16个月工资,同学有拿到offer的,也有毁约的。 
 
9。百度:今年给16w,商务搜索部门和市场部门差不多都这个价。同学拿到offer了,因为 
 
要实习老板不让走,把它拒了,来得比较早,笔试场面很宏大。牛人也n多。不过感觉时间 
 
太久了,过了一个多月才给回复。要么据信要么给offer。要实习一个月。 
 
10。intel今年不知道为什么很少,才给5000,我同学直接拒掉了。 
 
11。realtek:8。5k*13,住房公积金占22%,其他五险什么都有,还有很多其他待遇,而 
 
且毁约也不是很难,当然除非你很猛,才会毁约。比如说拿到nvidia的offer。 
 
12。台达能源(上海)研发中心:6k*17,当然这里面包括了奖金,真正拿到的应该没那么 
 
多。不过公司包吃,到是可以省很多钱。相当于7k*17吧,反正师兄在里面是税后6。2k, 
 
税前应该有8k多吧。招聘人员态度也相当好。 
 
13。杭州eci,来学校招聘时你写多少就给多少,当时煞笔的很,感觉写个6.5k还挺不好意 
 
思,结果写那么多就直接给了,还加2k的伙食和住房补贴。所以如果有招聘要写期望待遇 
 
的就多写点,招聘人员态度很好。 
 
14。中兴:很少才5.5k,在实习期才4.5k,做海外销售可能多一点,而且感觉招聘的人很 
 
拽似的,明明说你可以了,结果却让你久等或者当候补,当时却不说清楚。鄙视之,毁约 
 
也很麻烦。 
 
15。华为:工资5500 1000,面试整体感觉不太好,就是走个形式,给你考虑得时间很少, 
 
而且如果你当时没有协议就不让你签了,丝毫不给机会让我毁约。毁约很麻烦 
 
16。网易待遇:同学拿到offer了,面试官问:你期望待遇多少?他咬咬牙说:8k,结果直 
 
接说没问题。可见待遇在这个之上,年薪11w左右,而且给你20天的考虑时间,总体来说不 
 
错。 
 
17。thomson,不知道给多少,tencent据说是硕士7500,一年能拿10w多一点,不过腾讯毁 
 
约起来很是麻烦,到明年4月份才给你寄,所以签之前考虑清楚,因为这样好多同学都拒它 
 
。 
 
18。深圳宇龙通信:招聘人员态度很好,承诺是年薪102800.不过硕士一面就给offer,所 
 
以感觉是相当的假,网上说是经常加班,不过没有去所以不作评论。 
 
19。中国平安保险:待遇5.8k 其他一些补助和补贴每月。年薪8w左右(硕士)。不过要用 
 
java linux oracle.对于搞嵌入式的来说不是很适合,不过硕士都可以学习的,在前两个 
 
月去平安大学培训,所以违约费用很高,毕竟人家培训过你。 
 
20。威盛:待遇估计7500左右。 
 
21。深圳迈瑞:宣传上说是10w以上,待遇还可以在电子生物医疗方面排名前四。2005年还 
 
是第一位,前两个星期拉去山上培训。 
 
22。富士康:公司非议很多,印象不是很好,这边基本上没人去考虑,就不做评论反正没 
 
有去管它 
 
23。步步高:试用期是4900,转正后是5200还有一些年终奖。 
 
24。华硕:6500*12 年底奖金和项目奖金,不过没有人签,应该名声不好。 
 
25。阿尔卡特青岛朗讯:7500*13.面试就2面,英语口语好,其他的不是太差就给offer, 
 
前3-6个月会去美国搞技术培训,至少面试官这样跟我说的,具体的能不能做到不知道了。 
 
招聘人员态度很好,感觉很nice,其实我很想去的,毕竟以后跳到别的外企也轻松点。但 
 
是老婆不允许!!!!气死我了 
 
26。超图(5000或者4000看你做核心开发还是其他开发),久其软件(4000的基本工资) 
 
,中体彩(4500基本工资 700补助)(北京)。 
 
27。中电14所(最鄙视,妈的当时告诉我(原话):"我们拿的笔华为多,它们只是刚开始 
 
那么多。我们越来越多") 
 
28。云南电力:3000块。 
 
29。深圳招商融博(10w左右) 
 
30。上海sim(晨讯科技)工资5k,加上其他的补贴年薪估计是7。2w到8w之间吧,总体来 
 
讲待遇很差,师兄有在里面的。 
 
31。上海先锋:硕士工资给7k,具体其他不太清楚了。 
 
32。应用材料(am):工资很一般不是很多,5k*16?不清楚(呵呵看过两天给不给offer再说 
 
。)不过听说出差费用很高,可以拿到2w/月了,而且面试时面试官说他们基本上50%的时 
 
间在国外,可见出差的比例很大.软件开发面试是几个老外。 
 
33。飞索半导体(spansion)面试态度很好,面试几次都送礼物,而且最后一次请我们吃 
 
了个饭哈哈。那个老总很nice,以前在微软做主管。技术人也很nice. 
 
据说待遇(去年去的师兄):7k*13,其他的具体保险公积金等不知道怎么算的。不过飞索 
 
是亚洲最佳雇主不是盖的,还是很人道的,我也体验过了呵呵。 
 
34。中科院光电研究院:工资5k,解决北京户口。 
 
35。中科大洋:听说是工资7k,而且解决北京户口,晕,都没听过,不过同学有那到,不 
 
知道去了没有。北京灵图,工资6k左右,不过听说一直在裁员。 
 
36。 
 
总体来说,对于计算机的硕士来讲,公司居中的一般来讲给的钱在8w-17w之间,当然看个 
 
人能力了。不过感觉还是搞金融的爽,工资:60w年薪,至少,我复旦同学就是摩根银行给 
 
的就是月薪5w。 
 
所以感觉人跟人其实没必要比,什么做好自己就行。先写到这儿了,有时间要是想起来了 
 
再继续补充吧。 


草儿 2007-12-08 08:48
]]>
想象5年后的你http://www.blogjava.net/mlh123caoer/archive/2007/10/29/156587.html草儿草儿mon, 29 oct 2007 01:51:00 gmthttp://www.blogjava.net/mlh123caoer/archive/2007/10/29/156587.htmlhttp://www.blogjava.net/mlh123caoer/comments/156587.htmlhttp://www.blogjava.net/mlh123caoer/archive/2007/10/29/156587.html#feedback4http://www.blogjava.net/mlh123caoer/comments/commentrss/156587.htmlhttp://www.blogjava.net/mlh123caoer/services/trackbacks/156587.html分享一个故事   ______ 想象5年后的你   ( 很多人看了很受启迪!!!!!!)

 
今天在一个朋友的msn space里看到一个故事,由于原文已是不具名,谁人所写,是否真实已经无从考究,不过个人觉得真的不错,很想分享一下。

                 
想象5年后的你

 
让我与你共同分享一段小故事,或许在这个阶段,可以很实际地让我们走出目前的困境

 
一九七六年的冬天,当时我十九岁,在休斯顿太空总署的大空梭实验室里工作,同时也在总署旁边的休斯顿大学主修电脑。纵然忙于学校、睡眠与工作之间,这几乎占据了我一天二十四小时的全部时间,但只要有多余的一分钟,我总是会把所有的精力放在我的音乐创作上。

 
我知道写歌词不是我的专长,所以在这段日子里,我处处寻找一位善写歌、词的搭档,与我一起合作创作。我认识了一位朋友,她的名字叫凡內芮(valerie johnson)。自从二十多年前离开德州后,就再也没听过她的消息,但是她却在我事业的起步时,给了我最大的鼓励。仅十九岁的凡內芮在德州的诗词比赛中,不知得过多少奖牌。她的写作总是让我爱不释手,当时我们的确合写了许多很好的作品,一直到今天,我仍然认为这些作品充满了特色与创意。

 
一个星期六的周末,凡內芮又热情地邀请我至她家的牧场烤肉。她的家族是德州有名的石油大亨,拥有庞大的牧场。她的家庭虽然极为富有,但她的穿着、所开的车、与她谦诚待人的态度,更让我加倍地打从心底佩服她。凡內芮知道我对音乐的执着。然而,面对那遥远的音乐界及整个美国陌生的唱片市场,我们一点管道都没有。此时,我们两个人坐在德州的乡下,我们哪知道下一步该如何走。突然间,她冒出了一句话:

  " visualize
what you are doing in 5 years﹙想像你五年后在做什么?﹚"

 
我愣了一下。

 
她转过身来,手指着我说:"嘿!告诉我,你心目中最希望五年后的你在做什么,你那个时候的生活是一个什么样子?"我还来不及回答,她又抢着说:"別急,你先仔细想想,完全想好,确定后再说出来。"我沉思了几分钟,开始告诉她:"第一,五年后,我希望能有一张唱片在市场上,而这张唱片很受欢迎,可以得到许多人的肯定。第二,我住在一个有很多很多音乐的地方,能天天与一些世界一流的乐师一起工作。"

 
凡內芮说:"你确定了吗?"

 
我慢慢稳稳地回答,而且拉了一个很长的yesssssss

 
凡內芮接着说:"好,既然你确定了,我们就把这个目标倒算回来。如果第五年,你有一张唱片在市场上,那么你的第四年一定是要跟一家唱片公司签上合约。"

  "
那么你的第三年一定是要有一个完整的作品,可以拿给很多很多的唱片公司听,对不对?"

  "
那么你的第二年,一定要有很棒的作品开始录音了。"

  "
那么你的第一年,就一定要把你所有要准备录音的作品全部编曲,排练就位准备好。"

  "
那么你的第六个月,就是要把那些没有完成的作品修饰好,然后让你自己可以逐一筛选。"

  "
那么你的第一个月就是要把目前这几首曲子完工。"

  "
那么你的第一个礼拜就是要先列出一整个清单,排出哪些曲子需要修改,哪些需要完工。"

  "
好了,我们现在不就已经知道你下个星期一要做什么了吗?"凡內芮笑笑地说。

  "
喔,对了。你还说你五年后,要生活在一个有很多音乐的地方,然后与许多一流的乐师一起忙着工作,对吗?"她急忙地补充说。"如果,你的第五年已经在与这些人一起工作,那么你的第四年照道理应该有你自己的一个工作室或录音室。那么你的第三年,可能是先跟这个圈子里的人在一起工作。那么你的第二年,应该不是住在德州,而是已经住在纽约或是洛杉机了。"

 
次年(一九七七年),我辞掉了令许多人羨慕的太空总署的工作,离开了休斯顿,搬到洛杉机。

 
说也奇怪:不敢说是恰好五年,但大约可说是第六年。一九八三年,我的唱片在亚洲开始销起来,我一天二十四小时几乎全都忙着与一些顶尖的音乐高手,日出日落地一起工作。

 
每当我在最困惑的时候,我会静下来问我自己:五年后你"最希望"看到你自己在做什么?

 
如果,你自己都不知道这个答案的话,你又如何要求別人或上帝为你做选择或开路呢?別忘了!在生命中,上帝已经把所有"选择"的权力交在我们的手上了。

 
如果,你对你的生命经常在问"为什么会这样?""为什么会那样?"的时候,你不妨试着问一下自己,你是否很"清清楚楚"地知道你自己要的是什么?

 
如果连你自己要的是什么都不知道的话,那么爱你的主又如何帮你安排呢?不是吗?

 
而在你旁边的人,再怎么热心地为你敲锣打鼓,爱你的主也顶多给一些慈悲的安慰。因为连你自己都还没有清楚地告诉他,你要的是什么?那么你又岂能无辜地怪上帝没有为你开路呢?不是吗?

 
有这样一篇调查似乎也说明了什么:

 
有一年,一群意气风发的天之骄子从美国哈佛大学毕业了,他们即将开始穿越各自的玉米地。他们的智力、学历、环境条件都相差无几。在临出校门前,哈佛对他们进行了一次关于人生目标的调查。结果是这样的:

  27
%的人,没有目标;60%的人,目标模糊;

  10
%的人,有清晰但比较短期的目标;

  3
%的人,有清晰而长远的目标。

 
以后的25年,他们穿越玉米地。25年后,哈佛再次对这群学生进行了跟踪调查。结果又是这样的:

  3
%的人,25年间他们朝着一个方向不懈努力,几乎都成为社会各界的成功人士,其中不乏行业领袖、社会精英;

  10
%的人,他们的短期目标不断地实现,成为各个领域中的专业人士,大都生活在社会的中上层;

  60
%的人,他们安稳地生活与工作,但都没有什么特别成绩,几乎都生活在社会的中下层;

 
剩下27%的人,他们的生活没有目标,过得很不如意,并且常常在抱怨他人、抱怨社会、抱怨这个不肯给他们机会的世界。

 
其实,他们之间的差别仅仅在于:25年前,他们中的一些人知道为什么要穿越玉米地,而另一些人则不清楚或不很清楚。

 
故事到此完结,具体到底是真是假,我也不知道,因为我看到的时候就是不具名的,不知道是何人所写。不过,在这里,我们的确看到了人生职业规划的重要性,在将这个规划细细拆分,我们马上就会发现,其实我们根本没有时间停下来发呆。

如果我五年后希望有我的软件公司,在一个专有领域为客户提供满意的方案,那么我的5年如何设计呢?希望各位牛人给些建议!

草儿 2007-10-29 09:51
]]>
java 5|6 并发包介绍http://www.blogjava.net/mlh123caoer/archive/2007/10/24/155474.html草儿草儿wed, 24 oct 2007 02:14:00 gmthttp://www.blogjava.net/mlh123caoer/archive/2007/10/24/155474.htmlhttp://www.blogjava.net/mlh123caoer/comments/155474.htmlhttp://www.blogjava.net/mlh123caoer/archive/2007/10/24/155474.html#feedback0http://www.blogjava.net/mlh123caoer/comments/commentrss/155474.htmlhttp://www.blogjava.net/mlh123caoer/services/trackbacks/155474.html阅读全文

草儿 2007-10-24 10:14
]]>
jbosstools 和red hat developer studio 新的beta版发布http://www.blogjava.net/mlh123caoer/archive/2007/10/09/151253.html草儿草儿tue, 09 oct 2007 01:46:00 gmthttp://www.blogjava.net/mlh123caoer/archive/2007/10/09/151253.htmlhttp://www.blogjava.net/mlh123caoer/comments/151253.htmlhttp://www.blogjava.net/mlh123caoer/archive/2007/10/09/151253.html#feedback0http://www.blogjava.net/mlh123caoer/comments/commentrss/151253.htmlhttp://www.blogjava.net/mlh123caoer/services/trackbacks/151253.html 和新的beta版今天发布。

这个对于seam 1.2 用户来说是个好消息,因为我们现在完全支持创建eclipse wtp兼容包括seam 1.2.1的seam组件热部署项目。增加完全增量异步部署到jboss as server中,你能得到既快又好的部署环境。

该发布版也支持hibernate tools用户的一些新功能和其他的bug修复。你能阅读 这篇文章了解它们。

尽管现在还不支持seam 2的项目创建向导,但是代码完成和seam视图能和seam 2相容。仅需要右击项目增加seam支持。大家赶紧试一下啊,seam可是将来的主流啊。



草儿 2007-10-09 09:46
]]>
网站地图