对于J2EE(Java EE)来说,如果要很好的完成一个应用需要掌握的东西太多,很难有人掌握所有环节的知识。即使很多人曾经了解或学习过,但是,遗忘也是不可以避免的。做项目时间长了,就会发生这样一种情况,做的多了,做的杂了,很多会的东西记不住了。 ### J2EE武功秘籍 #### 第一层:Java SE 技术招式辨析 **1. InputStream/OutputStream 和 Reader/Writer** - **InputStream/OutputStream**:主要用于处理字节流,适用于二进制数据的读写操作。例如,读取图片、音频文件等。 - **Reader/Writer**:用于处理字符流,适用于文本数据的读写操作。它们以字符为单位进行处理,通常用于读写文本文件。 **2. Java 的异常体系** - **Checked Exceptions**:必须被捕获或声明抛出的异常,如 `IOException`。 - **Unchecked Exceptions**:运行时异常,无需捕获或声明,如 `NullPointerException`。 - **Error**:系统级错误,通常无法通过程序逻辑解决,如 `OutOfMemoryError`。 **3. sleep() 和 wait() 区别** - **sleep()**:当前线程暂停执行指定的时间,不释放锁。 - **wait()**:线程等待直到被唤醒,释放锁并进入等待状态。 **4. volatile 和 synchronized 区别** - **volatile**:确保变量的可见性,但不保证原子性。 - **synchronized**:确保可见性和原子性,可用于方法或代码块。 **5. Thread、Runnable 和 Callable 区别** - **Thread**:继承 `Thread` 类创建线程。 - **Runnable**:实现 `Runnable` 接口创建线程。 - **Callable**:与 `Runnable` 类似,但支持返回值,并且可以通过 `Future` 获取结果。 **6. Socket 和 ServerSocket 区别** - **Socket**:用于客户端和服务端之间的双向通信。 - **ServerSocket**:服务端监听客户端连接的入口。 **7. NIO 和 I/O 区别** - **I/O (InputStream/OutputStream)**:阻塞式IO,每个连接都需要一个线程来处理。 - **NIO (New IO)**:非阻塞式IO,使用选择器(Selector)和通道(Channel)机制,支持单线程处理多个连接。 **8. Heap 和 Stack 区别** - **Heap**:动态内存分配区域,用于对象存储。 - **Stack**:用于存储局部变量、方法调用栈等。 **9. Static Nested Class 和 Inner Class 区别** - **Static Nested Class**:静态内部类,不需要外部类实例即可访问。 - **Inner Class**:非静态内部类,需要外部类实例来访问。 **10. abstract class 和 interface 区别** - **Abstract Class**:可以包含抽象方法和具体方法,可定义构造器。 - **Interface**:只能包含抽象方法(默认public),可定义常量。 **11. 各种基本类型空间大小** - **byte**:8位 - **short**:16位 - **int**:32位 - **long**:64位 - **float**:32位 - **double**:64位 - **char**:16位 - **boolean**:通常被视为8位,但实际上JVM规范未指定 **12. HashMap, HashTable 和 ConcurrentHashMap** - **HashMap**:线程不安全,允许一个null key和多个null values。 - **HashTable**:线程安全,不允许null key和null value。 - **ConcurrentHashMap**:线程安全,允许一个null key和多个null values,性能高于HashTable。 **13. ThreadLocal 真正含义** - **ThreadLocal**:提供线程本地变量,每个线程都有自己的副本,避免了多线程环境下的线程安全问题。 **14. override(覆盖), overload(重载) 和 overwrite(重写)** - **Override**:子类覆盖父类的方法。 - **Overload**:同一个类中的方法,方法名相同但参数列表不同。 - **Rewrite**:通常指子类重写接口中的抽象方法。 **15. Java 集合关系** - **Collection**:包括List和Set。 - **Map**:键值对集合。 - **List**:有序集合。 - **Set**:不允许重复元素的集合。 - **Queue**:先进先出的数据结构。 - **Deque**:双端队列。 - **Stack**:后进先出的数据结构。 **16. Comparable 和 Comparator 区别** - **Comparable**:接口,实现该接口的类自身具备比较功能。 - **Comparator**:接口,提供外部比较器,用于自定义比较逻辑。 #### 第二层:Java EE 技术招式辨析 **1. 统计多同客户访问相同 URL 哪个响应最慢** - 使用 **Servlet Filters** 或者 **Interceptor** 来记录每个请求的开始时间和结束时间,计算响应时间并进行统计。 **2. Forward 和 SendRedirect 区别** - **Forward**:服务器内部转发,只发送一次请求,客户端地址栏不会变化。 - **SendRedirect**:客户端重定向,发送两次请求,客户端地址栏会变化。 **3. RMI 和 WebService 区别** - **RMI**:远程方法调用,基于TCP/IP协议,面向对象。 - **WebService**:基于XML和HTTP协议,更灵活,支持多种编程语言。 **4. JMS 分类** - **JMS (Java Message Service)**:Java消息服务标准。 - **点对点 (Point-to-Point)**:发送者发送消息到队列,消费者从队列消费消息。 - **发布订阅 (Publish/Subscribe)**:发送者发送消息到主题,多个订阅者订阅同一主题接收消息。 **5. Cookie 和 Session 区别** - **Cookie**:存储在客户端的小型文本文件,用于跟踪用户信息。 - **Session**:服务器端存储,用于维护用户的会话状态。 **6. EJB 2 和 EJB 3 区别** - **EJB 2**:复杂,需要编写大量代码和配置。 - **EJB 3**:简化开发过程,引入了注解和POJO。 #### 第三层:数据库招式辨析 **1. 各种主流数据库 SQL 分页实现** - **MySQL**:`LIMIT` 和 `OFFSET` - **Oracle**:`ROWNUM` 或 `FETCH FIRST n ROWS ONLY` - **SQL Server**:`OFFSET` 和 `FETCH` **2. 悲观锁和乐观锁原理** - **悲观锁**:假设会发生并发冲突,锁定数据,在更新时进行检查。 - **乐观锁**:假设不会发生并发冲突,不锁定数据,更新时检查版本号。 **3. 数据库隔离级别** - **Read Uncommitted**:最低隔离级别,可能读取未提交的数据。 - **Read Committed**:事务可以看到其他已提交事务的数据。 - **Repeatable Read**:事务在执行过程中始终看到的是事务开始时的状态。 - **Serializable**:最高隔离级别,完全避免脏读、不可重复读、幻读等问题。 #### 第四层:LINUX 招式辨析 **1. awk 和 sed** - **awk**:强大的文本处理工具,可以进行模式匹配、替换等。 - **sed**:流编辑器,主要用于文本替换、删除等操作。 **2. ps 和 netstat** - **ps**:查看进程状态。 - **netstat**:查看网络连接状态。 #### 第五层:设计模式招式辨析 **1. 经典设计准则** - **单一职责原则 (SRP)**:一个类应该只有一个引起它改变的原因。 - **开放封闭原则 (OCP)**:软件实体应该是可扩展的,而不可修改的。 - **里氏替换原则 (LSP)**:子类型必须能够替换掉它们的基类型。 - **依赖倒置原则 (DIP)**:高层模块不应该依赖于低层模块,二者都应该依赖于抽象。 **2. 经典 Java 设计模式** - **Singleton**:确保一个类只有一个实例,并提供一个全局访问点。 - **Factory Method**:定义一个创建产品对象的接口,让子类决定实例化哪一个类。 - **Adapter**:将一个类的接口转换成客户希望的另一个接口。 **3. 经典线程设计模式** - **生产者消费者模型**:通过缓冲区实现生产者和消费者的解耦。 - **观察者模式**:多对一的依赖关系,当一个对象的状态发生改变时,所有依赖它的对象都会得到通知并自动更新。 **4. 经典企业设计模式** - **MVC (Model-View-Controller)**:将业务逻辑、数据和界面展示分离。 - **DAO (Data Access Object)**:封装对数据源访问的细节。 #### 第六层:算法招式辨析 **1. 递归算法** - **递归**:函数直接或间接地调用自身。 **2. 贪婪算法** - **贪婪算法**:在每一步选择中都采取最好或最优(相对而言)的选择策略。 **3. 动态规划算法** - **动态规划**:通过把原问题分解为相对简单的子问题的方式来求解。 **4. 回溯算法** - **回溯**:试探性地解决问题,当发现路径不可行时就撤回选择。 **5. 分支界限算法** - **分支界限法**:结合了分治法和回溯法的思想,通过剪枝来减少搜索范围。 #### 第七层:网络安全招式辨析 **1. 三次握手建立稳定连接** - 客户端发送 `SYN` 请求。 - 服务器回应 `SYN+ACK`。 - 客户端发送 `ACK` 确认。 **2. SSL 原理** - **非对称加密**:客户端使用服务器的公钥加密数据。 - **对称加密**:客户端和服务器使用相同的密钥加密和解密数据。 - **证书**:验证服务器的身份。 **3. HTTPS 和 HTTP 的区别** - **HTTP**:无加密,传输明文。 - **HTTPS**:基于SSL/TLS加密的HTTP协议,安全性更高。 **4. 数字证书** - **数字证书**:由可信的第三方机构颁发,用于证明持有者的身份。 #### 第八层:开源框架招式辨析 **1. Spring 框架特性** - **IoC**:控制反转,使对象之间的依赖关系由外部容器注入。 - **AOP**:面向切面编程,增强程序的功能性。 **2. Struts 和 Struts2 框架** - **Struts**:基于MVC设计模式的Web框架。 - **Struts2**:继承Struts的优点,更加灵活易用。 **3. Hibernate 框架** - **ORM**:对象关系映射,将对象模型和关系数据库进行映射。 **4. Mina 框架特性** - **Mina**:用于快速开发高性能和高可靠性的网络服务器和客户端的应用程序框架。 **5. DWR 中如何获取 HTTP 请求的 session** - **DWR (Direct Web Remoting)**:提供一种简单的方式让JavaScript可以直接调用Java方法。 - 通过 `org.directwebremoting.util.ServerContextFacade` 获取当前的HTTP Session。 #### 第九层:架构设计招式辨析 **1. MVC 架构** - **Model**:负责业务逻辑。 - **View**:负责显示逻辑。 - **Controller**:负责控制逻辑。 **2. B/S 和 C/S 架构** - **B/S (Browser/Server)**:基于浏览器/服务器的架构。 - **C/S (Client/Server)**:基于客户端/服务器的架构。 **3. M/S 架构** - **M/S (Mobile/Server)**:移动设备与服务器交互的架构。 总结起来,《J2EE武功秘籍》通过图形解析和文字描述相结合的方式,帮助读者更好地理解和记忆J2EE及其相关技术的关键知识点。无论是对于初学者还是有一定经验的开发者来说,这都是一本非常有价值的参考资料。
剩余32页未读,继续阅读
- 粉丝: 0
- 资源: 4
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助