1.Mybatis中使用#和$书写占位符又什么区别:
#将传入的数据都当成一个字符串,会对传入的数据自动加上引号;
$将传入的数据直接显示生成在SQL中
注意:使用 $ 占位符可能会导致SQL注入攻击,能用#的地方就不要使用 $
写order by 子句的时候应该用 $ 而不是#
2.解释一下mybatis中命名空间namespaces的作用:
在MyBatis中,可以为每个映射文件起一个唯一的命名空间,这样定义在这个映射文件中的每个SQL语句就成了定义在
这个命名空间中的一个ID。只要我们能够保证每个命名空间中这个ID是唯一的,即使在不同映射文件中的语句ID相同,
也不会再产生冲突了。
3.spring中bean的作用域有哪些?
singleton:单例模式,在整个Spring IoC容器中,使用singleton定义的Bean将只有一个实例
prototype:原型模式,每次通过容器的getBean方法获取prototype定义的Bean时,都将产生一个新的Bean实例
request:对于每次HTTP请求,使用request定义的Bean都将产生一个新实例,即每次HTTP请求将会产生不同的Bean实例。只有在Web应用中使用Spring时,该作用域才有效
session:对于每次HTTP Session,使用session定义的Bean都将产生一个新实例。同样只有在Web应用中使用Spring时,该作用域才有效
globalsession:每个全局的HTTP Session,使用session定义的Bean都将产生一个新实例。典型情况下,仅在使用portlet context的时候有效。同样只有在Web应用中使用Spring时,该作用域才会有效
4.sping中的自动装配方式有哪些?
no —— 默认情况,自动装配方式为手动装配,即通过ref手动设定
byName —— 根据属性名称自动装配,如果一个bean的名称和其他bean属性一致,则进行自动装配
byType——按照数据类型进行自动装配,如果一个bean的名称和其他bean的属性的数据类型一致,则进行兼容并自动装配
constructor ——通过构造函数参数的byType方式。
autodetect —— 如果找到默认的构造函数,使用“自动装配用构造”; 否则,使用“按类型自动装配”。(已经遗弃了)
5.final,finally,finalize的区别
final声明的属性、方法和类,属性不可变,方法不能被覆盖,类不能被继承
finally表示异常处理的一部分,表示总是被执行
finalize是object类的一个方法
6.构造器constructor是否可以被override?
构造器不能被继承,因此不能被重写override,但可以被重载overload
7.是否可以从一个静态方法内部发出对非静态方法的调用
不可以,非静态方法是要与对象关联在一起的,必须创建一个对象才能被调用,静态方法调用方法时不需要创建对象,可以之间调用
8.现有五名学生,其学生学号分别为11,22,33,44,55请用一条sql语句实现列出这五名学生的数学成绩及姓名,学生地址,电话号码。
SELECT cust.Studentno,cust.Name,cust.Address,cust.Telno,mark.math FROM cust,mark WHERE cust.Studentno=mark.studentno and (cust.Studentno=11 or cust.Studentno=22 or cust.Studentno=33 or cust.Studentno=44 or cust.Studentno=55);
9.jsp有哪些动作,分别是什么?
JSP共有以下6种基本动作
jsp:include:在页面被请求的时候引入一个文件。
jsp:useBean:寻找或者实例化一个JavaBean。
jsp:setProperty:设置JavaBean的属性。
jsp:getProperty:输出某个JavaBean的属性。
jsp:forward:把请求转到一个新的页面。
jsp:plugin:根据浏览器类型为Java插件生成OBJECT或EMBED标记
10.Stringbuffer String Stringbuilder的区别?
Stringbuffer线程安全,每次操作字符串,String 都会创建一个新对象,而Stringbuffer不会,Stringbuilder线程不安全
11.简述一下Spring的核心思想
(1)IOC(控制反转) 实现将组件间的关系从程序内部提到外部容器(spring的xml)来管理。 首先外部容器(spring.xml)中会动态的注册业务所需的对象(接口/类)
(2)DI(依赖注入) 组件之间的依赖关系由容器在应用系统运行期来决定, 也就是由容器动态地将某种依赖关系的目标对象实例注入到应用系统中的各个关联的组件之中
(3) AOP(面向切面编程) 利用一种称为"横切"的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其命名为"Aspect",即切面。所谓"切面",简单说就是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性。使用"横切"技术,AOP把软件系统分为两个部分:核心关注点和横切关注点。业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处基本相似,比如权限认证、日志、事物。AOP的作用在于分离系统中的各种关注点,将核心关注点和横切关注点分离开来。
12.jsp和servlet的相同点与不同点,他们之间的联系是什么?
JSP是Servlet技术的扩展,本质上是Servlet的简易方式,更强调应用的外表表达。JSP编译后是"类servlet"。
Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。JSP侧重于视图,Servlet主要用于控制逻辑。
13.java语言的特点:
(1)简单性 Java是个精简的系统,无需强大的硬件环境便可以很好地运行。Java的风格和语法类似于C++,因此,C++程序员可以很快就掌握Java编程技术。Java摒弃了C++中容易引发程序错误的地方,如多重继承、运算符重载、指针和内存管理等,Java语言具有支持多线程、自动垃圾收集和采用引用等特性。Java提供了丰富的类库,方便用户迅速掌握Java。
(2)面向对象 面向对象可以说是Java最基本的特性。Java语言的设计完全是面向对象的,它不支持类似C语言那样的面向过程的程序设计技术。所有的Java程序和applet均是对象,Java支持静态和动态风格的代码继承及重用。
(3)分布式 Java包括一个支持HTTP和FTP等基于TCP/IP协议的子库。因此,Java应用程序可凭借URL打开并访问网络上的对象,就像访问本地文件一样简单方便。Java的分布性为实现在分布环境尤其是Internet下实现动态内容提供了技术途径。
(4)健壮性 Java是一种强类型语言,它在编译和运行时要进行大量的类型检查。类型检查帮助检查出许多开发早期出现的错误。Java自已操纵内存减少了内存出错的可能性。Java的数组并非采用指针实现,从而避免了数组越界的可能。Java通过自动垃圾收集器避免了许多由于内存管理而造成的错误。Java在程序中由于不采用指针来访问内存单元,从而也避免了许多错误发生的可能。
(5)结构中立 作为一种网络语言,Java编译器将Java源程序编译成一种与体系结构无关的中间文件格式。只要有Java运行系统的机器都能执行这种中间代码。从而使同一版本的应用程序可以运行在不同的平台上。
(6)安全性 作为网络语言,安全是非常重要的。Java的安全性可从两个方面得到保证。一方面,在Java语言里,象指针和释放内存等C++功能被删除,避免了非法内存操作。另一方面,当Java用来创建浏览器时,语言功能和一类浏览器本身提供的功能结合起来,使它更安全。Java语言在你的机器上执行前,要经过很多次的测试。它经过代码校验,检查代码段的格式,检测指针操作,对象操作是否过分以及试图改变一个对象的类型。另外,Java拥有多个层次的互锁保护措施,能有效地防止病毒的入侵和破坏行为的发生。
(7)可移植 Java与体系结构无关的特性使得Java应用程序可以在配备了Java解释器和运行环境的任何计算机系统上运行,这成为Java应用软件便于移植的良好基础。但仅仅如此还不够。如果基本数据类型设计依赖于具体实现,也将为程序的移植带来很大不便。Java通过定义独立于平台的基本数据类型及其运算,使Java数据得以在任何硬件平台上保持一致,这也体现了Java语言的可移植性。还有Java编译器本身就是用Java语言编写的,Java运算系统的编制依据POSIX方便移植的限制,用ANSIC语言写成,Java语言规范中也没有任何“同具体实现相关”的内容,这说明Java本身也具有可移植性。同时Java语言的类库也具有可移植性。
(8)解释的 Java解释器(运行系统)能直接对Java字节码进行解释执行。链接程序通常比编译程序所需资源少。
(9)高性能 虽然Java是解释执行程序,但它具有非常高的性能。另外,Java可以在运行时直接将目标代码翻译成机器指令。
(10)多线程 线程有时也称小进程,是一个大进程里分出来的小的独立运行的基本单位。Java提供的多线程功能使得在一个程序里可同时执行多个小任务,即同时进行不同的操作或处理不同的事件。多线程带来的更大的好处是具有更好的网上交互性能和实时控制性能,尤其是实现多媒体功能。
(11)动态性 Java的动态特性是其面向对象设计方法的扩展。它允许程序动态地装入运行过程中所需要的类,而不影响使用这一类库的应用程序的执行,这是采用C++语言进行面向对象程序设计时所无法实现的
14.java异常的处理机制有哪些?
1. 异常机制
1.1 异常机制是指当程序出现错误后,程序如何处理。具体来说,异常机制提供了程序退出的安全通道。当出现错误后,程序执行的流程发生改变,程序的控制权转移到异常处理器。
1.2 传统的处理异常的办法是,函数返回一个特殊的结果来表示出现异常(通常这个特殊结果是大家约定俗称的),调用该函数的程序负责检查并分析函数返回的结果。这样做有如下的弊端:例如函数返回-1代表出现异常,但是如果函数确实要返回-1这个正确的值时就会出现混淆;可读性降低,将程序代码与处理异常的代码混爹在一起;由调用函数的程序来分析错误,这就要求客户程序员对库函数有很深的了解。
1.3 异常处理的流程
1.3.1 遇到错误,方法立即结束,并不返回一个值;同时,抛出一个异常对象
1.3.2 调用该方法的程序也不会继续执行下去,而是搜索一个可以处理该异常的异常处理器,并执行其中的代码
2 异常的分类
2.1 异常的分类
2.1.1 异常的继承结构:基类为Throwable,Error和Exception继承Throwable,RuntimeException和IOException等继承Exception,具体的RuntimeException继承RuntimeException。
2.1.2Error和RuntimeException及其子类成为未检查异常(unchecked),其它异常成为已检查异常(checked)。
15.java内存泄漏的原因
1.静态集合类像HashMap,Vector等的使用最容易出现内存泄漏,这些静态变量的周期和应用程序是一致的,所有的对象Object也不能被释放,因此他们一直被Vector等应用着。这种情况可以通过remove,clear方式释放对象。
2.数据库的链接没有关闭情况,也包括连接池没有连接数据库,如果没有关闭Resultset等也都可能出现内存泄漏的问题,这是代码中经常出现的问题
3.内部类和外部类的引用容易出现内存泄漏的情况;监听器的使用java中容易使用到监听器,在释放对象的同时没有相应的删除监听器的时候也容易出现内存泄漏的情况
16.java中局部变量和成员变量的区别
1.作用于不同:
局部变量的作用域仅限于定义它的方法
成员变量的作用域在整个类的内部都是可见的
2.初始值不同
JAVA会给成员变量一个初始值
JAVA不会给局部变量赋予初始值
3.在同一个方法中,不允许有同名局域变量
在不同方法中,可以有同名局域变量
4.两类变量同名时,局域变量具有更高的优先级
17.Spring的依赖注入的方式有哪几种,哪种方试建议使用
接口注入(不推荐)
getter,setter方式注入(比较常用)
构造器注入(死的应用)
18.在Spring中如何注入一个集合?
类型用于注入一列值,允许有相同的值。
类型用于注入一组值,不允许有相同的值。
类型用于注入一组键值对,键和值都可以为任意类型。
类型用于注入一组键值对,键和值都只能为String类型