2017面试题库


面试题库 LIULEI QQ:972666574 2017-3-8 面试题库 讲师:BruceLiu 不积跬步,无以至千里 讲师:BruceLiu 1 目录 一.JavaSE 基础 ..................................................................................................................................... 5 2.接口和抽象类的异同点 ........................................................................................................... 5 1.重载(overload)和重写(overwrite)区别 .............................................................................. 6 3.StringBuffer StringBuilder String 区别 ........................................................................... 6 4.冒泡排序 .................................................................................................................................... 7 5.选择排序 .................................................................................................................................... 7 6.单例设计模式 ............................................................................................................................ 8 7.常见的异常类型 ........................................................................................................................ 9 8.Throws 和 Throw 的区别 ...................................................................................................... 9 9.Final,Finally,finalize 关键字的作用 ............................................................................... 9 10.Final 关键字的作用 ............................................................................................................. 10 11. Hashtable 与 HashMap 的区别 .................................................................................... 10 12. 线程和进程的区别 ............................................................................................................. 10 13. 实现多线程程序的 2 种方式 ............................................................................................ 11 14. List,Set,Collection,Collections ..................................................................................... 11 15. sleep() 和 wait() 有什么区别 ........................................................................................ 11 16.error 和 exception 有什么区别? ..................................................................................... 12 17.heap(堆)和 stack(栈)有什么区别 ......................................................................... 12 18.GC 是什么? 为什么要有 GC? ........................................................................................... 12 19.内存泄漏和内存溢出 ........................................................................................................... 12 20.运行时异常和 checked 异常的区别? ............................................................................ 12 21.四个访问修饰符合访问级别? .......................................................................................... 13 22.逻辑运算符:&和&&的区别? ........................................................................................... 13 23.Java 中如何实现序列化,有什么意义 ............................................................................. 14 24. 阐述 JDBC 操作数据库的步骤......................................................................................... 14 25. Statement 和 PreparedStatement 有什么区别?哪个性能更好? ....................... 15 26.二分查找法 ............................................................................................................................ 16 27.提示输入一个数,求阶乘 ................................................................................................... 16 28. 菲波那切数列...................................................................................................................... 17 29.Java 中基本数据类型 .......................................................................................................... 18 30.遍历 D 盘下面所有的文件 .................................................................................................. 18 31.ArrayList 和 LinkedList 有什么区别 ............................................................................... 19 32.面向对象的特征有哪些方面 ............................................................................................... 19 33.String 是最基本的数据类型吗? ........................................................................................ 20 34.有一个字符串,其中包含中文字符、英文字符和数字字符,请统计和打印出各个字 符的个数 ...................................................................................................................................... 20 不积跬步,无以至千里 讲师:BruceLiu 2 35.写一个程序将 D 盘下面的一张图片拷贝到 E 盘 ............................................................ 20 36 静态类型有什么特点? ........................................................................................................ 21 37. 说一下多态的表现形式?.................................................................................................. 21 38. 线程通常有五种状态 ......................................................................................................... 22 39. 事务的四大特性: ............................................................................................................. 22 40.Java 中 IO 体系: ................................................................................................................ 23 41.字节流和字符流: ............................................................................................................... 24 42. 接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承 实体类(concrete class)? ......................................................................................................... 24 43.Class.forName 的作用?为什么要用? ............................................................................. 25 44.异常的体系结构: ............................................................................................................... 25 45. 构造函数的特点和作用 ..................................................................................................... 25 46.Java 标识符的命名规则: .................................................................................................. 26 47.Java 关键字: ....................................................................................................................... 26 48. 构造函数的特点和作用 ..................................................................................................... 26 49. synchronized 关键字的用法? ....................................................................................... 26 50. 启动一个线程是调用 run()还是 start()方法? ............................................................. 27 51.Swtich 是否能作用在 byte 上,是否能作用在 long 上,是否能作用在 String 上? ...................................................................................................................................................... 27 52. 数组有没有 length()方法?String 有没有 length()方法? ...................................... 27 53.构造器(constructor)是否可被重写(override)? ............................................... 27 54.阐述静态变量和实例变量的区别 ...................................................................................... 27 55.比较一下 Java 和 JavaSciprt ............................................................................................ 28 56.JDK JRE JVM 的区别: ...................................................................................................... 28 57.XML 和 Json 的特点 ........................................................................................................... 29 58.JDK 常用的包 ....................................................................................................................... 29 59.什么是值传递和引用传递? ............................................................................................... 30 60.解释一下数据库连接池 ....................................................................................................... 30 61.空字符串(“”)和 null 的区别 ........................................................................................... 30 62.列举 java 中 string 类常用方法 ........................................................................................ 31 63.得到 Class 的三种方式是什么—反射 .............................................................................. 31 64.什么是迭代器(Iterator)? .................................................................................................. 32 65.char 型变量中能不能存贮一个中文汉字?为什么? ........................................................ 32 66.Java 中 compareTo 和 compare 的区别? ..................................................................... 32 67.Set 里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是 equals()? 它们有何区别? ........................................................................................................ 32 68.两个对像值相同(x.equals(y) == true),但却可有不同的 hash code,这句话对不 对? ................................................................................................................................................ 33 不积跬步,无以至千里 讲师:BruceLiu 3 69.Java 的 Socket 通信(多线程) ....................................................................................... 33 70.接口中定义: ........................................................................................................................ 33 71.Break 和 Continu ............................................................................................................... 34 二.JavaWeb 部分 ............................................................................................................................... 34 1.四种会话跟踪技术 .................................................................................................................. 34 2. Jsp 九大隐式对象.................................................................................................................. 35 3.Servlet 的生命周期 ............................................................................................................... 35 4.Servlet 和 Jsp 的关系 ........................................................................................................... 36 5.什么是 MVC? ........................................................................................................................ 36 6.重定向(redirect)和转发(forward)的异同点 ..................................................................... 36 7.Session 和 Cookie 的区别: .............................................................................................. 37 8.get 和 post 的区别: ............................................................................................................ 37 9.写出浏览器 JS 的对象 ............................................................................................................ 37 10.简述在 JSP 中的注释有哪几种方法 .................................................................................. 38 11.JSP 中动态 INCLUDE 与静态 INCLUDE 的区别? ....................................................... 38 12.尽量多的写出 request 下的常用方法.............................................................................. 38 13.BS 与 CS 的联系与区别。 .................................................................................................. 38 14.Ajax 的工作原理 ? ............................................................................................................ 39 15. XMLHttpRequest 对象是什么,它有哪些常用方法? .............................................. 39 16. HTTP 常见的状态码 ........................................................................................................... 40 17. 数据库规范: 三大范式 ...................................................................................................... 40 18.实体之间的关系: ............................................................................................................... 40 19.完整性约束: ........................................................................................................................ 40 20.常用的端口 ............................................................................................................................ 41 21.Servlet 和 Jsp 的关系 ......................................................................................................... 41 22.Orcale 中基本数据类型 ...................................................................................................... 41 23. JDBC 访问数据库步骤: ................................................................................................... 42 24.Ajax 总结 ............................................................................................................................... 44 25.Json(JavaScript Object Notation)描述 ............................................................ 44 26.如何解决 Port 8080 is already is use 的问题 .............................................................. 44 27.innerText 和 innerHtml 的区别 ...................................................................................... 45 28.$(document).ready() 是个什么函数?为什么要用它? ............................................ 45 29.JavaScript window.onload 事件和 jQuery ready 函数有何不同 ........................ 45 30.Jquery 中有哪几种常用类型的选择器? ........................................................................ 45 31.Jquery 中如何实现节点遍历? ......................................................................................... 46 32.Jquery 中实现 Ajax 语法? ............................................................................................... 46 33.Js 和 Jquery 的关系 ............................................................................................................ 46 34.常见的应用服务器有那些? ............................................................................................... 47 不积跬步,无以至千里 讲师:BruceLiu 4 35.MODEL1 和 MODEL2 ....................................................................................................... 47 三.框架部分 ......................................................................................................................................... 48 1. IOC 的概念 ............................................................................................................................. 48 2.注入的三种方式 ...................................................................................................................... 48 3 MyBatis 的缓存机制 ............................................................................................................. 48 4.解释 Spring 支持的几种 bean 的作用域 .......................................................................... 49 5.在 Spring 中如何注入一个 java 集合 ................................................................................ 49 6.动态代理设计模式 .................................................................................................................. 49 7. Spring 中通知的类型 ........................................................................................................... 49 8.Hibernate 框架工作原理 ..................................................................................................... 50 9. Hibernate 对象的三种状态是什么 ................................................................................... 50 10. Hibernate 对象的三种状态如何转换的 ......................................................................... 51 11.Hibernate 分页怎样实现? ................................................................................................ 52 12. 对象关系映射(Object Relational Mapping,简称 ORM) ................................ 52 13.hibernate 拒绝连接、服务器崩溃的原因?最少写 5 个 ............................................... 52 14.MyBatis 与 Hibernate 有什么不同? ............................................................................... 53 13. 描述 Struts2 框架(工作原理) ..................................................................................... 53 15.Struts2 中 result 中的 type 类型 ..................................................................................... 54 16.Struts2 中访问 ServletAPI 三种方式: .......................................................................... 54 17.struts2 框架的核心控制器是什么?它有什么作用? Struts2 框架的核心控制器是 StrutsPrepareAndExecuteFilter。 作用: 负 责 拦 截 由 /*指定的所有用户请求,当用户请求到达时,该 Filter 会过滤用户的请求。默认情况下,如果用户请求的路径 不带后缀或者后缀以.action 结尾,这时请求将被转入 struts2 框架处理,否则 struts2 框架将略过该请求的处理。 55 18.Hibernate 中 get 和 load 之间的区别(重点): ........................................................ 55 19.Hibernate 缓存概述 ........................................................................................................... 56 20.Hibernate 核心类或接口 ................................................................................................... 56 20.Hibernate 配置文件中 CASECADE 属性作用: .......................................................... 57 21.Hibernate 配置文件中 inverse 属性作用: .................................................................. 57 22. Open Session In View 模式 ........................................................................................... 57 23. Struts1 和 Struts2 关系: ................................................................................................ 58 24. 简述 MyBatis 框架 ............................................................................................................ 58 25.Spring 中用到的设计模式 ................................................................................................. 58 26.什么是 bean 自动装配? ................................................................................................... 59 27.解释自动装配的各种模式? ............................................................................................... 59 28.自动装配有哪些局限性? ................................................................................................... 59 四.数据库部分 ..................................................................................................................................... 60 不积跬步,无以至千里 讲师:BruceLiu 5 1.分页语句 MySQL 和 Oracle ................................................................................................ 60 2.join 与 left join 的区别: .................................................................................................... 60 3.SQL 中 where 和 having 的区别 ..................................................................................... 60 4.数据库三范式 .......................................................................................................................... 60 5.说出你用过的常见的关系型数据库,非关系型数据库知道哪些? .............................. 61 五.程序算法 ......................................................................................................................................... 61 1.杨辉三角 .................................................................................................................................. 61 2.写一个函数计算当参数为 N 的值:1-2+3-4+5-6+7……+N ......................................... 62 3.在 A B C D E F 六人中随机抽取 3 人中奖,要求中奖人不能重复 .............................. 63 六.其他 ................................................................................................................................................. 63 1.经常访问的技术网站: ......................................................................................................... 63 2.项目团队中交流的工具: ..................................................................................................... 63 3.平时浏览的书籍: .................................................................................................................. 64 4.OSI 七层模型 .......................................................................................................................... 64 5.项目的生命周期 ...................................................................................................................... 64 6.什么是典型的软件三层结构?软件设计为什么要分层?软件分层有什么好处? ............ 65 7.一个 J2EE 项目团队的主要人员组成是什么? .................................................................... 65 8.什么是 UML? ........................................................................................................................ 66 9.JUnit 单元测试 ....................................................................................................................... 66 10.版本管理工具 SVN .............................................................................................................. 67 11.项目管理工具 maven ......................................................................................................... 67 一. JavaSE 基础 2.接口和抽象类的异同点 相同:  都不能创建对象  都可以定义抽象方法,并且一定要在子类中重写 不同:  关键字不同 abstract interface  抽象方法中既可以有抽象的方法也可以有普通的方法  接口中中所有的方法都是抽象方法  抽象类的方法可以任意权限,接口中方法只能是 public  抽象类只能单继承,接口可以多实现 不积跬步,无以至千里 讲师:BruceLiu 6 1.重载(overload)和重写(overwrite)区别 重写的规则 子类和父类,子类重写了父类的方法 1)方法名相同 2)参数列表相同 3)返回值类型相同或者是其子类; 4)访问权限不能严于父类 重载的规则(两同一不同) 1)同一个类中 2)方法名相同 3)参数列表不同(个数,列表,类型) 4)和返回值无关 3.StringBuffer StringBuilder String 区别 String 字符串常量 不可变 使用字符串拼接时会开 辟新空间 StringBuffer 字符串变量 可变 线程安全 字符串拼接直接在字符串 后追加 StringBuilder 字符串变量 可变 非线程安全 字符串拼接直接在字符串 后追加 1.StringBuilder 执行效率高 StringBuffer,高于 String. 2.String 是一个常量,是不可变的,所以对于每一次+=赋值都会创建一个新 的对象, StringBuffer 和 StringBuilder 都是可变的,当进行字符串拼接时采 用 append 方 法,在原来的基础上进行追加,所以性能比 String 要高, StringBuffer 是线程安全的而 StringBuilder 是线程非安全的,所以 StringBuilder 的效率高于 StringBuffer. 3.对于大数据量的字符串的拼接,采用 StringBuffer,StringBuilder. 不积跬步,无以至千里 讲师:BruceLiu 7 4.冒泡排序 工具类版本: 5.选择排序 不积跬步,无以至千里 讲师:BruceLiu 8 6.单例设计模式 单例就是该类只能返回一个实例。 单例所具备的特点: 1.私有化的构造函数 2.私有的静态的全局变量 3.公有的静态的方法 懒汉式: 线程安全懒汉式: 饿汉式: 不积跬步,无以至千里 讲师:BruceLiu 9 7.常见的异常类型 NullPointerException 空指针异常 ClassCastException 类型强制转换异常 IllegalArgumentException 传递非法参数异常 ArithmeticException 算数运算异常 IndexOutOfBoundsException 下标越界异常 NumberFormatException 数字格式异常 ClassNotFindException 加载请求异常 …… 8.Throws 和 Throw 的区别  位置:Throw 方法内部,Throws 方法名之后  作用:Throw 抛出异常,Throws 声明异常  个数:Throw 一次抛出一个异常,Throws 可以声明多个异常 9.Final,Finally,finalize 关键字的作用 final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可 不积跬步,无以至千里 讲师:BruceLiu 10 继承。 finally 是异常处理语句结构的一部分,表示总是执行。不管是否有异常总是被执 行,除非虚拟机停止才不执行。System.exit(1); finalize 是 Object 类的一个方法,在垃圾收集器执行的时候会调用被回收对象的 此方法可以实现资源回收,释放资源,例如关闭文件等。JVM 不保证此方法总被 调用. 10.Final 关键字的作用  修饰类:(最终类)不能被子类继承  修饰方法:(最终方法)不能被子类重写  修饰变量:(常量)一旦声明之后,不能再次修改其中的值 11. Hashtable 与 HashMap 的区别 Hashmap 允许空(null)键值(key),非线程安全,效率高。在多个线程访问 时必须提供外同步。 HashMap 是 Java1.2 引进的 Map interface 的一个实现。 Hashtable 的方法是 Synchronized(同步)的,在多个线程访问 Hashtable 时,不 需要自己为它的方法实现同步。不允许将 null作为一个entry的 key或者 value。 Hashtable 继承自 Dictionary 类。 HashMap 把 Hashtable的 contains 方法去掉了,改成 containsvalue 和 containsKey。 Hashtable 和 HashMap 采用的 hash/rehash 算法大致一样,所以性能不会有很 大的差异。 12. 线程和进程的区别 线程是指在程序执行过程中,能够执行程序代码的一个基本执行单位,每个程 序至少都有一个线程,也就是程序本身。 Java 中的线程有四种状态:运行、就绪、挂起、结束。 进程是程序的基本执行实体,是线线程的容器。 进程具有的特征: 动态性:进程是程序的一次执行过程,是临时的,有生命期的,是动态 产生,动态消亡的; 并发性:任何进程都可以同其他进程一起并发执行; 独立性:进程是系统进行资源分配和调度的一个独立单位; 结构性:进程由程序、数据和进程控制块三部分组成。 线程和进程的区别: 1、隶属关系:线程是进程中的一部分,一个进程中可以包含若干个线程。进 程可以申请和拥有系统资源,是一个动态的概念,是一个活动的实体。 2、地址空间和其它资源:进程间相互独立,同一进程的各线程间共享。某进 程内的线程在其它进程不可见。在引入线程的操作系统中,通常都是把进程作 不积跬步,无以至千里 讲师:BruceLiu 11 为分配资源的基本单位,而把线程作为独立运行和独立调度的基本单位。 3、进程间通信:线程间可以直接读写进程数据段(如全局变量)来进行通信。 需要进程同步和互斥手段的辅助,以保证数据的一致性。 4、调度和切换:线程上下文切换比进程上下文切换要快得多。 13. 实现多线程程序的 2 种方式 多线程有两种实现方式: 一、继承 Thread 类。 二、实现 Runnable 接口。 同步的实现方法有两种: Wait()使一个线程处于等待状态,并且释放所持有的对象的 lock。 notify():唤醒一个处于等待状态的线程,在调用此方法的时候,并不能确切的 唤醒某一个等待状态的线程,而是由 JVM 确定唤醒哪个线程,不是按优先级。 用 synchronized 关键字修饰同步方法反对使用 stop(),是因为它不安全。 suspend()方法容易发生死锁。调用 suspend()的时候,目标线程会停下来,但仍 然持有在这之前获得的锁定。此时,其他任何线程都不能访问锁定的资源,除 非被“挂起”的线程恢复运行。对任何线程来说,如果它们想恢复目标线程, 同时又试图使用任何一个锁定的资源,就会造成死锁。所以不应该使用 suspend(),而应在自己的 Thread 类中置入一个标志,指出线程应该活动还是 挂起。若标志指出线程应该挂起,便用 wait()命其进入等待状态。若标志指出 线程应当恢复,则用一个 notify()重新启动线程。 14. List,Set,Collection,Collections 1.List 和 Set 都是接口,他们都继承于接口 Collection,List 是一个有序的可重复的 集合,而 Set 是无序的不可重复的集合。Collection 是集合的顶层接口,Collections 是一个封装了众多关于集合操作的静态方法的工具类,因为构造方法是私有的, 所以不能实例化。 2.List 接口实现类有 ArrayList,LinkedList,Vector。ArrayList 和 Vector 是基于数组实 现的,所以查询的时候速度快,而在进行增加和删除的时候速度较慢 LinkedList 是 基于链式存储结构,所以在进行查询的时候速度较慢但在进行增加和删除的时候 速度较快。又因为 Vector 是线程安全的,所以他和 ArrayList 相比而言,查询效 率要低。 15. sleep() 和 wait() 有什么区别 sleep 是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机 会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用 sleep 不会释 不积跬步,无以至千里 讲师:BruceLiu 12 放对象锁。 wait 是 Object 类的方法,对此对象调用 wait 方法导致本线程放弃对 象锁,进入等待此对象的等待锁定池,只有针对此对象发出 notify 方法(或 notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态 相同点在于都会造成线程阻塞. 16.error 和 exception 有什么区别? error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存 溢出。不可能指望程序能处理这样的情况。 exception 表示一种设计或实现问题。 也就是说,它表示如果程序运行正常,从不会发生的情况。 17.heap(堆)和 stack(栈)有什么区别 java 的内存分为两类,一类是栈内存,一类是堆内存。栈内存是指程序进入 一个方法时,会为这个方法单独分配一块私属存储空间,用于存储这个方法内部 的局部变量,当这个方法结束时,分配给这个方法的栈会释放,这个栈中的变量 也将随之释放。 堆是与栈作用不同的内存,一般用于存放不放在当前方法栈中的那些数据, 例如,使用 new 创建的对象都放在堆里,所以,它不会随方法的结束而消失。 方法中的局部变量使用 final 修饰后,放在堆中,而不是栈中。 18.GC 是什么? 为什么要有 GC? GC 是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问 题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java 提供的 GC 功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的, Java 语言没有提供释放已分配内存的显示操作方法。 19.内存泄漏和内存溢出 内存泄露 (memory leak),是指应用程序在申请内存后,无法释放已经申请 的内存空间.一次内存泄露危害可以忽略,但如果任其发展最终会导致内存溢出 (out of memory).如读取文件后流要进行及时的关闭以及对数据库连接的释放。 内存溢出(out of memory)是指应用程序在申请内存时,没有足够的内存空 间供其使用。如我们在项目中对于大批量数据的导入,采用分段批量提交的方式。 20.运行时异常和 checked 异常的区别? java 异常是程序运行过程中出现的错误。 不积跬步,无以至千里 讲师:BruceLiu 13 运行时异常: 都是 RuntimeException 类及其子类异常。 IndexOutOfBoundsException 索引越界异常 ArithmeticException:数学计算异常 NullPointerException:空指针异常 ArrayOutOfBoundsException:数组索引越界异常 ClassNotFoundException:类文件未找到异常 ClassCastException:造型异常(类型转换异常) 这些异常是不检查异常(Unchecked Exception),程序中可以选择捕获处 理,也可以不处理。这些异常一般是由程序逻辑错误引起的。 checked 异常,又叫做非运行时异常:是 RuntimeException 以外的异常,类型 上都属于 Exception 类及其子类。从程序语法角度讲是必须进行处理的异常,如 果不处理,程序就不能编译通过。如: IOException、文件读写异常 FileNotFoundException:文件未找到异常 EOFException:读写文件尾异常 MalformedURLException:URL 格式错误异常 SocketException:Socket 异常 SQLException:SQL 数据库异常 21.四个访问修饰符合访问级别? 四个访问修饰符:private,default,protected,public 22.逻辑运算符:&和&&的区别? 不积跬步,无以至千里 讲师:BruceLiu 14 &和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表 达式的结果都为 true 时,整个运算结果才为 true,否则,只要有一方为 false, 则结果为 false。 &&还具有短路的功能,即如果第一个表达式为 false,则不再计算第二个表 达式。 &还可以用作位运算符,当&操作符两边的表达式不是 boolean 类型时,&表 示按位与操作 23.Java 中如何实现序列化,有什么意义 序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进 行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之 间。序列化是为了解决对象流读写操作时可能引发的问题(如果不进行序列化可 能会存在数据乱序的问题)。 要实现序列化,需要让一个类实现 Serializable 接口,该接口是一个标识性接 口,标注该类对象是可被序列化的,然后使用一个输出流来构造一个对象输出流 并通过 writeObject(Object)方法就可以将实现对象写出(即保存其状态);如果需 要反序列化则可以用一个输入流建立对象输入流,然后通过 readObject 方法从流 中读取对象。序列化除了能够实现对象的持久化之外,还能够用于对象的深度克 隆。 24. 阐述 JDBC 操作数据库的步骤  加载驱动。 Class.forName("oracle.jdbc.driver.OracleDriver");  创建连接。 Connection con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "scott", "tiger"); 不积跬步,无以至千里 讲师:BruceLiu 15  创建语句。 PreparedStatement ps = con.prepareStatement("select * from emp where sal between ? and ?"); ps.setInt(1, 1000); ps.setInt(2, 3000);  执行语句。 ResultSet rs = ps.executeQuery();  处理结果。 while(rs.next()) { System.out.println(rs.getInt("empno") + " - " + rs.getString("ename")); } 关闭资源。 finally { if(con != null) { try { con.close(); } catch (SQLException e) { e.printStackTrace(); } } } 提示:关闭外部资源的顺序应该和打开的顺序相反,也就是说先关闭 ResultSet、再关闭 Statement、在关闭 Connection。上面的代码只关闭了 Connection (连接),虽然通常情况下在关闭连接时,连接上创建的语句和打开的游标也会 关闭,但不能保证总是如此,因此应该按照刚才说的顺序分别关闭。此外,第一 步加载驱动在 JDBC 4.0 中是可以省略的(自动从类路径中加载驱动) 25. Statement 和 PreparedStatement 有什么区别?哪个 性能更好? 与 Statement 相比,  PreparedStatement 接口代表预编译的语句,它主要的优势在于可以减少 SQL 的编译错误并增加 SQL 的安全性(减少 SQL 注射攻击的可能性);  PreparedStatement 中的 SQL 语句是可以带参数的,避免了用字符串连接 拼接 SQL 语句的麻烦和不安全;  当批量处理 SQL 或频繁执行相同的查询时,PreparedStatement 有明显的 性能上的优势,由于数据库可以将编译优化后的 SQL 语句缓存起来,下 次执行相同结构的语句时就会很快(不用再次编译和生成执行计划)。 不积跬步,无以至千里 讲师:BruceLiu 16 26.二分查找法 1.二分查找又称折半查找,它是一种效率较高的查找方法。 2.二分查找要求(前提):( 1)必须采用顺序存储结构 (2).必须按关键字大 小有序排列 3.原理:将数组分为三部分,依次是中值(所谓的中值就是数组中间位置的 那个值)前,中值,中值后;将要查找的值和数组的中值进行比较,若小于中值 则在中值前面找,若大于中值则在中值后面找,等于中值时直接返回。然后依次 是一个递归过程,将前半部分或者后半部分继续分解为三部分。 4.代码实现 public static void main(String[] args) { int[] array = { 1, 4, 7, 9, 10, 44, 78, 101, 203, 500 }; int index = binarySearch(array,78); System.out.println(index); } /* * 循环实现二分查找算法arr 已排好序的数组x 需要查找的数-1 无法查到数据 */ public static int binarySearch(int[] arr, int x) { int low = 0; int high = arr.length - 1; while (low <= high) { int middle = (low + high) / 2; if (x == arr[middle]) { return middle; } else if (x < arr[middle]) { high = middle - 1; } else { low = middle + 1; } } return -1; } 27.提示输入一个数,求阶乘 public static void main(String[] args) { System.out.print("请输入一个正整数"); 不积跬步,无以至千里 讲师:BruceLiu 17 Scanner sc = new Scanner(System.in); int n = sc.nextInt(); if (n < 1) { System.out.println("无效数据!"); return; } System.out.print(n + "!="); int result = 1; for (int i = 1; i <= n; i++) { result = result * i; if (i == n) System.out.print(i + "="); else System.out.print(i + "x"); } System.out.print(result); } 28. 菲波那切数列 斐波纳契数列,又称黄金分割数列,数字上的体现是 1,1,2,3,5,8,13……(实际 上是前两个数之和等于第三个数) 不积跬步,无以至千里 讲师:BruceLiu 18 29.Java 中基本数据类型 数据类型 大小 包装类 boolean(布尔型) 1 位 Boolean(布尔型) byte(字节) 1(8 位) Byte(字节) char(字符型) 2(16 位) Character(字符型) shot(短整型) 2(16 位) Shot(短整型) int(整型) 4(32 位) Integer(整型) long(长整型) 8(32 位) Long(整型) float(浮点型) 4(32 位) Float(浮点型) double(双精度) 8(64 位) Double(双精度) 30.遍历 D 盘下面所有的文件 public void testprint(File file) { String name = file.getName(); boolean b = file.isDirectory();// 判断是否为文件夹 if (b) { // 是文件夹 File files[] = file.listFiles(); for (File f : files) { testprint(f); // System.out.println(name);//打印文件夹名字 } } else { System.out.println(name); } } public static void main(String[] args) { File file = new File("d:\\"); testfile fi = new testfile(); fi.testprint(file); } 不积跬步,无以至千里 讲师:BruceLiu 19 31.ArrayList 和 LinkedList 有什么区别 1) 因为 Array 是基于索引(index)的数据结构,它使用索引在数组中搜索和读 取数据是很快的。Array 获取数据的时间复杂度是 O(1),但是要删除数据却是开销 很大的,因为这需要重排数组中的所有数据。 2) 相对于 ArrayList,LinkedList 插入是更快的。因为 LinkedList 不像 ArrayList 一样,不需要改变数组的大小,也不需要在数组装满的时候要将所有的数据重新 装入一个新的数组,这是 ArrayList 最坏的一种情况,时间复杂度是 O(n),而 LinkedList 中插入或删除的时间复杂度仅为 O(1)。ArrayList 在插入数据时还需要更 新索引(除了插入数组的尾部)。 3) 类似于插入数据,删除数据时,LinkedList 也优于 ArrayList。 4) LinkedList 需要更多的内存,因为 ArrayList 的每个索引的位置是实际的数据, 而 LinkedList 中的每个节点中存储的是实际的数据和前后节点的位置。 32.面向对象的特征有哪些方面 1) 抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与 当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分, 暂时不用部分细节。 抽象包括两个方面,一是过程抽象,二是数据抽象。 2) 继承: 继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明 确表述共性的方法。 对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了 原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父 类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加 新的方法使之更适合特殊的需要。 3) 封装: 封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。 面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、 封装的对象,这些对象通过一个受保护的接口访问其他对象。 4) 多态: 多态是指允许不同类的对象对同一消息作出响应。 多态包括参数化多态性和包含多态性。 多态语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用 程序函数同名问题。 不积跬步,无以至千里 讲师:BruceLiu 20 33.String 是最基本的数据类型吗? 基本数据类型包括 byte、int、char、long、float、double、boolean 和 short。 java.lang.String 类是 final 类型的,因此不可以继承这个类、不能修改这个类。 为了提高效率节省空间,我们应该用 StringBuffer 类 34.有一个字符串,其中包含中文字符、英文字符和数字字 符,请统计和打印出各个字符的个数 public static void main(String[] args) { String str = "中国aadf的111萨bbb菲的zz萨菲"; int engishCount = 0; int chineseCount = 0; int digitCount = 0; for (int i = 0; i < str.length(); i++) { char ch = str.charAt(i); if (ch >= '0' && ch <= '9') { digitCount++; } else if ((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')) { engishCount++; } else { chineseCount++; } } System.out.println("英文字符:"+engishCount); System.out.println("中文字符:"+chineseCount); System.out.println("数字字符:"+digitCount); } 35.写一个程序将 D 盘下面的一张图片拷贝到 E 盘 /* * 从d盘将文件拷贝到e盘 */ public static void main(String[] args) { File f1=new File("d:/J1610B面试题库0220.pdf"); File f2=new File("e:/J1610B面试题库0220.pdf"); try { forJava(f1, f2); 不积跬步,无以至千里 讲师:BruceLiu 21 System.out.println("拷贝成功~"); } catch (Exception e) { e.printStackTrace(); } } public static long forJava(File f1, File f2) throws Exception { long time = new Date().getTime(); int length = 2097152; FileInputStream in = new FileInputStream(f1); FileOutputStream out = new FileOutputStream(f2); byte[] buffer = new byte[length]; while (true) { int ins = in.read(buffer); if (ins == -1) { in.close(); out.flush(); out.close(); return new Date().getTime() - time; } else { out.write(buffer, 0, ins); } } } 36 静态类型有什么特点? (1)静态的属性:随着类的加载而加载,该属性不在属于某个对象,属于整个类 (2)静态的方法:直接用类名调用,静态方法里不能访问非静态成员变量 (3)静态类:不能直接创建对象,不可被继承 37. 说一下多态的表现形式? (1)重载,重写,重载 Overload 表示同一个类中可以有多个名称相同的方法,但这些 方法的参数列表各不相同 (2)重写 Override 表示子类中的方法可以与父类中的某个方法的名称和参数完全 相同,通过子类创建的实例对象调用这个方法时,将调用子类中的定义方法,这 相当于把父类中定义的那个完全相同的方法给覆盖了,这也是面向对象编程的多 态性的一种表现,只能比父类抛出更少的异常,或者是抛出父类抛出的异常的子 异常,子类方法的访问权限只能比父类的更大,不能更小。如果父类的方法是 private 类型,那么,子类则不存在覆盖的限制,相当于子类中增加了一个全新的 方法 不积跬步,无以至千里 讲师:BruceLiu 22 38. 线程通常有五种状态  创建状态。在生成线程对象,并没有调用该对象的 start 方法,这是线程处 于创建状态  就绪状态。当调用了线程对象的 start 方法之后,该线程就进入了就绪状态, 但是此时线程调度程序还没有把该线程设置为当前线程,此时处于就绪状态。 在线程运行之后,从等待或者睡眠中回来之后,也会处于就绪状态。  运行状态。线程调度程序将处于就绪状态的线程设置为当前线程,此时线程 就进入了运行状态,开始运行 run 函数当中的代码。  阻塞状态。线程正在运行的时候,被暂停,通常是为了等待某个时间的发生 (比如说某项资源就绪)之后再继续运行。sleep,suspend,wait 等方法都可以 导致线程阻塞。  死亡状态。如果一个线程的 run 方法执行结束或者调用 stop 方法后,该线程 就会死亡。对于已经死亡的线程,无法再使用 start 方法令其进入就绪 39. 事务的四大特性: 不积跬步,无以至千里 讲师:BruceLiu 23 40.Java 中 IO 体系: 不积跬步,无以至千里 讲师:BruceLiu 24 41.字节流和字符流: Stream 结尾都是字节流,reader 和 writer 结尾都是字符流 两者的区别就是读写的时候一个是按字节读写,一个是按字符,实际使用通常差不多。 在读写文件需要对内容按行处理,比如比较特定字符,处理某一行数据的时候一般会选 择字符流。 只是读写文件,和文件内容无关的,一般选择字节流。 42. 接口是否可继承接口? 抽象类是否可实现(implements) 接口? 抽象类是否可继承实体类(concrete class)? 接口可以继承接口 不积跬步,无以至千里 讲师:BruceLiu 25 抽象类可以实现接口 抽象类可以继承实体类 43.Class.forName 的作用?为什么要用? 按参数中指定的字符串形式的类名去搜索并加载相应的类,如果该类字 节码已经被加载过,则返回代表该字节码的 Class 实例对象,否则,按类加 载器的委托机制去搜索和加载该类,如果所有的类加载器都无法加载到该类, 则抛出 ClassNotFoundException。加载完这个 Class 字节码后,接着就可以使 用 Class 字节码的 newInstance 方法去创建该类的实例对象了。 有时候,我们程序中所有使用的具体类名在设计时(即开发时)无法确 定,只有程序运行时才能确定,这时候就需要使用 Class.forName 去动态加载 该类,这个类名通常是在配置文件中配置的,例如,Spring 的 ioc 中每次依 赖注入的具体类就是这样配置的,jdbc 的驱动类名通常也是通过配置文件来 配置的,以便在产品交付使用后不用修改源程序就可以更换驱动类名。 44.异常的体系结构: 45. 构造函数的特点和作用  方法名和类名相同  没有返回值,连 void 也没有  初始化对象 不积跬步,无以至千里 讲师:BruceLiu 26 46.Java 标识符的命名规则: 只能有字母,数字,下划线和$组成 数字在不能开头 不能和关键字重名 见名知义 47.Java 关键字: 48. 构造函数的特点和作用 方法名和类名相同 没有返回值,连 void 也没有 初始化对象 49. synchronized 关键字的用法? synchronized 关键字可以将对象或者方法标记为同步,以实现对对象和方法的互斥访 问,可以用 synchronized(对象) { … }定义同步代码块,或者在声明方法时将 synchronized 不积跬步,无以至千里 讲师:BruceLiu 27 作为方法的修饰符。 同步代码块 同步方法 50. 启动一个线程是调用 run()还是 start()方法? 启动一个线程是调用 start()方法,使线程所代表的虚拟处理机处于可运行状态,这意 味着它可以由 JVM 调度并执行,这并不意味着线程就会立即运行。 run()方法是线程启动后要进行回调(callback)的方法。 51.Swtich 是否能作用在 byte 上,是否能作用在 long 上, 是否能作用在 String 上? 在 Java 5 以前,switch(expr)中,expr 只能是 byte、short、char、int。从 Java 5 开始,Java 中引入了枚举类型,expr 也可以是 enum 类型,从 Java 7 开始,expr 还可以 是字符串(String),但是长整型(long)在目前所有的版本中都是不可以的。 52. 数组有没有 length()方法?String 有没有 length()方 法? 数组没有 length()方法,有 length 的属性。String 有 length()方法。JavaScript 中,获得字符串的长度是通过 length 属性得到的,这一点容易和 Java 混淆 53.构造器(constructor)是否可被重写(override)? 构造器不能被继承,因此不能被重写,但可以被重载。 54.阐述静态变量和实例变量的区别 静态变量是被 static 修饰符修饰的变量,也称为类变量,它属于类,不属于类的任何一 个对象,一个类不管创建多少个对象,静态变量在内存中有且仅有一个拷贝; 实例变量必须依存于某一实例,需要先创建对象然后通过对象才能访问到它。 不积跬步,无以至千里 讲师:BruceLiu 28 静态变量可以实现让多个对象共享内存。 注:在 Java 开发中,上下文类和工具类中通常会有大量的静态成员 55.比较一下 Java 和 JavaSciprt JavaScript 与 Java 是两个公司开发的不同的两个产品。 Java 是原 Sun Microsystems 公司推出的面向对象的程序设计语言,特别适合于互联 网应用程序开发;JavaScript 是 Netscape 公司的产品,为了扩展 Netscape 浏览器的功能 而开发的一种可以嵌入 Web 页面中运行的基于对象和事件驱动的解释性语言。JavaScript 的前身是 LiveScript;而 Java 的前身是 Oak 语言。 下面对两种语言间的异同作如下比较: - 基于对象和面向对象:Java 是一种真正的面向对象的语言,即使是开发简单的程序, 必须设计对象;JavaScript 是种脚本语言,它可以用来制作与网络无关的,与用户交互作用 的复杂软件。它是一种基于对象(Object-Based)和事件驱动(Event-Driven)的编程语 言,因而它本身提供了非常丰富的内部对象供设计人员使用。 - 解释和编译:Java 的源代码在执行之前,必须经过编译。JavaScript 是一种解释性 编程语言,其源代码不需经过编译,由浏览器解释执行。(目前的浏览器几乎都使用了 JIT (即时编译)技术来提升 JavaScript 的运行效率) - 强类型变量和类型弱变量:Java 采用强类型变量检查,即所有变量在编译之前必须 作声明;JavaScript 中变量是弱类型的,甚至在使用变量前可以不作声明,JavaScript 的解 释器在运行时检查推断其数据类型。 - 代码格式不一样。 56.JDK JRE JVM 的区别: Jdk【Java Development ToolKit】就是 java 开发工具箱, JDK 是整个 JAVA 的 核心里边包含了 jre,它除了包含 jre 之外还包含了一些 javac 的工具类,把 java 源文 件编译成 class 文件,java 文件是用来运行这个程序的,除此之外,里边还包含了 java 源生的 API,java.lang.integer 在 rt 的 jar 包里边【可以在项目中看到】,通过 rt 这个 jar 包来调用我们的这些 io 流写入写出等 JDK 有以下三种版本: J2SE,standard edition,标准版,是我们通常用的一个版本 J2EE,enterpsise edtion,企业版,使用这种 JDK 开发 J2EE 应用程序 J2ME,micro edtion,主要用于移动设备、嵌入式设备上的 java 应用程序 Jre【Java Runtime Enviromental】是 java 运行时环境,那么所谓的 java 运 行时环境,就是为了保证 java 程序能够运行时,所必备的一基础环境,也就是它只是 保证 java 程序运行的,不能用来开发,而 jdk 才是用来开发的,所有的 Java 程序都要 在 JRE 下才能运行。 不积跬步,无以至千里 讲师:BruceLiu 29 包括 JVM 和 JAVA 核心类库和支持文件。与 JDK 相比,它不包含开发工具——编 译器、调试器和其它工具。 Jre 里边包含 jvm Jvm:【 Java Virtual Mechinal】因为 jre 是 java 运行时环境,java 运行靠什么运 行,而底层就是依赖于 jvm,即 java 虚拟机,java 虚拟机用来加载类文件,java 中之 所以有跨平台的作用,就是因为我们的 jvm 关系: J2se 是基于 jdk 和 jre, JDK 是整个 JAVA 的核心里边包含了 jre, Jre 里边包含 jvm 57.XML 和 Json 的特点 Xml 特点: 1、有且仅有一个根节点; 2、是独立与软件和硬件的信息传输工具(传输量较大) 3、所有的标签都需要自定义 4、仅仅是纯文本文件 Json(JavaScript Object Notation)特点: json 分为两种格式: json 对象(就是在{}中存储键值对,键和值之间用冒号分隔, 键 值 对之间用逗号分隔),json 数组(就是[]中存储多个 json 对象,json 对象之间用逗号分隔) (两者间可以进行相互嵌套) 数据传输的载体之一 区别: xml 的传输数据量比 json 的要大,流行的是基于 json 的数据传输。 共同点: Xml 和 json 都是传输数据的载体,并且具有跨平台跨语言的特性。 58.JDK 常用的包 ◆java.lang: 这个是系统的基础类,比如 String、Math、Integer、System 和 Thread, 提供常用功能。在 java.lang 包中还有一个子包:java.lang.reflect 用于实现 java 类... ◆java.io: 这里面是所有输入输出有关的类,比如文件操作等 ◆java.net: 这里面是与网络有关的类,比如 URL,URLConnection 等。 ◆java.util : 这个是系统辅助类,特别是集合类 Collection,List,Map 等。 不积跬步,无以至千里 讲师:BruceLiu 30 ◆java.sql: 这个是数据库操作的类,Connection, Statememt,ResultSet 等 59.什么是值传递和引用传递? (1)值传递:形参类型是基本数据类型,方法调用时,实际参数把它的值传递给对应的 形式参数,形式参数只是用实际参数的值初始化自己的存储单元内容,是两个不同的存储单 元,所以方法执行中形参值得改变不影响实际参数的值 (2)引用传递:形参类型是引用数据类型参数,也称为传地址,方法调用时,实际参数 是对象(或数组),这时实际参数与形式参数指向同一个地址,在方法执行中,对形式参数 的操作实际上就是对实际参数的操作,这个结果在方法结束后被保留下来,所以方法执行中 形式参数的改变将会影响实际参数。 60.解释一下数据库连接池 概念:一种关键的有限的昂贵的资源 影响因素:最大连接数,最小连接数 功能:分配、管理和释放数据库连接 数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数 据库连接,而不是再重新建立一个,释放空闲时间超过最大空闲时间的数据库连接来避免因 为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。 原理: 连接池基本的思想是在系统初始化的时候,将数据库连接作为对象储在内存中,当用户 需要访问数据库时,并非建立一个新的连接,而是从连接池中取出一个已建立的空闲连接对 象。使用完毕后,用户也并非将连接关闭,而是将连接放回连接池中,以供下一个请求访问 使用。而连接的建立、断开都由连接池自身来管理。同时,还可以通过设置连接池的参数来 控制连接池中的初始连接数、连接的上下限数以及每个连接的最大使用次数、最大空闲时间 等等。也可以通过其自身的管理机制来监视数据库连接的数量、使用情况。 61.空字符串(“”)和 null 的区别 空字符串是"",会创建一个对象,内容是"",有内存空间。 而 null,不会创建对象,没有内存空间 空字符串是 String 类的一个对象,而 null 是指一个引用变量没有引用对象,在值为 null 的引用变量上调用方法或变量,将会导致 NullPointerException。通过以下代码来验证变 不积跬步,无以至千里 讲师:BruceLiu 31 量 x 是否为 null,x == null,通过”".equals(x)来验证 x 是否为空字符串。 62.列举 java 中 string 类常用方法 charAt(int index) 返回指定索引处的 char 值。 concat(String str) 将指定字符串连接到此字符串的结尾。 equals(Object anObject)比较字符串的内容是否相等。 length()返回此字符串的长度。 trim()返回字符串的副本,忽略前导空白和尾部空白。去掉字符串中的前后空格,中 substring(int beginIndex) 截取子串从beginindex开始。 substring(int beginIndex, int endIndex) 截取子串从哪到哪。 split(String regex) 分割字符串 切割字符串 valueOf(float f)返回 float 参数的字符串表示形式。Float可以是任何java提供类型。 toLowerCase 转成小写的与toUpperCase 转成大写 compareTo(String anotherString) 按字典顺序比较两个字符串。 contains(CharSequence s) 一个字符串中包不包含子串 indexOf(int ch) 返回索引值第一次出现的位置 replace(char oldChar, char newChar)用newchar替换此字符串中出现的所有 63.得到 Class 的三种方式是什么—反射 反射:是 java 中的一个机制,也叫反射机制。 反射:是一种 Java 编程语言的功能。它允许一个运行中的 Java 程序检查其本身,以及 操作程序的内在属性。 第一种:通过每个对象都具备的方法 getClass 来获取。 第二种:每一个数据类型(基本数据类型和引用数据类型)都有一个静态的属性 class。.class 用该属性就可以获取到字节码文件对象虽然不用对象调用,但还是要用具 体的类调用静态属性。 第三种:使用的 Class 类中的方法,静态的 forName 方法。 例: Student s=new Student(); Class stud = s.getClass(); 1 种 Class stu=Student.class; 2 种 Class forName = Class.forName("java.util.Data"); 3 种 前两种方式不利于程序的扩展,因为都需要在程序使用具体的类来完成。 不积跬步,无以至千里 讲师:BruceLiu 32 64.什么是迭代器(Iterator)? Iterator提供了统一遍历操作集合元素的统一接口, Collection接口实现Iterable接 口, 每个集合都通过实现Iterable接口中iterator()方法返回Iterator接口的实例, 然后 对集合的元素进行迭代操作. 有一点需要注意的是:在迭代元素的时候不能通过集合的 方法删除元素, 否则会抛出ConcurrentModificationException异常. 但是可以通过 Iterator接口中的remove()方法进行删除. Iterable接口 Iteratoriterator(); Iterator接口 boolean hasNext(); E next(); void remove(); 65.char 型变量中能不能存贮一个中文汉字?为什么? char 型变量是用来存储 Unicode 编码的字符的,unicode 编码字符集中包含了汉字, 所以,char 型变量中当然可以存储汉字啦。不过,如果某个特殊的汉字没有被包含在 unicode 编码字符集中,那么,这个 char 型变量中就不能存储这个特殊汉字。补充说明: unicode 编码占用两个字节,所以,char 类型的变量也是占用两个字节。 66.Java 中 compareTo 和 compare 的区别? compareTo 是 Compareable 接口的一个方法,主要用于规定创建对象的大小关系,该对 象要实现 compareable 接口, 当 a.compareTo(b)>0 时,则 a>b, 当 a.compareTo(b)<0 时, a实现请求之间的跳转 不积跬步,无以至千里 讲师:BruceLiu 37 不同: >语法不同 >重定向不能携带值,转发可以带值 >重定向发送了两次请求,转发发送了一次请求 >重定向地址发生改变,转发地址不发生改变 7.Session 和 Cookie 的区别: Session 和 Cookies 都能设置失效时间 8.get 和 post 的区别: 1.get 是从服务器上获取数据,post 是向服务器传送数据, 2.get 传送的数据量较小,不能大于 2KB。post 传送的数据量较大,一般被 默认为不受限制。 3.get 安全性非常低,post 安全性较高。但是执行效率却比 Post 方法好。 4.在进行文件上传时只能使用 post 而不能是 get。 5.默认是 GET 请求 9.写出浏览器 JS 的对象 Window 对象:窗口信息 不积跬步,无以至千里 讲师:BruceLiu 38 History 对象:包含了浏览器窗口访问过的 URL。 Location 对象:Location 包含了当前 URL 的信息 Navigator 对象: 包含有关浏览器的信息 Screen 对象:包含有关客户端显示屏幕的信息 Document 对象:文档对象 10.简述在 JSP 中的注释有哪几种方法 主要有四中方法: 1。<%-- 与 --%> 2。// 3。/**与**/ 4。 11.JSP 中动态 INCLUDE 与静态 INCLUDE 的区别? 答:动态 INCLUDE 用 jsp:include 动作实现 它总是会检查所含文件中 的变化,适合用于包含动态页面,并且可以带参数 静态 INCLUDE 用 include 伪 码实现,定不会检查所含文件的变化,适用于包含静态页面 <%@ include file=included.htm %> 12.尽量多的写出 request 下的常用方法 getCookies(): 从请求信息中获取 Cookies getHeader(String name):获取请求头信息 getRequestURI():获取请求的 URI 地址 getSession():获取 Session 对象 getParameter(String name) 获取请求参数 setCharacterEncoding(String env):设置请求编码 ……… 13.BS 与 CS 的联系与区别。 C/S 是 Client/Server 的缩写。服务器通常采用高性能的 PC、工作站或小 型机,并采用大型数据库系统,如 Oracle、Sybase、InFORMix 或 SQL Server。 客户端需要安装专用的客户端软件。 B/S是 Brower/Server 的缩写,客户机上只要安装一个浏览器(Browser), 如 Netscape Navigator 或 Internet Explorer,服务器安装 Oracle、Sybase、 InFORMix 或 SQL Server 等数据库。在这种结构下,用户界面完全通过 WWW 浏览器实现,一部分事务逻辑在前端实现,但是主要事务逻辑在服务器端 不积跬步,无以至千里 讲师:BruceLiu 39 实现。浏览器通过Web Server 同数据库进行数据交互。 C/S 与 B/S 区别: 1.硬件环境不同: C/S 一般建立在专用的网络上, 小范围里的网络环境, 局域网之间再通 过专门服务器提供连接和数据交换服务. B/S 建立在广域网之上的, 不必是专门的网络硬件环境,例与电话上网, 租用设备. 信息自己管理. 有比 C/S 更强的适应范围, 一般只要有操作系 统和浏览器就行 2.对安全要求不同 C/S 一般面向相对固定的用户群, 对信息安全的控制能力很强. 一般高 度机密的信息系统采用 C/S 结构适宜. 可以通过 B/S 发布部分可公开信 息. B/S 建立在广域网之上, 对安全的控制能力相对弱, 可能面向不可知的 用户。 3.对程序架构不同 C/S 程序可以更加注重流程, 可以对权限多层次校验, 对系统运行速度 可以较少考虑. B/S 对安全以及访问速度的多重的考虑, 建立在需要更加优化的基础之 上. 比 C/S 有更高的要求 B/S 结构的程序架构是发展的趋势, 从 MS 的.Net 系列的 BizTalk 2000 Exchange 2000 等, 全面支持网络的构件搭建的系统. SUN 和 IBM 推的 JavaBean 构件技术等,使 B/S 更加成熟. 14.Ajax 的工作原理 ? 在会话的开始,浏览器加载 Ajax 引擎 请求动作通过 JavaScript 调用 Ajax 引擎来代替. 引擎负责绘制用户界面以及与服务器端通讯。 Ajax 引擎采用异步交互过程--不用等待服务器的通讯。 15. XMLHttpRequest 对象是什么,它有哪些常用方法? 一个 JavaScript 对象。是 Ajax 的核心。 该对象的方法和属性。 open():建立到服务器的新请求。 send():向服务器发送请求。 abort():退出当前请求。 readyState:提供当前 HTML 的就绪状态。 responseText:服务器返回的请求响应文本。. 不积跬步,无以至千里 讲师:BruceLiu 40 16. HTTP 常见的状态码 17. 数据库规范: 三大范式 第一范式的目标是确保每列都是不可再分的最小数据单元 第二范式每要求一个表只描述一件事情 第三范式要求表中各列必须和主键直接相关,不能间接相关 18.实体之间的关系: 一对一: 学生和学生证 一对多: 班级和学生 多对一: 学生和班级 多对多: 商品和订单 19.完整性约束: 实体完整性 域完整性 引用完整性 自定义完整性 不积跬步,无以至千里 讲师:BruceLiu 41 20.常用的端口 TomCat:8080 浏览器 Http:80 MySql:3306 Sqlerver:1433 Oracle:1521 21.Servlet 和 Jsp 的关系 JSP 是 Servlet 技术的扩展,本质上是 Servlet 的简易方式,更强调应用的外表表达。 JSP 编译后是"类 servlet"。 Servlet 和 JSP 最主要的不同点在于,Servlet 的应用逻辑是在 Java 文件中,并且完全从表 示层中的 HTML 里分离开来。 而 JSP 的情况是 Java 和 HTML 可以组合成一个扩展名为.jsp 的文件。 JSP 侧重于视图,Servlet 主要用于控制逻辑。 22.Orcale 中基本数据类型 Oracle 的基本数据类型(常用): 1、字符型 Char 固定长度字符串 占 2000 个字节 Varchar2 可变长度字符串 占 4000 个字节 Nvarchar2 占 2000 个字符(最多能存 2000 个字母/中文) 2、大对象型(lob) Blob :二进制数据 最大长度 4G Blob 用于存一些图片,视频,文件。 Clob :字符数据 最大长度 4G,可以存大字符串 不积跬步,无以至千里 讲师:BruceLiu 42 3、数值型 Integer 整数类型,小的整数。 Float 浮点数类型。 Number(p,s)包含小数位的数值类型。P 表示精度,s 表示小数后的位数。 Eg: number(10,2) 表示小数点之前可有 8 位数字,小数点后有 2 位。 4、日期类型 Date 日期(日-月-年) DD-MM-YY(HH-MI-SS) Timestamp 跟 date 比 它可以精确到微秒。精确范围 0~9 默认为 6. 23. JDBC 访问数据库步骤: 不积跬步,无以至千里 讲师:BruceLiu 43 SqlServer 驱动类: MySql 驱动类: Oracle 驱动类: 不积跬步,无以至千里 讲师:BruceLiu 44 24.Ajax 总结 AJAX 全称:异步无刷新访问技术 Ajax 的核心是 JavaScript 对象 XmlHttpRequest(XHR)。 Ajax 的优点: 1.提高用户体验度(UE) 2.提高应用程序的性能 3.进行局部刷新 通常会使用 Jquery 进行封装,使用其他起来更方便。 25.Json(JavaScript Object Notation)描述 A.一种轻量级的数据交换格式 B. 通常用于在客户端和服务器之间传递数据 优点: 轻量级交互语言 结构简单 易于解析 26.如何解决 Port 8080 is already is use 的问题 在开发工程中常常会遇到 Port 8080 is already is use 异常,然后 web server 不能 启动,这是因为已经有其他程序或者进程占用了相应的端口,解决这个问题就要找出到底是 哪个程序占用了这个端口,然后关掉那个程序或者杀掉那个进程就可以了。解决的步骤如下: 1. 打开一个命令窗口,执行 netstat-a -o 命令 2. 找到占用那个端口的程序,找到它的 pid 3. 打开任务管理器,根据 pid 找到它的进程,杀掉这个进程 不积跬步,无以至千里 讲师:BruceLiu 45 4. 重新启动或者运行你的服务或者程序你就会发现这个异常没有了 27.innerText 和 innerHtml 的区别 innerText:获取或者设置一个标签中的内容,该内容只能是文本 innerHtml:获取或者设置一个标签中的内容,该内容可以是文本和标签 text() 和 html() 是 Jquery 中方法,效果一样的 28.$(document).ready() 是个什么函数?为什么要用它? ready() 函数用于在文档进入 ready 状态时执行代码。当 DOM 完全加载(例如 HTML 被 完 全 解 析 DOM 树 构 建 完 成 时 ), jQuery 允 许 你 执 行 代 码 。 使 用 $(document).ready()的最大好处在于它适用于所有浏览器,jQuery 帮你解决了跨浏 览器的难题。 29.JavaScript window.onload 事件和 jQuery ready 函 数有何不同 30.Jquery 中有哪几种常用类型的选择器? 基本选择器:直接根据 id、css 类名、元素名返回匹配的 dom 元素。 层次选择器:也叫做路径选择器,可以根据路径层次来选择相应的 DOM 元素。 不积跬步,无以至千里 讲师:BruceLiu 46 过滤选择器:在前面的基础上过滤相关条件,得到匹配的 dom 元素。 属性选择器 31.Jquery 中如何实现节点遍历? 32.Jquery 中实现 Ajax 语法? AJAX 全称:异步无刷新访问技术 Ajax 的核心是 JavaScript 对象 XmlHttpRequest(XHR)。 Ajax 的优点: 1.提高用户体验度(UE) 2.提高应用程序的性能 3.进行局部刷新 通常会使用 Jquery 进行封装,使用其他起来更方便。 33.Js 和 Jquery 的关系 JS:是 JavaScript 的简称 不积跬步,无以至千里 讲师:BruceLiu 47 Jquery 是一个轻量级的 JS 框架,使用起来灵活,兼容强,有很丰富的插件 例如:JqueryUI,开发起来更加的方便。 34.常见的应用服务器有那些? BEA WebLogic Server,IBM WebSphere,jBoss,Tomcat 等 35.MODEL1 和 MODEL2 注: Model1 是最早的能体现分层思想的一种开发模式,简单来说 Model1 就是一种 Jsp+JavaBean 的一种开发模式。 缺点:可维护性和可扩展性是比较差的。 不积跬步,无以至千里 讲师:BruceLiu 48 思路: ①首先由 Jsp 页面向 Servlet 提交一个请求。 ②然后在我们的控制层 Servlet 实例化一个模型层的对象或者调用模型层的一些功能。 ③然后由模型层来访问读取我们的数据库层。 ④当得到读取到结果后,再将结果返回到我们的控制层。 ⑤控制层得到这个结果后,会根据这个结果给用户展示不同的 Jsp 页面。 三.框架部分 1. IOC 的概念 控制反转(Inversion of Control,英文缩写为 IOC) 是一个重要的 面向对象编程 的法则 来消减计算机程序的偶和问题,也是轻量级的 Spring 框架 的核心。控制反转一般分为两 种类型,依赖注入 和 依赖查找。 依赖注入应用比较广泛 2.注入的三种方式 (1)接口注入 (2)set 注入 调用对象的 set 方法给属性赋值,调用的是无参数的构造方法创建对象。 (3)构造注入 Spring 容器调用指定的构造方法,给对象属性赋值。 3 MyBatis 的缓存机制 提供了一级缓存和二级缓存 一级缓存:基于 PerpetualCache 的 HashMap 本地缓存,其存储作用域为 Session,当 Session flush 或 close 之后,该 Session 中的所有 Cache 就将清空。二级缓存与一级缓存 及至相同,默认也是采用 PerpetualCache,HashMap 存储,不同在于其存储作用域为 Mapper(Namespace),并且可定义第三方存储源,如 Ehcache 框架等。 对于缓存数据更新机制,当某一个作用域(一级缓存 Session/二级缓存 Namespace) 进行了 C/U/D 操作后,默认该作用域下所有 select 中的缓存将被 clear。 MyBatis 中一级缓存是默认开启的,即在查询中(一次 SqlSession 中)。只要当SqlSession 不关闭,那么你的操作会默认存储使用一级缓存。 不积跬步,无以至千里 讲师:BruceLiu 49 4.解释 Spring 支持的几种 bean 的作用域 Spring 框架支持以下五种 bean 的作用域: singleton : bean 在每个 Spring ioc 容器中只有一个实例。 prototype:一个 bean 的定义可以有多个实例。 request:每次 http 请求都会创建一个 bean,该作用域仅在基于 web 的 Spring ApplicationContext 情形下有效。 session:在一个 HTTP Session 中,一个 bean 定义对应一个实例。该作用域仅在基 于 web 的 Spring ApplicationContext 情形下有效。 global-session:在一个全局的 HTTP Session 中,一个 bean 定义对应一个实例。该 作用域仅在基于 web 的 Spring ApplicationContext 情形下有效。 缺省的 Spring bean 的作用域是 Singleton 5.在 Spring 中如何注入一个 java 集合 Spring 提供以下几种集合的配置元素: 类型用于注入一列值,允许有相同的值。 类型用于注入一组值,不允许有相同的值。 类型用于注入一组键值对,键和值都可以为任意类型。 类型用于注入一组键值对,键和值都只能为 String 类型。 6.动态代理设计模式 动态代理类是一个在运行时由开发人员所指定的一列接口的实现。动态代理接口是一种 由代理类实现的接口,并且是一个 java.lang.reflect.Proxy 类的实例。每一个代理实例 都与一个调用处理器对象相联,这个调用处理器实现了 java.lang.reflect.InvocationHandler 接口。在代理实例上的一个方法调用是通过其中 之一的代理接口被转发到与这个代理实例相联的调用处理的 invoke 方法上。一个 java.lang.reflect.Method 对象会决定那一个方法会被调用,一个类型为 java.lang.Object 的数组包含调用的参数。调用处理器会适当地解码方法的调用 (encoded method invocation as appropriate),并且它(调用处理器)的返回结 果被作为在代理实例上方法调用返回的结果而返回。 7. Spring 中通知的类型 通知是个在方法执行前或执行后要做的动作,实际上是程序执行时要通过 SpringAOP 框架触发的代码段。 不积跬步,无以至千里 讲师:BruceLiu 50 Spring 切面可以应用五种类型的通知: before:前置通知,在一个方法执行前被调用。 after: 在方法执行之后调用的通知,无论方法执行是否成功。 after-returning: 仅当方法成功完成后执行的通知。 after-throwing: 在方法抛出异常退出时执行的通知。 around: 在方法执行之前和之后调用的通知。 8.Hibernate 框架工作原理 Hibernate 是一个开放源代码的对象关系映射(ORM)框架,它对 JDBC 进行了非常轻 量级的对象封装,使得 java 程序员可以随心所欲的使用对象编程思维来操纵数据库。 工作原理: 1.读取并解析配置文件 2.读取并解析映射信息,创建 SessionFactory 3.打开 Sesssion 4.创建事务 Transation 5.持久化操作 6.提交事务 7.关闭 Session 8.关闭 SesstionFactory Hibernate 的优点有: 1. 对 JDBC 访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。 2. Hibernate 是一个基于 JDBC 的主流持久化框架,是一个优秀的 ORM 实现。他很大 程度的简化 DAO 层的编码工作 3、 Hibernate 使用 Java 反射机制而不是字节码增强程序来实现透明性。 4、 Hibernate 的性能好,映射的灵活性比较出色。它支持各种关系数据库,从一对 一到多对多的各种复杂关系。 hibernate 的核心类有: Configuration、SessionFactory 、Session 。 9. Hibernate 对象的三种状态是什么 瞬时态:一个 Java 对象创建之后,还没新增到数据库之前的状态 特点: (1) 不和 Session 实例关联 (2) 在数据库中没有和瞬时对象关联的记录 持久态:当调用 save()或者是 saveOrUpdate()方法之后的状态,保存到数据库的状 态 不积跬步,无以至千里 讲师:BruceLiu 51 特点: (1) 和 Session 实例关联 (2) 在数据库中有和持久对象关联的记录 游离态:当调用 session 的 Close 方法或者清空 session 之后对象的状态 特点: (1) 本质上和瞬时对象相同 (2) 只是比瞬时对象多了一个数据库记录标识值 id. 10. Hibernate 对象的三种状态如何转换的 1.瞬时对象转为持久对象: (1) 通过 Session 的 save() 和 saveOrUpdate() 方法把一个瞬时对象与数据 库相关联,这个瞬时对象就成为持久化对象。 (2) 使用 fine(),get(),load() 和 iterater() 方法查询到的数据对象,将成为持久化 对象。 2.持久对象转为脱管对象: (1)当执行 close() 或 clear(),evict() 之后,持久对象会变为脱管对象。 3. 脱管对象转为持久对象: (1)通过 Session 的 update(),saveOrUpdate() 和 lock() 等方法,把脱管对象 变为持久对象。 不积跬步,无以至千里 讲师:BruceLiu 52 11.Hibernate 分页怎样实现? 12. 对象关系映射(Object Relational Mapping,简称 ORM) ORM 是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。简单的说, ORM 是通过使用描述对象和数据库之间映射的元数据,将 java 程序中的对象自动持 久化到关系数据库中。本质上就是将数据从一种形式转换到另外一种形式。 Why ORM? 面向对象的开发方法是当今企业级应用开发环境中的主流开发方法。常见的 ORM 框架 有:Hibernate,MyBatis 等 13.hibernate 拒绝连接、服务器崩溃的原因?最少写 5 个 1. db 没有打开 2. 网络连接可能出了问题 3. 连接配置错了 4. 驱动的 driver,url 是否都写对了 5. LIB 下加入相应驱动,数据连接代码是否有误 6. 数据库配置可能有问题 不积跬步,无以至千里 讲师:BruceLiu 53 7. 当前联接太多了,服务器都有访问人数限制的 8. 服务器的相应端口没有开,即它不提供相应的服务 14.MyBatis 与 Hibernate 有什么不同? 相同点:屏蔽 jdbc api 的底层访问细节,使用我们不用与 jdbc api 打交道,就可以访 问数据。 jdbc api 编程流程固定,还将 sql 语句与 java 代码混杂在了一起,经常需要拼凑 sql 语句,细节很繁琐。 Mybatis 的好处:屏蔽 jdbc api 的底层访问细节;将 sql 语句与 java 代码进行分离; 提供了将结果集自动封装称为实体对象和对象的集合的功能,queryForList 返回对象 集合,用 queryForObject 返回单个对象;提供了自动将实体对象的属性传递给 sql 语句的参数。 Hibernate 是一个全自动的 orm 映射工具,它可以自动生成 sql 语句, Mybatis 需要我 们自己在 xml 配置文件中写 sql 语句,hibernate 要比 Mybatis 功能负责和强大很多。 因为 hibernate 自动生成 sql 语句,我们无法控制该语句,我们就无法去写特定的高效 率的 sql。对于一些不太复杂的 sql 查询,hibernate 可以很好帮我们完成,但是,对 于特别复杂的查询,hibernate 就很难适应了,这时候用 Mybatis 就是不错的选择, 因为 ibatis 还是由我们自己写 sql 语句。 13. 描述 Struts2 框架(工作原理) A.Struts2 是一个典型的 MVC 前端的框架,它是以 WebWork 为核心。 B.tomcat 启动的时候会加载 web.xml 、核心控制器 FilterDispatcher 会加载 并解析 struts.xml C.客户端会发送一个请求到 action 、FilterDispatcher 会根据后缀名进行拦截 D.FilterDispatcher 根据 struts.xml 的配置文件信息 找到 某个 action 对应的 某个类里的指定方法 E.执行相关的业务逻辑最后返回 一个 String F. 里配置 name 的属性值与返回的 String 进行匹配,跳转到 指定的 jsp 页面 不积跬步,无以至千里 讲师:BruceLiu 54 15.Struts2 中 result 中的 type 类型 1.dispatcher:默认的,用来转发到页面,通常处理 JSP 2.redirect:将用户重定向到一个已配置好的 URL 3.redirectAction:将用户重定向到一个已定义好的 action 4.chain:将 action 和另外一个 action 链接起来,转发到 Action 5. tream:向浏览器发送 InputSream 对象对下载的内容和图片非常有用 6. json:Ajax 返回 Json 格式数据(extends json-default) 16.Struts2 中访问 ServletAPI 三种方式: 与 Servlet API 解耦的访问方式(推荐) 与 Servlet API 耦合的访问方式(不推荐) 实现特定接口的方式,向框架注入 ServletAPI 不积跬步,无以至千里 讲师:BruceLiu 55 17.struts2 框架的核心控制器是什么?它有什么作用? Struts2 框架的核心控制器是 StrutsPrepareAndExecuteFilter。 作用: 负责拦截由/*指定的所有用户请求,当用户请求到达时, 该 Filter 会过滤用户的请求。默认情况下,如果用户请求的路径 不带后缀或者后缀以.action 结尾,这时请求将被转入 struts2 框架处理,否则 struts2 框架 将略过该请求的处理。 18.Hibernate 中 get 和 load 之间的区别(重点): 相同点: 都可以根据 ID 查询一个对象 不同点: 加载方式不同: >当 lazy=true 时,代表是懒加载, get 和 load 之间就有区别 get 不管查询出来的对象是否被使用,都会立即发送 SQL 语句 load 如果查询出来的对象没有被使用,就不会立即发送 SQL 语句,等需要 用该对象的时候,才会发送 SQL >当 lazy=false 时,代表含义是立即加载,get 和 load 都会立即发送 SQL 返回结果: >load 检索不到记录时,会抛 ObjectNotFoundException 异常 不积跬步,无以至千里 讲师:BruceLiu 56 >get 检索不到记录时,会返回 null 19.Hibernate 缓存概述 一级缓存(session 级别缓存),也叫事务级别的缓存 二级缓存(sessionFactory 缓存),也叫应用级缓存 三级缓存(查询缓存) 一级缓存的生命周期和 session 的生命周期保持一致,hibernate 默认就启用了一 级缓存,不能将其关闭,可以通过 session.clear()和 session.evict(object)来管理 一级缓存。其中 get,load,iterate 都会使用一级缓存,一级缓存缓存的是对象。一 级缓存只查询主键时有用。 二级缓存的生命周期和 sessionFactory 的生命周期保持一致,可以跨 session,被 多个 session 共享,可以手动开启并指定缓存插件如 ehcache,oscache 等。二级 缓存也只能缓存对象。二级缓存只查询主键时有用。 三级缓存也叫查询缓存,查询缓存依赖二级缓存,所以在使用查询缓存之前配置好 二级缓存。可以指定条件缓存 20.Hibernate 核心类或接口 1 .Configuration 接口 对 Hibernate 进行配置,以及对它进行启动。(加载 hibernate.cfg.xml) 并创建一个 SessionFactory 对象。 2 .SessionFactory 接口 SessionFactory 接口负责初始化 Hibernate。它充当数据存储源的代理, 并负责创建 Session 对象。SessionFactory 是线程安全的。 3 .Session 接口 Session(会话)接口是 Hibernate 应用使用的主要接口。Session 接口 负责执行被持久化对象的 CRUD 操作(增删改查)。Session 对象是非线程安全的。 Session 相当于 jdbc 的 connection。 4 .Query 接口 总之 Query 接口负责执行各种数据库查询。它可以使用 HQL 语句或 SQL 语句两种表达方式。 5 .Transaction 接口 Transaction(事务)接口是一个可选的 API。负责操作相关的事务 不积跬步,无以至千里 讲师:BruceLiu 57 20.Hibernate 配置文件中 CASECADE 属性作用: 配置对象之间的级联操作: None:不级联 Save-update:保存或者更新的时候,级联操作 Delete:删除的时候级联操作 All:保存,更新或者删除都级联操作 21.Hibernate 配置文件中 inverse 属性作用: 作用:由谁来控制关联关系的自动维护 配置在节点上面: inverse=“true”代表被动方,由关联的对象来维护他们之间的关联 关系 22. Open Session In View 模式 主要思想是:在用户的每一次请求过程始终保持一个 Session 对象打开着 不积跬步,无以至千里 讲师:BruceLiu 58 Spring 和 Hibernate 集成的配置方式: 23. Struts1 和 Struts2 关系: Struts2==(Struts1+WebWork) 24. 简述 MyBatis 框架 Mybatis 和 Hibernate 一样,是一款开源的 ORM 框架的技术。 Mybatis 的机制原理: ①Mybatis 支持普通的 SQL 查询、存储过程和高级映射的持久层框架。 ②Mybatis将大量的SQL语句从程序里面剖离出来,配置在配置文件中, 实现 SQL 的灵活配置。 25.Spring 中用到的设计模式  工厂模式:IOC 容器  代理模式:AOP  策略模式:在 spring 采取动态代理时,根据代理的类有无实现接口有 JDK 和 CGLIB 两种代理方式,就是采用策略模式实现的  单例模式:默认情况下 spring 中的 bean 只存在一个实例 不积跬步,无以至千里 讲师:BruceLiu 59 26.什么是 bean 自动装配? Spring 容器可以自动配置相互协作 beans 之间的关联关系。这意味着 Spring 可以自动配置一个 bean 和其他协作 bean 之间的关系,通过检查 BeanFactory 的内容里没有使用和< property>元素。 27.解释自动装配的各种模式? 自动装配提供五种不同的模式供 Spring 容器用来自动装配 beans 之间的依赖注 入: no:默认的方式是不进行自动装配,通过手工设置 ref 属性来进行装配 bean。 byName:通过参数名自动装配,Spring 容器查找 beans 的属性,这些 beans 在 XML 配置文件中被设置为 byName。之后容器试图匹配、装配和该 bean 的 属性具有相同名字的 bean。 byType:通过参数的数据类型自动自动装配,Spring 容器查找 beans 的属性, 这些 beans 在 XML 配置文件中被设置为 byType。之后容器试图匹配和装配和 该 bean 的属性类型一样的 bean。如果有多个 bean 符合条件,则抛出错误。 constructor:这个同 byType 类似,不过是应用于构造函数的参数。如果在 BeanFactory 中不是恰好有一个 bean 与构造函数参数相同类型,则抛出一个严 重的错误。 autodetect:如果有默认的构造方法,通过 construct 的方式自动装配,否则 使用 byType 的方式自动装配。 28.自动装配有哪些局限性? 自动装配有如下局限性: 重写:你仍然需要使用 和< property>设置指明依赖,这意味着总要重写自动 装配。 不积跬步,无以至千里 讲师:BruceLiu 60 原生数据类型:你不能自动装配简单的属性,如原生类型、字符串和类。 模糊特性:自动装配总是没有自定义装配精确,因此,如果可能尽量使用自定义 装配。 四.数据库部分 1.分页语句 MySQL 和 Oracle MySQL 数据库: select * from t order by id limit 30,10 Oracle 数据库: 在ORACLE大数据量下的分页解决方法。一般用截取ID方法,还有是三层嵌套方法。 截取 ID 的方法 select * from emp a, (select empno,rownum as num from emp)b where a.empno=b.empno and b.num between 5 and 7; 三层嵌套 SELECT * FROM ( SELECT A.*, rownum r FROM ( SELECT * FROM emp ) A WHERE rownum <=7 ) B WHERE r >5; 2.join 与 left join 的区别: inner join(等值连接) 只返回两个表中联结字段相等的行 left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录 right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录 3.SQL 中 where 和 having 的区别 “Where” 是一个约束声明,使用 Where 来约束来之数据库的数据,Where 是在结 果返回之前起作用的。 “Having”是一个过滤声明,having 是对分组之后的结果筛选 4.数据库三范式 第一范式( 1NF)的目标:确保每列的原子性。 第二范式( 2NF)的目标:确保表中的每列,都和主键相关 不积跬步,无以至千里 讲师:BruceLiu 61 第三范式( 3NF)的目标:确保每列都和主键列直接相关,而不是间接相关 符合数据库三范式设计原则的数据库,可消除数据冗余、更新异常、插入异 常和删除异常。 5.说出你用过的常见的关系型数据库,非关系型数据库知道 哪些? 关系型 1.Oracle 2.SQL Server 3.mysql 4.DB2 非关系型 1. Redis 2.mongodb 五.程序算法 1.杨辉三角 /* * 杨辉三角 */ public class YanghuiTriangle { public static void main(String[] args) { int i, j, n = 8, l, r; int a[] = new int[9]; System.out.println(1); for (i = 1; i <= n; i++) { l = 1; System.out.print(1 + " "); for (j = 1; j <= i; j++) { r = a[j]; a[j] = l + r; /* 每个数是上面两数之和 */ l = r; System.out.print(a[j] + " "); } System.out.println(); } } } 不积跬步,无以至千里 讲师:BruceLiu 62 2.写一个函数计算当参数为 N 的值:1-2+3-4+5-6+7……+N public class Demo { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.print("请输入数字n:"); int n = input.nextInt(); int sum = 0; String msg = ""; for (int i = 1; i <= n; i++) { int k = i; if (i % 2 == 0) { k = -k; } sum = sum + k; if(k>1){ msg = msg+"+"+k; }else{ msg = msg+k; } } System.out.println(msg + "=" + sum); } } 不积跬步,无以至千里 讲师:BruceLiu 63 3.在 A B C D E F 六人中随机抽取 3 人中奖,要求中奖人不 能重复 public class Demo1 { public static void main(String[] args) { List list = new ArrayList(); for (Chari = 'A'; i <= 'F'; i++) { list.add("" + i); } for (int k = 0; k < 3; k++) { int d = (int) (Math.random() * (6 - k)); System.out.println(list.remove(d)); } } } 六.其他 1.经常访问的技术网站: csdn(详细步骤的描述) iteye(详细步骤的描述) oschina(开源中国获取 java 开源方面的信息技术) java 开源大全 www.open-open.com(获取 java 开源方面的信息技术) infoq(对 java,php,.net 等这些语言的一些最新消息的报道) cnblog(博客园) 2.项目团队中交流的工具: 飞秋(局域网) qq(局域网,外网) RTX(局域网,外网) 邮箱 (局域网,外网) 不积跬步,无以至千里 讲师:BruceLiu 64 3.平时浏览的书籍:  思想基础:  Java 编程思想  大话设计模式  重构  实战经验:  *** in action(实战)  *** 深入浅出  *** 入门指南 …… 4.OSI 七层模型 应用层:与其他计算机进行通讯的一个应用,它是对应应用程序的通信服务的。示例: telnet,HTTP,FTP,WWW,NFS,SMTP 等。 表示层:这一层的主要功能是定义数据格式及加密。示例:加密,ASII 等。 会话层:他定义了如何开始、控制和结束一个会话,包括对多个双向小时的控制和管理, 以便在只完成连续消息的一部分时可以通知应用,从而使表示层看到的数据是连续的。 示例:RPC,SQL 等。 传输层:这层的功能包括是否选择差错恢复协议还是无差错恢复协议,及在同一主机上 对不同应用的数据流的输入进行复用,还包括对收到的顺序不对的数据包的重新排序功 能。示例:TCP,UDP,SPX。 网络层:这层对端到端的包传输进行定义,他定义了能够标识所有结点的逻辑地址,还 定义了路由实现的方式和学习的方式。。示例:IP,IPX 等。 数据链路层:他定义了在单个链路上如何传输数据。 物理层:OSI 的物理层规范是有关传输介质的特性标准,这些规范通常也参考了其他组 织制定的标准。 5.项目的生命周期 1.需求分析 2.概要设计 3.详细设计(用例图,流程图,类图) 4.数据库设计(powerdesigner) 5.代码开发(编写) 6.单元测试(junit 白盒测试)(开发人员) svn 版本管理工具(提交,更新代码,文档) 不积跬步,无以至千里 讲师:BruceLiu 65 7.集成测试 (黑盒测试,loadrunner(编写测试脚本)(高级测试)) 8.上线试运行 (用户自己体验) 9.压力测试(loadrunner) 10.正式上线 11.维护 6.什么是典型的软件三层结构?软件设计为什么要分层?软件 分层有什么好处? Presentation layer(表示层) (1) 表示逻辑(生成界面代码) (2) 接收请求 (3) 处理业务层抛出的异常 (4) 负责规则验证(数据格式,数据非空等) Service layer(服务层/业务层) (1) 封装业务逻辑处理,并且对外暴露接口 (2) 负责事务,安全等服务 Persistence layer(持久层) (1) 封装数据访问的逻辑,暴露接口 (2) 提供方便的数据访问的方案(查询语言,API,映射机制等) Domain layer(域层) (1) 业务对象以及业务关系的表示 (2) 处理简单的业务逻辑 (3) 域层的对象可以穿越表示层,业务层,持久层 软件分层结构使得代码维护非常方便,设计明确,各层独立,专注自己擅长的领域。 7.一个 J2EE 项目团队的主要人员组成是什么? Technical architect 技术架构师 Project manager 项目经理 Business analyst 业务分析师 Layout designer UI 设计师 Presentation-tier developer Web 工程师 Business logic developer 后台开发人员 Data modeler 数据建模师 Database administrator 不积跬步,无以至千里 讲师:BruceLiu 66 Data migration specialist 数据迁移专家 Infrastructure specialist Testing specialist 测试人员 8.什么是 UML? UML 是统一建模语言(UML 是 Unified Modeling Language 的缩写)是用来对 软件密集系统进行可视化建模的一种语言。UML 为面向对象开发系统的产品进行说明、可 视化、和编制文档的一种标准语言。 统一建模语言 (UML)是非专利的第三代建模和规约语言。 UML 是在开发阶段,说明, 可视化,构建和书写一个面向对象软件密集系统的制品的开放方法。UML 展现了一系列最 佳工程实践,这些最佳实践在对大规模,复杂系统进行建模方面,特别是在软件架构层次已 经被验证有效。 UML 可以贯穿软件开发周期中的每一个阶段。被 OMG 采纳作为业界的标准。 UML 最适于数据建模,业务建模,对象建模,组件建模。 UML 作为一种模型语言,它使开发人员专注于建立产品的模型和结构,而不是选用什么 程序语言和算法实现。当模型建立之后,模型可以被UML 工具转化成指定的程序语言代码。 IBM 的 Rational Rose 和 MS 的 Visio 都是 UML 工具。 9.JUnit 单元测试 JUnit 是一套基于测试驱动开发的测试框架。 注: 不积跬步,无以至千里 讲师:BruceLiu 67 JUnit4 不需要继承 junit.framework.TestCase 类。 JUnit3 中所有的方法都必须使用@Test 注解,并且需要在方法名前加 test 作为前缀,需要 继承 junit.framework.TestCase 类。 10.版本管理工具 SVN SVN 是一个开放源代码的版本控制系统。 举个例子: ①个人的代码→口袋里的钱 ②版本控制工具中的代码→卡里的钱 ③版本控制工具中的客户端→卡 ④版本控制工具中的服务端→刷卡机 注:在实际版本管理当中,你所写的代码,需要提交给服务端,然后别人要修改你的代码, 就会从服务端更新当前目录下的代码,再进行修改和提交。所以,“卡里的钱”可以理解 为团队公有的代码体系。 11.项目管理工具 maven maven 是基于项目对象模型(POM),可以通过一小段描述信息来管理项目的构建、 报告和文档的软件项目管理工具。 注: maven 也是一套强大的自动化的管理工具,覆盖了编译、测试、运行、清理、打包和部署, 整个项目构建的周期。 它还提供了一个仓库的概念,统一的帮助开发人员管理项目所依赖的第三方的架包,最大可 能的避免环境配置不同所产生的问题(在你的电脑上能运行,在我的电脑上就不能运行)。
还剩67页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 15 金币 [ 分享pdf获得金币 ] 5 人已下载

下载pdf

pdf贡献者

chcyyt

贡献于2017-08-30

下载需要 15 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf