Windows
Windows 7中Telnet功能安装与测试
Programming
我们什么时候应该使用异常?
错误码
1. 错误信息不丰富
2. 加入错误状态码可能需要改变函数签名
3. 错误状态码可能会被忽略
Cloud
谁来拯救云计算
Scalability
Write Through Cache
Cache is a component that will magically store data so that future requests of that same data will not be to the Remote Server, and hence it will improve the performance of our application significantly faster.
Operations
Java应用运维
Architecture
关于排队系统
对事件驱动的消息订阅的再思考
浅谈架构
如果要更正式点定义,架构就是model和pattern,从而把code串成system。而其中最重要的就是design principles (设计原则),即为什么这个问题要用这个而非那个。更文艺点,再结合点美学,也可以叫作design philosophy (设计哲学或理念)。
然后我们来看什么是model和pattern,这两个具体的定义我还没想出来。先说一下比较,model偏宏观,而pattern偏微观;model重抽象描述,而pattern重具体实现。比如,你的系统有一个服务端和一个客户端,那么client/server就是model,而client与server之间的交互方式则是pattern,比如RPC/message、同步/异步,比如用滑动窗口来组织请求与应答等等。当然,这和系统的尺度有关。如果你zoom in到服务端,此时的model可能就是模块的组织关系,而pattern则是调用方式,比如用function call还是event等。
架构是什么:其实"架构", 就是一个人用于解决常见(注意常见)设计问题的特定方法…
经常有人把"架构"说的很玄乎,很虚. 其实"架构", 就是一个人用于解决常见(注意常见)设计问题的特定方法(注意特定的, 但不一定是一个). 遇到问题稍许有些变化, 他能适当的调整自己的常用(注意常用)设计而去适合这个变化的能力. 这就叫:"架构"设计… 也就是说, 架构是:方法论, 是经验, 更是变通能力.
Reactor模式和NIO
Java
使用Jakarta Commons Pool处理对象池化
对于没有状态的对象(例如String),在重复使用之前,无需进行任何处理;对于有状态的对象(例如StringBuffer),在重复使用之前,就需要把它们恢复到等同于刚刚生成时的状态。由于条件的限制,恢复某个对象的状态的操作不可能实现了的话,就得把这个对象抛弃,改用新创建的实例了。
Java克隆
Java Support for Large Memory Pages
Java HotSpot VM (Virtual Machine) Performance Tuning: Command-line options
Solving OutOfMemoryError (part 5) – JDK Tools
jps -lvm
-m Output the arguments passed to the main method. The output may be null for embedded JVMs.
-l Output the full package name for the application’s main class or the full path name to the application’s JAR file.
-v Output the arguments passed to the JVM.
Scalability
深入浅出Flashcache(一)
投资
趋势是什么?总听到人说“顺势而为”,其实很多人并没搞清楚。股市的趋势是要分时间周期的,对以周为单位的人来说,最近3周的趋势无疑是下跌的;对于以日为单位的人来说,上周4的日内趋势就是上涨。因此请先确定你的操作频率,以周为单位应该做空,以日为单位在上周4就应该做多,都是可以盈利的!
欧债危机到底是怎么回事
Java
java nio 之MappedByteBuffer
理解Heap Profling名词-Shallow和Retained Sizes
Shallow Size
对象自身占用的内存大小,不包括它引用的对象。
针对非数组类型的对象,它的大小就是对象与它所有的成员变量大小的总和。当然这里面还会包括一些java语言特性的数据存储单元。
针对数组类型的对象,它的大小是数组元素对象的大小总和。
Retained Size
Retained Size=当前对象大小+当前对象可直接或间接引用到的对象的大小总和。(间接引用的含义:A->B->C, C就是间接引用)
换句话说,Retained Size就是当前对象被GC后,从Heap上总共能释放掉的内存。
不过,释放的时候还要排除被GC Roots直接或间接引用的对象。他们暂时不会被被当做Garbage。
LINUX
理解Inode
Architecture
关于复杂事件处理和事件驱动架构的争论
EDA: Event-Driven Architecture事件驱动架构
高性能队列Fqueue的设计和使用实践
Java读写
BufferedOutputStream虽然最快,但是易丢失数据,权衡之下,我们选择了MappedByteBuffer作为我们的文件操作实现
Caching is a technique for sharing data among multiple consumers or servers that are expensive to either compute or fetch. Data are stored and retrieved in a subsystem that provides quick access to a copy of the frequently accessed data.
Caches are implemented as an indexed table where a unique key is used for referencing some datum. Consumers access data by checking (hitting) the cache first and retrieving the datum from it. If it’s not there (cache miss), then the costlier retrieval operation takes place and the consumer or a subsystem inserts the datum to the cache.
写入的策略
当出现后台数据发生变动而没有更新Cache的时候,Cache中的数据就会变得陈旧.缓存的写入策略定义了缓存中的数据时如何更新的。
| 策略 |
实现说明 |
| Write-through |
every write to the cache follows a synchronous write to the backing store
|
|
Write-behind
|
updated entries are marked in the cache table as dirty and it’s updated only when a dirty datum is requested
|
|
No-write allocation:
|
only read requests are cached under the assumption that the data won’t change over time but it’s expensive to retrieve
|
Programming
怎样把自己培养成为一个优秀的程序员
Database & SQL
用Twitter的cursor方式进行Web数据分页
Scalability
多IDC数据时序问题及方法论
RAID介绍
8 Commonly Used Scalable System Design Patterns
- Load Balancer – a dispatcher determines which worker instance will handle a request based on different policies.
- Scatter and Gather – a dispatcher multicasts requests to all workers in a pool. Each worker will compute a local result and send it back to the dispatcher, who will consolidate them into a single response and then send back to the client.
- Result Cache – a dispatcher will first lookup if the request has been made before and try to find the previous result to return, in order to save the actual execution.
- Shared Space – all workers monitors information from the shared space and contributes partial knowledge back to the blackboard. The information is continuously enriched until a solution is reached.
- Pipe and Filter – all workers connected by pipes across which data flows.
- MapReduce - targets batch jobs where disk I/O is the major bottleneck. It use a distributed file system so that disk I/O can be done in parallel.
- Bulk Synchronous Parallel – a lock-step execution across all workers, coordinated by a master.
- Execution Orchestrator - an intelligent scheduler / orchestrator schedules ready-to-run tasks (based on a dependency graph) across a clusters of dumb workers.
如何解决cache同时过期问题
解决办法:
在一个比较大的应用中,cache尽量使用服务的形式,跟web应用进行隔离开来,避免应用重启导致重建cache对后端的冲击。(其实这样能提高多个web下面的缓存利用率)
cache服务尽量使用多个,避免一个宕机重建全部cache对后端的冲击。多个cache服务尽量使用一致性hash的模式。
cache同时过期的问题,比如是30秒过期,可以找个业务可以接收的范围,比如25-40秒之间随机一个过期时间,可以减少同时过期的概率。
可以考虑使用多级cache。
事实上,在设计系统的时候,就需要考虑cache如果失效对系统产生的可能冲击影响,以及如何去避免这些问题的发生。重启系统可以考虑一个缓存预热的过程。
Project Management
项目经理的思维批判
Java
Standard System Properties
通过Java/JMX得到full GC次数?
防痴呆设计
检查重复的jar包
检查重复的配置文件
检查所有可选配置
日志信息包含环境信息
异常信息给出解决方案
kill之前先dump
Scalability
如何解决cache同时过期问题
Linux
Linux知识学习(11)Tar命令压缩文件
压缩:tar -cvf
解压:tar -xvf
查看:tar -tvf
如果tar包被gzip压缩过,在命令选项中多加一个’z'即可。
程序员
项目经理的思维批判
怎样把自己培养成为一个优秀的程序员
从经理的角度看技术债务
技术债务来自哪里
- 没有经验的开发人员
- 项目工期的压力
- 凌乱而难读的代码。
- 专业领域的代码。
- 过度复杂
- 糟糕的设计
解决问题
- 让开发人员接受语言方面的基本培训并教授他们面向对象的原理,从而把他们的理解力提升至入门阶段。要想既成功又有效的话,这需要花几个礼拜的时间培训,还需要有精通这方面的人员来跟进和支持这一系列培训。
- 告诉开发人员和管理人员,当前的这些问题都是需要花费企业资金的。这点尤其重要,因为它会使解决这些问题的意义更加明确。你要清楚地告诉他们,管理人员会重视这些问题,并且已经开始着手偿还这些技术债务了。不断支持这些工作使之成为常规的原则之一,这样整个团队就会信任这个准则。
- 提供一些培训,包括代码的坏味道,重构,单元测试和测试驱动开发等。还可以结合课堂会议,基于网络的材料和书籍来进行培训。
- 在工作的时候,给他们一些空余时间去研究和练习他们的技能(一个礼拜两个小时应该是达成这个目标的最小的时间量)。练习的代码应该被丢弃,这样,他们就能无拘无束地尝试和试验一些事情,不管怎么样,他们不用在基础代码库上面进行练习。花点时间练习和研究应该是最有用的建议了。假如没有为他们提供空闲的时间,就压根不会发现真正合理的敏捷开发方式。这种组织方式也被称为“道场”-Dojo(更加详细的资料可以参考TDD Randori Session 和 TDD Randori Workshop)。
- 使用工具(静态分析,单元测试,持续集成,自动化可接受性测试)来帮助团队发现、减少和衡量他们的技术债务量。应该在团队层面利用这些度量数据,而不能分享给管理人员。团队成员需要知道,他们并不会因为对这些技术债务的度量而接受奖励或者遭受惩罚。如果我们把这些度量数据报告给管理层,并由管理层来追踪的话,开发人员很快会找到一些窍门来规避它们,这样就失去了本来应有的价值了。
- 当人们完成了他们的培训或者在技术上取得了少许提升时,应该得到奖励。奖励可以是给予一次认可的表彰或者是一些小小的礼物,但不要直接给予现金奖励。
- 每两个礼拜进行一次午餐聚会和一些关于技术方面的学习型会议。利用这些会议来促进开发成员之间的讨论。提供午餐可以提高参会人数。另外比较重要的是需要管理人员每次都来出席,这样就很清楚的表明他们也一直支持大家提高技术。
- 维护关于技术债务的备忘录 – 任何时候,如果开发人员发现一些无法立即应付的技术债务时,就需要填写一份技术债务登记卡。开发人员应该优先考虑这些技术债务,并花费10-15%的精力来偿还这些技术债务。大多数项目中,任何的一些小事都会使问题变得更加严重
OO & Design Pattern
超越设计模式
Java
JAVA线程dump的分析 — jstack pid
- 在 windows环境中,在启动程序的控制台里敲: Ctrl – Break,线程的 dump会产生在标准输出中( 缺省标准输出就是控制台,如果对输出进行了重定向,则要查看输出文件)。
- 在 unix, linux和 MacOS 环境中,在控制台中敲: Ctrl-\,或者,; 用 “kill -3 <pid>” ,或者 “kill – QUIT <pid>”。 Pid是用所关注的 JAVA进程号,您可以用 “ps -ef | grep java” 找到;或者使用 JDK 5.0中的 “jps -v” 命令获得。
- 在各个操作系统平台,都可以用 JDK 5.0工具包中的 jstack <pid>
Programming
每位开发人员都应铭记的10句编程谚语
- 无风不起浪
- 预防为主,治疗为辅
- 不要孤注一掷 (过度依赖某人)
- 种瓜得瓜,种豆得豆
- 欲速则不达
- 三思而后行
- 如果你惟一的工具是一把锤子,你往往会把一切问题看成钉子
- 沉默即赞同
- 双鸟在林,不如一鸟在手
- 能力越大,责任越大
Scalability
Amdahl定律
分布式服务框架常被质疑的价值
Other
Windows命令行窗口日志输出重定向方法
Java
Java Annotation手册
关于 JVM 命令行标志您不知道的 5 件事
Linux & Unix
10 个值得采用的 UNIX 命令行习惯
- 在单个命令中创建目录树。
- 更改路径;不要移动存档。
- 将命令与控制操作符组合使用。
- 谨慎引用变量。
- 使用转义序列来管理较长的输入。
- 在列表中对命令分组。
- 在
find 之外使用 xargs 。
- 了解何时
grep 应该执行计数——何时应该绕过。
- 匹配输出中的某些字段,而不只是对行进行匹配。
- 停止对
cat 使用管道。
Vim Movement Shortcuts Wallpaper
curl 资料总结
Scalability
greenplum数据库引擎探究