|
2006年11月15日
摘要: 其实所有的一切都只是几个因素的相互作用, 互为函数:
* 并发量/数据量
* 机器配置
* 单个请求处理速度
* 稳定运行时间
阅读全文
摘要: 假设我们必须处理对象的存储, 加载, 和查询. 性能和引用完整性的约束, 给接口的实现带来了以下问题:
1. 加载根对象时如何避免加载大半个数据库
2. 存储时如何更新整个对象图
3. 存储时如何高效的更新整个对象图
4. 何时同步对象的内存状态和持久存储状态
5. 如何确保在出错时保持对象内存状态和持久存储状态之间的一致性
6. 如何保证引用的唯一性以避免可能的更新冲突
对性能的精益求精, 又促使人们解决更多的细节问题:
7. N+1查询问题
8. 分离查询模型和存储模型
9. 尽量减少查询语句
这些问题的解决方案又会带来新的问题. 阅读全文
摘要: 其它所有问题都是这个问题的某种解决方案引入的 阅读全文
摘要: 我们都知道我们无法证明软件已经没有Bug, 用波普尔的话说就是: 科学理论都是假说, 爱因斯坦的竞争理论表明对牛顿理论的即使如海王星发现般严格的检验都不能确保其正确性, 即对白天鹅的一千次观察都不足以断言黑天鹅的不存在 阅读全文
摘要: 1. 并行开发 与 集成 之间的矛盾
2. 基于文本的合并 与 基于语意的逻辑 之间的矛盾
3. 依赖的稳定性 与 依赖自身的演进升级 之间的矛盾 阅读全文
摘要: 试错法广泛的应用于自然科学领域. 迭代开发就是试错法在软件开发过程方面的应用 阅读全文
摘要: 机器环境虽然各有各的不同, 但依然有可能创建一个"环境无关的环境" 阅读全文
摘要: 这应该是一个概念: 你放一个东西到Session里, 但你只能获得一次, 下次它就不存在了. 用类来表示概念, 我们只需在生成对象时把自己加到Session里, 在提供的获取函数中把自己从Session中移除, 那么第二次你就得不到它了. 阅读全文
摘要: Q: 结对编程、责任共享,完全是胡说,代码找不到作者,开发人员哪里会有责任心!
Q: 我干嘛要把辛辛苦苦很多年积累的经验白白告诉别人? 我喜欢不可替代的感觉.
Q: 有些老手不喜欢结对, 觉得新人不劳而获对他们不利, 不情愿, 怎么办?
Q: 那互不相让怎么办?
Q: 我想修改某段代码, 想找原作者了解一下思路, 可根本不知道是谁 阅读全文
摘要: Q: 我的产品是电信级的设备, 几百人分成几十个项目组在开发, 各个项目组进度不统一, 如何集成?
Q: CI的愿景是好的, 但我们这里根本不可能, 我们的产品需要复杂的运行环境, 运行时需要人工干预, 怎么测? 阅读全文
摘要: Q: 为什么通过单元测试发现的 Bug 很少 ?
Q: 你们说验收测试应该由客户来编写, 可在我们这里根本不可能.
阅读全文
摘要: Working Effectively with Legacy Code 阅读全文
摘要: 挖掘你 CI server 的能力 阅读全文
摘要: 希望这能帮助让你的CruiseControl的配置文件更容易维护. 我相信持续集成应该很简单, 即使这会让我失业. 阅读全文
摘要: 突然之间多了点对你的构建破坏者同事们的容忍, 你盯着那个 build.xml, 它依然显示在你的IDE里面. 就是它了, 文件结尾处有一个多余的大大的 '#' 号 阅读全文
摘要: Ant脚本如何适应大规模的项目, Large Scale 的项目意味着: 目录较多, 层次较深 依赖较多, 构建脚本依赖的第三方Ant Task, 项目依赖的第三方库等 测试较多, 构建时间反馈周期较长 需要在不同操作系统上运行 需要在不同团队成员的机器上运行 Ant脚本较长如何维护 阅读全文
摘要: "拥抱变化" 是敏捷的态度之一, CruiseControl 正是来实证这种态度的作品. 多种类型的"变化"都会触发CruiseControl的一次构建过程.
我们知道CruiseControl能根据源代码的变化来调度一次构建, 但你知道CruiseControl支持多少种调度模式吗?
阅读全文
摘要: 我想这个实践的核心是:
1, 将CruiseControl的配置文件check in到版本控制系统中, 以解决意外损坏的问题
2, 使用专门的"project"来自动更新配置, 以解决每次需要有人专门登录到build server上去更新的瓶颈问题.
3, 复用但不依赖于CruiseControl对配置文件的validation, 以同时获得 "阻止有问题的配置文件被应用到build server的能力" 和 "迅速获知有人check in了有问题的配置的能力"
阅读全文
摘要: 让你的项目包含自己的依赖. (让你的构建脚本显式的引用包含在项目内部的依赖, 而不是隐式的让构建工具来包含那些依赖) 阅读全文
摘要: 我想这个实践的好处就是
1. 开发者每次在自己机器上构建时不需要发布, 省时间
2. CruiseControl使用跟开发者相同的构建脚本, 减少了开发者构建成功而CruiseControl构建失败的概率, 省调试时间
3. CruiseControl运行Publisher时开发者可以继续工作了, 提高了并发性, 还是省时间 阅读全文
摘要: 这实际上反映了目前SAX Handler接口定义中缺失的三种能力: Stoppable, Subscribable, 和 Reportable; 最终, ESAX 为 原始的 SAX Handler 补足了 可中止的能力, 可订阅的能力, 可汇报的能力, 使得比原始的SAX Handler更快, 比DOM接口更简单, 更易于编程 阅读全文
摘要: emma : 测试覆盖率低于指标的时候让Ant Build自动失败 阅读全文
|