ï»??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲日本韩国一区,国产免费永久在线观看,精品3atv在线视频http://www.aygfsteel.com/vcycyv/category/47726.htmlzh-cnSun, 06 Jul 2014 18:13:14 GMTSun, 06 Jul 2014 18:13:14 GMT60åŸÞZºŽspringside4新徏project 错误Failed to execute goal org.apache.maven.plugins:maven-archetype-plugin的解军_Šžæ³?/title><link>http://www.aygfsteel.com/vcycyv/archive/2014/07/05/415476.html</link><dc:creator>人在江湖</dc:creator><author>人在江湖</author><pubDate>Sat, 05 Jul 2014 02:42:00 GMT</pubDate><guid>http://www.aygfsteel.com/vcycyv/archive/2014/07/05/415476.html</guid><wfw:comment>http://www.aygfsteel.com/vcycyv/comments/415476.html</wfw:comment><comments>http://www.aygfsteel.com/vcycyv/archive/2014/07/05/415476.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/vcycyv/comments/commentRss/415476.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/vcycyv/services/trackbacks/415476.html</trackback:ping><description><![CDATA[<div>åŸÞZºŽspringside4新徏project:<br /><span style="color: #333333; font-family: Helvetica, arial, freesans, clean, sans-serif, 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 15px; line-height: 25.5px; background-color: #ffffff;">使用Mavençš„Archetype插äšgåQŒå¯ä»¥åŸºäºŽQuickstart™å¹ç›®åQŒåˆ›å»ø™‡ªå·Þqš„™å¹ç›®ã€?/span><br style="box-sizing: border-box; color: #333333; font-family: Helvetica, arial, freesans, clean, sans-serif, 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 15px; line-height: 25.5px; background-color: #ffffff;" /><span style="color: #333333; font-family: Helvetica, arial, freesans, clean, sans-serif, 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 15px; line-height: 25.5px; background-color: #ffffff;">˜qè¡Œsupport/maven-archetype\install.bat后,双击根目录中的generate-project.bat <br /></span>遇到错误åQ?br />[ERROR] Failed to execute goal org.apache.maven.plugins:maven-archetype-plugin:2</div><div>.2:generate (default-cli) on project standalone-pom: The desired archetype does</div><div>not exist (org.springside.examples:quickstart-archetype:4.1.1-SNAPSHOT) -> [Help</div><div> 1]<br /><br />˜q™æ˜¯ä¸ÞZ»€ä¹ˆå‘¢åQ?br />打开generate-project.bat<br /><div>-DarchetypeVersion=4.1.1-SNAPSHOT</div>æ”ÒŽˆ<br /><div>-DarchetypeVersion=4.2.3-SNAPSHOT<br />ž®±å¥½äº†ï¼Œæ­£ç¡®çš„版本号åœ?span style="background-color: #ffffff; color: #333333; font-family: Helvetica, arial, freesans, clean, sans-serif, 'Segoe UI Emoji', 'Segoe UI Symbol'; font-size: 15px; line-height: 25.5px;">support/maven-archetype\install.bat˜qè¡Œ˜q‡ç¨‹ä¸­èƒ½çœ‹åˆ°</span></div></div><img src ="http://www.aygfsteel.com/vcycyv/aggbug/415476.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/vcycyv/" target="_blank">人在江湖</a> 2014-07-05 10:42 <a href="http://www.aygfsteel.com/vcycyv/archive/2014/07/05/415476.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>最˜q‘复习sql, 分äín整理çš?2条sql语句˜qžåŒæ•°æ®http://www.aygfsteel.com/vcycyv/archive/2012/06/26/381478.html人在江湖人在江湖Tue, 26 Jun 2012 01:29:00 GMThttp://www.aygfsteel.com/vcycyv/archive/2012/06/26/381478.htmlhttp://www.aygfsteel.com/vcycyv/comments/381478.htmlhttp://www.aygfsteel.com/vcycyv/archive/2012/06/26/381478.html#Feedback0http://www.aygfsteel.com/vcycyv/comments/commentRss/381478.htmlhttp://www.aygfsteel.com/vcycyv/services/trackbacks/381478.html原本sql写得也不好,˜q‘几òq´æ•°æ®åº“用得ž®‘,sql更是荒废了,最˜q‘复习sql,¾|‘上ä¾?子很多,但都只是提供sql例子åQŒæ²¡æœ‰é…å¥—的数据用来自己¾lƒä¹ å’Œè°ƒè¯•。俺觉得è‡?å·Þp¯•着写写sql,调试调试˜q˜æ˜¯æœ‰å¸®åŠ©çš„åQŒè¯»äººå®¶sql例子好像è¯ÀL‡‚了,自己写就æœ?必思èµ\正确åQŒè°ƒè¯•得通,写得½Ž€‹zã€?/p>

 
跟着¾|‘上‹¹è¡Œçš„学生选课表的例子复习了一下: http://www.cnblogs.com/buzaixian/archive/2009/09/21/1571365.html
˜q™ç¯‡æ–‡å­—在网上被转蝲烂了åQŒé‡Œé¢æœ‰äº›sql适合用在应用¾pȝ»Ÿé‡Œï¼Œæœ‰äº›â€œæŠ¥è¡¨â€çš„æ„?觉更重些åQŒä¸»è¦æ˜¯æƒ›_¤ä¹ å‰è€…。前20条大体还挺好åQŒåŽ30条明昑ցæŠ¥è¡¨é£Žæ ¼äº†ï¼Œè€?且后面选例良莠不齐åQŒé€‰äº†12个例子做¾lƒä¹ åQŒï¼ˆå…¶å®žå¾ˆå¤šè¯­æ³•åQŒcase, any/all, union之类的都没包括)åQŒç”¨mysql数据库,òq¶å…±äº«è‡ªå·±é€ å‡ºæ¥çš„æ•°æ®ã€‚关于这12æ?sql, 修正了原文中有纰漏的地方ã€?
sql是基本技能,若能写得好也挺精彩的åQŒè¿˜åœ¨ç‘ô¾l­ç»ƒä¹ ã€‚绝不提倡努力写复杂sql 解决业务问题。应用系¾lŸé‡Œå¦‚果存在很复杂的sqlåQŒå¾€å¾€æ­ç¤ºäº†ä¸šåŠ¡é€»è¾‘å‘ä¸‹æ³„éœ² 到sql层的问题åQŒä¸åˆ©äºŽ¾l´æŠ¤å’Œæ‰©å±•,虽然˜q™æ ·¼‹®å®žå¸¸èƒ½æé«˜˜qè¡Œæ•ˆçŽ‡ã€‚å…·ä½“æƒ…å†?自行取舍ã€?
下面的例子都是比较通用的sql, 其实针对特定的数据库åQŒéœ€è¦å­¦çš„也挺多åQŒæ¯”å¦?oracle dbçš„decode函数, rowid, rownum, connect by 虽然不通用åQŒä½†æ˜¯å¾ˆå®žç”¨ã€?


数据可以在这里下载,只是用作¾lƒä¹ åQŒæ²¡åšä“Q何外键关联:http://115.com/file/an2svxbe#sql-study.sql


整理的sql在下面:
Student(S#,Sname,Sage,Ssex) 学生�
Course(C#,Cname,T#) 评¡¨‹è¡?
SC(S#,C#,score) 成ç‡Wè¡?
Teacher(T#,Tname) 教师�
1. 选出每门功课都及格的学号
select distinct `s#` from sc where `s#` not in (select `s#` from sc where score <60)
2. 查询â€?”课½E‹æ¯”â€?”课½E‹æˆ¾l©é«˜çš„æ‰€æœ‰å­¦ç”Ÿçš„学号åQ?
SELECT c01.`s#` from (select `s#`, `score` from sc where `c#`=1) c01,
                          (select `s#`, `score` from sc where `c#`=2) c02
                     where c01.`s#` = c02.`s#` and c01.score > c02.score
3.  查询òq›_‡æˆç‡W大于60分的同学的学号和òq›_‡æˆç‡WåQ?
select `s#`, avg(score) from sc group by `s#` having avg(score) > 60
4. 查询所有同学的学号、姓名、选课数、æ€ÀLˆ¾l©ï¼›
select student.`s#`, student.`Sname`, count(`c#`), sum(score) from student left outer join sc on student.`s#` = sc.`s#` group by student.`s#`, sc.`s#`
5.查询没学˜q‡â€œå¶òq³â€è€å¸ˆè¯„¡š„同学的学受÷€å§“名;
select student.`s#`, student.`Sname` from student where student.`s#` not in (select distinct(sc.`s#`) from teacher, course, sc where Tname='叶åã^' and teacher.`t#` = course.`t#` and sc.`c#`= course.`c#` )
6. 查询学过â€?01â€åÆˆä¸”ä¹Ÿå­¦è¿‡¾~–号â€?02”课½E‹çš„同学的学受÷€å§“å?
select student.`s#`, student.sname from student, sc where student.`s#` = sc.`s#` and sc.`c#` = 1 and exists (select * from sc sc_2 where sc_2.`c#`=2 and sc.`s#`=sc_2.`s#`)
7. 查询学过“叶òq³â€è€å¸ˆæ‰€æ•™çš„æ‰€æœ‰è¯¾çš„同学的学号、姓å?(巧妙)
select `s#`, sname from student where `s#` in
       (select `s#` from sc, teacher, course where tname='叶åã^' and teacher.`t#`=course.`t#` and course.`c#`= sc.`c#` group by `s#` having count(sc.`c#`)=
               (select count(`c#`) from teacher, course where tname='å?òq? and teacher.`t#`=course.`t#`) )
8. 查询评¡¨‹¾~–号â€?02”的成ç‡W比课½E‹ç¼–号â€?01”课½E‹ä½Žçš„æ‰€æœ‰åŒå­¦çš„学号、姓å?(有代表æ€?
select `s#`, sname from (select student.`s#`, student.sname, score, (select score from sc sc_2 where student.`s#`=sc_2.`s#` and sc_2.`c#`=2) score2 from student , sc where
       sc.`s#`=student.`s#` and sc.`c#`=1) s_2 where score2 < score
9.查询没有学全所有课的同学的学号、姓�
select student.`S#`, Sname from student, sc where student.`s#` = sc.`s#` group by `s#`, sname having count(`c#`) < (select count(`c#`) from course)
10. 查询臛_°‘æœ‰ä¸€é—¨è¯¾ä¸Žå­¦å·äØ“â€?02”的同学所学相同的同学的学号和姓名åQ?
select distinct(sc.`s#`), sname from student, sc where student.`s#`=sc.`s#` and `c#` in (select `c#` from sc where `s#`=002)
11. 把“SC”表中“叶òq³â€è€å¸ˆæ•™çš„评¡š„成ç‡Wéƒ½æ›´æ”¹äØ“æ­¤è¯¾½E‹çš„òq›_‡æˆç‡WåQ?
update sc inner join
       (select sc2.`c#`, avg(sc2.score) score from sc sc2, teacher, course where
              sc2.`c#`=course.`c#` and tname='叶åã^' and teacher.`t#` = course.`t#` and course.`c#`=sc2.`c#` group by course.`c#`) sc3 on sc.`c#`=sc3.`c#` set sc.score=sc3.score
12. 查询2åïLš„同学学习的课½E‹ä»–éƒ½å­¦äº†çš„åŒå­¦çš„å­¦åøP¼›åQˆæ³¨æ„ç†è§£ï¼šwhere语句çš?½W¬ä¸€ä¸ªæ¡ä»¶è¿‡æ»¤æŽ‰ä¸æ»¡­‘³c#的记录,再group byåQŒå°±æ¯”较清晰åQ?
select `S#` from SC where `C#` in (select `C#` from SC where `S#`=2)
    group by `S#` having count(*)=(select count(*) from SC where `S#`=2);



]]>
¾ŸŽä¼æ‹›JavaåQŒå‘个招聘脓åQŒç‰ˆä¸È•™æƒ?/title><link>http://www.aygfsteel.com/vcycyv/archive/2011/10/10/360411.html</link><dc:creator>人在江湖</dc:creator><author>人在江湖</author><pubDate>Mon, 10 Oct 2011 09:47:00 GMT</pubDate><guid>http://www.aygfsteel.com/vcycyv/archive/2011/10/10/360411.html</guid><wfw:comment>http://www.aygfsteel.com/vcycyv/comments/360411.html</wfw:comment><comments>http://www.aygfsteel.com/vcycyv/archive/2011/10/10/360411.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/vcycyv/comments/commentRss/360411.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/vcycyv/services/trackbacks/360411.html</trackback:ping><description><![CDATA[<p>Software Developer - SAS Financial Management Mid-Tier<br>As a Software Developer, you will assist with the design, development and support of software for SAS Financial Management.  You will work on a developing the business logic for SAS Financial Management in a high performance Java based mid tier.  Your primary responsibilities will include designing and writing new or revised application code; performing development level testing, assisting in documentation and training; and performing other duties as assigned.<br>Essential<br>â€?nbsp;   Bachelor’s degree in Computer Science or related quantitative field<br>â€?nbsp;   5 years of development experience<br>â€?nbsp;   3 years of Java experience<br>â€?nbsp;   Professional experience with algorithm analysis and performance<br>â€?nbsp;   Professional experience developing server side objects which are used as part of a highly scalable distributed application<br>â€?nbsp;   Professional experience with JDBC and SQL<br>â€?nbsp;   Professional experience designing and developing distributed applications<br>â€?nbsp;   Fluent English<br>Additional<br>â€?nbsp;   Excellent development skills with a thorough understanding of Object Oriented programming<br>â€?nbsp;   Ability to work independently as well as part of a team<br>â€?nbsp;   Superior analytical and problem-solving skills<br>Preferences<br>â€?nbsp;   Professional experience developing with the following technologies:<br>o    JUnit<br>o    OLAP<br>o    HTML<br>o    HTTP(S)<br>o    LDAP<br>o    SOAP<br>o    Web Services<br>â€?nbsp;   Financial application development experience or experience with Oracle Financials, Great Plains, PeopleSoft, Hyperion, or similar financial software <p>Software Developer - SAS Financial Management Web Application<br>As a Software Developer, you will assist with the design, development and support of software for SAS Financial Management.  You will work on a developing the web application for SAS Financial Management.  Your primary responsibilities will include designing and writing new or revised application code; performing development level testing, assisting in documentation and training; and performing other duties as assigned.<br>Essential<br>â€?nbsp;   Bachelor’s degree in Computer Science or related quantitative field<br>â€?nbsp;   5 years of development experience<br>â€?nbsp;   2 years of Java experience<br>â€?nbsp;   2 years of web development experience<br>â€?nbsp;   Professional experience developing web applications which are part of a highly scalable distributed application<br>â€?nbsp;   Professional experience designing and developing distributed applications<br>â€?nbsp;   Fluent English<br>Additional<br>â€?nbsp;   Excellent development skills with a thorough understanding of Object Oriented programming<br>â€?nbsp;   Ability to work independently as well as part of a team<br>â€?nbsp;   Superior analytical and problem-solving skills<br>Preferences<br>â€?nbsp;   Professional experience developing with the following technologies:<br>o    Adobe Flash<br>o    JUnit<br>o    OLAP<br>o    HTML<br>o    SOAP<br>o    Web Services<br>â€?nbsp;   Financial application development experience or experience with Oracle Financials, Great Plains, PeopleSoft, Hyperion, or similar financial software <p>======================================= <p>½Ž€åŽ†å¯ä»¥å‘åˆîC¿ºä»¬è€æ¿çš„é‚®½Ž±ï¼šyan.gao@sas.com</p><img src ="http://www.aygfsteel.com/vcycyv/aggbug/360411.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/vcycyv/" target="_blank">人在江湖</a> 2011-10-10 17:47 <a href="http://www.aygfsteel.com/vcycyv/archive/2011/10/10/360411.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>hsqldbçš„ä‹É用方æ³?/title><link>http://www.aygfsteel.com/vcycyv/archive/2011/03/26/347071.html</link><dc:creator>人在江湖</dc:creator><author>人在江湖</author><pubDate>Sat, 26 Mar 2011 14:39:00 GMT</pubDate><guid>http://www.aygfsteel.com/vcycyv/archive/2011/03/26/347071.html</guid><wfw:comment>http://www.aygfsteel.com/vcycyv/comments/347071.html</wfw:comment><comments>http://www.aygfsteel.com/vcycyv/archive/2011/03/26/347071.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/vcycyv/comments/commentRss/347071.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/vcycyv/services/trackbacks/347071.html</trackback:ping><description><![CDATA[<p>现在很多开源项目ä‹É用hsqldbä½œäØ“æ•°æ®åº“ã€‚äº†è§£hsqldb的基本ä‹É用方法还是很必要的。这½‹‡ä¸æ˜¯å…¨é¢ä»‹¾lhsqldbçš„æ–‡å­—ï¼Œä½†æˆ‘è®¤äØ“ç”¨è¿™ä¸ªç¬”è®°çš„å†…å®¹è°ƒè¯•½E‹åºå¤Ÿç”¨äº†ã€?/p> <p>一、下载数据库åQŒåœ°å€åœ?a title="http://sourceforge.net/projects/hsqldb/files/hsqldb/" >http://sourceforge.net/projects/hsqldb/files/hsqldb/</a> 我ä‹É用的æ˜?.8.0版本。假定下载解压后的目录是D:\hsqldb\, 那么hsqldb.jar在D:\hsqldb\lib目录下。这个jaræ–‡äšg是hsqldb的核心包</p> <p> </p> <p>二、启动数据库åQŒæ¯”如数据库名称为test(不需要提前徏test数据åº?: java -classpath D:\hsqldb\lib\hsqldb.jar org.hsqldb.Server -database test</p> <p> </p> <p>三、在hsqldbçš„demo目录下有runManagerSwing.batåQŒè¿è¡Œå®ƒåQŒæ³¨æ„Type选择Engine ServeråQŒåŒæ—¶æ³¨æ„URL的写法。你½E‹åºä¸­é…¾|®çš„jdbc property中的url也应该是˜q™æ ·çš„:jdbc.url=jdbc:hsqldb:hsql://localhost</p> <p> </p> <p><a href="http://www.aygfsteel.com/images/blogjava_net/vcycyv/WindowsLiveWriter/hsqldb_13EB7/image_2.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.aygfsteel.com/images/blogjava_net/vcycyv/WindowsLiveWriter/hsqldb_13EB7/image_thumb.png" width="516" height="446"></a> </p> <p>接着ž®Þp¿›å…¥å›¾å½¢ç•Œé¢å¯ä»¥çœ‹åˆ°è¡¨åQŒåƈ且执行sql了ã€?/p><img src ="http://www.aygfsteel.com/vcycyv/aggbug/347071.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/vcycyv/" target="_blank">人在江湖</a> 2011-03-26 22:39 <a href="http://www.aygfsteel.com/vcycyv/archive/2011/03/26/347071.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>工作中用到的一些免费èÊYä»?/title><link>http://www.aygfsteel.com/vcycyv/archive/2011/03/18/346513.html</link><dc:creator>人在江湖</dc:creator><author>人在江湖</author><pubDate>Fri, 18 Mar 2011 01:10:00 GMT</pubDate><guid>http://www.aygfsteel.com/vcycyv/archive/2011/03/18/346513.html</guid><wfw:comment>http://www.aygfsteel.com/vcycyv/comments/346513.html</wfw:comment><comments>http://www.aygfsteel.com/vcycyv/archive/2011/03/18/346513.html#Feedback</comments><slash:comments>8</slash:comments><wfw:commentRss>http://www.aygfsteel.com/vcycyv/comments/commentRss/346513.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/vcycyv/services/trackbacks/346513.html</trackback:ping><description><![CDATA[<p>上学的时候都装盗版èÊYä»Óž¼Œå·¥ä½œäº†åš½E‹åºå‘˜å¼€å§‹æŠµè§¦ç›—版了åQŒæ¯•竟咱也是靠写代码混饭吃的åQŒä½•况工作环境也不允许装盗版。把òqÏx—¶ç”¨çš„一些免费èÊY件列出来åQŒæŠ›ç –引玉。大家有什么好的èÊY件也推荐一下ã€?/p> <p> </p> <p>ç”Õd›¾è½¯äšgåQšEDraw free mind <a title="http://www.edrawsoft.com/cn/freemind.php" >http://www.edrawsoft.com/cn/freemind.php</a></p> <p>评论åQšè¿™ä¸ªèÊY件名义上是画思维导图的,其实功能挺强大的。能ç”Õd‡ºæ¥æ¯”较复杂的图。åã^时咱工作写个文档åQŒè¦é…ä¸ªå›‘Ö•¥çš„,ž®Þq”¨˜q™ä¸ªç”»ï¼ŒæŒºå¥½ã€?/p> <p> </p> <p>思维导图软äšgåQšXMind <a title="http://www.xmind.net/" >http://www.xmind.net/</a></p> <p>评论åQšæ›´å‡ºåçš„åŒ¾c»èÊY件是freemind. 但是不如XMind好用。思维导图本èín是一¿U?自上而下"的思维方式åQŒå°±è·Ÿå’±å†™ä»£ç çš„æ€ç»´æ–¹å¼¾cÖM¼¼. 思维导图˜q˜èƒ½ç”¨æ¥è®°ç¬”记。把自己的hibernate½W”记截图发上来,有个直观印象åQ?/p> <p><a href="http://www.aygfsteel.com/images/blogjava_net/vcycyv/WindowsLiveWriter/be846bbc4334_8102/image_2.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.aygfsteel.com/images/blogjava_net/vcycyv/WindowsLiveWriter/be846bbc4334_8102/image_thumb.png" width="916" height="498"></a> </p> <p>˜q™ä¸ª½W”记可以从这里下载:<a title="http://cid-d8b11f9bf86fecfa.office.live.com/self.aspx/.Public/Hibernate.xmind" >http://cid-d8b11f9bf86fecfa.office.live.com/self.aspx/.Public/Hibernate.xmind</a></p> <p> </p> <p>ç”ȝ•Œé¢prototype的: Pencil <a title="http://pencil.evolus.vn/en-US/Home.aspx" >http://pencil.evolus.vn/en-US/Home.aspx</a></p> <p>评论åQšå®ƒæœ¬èín是firefox的一个插ä»Óž¼Œž®åéy好用。我们和¾ŸŽå›½åŒäº‹åˆä½œå¼€å‘,交流界面¾l“æž„ž®Þq”¨˜q™ä¸ªåQŒå“ˆå“ˆï¼Œæˆ‘推荐的ã€?/p> <p> </p> <p>¾|‘络¼‹¬ç›˜å·¥å…·åQ?SDExplorer: <a title="http://www.cloudstorageexplorer.com/" >http://www.cloudstorageexplorer.com/</a></p> <p>评论åQšé‡è¦çš„东西攑֜¨¾|‘络¼‹¬ç›˜ä¸Šï¼Œå¾—选个靠谱的网¾lœç¡¬ç›˜ã€‚微软够靠谱儿吧åQ?5G sky drive免费½Iºé—´ã€‚但是sky drive太慢了。可以用˜q™ä¸ªå·¥å…·æŠŠsky drive¾|‘络¼‹¬ç›˜æ˜ å°„åˆîC½ è‡ªå·±çš„æœºå™¨ä¸ŠåQŒå°±åƒæœ¬åœ°çš„¼‚ç›˜ä¸€æ øP¼Œæ–¹ä¾¿ã€‚我上面å…׃ínçš„hibernate½W”è®°ž®±æ˜¯æ”‘Öœ¨sky drive上的ã€?之前å…׃ínçš?<a href="http://www.aygfsteel.com/vcycyv/archive/2011/02/14/344298.html"><font color="#0000ff">分äín十二本经典电子书åQŒæ¶‰åŠjava, OO design, spring, hibernate,struts2, agile</font></a> 也放在那上面ã€?/p> <p> </p> <p>æ–‡äšg解锁工具åQšlock hunter: <a title="http://lockhunter.com/" >http://lockhunter.com/</a></p> <p>评论åQ?有时候文件删不掉åQŒæ½Cø™¢«é”äº†ã€‚天知道什么程序在使用˜q™ä¸ªæ–‡äšg…lock hunter知道åQŒè€Œä¸”˜q˜èƒ½è§£é”ã€?/p> <p> </p> <p>抛砖引玉。大家有什么好的èÊY件也推荐一下ã€?/p><img src ="http://www.aygfsteel.com/vcycyv/aggbug/346513.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/vcycyv/" target="_blank">人在江湖</a> 2011-03-18 09:10 <a href="http://www.aygfsteel.com/vcycyv/archive/2011/03/18/346513.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>发个招ähòq¿å‘Šhttp://www.aygfsteel.com/vcycyv/archive/2011/02/25/345147.html人在江湖人在江湖Fri, 25 Feb 2011 13:56:00 GMThttp://www.aygfsteel.com/vcycyv/archive/2011/02/25/345147.htmlhttp://www.aygfsteel.com/vcycyv/comments/345147.htmlhttp://www.aygfsteel.com/vcycyv/archive/2011/02/25/345147.html#Feedback0http://www.aygfsteel.com/vcycyv/comments/commentRss/345147.htmlhttp://www.aygfsteel.com/vcycyv/services/trackbacks/345147.html我们公司的一个QA团队招äh。是个挺不错的团队,很多其他teamçš„äh都想往那儿transfer呢。他们招人很急,我这么善良,ž®±åœ¨blog里脓出来åQŒçœ‹çœ‹èƒ½ä¸èƒ½å¸®å¿™æ”¶åˆ°å¥½ç®€åކã€?/p>

 

æ™ø™”招聘的原链接åQ?http://jobs.zhaopin.com/P2/CC0003/1191/J902/509/CC000311917J90250983000.htm?f=ss

 

软äšg分析师A

Job Responsibilities:

The mission of this role is to improve the customer competence of SAS. You are expected and will be cultivated to be an expert who understands SAS technology/solution, globalization and the domain knowledge. In more details, duties will include:Conducts customer experience testing and best practice testing for SAS technologies and solutions;

  • Provides counseling on localized SAS software;
  • Provides internal SAS practice training and implementation guidance, especially for new product and solutions;
  • Collects the feedback from customers.

Qualifications:

  • Hands on experience in business intelligence;
  • Passion on programming, hands on Java programming or C/C++ experiences and skills;
  • Better skills on communication, customer-facing and problem-resolving;
  • The ability to work as member of a team, virtual team and individual;
  • Good written and spoken English;
  • Master’s or Bachelor's degree.

Preferences:

  • SAS products and technology knowledge;
  • Domain Knowledge in retail industry, financial management, risk management, CRM, etc.;
  • Experience in internationalization and localization.

 

发送简历至:bjrnd@sas.com



]]>
也谈代码质量http://www.aygfsteel.com/vcycyv/archive/2011/02/19/344664.html人在江湖人在江湖Sat, 19 Feb 2011 09:52:00 GMThttp://www.aygfsteel.com/vcycyv/archive/2011/02/19/344664.htmlhttp://www.aygfsteel.com/vcycyv/comments/344664.htmlhttp://www.aygfsteel.com/vcycyv/archive/2011/02/19/344664.html#Feedback5http://www.aygfsteel.com/vcycyv/comments/commentRss/344664.htmlhttp://www.aygfsteel.com/vcycyv/services/trackbacks/344664.html˜q™ç¯‡½Ž—是 一堂如何提高代码质量的培训è¯?/a> 的读后感。作者网名fangang. ˜q™ç³»åˆ—文章涵盖很多内容,包括设计模式åQŒDDDåQŒä»£ç å®¡æ ¸ç­‰½{‰ã€‚这些话题大于“代码质量”。更像是“提高èÊY件质量的培训è¯ä€ã€‚培训课本èínž®±æ˜¯é«˜è´¨é‡çš„åQŒèµžåQç½‘上有不少转蝲åQŒæ¯”å¦?a title="http://www.tech-q.cn/thread-3831-1-1.html" >http://www.tech-q.cn/thread-3831-1-1.html。赞同作者的很多观点åQŒä¹Ÿæ”¶ç›Šä¸å°‘。æ€È»“一下:

 

[fangang]我们评ä­h高质量代码有三要素:可读性、可¾l´æŠ¤æ€§ã€å¯å˜æ›´æ€§ã€?/p>

[vcycyv]同意˜q™ä¸‰ä¸ªæ–¹é¢ã€‚我总这æ ähƒ³åQŒèÊY件的核心是可¾l´æŠ¤æ€§ã€‚可¾l´æŠ¤æ€§ä¸»è¦å°±ä½“现在可è¯ÀL€§å’Œæ‰©å±•性ã€?/p>

 

[fangang]åQˆå¯è¯ÀL€§ï¼‰ä¸è¦¾~–写大段的代ç ?/p>

[vcycyv]Martin Fowler½Ž?从大ŒDµä»£ç æŠ½å–独立的æ–ÒŽ³•"叫做"extract method"åQŒè¿™æ˜¯å¸¸è§è€Œé‡è¦çš„重构手段。在他的refactor书里从技术层面做了详¾l†çš„阐述。分解的˜q‡ç¨‹ä¸­ï¼Œæ¯”较å®ÒŽ˜“形成技术障¼„çš„local variable. 引一ŒDµä¹¦é‡Œçš„话,专门讨论˜q™ä¸ªè¯é¢˜çš„:

â€?nbsp;    Copy the extracted code from the source method into the new target method.
â€?nbsp;    Scan the extracted code for references to any variables that are local in scope to the
source method. These are local variables and parameters to the method.
â€?nbsp;    See whether any temporary variables are used only within this extracted code. If so,
declare them in the target method as temporary variables.
â€?nbsp;    Look to see whether any of these local-scope variables are modified by the extracted
code. If one variable is modified, see whether you can treat the extracted code as a query
and assign the result to the variable concerned. If this is awkward, or if there is more than
one such variable, you can't extract the method as it stands. You may need to use Split
Temporary Variable and try again. You can eliminate temporary variables with
Replace Temp with Query (see the discussion in the examples).
â€?nbsp;    Pass into the target method as parameters local-scope variables that are read from the
extracted code.
â€?nbsp;    Compile when you have dealt with all the locally-scoped variables.
â€?nbsp;    Replace the extracted code in the source method with a call to the target method.

â€?nbsp;    Compile and test.

 

前两òq´çœ‹åˆîC¸€ä¸ªè®¨è®ºçš„很火的话题,说ä“Q意复杂的产品åQŒéƒ½èƒ½break into一¾pÕdˆ—的小æ–ÒŽ³•åQŒæ¯ä¸ªæ–¹æ³•行æ•îC¸­‘…过5行。当然没必要˜q™ä¹ˆç‹ ï¼Œä½†å¦‚果你真这么狠åQŒæˆ‘倒觉得没啥明昄¡š„坏处ã€?/p>

 

"而一些更有经验的½E‹åºå‘˜ä¼šé‡‡ç”¨å¦å¤–一¿Uä»Žä¸Šå¾€ä¸‹çš„¾~–写方式。当他们在编写程序的时候,每个被分出去的程序,可以暂时只写一个空½E‹åºè€Œä¸åŽÕd…·ä½“实现功能。当ä¸È¨‹åºå®Œæˆä»¥åŽï¼Œå†ä¸€ä¸ªä¸ªå®žçŽ°å®ƒçš„æ‰€æœ‰å­½E‹åºã€‚采用这æ ïLš„¾~–写方式åQŒå¯ä»¥ä‹É复杂½E‹åºæœ‰æ›´å¥½çš„规划åQŒé¿å…åªè§æ ‘木不见森林的弊病ã€?˜q™ä¹Ÿæ˜¯ä¸€ä¸ªå¥½çš„实è·üc€?

 

提到˜q™ç§è‡ªä¸Šè€Œä¸‹çš„ç¼–½E‹æ–¹æ³•,™åÞZ¾¿æŽ¨è 《斯坦福大学开放课½E‹ï¼š¾~–程æ–ÒŽ³•》。这是一¾pÕdˆ—视频教程。google一下有很多地方可以下蝲或在¾U¿è§‚看,比如优酷http://v.youku.com/v_show/id_XMjE4NzQ0NDI0.html 在视频教½E‹é‡Œæ•™æŽˆä¹Ÿæ¼”½CÞZº†è‡ªä¸Šè€Œä¸‹çš„ç¼–½E‹æ–¹æ³•ã€?˜q™æ˜¯å…¥é—¨¾U§çš„æ•™ç¨‹åQŒæœ¬æ¥æƒ³é€šè¿‡å®ƒç»ƒ¾lƒå¬åŠ›ï¼ŒåŽæ¥å‘çŽ°˜q™è¯¾½E‹æ ¹æœ¬å°±æ˜¯å–œå‰§ç‰‡åQŒçœ‹çš„过½E‹ä¸€ç›´ç‹‚½W‘,教授牚w€—ã€?

 

跟可è¯ÀL€§ç›¸å…³çš„一个话题就是注释。近òq´æ¥ä¸€ä¸ªå¹¿æ³›è¢«æŽ¥å—的做法是åQŒå°½é‡é€šè¿‡ 避免大段代码 以及良好的变量命名达到可è¯ÀL€§ã€‚注释在˜q™ä¸ª˜q‡ç¨‹ä¸­è¢«æ·¡åŒ–了。我基本同意˜q™ç§åšæ³•åQŒç¨‹åºç»“构清晎ͼŒè‡ªè§£é‡Šçš„变量名都是重要的实践。变量名ž®½é‡ä¸è¦å†™ç¾ƒå†™ï¼Œå¦‚果写羃写的话,一定要æœ?strong>¾~©å†™å­—典有据可查。看spring的代码,可以发现很多¾cÕdæˆ–方法名åœ?0个字½W¦ä»¥ä¸Šã€‚大ŒD‰|³¨é‡Šå¾€å¾€æš—示½E‹åº¾l“构的不合理。不鼓励写过多注释的¾l“æžœž®±æ˜¯åQŒå‰©ä¸‹çš„æ³¨é‡Šéƒ½æ˜¯é‡è¦ä¸å¯æˆ–缺的,注释是程序的一部分åQŒéœ€è¦å’Œ½E‹åºä¿æŒä¸€è‡ß_¼Œä¹Ÿéœ€è¦è¢«¾l´æŠ¤ã€‚另一个基本而重要的原则是,要把public package protected privateæ–ÒŽ³•按照™åºåºå†™ã€‚更重要的、可讉K—®æ€§æ›´é«˜çš„æ–ÒŽ³•攑։é¢ï¼Œž®½ç®¡eclipse里可以方便地在视图过滤非publicæ–ÒŽ³•ã€?

 

[fangang](可维护æ€?但是åQŒäº‹å®žå´ä¸ä¸€æ øP¼Œå¯ÒŽœºå…³çñ”‹Æ¡è®¡½Ž—的代码遍布整个™å¹ç›®åQŒç”šè‡Ïxœ‰äº›è¿˜å†™å…¥åˆîCº†é‚£äº›å¤æ‚çš„SQL语句中ã€?

[vcycyv] Domain Driven Disignå¼ø™°ƒåQŒdomain的逻辑要圈在一定边界中。往上不能爬到service, 甚至UI层。往下不能渗透到repository以下åQŒæ¯”如sql语句里ã€?Domain Driven Design的书åœ?a >˜q™é‡Œä¸‹è²ã€‚更多电子书可以看之前写的博å®?分äín十二本经典电子书

 

[fangang]ž®†ä¸“ç”¨ä»£ç æå‡äØ“é€šç”¨ä»£ç 

[vcycyv] ˜q™ä¸ª˜q‡ç¨‹å¤§å®¶éƒ½ä¼šé‡åˆ°ã€‚什么代码算通用代码òq¶ä¸å®ÒŽ˜“界定。过多的通用代码æ·Ò޲¡äº†çœŸæ­£æœ‰é€šç”¨æ„ä¹‰çš„æ–¹æ³•,不èƒö的通用代码å®ÒŽ˜“造成代码重复。这个过½E‹æœ‰˜q™ä¹ˆå‡ ä¸ªæ–šw¢éœ€è¦æ³¨æ„ã€?

一åQŒé¿å…é‡å¤é€ è½®å­ã€?要对JDK常用的API以及¾lå…¸½W¬ä¸‰æ–¹çš„软äšg包有一定了è§?/strong>。ä‹D两个例子åQšå¤å…¸çš„singleton在JDK1.5之后可以用单一元素的enum表示åQŒè€Œä¸”不用考虑serializableçš„readresolve问题åQ?apache commons里的io, lang½{‰åŒ…提供了很多常用的API。我在我们的产品里,用到ioçš„FileNameUtilså’ŒExceptionUtils的一些方法。包括取文äšg后缀名,获取exceptionçš„root cause以及excepiton stack的字½W¦ä¸²ã€?要尽量重用可靠的½W¬ä¸‰æ–¹ä»£ç ï¼Œ 原因是你自己写的代码多半不如Sunå’Œapacheçš„äh好。更重要的是åQŒä½ è‡ªå·±å†™çš„æ¯ä¸€è¡Œcode都要自己¾l´æŠ¤ã€‚代码行数本íw«å°±æ˜¯ä»£ç ç»´æŠ¤é‡çš„一个因素。最˜q‘一两年疯狂地喜‹Æ¢åˆ é™¤ä»£ç ï¼Œä¼°è®¡å†å‘展下åŽÀLˆ‘ž®Þp¦è¢«åˆ é™¤äº†ã€?

二, ˜q˜æ˜¯domain为先ã€?strong>当你犹èõU一ŒD‰|¯”较“通用”的代码应该攑֜¨module里还是拿出来的时候,ž®½é‡˜q˜æ˜¯ä¿ç•™åœ¨module里吧。因为如果你犹èõU来,犹èõUåŽÖM¹‹åŽï¼Œå†›_®šå®ƒæ˜¯global的通用代码åQŒä¸‹ä¸€ä¸ªäh非常可能在module里找不到åQŒå°±è®¤äؓ没有˜q™ç§code,自己又写一遍。太‹È€˜q›çš„写一堆通用代码åQŒä¸€æ—¦ç»„¾l‡ä¸å¥½ï¼Œž®±æ²¡äººçˆ±åŽÖM»Žé€šç”¨ä»£ç é‡Œå¯»å®äº†ã€‚关于这一点,martin大叔有近似的阐述åQ?åœ?a >Patterns of Enterprise Application Architectureé‡?

A common concern with domain logic is bloated domain objects. As you build a screen to manipulate orders you'll notice that some of the order behavior is only needed only for it. If you put these responsibilities on the order, the risk is that the Order class will become too big because it's full of responsibilities that are only used in a single use case. This concern leads people to consider whether some responsibility is general, in which case it should sit in the order class, or specific, in which case it should sit in some usage-specific class, which might be a Transaction Script (110) or perhaps the presentation itself.

The problem with separating usage-specific behavior is that it can lead to duplication. Behavior that's separated from the order is harder to find, so people tend to not see it and duplicate it instead. Duplication can quickly lead to more complexity and inconsistency, but I've found that bloating occurs much less frequently than predicted. If it does occur, it's relatively easy to see and not difficult to fix. My advice is not to separate usage-specific behavior. Put it all in the object that's the natural fit. Fix the bloating when, and if, it becomes a problem.

三、通用代码一定要有整体设计。如果调用通用代码的那些invoker不完全在你控制的范围åQŒæ¯”如你写的½E‹åºæœ‰å…¶ä»–项目组在调用,那么你修改API的签名一定会被骂æ­Èš„。所以通用代码要思前惛_Ždesign清楚了才release.¾l“构清楚的通用代码也比较方便以后查找ã€?strong>好的½E‹åºæ€ÀL˜¯åˆ†å±‚的,通用代码要尽量往底层æ”?/strong>ã€?

 

[fangang]一个快速提高èÊY件质量的捷径ž®±æ˜¯åˆ©ç”¨è®¾è®¡æ¨¡å¼ã€?

[vcycyv]设计模式除了是一¿Uå·¥å…·ä»¥å¤–,学习、思考设计模式能扩展coding的思维方式。自å·×ƒ¹Ÿæ€È»“了一½‹‡åšå®?串讲23¿Uè®¾è®¡æ¨¡å¼?/a> ã€?

 

[fangang]拿一个员工工资系¾lŸæ¥è¯´å§ã€‚当人力资源在发放一个月工资的时候,以及¼›»èŒçš„员工肯定不能再发放工资了。在¾pȝ»Ÿè®¾è®¡çš„æœŸåˆï¼Œå¼€å‘äh员商量好åQŒåœ¨å‘˜å·¥ä¿¡æ¯ä¸­è®¾å®šä¸€ä¸ªâ€œç¦»èŒæ ‡å¿—”字ŒDüc€‚编写工资发攄¡š„开发äh员通过查询åQŒå°†â€œç¦»èŒæ ‡å¿—â€äØ“false的员工查询出来,òq¶äؓ他们计算和发攑ַ¥èµ„。但是,随着˜q™ä¸ª¾pȝ»Ÿçš„不断ä‹É用,¾~–写员工½Ž¡ç†çš„开发äh员发玎ͼŒâ€œç¦»èŒæ ‡å¿—”字ŒDµå·²¾lä¸èƒ½æ»¡­‘›_®¢æˆïLš„需求,因而将“离职标志”字ŒDµåºŸå¼ƒï¼Œòq¶å¢žåŠ äº†ä¸€ä¸ªâ€œç¦»èŒæ—¶é—´â€å­—ŒD‰|¥½Ž¡ç†¼›»èŒçš„员工。然而,¾~–写工资发放的开发ähå‘˜åÆˆä¸çŸ¥é“è¿™æ ïLš„变更åQŒä¾ç„¶ä‹É用着“离职标志”字ŒDüc€‚显ç„Óž¼Œ˜q™æ ·çš„结果就是,软äšg¾pȝ»Ÿå¼€å§‹å¯¹¼›»èŒå‘˜å·¥å‘放工资了。仔¾l†åˆ†æžè¿™ä¸ªé—®é¢˜çš„原因åQŒæˆ‘们不隑֏‘玎ͼŒ¼‹®è®¤å‘˜å·¥æ˜¯å¦¼›»èŒåQŒåƈ不是“发攑ַ¥èµ„”èÊY件类应当完成的工作,而应当是“员工管理”èÊY件类应当完成的。如果将“获取非¼›»èŒå‘˜å·¥â€çš„ä»ÕdŠ¡äº¤ç»™â€œå‘˜å·¥ç®¡ç†â€èÊYä»¶ç±»åQŒè€Œâ€œå‘攑ַ¥èµ„”èÊY件类仅仅只是去调用,那么¼›»èŒåŠŸèƒ½ç”±â€œç¦»èŒæ ‡å¿—â€å­—ŒD‰|”¹ä¸ÞZº†â€œç¦»èŒæ—¶é—´â€å­—ŒDµï¼Œå…¶å®žž®×ƒ¸Žâ€œå‘攑ַ¥èµ„”èÊY件类毫无关系。而作为“员工管理”的开发äh员,一旦发生这æ ïLš„变更åQŒä»–当然知道åŽÖM¿®æ”¹è‡ªå·Þq›¸åº”的“获取非¼›»èŒå‘˜å·¥â€å‡½æ•ŽÍ¼Œ˜q™æ ·ž®×ƒ¸ä¼šå‘生以上问题ã€?

[vcycyv]哈哈åQŒæˆ‘喜欢˜q™ä¸ªä¾‹å­ã€‚DDD的核心思想ž®±æ˜¯˜q™ä¸ªã€‚当然DDDçš„ç†è®ø™¿˜æœ‰ä¸€äº›å…·ä½“的实践。Eric Evan在他的DDD书里讲了一个cargo的例子,当时我还找了一下代码,没找刎ͼŒä»Žfangang的博客评论里居然发现哪里能找åˆîC»£ç äº†åQ?a title="http://dddsample.sourceforge.net/" >http://dddsample.sourceforge.net/, ˜q˜æ²¡æ¥å¾—及具体看。以后有æœÞZ¼šæ·±å…¥äº†è§£ä¸€ä¸‹ã€?

 

[fangang]åQˆä»£ç å®¡æŸ¥ï¼‰ 被审查后的代码如果还出现¾~ºé™·åQŒå®¡æŸ¥è€…应当负有责ä»?

[vcycyv] ˜q™ä¸ª¾pÕdˆ—的最后一½‹‡æ–‡ç« ä¸»é¢˜æ˜¯ä»£ç å®¡æŸ¥ã€‚作者所说的最佛_®žè·µå¾ˆæœ‰é“理,但不是在ä»ÖM½•环境下可操作性都强的。我不知道最佛_®žè·‰|˜¯ä»€ä¹ˆï¼Œä½†æˆ‘觉得有一些问题是值得注意的ã€?

一ã€?strong>代码审查的范围要ž®ï¼Œæœ€å¥½æ˜¯one-oneçš?/strong>åQŒè·Ÿ¾l©æ•ˆæ²¡æœ‰å…³ç³»åQŒèŒƒå›´å°å¯ä»¥ä¿è¯å®¡æŸ¥ä¸ä¼šå¤ªä¼¤â€œé¢å­â€ï¼Œå¦åˆ™ä¼šåª„响团¾l“氛围ã€?

二ã€?strong>审查者在指出错误的同æ—Óž¼Œä¸€å®šè¦è¯´å¦‚何修正问é¢?/strong>。我非常非常反感那种善于用大道理指出别äh错误åQŒè‡ªå·±å´æŠŠé”™è¯¯çŠ¯å¾—æ›´å¤¸å¼ çš„é‚£¿Uäh。如果你自己没有更好的解å†Ïx–¹æ¡ˆï¼Œž®±åˆ«è¯´é‚£æ˜¯é—®é¢˜ã€?

三、代码审查制度的推行以良好的团队氛围为前提。大安™ƒ½æ˜¯äؓ了äñ”品着惻I¼Œ˜q™æ ·ä»£ç å®¡æŸ¥æ‰ä¸è‡³äºŽæ‰¯çš®ã€?

四、关于审查者的责ä“Q。我同意fangang说的"被审查后的代码如果还出现¾~ºé™·åQŒå®¡æŸ¥è€…应当负有责ä»?, 但是谁来˜q½ç©¶è´£ä“QåQŒå¦‚何界定责任,怎么˜q½ç©¶è´£ä“Q呢?呵呵åQŒè¿™ä¸ªææ€•不好操作。代码审查显然不能杜¾ldefect, 但是明显的设计,¾~–码错误是应该看到的åQŒä½†æ€Žä¹ˆåˆç®—"明显"呢。èÊY件本íw«ä¸åƒæ•°å­¦é‚£æ ·ä¸¥æ û|¼Œå®ÒŽ˜“界定问题。纪律在软äšg行业作用有限åQŒå›¢é˜Ÿæ°›å›´æ¯”¾Uªå¾‹é‡è¦ã€‚但怎么营造好的团队氛围又是一个太宽泛的问题ã€?

]]>
咱数据库使用外键么?http://www.aygfsteel.com/vcycyv/archive/2011/02/17/344481.html人在江湖人在江湖Wed, 16 Feb 2011 16:58:00 GMThttp://www.aygfsteel.com/vcycyv/archive/2011/02/17/344481.htmlhttp://www.aygfsteel.com/vcycyv/comments/344481.htmlhttp://www.aygfsteel.com/vcycyv/archive/2011/02/17/344481.html#Feedback12http://www.aygfsteel.com/vcycyv/comments/commentRss/344481.htmlhttp://www.aygfsteel.com/vcycyv/services/trackbacks/344481.html今天看天乙社区的½E‹åºåQŒå‘çŽîC¸€ä¸ªå¤–键都没有啊,太狠了。上¾|‘看了一些资料,½Eå¾®æ•´ç†äº†ä¸€ä¸‹ã€?/p>

˜q™ä¸ªå¸–子很牛åQ?/p>

http://www.itpub.net/viewthread.php?tid=1313696&extra=&page=1

 

我的观点是,外键在初始阶ŒDµèƒ½åŠ çš„éƒ½åŠ ä¸Šï¼Œåªæœ‰˜q«ä¸å¾—已的时候才disable或drop掉。遇到性能瓉™¢ˆçš„æ—¶å€™ï¼Œž®½é‡é‡‡ç”¨å…¶å®ƒæ–¹å¼è°ƒä¼˜åQŒè€Œä¸è¦è½»æ˜“牺牲掉外键。有外键¾U¦æŸçš„æ—¶å€™ï¼Œå†™ç¨‹åºçš„¼‹®ä¼šæœ‰çº¦æŸï¼Œä½†ä»Žç›´è§‰ä¸Šè¯´˜q™ç§¾U¦æŸä¸€å®šç¨‹åº¦ä¸Šæ­ç¤ºäº†è®¾è®¡æˆ–实现上不合理的地斏V€‚带着外键写出来的应用更們֐‘于严谨。äñ”品上¾U¿ä¹‹å‰å¦‚果确实需要通过牺牲外键辑ֈ°æ€§èƒ½ä¸Šçš„优化åQŒå†æ¡ç›¸å¯¹ä¸é‡è¦çš„外键废弃掉åQŒåŒæ—¶è¦æŠŠè¿™ä¸ªdocument下来åQŒä¸‹‹Æ¡é‡åˆ°æ•°æ®ä¸ä¸€è‡´é—®é¢˜çš„æ—¶å€™ï¼Œæ˜¯ä¸ª¾U¿çƒ¦ã€‚两点说明:1. 我们在做的一个项目确实是ž®é¡¹ç›®ã€?nbsp; 2. 我得承认我最˜q‘三òq´å¼€å‘都不用关系型数据库åQŒè²Œä¼?no sql那么nbçš„key-value pair存数据,其实˜q™ä¸‰òq´åœ¨æŒä¹…层上很多¾U ç»“。如果我说的不对åQŒè¯·æŒ‡æ­£åQ?/u>

 

下面引用一些有见地的想法:

× æ”¯æŒå¤–é”®çš„ï¼š

1. ä½ çš„½E‹åºå†ä¸¥è°¨ä¹Ÿæœ‰å¯èƒ½å‡ºçްBUG;你自己判断不如交¾l™æ•°æ®åº“判断åQŒå®ƒåšå¾—又快又好ã€?br>    大多æ•îCh的程序没有考虑òq¶å‘问题。一旦考虑了就得手工加锁,效率很低ã€?br>    数据可能¾l•过你的应用½E‹åº˜q›å…¥æ•°æ®åº“ã€?br>2. 性能问题åQšéš¾é“你自己做就没有开销åQ?br>    一个外键判断分摊到事务¾U§åˆ«åQŒå¼€é”€å¯ä»¥å¿½ç•¥åQŒç”¨æˆ·å®Œå…¨æ²¡æœ‰å¯Ÿè§‰ã€?br>    如果是批量导入数据,可以先暂时屏蔽外键,事后用NOVALIDATE选项快速恢复,前提是你的数据是òq²å‡€çš„ã€?

 

也有人提åˆîCº†å¦‚æžœ100张表可能需要徏ç«?00ä¸ªçº¦æŸï¼Œå¯ÆD‡´æ€§èƒ½å¤ªå·®ã€?br>我要说的仍然是,是否˜q?00个外键约束都是业务必™åȝš„åQŒå¦‚果是åQŒæ²¡æœ‰åŠžæ³•è¿™ž®±æ˜¯å¿…须要加的,如果不是åQŒé‚£ä¹ˆå¤§å¯ä¸å¿…在所有的地方都增加外键ã€?br>如果在程序中仅对其中çš?ã€?张表çš?0来个外键¾U¦æŸ˜q›è¡Œåˆ¤æ–­åQŒç„¶åŽå’Œæ•°æ®åº“中çš?00个外键去比较åQŒåƈ评ä­hOracle的外键性能太差åQŒææ€•是有失公允的ã€?

 

× åå¯¹å¤–é”®çš„ï¼š

的确外键在大¾pȝ»Ÿä¸­ç”¨çš„很ž®‘,在开发初¾U§ï¼Œè®¾è®¡æ•°æ®åº“的时候一般会加入外键åQŒä»¥ä¿è¯¾pȝ»Ÿè®¾è®¡çš„完整性和业务需求的完整性,也便于开发äh员了解业务规则,在程序中加以控制åQŒå¾ˆå¤šå¤§¾pȝ»Ÿåœ¨ç³»¾lŸç¨³å®šåŽåQŒä¼šé€æ­¥ž®†å¤–键去掉,以保证性能åQŒå°†å¤ªå¤šçš„功能强加于数据库,虽然说数据库很强大,但是毕竟很多äºÞZ¸ä¿¡ä“Q数据库的能强大到什么都能干的地步。所以在一个大¾pȝ»Ÿä¸­å¤–键见的少也不­‘³äؓ奇,ž®ç³»¾lŸå°±æ— æ‰€è°“了åQŒç”¨ä¸ç”¨å¤–键取决于设计äh员,˜q™æ ·çš„ç³»¾lŸä¹Ÿéšå¤„可见ã€?

 

 

另引用一½‹‡ï¼š

引自http://blog.csdn.net/neusoft_lkz/archive/2009/07/21/4366668.aspx

数据库设计是否需要外键。这里有两个问题åQšä¸€ä¸ªæ˜¯å¦‚何保证数据库数据的完整性和一致性;二是½W¬ä¸€æ¡å¯¹æ€§èƒ½çš„媄响ã€?br>正方观点åQ?br>1åQŒç”±æ•°æ®åº“自íw«ä¿è¯æ•°æ®ä¸€è‡´æ€§ï¼Œå®Œæ•´æ€§ï¼Œæ›´å¯é ï¼Œå› äØ“½E‹åºå¾ˆéš¾100åQ…保证数据的完整性,而用外键即ä‹É在数据库服务器当机或者出现其他问题的时候,也能够最大限度的保证数据的一致性和完整性ã€?br>egåQšæ•°æ®åº“å’Œåº”ç”¨æ˜¯ä¸€å¯¹å¤šçš„å…³¾p»ï¼ŒåQ¡åº”用会¾l´æŠ¤ä»–那部分数据的完整性,¾pȝ»Ÿä¸€å˜å¤§æ—Óž¼Œå¢žåŠ äº†ïð‡åº”用åQŒï¼¡å’Œïð‡ä¸¤ä¸ªåº”用也许是不同的开发团队来做的。他们如何协调保证数据的完整性,而且一òq´ä»¥åŽå¦‚果又增加了C应用呢?
2åQŒæœ‰ä¸Õd¤–键的数据库设计可以增加ER囄¡š„可读性,˜q™ç‚¹åœ¨æ•°æ®åº“设计旉™žå¸”R‡è¦ã€?br>3åQŒå¤–键在一定程度上说明的业务逻辑åQŒä¼šä½¿è®¾è®¡å‘¨åˆ°å…·ä½“全面ã€?br>反方观点åQ?br>1åQŒå¯ä»¥ç”¨è§¦å‘器或应用½E‹åºä¿è¯æ•°æ®çš„完整æ€?br>2åQŒè¿‡åˆ†å¼ºè°ƒæˆ–者说使用主键åQå¤–键会òqÏx·»å¼€å‘éš¾åº¦ï¼Œå¯ÆD‡´è¡¨è¿‡å¤šç­‰é—®é¢˜
3åQŒä¸ç”¨å¤–键时数据½Ž¡ç†½Ž€å•,操作方便åQŒæ€§èƒ½é«˜ï¼ˆå¯¼å…¥å¯¼å‡º½{‰æ“ä½œï¼Œåœ¨insert,   update,   delete   数据的时候更快)
eg:在æ“v量的数据库中想都不要åŽÀLƒ³å¤–é”®åQŒè¯•惻I¼Œä¸€ä¸ªç¨‹åºæ¯å¤©è¦insert数百万条记录åQŒå½“存在外键¾U¦æŸçš„æ—¶å€™ï¼Œæ¯æ¬¡è¦åŽ»æ‰«ææ­¤è®°å½•æ˜¯å¦åˆæ û|¼Œä¸€èˆ¬è¿˜ä¸æ­¢ä¸€ä¸ªå­—ŒD‰|œ‰å¤–é”®åQŒè¿™æ äh‰«æçš„æ•°é‡æ˜¯æˆ¾U§æ•°çš„增长!我的一个程序入库在3个小时做完,如果加上外键åQŒéœ€è¦?8个小æ—Óž¼ 

¾l“论åQ?br>1åQŒåœ¨å¤§åž‹¾pȝ»Ÿä¸­ï¼ˆæ€§èƒ½è¦æ±‚不高åQŒå®‰å…¨è¦æ±‚高åQ‰ï¼Œä½¿ç”¨å¤–é”®åQ›åœ¨å¤§åž‹¾pȝ»Ÿä¸­ï¼ˆæ€§èƒ½è¦æ±‚高,安全自己控制åQ‰ï¼Œä¸ç”¨å¤–é”®åQ›å°¾pȝ»Ÿéšä¾¿åQŒæœ€å¥½ç”¨å¤–é”®ã€?br>2åQŒç”¨å¤–键要适当åQŒä¸èƒ½è¿‡åˆ†è¿½æ±?br>3åQŒä¸ç”¨å¤–键而用½E‹åºæŽ§åˆ¶æ•°æ®ä¸€è‡´æ€§å’Œå®Œæ•´æ€§æ—¶åQŒåº”该写一层来保证åQŒç„¶åŽä¸ªä¸ªåº”用通过˜q™ä¸ªå±‚来讉K—®æ•°æ®åº“ã€?

]]>
分äín十二本经典电子书åQŒæ¶‰åŠjava, OO design, spring, hibernate,struts2, agilehttp://www.aygfsteel.com/vcycyv/archive/2011/02/14/344298.html人在江湖人在江湖Mon, 14 Feb 2011 13:45:00 GMThttp://www.aygfsteel.com/vcycyv/archive/2011/02/14/344298.htmlhttp://www.aygfsteel.com/vcycyv/comments/344298.htmlhttp://www.aygfsteel.com/vcycyv/archive/2011/02/14/344298.html#Feedback12http://www.aygfsteel.com/vcycyv/comments/commentRss/344298.htmlhttp://www.aygfsteel.com/vcycyv/services/trackbacks/344298.htmlç›æ€¿¡ä½ ä»¬éƒ½è¯»˜q‡å…¶ä¸­çš„一些书åQŒå¤ª¾lå…¸äº†ï¼Œå€¼å¾—反复玩味。每本都能从我的sky drive¾|‘络¼‹¬ç›˜ä¸‹è²

1. thinking in java

java developer常见案头�/p>

 

2. effective java, 2nd Edition

会写代码和写好代码的差距åQŒå¯ä»¥é ˜q™æœ¬ä¹¦ç¾ƒçŸ­ã€‚包含JDK1.5çš„feature. 太出名了åQŒä¸å¤šè¯„论ã€?/p>

 

3. refactoring – improve the design of existing code

Martin Fowler的经典著作之一。初看的时候一头冷汗,他指出的很多错误我也犯过�/p>

 

4. J2EE Development Without EJB

Rod Johnson单挑EJB的思想基本都反映在˜q™é‡Œ

 

5. J2EE Design & Development

作者仍然是Rod Johnson, 和上一本书是一个系列的好书åQŒåŒæ ïL»å…¸ã€?/p>

 

6. Domain Driven Design – Tackling Complexity In The Heart Of Software

˜q‘两òq´æ¥å¯¹è‡ªå·±åª„响最大的一本书。俺到处推广之ã€?/p>

 

7. Extreme programming explained – embrace change 2nd edition

½W¬ä¸€ç‰ˆå°±å¤‡å—推崇åQ?得了Jolt大奖åQŒè¿™æ˜¯Kent Beck又经锤炼的第二版

 

8. Patterns of Enterprise Application Architecture

很多人都是通过˜q™æœ¬ä¹¦è®¤è¯†Martin大叔的吧åQ?哈哈åQŒåŽ»òq?0月我亲眼见到了Martin FowleråQŒè¿˜é—®äº†é—®å…³äºŽè¿™æœ¬ä¹¦çš„问题ã€?/p>

 

9. Spring in Action

自己是靠˜q™æœ¬ä¹¦å…¥é—¨Springçš?/p>

 

10. Pro Spring

说实话,˜q™æœ¬ä¹¦åªæ˜¯ç®€å•ç¿»˜q‡ï¼Œè®²äº†ä¸€äº›ä¸Šä¸€æœ¬ä¹¦æ²¡cover到的东西。Amazon上评ä»ïL›¸å½“高

 

11. Java Persistence with Hibernate

学hibernate的不二之�/p>

 

12. Struts 2 in Action

Struts2˜q™ç§æŠ€æœ¯ä¸å¤ªé€‚合看书学,应该直接看例å­?google, ˜q™æœ¬å¯ä»¥æ¡é‡ç‚¹çœ‹çœ‹ï¼Œç„¶åŽå½“工具书ä½Ñ€?/p>

]]>
svn˜qç§»åQˆdump &amp; loadåQ?&amp; 删除已保存的用户å?/title><link>http://www.aygfsteel.com/vcycyv/archive/2011/02/13/344177.html</link><dc:creator>人在江湖</dc:creator><author>人在江湖</author><pubDate>Sun, 13 Feb 2011 03:53:00 GMT</pubDate><guid>http://www.aygfsteel.com/vcycyv/archive/2011/02/13/344177.html</guid><wfw:comment>http://www.aygfsteel.com/vcycyv/comments/344177.html</wfw:comment><comments>http://www.aygfsteel.com/vcycyv/archive/2011/02/13/344177.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/vcycyv/comments/commentRss/344177.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/vcycyv/services/trackbacks/344177.html</trackback:ping><description><![CDATA[<p><strong><font size="4">˜qç§»</font></strong></p> <p>我ä‹É用visual svnä½œäØ“æœåŠ¡å™¨ã€‚ä‹É用方法参见我的另一½‹‡åšå®¢ï¼š <a href="http://www.aygfsteel.com/vcycyv/archive/2011/01/30/343785.html">visualsvn</a></p> <p>1. 创徏待备份的repositoryæ—Óž¼Œé€‰ä¸­create default structure(trunk, branches, tags). check in 一些代ç ?/p> <p>2. dump: ˜qè¡Œ svnadmin dump c:\svnRepo\forum > forum.dump</p> <p>3. 在另一台机器上创徏forum repository. ˜q™æ¬¡ä¸è¦é€‰create default structure</p> <p>4.  load: ˜qè¡Œ svnadmin load D:\svnRepo\forum < d:\tmp\forum.dump</p> <p> </p> <p><strong><font size="4">删除已保存的用户å?/font></strong></p> <p><font size="2">win7下清½Iºæ­¤ç›®å½•下的文äšg C:\Users\【user】\AppData\Roaming\Subversion\auth\svn.simple</font></p><img src ="http://www.aygfsteel.com/vcycyv/aggbug/344177.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/vcycyv/" target="_blank">人在江湖</a> 2011-02-13 11:53 <a href="http://www.aygfsteel.com/vcycyv/archive/2011/02/13/344177.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>备䆾mysqlçš„bat脚本http://www.aygfsteel.com/vcycyv/archive/2011/01/30/343788.html人在江湖人在江湖Sun, 30 Jan 2011 10:21:00 GMThttp://www.aygfsteel.com/vcycyv/archive/2011/01/30/343788.htmlhttp://www.aygfsteel.com/vcycyv/comments/343788.htmlhttp://www.aygfsteel.com/vcycyv/archive/2011/01/30/343788.html#Feedback0http://www.aygfsteel.com/vcycyv/comments/commentRss/343788.htmlhttp://www.aygfsteel.com/vcycyv/services/trackbacks/343788.html˜qžæŠ„带改了一个,记录下来

@echo off
set errorlevel=0
set dump_command="C:\Program Files\MySQL\MySQL Server 5.5\bin\mysqldump"

set db_bbs=bbscs8
set db_bug=jtrac
set db_wiki=wiki

set backup_dir=U:\bak\mysql\
set timestamp=%date:~,4%%date:~5,2%%date:~8,2%_%time:~0,2%-%time:~3,2%-%time:~6,2%

set backup_bbs_file=%backup_dir%%db_bbs%_backup_%timestamp%.sql
set backup_bug_file=%backup_dir%%db_bug%_backup_%timestamp%.sql
set backup_wiki_file=%backup_dir%%db_wiki%_backup_%timestamp%.sql

set user_mysql=root
set password_mysql=virtual

echo backup mysql database:%db_bbs%
%dump_command% -u%user_mysql% -p%password_mysql% %db_bbs% &gt; %backup_bbs_file%

echo backup mysql database:%db_bug%
%dump_command% -u%user_mysql% -p%password_mysql% %db_bug% &gt; %backup_bug_file%

echo backup mysql database:%db_wiki%
%dump_command% -u%user_mysql% -p%password_mysql% %db_wiki% &gt; %backup_wiki_file%

echo end backup



]]>
visualsvn(è½?http://www.aygfsteel.com/vcycyv/archive/2011/01/30/343785.html人在江湖人在江湖Sun, 30 Jan 2011 10:16:00 GMThttp://www.aygfsteel.com/vcycyv/archive/2011/01/30/343785.htmlhttp://www.aygfsteel.com/vcycyv/comments/343785.htmlhttp://www.aygfsteel.com/vcycyv/archive/2011/01/30/343785.html#Feedback0http://www.aygfsteel.com/vcycyv/comments/commentRss/343785.htmlhttp://www.aygfsteel.com/vcycyv/services/trackbacks/343785.html今天试用了一下,很好åQŒè{贴自åQ?a >http://blog.csdn.net/mini_snow/archive/2008/11/01/3197017.aspx

VisualSVN Server----更方便ä‹É用的SVN服务å™?收藏
  前发çŽîCº†ä¸€ä¸ªå¥½ç”¨çš„æœåŠ¡å™¨ç«¯è½¯äšgVisualSVN Server。下面就其安装及配置æ–ÒŽ³•作一½Ž€ç•¥ä»‹¾lï¼š

1åQ?安装
˜q™é‡Œæˆ‘们下蝲Windowsòq›_°ä¸‹çš„VisualSVN ServeråQŒåœ°å€åœ¨è¿™é‡Œï¼Œä¸‹è²åŽï¼ŒåŒå‡»å®‰è£…åQŒå¼¹å‡ÞZ¸‹é¢çš„对话框,可以更改Respositories仓库路径åQ?

2åQ‰ä‹É用VisualSVN Server Manager˜q›è¡Œé…ç½®
安装完毕åQŒé»˜è®¤ä¼šå¼¹å‡ºVisualSVN Server Manager½Ž¡ç†å™¨ï¼Œåœ¨ç®¡ç†å™¨ä¸­çš„Repositories目录下可以创建我们将要上传源码的目录¾l“æž„åQŒå¦‚图所½Cºï¼Œ¾U¢æ¡†å†…是该目录在服务器上的http地址åQ?

注意åQšåœ¨Resposiories下目录创å»ÞZ¹‹å‰ï¼Œé¦–先要在Users目录创徏拥有上传下蝲权限的用户及其密码(如:用户åQšmike, 密码åQ?23åQ?

3åQ‰ä¸Šä¼ æºç ?
˜q™é‡Œæˆ‘们使用Eclipseçš„svn插äšg来上传源码,选中所要上传的工程åQŒå³é”®Team->Share ProjectåQŒå¼¹å‡ºå¯¹è¯æ¡†åQŒé€‰ä¸­SVN™å¹ï¼Œ¾l§ç®‹åˆîC¸‹ä¸€™åµï¼Œå¦‚下囄¡¤ºåQ?

   URL栏填入目录服务器的http地址åQŒUser及Password栏填入mikeå’?23,˜q›å…¥ä¸‹ä¸€æ­¥ï¼Œå¦‚有warning对话框弹出,选择"Trust Always"卛_¯åQŒsvn代码提交æ–ÒŽ³•不在˜q™é‡Œèµ˜è¿°ã€‚提交完毕,卛_¯çœ‹åˆ°Eclipse工程源码出现svn服务器地址或版本号ã€?



]]>
Ö÷Õ¾Ö©Öë³ØÄ£°å£º ¶î¶û¹ÅÄÉÊÐ| ɳÍåÏØ| ¹±¾õÏØ| ÄáÄ¾ÏØ| ÐÂÔ´ÏØ| ¶õÖÝÊÐ| Ô˳ÇÊÐ| ×Ó³¤ÏØ| ËæÖÝÊÐ| ɯ³µÏØ| ´ó×ãÏØ| ÅìºþÏØ| Îâ½­ÊÐ| Á躣ÊÐ| °²¼ªÏØ| ³çÑôÏØ| Âé³ÇÊÐ| Î÷»ªÏØ| ÕÁÊ÷ÊÐ| ¼¨ÏªÏØ| Ëà±±| ¹ÌÔ­ÊÐ| ÄÏÑôÊÐ| ´ÈÀûÏØ| ¼Ñľ˹ÊÐ| ¸§Ô¶ÏØ| ºÍÌïÊÐ| ÓÀ¿µÊÐ| Âí±ß| ÐÞÎÄÏØ| ÄþµÂÊÐ| »ÝË®ÏØ| ÑïÖÐÊÐ| ÁÚË®| ³ÐµÂÊÐ| ³¤É³ÊÐ| ½­´ïÏØ| ÀÈ·»ÊÐ| ׿×ÊÏØ| ̨ɽÊÐ| ±±º£ÊÐ|