沙舟狼客之Java软件工程师面试题.doc_第1页
沙舟狼客之Java软件工程师面试题.doc_第2页
沙舟狼客之Java软件工程师面试题.doc_第3页
沙舟狼客之Java软件工程师面试题.doc_第4页
沙舟狼客之Java软件工程师面试题.doc_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

沙舟狼客著 2011 年 3 月 1 日星期二 Java 软件工程师 面试题 2011 沙舟狼客 3 1 2011 沙舟狼客之 Java 软件工程师面试题 只要非商业用途都可任意修改转发 目录 1 JAVA 基础基础 4 1 请说出你所知道的线程同步的方法 4 2 START和RUN THREAD和 RUNNABLE 4 3 常见的七种排序 4 4 JAVA中实现多态的机制是什么 5 5 面向对象的特征有哪些方面 6 6 抽象类和接口有什么区别 6 7 ERROR和EXCEPTION有什么区别 6 8 给我一个你最常见到的RUNTIMEEXCEPTION 7 9 OVERLOAD和 OVERRIDE的区别 7 10 SLEEP 和WAIT 有什么区别 7 11 GC 是什么 为什么要有 GC 7 12 HASHMAP和 HASHTABLE的区别 7 13 System out println value is x 4 99 9 9 答案 9 0 问号表达式的后面两个条件有要求 因为前面的是 float 所以后面转为 float short s1 1 s1 s1 1 有什么错 short s1 1 s1 1 有什么错 答案 1 错 2 对 1 因为向上转型了 最后导致类型不匹配错误 因为 s1 的 是一个操作符 能够自动转型 short s1 1 s1 s1 1 这句话在 c 里面可以的 System out println 5 0942 1000 System out println 5 0943 1000 System out println 5 0944 1000 的结果 答案 5094 2 5094 299999999999 5094 400000000001 Int count 1 count count 输出 count 2 Try System exit 0 catch Exception 沙舟狼客之 Java 软件工程师面试题 只要非商业用途都可任意修改转发 finally System out println ok Main System out println test Static void test Try Return 0 catch Exception e finally System out println ddd Return 1 输出 0 17 Boolean 类型类型 boolean a false if a true System out println true else System out println false 结果为结果为 true 18 常见修饰符常见修饰符 1 访问修饰符 public private protected 缺省 2 Static final abstract native sychronized transient volatile package a Sychronized 多线程的支持 当一个此方法被调用时 没有其它线程能够调用该方 法 其它的 synchronized 方法也不能调用该方法 直到该方法返回 b Transient 告诉编译器 在类对象序列化的时候 此变量不需要持久保存 主要是 因为改变量可以通过其它变量来得到 使用它是为了性能的问题 c Volatile 指出可能有多个线程修改此变量 要求编译器优化以保证对此变量的修改 沙舟狼客之 Java 软件工程师面试题 只要非商业用途都可任意修改转发 能够被正确的处理 d Native 用该修饰符定义的方法在类中没有实现 而大多数情况下该方法的实现是用 C C 编写的 参见 Sun 的 Java Native 接口 JNI JNI 提供了运行时加载一个 native 方法的实现 并将其于一个 Java 类关联的功能 19 常见集合类的区别常见集合类的区别 2 ArrayList 元素单个 效率高 多用于查询 2 Vector 元素单个 线程安全 多用于查询 3 LinkedList 元素单个 多用于插入和删除 4 HashMap 元素成对 元素可为空 5 HashTable 元素成对 线程安全 元素不可为空 集合 集合对象 用于管理其他若干对象的对象 数组 长度不可变 List 有顺序的 元素可以重复 遍历 for 迭代 排序 Comparable Comparator Collections sort ArrayList 底层用数组实现的 List 特点 查询效率高 增删效率低 轻量级 线程不安全 LinkedList 底层用双向循环链表 实现的 List 特点 查询效率低 增删效率高 Vector 底层用数组实现 List 接口的另一个类 特点 重量级 占据更多的系统开销 线程安全 Set 无顺序的 元素不可重复 值不相同 遍历 迭代 排序 SortedSet HashSet 采用哈希算法来实现 Set 接口 唯一性保证 重复对象 equals 方法返回为 true 重复对象 hashCode 方法返回相同的整数 不同对象 哈希码 尽量保证不同 提高效率 SortedSet 对一个 Set 排序 TreeSet 在元素添加的同时 进行排序 也要给出排序规则 唯一性保证 根据排序规则 compareTo 方法返回为 0 就可以认定两个对象中有一个 是重复对象 Map 元素是键值对 key 唯一 不可重复 value 可重复 遍历 先迭代遍历 key 的集合 再根据 key 得到 value HashMap 轻量级 线程不安全 允许 key 或者 value 是 null Hashtable 重量级 线程安全 不允许 key 或者 value 是 null Properties Hashtable 的子类 key 和 value 都是 String 沙舟狼客之 Java 软件工程师面试题 只要非商业用途都可任意修改转发 20 链表的实现链表的实现 2 package ChapterFive 3 class Link 4 public E data 5 public Link next 6 public Link E data 7 this data data 8 9 10 class LinkList 11 public Link first 12 链表中数据项的个数 13 public int size 14 public LinkList 15 first null 16 size 0 17 18 在表头插入新的数据 19 public void insertFirst E value 20 Link link new Link value 21 link next first 22 first link 23 size 24 25 判断链表是否为空 26 public boolean isEmpty 27 return size 0 28 29 删除表头 30 public Link deleteFirst 31 Link temp first 32 first first next 33 size 34 return temp 35 36 输出链表中的所有数据 37 public void display 38 Link curr first 39 while curr null 40 System out print curr data 41 curr curr next 42 沙舟狼客之 Java 软件工程师面试题 只要非商业用途都可任意修改转发 43 System out println 44 45 返回链表中数据项的个数 46 public int size 47 return size 48 49 获取从头至尾的第 i 个数据项 50 public Link get int i 51 if i size 1 i 0 52 try 53 throw new IndexOutOfBoundsException 54 catch Exception e 55 e printStackTrace 56 57 Link curr first 58 for int n 0 n size n 59 if n i 60 return curr 61 else 62 curr curr next 63 64 return null 65 66 输出从头至尾的第 i 个数据项 67 public void remove int i 68 if i 0 69 deleteFirst 70 else if i size 1 71 get i 1 next null 72 else 73 get i 1 next get i 1 74 75 size 76 77 78 79 public class Link list 80 public static void main String args 81 LinkList ll new LinkList 82 for int i 0 i 10 i 83 Long value long Math random 100 84 ll insertFirst value 85 86 ll display 沙舟狼客之 Java 软件工程师面试题 只要非商业用途都可任意修改转发 87 while ll isEmpty 88 ll deleteFirst 89 ll display 90 91 System out println Ok 92 93 2 Hibernate 1 Load 和和 get 区别 区别 Session load get 方法均可以根据指定的实体类和 id 从数据库读取记录 并返回与之对应的实体 对象 其区别在于 如果未能发现符合条件的记录 get 方法返回 null 而 load 方法会抛出一个 ObjectNotFoundException Load 方法可返回实体的代理类实例 而 get 方法永远直接返回实体类 load 方法可以充分利用内部缓存和二级缓存中的现有数据 而 get 方法则仅仅在内 部缓存中进行数据查找 如没有发现对应数据 将越过二级缓存 直接调用 SQL 完 成数据读取 2 在数据库中条件查询速度很慢的时候在数据库中条件查询速度很慢的时候 如何优化如何优化 1 建索引 2 减少表之间的关联 3 优化 sql 尽量让 sql 很快定位数据 不要让 sql 做全表查询 应该走索引 把数据量 大的表排在前面 4 简化查询字段 没用的字段不要 已经对返回结果的控制 尽量返回少量数据 沙舟狼客之 Java 软件工程师面试题 只要非商业用途都可任意修改转发 3 3 HibernateHibernate 有哪几种查询数据的方式有哪几种查询数据的方式 4 Hibernate 工作原理及为什么要用 工作原理及为什么要用 5 说下说下 Hibernate 的缓存机制的缓存机制 沙舟狼客之 Java 软件工程师面试题 只要非商业用途都可任意修改转发 6 Hibernate 对象的三种状态是什么 对象的三种状态是什么 7 谈谈谈谈 hibernate 的延迟加载和的延迟加载和 openSessionInView OpenSessionInViewFilter 是 Spring 提供的一个针对 Hibernate 的一个支持类 其主要意思是在发起一 个页面请求时打开 Hibernate 的 Session 一直保持这个 Session 直到这个请求结束 具体是通过一个 Filter 来实现的 由于 Hibernate 引入了 Lazy Load 特性 使得脱离 Hibernate 的 Session 周期的对象如果再想通过 getter 方法取到其关联对象的值 Hibernate 会抛出一个 LazyLoad 的 Exception 所以为了解决这个问 题 Spring 引入了这个 Filter 使得 Hibernate 的 Session 的生命周期变长 有两种方式可以配置实现 OpenSessionInView 分别是 OpenSessionInViewInterceptor 和 OpenSessionInViewFilter 功能完全相同 只不过一个在 web xml 配置 另一个在 application xml 配 置而已 我个人比较倾向配置在 application xml 里 因为 web xml 里配置的东西的太多的话容易发生冲 突 虽然可以调整 但是毕竟多了个麻烦 3 JSP Servlet 1 jsp 有哪些内置对象有哪些内置对象 作用分别是什么作用分别是什么 request 用户端请求 此请求会包含来自 GET POST 请求的参数 response 网页传回用户端的回应 pageContext 网页的属性是在这里管理 沙舟狼客之 Java 软件工程师面试题 只要非商业用途都可任意修改转发 session 与请求有关的会话期 application servlet 正在执行的内容 out 用来传送回应的输出 config servlet 的构架部件 page JSP 网页本身 exception 针对错误网页 未捕捉的例外 2 jsp 有哪些动作有哪些动作 作用分别是什么作用分别是什么 jsp include 在页面被请求的时候引入一个文件 jsp useBean 寻找或者实例化一个 JavaBean jsp setProperty 设置 JavaBean 的属性 jsp getProperty 输出某个 JavaBean 的属性 jsp forward 把请求转到一个新的页面 jsp plugin 根据浏览器类型为 Java 插件生成 OBJECT 或 EMBED 标记 3 JSP 中动态中动态 INCLUDE 与静态与静态 INCLUDE 的区别 的区别 动态 INCLUDE 用 jsp include 动作实现 它总是会检查所含文件中的变化 适合用于包含动态页 面 并且可以带参数 静态 INCLUDE 用 include 伪码实现 定不会检查所含文件的变化 适用于 包含静态页面 4 两种跳转方式分别是什么两种跳转方式分别是什么 有什么区别有什么区别 答 前者仅是容器中控制权的转向 在客户端浏览器地址栏中不会显示出转向后的地址 后者则 是完全的跳转 浏览器将会得到跳转的地址 并重新发送请求链接 这样 从浏览器的地址栏 中可以看到跳转后的链接地址 所以 前者更加高效 在前者可以满足需要时 尽量使用 forward 方法 并且 这样也有助于隐藏实际的链接 在有些情况下 比如 需要跳转到一个 其它服务器上的资源 则必须使用 sendRedirect 方法 5 说一说说一说 Servlet 的生命周期的生命周期 servlet 有良好的生存期的定义 包括加载和实例化 初始化 处理请求以及服务结束 这个生 存期由 javax servlet Servlet 接口的 init service 和 destroy 方法表达 6 xml 有哪些解析技术有哪些解析技术 区别是什么区别是什么 有 DOM SAX STAX 等 DOM 处理大型文件时其性能下降的非常厉害 这个问题是由 DOM 的树 结构所造成的 这种结构占用的内存较多 而且 DOM 必须在解析文件之前把整个文档装入内 存 适合对 XML 的随机访问 SAX 不现于 DOM SAX 是事件驱动型的 XML 解析方式 它顺序读取 XML 文件 不需要一次全部装载整个文件 当遇到像文件开头 文档结束 或者标签开头与标 签结束时 它会触发一个事件 用户通过在其回调事件中写入处理代码来处理 XML 文件 适合 沙舟狼客之 Java 软件工程师面试题 只要非商业用途都可任意修改转发 对 XML 的顺序访问 STAX Streaming API for XML StAX 7 如何现实如何现实 servlet 的单线程模式的单线程模式 8 JSP 和和 Servlet 有哪些相同点和不同点 他们之间的联系是什么 有哪些相同点和不同点 他们之间的联系是什么 JSP 是 Servlet 技术的扩展 本质上是 Servlet 的简易方式 更强调应用的外表表达 JSP 编译后 是 类 servlet Servlet 和 JSP 最主要的不同点在于 Servlet 的应用逻辑是在 Java 文件中 并且 完全从表示层中的 HTML 里分离开来 而 JSP 的情况是 Java 和 HTML 可以组合成一个扩展名为 jsp 的文件 JSP 侧重于视图 Servlet 主要用于控制逻辑 9 四种会话跟踪技术四种会话跟踪技术 page 否是代表与一个页面相关的对象和属性 一个页面由一个编译好的 Java servlet 类 可以带有任何的 include 指令 但是没有 include 动作 表示 这既包括 servlet 又 包括被编译成 servlet 的 JSP 页面 request 是是代表与 Web 客户机发出的一个请求相关的对象和属性 一个请求可能跨越 多个页面 涉及多个 Web 组件 由于 forward 指令和 include 动作的关系 session 是是代表与用于某个 Web 客户机的一个用户体验相关的对象和属性 一个 Web 会话可 以也经常会跨越多个客户机请求 application 是是代表与整个 Web 应用程序相关的对象和属性 这实质上是跨越整个 Web 应用程序 包括多个页面 请求和会话的一个全局作用域 沙舟狼客之 Java 软件工程师面试题 只要非商业用途都可任意修改转发 10 Request 对象的主要方法对象的主要方法 11 我们在我们在 web 应用开发过程中经常遇到输出某种编码的字符 如应用开发过程中经常遇到输出某种编码的字符 如 iso8859 1 等 等 如何输出一个某种编码的字符串如何输出一个某种编码的字符串 12 如何防止在如何防止在 JSP 或或 SERVLET 中的输出不被中的输出不被 BROWSER 保存在保存在 CACHE 中中 沙舟狼客之 Java 软件工程师面试题 只要非商业用途都可任意修改转发 13 在在 JSP 中能发送中能发送 EMAIL 吗吗 14 Session 和和 cookie 的区别的区别 Session 是基于 cookie 的 JSESSIONID 位置 储存方式 Map 文件 4 Struts 1 struts 的工作原理 的工作原理 沙舟狼客之 Java 软件工程师面试题 只要非商业用途都可任意修改转发 2 Action 和和 ActionSupport 的区别的区别 3 拦截器的配置拦截器的配置 A 实现 Interceptor 接口 沙舟狼客之 Java 软件工程师面试题 只要非商业用途都可任意修改转发 B 配置 struts 文件 4 Action 是不是线程安全的 如果不是是不是线程安全的 如果不是 有什么方式可以保证有什么方式可以保证 Action 的线程安全 的线程安全 如果是 说明原因如果是 说明原因 Action 不是线程安全的 不定义类的域 就可以避免线程问题 沙舟狼客之 Java 软件工程师面试题 只要非商业用途都可任意修改转发 5 spring 1 spring 的工作原理的工作原理 2 Aop 切面 Aspect 一个关注点的模块化 这个关注点可能会横切多个对象 事务 管理是 J2EE 应用中一个关于横切关注点的很好的例子 在 Spring AOP 中 切面可 以使用基于模式 或者基于 Aspect 注解的方式来实现 连接点 Joinpoint 在程序执行过程中某个特定的点 比如某方法调用的时候 或者处理异常的时候 在 Spring AOP 中 一个连接点总是表示一个方法的执行 通知 Advice 在切面的某个特定的连接点上执行的动作 其中包括了 around before 和 after 等不同类型的通知 通知的类型将在后面部分进行讨 论 许多 AOP 框架 包括 Spring 都是以拦截器做通知模型 并维护一个以连接 点为中心的拦截器链 切入点 Pointcut 匹配连接点的断言 通知和一个切入点表达式关联 并在满 足这个切入点的连接点上运行 例如 当执行某个特定名称的方法时 切入点表达 式如何和连接点匹配是 AOP 的核心 Spring 缺省使用 AspectJ 切入点语法 沙舟狼客之 Java 软件工程师面试题 只要非商业用途都可任意修改转发 引入 Introduction 用来给一个类型声明额外的方法或属性 也被称为连接 类型声明 inter type declaration Spring 允许引入新的接口 以及一个对应 的实现 到任何被代理的对象 例如 你可以使用引入来使一个 bean 实现 IsModified 接口 以便简化缓存机制 目标对象 Target Object 被一个或者多个切面所通知的对象 也被称做被 通知 advised 对象 既然 Spring AOP 是通过运行时代理实现的 这个对象永 远是一个被代理 proxied 对象 AOP代理 AOP Proxy AOP 框架创建的对象 用来实现切面契约 例如通知 方法执行等等 在 Spring 中 AOP 代理可以是 JDK 动态代理或者 CGLIB 代理 织入 Weaving 把切面连接到其它的应用程序类型或者对象上 并创建一个 被通知的对象 这些可以在编译时 例如使用 AspectJ 编译器 类加载时和运行时 完成 Spring 和其他纯 Java AOP 框架一样 在运行时完成织入 3 Spring 通知 通知 advice 的配置 的配置 spring 的通知 advice 分为方法通知和异常通知 方法通知又有方法调用前 MethodBeforeAdvice 调用中 MethodInterceptor 调用后 AfterReturningAdvice 三种 这三 种实现其接口即可 但异常通知在实现 ThrowsAdvice 后还需手动加入代码 这一点我就不 知道为什吗了 哪位高手可以解释一下 下面是我的实现代码 沙舟狼客之 Java 软件工程师面试题 只要非商业用途都可任意修改转发 沙舟狼客之 Java 软件工程师面试题 只要非商业用途都可任意修改转发 4 spring 的自动装配的自动装配 1 No 即不启用自动装配 Autowire 默认的值 2 byName 通过属性的名字的方式查找 JavaBean 依赖的对象并为其注入 比如说类 Computer 有个属 性 printer 指定其 autowire 属性为 byName 后 Spring IoC 容器会在配置文件中查找 id name 属性为 printer 的 bean 然后使用 Seter 方法为其注入 3 byType 通过属性的类型查找 JavaBean 依赖的对象并为其注入 比如类 Computer 有个属性 printer 类型为 Printer 那么 指定其 autowire 属性为 byType 后 Spring IoC 容器会查找 Class 属性为 Printer 的 bean 使用 Seter 方法为其注入 4 constructor 通 byType 一样 也是通过类型查找依赖对象 与 byType 的区别在于它不是使用 Seter 方法注入 而是使用构造子注入 5 autodetect 在 byType 和 constructor 之间自动的选择注入方式 6 default 由上级标签的 default autowire 属性确定 沙舟狼客之 Java 软件工程师面试题 只要非商业用途都可任意修改转发 5 Spring 中切面 中切面 aspect advisor 的配置 的配置 expression 是匹配的方法特征 aop before after returning 必须与定义的切面类中的方法名 一致 注意 xml 的命名空间引用 6 常用切入点表达式总结常用切入点表达式总结 execution modifiers pattern ret type pattern declaring type pattern name pattern param pattern throws pattern 除了返回类型模式 上面代码片断中的 ret type pattern 名字模式和参数模式以外 所有的部分都是可 选的 返回类型模式决定了方法的返回类型必须依次匹配一个连接点 你会使用的最频繁的返回类型模 式是 它代表了匹配任意的返回类型 一个全称限定的类型名将只会匹配返回给定类型的方法 名字 模式匹配的是方法名 你可以使用 通配符作为所有或者部分命名模式 参数模式稍微有点复杂 匹配了一个不接受任何参数的方法 而 匹配了一个接受任意数量参数的方法 零或者更多 模 式 匹配了一个接受一个任何类型的参数的方法 模式 String 匹配了一个接受两个参数的方法 第一个可以是任意类型 第二个则必须是 String 类型 沙舟狼客之 Java 软件工程师面试题 只要非商业用途都可任意修改转发 下面给出一些常见切入点表达式的例子 任意公共方法的执行 execution public 任何一个以 set 开始的方法的执行 execution set AccountService 接口的任意方法的执行 execution com xyz service AccountService 定义在 service 包里的任意方法的执行 execution com xyz service 定义在 service 包或者子包里的任意方法的执行 execution com xyz service 在 service 包里的任意连接点 在 Spring AOP 中只是方法执行 within com xyz service 在 service 包或者子包里的任意连接点 在 Spring AOP 中只是方法执行 within com xyz service 实现了 AccountService 接口的代理对象的任意连接点 在 Spring AOP 中只是方法执行 this com xyz service AccountService this 在 binding form 中用的更多 请常见以下讨论通知的章节中关于如何使得代理对象可以在通知体内 访问到的部分 实现了 AccountService 接口的目标对象的任意连接点 在 Spring AOP 中只是方法执行 target com xyz service AccountService 任何一个只接受一个参数 且在运行时传入的参数实现了 Serializable 接口的连接点 在 Spring AOP 中只是方法执行 args java io Serializable 请注意在例子中给出的切入点不同于 execution java io Serializable args 只有在动态运行时候传 入参数是可序列化的 Serializable 才匹配 而 execution 在传入参数的签名声明的类型实现了 Serializable 接口时候匹配 有一个 Transactional 注解的目标对象中的任意连接点 在 Spring AOP 中只是方法执行 target org springframework transaction annotation Transactional 任何一个目标对象声明的类型有一个 Transactional 注解的连接点 在 Spring AOP 中只是方法执行 within org springframework transaction annotation Transactional 任何一个执行的方法有一个 Transactional annotation 的连接点 在 Spring AOP 中只是方法执行 annotation org springframework transaction annotation Transactional 任何一个接受一个参数 并且传入的参数在运行时的类型实现了 Classified annotation 的连接点 在 Spring AOP 中只是方法执行 args com xyz security Classified 7 spring 的的 bean 生命周期生命周期 singleton 单例模式 整个 springIOC 容器中就只有一个对象的实例 prototype 每次请求只生成一个对象 new 生成后有请求方控制 自生自灭 request 与 prototype 一样 只是只用于 web 开发中 session 每个 session 中同一个对象 沙舟狼客之 Java 软件工程师面试题 只要非商业用途都可任意修改转发 globalsession global session 只有应用在基于 porlet 的 web 应用程序中才有意义 他映射到 porlet 的 global 范围的 session 如果普通的 servlet 的 web 应用中使用了这个 scope 容器会把它作为普通的 session 的 scope 对待 好像在好像在 spring2 5 以后已经取消了以后已经取消了 8 事务的事务的 5 个隔离级别和个隔离级别和 7 个传播行为个传播行为 隔离级别 1 ISOLATION DEFAULT 默认的隔离级别 使用数据库默认的事务隔离级别 另外四个与 JDBC 的隔离级别相对应 2 ISOLATION READ UNCOMMITTED 这是事务最低的隔离级别 它充许别外一个事务可以看到这个事务未提交的数据 这种隔离级 别会产生脏读 不可重复读和幻像读 3 ISOLATION READ COMMITTED 保证一个事务修改的数据提交后才能被另外一个事务读取 另外一个事务不能读取该事务未提交的 数据 这种事务隔离级别可以避免脏读出现 但是可能会出现不可重复读和幻像读 4 ISOLATION REPEATABLE READ 这种事务隔离级别可以防止脏读 不可重复读 但是可能出现幻像读 它除了保证一个事务不能读 取另一个事务未提交的数据外 还保证了避免下面的情况产生 不可重复读 5 ISOLATION SERIALIZABLE 这是花费最高代价但是最可靠的事务隔离级别 事务被处理为顺序执行 除了防止脏读 不可重复 读外 还避免了幻像读 传播行为 1 PROPAGATION REQUIRED 如果存在一个事务 则支持当前事务 如果没有事务则开启一个新的事务 2 PROPAGATION SUPPORTS 如果存在一个事务 支持当前事务 如果没有事务 则非事务的执行 3 PROPAGATION MANDATORY 如果已经存在一个事务 支持当前事务 如果没有一个活动的事务 则抛出异常 当单独调用 methodB 时 因为当前没有一个活动的事务 则会抛出异常 throw new IllegalTransactionStateException Transaction propagation mandatory but no existing transaction found 当调用 methodA 时 methodB 则加入到 methodA 的事务中 事务地执行 4 PROPAGATION REQUIRES NEW 总是开启一个新的事务 如果一个事务已经存在 则将这个存在的事务挂起 5 PROPAGATION NOT SUPPORTED 总是非事务地执行 并挂起任何存在的事务 当单独调用 methodB 时 不启用任何事务机制 非 事务地执行 6 PROPAGATION NEVER 总是非事务地执行 如果存在一个活动事务 则抛出异常 单独调用 methodB 则非事务的执行 调用 methodA 则会抛出异常 7 PROPAGATION NESTED 如果一个活动的事务存在 则运行在一个嵌套的事务中 如果没有活动事务 则按 TransactionDefinition PROPAGATION REQUIRED 属性执行 这是一个嵌套事务 使用 JDBC 3 0 驱动时 仅仅支持 DataSourceTransactionManager 作为事务管理器 沙舟狼客之 Java 软件工程师面试题 只要非商业用途都可任意修改转发 9 Spring 事务的配置事务的配置 9 Spring 如何声明事务处理的呢如何声明事务处理的呢 Spring 提供两种事务处理方式 一种是编程式事务处理 一种是声明式事务处理 1 编程式事务 利用 Spring 提供的事务管理类进行管理 Spring 帮你 commit 提交 rollback 回滚 比直接 JDBC 简单 2 声明式事务处理 一般配置及顺序 a 配置数据源 dataSource b 配置事务管理器 TransactionManager 依赖于数据源 dataSource c 配置事务代理工厂 设置事务传播属性 d 将事务应用到指定的类中 其中 c d 也可以直接使用 aop config 切入的方式进行配置 配置切入点 配置事务通知对象及规则 10 注入方式注入方式 1 接口注入 不推荐 2 getter setter 方式注入 比较常用 3 构造器注入 死的应用 沙舟狼客之 Java 软件工程师面试题 只要非商业用途都可任意修改转发 6 J2EE 思想思想 1 23 种设计模式种设计模式 1 工厂模式 工厂方法模式 单例模式 外观 Facade 模式 观察者 Observer 模式 桥接 Bridge 模式都是比较常用的 不同的项目有不同的设计方向 可以参考的设计模式 也不尽相同 没有定数 只是上面这几个模式用的比较多一些 其他的模式我找了一下 都列出来了 创建型模式 2 1 FACTORY 追 MM 少不了请吃饭了 麦当劳的鸡翅和肯德基的鸡翅都是 MM 爱吃的东西 虽然口味有所不同 但不管你带 MM 去麦当劳或肯德基 只管向服务员说 来四个鸡翅 就行 了 麦当劳和肯德基就是生产鸡翅的 Factory 工厂模式工厂模式 客户类和工厂类分开 消费者任何时候需要某种产品 只需向工厂请求即可 消费者无须修改就可以接纳新产品 缺点是当产品修改时 工厂类也要做相应的修改 如 如何创建及如何向客户端提供 2 BUILDER MM 最爱听的就是 我爱你 这句话了 见到不同地方的 MM 要能够用她们的 方言跟她说这句话哦 我有一个多种语言翻译机 上面每种语言都有一个按键 见到 MM 我 只要按对应的键 它就能够用相应的语言说出 我爱你 这句话了 国外的 MM 也可以轻松搞 掂 这就是我的 我爱你 builder 这一定比美军在伊拉克用的翻译机好卖 建造模式建造模式 将产品的内部表象和产品的生成过程分割开来 从而使一个建造过程生成具有不 同的内部表象的产品对象 建造模式使得产品内部表象可以独立的变化 客户不必知道产品 内部组成的细节 建造模式可以强制实行一种分步骤进行的建造过程 3 FACTORY METHOD 请 MM 去麦当劳吃汉堡 不同的 MM 有不同的口味 要每个都记 住是一件烦人的事情 我一般采用 Factory Method 模式 带着 MM 到服务员那儿 说 要一 个汉堡 具体要什么样的汉堡呢 让 MM 直接跟服务员说就行了 工厂方法模式工厂方法模式 核心工厂类不再负责所有产品的创建 而是将具体创建的工作交给子类去做 成为一个抽象工厂角色 仅负责给出具体工厂类必须实现的接口 而不接触哪一个产品类应 当被实例化这种细节 4 PROTOTYPE 跟 MM 用 QQ 聊天 一定要说些深情的话语了 我搜集了好多肉麻的情 话 需要时只要 copy 出来放到 QQ 里面就行了 这就是我的情话 prototype 了 100 块钱 一份 你要不要 原始模型模式原始模型模式 通过给出一个原型对象来指明所要创建的对象的类型 然后用复制这个原型 对象的方法创建出更多同类型的对象 原始模型模式允许动态的增加或减少产品类 产品类 不需要非得有任何事先确定的等级结构 原始模型模式适用于任何的等级结构 缺点是每一 个类都必须配备一个克隆方法 5 SINGLETON 俺有 6 个漂亮的老婆 她们的老公都是我 我就是我们家里的老公 Sigleton 她们只要说道 老公 都是指的同一个人 那就是我 刚才做了个梦啦 哪有这么好 的事 单例模式单例模式 单例模式确保某一个类只有一个实例 而且自行实例化并向整个系统提供这个实 例单例模式 单例模式只应在有真正的 单一实例 的需求时才可使用 结构型模式 沙舟狼客之 Java 软件工程师面试题 只要非商业用途都可任意修改转发 6 ADAPTER 在朋友聚会上碰到了一个美女 Sarah 从香港来的 可我不会说粤语 她 不会说普通话 只好求助于我的朋友 kent 了 他作为我和 Sarah 之间的 Adapter 让我和 Sarah 可以相互交谈了 也不知道他会不会耍我 适配器 变压器 模式适配器 变压器 模式 把一个类的接口变换成客户端所期待的另一种接口 从而使原本因 接口原因不匹配而无法一起工作的两个类能够一起工作 适配类可以根据参数返还一个合适 的实例给客户端 7 BRIDGE 早上碰到 MM 要说早上好 晚上碰到 MM 要说晚上好 碰到 MM 穿了件新 衣服 要说你的衣服好漂亮哦 碰到 MM 新做的发型 要说你的头发好漂亮哦 不要问我 早 上碰到 MM 新做了个发型怎么说 这种问题 自己用 BRIDGE 组合一下不就行了 桥梁模式桥梁模式 将抽象化与实现化脱耦 使得二者可以独立的变化 也就是说将他们之间的强关 联变成弱关联 也就是指在一个软件系统的抽象化和实现化之间使用组合 聚合关系而不是继 承关系 从而使两者可以独立的变化 8 COMPOSITE Mary 今天过生日 我过生日 你要送我一件礼物 嗯 好吧 去商店 你自己挑 这件 T 恤挺漂亮 买 这条裙子好看 买 这个包也不错 买 喂 买了三件 了呀 我只答应送一件礼物的哦 什么呀 T 恤加裙子加包包 正好配成一套呀 小姐 麻 烦你包起来 MM 都会用 Composite 模式了 你会了没有 合成模式合成模式 合成模式将对象组织到树结构中 可以用来描述整体与部分的关系 合成模式就 是一个处理对象的树结构的模式 合成模式把部分与整体的关系用树结构表示出来 合成模 式使得客户端把一个个单独的成分对象和由他们复合而成的合成对象同等看待 9 DECORATOR Mary 过完轮到 Sarly 过生日 还是不要叫她自己挑了 不然这个月伙食 费肯定玩完 拿出我去年在华山顶上照的照片 在背面写上 最好的的礼物 就是爱你的 Fita 再到街上礼品店买了个像框 卖礼品的 MM 也很漂亮哦 再找隔壁搞美术设计的 Mike 设 计了一个漂亮的盒子装起来 我们都是 Decorator 最终都在修饰我这个人呀 怎么样 看懂了吗 装饰模式装饰模式 装饰模式以对客户端透明的方式扩展对象的功能 是继承关系的一个替代方案 提供比继承更多的灵活性 动态给一个对象增加功能 这些功能可以再动态的撤消 增加由 一些基本功能的排列组合而产生的非常大量的功能 10 FACADE 我有一个专业的 Nikon 相机 我就喜欢自己手动调光圈 快门 这样照出来 的照片才专业 但 MM 可不懂这些 教了半天也不会 幸好相机有 Facade 设计模式 把相 机调整到自动档 只要对准目标按快门就行了 一切由相机自动调整 这样 MM 也可以用这 个相机给我拍张照片了 门面模式门面模式 外部与一个子系统的通信必须通过一个统一的门面对象进行 门面模式提供一个 高层次的接口 使得子系统更易于使用 每一个子系统只有一个门面类 而且此门面类只有 一个实例 也就是说它是一个单例模式 但整个系统可以有多个门面类 11 FLYWEIGHT 每天跟 MM 发短信 手指都累死了 最近买了个新手机 可以把一些常 用的句子存在手机里 要用的时候 直接拿出来 在前面加上 MM 的名字就可以发送了 再 不用一个字一个字敲了 共享的句子就是 Flyweight MM 的名字就是提取出来的外部特征 根据上下文情况使用 享元模式享元模式 FLYWEIGHT 在拳击比赛中指最轻量级 享元模式以共享的方式高效的支持大量 的细粒度对象 享元模式能做到共享的关键是区分内蕴状态和外蕴状态 内蕴状态存储在享 元内部 不会随环境的改变而有所不同 外蕴状态是随环境的改变而改变的 外蕴状态不能 影响内蕴状态 它们是相互独立的 将可以共享的状态和不可以共享的状态从常规类中区分 开来 将不可以共享的状态从类里剔除出去 客户端不可以直接创建被共享的对象 而应当 使用一个工厂对象负责创建被共享的对象 享元模式大幅度的降低内存中对象的数量 沙舟狼客之 Java 软件工程师面试题 只要非商业用途都可任意修改转发 12 PROXY 跟 MM 在网上聊天 一开头总是 hi 你好 你从哪儿来呀 你多大了 身高 多少呀 这些话 真烦人 写个程序做为我的 Proxy 吧 凡是接收到这些话都设置好了自动 的回答 接收到其他的话时再通知我回答 怎么样 酷吧 代理模式代理模式 代理模式给某一个对象提供一个代理对象 并由代理对象控制对源对象的引用 代理就是一个人或一个机构代表另一个人或者一个机构采取行动 某些情况下 客户不想或 者不能够直接引用一个对象 代理对象可以在客户和目标对象直接起到中介的作用 客户端 分辨不出代理主题对象与真实主题对象 代理模式可以并不知道真正的被代理对象 而仅仅 持有一个被代理对象的接口 这时候代理对象不能够创建被代理对象 被代理对象必须有系 统的其他角色代为创建并传入 行为模式 13 CHAIN OF RESPONSIBLEITY 晚上去上英语课 为了好开溜坐到了最后一排 哇 前面坐了好几个漂亮的 MM 哎 找张纸条 写上 Hi 可以做我的女朋友吗 如果不愿意请向 前传 纸条就一个接一个的传上去了 糟糕 传到第一排的 MM 把纸条传给老师了 听说是 个老处女呀 快跑 责任链模式责任链模式 在责任链模式中 很多对象由每一个对象对其下家的引用而接 起来形成一条链 请求在这个链上传递 直到链上的某一个对象决定处理此请求 客户并不 知道链上的哪一个对象最终处理这个请求 系统可以在不影响客户端的情况下动态的重新组 织链和分配责任 处理者有两个选择 承担责任或者把责任推给下家 一个请求可以最终不 被任何接收端对象所接受 14 COMMAND 俺有一个 MM 家里管得特别严 没法见面 只好借助于她弟弟在我们俩之 间传送信息 她对我有什么指示 就写一张纸条让她弟弟带给我 这不 她弟弟又传送过来 一个 COMMAND 为了感谢他 我请他吃了碗杂酱面 哪知道他说 我同时给我姐姐三个 男朋友送 COMMAND 就数你最小气 才请我吃面 命令模式命令模式 命令模式把一个请求或者操作封装到一个对象中 命令模式把发出命令的责任和 执行命令的责任分割开 委派给不同的对象 命令模式允许请求的一方和发送的一方独立开 来 使得请求的一方不必知道接收请求的一方的接

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论