最近在准备一支外包团队的过程中,我思考了一下:做为一个程序员,最珍贵的品质是什么?有个词一直在我的脑海里反复出现,它就是平衡。我们可以看到,一个成功的程序员在开发的时候,他对平衡的理解体现在很多方面,下面就是其中的一些: 速度和质量 最具的代表性的一个例子就是在软件开发过程中,速度和质量之间的平衡。开发软件时,如果只追求速度,不考虑代码的可维护性,这永远都是下下策。这就跟你无休无止的反复设计和琢磨你的软件却从未拿出来给用户试一下一样不可取。懂得平衡的程序员既能做到迅速的开发出代码,又能保证在整个开发周期里提交的代码都是有质量的。 新兴技术和传统技术 选择开发工具和技术框架时,平衡是关键。不懂得平衡的程序员在选择采用某种技术时,他们的出发点只是这些技术是新兴的和让人兴奋的,而拒绝某些技术的原因只是它们不出名或未经证实。懂得平衡的程序员会用自己的标尺来测评新兴的技术,会在权衡从中获得的功能益处的同时也会考虑其中潜伏的风险。 做和说 如果你曾经有过在某次研讨会上观看了某人的演讲后又去翻看他写的代码的经历,你就会知道,一个人谈论技术的能力并不等同于他运用这些技术的能力。而另一种极端,你会看到有些非常安静的家伙,坐在你们公司的地下室里,写出既快又漂亮的代码,却无人问津。懂得平衡的程序员知道,做和说组合起来,才会发挥最大的效力。 也就是说 … 借用一句老话,所有事情上你都要注意保持平衡,包括平衡自身。不平衡显然会导致任何交易的失败。每个人都有自己的个人想法,这是个好事,但前提是你要做到平衡,它是你把事情做好的保证。 本文是从 The Balanced Developer 这篇文章翻译而来。 转载来源: http://www.aqee.net/the-balanced-developer/
Author Archive
nginx+tomcat+memcached+iphash 实现负载、容灾
2011-11-01 by Jinyang | No Comments | Filed in 工作认真nginx+tomcat+memcached+iphash 实现负载、容灾 很成熟的方案,Session统一放在memcache,可以实现用户无感知的停机发布等,平滑切换节点
Tags: nginx
使用memcached实现集群业务的用户业务锁
2011-11-01 by Jinyang | No Comments | Filed in 工作认真为保证业务数据的一致性,防止出现脏数据,某个做了集群部署的业务需要控制某一个业务同一时刻只能有一个节点进行业务处理,刚好项目也使用了memcached,于是用memcached实现一个用户业务锁机制就是最简单的解决方案。
用Hg(Mercurial)做发布版本控制
2011-11-01 by Jinyang | No Comments | Filed in Uncategorized以前在linux下用了rsync做文件改动监控和同步,现在的某项目在windows下,(虽然也有windows的rsync,没做测试,没敢用),想要实现文件的增量发布,文件夹变更监测,版本管理回退,综合这3个需求,Hg比较合适。
Tomcat、JAVA、Iframe、P3P跨域
2011-11-01 by Jinyang | No Comments | Filed in 工作认真项目使用iframe来组织页面内容,之前因为虽然业务发布在不同的服务,但是也都是一个大域名的不同子域名,最近新增了一个外部的域名就出现了SSO登录总是提示不成功退出。 解决的过程: 1. 首先是确定只有IE下有问题,Chrome下完全正常,就把精力从代码逻辑转移到浏览器兼容上来 2.发现只要是使用ie右键新窗口打开页面,就可以成功的SSO,直接点击在iframe中则必然失败,怀疑到iframe上 3. 输出SessionID发现有多个不同的SessionID,搜“iframe Session不一致”发现很多提到跨域的SSO遇到此类问题,解决方案为增加P3P头 4. 直接在一个测试的JSP页面里增加P3P测试后无效,用 http://www.w3.org/P3P/validator.html http://www.w3.org/P3P/ 检测发现页面并没有输出P3P 5. 增加过滤器为页面设置P3P,测试,通过 以下为过滤器代码: 来源: http://blog.csdn.net/wdh226/article/details/6045337 import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; public class TransNameFilter extends HttpServlet implements Filter { private static Log logWriter = […]
订单安全控制
2011-11-01 by Jinyang | No Comments | Filed in 工作认真1. 订单表的时间戳字段应使用 systimestamp timestamp 的秒片段(fractional seconds),就是秒向下的精度划分,默认为6,最大为9 ,设置字段类型为: timestamp(9) 即可 ,高精度的时间戳可以满足顺序记录订单的需求,毕竟一秒的订单数量大于1亿的可能性还是很小的 。 Timestamp(precision)的precision是指timestamp的精度 ,取值0-9,默认为6,而timestamp的精度达到billion(十亿)分之一秒,是以11个字节存储 取值时测试了: select systimestamp from dual; select CURRENT_TIMESTAMP(9) from dual ; select systimestamp(9) from dual; systimestamp 得到的精度是6位, CURRENT_TIMESTAMP虽然可以指定到9位,但是最后3位一直是000,所以虽然数据库是9位,但是取值好像达不到这么高精度,不过6位也可以满足业务。 systimestamp(9) 和 CURRENT_TIMESTAMP(9) 一样的最后3位都是000 官方文档显示: These are features in Oracl9i or later version.CURRENT_TIMESTAMP and CURRENT_DATE give session timestamp/date.SYSTIMESTAMP and SYSDATE give databse date.The two obviously may be in different timezones. […]
Oracle中查看锁表情况的Sql语句
2011-10-30 by Jinyang | No Comments | Filed in OracleSELECT S.SID SESSION_ID, S.USERNAME, DECODE(LMODE,0,’None’,1,’Null’,2,’Row-S (SS)’, 3,’Row-X (SX)’,4,’Share’,5,’S/Row-X (SSX)’,6,’Exclusive’,TO_CHAR(LMODE)) MODE_HELD, DECODE(REQUEST,0,’None’,1,’Null’,2,’Row-S (SS)’,3,’Row-X (SX)’,4,’Share’,5,’S/Row-X (SSX)’,6, ‘Exclusive’,TO_CHAR(REQUEST)) MODE_REQUESTED, O.OWNER||’.’||O.OBJECT_NAME||'(‘||O.OBJECT_TYPE||’)’, S.TYPE LOCK_TYPE, L.ID1 LOCK_ID1, L.ID2 LOCK_ID2 FROM V$LOCK L, SYS.DBA_OBJECTS O, V$SESSION S WHERE L.SID = S.SID AND L.ID1 = O. OBJECT_ID; SELECT S.SID SESSION_ID, S.USERNAME, DECODE(LMODE,0,’None’,1,’Null’,2,’Row-S (SS)’, 3,’Row-X (SX)’,4,’Share’,5,’S/Row-X (SSX)’,6,’Exclusive’,TO_CHAR(LMODE)) MODE_HELD, DECODE(REQUEST,0,’None’,1,’Null’,2,’Row-S (SS)’,3,’Row-X (SX)’,4,’Share’,5,’S/Row-X (SSX)’,6, […]
第二次竞价:Bid history for ningzhi.com
2011-10-24 by Jinyang | No Comments | Filed in 域名Bid History Bid history for ningzhi.com 23-Oct-2011 15:18 PDT Bidder Date Bid Amount Comment gnotes 23-Oct-2011 13:31 PDT $557.00 Completed gnotes 23-Oct-2011 12:39 PDT $557.00 Bid Placed yuminame 23-Oct-2011 12:30 PDT $532.00 Bid Placed gnotes 23-Oct-2011 12:28 PDT $507.00 Bid Placed yuminame 23-Oct-2011 12:28 PDT $501.00 Bid Placed yuminame 23-Oct-2011 12:25 PDT $476.00 Bid Placed […]
Tags: 抢注
Bid history for ningzhi.com
2011-10-07 by Jinyang | No Comments | Filed in 域名其实没什么人竞价的,我没打算要,就随便抬了下价格,早早的出了个价就休息了,这个兄弟破费了,还不错的域名 Bid history for ningzhi.com Starting Bid: $69.00 07-Oct-2011 01:58 PDT Bidder Date Bid Amount Comment domainreg081 05-Oct-2011 23:58 PDT $583.00 Bid Placed istu 05-Oct-2011 18:21 PDT $558.00 Bid Placed domainreg081 05-Oct-2011 05:41 PDT $533.00 Bid Placed istu 05-Oct-2011 05:41 PDT $508.00 Bid Placed domainreg081 05-Oct-2011 04:40 PDT $458.00 Bid Placed istu 05-Oct-2011 04:40 PDT $433.00 […]
Tags: 抢注
Bid history for hungou.com
2011-09-14 by Jinyang | No Comments | Filed in 域名Bid history for hungou.com Starting Bid: $69.00 14-Sep-2011 00:51 PDT Bidder Date Bid Amount Comment lujch 13-Sep-2011 12:24 PDT $1,051.00 Bid Placed john lee 13-Sep-2011 12:17 PDT $1,001.00 Bid Placed yuminame 13-Sep-2011 12:17 PDT $976.00 Bid Placed john lee 13-Sep-2011 12:16 PDT $951.00 Bid Placed yuminame 13-Sep-2011 12:15 PDT $926.00 Bid Placed lujch 13-Sep-2011 12:15 PDT […]