java并发教程
未读在Java类库中出现的第一个关联的集合类是 Hashtable ,它是JDK 1.0的一部分。 Hashtable 提供了一种易于使用的、线程安全的、关联的map功能,这当然也是方便的。然而,线程安全性是凭代价换来的―― Hashtable 的所有方法都是同步的。 此时,无竞争的同步会导致可观的性能代价。 Hashtable 的后继者 HashMap 是作为JDK1.2中的集合框架的一部分出现的,它通过提供一个不同步的基类和一个同步的包装器 Collections.synchronizedMap ,解决了线程安全性问题。 通过将基本的功能从线程安全性中分离开来, Collections.synchronizedMap 允许需要同步的用户可以拥有同步,而不需要同步的用户则不必为同步付出代价。
Hashtable 和 synchronizedMap 所采取的获得同步的简单方法(同步 Hashtable 中或者同步的 Map 包装器对象中的每个方法)有两个主要的不足。首先,这种方法对于可伸缩性是一种障碍,因为一次只能有一个线程可以访问hash表。 同时,这样仍不足以提供真正的线程安全性,许多 ...
nginx
未读在此记录下Nginx服务器nginx.conf的配置文件说明, 部分注释收集与网络.123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108#运行用户user www-data; #启动进程,通常设置成和cpu的数量相等worker_processes 1;#全局错误日志及PID文件error_log /var/log/nginx/error.log;pid /var/run/nginx.pid;#工作模式及连接数上限events { use epoll; #epoll是多路复用IO(I/O Multiplexing)中的一种方式,但是仅用于linu ...
spring
未读下面我们对Spring MVC框架代码进行分析,对于webApplicationContext的相关分析可以参见以前的文档,我们这里着重分析Spring Web MVC框架的实现.我们从分析DispatcherServlet入手:
//这里是对DispatcherServlet的初始化方法,根据名字我们很方面的看到对各个Spring MVC主要元素的初始化
protected void initFrameworkServlet() throws ServletException, BeansException {
initMultipartResolver();
initLocaleResolver();
initThemeResolver();
initHandlerMappings();
initHandlerAdapters();
initHandlerExceptionResolvers();
initRequestToViewNameTranslator();
initViewResolvers() ...
我们中的许多人做事难以集中精神,但在游戏的时候却聚精会神,我们中的大部分人做事缺乏毅力,但这些人却可以坚持玩一个游戏直到天昏地暗。研究游戏设计机制以及游戏中所蕴含的心理特征有助于我们设计出更好的游戏,产品,甚至在日常生活中也能根据相应的原则激励自己,顺利达到预期目标。下面我们就分几方面来研究游戏设计机制,以及引申出来的产品设计原则。
我们中的许多人做事难以集中精神,但在游戏的时候却聚精会神,我们中的大部分人做事缺乏毅力,但这些人却可以坚持玩一个游戏直到天昏地暗。研究游戏设计机制以及游戏中所蕴含的心理特征有助于我们设计出更好的游戏,产品,甚至在日常生活中也能根据相应的原则激励自己,顺利达到预期目标。下面我们就分几方面来研究游戏设计机制,以及引申出来的产品设计原则。
1. 推搡效应。
推搡效应(Pushing effect) ,是指把商品放在目标买主够得着的地方。原本商场企图通过将领带货架放在人们容易够得着的通道旁以增加销量,但通道上的人流挤撞不但没有达到预期的效果反而降低了销量。这就是所谓的“推搡效应”引起的销量下降现象。推搡效应在网络上或者游戏上有着同样的作用。例如,游戏中游戏人物在某 ...
主要分为五部分:方法区,堆(这两块是所有线程共享的区域),程序计数器,本地方法栈,虚拟机栈(vm stack)(这三块为线程隔离区域)
程序计数器(Program Counter Register)
它是一块较小的内存空间,它的作用可以看做是当先线程所执行的字节码的信号指示器。
每一条JVM线程都有自己的PC寄存器,各条线程之间互不影响,独立存储,这类内存区域被称为“线程私有”内存(相当于每个线程一个程序计数器)
在任意时刻,一条JVM线程只会执行一个方法的代码。该方法称为该线程的当前方法(Current Method)
如果该方法是java方法,那PC寄存器保存JVM正在执行的字节码指令的地址
如果该方法是native,那PC寄存器的值是undefined。
此内存区域是唯一一个在Java虚拟机规范中没有规定任何OutOfMemoryError情况的区域
java虚拟机的多线程是通过线程轮流切换本分配处理器处理时间的(有点不太明白,这样的话为什么还要加线程锁呢)
Java虚拟机栈(Java Virtual Machine Stack)
与PC寄存器一样,Java虚拟机 ...
最近做项目,回想起了socket,做一个小例子回顾下,长期没有使用,忘记的差不多了。
预期目标:客户端向服务器端发送消息,服务器端读取信息,回复客户端,循环往复。
server端代码:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950package com.dai.socket; import java.io.DataInputStream;import java.io.DataOutputStream;import java.io.IOException;import java.net.ServerSocket;import java.net.Socket;import java.util.Scanner; /** * @Title: server.java * @Package com.dai.socket * @Description: TODO(添加描述) * @author 代长亚 * @date 2010-6-3 上午11:09:15 * @ ...
nobody wants to write the markup by hand- general-purpose XML editors are too clunky
<cards>
<card>
<name>John Doe</name>
<title>CEO, Widget Inc.</title>
<email>john.doe@widget.com</email>
<phone>(202) 456-1414</phone>
<logo url="widget.gif" />
</card>
<card>
<name>Michael Schwartzbach</name>
<title>Associate Professor</title>
<email>mi ...
访问控制与 RBAC 模型访问控制通常的多用户系统都会涉及到访问控制,所谓访问控制,是指通过某种方式允许活限制用户访问能力及范围的一种方法。这主要是由于系统需要对关键资源进行保护,防止由于非法入侵或者误操作对业务系统造成破坏。简而言之,访问控制即哪些用户可以访问哪些资源。
一般而言,访问控制系统包括三个组成部分:
主体:发出访问请求的实体,通常指用户或者用户进程。
客体:被保护的资源,通常是程序,数据,文件或者设备。
访问策略:主体和客体的映射规则,确定一个主体是否对客体具有访问能力。
RBAC 模型基于角色的访问控制(RBAC)的概念在七十年代就已经提出,但是直到九十年代由于安全需求的发展才又引起了广泛关注。RBAC 的核心思想是将系统资源的访问权限进行分类或者建立层次关系,抽象为角色的概念,然后根据安全策略将用户和角色关联,从而实现了用户和权限之间的对照。RBAC 通过引入角色并将其作为权限管理的中介,将访问控制系统分为两个部分,即权限与角色的关联和角色与用户的关联,具有灵活易控制的优点。
RBAC 模型的建立和实现是基于角色实现访问控制研究中的两大热点。RBAC96 模型因全 ...
Paul Irish是著名的前端开发工程师,同时他也是Chrome开发者关系团队成员,jQuery团队成员,Modernizr、 Yeoman、CSS3 Please和HTML5 Boilerplate的lead developer。针对大家对WebKit的种种误解,他在自己的博客发表了《WebKit for Developers》一文,试图为大家解惑。
对许多开发者来说,WebKit就像一个黑盒。我们把HTML、CSS、JS和其他一大堆东西丢进去,然后WebKit魔法般的以某种方式把一个看起来不错的网页展现给我们。但事实上,Paul的同事Ilya Grigorik说:
WebKit才不是个黑盒。它是个白盒。并且,它是个打开的白盒。
所以让我们来花些时间了解这些事儿:
什么是WebKit?
什么不是WebKit?
基于WebKit的浏览器是如何使用WebKit的?
为什么又有不同的WebKit?
现在,特别是Opera宣布将浏览器引擎转换为WebKit之后,我们有很多使用WebKit的浏览器,但是我们很难去界定它们有哪些相同与不同。下面我争取为这个谜团做些解读。 ...
软件设计
未读自从9岁那年得到第一台Commodore 64家用电脑起,我就开始编程。然而,当面对如何写出好的代码时,我仍然感觉自己还有很多要学的。
在探索如何提高自己的过程中,我学了很多种语言。大多数是以面向对象为主的(OO)。
然而,让我惊讶的是,在我读过的大多数书本、杂志和网上文章中,有着大量遭透了的被当作面向对象例子的代码。
这些代码中,我看到的最多被违反的原则是“命令,不要去询问(Tell, Don’t Ask)”原则。这个原则讲的是,一个对象应该命令其它对象该做什么,而不是去查询其它对象的状态来决定做什么(查询其它对象的状态来决定做什么也被称作‘功能嫉妒(Feature Envy)’)。在面向对象的编程中,一个对象被定义成由对象状态和操作这个状态的方法组成。
在《Holub on Patterns: Learning Design Patterns By Looking At Code》这本书里,Allen Holub在第一章里有一节的标题是“为什么getter和setter方法有害”。他在JavaWorld上的一篇文章里也谈论了这个问题。对所有的面向对象的程序员来说,这应该是一篇“ ...
