《Effective.Enterprise.Java中文版》知识点摘要

《Effective.Enterprise.Java中文版》本书最重要的部分是:理解企业级计算技术中的常规问题和使用企业级JAVA平台技术来处理这些问题。.

 

语言和API也许会发生变化,但是你将会理解:构建良好架构所要考虑的问题;有那些通信方式可供选择;如何选择状态存储的位置;各式各样的安全问题等等这些思想性的东西不会变。

 

资源管理:线程、数据库连接、套接字、文件,所有这些资源比堆内存来说要更难于管理。他们的是生命周期存活于JAVA虚拟机之外,并且需要以一种对并发使用来说友好的方式来被获取和被释放。

 

企业计算的十大谬误

参考P23

 

Web应用是一系列资源,比如servlet、jsp、模型类、工具类、以及静态资源(HTML、图像、声音文件等),它们共同地相互协作以提供所需功能。Web应用采用单一的.war文件部署,所以不可能出现:只部署了部分应用或应用的各个部件之间的版本不匹配。

 

当你为企业级应用和系统规划基本流程和设计的时候,牢记以下项中包含的建议,你就能向优雅的目标迈进:建立一个能够对高性能、高扩展性的企业级系统提供支撑的架构。

第1项:优先采用构件作为开发、部署和重用的核心元素。

第2项:跨越构件边界优先采用松耦合。

第3项:区分逻辑层和物理层。

第4项:数据和处理程序要尽可能靠近。

第5项:牢记标识引起的竞争。

第6项:使用“挂钩点”来注入优化、定制或新功能。

第7项:面对故障时要健壮。

第8项:定义性能和可扩展性目标。

第9项:只在事务性处理中使用EJB。

第10项:先测量性能,再进行优化。

80/20规则,它是计算机科学领域里最知名的规律之一,其最常见的形式有:20%的代码使用了80%的系统资源,20%的代码占用了80%的运行时间,20%的代码占用了80%的内存,80%的需求文档只覆盖了20%的必要工作等等。

第11项:认清“提供商中立”的成本。

第12项:内置监控功能。

“心跳”进程监控错误与保存日志信息。

在不运行调试器的情况下,要调试serlet或EJB时,日志信息越多越好。

第13项:内置管理支持。

第14项:部署要尽可能简单。

第15项:理解你所做的通信选择。

进程通信方式:RPC和消息传送;远程方法调用(RMI);公用对象请求代理程序架构(CORBA);Servlet(servlet与xml有效负载结合直接进入Web Sservice领域);Java消息服务(JMS)(JMS与xml有效负载结合将你带入Web Sservice领域);Jini(最显著的思想是自我修复网络和服务发现);JXTA;用于XML的Java API(JAX—RPC);用于XML消息传递的Java API(JAXM)。

上面中任何一个都能最终完成这项工作——将数据从机器A转移到机器B。很明显决策必须根植于某种事物,如果你的系统通信要发生在特定环境之上,请考虑下面的问题:

1)、你需要跨越防火墙的通信吗?防火墙他们不允许在任意TCP/IP端口上有进入的流量,而这正是RMI和CORBA都要使用的。

2)、你需要同步通信吗?如果你的通信模式大多是请求——响应模式,RPC肯定上首选的通信模式。

3)、你需要能够和任何平台进行通信吗?包括那些你并不很了解的平台?Web服务可以在所有平台之间创建一个“中间地带”,因为XML的无处不在。

第16项:仔细考虑你的查找。

在分布式系统中有多种形式的透明:访问(隐藏数据表示的不同,以及一个资源如何被访问)、位置(隐藏一个资源被定位在哪里)、迁移(隐藏一个资源可以被移动到另一位置)、重定位(隐藏一个资源可以在运行时移动到另一位置)、复制(隐藏一个资源的复制)、并发(隐藏一个资源可以被多个竞争用户分享)、失败(隐藏一个资源的失败和恢复)、持久性(隐藏一个软件资源是在内存中还是在硬盘上)。

第17项:识别网络访问的代价。

第18项:优选上下文完整的通信风格。

第19项:优选数据驱动的通信而不是行为驱动的通信。

第20项:避免为远程服务请求去等待响应。

第21项:考虑构件的划分以避免任何一台机器负载过重。

分布式系统、DNS

第22项:为了开放集成而考虑使用Web服务。

XML+HTTP

第23项:大批量地传送数据。

传送的块状数据要足够大以适应远程调用的开销。不要一次传送一个,而是大批量传送:以完整的对象块,或者对象集的形式。这正是IBM/BEA的服务数据对象(Service Data Object)解决方案的基本思想,并且可以论证这只比过程优先的持久层差一点。

批量地传送数据也有一些局限性——不断地在网络上传送大量数据并不多次往返好多少,因为你现在正在吸干网络带宽,并强制通信层花费相当大的力气来编组、发送、接收、以及反编组数据。你还要基于客户端将怎样使用(或不使用)某一个特大的数据项,来判断它是按引用传送还是按值传送更好;尤其要注意集合和可序列化对象。

第24项:考虑定制你自己的通信代理。

第25项:保持简洁。

代码保持简洁

第26项:优先采用规则引擎去处理复杂状态的评估和执行。

规则引擎通常服务于两个目的:(1)以最好的方式捕获业务规则(2)允许修改这些规则而不需要重新编码Java代码本身。

任何书写规则引擎能够理解的“规则语言”,有几种不同的实现:一种是开源的实现,叫做drools,可以从http;//www.codehaus.org上获得;BEA也包含了一种实现,并将其作为WebLogic平台的一部分,ILOG也在销售一种用来整合其它服务器的第三方的引擎。JSR94定义了标准的API用于连接规则引擎;它的参考实现叫做Java专家系统外壳,可以免费用于非赢利目的。

第27项:优先为隐含的非原子性错误场景采用事务性处理。

第28项:区分用户事务和系统事务。

第29项:最小化锁窗口

作为一条规则,在被同步的区域内,你应该尽可能少的操作。

第30项:当持有锁时不要让步给在构件之外的控制。

为了你自己,在执行任何构件外的通信之前,请确保所有的锁是释放的。

第31项:理解EJB的事务关联。

第32项:优先使用本地事务而不是分布式事务。

第33项:为了更好的可扩展性而考虑使用乐观的并发机制。

第34项:为了显式的并发控制而考虑使用悲观的并发机制。

第35项:考虑使用较低的隔离级别以获得更大的事务吞吐量。

第36项:面临回滚时使用保存点来保留部分工作。

第37项:当有可能避免锁定区域时就复制数据源。

第38项:偏爱不可变的,因为它不需要任何锁。

第39项:节省地使用HttpSession

第40项:使用对象优先的持久化来保存你的领域模型。

第41项:使用关系优先的持久化来显示关系模型的威力。

第42项:使用过程优先的持久化来创建一个封装层。

第43项:识别对象—层次结构的阻抗失配。

第44项:使用进程内或本地存储以避开网络。

第45项:不要假设拥有数据或数据库。

第46项:惰性加载不频繁使用的数据。

第47项:积极载入频繁使用的数据。

第48项:批处理SQL的工作以避免往返访问。

第49项:了解你的JDBC供应商。

第50项:调整你的SQL语句。

第51项:考虑富客户端UI技术。

HTML/DHTML、Flash/Flex、Applets、URLClassLoader类、JNLP和Java Web Start

第52项:使HTML短小精悍。

第53项:表示与处理分离。

第54项:内容与样式相分离。

第55项:预生成内容以最小化处理过程。

第56项:尽早验证、尽量验证。

第57项:安全是一个过程,而不是产品。

第58项:记住安全不仅仅是预防

第59项: 建立威胁模型

第60项:作不安全假设

第61项:总是验证用户的输入

第62项:打开平台安全机制

第63项:使用基于角色的授权

第64项:使用SignedObject以保证序列化对象的完整性

第65项:使用SealedObject以保证可序列化对象的机密性

第66项:使用GuardedObject以保证对象的存取控制

第67项:主动释放资源

第68项:调整JVM

第69项:为版本并存使用独立的JRE

第70项:识别类加载器的边界

隔离、版本控制

第71项:理解Java的对象序列化

SerialVerUID域、自定义(writeObject和readObject)、 替换(writeReplace和readResolve)

第72项:不要对抗垃圾收集器

第73项:优选容器管理的资源管理

第74项:使用Reference对象来扩展垃圾收集行为

 SoftReference 对象 、WeakReference对象 、PhantomReference对象

第75项:不要担心在服务器上的JNI代码

 


转载于:https://www.cnblogs.com/ajian005/archive/2012/10/28/2753653.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/296462.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

左手菲尔兹右手突破奖,这个中国女婿其实是英国贵族?拿到300万奖金后他这样说……...

全世界只有3.14 % 的人关注了爆炸吧知识如果说科学界里高大上的奖项,你还是只能想到诺贝尔,菲尔兹,那可能真的是out了。毕竟现在都0202年了。少年,突破奖了解一下?作为有马云,马化腾,还有俄罗斯…

理财平台架构分析

一个理财平台可以从不同的维度来看。对于一个消费者来说,最宏观的看法,P2P公司的理财平台相当于一个中介,一边用于对接用户,一边用于对接产品提供商。这个中介系统负责用户和产品提供者之间的交互。对于一个P2P理财公司来说&#…

Linux下添加普通帐号

Linux下系统管理员其中一个很重要的职能就是帐号管理.一般来说很多比较好的发行版本都会不建议用户使用root用户登录系统的,因为root用户的权限实在太大了,一不小心就可能破坏了系统.因此我们一般使用普通帐号登陆系统,而要使用普通帐号登陆就必须拥有普通帐号.本文将介绍几种添…

mysql数据压缩存储_压缩文本,然后存储在mysql数据库中

I am developing a web application using php and MySQL. I am compressing the text using gzcompress() php function before storing in MySQL database / storing compressed form of text in database. My Question is that is this OK? to store compressed form? Or …

Abp VNext 集成sharding-core 分表分库

ShardingCore 易用、简单、高性能、普适性,是一款扩展针对efcore生态下的分表分库的扩展解决方案,支持efcore2的所有版本,支持efcore2的所有数据库、支持自定义路由、动态路由、高性能分页、读写分离的一款组件,如果你喜欢这组件或者这个组件对你有帮助请…

引热议!多所高校明文规定:不再给部分全日制研究生安排宿舍

全世界只有3.14 % 的人关注了爆炸吧知识本文转自募格学术。近日,高校宿舍问题频发。矛盾点基本都集中在宿舍加塞人,宿舍环境不好,为了迎接新生强制老生搬宿舍但宿舍环境一言难尽等...... 不过好歹也都算解决了研究生住宿的问题。但近日&#…

学习笔记:log4j.properties配置

示例: 1 log4j.debugtrue 2 log4j.rootLoggerDEBUG,stdout,D //所有输出都会用到这里的appedder3 log4j.logger.com.test.serverDEBUG,E //为特定的的包指定输出4 //output log to console5 log4j.appender.stdoutorg.apache.log4j.ConsoleAppender 6 log4…

Unity 游戏开发技巧集锦之使用忍者飞镖创建粒子效果

Unity 游戏开发技巧集锦之使用忍者飞镖创建粒子效果 使用忍者飞镖创建粒子效果 游戏中,诸如烟、火、水滴、落叶等粒子效果,都可以使用粒子系统(particle system)来实现。例如,《明朝传奇》中的篝火,如图2-3…

“.NET研究”【Android开发教程】一、基础概念

Android操作系统 Android是一个基于Linux、使用java作为程序接口的操作系统。他提供了一些工具,比如编译器、调试器、还有他自己的仿真器(DVM — Dalvik Virtual Machine)。Android是由google领导的Open Handset Alliance开发的。 Android使用…

落在我手里,今天你能嫁出去算我输!

1 今天你能嫁出去算我输▼2 好像拍到了某些不可描述的画面▼3 猫猫:人呢?掉哪儿了?▼4 像极了下决心运动的你▼5 据最新研究欲火焚身这个词是很有科学依据的▼6 按这么说至少能保证说上话▼7 这不是普通狗仔了已经是海狗仔了▼你点的每…

mysql 5.6 slave stop_mysql 5.6 Replication 参数

花了一天的时间,看了mysql 5.6 Replication 章节内容,其中的一些参数做了一下笔记1:binlog_format 默认值是:statement有效值: ROW,基于行的复制STATEMENT 基于语句级别的复制MASTER_LOG_POS,MIXED 基于以上2种混合都有个各自的…

记一次 .NET 某资讯论坛 CPU爆高分析

大概有11天没发文了,真的不是因为懒,本想前几天抽空写,不知道为啥最近求助的朋友比较多,一天都能拿到2-3个求助dump,晚上回来就是一顿分析,有点意思的是大多朋友自己都分析了几遍或者公司多年的牛皮藓问题&…

内存调试技巧

内存调试技巧 2007 年 6 月 21 日 本文将带您了解一些良好的和内存相关的编码实践,以将内存错误保持在控制范围内。内存错误是 C 和 C 编程的祸根:它们很普遍,认识其严重性已有二十多年,但始终没有彻底解决,它们可能严…

CSS中的!important属性用法

由于IE并不严格执行W3C标准, 而又几乎垄断了浏览器市场。 所以作为一名合格的网站制作人员, 必须要针对不同的浏览器进行微调。 实现不同浏览器之间兼容的方法有很多, 比如利用JS探测用户的浏览器类型,从而调用不同的样式表。 或者…

java中equals和==的区别

值类型是存储在内存中的堆栈(以后简称栈),而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中。操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量在堆中存储的地址是否相同&a…

数学课本上的几大变态之处

全世界只有3.14 % 的人关注了爆炸吧知识数学课本上的几大变态--完--

使用Redis set 解决数据的唯一性问题

前言最近遇到一个问题,就是接收第三方数据的时候,类似这种直播数据,由于业务的缘故,导致对方给的数据每次都是全量的,而且请求很频繁,有时候一秒好几十次。直播数据一般都是刷刷刷的,这个大家或…

mysql集群从节点无法启动_一次galera cluster集群故障节点无法启动问题排查

现象环境:Server version: 10.0.25-MariaDB-wsrep MariaDB Server, wsrep_25.13.raf7f02e配置文件:[rootnode-23 mariadb]# more /etc/my.cnf[mysqld]server_id3bind_address node-23port 3306datadir/var/lib/mysqllog-error/var/log/mariadb/mariadb…

DbVisualizer 8 解决中文乱码问题

DbVisualizer 8 解决中文乱码问题 原文http://blog.chinaunix.net/uid-26640696-id-3128544.html 在SQL Commander中,sql语句中如果有中文,显示是‘口口口’。解决办法如下: 在Tools->tool Properties->General->Appearance->Fon…

webform 页面传值的方法总结

ASP.NET页面之间传递值的几种方式 页面传值是学习asp.net初期都会面临的一个问题,总的来说有页面传值、存储对象传值、ajax、类、model、表单等。但是一般来说,常用的较简单有QueryString,Session,Cookies,Application…