《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
《Effective.Enterprise.Java中文版》知识点摘要相关推荐
- 读书笔记-《ON JAVA 中文版》-摘要8[第八章 复用]
文章目录 第八章 复用 1. 组合语法 2. 继承语法 2.1 初始化基类 2.2 带参数的构造函数 3. 委托 4. 结合组合与继承 4.1 保证适当的清理 4.2 名称隐藏 5. 组合与继承的选择 ...
- 读书笔记-《ON JAVA 中文版》-摘要9[第九章 多态]
文章目录 第九章 多态 1. 向上转型回顾 1.1 忘掉对象类型 1.2 转机 1.3 方法调用绑定 1.4 产生正确的行为 1.5 可扩展性 1.6 陷阱:"重写"私有方法 1. ...
- 读书笔记-《ON JAVA 中文版》-摘要7[第七章 封装]
文章目录 第七章 封装 1. 包的概念 2. 访问权限修饰符 3. 接口和实现 4. 类访问权限 5. 本章小结 第七章 封装 访问控制(或者隐藏实现)与"最初的实现不恰当"有关. ...
- 读书笔记-《ON JAVA 中文版》-摘要12[第十二章 集合]
文章目录 第十二章 集合 1. 泛型和类型安全的集合 2. 基本概念 3. 添加元素组 4. 集合的打印 5. 列表List 6. 迭代器Iterators 6.1 Iterators 6.2 Lis ...
- 读《Effective java 中文版》(2)
FROM 竹笋炒肉 http://hedong.3322.org/ 读<Effective java 中文版>(2) 第10条:谨慎地改写clone Cloneable接口的目的是作为对象 ...
- 竹笋炒肉转载 -- 读《Effective java 中文版》(2)
FROM 竹笋炒肉 http://hedong.3322.org/ 读<Effective java 中文版>(11) 第10条:谨慎地改写clone Cloneable接口的目的是作为对 ...
- Java之父都需要的《Effective Java中文版(第3版)》到底有多牛b!Java程序员都应该需要!
写在前面 你是否正在寻找一本能够更加深入地了解Java编程语言的书,以便编写出更清晰.更正确.更健壮且更易于重用的代码? Effective Java中文版(第3版) 再适合不过了!这是一本分享经验并 ...
- Java 面试知识点解析(二)——高并发编程篇
前言: 在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Java 知识点进行复习和学习一番,大 ...
- 最全最新的的Java核心知识点整理!!! 【推荐】
前言: 想要文档版的小伙伴们可以私信我领取哦,更加清晰 一目了然 ~ Java核心知识点! 博客整理出来的稍微有点乱~ 目录 目录 -1 JVM - 19 2.1. 线程 - 20 2.2. JVM ...
最新文章
- matlab如何点对点画曲线,MIMOBeamformingExample
- MATALO OPENCART 自适应主题模板 ABC-0679-02
- matlab 图像读取默认值,实验一MATLAB数字图像处理
- 用计算机语言编写的完成一定功能,C+的+预备知识.ppt
- C++对C的加强之C++中所有的变量和函数都必须有类型
- 微软Azure的access control - IAM
- CSS每日学习笔记(1)
- nodejs基于art-template模板引擎生成
- Shiro源码分析之Subject和SecurityManager
- 我的Android进阶之旅------Android检测wifi连接状态
- 【JavsScript】XMLHttpRequest Level 2 使用指南
- java如何查看jar编译的jdk版本
- iShot--Mac最强截图工具
- oninput和onpropertychange以及其兼容处理
- 杭州电子科技大学程序设计竞赛(2016’12)
- java tt-7s-d_JAVA TT-7S-D 超轻7速折叠自行车质量_参数_评价
- 安卓应用在各大应用市场上架方法
- html 设置横向打印,电脑打印怎么横向打印出来_打印机设置横向打印的图文教程...
- scala获取字符串首字符和尾字符
- mac微信怎么设置代理服务器,微信Mac版怎么管理群成员?微信Mac版管理群成员的方法...
热门文章
- 后端JAVA:说说你对【注解】的理解
- java hibernate的使用_《Hibernate快速开始 – 4 – 使用JAVA持久层 API (JPA)教程》
- 运用xlib进行事件响应(X11 API)的小例子
- Linux下的屏保设置 xset s 与 xset dpms
- 小屏幕 ui设计_UI设计基础:屏幕
- Day07 - Ruby比一比:Symbol符号与String字串
- XCode 10 升级问题总结
- go 中gcc 编译问题(gcc.exe fatal error no input files compilation terminated)
- NFS服务的配置过程
- 那些年,登山徒步记录,立贴