2010年2月22日
编程语言
首先要能跳出语言之争及语言偏见,架构师需要在中立的角度选择最合适团队的语言,避免在技术决策中加入过多个人喜好。在系统语言层面,主要可关注以下几种
Erlang, 会继续在小圈子内流行,业界应用Erlang技术最大的障碍不是Erlang技术本身,而在于缺乏这方面专业人才。
Scala, 和Erlang不同,Scala有成熟JVM及丰富的周边library,在异构系统中集成也很容易,新项目使用Scala风险很小,所以Scala在新语言中应该有较大的提升优势。
Go, 由于刚开始推出,不适合正式项目使用,2010年会稳步上升,可适当关注。
其他语言基本保持现状。
java论坛
架构
LAMP中的
Linux,
Apache,
MySQL会受到云计算中的App Engine模式的冲击,因为App Engine在分布式处理,可扩展性,稳定性方面都有很大的优势。 在App Engine模式中,MySQL作用会降低,退化成一种存储服务。而且App Engine的存储服务含义会更广泛,传统架构中的MySQL, Memcached, 及key value store在App Engine框架下都会以底层的服务方式提供。存储不再是软件,而是一种可靠服务,因此也会带来分布式存储相关技术的繁荣。
Web 2.0的设计中,Cache会成为一个中心元素。传统的web应用cache只是一个可选的锦上添花层,即使去掉,PHP + MySQL这种模式也可正常运行。但随着未来应用social化及realtime的趋势,从facebook及twitter的设计来看,cache已经从可选层成为核心层。cache设计的好坏直接决定架构的成败。
由于web发展的趋势会使应用更realtime化,体现到技术层面是HTML5(websockets)及类似技术具有更高的价值。但由于阻碍生产力的IE存在,HTML5无法一步到位。建议关注能解决HTML5及旧
ajax自适应的框架。
网络模型方面,由于多核的硬件环境,轻量级的进程模型值得采用。如传统的C++ boost的asio, 各公司自己实现的coroutine, Erlang的process, go的goroutines,
Java/Scala的
Netty/Mina框架等。但C++框架的代码优雅性可维护性欠佳,性能也没有突出的优势,可关注后面几种方案。
分布式方面,Dynamo及Chubby的思想会逐渐在国内的项目等到更广泛的应用,架构师会逐步丢弃双写,双机心跳等山寨式的容错设计思想,可靠的分布式设计思想会更普及。
存储
2009是key value/nosql产品百花齐放的年代。到2010年,它们之中优秀的会脱颖而出逐步主流化,主流化的产品周边的工具会更丰富,运维相关经验也会更成熟。目前阻碍很多key value产品推广很大一个障碍是运维的顾虑,而不是它们本身的性能。究竟会是Memcachedb/Tokyo Cabinet/Redis这样的小巧软件走向主流,还是Cassandra这样的巨无霸更受欢迎,我们拭目以待。
posted @
2010-03-03 09:33 Mison 阅读(118) |
评论 (0) |
编辑 收藏
备忘下地址,Black设计模式解析的还不错。
http://hi.baidu.com/misoner/blog/item/2334e388d8defd749e2fb429.html
posted @
2010-03-02 10:18 Mison 阅读(104) |
评论 (0) |
编辑 收藏
posted @
2010-02-26 09:23 Mison 阅读(233) |
评论 (0) |
编辑 收藏
下载地址:
http://bbs.misonsoft.com/thread-1755-1-1.html
posted @
2010-02-24 14:13 Mison 阅读(120) |
评论 (0) |
编辑 收藏
装载:Mison(迈胜)
http://bbs.misonsoft.com/thread-1225-1-2.html
通过铁路售票程序来理解实现多线程的两种方法:通过java.lang.Thread类和通过Runnable接口
java中有两种实现多线程的方式。一是直接继承Thread类,二是实现Runnable接口。那么这两种实现多线程的方式在应用上有什么区别呢?
为了回答这个问题,我们可以通过编写一段代码来进行分析。我们用代码来模拟铁路售票系统,实现通过四个售票点发售某日某次列车的100张车票,一个售票点用一个线程表示。
我们首先这样编写这个程序:
public class ThreadDome1{
public static void main(String[] args){
ThreadTest t = new ThreadTest();
t.start();
t.start();
t.start();
t.start();
}
}
class ThreadTest extends Thread{
private int ticket = 100;
public void run(){
while(true){
if(ticket > 0){
System.out.println(Thread.currentThread().getName() +
"is saling ticket" + ticket--);
}else{
break;
}
}
}
}
上面的代码中,我们用ThreadTest类模拟售票处的售票过程,run方法中的每一次循环都将总票数减1,模拟卖出一张车票,同时该车票号打印出来,直接剩余的票数到零为止。在ThreadDemo1类的main方法中,我们创建了一个线程对象,并重复启动四次,希望通过这种方式产生四个线程。从运行的结果来看我们发现其实只有一个线程在运行,这个结果告诉我们:一个线程对象只能启动一个线程,无论你调用多少遍start()方法,结果只有一个线程。
我们接着修改ThreadDemo1,在main方法中创建四个Thread对象:
public class ThreadDemo1{
public static void main(String[] args){
new ThreadTest().start();
new ThreadTest().start();
new ThreadTest().start();
new ThreadTest().start();
}
}
class ThreadTest extends Thread{
private int ticket = 100;
public void run(){
while(true){
if(ticket > 0){
System.out.println(Thread.currentThread().getName() +
" is saling ticket" + ticket--);
}else{
break;
}
}
}
}
这下达到目的了吗?
从结果上看每个票号都被打印了四次,即四个线程各自卖各自的100张票,而不去卖共同的100张票。这种情况是怎么造成的呢?我们需要的是,多个线程去处理同一个资源,一个资源只能对应一个对象,在上面的程序中,我们创建了四个ThreadTest对象,就等于创建了四个资源,每个资源都有100张票,每个线程都在独自处理各自的资源。
经过这些实验和分析,可以总结出,要实现这个铁路售票程序,我们只能创建一个资源对象,但要创建多个线程去处理同一个资源对象,并且每个线程上所运行的是相同的程序代码。在回顾一下使用接口编写多线程的过程。
public class ThreadDemo1{
public static void main(String[] args){
ThreadTest t = new ThreadTest();
new Thread(t).start();
new Thread(t).start();
new Thread(t).start();
new Thread(t).start();
}
}
class ThreadTest implements Runnable{
private int tickets = 100;
public void run(){
while(true){
if(tickets > 0){
System.out.println(Thread.currentThread().getName() +
" is saling ticket " + tickets--);
}
}
}
}
上面的程序中,创建了四个线程,每个线程调用的是同一个ThreadTest对象中的run()方法,访问的是同一个对象中的变量(tickets)的实例,这个程序满足了我们的需求。在Windows上可以启动多个记事本程序一样,也就是多个进程使用同一个记事本程序代码。
可见,实现Runnable接口相对于继承Thread类来说,有如下显著的好处:
(1)适合多个相同程序代码的线程去处理同一资源的情况,把虚拟CPU(线程)同程序的代码,数据有效的分离,较好地体现了面向对象的设计思想。
(2)可以避免由于
Java的单继承特性带来的局限。我们经常碰到这样一种情况,即当我们要将已经继承了某一个类的子类放入多线程中,由于一个类不能同时有两个父类,所以不能用继承Thread类的方式,那么,这个类就只能采用实现Runnable接口的方式了。
(3)有利于程序的健壮性,代码能够被多个线程共享,代码与数据是独立的。当多个线程的执行代码来自同一个类的实例时,即称它们共享相同的代码。多个线程操作相同的数据,与它们的代码无关。当共享访问相同的对象时,即它们共享相同的数据。当线程被构造时,需要的代码和数据通过一个对象作为构造函数实参传递进去,这个对象就是一个实现了Runnable接口的类的实例。
posted @
2010-02-23 09:19 Mison 阅读(181) |
评论 (0) |
编辑 收藏
SCWCD(Sun Certified Web Component Developer)是SUN推出的一个认证,主要是考察开发者对网络组件开发的熟悉程度,如果想考取该认证必须先要取得
SCJP的认证。
考试的费用在中国大陆是1500RMB(不知道价格是否有变),考试的内容主要有:
1)The Servlet Technology Model
2)The Structure and Deployment of Web Application
3)The Web Container Model
4)Session Management
5)Web Application Security
6)The
JavaServer Pages(JSP) Technoloty Model
7)Buliding JSP Pages Using the Expression Language(EL)
8)Building JSP Pages Using Standard Actions
9)Building JSP Pages Using Tag Libraries
10)Building a Custom Tag Library
11)Java EE Patterns
学习资料:
http://bbs.misonsoft.com/forum-19-1.html
posted @
2010-02-22 16:51 Mison 阅读(214) |
评论 (0) |
编辑 收藏
在用[MyEclipse] 写代码很容易卡死机,尤其是在对JSP文件的<%%>之间写代码的时候,只要一弹出智能提示就立刻卡死,程序失去响应,我以为是MyEclipse版本的问题,结果换了6.0版-》6.5版-》7.0版全都一样,难道是我机子的问题?可是还原系统后用还是一样的结果。
在网上找了很久才知道,是MyEclipse在智能提示的时候自动访问网络上sun公司的最新API文档,只要关闭掉网络连接就可以了。我试了试断开网络然后在用MyEclipse写代码,结果还真的搞定了。可是,我总不能因为个这就不上网了吧,终于,找到了两全其美的解决方法。
在自己创建的工程名上右键,选择Properties》在打开的窗口中点击
Java Build Path》单击Libraries选项卡,找到
JRE System Libraries->charsets.jar->Javadoc location
选中Javadoc location,再选择右边的Remove,更改成Javadoc location: (None),点击OK。
接下来在写代码的时候就不会再卡死了。
MyEclipse 6.5编写jsp代码时联想输入无响应解决方法
很头疼的一个问题,在jsp页面输入“.”之后,MyEclipse往往会出现无响应,要等上好几分钟才能恢复正常,找了很多方法,下面这个方法是最有效的,其实很简单:
Window-->java-->Installed JREs-->选中你的版本-->Edit-->选中jar包-->Javadoc Location 那里有个path
把path下面的地址去掉就OK了!
原因就是在引用javax.servelet.jar这个包中的javadoc location 位置设置的sun官方网站。这样每次提示的时候都要去sun官方网站去找doc所以导致MyEclipse会无响应,当禁用网卡或者拔掉网线的时候,就不会出现这种情况
http://java.sun.com/j2se/1.5.0/docs/api/
装载:
http://bbs.misonsoft.com/thread-920-1-2.html
总之把所有关于java.sun.com的东西都关掉就ok了应该是有5个
posted @
2010-02-22 09:32 Mison 阅读(125) |
评论 (0) |
编辑 收藏