??xml version="1.0" encoding="utf-8" standalone="yes"?> 参数说明Q?/p> -Xmx1280mQ设|JVM最大可用内存ؓ1280m。最大可设ؓ3550m。具体应用可适当调整?/p> -Xms1280mQ设|JVM初始内存?280m。此值可以设|与-Xmx相同Q以避免每次垃圾回收完成后JVM重新分配内存?/p> -Xmn480mQ设|年M大小?80m。整个堆大小=q轻代大?+ q老代大小 + 持久代大。持久代一般固定大ؓ64mQ所以增大年M后,会减小q老代大小。此值对pȝ性能影响较大QSun官方推荐配置为整个堆?/8?/p> -Xss256kQ设|每个线E的堆栈大小。JDK5.0以后每个U程堆栈大小?MQ以前每个线E堆栈大ؓ256K。更具应用的U程所需内存大小q行调整。在相同物理内存下,减小q个D生成更多的线E。但是操作系l对一个进E内的线E数q是有限制的Q不能无限生成,l验值在3000~5000左右?/p> -XX:PermSize=64mQ指?jvm ?Perm Generation 的最倹{?q个参数需要看你的实际情况。可以通过jmap 命o看看到底需要多?/p> -XX:MaxPermSize=128mQ指?Perm Generation 的最大?/p> -XX:+UseConcMarkSweepGCQ?/strong>讄q发攉?/p> -XX:ParallelGCThreads=8Q?/strong>配置q行攉器的U程敎ͼ卻I同时多少个线E一赯行垃圑֛收。此值最好配|与处理器数目相{?/p> -XX:CMSFullGCsBeforeCompaction=0Q?/strong>׃q发攉器不对内存空间进行压~、整理,所以运行一D|间以后会产生“片”Q得运行效率降低。此D|运行多次GC以后对内存空间进行压~、整理?/p> -XX:+UseCMSCompactAtFullCollectionQ?/strong>打开对年老代的压~。可能会影响性能Q但是可以消除碎片?/p> -XX:SurvivorRatio=8Q?/strong>每个survivor space ?eden之间的比例?/p> -XX:MaxTenuringThreshold=7Q?/strong>讄垃圾最大年龄。如果设|ؓ0的话Q则q轻代对象不l过Survivor区,直接q入q老代。对于年老代比较多的应用Q可以提高效率。如果将此D|ؓ一个较大|则年M对象会在Survivor行多ơ复Ӟq样可以增加对象再年M的存zL_增加在年M卌回收的概率?/p> -XX:GCTimeRatio=19Q?/strong>讄垃圾回收旉占程序运行时间的癑ֈ比,公式?/(1+n)?/p> -XnoclassgcQ?/strong>用cd圑֛Ӟ性能会有一定提高?/p> -XX:+DisableExplicitGCQ?/strong>当此参数打开Ӟ在程序中调用System.gc()会不v作用。默认是off?/p> -XX:+UseParNewGCQ?/strong>讄q轻代ؓq行攉。可与CMS攉同时使用?/p> -XX:-CMSParallelRemarkEnabledQ?/strong>在?UseParNewGC 的情况下 , 量减少 mark 的时间?/p> -XX:CMSInitiatingOccupancyFraction=70Q?/strong>指示?old generation 在用了 70% 的比例后 , 启动 concurrent collector?/p> -XX:SoftRefLRUPolicyMSPerMB=0Q?/strong>每兆堆空闲空间中SoftReference的存zL间?/p> Z分析java应用的内存泄漏,使用thread dump往往解决不了问题。用jstat【egQ?a target="_blank" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: 'Segoe UI', Calibri, 'Myriad Pro', Myriad, 'Trebuchet MS', Helvetica, Arial, sans-serif; color: #0071bb; outline-style: none; outline-width: initial; outline-color: initial; text-decoration: none; ">jstat -gcutil pid 1000 5】工h看运行的java应用的heap size,perm size ,survivor ratio{,当时你无法知道是什么对象把堆填满了?/span> 什么是 Java heap dump 首先需要搞懂什么是java heapQjava heap是分配给实例cd数组对象q行数据区,所有javaU程在运行期间共享heap中的数据。Java heap dump相当于java应用在运行的时候在某个旉点上打了个快照(snapshotQ?/span> 如果你不懂啥是snapshotQ点?a target="_blank" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: 'Segoe UI', Calibri, 'Myriad Pro', Myriad, 'Trebuchet MS', Helvetica, Arial, sans-serif; color: #0071bb; outline-style: none; outline-width: initial; outline-color: initial; text-decoration: none; ">q里 触发 Java heap dump 有以下方法出发heap dump 分析 Java heap dump 1Q用IBM HeapAnalyzer IBM HeapAnalyzer是一Ƒօ费的JVM内存堆的囑Ş分析工具Q它可以有效的列丑֠的内存用状况,帮助分析Java内存泄漏的原因?/span> 下蝲解压后有一个ha413.jarQ执? java -Xmx512m -jar ha413.jar /home/longhao/heapdump.out 执行l果如图所C: 2Qjhat CZ: $JAVA_HOME/bin/jhat -J-Xmx512m /home/longhao/dump.out 3QEclipse MemoryAnalyzer Eclipse Memory Analyzer是一个快速ƈ且功能强大的Java heap分析器,能够帮助你查扑ֆ存泄漏和减少内存消耗。在File>Acquire Heap Dump>configure>HPROF jmap dump provider讄一下分析应用的JDKQ点ȝ兛_用列表来生成heap dumpq分析?br style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: 'Segoe UI', Calibri, 'Myriad Pro', Myriad, 'Trebuchet MS', Helvetica, Arial, sans-serif; " /> 在socketQnio中的有些API中,甌的内存是直接向OS要的Q在堆中分析内存是查看不到的Q可以通过-XX:MaxDirectMemorySize=<size>来设|应用向OS直接甌的最大内存数?/span> 在linux下进行Java开发需要配|环境变量,下面介绍了三U配|环境变量的Ҏ?/p> 1.修改/etc/profile文g 如果你的计算Z仅作为开发用时推荐使用q种ҎQ因为所有用Lshell都有权用这些环境变量,可能会给pȝ带来安全性问题?/p> (1)用文本编辑器打开/etc/profile (2)在profile文g末尾加入Q?/p> 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)重新d 注解Q?/p> a. 你要?/usr/share/jdk1.5.0_05jdk 改ؓ你的jdk安装目录 b. linux下用冒号“:”来分隔\?/p> c. $PATH / $CLASSPATH / $JAVA_HOME 是用来引用原来的环境变量的?在设|环境变量时特别要注意不能把原来的值给覆盖掉了Q这是一U常见的错误?/p> d. CLASSPATH中当前目?#8220;.”不能?把当前目录丢掉也是常见的错误?/p> e. export是把q三个变量导Zؓ全局变量?/p> f. 大小写必M格区分?/p> 2. 修改.bashrc文g q种Ҏ更ؓ安全Q它可以把用这些环境变量的权限控制到用L别,如果你需要给某个用户权限使用q些环境变量Q你只需要修改其个h用户ȝ录下?bashrc文g可以了?/p> (1)用文本编辑器打开用户目录下的.bashrc文g (2)?bashrc文g末尾加入Q 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)重新d 3. 直接在shell下设|变?/p> 不赞成用这U方法,因ؓ换个shellQ你的设|就无效了,因此q种Ҏ仅仅是时用,以后要用的时候又要重新设|,比较ȝ?/p> 只需在shelll端执行下列命oQ?/p> 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 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(); } } } } q行效果Q?/p>
有许多标准和实践准则可适用于Java开发者,但此处要说的Q是每个Java开发者需坚守的基本原则?br style="font-size: 12px; " />
能看明白if条g语句是干什么的吗?能想出来是谁写的q段代码吗?如果把它分成两段独立的if语句Q是不是更容易理解呢Q下面是修改后的代码Q?/font> 是不是读hҎ多了呢,在此只是多加了一个if和两个花括号Q但代码的可L与可理解性就一下子提高了一大截?/font> 四、请不要编码?/strong>开发者经常有?#8220;忘记”或忽略掉q点Q因为有些时候开发日E逼得实在太紧。其实,多写一行定义静态变量的代码能花多少旉呢? 现在Q每ơ需要将“ABC”与其他变量进行比较时Q不必记住实际代码,直接引用A.S_CONSTANT_ABCp了,而且在今后需要进行修ҎQ也可在一处修改,不会遍整个源代码逐个修改了?/font> 五、不?#8220;创?#8221;自己的框ӞframeworkQ?/strong>切来说Q有C千计的各U框架存在,而且大多数是开源的Q这些框枉是优U的解x案,可用于日常程序开发中Q我们只需使用q些框架的最新版本就行了Q至表面上要跟上Ş势吧。被大家qؓ接受的最为明昄一个例子就是Struts了,q个开源web框架非常适合用在Zweb的应用程序中。是不是惛_发出自己的Struts呢,q是省点力气吧,回头看看W二条——不要让事情复杂化。另外,如果正在开发的E序只有3个窗口,׃要用Struts了,对这U程序来_不需要那么多?#8220;控制”?/font> 六、不要用println及字W串q接?/strong>通常Z调试方便Q开发者喜Ƣ在可能的所有地斚w加上System.out.printlnQ也许还会提醒自己回q头来再来删除,但有些时候,l常会忘了删除或者不愿意删除它们。既然用System.out.println是ؓ了测试,那么试完之后,Z么还要留着它们呢,因ؓ在删除时Q很可能会删除掉真正有用的代码,所以不能低估System.out.println危害啊,L下面的代码: 从测试中可以发现Q方法calculationWithOutPrint()执行用了0.001204U,作ؓҎQ方法calculationWithPrint()执行可是用了10.52U?br style="font-size: 12px; " />
另外Q字W串q接也是费CPU旉的一个大_L下面的示例代码: 在测试中可发玎ͼ使用StringBuffer的方法只用了0.01U执行完毕,而用连接的Ҏ则用?.08U,选择显而易见了?/font> 七、多xGUIQ用L面)?/font>再三QGUI对商业客h_与程序的功能及效率同{重要,GUI是一个成功程序的最基本部分Q而很多ITl理往往都没注意到GUI的重要性。在现实生活中,许多公司可能Z节省开支,没有雇用那些有着设计“用户友好”界面丰富l验的网设计者,此时Java开发者只能依赖他们自w的HTML基本功及在此领域有限的知识,l果Q很多开发出来的E序都是“计算机友?#8221;甚于“用户友好”。很有开发者同时精通Y件开发及GUI设计Q如果你在公?#8220;不幸”被分配负责程序界面,应该遵守下面三条原则: 1?不要再发明一ơ轮子,即不做无用功。现有的E序可能会有cM的界面需求?br style="font-size: 12px; " />
2?先创Z个原型。这是非帔R要一步,用户一般想看到他们用的东西Q而且可以先利用这个原型征求用L意见Q再慢慢修改成用h要的样子?br style="font-size: 12px; " />
3?学会换位思考。换句话来说Q就是从用户的角度来审查E序的需求。D例来Ԍ一个汇ȝH口可以跨页或者不跨页Q作Z个Y件开发者,可能会們于不跨页Q因L单一些。但是,从用L角度来看Q可能不希望看到上百行数据都挤在同一上?/font> 八、文档需求不放松?/font>每个商业需求都必须记录在案Q这可能听上d童话Q似乎在现实生活中很隑֮现。而我们要做的是,不管开发时间多紧迫Q不最l期限多临近Q对每个商业需求都必须记录在案?/font> 九、单元测试、单元测试、单元测试?/font>关于什么是单元试的最好方法,在此不便l说Q只是强调,单元试一定要完成Q这也是~程中最基本的原则。当然了Q如果有人帮你做单元试自然是最好,如果没有Q就自己来做吧,当创Z个单元测试计划时Q请遵守以下三条最基本的原则: 1?先于~写cM码之前编写单元测试?br style="font-size: 12px; " />
2?记录单元试中的代码注释?br style="font-size: 12px; " />
3?试所有执行关键功能的公有ҎQ这里不是指set和getҎQ除非它们是以自qҎ式执行set和getҎ?/font> 十、质量,而不是数量?/font>有些时候因Z品问题、期限紧q、或一些预料之外的事情Q导致常怸能按时下班,但一般而言Q公怸会因为雇员经常加班而对之表扬和奖励Q公司只看重高质量的工作。如果遵守了前九条原则,你会发现自己写出的代码bug且可维护性高Q无形中质量提高了一大步?/font>
前端应用参数配置Q?br />
-XX:+UseCMSCompactAtFullCollection -XX:SurvivorRatio=8 -XX:MaxTenuringThreshold=7 -XX:GCTimeRatio=19
-Xnoclassgc -XX:+DisableExplicitGC -XX:+UseParNewGC -XX:-CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=70 -XX:SoftRefLRUPolicyMSPerMB=0"
]]>
]]>
]]>
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
]]>
]]>
一、ؓ代码加注释?/strong>虽然每个人都知道q点Q但有时却不自觉忘了履行Q今天你“忘了”加注释了吗?虽然注释对程序的功能没什?#8220;贡献”Q但q一D|_比如说两星期之后或者更长,回过头来看看自己的代码,说不定已l记不住它是q什么的了。如果这些代码是你个人的Q那q算是走q了Q不q的是,当然了,大多数时候都是别人的不幸Q很多时候大安是在为公司写代码Q写代码的h也许早已l离开了公司,但别忘了一句古话,有来有往嘛,Z人,也ؓ我们自己Q请Z的代码加上注释?br style="font-size: 12px; " />
二、不要让事情复杂化?/strong>E序员有时候L对简单问题想出复杂的解决ҎQ比如说Q在只有五个用户的程序中引入EJB、对E序实现了ƈ不需要的框架QframeworkQ,之类的还有属性文件、面向对象解x案、多U程{等。ؓ什么要q样做呢Q也许我们ƈ不知道是否这样会更好Q但q样做也许可以学C些新东西Q或者让自己更感兴趣一些。如果是不知道ؓ什么这样做Q徏议多hl验丰富的程序员Q如果是Z个h的目的,ȝ让自己更专业一炏V?br style="font-size: 12px; " />
三、始l牢记—?#8220;即是好QLess is moreQƈ不L对的”?/strong>代码效率虽然很重要,但在许多解决Ҏ中,~写更少的代码ƈ不能改善q些代码的效率,L下面q个单的例子Q?/font>
要避免浪费CPU旉Q最好的Ҏ是引入像如下的包装方法:
]]>
]]>
每个人都有一个舒适区域,在这个区域内是很自我的,不愿意被打扰Q不愿意被pushQ不愿意和陌生的面孔交谈Q不愿意被h指责Q不愿意按照规定的时限做事,不愿意主动的d心别人,不愿意去思考别有什么没有想到。这在学生时代是很容易被理解的,有时候这L同学q跟“冷酷”“个?#8221;q些字眼沾边Q算作是褒义。然而相反,在工作之后,你要极力改变q一现状。否则,你会很快变成鸡尾酒会上唯一没有人理睬的对象Q或是很快因为压力而内分泌p。但是,如果你能很快打破之前学生期所处的舒适区域,比别人更快的处理好业务、h际?*之间的关p,那就能很快的脱颖而出?br />
在会议上Q一个停留在心灵舒适区域的Z消极的听取领导的话语Q消极的待命Q很ȝ完成上交给的事情,但从来不兛_此事以外的Q何事情,更不会想到多做一步,让接下来的别人的工作更加Ҏ上手。而敢于打破这个舒适区域的人,敢于在适当的时候提q看法和不理解Qƈ在得CU认可和指点之后把手头的工作快的完成,q时接受别人的批评和调整。(注意Q永q不要等待别人把你的x说出来,q是典型的前者)
在工作上Q当前者遇C名新的同事,他会装作没有看见Ql自q工作。殊不知新来的同事不久就变成了自q上司。而后者则大方客气的自我介l,q了解对方和自己的关pR?br />
在聚会上Q前者L{待别h发言Qƈ喜欢U下里评论对方的a语;如果q个桌子上没有h发言Q那直到用餐l束Q也没有识你。而后者是勇敢的和一同吃饭的开始介l和闲谈Q这看v来很困难Q有时候会有失面子Q但往往你会发现Q对Ҏ多么希望能和你说几句话?br />
以上只是很小的几个例子,但是要说明的是,大学生在走出校园的同时就要在工作上把校园中的“随意?#8221;从n边赶赎ͼ早的冲q舒适区域,开始做好和q个C会交流的准备?nbsp;
W二Q不要把“好像”Q?#8220;有h?#8230;…”Q?#8220;大概”Q?#8220;晚些时?#8221;Q?#8220;或?#8221;Q?#8220;说不?#8221;之类攑֜嘴边。尤其是和上U谈论工作的时候?br />
我十分痛恨听到的一句话是:“我晚些时候会把这个文件发l所有的?#8221;Q因往往预示着我必LL醒他不要忘记。同P以下q些a辞也会让得厌恶至极:
“到时候有Z把那些东襉K准备?#8221;
“大概是明?#8221;
“明天或者后天客户会q来拜访”
“好像他说……”
一般是人都会这栯话的Q因L一l自q下了qK的余圎ͼW二也不会给别h造成很大的压q感Q好像什么事情一定要弄个水落矛_似的。说实话大学里面再用功的人都有一半是L。一个h要么是在译֠上是LQ要么下课之后是L。两个都没有带有L色彩的hQ要么是牛hQ要么是经病。所以,因Zh人都在的,所以校园是一个浪漫的地方Q校园也Ҏ让h单纯。所以学生社团的工作往往是效率很低的Q我现在回想起学校里做的工作Q当时还觉得挺卖力的Q但工作了之后才开始感觉到什么是效率。当你进入了用金p时间的地方之后Q你要尽可能的避免在学校里养成的q种习惯。如果上U问你什么时候能实施你给他的承诺Q而你回答“今晚或者明天早?#8221;q样的答案对于他来说完全{同于你没有回答Qƈ且还l他留下了一个坏印象。(当然Q这L回答往往在学校社团,学生会工作中是常见的Q?br />
有一个寓a故事Q一只小老鼠刚刚Z不久Q老鼠妈妈问小老鼠Q你现在能看见了吗? 老鼠_能?老鼠妈妈_那你能看到那块红薯吗Q?老鼠_是的。老鼠妈妈_那是一块石_q说明你不但q看不见东西Q你q嗅觉都q没有?br />
似是而非的应{往往一样会暴露Z更多的弱炏V可能是以下中的一个或几个Q?br />
1.你之前没有想到这个工作,或者一直在拖g?br />
2.你没有责dQ认些ƈ不重要?br />
3.你应付上U?br />
4.你不敢说真话?br />
5.你喜Ƣ逞能Q答应一些做不到的事情?br />
6.你不能独立工作?br />
当你的上U在以上选项中怀疑的时候,潜意识中你已l同时具备了以上所有的q了?br />
相反的看来,q样的回{,L让上司恼火?br />
W一Q他的问题没有得到回{,只是起到了提醒你的作用?br />
W二Q他依然需要记住提醒你Q因Z不知道你是否真正已经落实了工作?br />
W三Q他不知道有多少你已l做了的事情中,都是q样没有落实的。(q点非常致命Q?br />
W四Q往往因ؓ没有得到满意的答案,上司自己的计划不得不被耽搁或推q或不能l出明朗的结束时间?br />
所?--------
甲问Q你什么时候能把要q个漏洞修好Q?br />
乙说Q我已经通知他们了,他们大概明天׃来修的?br />
一天后
甲问Q维修公总么时候回来,你找的是哪家l修公司Q?br />
乙说Q好像他们说安排不出人来Q如果可以的话,今天晚上或者明天下午就能过来?br />
一天后
甲问Q漏z怎么q没有修好?
乙说Q我晚点再问问他们?br />
甲说Q今天下午之前不解决Q明天不用来上班了?nbsp;
W三Q不要拖延工?br />
很多人喜Ƣ在学习和玩耍之间先选择后者,然后在最后时间一ơ性赶工把考试要复习的东西H击完成。但是在工作中请不要Lq样的习惯,因ؓ工作是永q做不完的,容不得你“H击”。又或者,当你在徘徊和彷L如何实施的时候,你的领导已经看不下去Q自己去做了?---q是一个危险的信号?br />
往往我们Lx事情从头到尾全部惛_了,才开始走W一?----摔倒了?br />
举个例子Q?我小学的时候第一ơ给我一个喜Ƣ的奛_子打电话的时候,惌了各U情?------1Q她接电话的时候在做作业?Q她在做作业Q她妈妈接的电话?.她也很无聊,很想找h说话?.Ҏ在被父母训斥?5.Ҏ在想另外一个男孩?.她父亲接电话?7.她家正好来了什么亲戚,亲戚接了电话?8.Ҏ了电话,但父母就在n边,说话不方ѝ。。。。等{等{。我整整想了一个下午,惛_了各U情늚心理准备和应对的{略。然后勇敢的拿v电话机,按下了那几个按钮。结?------她不在家?br />
所以,当你徘徊不前而手x措的时候,你要意识C正在拖g工作。徘徊是因ؓx这个事情可能发生的后果需要自己承担或应付。工作的时候需要一Uv码的自信Q相信自己有能力Q不下一步是什么状况,我都能把它引导到我需要的那条U上ȝ。另外,告诉自己Q不要想太多旉Q如果不知道Q就赶快求助Q或惛_法,苦恼和忧虑会l你更多的压力也会把剩下的时间蚕食殆?br />
另外Q警告一下:永远不要惻I我知道了Q先把上U派的事情放一下,{这集《越狱》看完再说?---90%的情况下Q你会忘讎ͼ或者来不及Q因件事需要比你原先想象要更多的时间。说做就做,一直是很好的习惯?nbsp;
W四Q不要认为理Z可以实施大功告成了Q?br />
q点太重要了Q往往当真正实施的人开始做了才会发现计划完全等于鬼话。如果不亲自实践Q做计划的h会早晚被实施的鄙视。永q需要提升自q办实事的能力Q而不是空谈?br />
首先Q如果你是做办公室工作的Q或者做{划和计划的。请千万不要把你自己都认Z太可能或者很隑ց到的事情Q让别h试试看。比如,用一个下午的旉在h量很少的地方D办露天歌׃。这会让执行的h觉得你在玩他Q拿他做实验。没错,理论上,在Q何地斚w能D办歌׃Q但是,在不同的地方Q执行的人的心情是不一L?br />
其次Q和执行的h讨论你的安排。比如,新来的你的下属,你可以安排她坐在M地方Q但是如果那是一个很隑֒大家接触的角落,q可能比你什么都不安排更差。的,理论上一个h要坐下来Q需要的只是I间。但事实上远q不止那些?br />
再次Q不要奢望一切会随着你的计划q行。理Zq个会议会持l两个小Ӟ但是Q这?#8220;不考虑在开场后?0分钟全场都在调试话筒”Q或?#8220;Z没有提出如此锐的问?#8221;的前提下的状态?大学生已l习惯了把事情做?"理论上看上去很美"的程度了?论文Qppt讲演Q考试Q辩…… q些校园智商大比|都是教我们如何完的做好“U怸谈兵”的功夫?你一定要怿自己?#8220;搞定”事情的能力比惌的弱?br />
如果你是在学校的学生Q测试一下自己,能否能搞定以下这些状况:
1.学校要制作一套校服,׃d找供应商Q砍P臛_有三家公司的报h?br />
2.学校保安抓住一个学生偷H,怎么处理Q?br />
3.学校的一个很重要路段的\灯坏了,你能否让它三天内l箋亮v来?br />
4.食堂需要请一位专门烧清真菜的厨师Q一周内到岗位?br />
当你开始思考以上这L问题的时候,你会发现Q他的思\?#8220;看过Mq这个公司的业W向Q做Z个下个季度的市场{划Ҏ”要相差极大。你会发现后者只要你做到“看上d完美”Q没有h知道按照你这样做l果会怎样。而上q的工作你只要一惻I׃体会C的压力。因Z不处理好Q结果就是明昄p|更大的问题就会相l发生?br />
对了Q这U感觉就?#8220;工作”l你的感觉!q就?#8220;工作”?#8220;U怸谈兵”的差别!
W五Q不要让别h{你
在Q何情况下都不要让别h放下手头的工作来{你。在大学中可能只是同寝室的h的几句半开玩笑的抱怨,在工作上很可能导致你的潜在合作伙伴的丢失?br />
你在做一个工作的同时要知道别人的q度Q而永q不要落后?br />
q不像是在考试Q你比别人做的慢Q别人可以先交卷Q你到时间了做不完你自己承受扣分。在工作中的情况是这LQ这是一场没有h能做完的考试Q所有的人,都分配做一张试L不同部分Q有的h分到的是阅读理解Q有的h做的是完形填I,有的人做的是语法…… 然后大家做完了相互抄Q这P所有h都做完了?如果大家都把各自的部分做完了Q而你却还在没有做完,那么做得快的别h会开始做你的那部分题目,然后也是怺抄。慢慢地Q大家会发现你的工作量完全可以由另外人来代替Q整个团队中可以不需要你Q这个时候,没有Z你这里得到试L{案Q也没有Zl你他们的答?-------很不q,你已l没有利用hg?br />
请一定记住这个例子?nbsp;
W六Q不要认为细节不重要
在大学里Q往往做事_枝大叶Q看看差不多p了。相反,在企业里理的精髓就在于简单的事情做到l节。一个慌忙寻找保险箱钥匙的动作就很有可能丧失你晋升胦务主的Z?br />
公司的管理,其实需要的q不是把很难的事情做?0%----比如Q优化管理层的核心工作流E、改变公司在当地政府面前的Ş象,提高产品质量Q改善工作环?#8230;… 而管理要做的是把每个单的事情做到100%-----比如Q把公司的每个h的档案都按照一定的规律整齐的存放v来、在门卫讄一个外来h员的{ֈ台、把会议室多余的椅子拿走、和电视台讲好下个礼拜三来公司做采访、把试用装送到客户手里、在生的咖啡上加一个口子、给下一期的面人物拍照……{等如此?如果你能把所有细节的问题都如实做刎ͼ那你才有开口升职的本钱?br />
很多人在毕业的时候不知道自己来要做什么,于是和自己_我以后做理吧!做管理?问一下自己,如果Q公司资产被L了,所有员工士气低下,办公室杂乱无章,公司甉|又坏了,打印机没墨了Q采购计划超支了Q品滞销了,客户q到?#8230;…你愿意解册L问题Qƈ从小事开始做起吗Q想好了q些再考虑是否把管理看得太I洞了?nbsp;
W七Q不要表现得消极Q仅仅因Z所做的事情不是你的兴趣所在?br />
很显Ӟ在学生时代,当做到自己喜Ƣ的时候,我们会pay200%的精力去创造,但如果是枯燥的事务,我们便懒得理睬,最好能有办法应付过厅R但在工作上80%你所做的事情都是J琐而看似机械的Q如果仅仅ؓ此而表现的闷闷不乐Q那么你会郁h久。要知道你的上司已经个项目够烦恼了,你还惌他看C的表情吗Q?br />
学会喜欢自己的工作,q把注意力放在日常工作能学到些什么上厅R如果现在你努力的抱怨工作,那么接下来你是努力的寻扑ַ作。尽量少?#8220;有趣”Q?#8220;好奇”之类的词语来描述自己惌的工作,而是“充实”Q?#8220;有成感”Q?#8220;乐意”
之类?br />
x以下职位Q你会发现生zM很多工作不是在等你有很好的状态下让你做的很有的事情Q?br />
1.高速公路收费口的收费员Q一天都是面对一个小H口Q把一张卡片送出去,q样要持l好几年?br />
2.学校食堂厨师Q永q在烧大排和鸡腿。烧一q?br />
3.作家Q交E期要到了,我还在孕育灵感,两个星期没吃早饭了?br />
4.外科ȝQ刚刚睡着Q马上叫我做一?时的手术。这栯一周一ơ?br />
5.门市部销售:产品不好卖,8点上班来坐在店门口Q一个hQ坐到晚?点,今天没有一个h来,和昨天一栗?br />
6.公交司机Q我开车不用你指挥。这条线路我开了三q了?br />
7.宠物商店店员Q生意不好,q要一早就q来听着20条狗的叫C整天Q听一q?br />
8.公司职员Q晚上两点下班,W二天还?点上班。关键是路上q要一时。这样已l一个月了?br />
再想惌己是不是只是接触了这个工作一个月或者才到没几个困难,q个时候抱怨的声音最大?br />
千万不要想着去选择一个有的职业Q因为没有那L工作存在。没有哪一“U?#8221;行业是开心的Q因为如果有Q那所有h都去q那个了。最多试着问问自己本n的兴吧。self exploration?nbsp;
W八Q绝对不要把改善工作能力仅寄托在公司培训?br />
人绝对不可能l过一ơ培训就p换骨。相反,集体培训上学到的东西往往是最用不上的信息?像食堂烧大锅菜一PL有你最惛_的菜Q因样做ҎQƈ且不Ҏ得罪人?br />
很多学生很看重所选的公司有没有培训,q说明,你不但不知道q个公司做什么,你甚至不知道怎样学习q些技能?br />
我的感悟是如果你不知道怎么学你惌的知识,也不知道你想要的知识是什么,你只会做ZU行为:1。等待别人来教你Qƈ且等待别人发C不知道的地方?.L现成的答案ƈ且拷贝。期待公司培训的人,很大概率上是第一UhQ不排除极少真正优秀的公司培训)
许多的同学有q样的习惯思维Q?br />
因ؓQ这个公司的培训能结束达到多多的E度
又因为,q个E度正好是我惌到的
所以我力q这家公?br />
因ؓ我进了这家公?br />
所以它自然会我达Cq个期望的程度?br />
我们把参加培训和辑ֈ效果很幼E的M了等受其实往往集体培训上所得到的信息是最没有实际操作价值的。永q不要期望单靠听课,靠老师把同L东西l所有的人,你会得到比别人更多。把更多的心思放在观察和思考自q需要上Q找到问题的所在再通过观察和实践得到的{案才是真正的知识?br />
所以,刚刚开始工作,什么都不会Q不要认为那h正常的,因ؓ公司q没有培训过呢!{我接受培训了之后,我就全都会了。如果你一无所知还{待别h会可怜你的无知而施舍你知识Q那你会Z的无知而付出更多的智商?nbsp;
W九Q不要推卸责?br />
推卸责Q是害怕的条g反射。不要认为别人看不出q点?br />
我记得我学里的一件事情。我一ơ作业没有带来,老师要训斥我Q说Q你怎么老是作业不带Q?br />
我当时说Q不是。。。?当我正要支支向时候,老师_什么不是?你带来了没有Q?br />
我说Q没?br />
老师_那不是没有带!什么不是!是Q?br />
之后我就发现Q我只是x承担责任而条件反似的就说了“不是”Q仔l观察一下周_你会发现QnҎ无数的h在用“不是”作ؓ被责问之后的W一反应?br />
其实现在很多人面对工作也是这P当上U责问的时候,很条件反的做Z推卸动作Q然而这L动作Q接下来往往是无力的辩解Q以及一些很_糙的借口。这样会让上司感Cq个人很难沟通,q且很不真实?br />
另外一U情况,是无论什么情况下Q我指责一个hQ他永远是强调客观。其实这Ҏ是学生最典型的特征。这说明他太Ҏ受到其他事物的媄响,q受它们军_。如果你和上怹间会出现以下cd的对话,x是不是需要改一下你的处事方法?br />
ԌZ么到现在q没有给副ȝ你的报告Q?br />
乙:刚才c在打华ͼ我在{他l束Q现在他大概好了吧,我去看看
乙:q有点东西要修改
乙:b也要把东西给副总,我因为等?br />
乙:a他说我报告不用给副ȝQa是乙的同U同事)
乙:不知道副d不在哦,他的门关着?br />
乙:d他叫我帮他打印文Ӟ怪他Q(d是乙的同U同事)
乙:我的杯子H然找不CQ在找杯子?br />
不愿意负责Q的h的不利在于他会让上司怀疑他的忠诚程度,因ؓ上司l他的命令往往会因Z个小事情而被搁置或者打折执行,转而被他h的意识所改变?nbsp;
W十Q不要对自己?#8220;我是大学?#8221;
q点包涵了很多信息?br />
1.不要认ؓ自己有多清高
2.不要仍然以学生的标准要求自己
3.不要感觉低h一{?br />
4.不要{待别h的关怀
5.不要把这个作为犯错误自我安慰的借口
6.不要忘记搞清楚,公司I竟l自q待遇是多,老练些,q不是在做志愿者?br />
品格是处理好人际关系的基Q也是确保h际关p质量的关键。除此之外,人际交往的技巧也是尤为重要的。有些h做好事会让h感激一辈子Q而有些h帮了别h却可能费力不讨好Q不但得不到感激和回报,q让人心存嫉恨。将同样的品以相同的h格推销l同一个客P有些业务员可能被_暴地赶出门Q有些业务员却可能签到大单,甚至被客户奉Z宾?nbsp;
人际交往的技巧是一个非常庞杂的话题Q囿于篇q,在这里只能结合我的切w体会做一些简单的列DQ挂一漏万在所隑օ了?nbsp;
1. 多给别h鼓励和表扬,量避免批评、指责和抱怨,不要逼别错?nbsp;
2. 要学会們。不要说得太多,惛_法让别h多说?nbsp;
3. 如果你要加入别h的交谈,先要弄清楚别人究竟在说什么?nbsp;
4. 交谈之前量保持中立、客观。表明自q們之前先要弄清楚对方真实的們?nbsp;
5. 注意Ҏ的社交习惯ƈ适当加以模仿?nbsp;
6. 不要L打断、纠正、补充别人的谈话?nbsp;
7. 别h有困难时Q主动帮助,多多鼓励?nbsp;
8. 不要因ؓҎ是亲朋好友而不注意CD?nbsp;
9. 可能谈论别人想要的Q教他怎样dC惌的?nbsp;
10. 始终以微W待人?nbsp;
11. 做一个有q默感的人。但是在讲笑话的时候千万不要只儡自己W?nbsp;
12. 做一个脱MU趣味的人?nbsp;
13. 跟别话的时候尽量看着Ҏ的眼睛,不管你是在说q是在听?nbsp;
14. 转移话题要尽量不着痕迹?nbsp;
15. 要学会聆听对方的弦外之音。也要学会通过弦外之音来委婉地表达自己的意思?nbsp;
16. 拜访别h一定要事先通知?nbsp;
17. 不要在别人可能忙于工作或者休息的时候打电话q去。除非是非常紧急的事情?nbsp;
18. l别人打电话的时候,先问Ҏ是否方便通话?nbsp;
19. 一件事情让两个人知道就不再是秘密?nbsp;
20. 你在背后说Q何h的坏话都q早有一天传入这个h的x?nbsp;
21. 不要说尖酸刻薄的话?nbsp;
22. 牢记他h的名字。养成偶翻看名片簿、电话本的习惯?nbsp;
23. 试着跟你讨厌的h交往?nbsp;
24. 一定要重Ҏ的隐U,不管是朋友还是夫妅R?nbsp;
25. 很多人在一L时候,当你与其中某个h交谈Q请不要无视其他人的存在?nbsp;
26. 要勇于认错?nbsp;
27. 以谦卑的姿态面对n边的每一个h?nbsp;
28. l予他h同情和谅解?nbsp;
29. 可能用“”取代“命o”?nbsp;
30. 不要L做出承诺。承诺的事情׃定要可能做到?br />
This issue was discussed at the GlassFish mailing list, see the discussion here and the corresponding bug.
The good news is that Jerome 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 nightly build.
Here is how I created and deployed a Grails application on GlassFish v3:
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
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
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)
[#|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:
GlassFish v3 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 users@glassfish.dev.java.net.
那年?5Q无C夙兴夜寐Q换来一个硕士学位,额上的抬头纹分外明显Q脚下却
半步也不敢停歇。如果不惌户口打回原籍Q子子孙孙无I匮Q得赶紧地找份留京工?br />
。你呢?你不着急,兽世界和红色警报?早玩MQ你野心勃勃地筹划着“创业创业
”。当时李彦宏、陈天桥、周云帆Q牛Zq没有横I出世,癑ֺ、Google、完时I?br />
更是遥远的名词,可青春所向披靡不可一世,你在校园里徏起配送网站,大张旗鼓地招
兵买马,大小媒体的记者蜂拥而至?34寝室很快在全楼名噪一Ӟ姑娘们从天南地
北寄来粉_的信纸QԒ慕地写道Q?#8220;从报上得知你的精彩故?#8230;…”得空Q爬上楼吹
吚wQ你眉飞色舞地{向我Q以照顾自己人的口气_兄弟Q一起发财如何?
好呀Q可惜,我不能。创业于你,是可q可退可攻可守的棋Q启动资金有三姑六眷
帮忙{wQ就铩而归Q父母那三室一厅、温暖的灶台也永不落I。失败于我,意味
着覆水难收一败涂圎ͼ每年夏天Qؓ了节省三五百块钱的机器钱Q爹娘要扛着腰肌x
在大日头下收?亩农田。我I着借来的西服完成了W一ơ面试,戴着借来的手表与?br />
q奛_q行了第一ơ约会。当你拿CW一W投资兴奋地报告全班Ӟ我冷静地I越
大半个北京城Q去做最后一份家教。没错,“q活儿技术含量忒?#8221;Q但在第一个月?br />
资下发前Q我U来的立锥之C口粮全靠它维持?/p>
不多久,互联|就遭遇了寒,你也对创业意兴阑珊,q了家国有性质的通信公司
Q我被一家外企聘用。坐井观天的我,竟傻d以ؓ扛_了一局。明面上的工资,我比
你超Z截,E后8000Q出差住5星NQ一q带薪休?0天。玩命一样地投入工作
Q坚信几q后也有个童话般的结,“和公主过上幸的生活”?/p>
好景不长Q很快,我明白了Z么大家说白领是句骂h的话。写字楼的套,标h
35Q几乎没人搭理它。午时_最抢手的是各层拐角处的微L炉,“白领”们端着?br />
来的便当Q排起了镉K的队伍。后来,物业允许快餐公司入住Q又出现?#8220;千h排队{?br />
丽华”的盛c这些月入近万的人士节约到抠门的E度。一位同事,10块钱的感冒药?br />
找保险公司理赔;另一位,在脏乱差的火车站耗上3个小Ӟ为的?8Q?0后返E能?br />
?50元的晚餐补助?/p>
q幕q喜剧未能o我发W,我读得懂Q每个数字后都凝l着加班加点与忍气吞壎ͼ
俯首帖而老板盘剥Qؓ的是一q米一q米构筑赯q窝。白手v家的q程艰辛?br />
漫长Q整?q_我没休过一ơ长假没吃过一回鸭脖子Q听?#8220;华ؓ25岁员工胡新宇q?br />
x”的新闻,也半点儿不觉得惊Ӟ以血汗、青春换银子的现象在q个行业太普遍了
。下ơ,当你在上地看见一hI着西装革拎着IBMW记本奋力挤?毛钱的公交RQ?br />
千万别奇怪,我们是一IT民工?/p>
惟一让hƣ慰的是Q我们离理想中的目标一步步靠近?/p>
H如其来圎ͼ你的喜讯从天而降Q邀请大家周末去新居暖暖ѝ怎么可能Q你竟比
我快Q可豁亮?00多^方米、红Ҏ家具?7寸液晶大彩电无可质疑地摆在眼前。你
L淡写地说Q老头子给?0万,她家里也l了10万,老催着我们l婚……回家的\?br />
Q女朋友郁郁不说话,她和我一P来自无名的山城。我揽过她的肩膀Q鼓励她也是?br />
p己,没关p,我们拿时间换I间?/p>
蜜月你在香港q的Q轻而易丑֜花掉了半q的工资Q回来说Q意思不大,不像TVB
电视里拍的那L轮美奂;我的婚礼Q在家乡的土路、乡亲的围观中E游,在低矮昏?br />
的老房子里拜了天地Q在寒冷的土炕上与爱人相拥入眠。幸q的是,多年后黯淡的图景
化作d博客里光芒四的囄Q她回味Q?#8220;有爱的地方,有天堂?#8221;
我们都想l深q奛_以天堂,天堂的含义却q然不同。你的老婆当上了全职太?br /> Q每天用电驴下蝲《老友记》和《越狱》;我也惌么来着Q老婆不同意,你养我,?br /> L爸妈Q不忍心让你一个h?个h。当你的奛_L倩碧面膜舒服地翘赯Q我?br /> 奛_却在人v中顽强地搏杀?/p>
两个q速度快得多。到2004q年底,我们也攒C人生中第一?0万,谁知
中国的楼市在此时被魔鬼唤醒,啸般狂飙突q,摧毁一切ؓ虚q个体?005q?
月,首付q够买西四环的郦城,?月,只能d城扫g。我们的U蓄本来能买90q?br />
方米的两居来着Q?月中旬,仅仅q去2个月Q只够买80多^?/p>
没学q经学原理Q没关系。生zȝ动地阐释了什么叫资泡沫与流动性泛滥。这
时专家蟩出来发言了,“北京房h应该?0Q,上v房h应该?0Q?#8221;要不Q再{等
Q我险些栖n于温吞的I方阵营Q是你站出来指点qh|Q赶快买Q房仯会涨。买房的
消息传回老家Q爹娘一个劲儿地唏嘘Q抵得上Z忙活半年。在他们看来Q?500元一q?br />
方米是不可思议的天仗?q后?008Q师弟们UL感叹Q你赚大发了Q四环内均h1?br />
4Q已无楼可买?/p>
几天前,我看见了水木上一句留aQ颇为感慨:“工作5q还没买房真z该Q?003
q正是楼市低q与萧条之时。等C天,t空的不仅是黄金楼市Q更是整个h生?#8221;
真要感谢你,在我不知理胦Z物之Ӟ你早早地告诉我什么叫消费什么叫投资?/p>
q所有h都拥有前ȝ眼光和投资的观念。许多和我一h自小地方、只知埋?br />
苦干的兄弟们Q太q关注脚下的麦田Q以至于错过一片璀璨的星空。你的理论是Q赚?br />
是ؓ了花Q只有在通中才能增|买到喜爱的商品,让生zdL怡。而我的农民兄
弟——这里特指是n农家毕业后留在大城市的兄弟,习惯于把人民币紧紧地捏在手中
。存折数字的增长让他们痴q该买房Ӟ他们在租房;该还hQ他们宁可忍?Q?br />
的贷Ƒֈ率,也要存上5q的定期。辛苦赚来的银子在等待中~水贬倹{他们往往在房
L巅峰处,无可奈何地接下最后一;也曾天真地许愿,赚够100万就回家买房。可
{到那一天真的到来,老家的房P二线、三U城市甚至乡镇的都已疯长?/p>
q便是我和你的最大差别,Ҏ蒂固的分歧、不可逾越的`沟也在于此。我曄?br />
为,学位、薪水、公司名气一样了Q我们的人生便一样了。事实上Q差别不体现在显?br />
易见的符号上Q而是体现在世世代代的传承里,体现在血液里Q体现在头脑中?8q的
U篏Q家庭出w、生zL式、胦务观念,造就了那样一个你Q也造就了这样一个我Q?br />
׃你的疏狂佻达与我的保守持重。当我还清贷ƾ时Q你CW二套住房;上证指数
6000点,当我好容易试水成民,你清仓离场,转投金市Q我每月?000元回去,?br />
担v赡养父母的责任,你笑d地说Q养老,我不啃老就不错了;当我思考着要不要生
孩子、养孩子的成本会在多大程度上折损生活品质Ӟ4个老h已出钱出力帮你抚养v
独二代;黄金周去一九寨沟挺好的了Q你不满I你说德国太拘谨美国太随意法国?br />
是你向往的时之?#8230;…
我的故事Q是一?#8220;UL”的真实写照——迫不得已离乡背井,国q员辽阔Q我
却像候鸟一栯转迁徙,择木而栖。现行的C会体制Q注定了大城市拥有更丰富的教?/p>
资源、医疗资源、生zM利。即便取得了一U户口,跻n融入的过E依然是充满煎熬Q?br />
5q?0q乃x长时间的奋斗才获得土著们唾手可得的一切。曾l愤慨过Q追寻过Q?br />
如今Q却学会了不再抱怨,在一个又一个缝隙间心^气和。差距固然存在,但ƈ不o?br />
遗憾Q正是差距和为I补差距所付出的努力,加强了生命的张力Q其更有层ơ更加多
元?/p>
可以惌的未来是Q有一天我们的后代会相聚于q斯|q点自信我还是有的)Q?br />
讲v父亲的故事,我的那一个,虽然不一定更_致更华彩,无疑曲折有趣得多。那个故
事,关于独立、勇气、绝地反式Vvd生,我给不v儿子名R豪宅Q却能给他一个不
断成长的心灵。我要跟他说Q无I富贵,百万家资或颠沛流,都要一样地从容?br />
达?/p>
xQ喝不喝咖啡又有什么打紧呢Q生zd态的优雅与否Q不取决于你所坐的位置
、所持的器皿、所付的茶资。它取决于你品茗的态度?/p>
我奋斗了18q_不是Z和你一起喝咖啡?br />
二、基本概?/strong>
HttpSessionContextIntegrationFilter 存储SecurityContext in HttpSession
ChannelProcessingFilter 重定向到另一U协议,如http到https
ConcurrentSessionFilter 因ؓ不用Q何SecurityContextHolder的功能,但是需要更新SessionRegistry来表C当前的发送请求的principalQ通过在web.xml中注册Listener监听Session事gQƈ发布相关消息Q然后由SessionRegistry获得消息以判断当前用LSession数量?/p>
AuthenticationProcessingFilter 普通认证机?大多数用q个)
CasProcessingFilter CAS认证机制
BasicProcessingFilter Http协议的Basic认证机制
HttpRequestIntegrationFilter Authentication 从容器的HttpServletRequest.getUserPrincipal()获得
JbossIntegrationFilter 与Jboss相关?/p>
SecurityContextHolderAwareRequestFilter 与servlet容器l合使用?/p>
RememberMeProcessingFilter ZCookies方式q行认证?/p>
AnonymousProcessingFilter 匿名认证?/p>
ExceptionTranslationFilter 捕获所有的Acegi Security 异常Q这栯么返回一个HTTP错误响应或者加载一个对应的AuthenticationEntryPoint
AuthenticationEntryPoint 认证入口
三、Acegi认证授权程
1、FilterToBeanProxy 负责代理hlFilterChainProxy
2、FilterChainProxy 方便的将多个Filter串联hQ如上面基本概念中提到的各种FilterQ当然如果对URIq行授权保护Q也可以包含FilterSecurityInterceptor。注意各Filter的顺序?/p>
3、AbstractSecurityInterceptor 调度中心。负责调用各模块完成相应功能?
FilterSecurityInterceptor 对URIq行拦截保护
AspectJSecurityInterceptor Ҏ法进行拦截保?
MethodSecurityInterceptor Ҏ法进行拦截保?/p>
4、AuthenticationManager 用户认证
-> AuthenticationProvider 实际q行用户认证的地?多个)?
-> UserDetailsService q回带有GrantedAuthority的UserDetail或者抛出异常?/p>
5、AccessDecisionManager(UnanimousBased/AffirmativeBased/ConsensusBased) 授权
-> AccessDecisionVoter(RoleVoter/BaseAclEntryVoter) 实际投票的Voter(多个).
6、RunAsManager 变更GrantedAuthority
7、AfterInvocationManager 变更q回的对?
-> BaseInvocationProvider 实际完成q回对象变更的地?多个)?/p>
?1 Acegi体系l构
SecurityContextHolder是框架的容器,它保存着和所有用户关联SecurityContext实例Q?SecurityContext承蝲着用户Q也U认证主体)的n份信息的权限信息Q?AuthenticationManager、AccessDecisionManager据此进行安全访问控制?
SecurityContext的认证主体安全信息在一个HTTPhU程的多个调用之间是׃n的(通过ThreadLocalQ,但它不能在多个请求之 间保持共享。ؓ了解册个问题,Acegi认证主体安全信息缓存于HttpSession中,当用戯求一个受限的资源ӞAcegi通过 HttpSessionContextIntegrationFilter认证主体信息从HttpSession中加载到 SecurityContext实例中,认证M兌的SecurityContext实例保存在Acegi容器U的 SecurityContextHolder里。当hl束之后QHttpSessionContextIntegrationFilter执行相反的操 作,SecurityContext中的认证M安全信息重新转存到HttpSession中,然后从SecurityContextHolder中清 除对应的SecurityContext实例。通过HttpSession转存机制Q用L安全信息可以在多个HTTPh间共享,同时保证 SecurityContextHolder中仅保存当前有用的用户安全信息,其整体过E如?2所C:
?2 SecurityContext在HttpSession和请求线E间的{交过E?
当用戯求一个受限的资源ӞAuthenticationManager首先开始工作,它象一个安入口Q对用户w䆾q行核查Q用户必L供n份认证的 凭证Q一般是用户?密码Q。在q行w䆾认证ӞAuthenticationManagern份认证的工作委托l多?AuthenticationProvider。因为在具体的系l中Q用戯n份可能存储在不同的用户信息安全系l中Q如数据库、CA中心、LDAP服务 器)Q不同用户信息安全系l需要不同的AuthenticationProvider执行诸如用户信息查询、用戯n份判断、用h权信息获取等工作。只?有一个AuthenticationProvider可以识别用户的n份,AuthenticationManager通过用户w䆾认证Qƈ用L?权信息放入到SecurityContext中?
当用户通过w䆾认证后,试图讉K某个受限的程序资源时QAccessDecisionManager开始工作?AccessDecisionManager采用民主决策机制判断用户是否有权讉K目标E序资源Q它包含了多个AccessDecisionVoter?在访问决{时每个AccessDecisionVoter都拥有投权QAccessDecisionManagerl计投票l果Qƈ按照某种决策方式?据这些投结果决定最l是否向用户开攑֏限资源的讉K?
?3 用户和权?
在未使用Acegi之前Q我们可能通过cMUser、Customer{领域对象表C用L概念Qƈ在程序中~写相应的用戯证的逻辑。现在,你要做的一 个调整是让原先这些代表用h늚领域cd现UserDetails接口Q这PAcegi可以通过UserDetails接口讉K到用L信息了?nbsp;
UserDetails可能从数据库、LDAP{用户信息资源中q回Q这要求有一U机制来完成q项工作QUserDetailsService正是充当q?一角色的接口。UserDetailsService接口很简单,仅有一个方法:UserDetails loadUserByUsername(String username) Q这个方法通过用户名获取整个UserDetails对象?
Authentication代表一个和应用E序交互的待认证用户QAcegi从类gd面、Cookie{处获取待认证的用户信息Q一般是用户名密码)自动构造Authentication实例?
?4 Acegi的认证用?
?5 认证用户信息存储?/p>
SecurityContextHolder是Acegi框架U的对象Q它在内部通过ThreadLocal求线E提供线E绑定的 SecurityContext对象。这PM参与当前hU程的Acegi安全理lg、业务服务对象等都可以直接通过 SecurityContextHolder.getContext()获取U程l定的SecurityContextQ避免通过Ҏ入参的方式获取用?相关的SecurityContext?
U程l定模式对于大多数应用来说是适合的,但是应用本n会创建其它的U程Q那么只有主U程可以获得U程l定SecurityContextQ而主U程衍生 出的新线E则无法得到U程l定的SecurityContext。Acegi考虑Cq些不同应用情况Q提供了三种l定SecurityContext?模式Q?
?SecurityContextHolder.MODE_THREADLOCALQSecurityContextl定CU程Q这是默认的模式Q?
?SecurityContextHolder.MODE_GLOBALQSecurityContextl定到JVM中,所有线E都使用同一个SecurityContextQ?
?SecurityContextHolder.MODE_INHERITABLETHREADLOCALQ:SecurityContextl定CU程及由ȝE衍生的U程中?
你可以通过SecurityContextHolder.setStrategyName(String strategyName)Ҏ指定SecurityContext的绑定模式?
用户认证q程
Acegi支持多种方式的用戯证:如典型的Z数据库的认证、基于LDAP的认证、基于Yale中心认证{方式。不同的认证环境拥有不同的用戯证方式,现在我们先抛开q些具体的细节,考察一下Acegi对受限资源进行访问控制的典型q程Q?
1Q你点击一个链接访问一个网;
2Q浏览器发送一个请求到服务器,服务器判断出你正在访问一个受保护的资源;
3Q如果此时你q未通过w䆾认证Q服务器发回一个响应提CZq行认证——这个响应可能是一个HTTP响应代码Q抑或重定向C个指定页面;
4Q根据系l用认证机制的不同Q浏览器或者重定向C个登录页面中Q或者由览器通过一些其它的方式获取你的w䆾信息Q如通过BASIC认证对话框、一个Cookie或一个X509证书Q;
5Q浏览器再次用戯n份信息发送到服务器上Q可能是一个用L录表单的HTTP POST信息、也可能是包含认证信息的HTTP报文_Q?
6Q服务器判断用户认证信息是否有效Q如果无效,一般情况下Q浏览器会要求你l箋试Q这意味着q回W?步。如果有效,则到达下一步;
7Q服务器重新响应W?步所提交的原始请求,q判断该h所讉K的程序资源是否在你的权限范围内,如果你有权访问,h得到正的执行q返回结果。否则,你将收到一个HTTP 403错误Q这意味着你被止讉K?
在Acegi框架里,你可以找到对应以上大多数步骤的类Q其中ExceptionTranslationFilter、AuthenticationEntryPoint、AuthenticationProvider以及Acegi的认证机制是其中的代表者?
ExceptionTranslationFilter是一个Acegi的Servletqo器,它负责探抛出的安全异常。当一个未认证用户讉K服务?ӞAcegi引发一个Java异常。Java异常本n对HTTPh以及如何认证用户是一无所知的Q?ExceptionTranslationFilter适时dQ对q个异常q行处理Q启动用戯证的步骤Q第3步)。如果已认证用户权讉K一个资源, Acegi也将引发一个Java异常QExceptionTranslationFilter则将q个异常转换为HTTP 403响应码(W?步)。可见,Acegi通过异常q行通讯Q?br />
ExceptionTranslationFilter接收q些异常q作出相应的动作?
当ExceptionTranslationFilter通过Java异常发现用户q未认证Ӟ它到底会请求重定向哪个面以要求用h供认证信息呢Q?q通过咨询AuthenticationEntryPoint来达到目的——Acegi通过AuthenticationEntryPoint描述d?面?
当你的浏览器通过HTTP表单或HTTP报文头向服务器提供用戯证信息时QAcegi需要将q些信息攉到Authentication中,Acegi ?#8220;认证机制”描述q一q程。此Ӟq个新生成Authentication只包含用h供的认证信息Q但q未通过认证?br />
AuthenticationProvider 负责对Authenticationq行认证。AuthenticationProviderI竟如何完成q一q程呢?请回忆一下上节我们所介绍?UserDetails和UserDetailsServiceQ大多数AuthenticationProvider通过 UserDetailsService获取和未认证的Authentication对应的UserDetailsq进行匹配比较来完成q一d。当用户?证信息匹配时QAuthentication被认为是有效的,AuthenticationProviderq一步将UserDetails中权限?ACL{信息拷贝到Authentication?
当Acegi通过认证机制攉到用戯证信息ƈ填充好Authentication后,Authentication被保存到SecurityContextHolder中ƈ处理用户的原始请求(W?步)?
你完全可以抛开Acegi的安全机Ӟ~写自己的Servletqo器,使用自己的方案构建Authentication对象q将其放|到SecurityContextHolder中。也怽使用了CMAQContainer
Managed AuthenticationQ容器管理认证)QCMA允许你从ThreadLocal或JNDI中获取用戯证信息,q时你只要获取这些信息ƈ其转换为Authentication可以了?
安全对象讉K控制
AcegiU受保护的应用资源ؓ“安全对象”Q这包括URL资源和业务类Ҏ。我们知道在Spring AOP中有前置增强、后|增强、异常增强和环绕增强Q其中环l增强的功能最为强大——它不但可以在目标方法被讉K前拦截调用,q可以在调用q回前改变返?的结果,甚至抛出异常。Acegi使用环绕增强对安全对象进行保护?
Acegi通过AbstractSecurityInterceptor为安全对象访问提供一致的工作模型Q它按照以下程q行工作Q?
1Q?从SecurityContext中取出已l认证过的AuthenticationQ包括权限信息)Q?
2Q?通过反射机制Q根据目标安全对象和“配置属?#8221;得到讉K目标安全对象所需的权限;
3Q?AccessDecisionManagerҎAuthentication的授权信息和目标安全对象所需权限做出是否有权讉K的判断。如果无权访问,Acegi抛出AccessDeniedException异常Q否则到下一步;
4Q?讉K安全对象q获取结果(q回值或HTTP响应Q;
5Q?AbstractSecurityInterceptor可以在结果返回前q行处理Q更改结果或抛出异常? AcegiU受保护的应用资源ؓ“安全对象”Q这包括URL资源和业务类Ҏ。我们知道在Spring AOP中有前置增强、后|增强、异常增强和环绕增强Q其中环l增强的功能最为强大——它不但可以在目标方法被讉K前拦截调用,q可以在调用q回前改变返?的结果,甚至抛出异常。Acegi使用环绕增强对安全对象进行保护? Acegi通过AbstractSecurityInterceptor为安全对象访问提供一致的工作模型Q它按照以下程q行工作Q? 1Q?从SecurityContext中取出已l认证过的AuthenticationQ包括权限信息)Q? 2Q?通过反射机制Q根据目标安全对象和“配置属?#8221;得到讉K目标安全对象所需的权限; 3Q?AccessDecisionManagerҎAuthentication的授权信息和目标安全对象所需权限做出是否有权讉K的判断。如果无权访问, Acegi抛出AccessDeniedException异常Q否则到下一步; 4Q?讉K安全对象q获取结果(q回值或HTTP响应Q; 5Q?AbstractSecurityInterceptor可以在结果返回前q行处理Q更改结果或抛出异常?
?6 AbstractSecurityInterceptor工作程
安全对象和一般对象的区别在于前者通过Acegi?#8220;配置属?#8221;q行了描qͼ?#8220;/view.jsp=PRIV_COMMON”配置属性就?“/view.jsp”q个URL资源标识为安全对象,它表C用户在讉K/view.jspӞ必须拥有PRIV_COMMONq个权限。配|属性通过 XML配置文gQ注解、数据库{方式提供。安全对象通过配置属性表CZؓ一个权限,q样QAcegi可以根据Authentication的权限信息获?用户可以讉K的哪些安全对象?
Ҏ安全对象的性质以及具体实现技术,AbstractSecurityInterceptor拥有以下三个实现c:
?FilterSecurityInterceptorQ对URL资源的安全对象进行调用时Q通过该拦截器实施环绕切面。该拦截器用Servletqo器实现AOP切面Q它本n是一个Servletqo器;
?MethodSecurityInterceptorQ当调用业务cL法的安全对象Ӟ可通过该拦截器cd施环l切面;
?AspectJSecurityInterceptorQ和MethodSecurityInterceptorcMQ它是针对业务类Ҏ的拦截器Q只不过它通过AspectJ实施AOP切面?
如何使用道:道用于一个线E的输出q接到另一个线E的输入
如何装:经常被以下的这UŞ式封装v来,以便l合许多的各种功能
对象的串行化Q?/strong>Java.io包中的两个流——ObjectInputStream和ObjectOutputStream是字节流Q他们的工作与其他输入和输出类伹{但他们的特D之处在于它们可以读写对象?/font>
对对象进行串行化Q?/strong>如果一个不能串行化的对象传递给writeObjectҎQ那么它抛出一个NotSerializable Exception。对象只能在它的cdCSerializable接口的情况下被串行化?/font>
为类提供对象串行化:只有在对象的cdCSerializable接口情况下,对象才是可串行化的。所有,如果惌对你的类的实例进串行化,q个cdd现Serializable接口。Serializable接口是一个空接口Q也是_他不包含MҎ声明Q它的作用只是表明这个类的对象可以被串行化?/font>
I/O复制程?Copy.java)Q如下:
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
//以上是此E序用到的IOcȝ包,也可以用“import java.io.*”
public class Copy {
public static void main(String[] args) throws IOException {
File inputFile = new File("D:\\temp\\HelloWorld.java"); //目标文g路径QJAVA中\径地址只能?#8220;\\”?#8220;/”不能使用“\”
File outputFile = new File("D:\\temp\\OutAgain.java"); //复制后新文g保存路径
FileReader in = new FileReader(inputFile);
FileWriter out = new FileWriter(outputFile);
int c;
while ((c = in.read()) != -1) //一直@环到0表示已经复制完毕Q所以这里用不{于?
out.write(c);
in.close(); //关闭L件对?br />
out.close(); //关闭写文件对?br />
}
q个对于Seam 1.2 用户来说是个好消息,因ؓ我们现在完全支持创徏Eclipse WTP兼容包括Seam 1.2.1的Seamlg热部|项目。增加完全增量异步部|到JBoss AS server中,你能得到既快又好的部|环境?
该发布版也支持Hibernate Tools用户的一些新功能和其他的bug修复。你能阅?a class="regularLink" target="">What's New and Noteworthy q篇文章了解它们?/p>
管现在q不支持Seam 2的项目创建向|但是代码完成和Seam视图能和Seam 2相容。仅需要右击项目增?q>Seam支持。大家赶紧试一下啊QSeam可是来的主啊?/q>