Java面试指导

Java基础知识面试指导

资料来自极客学院的学习

初级JavaWeb面试准备
Java基础知识面试指导
Java面向对象面试指导
JSP面试指导
MySQL数据库基础知识面试指导
Servlet面试指导

Java基础知识必会知识点
Java关键字及功能
所有的Java关键字都是小写的
goto和const是保留关键字,在Java中没有使用
true,false,null不是严格意义上的关键字,而是字符常量(literals)
程序遇到return语句的时候,将不会执行finally语句
Java数据类型
8种基本类型byte、short、int、long、float、double、char、boolean
8中基本类型占用的字节长度

3种引用类型:类,接口,数组
8种基本数据类型对应的包装类,被final修饰,不可被继承
Integer 、Long、Short、Byte、Character、Double、Float、Boolean、BigInteger、BigDecmail
J2SE5.0后提供了自动装箱与拆箱的功能,所以需要通过包装类来转换
提供包装类: 是为了在各种类型间转化,通过各种方法的调用。否则你无法直接通过变量转化。
基本类型,同C++一样,Java采用了相似的做法,对于这些类型不是用new关键字来创建,而是直接将变量的值存储在堆栈中,因此更加高效

包装器类型:我们知道Java是一个面相对象的编程语言,基本类型并不具有对象的性质,为了让基本类型也具有对象的特征,就出现了包装类型(如我们在使用集合类型Collection时就一定要使用包装类型而非基本类型),它相当于将基本类型“包装起来”,使得它具有了对象的性质,并且为其添加了属性和方法,丰富了基本类型的操作。

另外当需要往ArrayList,HashMap中放东西时,像int,double这种基本类型是放不进去的,因为容器都是装object的,这是就需要这些基本类型的包装器类了。

String和StringBuffer类也是被final修饰的

二者之间的区别:
1.声明方式不同,基本类型不适用new关键字,而包装类型需要使用new关键字来在堆中分配存储空间;
 
2.存储方式及位置不同,基本类型是直接将变量值存储在堆栈中,而包装类型是将对象放在堆中,然后通过引用来使用;
 
3.初始值不同,基本类型的初始值如int为0,boolean为false,而包装类型的初始值为null
 
4.使用方式不同,基本类型直接赋值直接使用就好,而包装类型在集合如Collection、Map时会使用到。
Java基本运算符
Java基本运算符的种类
a、算数运算符:  +    -     *      /     %
b、赋值运算符: =    +=      -=       *=        /=       %=    &=     |=
c、关系运算符: <      >       <=      >=       ==        !=
d、逻辑运算符:&&    ||        !     
e、三目运算符:(  ?   :)
f、字符串连接:+
g、位运算
                            &      位都为1,结果才为1,否则结果为0
                            |        位只要有一个为1,那么结果就是1,否则就为0
                            ^       两个操作数的位中,相同则结果为0,不同则结果为1
                            ~      如果位为0,结果是1,如果位为1,结果是0
h、移位:
                            <<     左移运算符,将运算符左边的对象向左移动运算符右边指定的位数(在低位补0)
                            >>    "有符号"右移运算符,将运算符左边的对象向右移动运算符右边指定的位数。使用符号扩展机制,也就是说,如果值为正,则在高位补0,如果值为负,则在高位补1.
                            >>>  "无符号"右移运算符,将运算符左边的对象向右移动运算符右边指定的位数。采用0扩展机制,也就是说,无论值的正负,都在高位补0.
                            (PS:x<<y 相当于 x*2y ;x>>y相当于x/2y,从计算速度上讲,移位运算要比算术运算快。如果x是负数,那么x>>>3没有什么算术意义,只有逻辑意义。)

Java基本运算符的优先级
单目乘除为关系,逻辑三目后赋值。 

单目:单目运算符+ –(负数) ++ -- 等 
乘除:算数单目运算符* / % + - 
为:位移单目运算符<< >> 
关系:关系单目运算符> < >= <= == != 
逻辑:逻辑单目运算符&& || & | ^ 
三目:三目单目运算符A > B ? X : Y 
后:无意义,仅仅为了凑字数 
赋值:赋值=

单目、双目、三目运算符的划分 按照操作数的个数
运算符操作过程中的类型转换问题

Java基本程序控制语句
有三种执行方式:顺序结构、选择结构和循环结构
条件选择语句:if...else,swith...case
循环语句:while,do...while,for
注意while和do...while的区别,for的三个循环条件
swith支持的数据类型有:byte,short,char,int以及枚举类型

Java数组
Java数组的概念与特点
一维数组和二维数组的声明
数组初始化的两种方式:静态初始化和动态初始化
动态初始化数组必须给出长度,否则将报“缺少数组维数”的错误
动态初始化二维数组的时,我们可以只指定第一维的长度尔不指定第二维的
当数组中包含的元素是引用数据类型时,必须为每个元素实例化,否则会出现空指针异常

常见Java基础知识陷阱
导致一些错误的产生,避免,熟知Java语言的性质并深入了解
浮点数运算陷阱
float和double不能进行精确运算
验证浮点数是否能够精确计算
System.Out.Println(2.0-1.1); Console 0.8999999999
计算机底层使用的二进制,二进制不能精确的表示浮点数,所以会有一些差异
System.out.println(2.0 - 1.1);
BigDecimal d1 = new BigDecimal(Double.toString(2.0));
BigDecimal d2 = new BigDecimal(Double.toString(1.1));
System.out.println(d1.subtract(d2).doubleValue());
float和double不能进行精确运算
不能简单的使用四舍五入的方法解决上述问题
可以使用BigDecimal解决

自增、自减运算符陷阱
++与--运算符的规则
i++与++i的区别
进行增量或减量运算常见错误
int j = 0;
for (int i = 0; i < args.length; i++) {
j = j++;
}
System.out.println(j);
Console 0
解析:j=j++
先赋值后自增

字符和字符串陷阱
字符串与字符拼接规则
System.out.println("a" + "b");//两个字符串的拼接
System.out.println('a' + 'b');//两个字符的相加,为两个字符的asc码的相加
System.out.println("a" + 'b');//字符串加字符,字符先转为字符串,在与字符相加
Console
ab
195
ab

返回与退出陷阱
try...catch...finally不管try代码块中执行什么样的操作,都要执行finally中的操作
return与try..catch执行规则
exit()函数与try..catch执行规则

public static void main(String[] args) {
System.out.println(ReurnFunction());
ExitFunction();
}

public static boolean ReurnFunction() {
try {
return false;
} finally {
return true;
}
}

public static void ExitFunction() {
try {
System.out.println("Hello");
System.exit(0);
} finally {
System.out.println("GoodBye");
}
}
System.exit(0);程序到此结束,finally中任何代码也不会执行

Java基础面试案例
1.switch语句能否作用在byte上,能否作用在long上,能否作用String上
在switch语句中,开关选项必须是一个整数表达式或一个枚举容量,整数表达式,可以使int类型,或Interger包装类型,由于byte、short、char可以隐含转化为int类型,所以这些类型以及这些类型的包装类,都是可以的;但是long和String都不符合switch语法规定,都不能隐式转化为int类型,不能作用为switch语句上
2.列举Java基本数据类型
byte,short,int,long,float,double,char,boolean
3.true和false是java的关键字吗?
true、false、null都不是严格意义上的关键字,而是文字常亮literals
4.float f=3.4是否正确
不正确,精度类型不准确,应该用强制类型转换,如下所示:float f=(float)3.4;
5.try{}里有一个return语句,那么紧跟在try后的finally{}里的code会不会被执行,什么时候执行,在return前还是后?
会执行,在return前执行
6.error和exception有什么区别
error表示恢复不是不可能,但是很困难下一种很严重的问题,比如内存溢出,我们不可能指望程序可以处理这样的情况,exception表示设计和实现的一种问题,它表示如果程序能够正常运行,那么这种情况就不会发生
7.Java中的异常处理机制的简单原理和应用
这是一个简述题,在回答简述题的时候,应该先回答规则和概念,然后再回答与题目有关的问题,在回答的时候,最好把流程和原理说清楚
Java程序违反了Java的语义规则时,Java虚拟机将会将发生的错误就会将发生的错误表示为一个异常。违反语义规则包括2种情况。一种是Java类库内置的语义检查。例如数组下标越界,会引发Ind exOutOfBoundException;访问null的对象时会引发NullPointerException。另一种情况就是Java允许程序员扩展这种语义检查,程序员可以创建自己的异常,并自由选择在何时用throw关键字引发异常。所有的异常都是java.lang.Throwable的子类。
8.谈谈final,finally,finalize的区别
final修饰符(关键字)
一个类被声明为final,意味着它不能再派生出新的子类,也不能作为父类被继承,因此一个类既不能声明为abstract,也不能声明为final的
将变量和方法声明为final,可以保障在使用中不被改变;被声明为final的变量,必须在声明时给定处置,而在以后的使用中只能读取不能修改;被声明为final的方法,也只能使用,不能重载


finally在异常处理时提供finally块来执行任何清楚操作
如果抛出一个异常,匹配的catch语句就会执行,然后控制流程就会进入finally块

finalize 方法名
Java技术允许使用finalize方法,在垃圾收集器将对象从内存中清除出去之前做必要的清理工作,这个方法是由垃圾回收器在确定这个对象没有被应用时,对这个对象进去调用的,它是Object中定义的,因此所有的类都继承了它;子类覆盖finalize方法可以整理系统资源或执行其他清理工作,finalize方法是在垃圾收集器删除对象之前对这个对象调用的
9.什么时候使用assert(断言)?
断言在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制,在现实中断言就是在程序中的一条语句,它对一个bool表达式语句进行检查,一个正确的程序必须保证这个bool类型所表达的值是true,如果这个值是false,那么说明这个程序处于不正确的状态下,系统将给出警告或退出,一般来说,断言保证程序最基本的正确性,断言检查通常在开发和测试时候开启。为了提高性能,在软件发布会,断言检查通常是被关闭的

Java面向对象面试指导
Java面向对象必回知识点
Java的核心是面向对象编程,所有的java程序都是面向对象的。需要看清java的本质,从复杂的表象中寻找普遍的规律,并深入java的核心思想。
面向对象的特点
封装:隐藏在对象的属性,和实现细节,仅对外提供公共的访问方式
继承:在一个类基础上定义一个新类,原有的类叫父类,新生成的类叫子类
多态:多态的意思是事物存在多种存在的形态

重载和重写
重载:一个类中方法名相同,参数的个数和类型不同
重写:子类重写父类,方法名和参数相同

面向对象程序设计方法的优点是:可重用性、可扩展性、可管理性

类与对象知识点:

类与对象的概念
类是具体事物的抽象
对象是该类事物存在的实实在在的个体

类方法的特点
类是具体事物的抽象
Object类

匿名对象
当对象的方法只使用一次的时候,可以使用匿名对象的方法,这样写代码的时候,比较简便,如果对一个对象进行多个成员的调用,就要给对象起名字;
另外一个特点,可以将匿名对象作为实际参数进行传递

构造函数与构造代码块
第一
构造代码块,是给所有对象进行统一初始化的
构造函数,是给对象初始化的
第二
构造代码块中定义的是不同对象共性的初始化内容

接口
接口与接口之间是可以多继承的,接口可以传递一些模块交互的信息,因为没有实际的代码,所以比较安全;
接口可以定义一些规范,这些规范是定制的标准,他可以把服务的制定者和实现着分开;

变量的特点总结
成员变量与局部变量
成员变量定义在个类中,在整个类中都可以被访问
成员变量随着对象的建立而建立,存在于对象所在的堆内存中
成员变量都有默认的初始化值

局部变量只能定义在局部范围内,比如函数内、语句内
局部变量存在栈内存中,局部变量作用的范围结束,空间就会被释放
局部变量没有初始化值

实例变量与类变量
实例变量随着对象的建立而建立
实例变量随着对象的建立而存在于堆内存中

类变量随着类的加载而存在于方法区中

静态变量
静态变量是通过static关键字所修饰的

变量的生命周期
类变量的生命周期最长,随着类的消失而消失
实例变量的生命周期,随着对象的消失而消失

Java面向对象知识点的精华
1.抽象、封装、继承、多态是面向对象程序设计中的四个特点
2.面向对象的软件开发大体分为:面向对象的分析,面向对象的设计,面向对象的实现
分析用户需求,从对象中抽取模型,然后细化模型;
设计类,包括类的属性和类间的关系,同时观察是否有可以直接引用已有的类或附件;选定一种面向对象的语言,具体编码实现上一阶段类的设计,应在开发过程中引入测试,完善整个解决方案
3.面向对象程序设计方法的优点是:可重用性、可扩展性、可管理性
4.类的定义:class前的修饰符分为访问修饰符和非访问修饰符两大类。访问控制符包括public和private。非访问修饰符包括abstract抽象,final最终

5.final类是最终类,是不能有子类的类,abstract和final不能同时修饰一个类,因为抽象类本身没有具体对象,需要派生出子类后在创建子类的对象。而最终类不可能有子类。
6.构造对象的格式为:类名 对象名=new 构造方法(参数);注意前面是类名,后面是构造方法。
注意构造方法没有返回类型,也不能写void的,构造方法主要完成类初始化工作,在编程中不能直接调用,而得用new调用
7.如果class前面有public修饰符,则默认构造方法的前面也应该有public修饰符
8.类中有static修饰的域或方法,可用类名或对象名访问,否则只能用对象名访问。
9.修饰域的访问控制符可以是:public,private,protected,private protected
非访问控制符可以是:static,final,volatile易失域
10.类变量最本质的特点是:他们是类的域,不属于任何一个类的具体对象实例
11.局部变量是在方法体内声明的,只有当方法被调用时他们才存在,因而只能在方法体内使用,不存在访问控制符,也不能声明为静态变量static,但可以声明为final变量。局部变量必须初始化。
12.修饰方法的访问控制符可以是:public,private,protected,private protected;修饰方法的非访问控制符可以是;static,final,abstract,native(本地方法),synchronized(同步方法)
13.用static修饰的变量或方法都为类成员,类成员可以用类型或实例名访问,实例成员只能用实例名来访问
14.如果一个类中含有抽象方法,则此类必须为抽象类,如果抽象类的子类不为抽象类,则子类必须实现父类的所有抽象方法。抽象方法不能用静态方法和最终方法。
抽象方法只有函数头的声明,而用分号来代替方法体,没有大括号
如abstract void abstractmethod()
15.this变量用在一个方法的内部,指向当前对象,当前对象指的是调用当前正在执行的方法的那个对象。super变量直接指向父类的构造方法,用来因引用父类中的变量和方法
16.如果引用一个包中的多个类,可以用星号来代替。使用星号只能表示本层次的所有类,而不包含子层次下的类。经常需要用两条语句来引入两个层次的类:
import java.awt.*;
import java.awt.event.*;
17.关于访问修饰符:
类中限定为public的成员可以被所有的类访问
类中限定问private的成员只能被这个类本身访问
类中限定为protect的成员可以被这个类本身,它的子类,以及同一个包中的其他类访问
用private protect修饰的成员可以被该类自己访问,也可以被该类的所有子类访问
默认访问控制符规定只能被同一个包中的类访问和引用,不能被其他包的类访问
18.注意
abstract和private,static,final,native不能并列修饰同一个方法
abstract类中不能有private修饰的域和方法
static方法不能处理非static的域
19. 重载方法的参数必须不同,或者参数个数不同,或者参数类型不同。重载的多个方法必须返回相同的数据类型。
20.在java中,一个类获取某个接口定义的功能并不是通过直接继承这个接口的属性和方法来实现的。因为接口中的属性都是常量,接口的房都是没有方法体的抽象方法,没有具体定义操作


Java面向对象面试案例分析
1.用自己的语言描述面向对象的特征
论述题
抽象
抽象就是忽略一个主题中与当前目标无关的某些方面,以便充分的注意到与当前有关的方面,抽象并不打算了解全部问题,而是选择其中的一部分, 暂时不会顾虑细节
抽象包括两个方面,第一方面过程抽象,第二部分数据抽象,

封装
封装是把过程和数据包围起来,对数据的访问只能通过已定义的接口,面向对象始于这一基本概念,即现实世界可以描述为一系列封装的对象,这些对象通过一个受保护的接口访问其他对象

继承
继承是连接类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表示性的方法,对象的一个新类,可以从现有的类派生,这个过程称为类继承,新类继承原始类的特性,新类称为原始类的派生类,和子类,而原始类称为基类,也叫父类,派生类可以从它的基类哪里继承方法和实例变量,并且类可以修改和添加新的方法,使其更适合特殊的需要

多态
多态性,是允许不同类的对象,对同一消息做出响应,多态性包括参数化多态性,和包含多态性,多态性语言具有灵活、抽象、行为共享,代码共享的优势,很好的解决了应用程序函数同名的问题

本体不鞥简单的回答以上四个要点,还要申日的进行解释

2.Overload和Override的区别
论述题
方法的重写Override和重载Overload是Java多态性的不同表现。重写Override是父类域子类之间多态性的一种表现,重载Overload是一个类中多态性的一个表现。如果子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写了Overriding。子类中的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果一个类中国定义了多个同名的方法,它们或有同步的参数个数或有不同的参数类型,则称为方法的重载Overloading
3.abstract和interface有什么区别
abstract class是抽象类,interface是接口。抽象类用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。接口是抽象类的变体。在接口中,所有方法都是抽象的。抽象类的子类为他们父类中的所有抽象方法提供实现,否则他们也是抽象类。接口只可以定义static final成员变量。接口的实现与子类类似,除了该实现类不能从接口定义中继承行为
4.当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的
5.abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?
abstract用来声明抽象的方法,抽象方法并没有方法类,不能被直接调用,在子类Overriding后被使用,所以访问被abstract的方法,要依赖具体的对象实例,而被static修饰的方法是被直接访问的,这就引发了逻辑上的冲突;同时还要注意,父类中是静态方法,子类中不能覆盖为非静态方法;
native用来声明本地方法,该方法的实现由非java语言实现,比如说c语言,一般用于java语言与外界环境进行交互,或与操作系统交互,native可以与其他java标识符连用,但是abstract除外,因为native方法是有实现体的,只不过这些实现体是非Java的,但是abstract则显然的指明这些方法并没有实现体;
synchronized防止多个线程同时调用一个对象的该方法,从synchronized的功能也可以看出该方法可以被直接调用,显然和abstract不能连用,所以abstract和synchronized不能同时使用
6.接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承实体类(concrete class)?
接口可以继承接口,抽象类也可以实现接口,抽象类可继承实体类,但前提是实体类必须有明确的构造方法

JSP与Servlet面试指导
JSP与Servlet必会知识点
JSP是一种Java服务器端技术,它用于在网页上显示动态内容
Tomcat相关技术
tomcat基本配置和目录结构
JSP的执行过程
JSP的页面构成元素
静态内容:html元素、指令、表达式、声明、动作、注释
JSP注释
静态形式,静态的嵌入一个文件,tomcat服务器在编译阶段完成,当前的JSP页面和要嵌入的文件合并成一个新的JSP文件 ,一起编译成Servlet形式的Java文件
动态的,JSP文件和它所需要的文件在语法上是独立的,include动作标记是在JSP运行的时候才处理,不合并成一个新的JSP页面
静态和动态的include
JSP标准标签库
JSP的九大内置对象
Out:一个缓冲的输出流,向客户端输出内容
page:当前JSP页面本身,它是java.lang.Object类的实例
request:提取浏览器提交的信息
response:服务器对客户的请求做出响应,向客户端发送数据
session:会话对象,session对象指的是客户端与服务器的一次会话
application:实现了用户间数据的共享,可存放全局变量,它开始于服务器的启动。直到服务器的关闭
pageContext:JSP页面上下文对象,提供了对JSP页面内所有的对象及名字空间的访问
config:代表JSP对应的servlet的配置信息
exception:是Throwable的实例,表示的是JSP的异常信息
Servlet是服务器端的小程序,用来接受来自网络的请求并作出响应
这些请求包括form表单和浏览器发来的其他请求,并且对这些请求作出不同请求
sevlet是基于http协议的,是运行在web服务器中
EL表达式
JavaBean
Servlet的生命周期
Javaax.Servlet.jsp.tagext包中的类
Session与Cookie
XML的基本概念与使用方法
MVC的处理过程
M=》model模型,是一个或多个的JavaBean对象,用于存储数据
V=》view视图,是一个或多个JSP页面,为模型提供数据显示
C=》controler控制器,由Servlet充当,根据视图提交的要求进行操作,并将有关的结果存储在JavaBean中,然后Servlet重定向方式,请求视图当中的某个JSP页面,并更新显示数据,也就是让该JSP页面通过使用JavaBean标记显示控制器存储在JavaBean中的数据
MVC处理过程:
控制器接收用户的请求,并决定该使用哪个模型进行处理
调用模型来处理用户的请求,并返回数据
控制器用相应的视图显示模型返回数据,并通过浏览器呈现给用户

JSP与Servlet知识点精华
GET与POST请求的区别
从安全上看GET弱于POST,GET提交的信息会在地址栏中显示
从提交内容大小看GET弱于POST,GET不能大于2KB,POST提交的数据理论上是不受限制的,实际编程中建议不要大于64K
从请求响应速度上看GET强于POST,GET要求服务器立即处理请求,而POST请求可能会行程一个队列请求
GET调用doGet方法,POST调用doPost方法

Session与Cookie的区别
Session将信息保存在服务器上,而Cookie保存在客户端上
Session比Cookie更安全,Session比服务器更占资源
Session使用了Cookie机制
Session是在服务器端,通过SessionID把数据保存在客户端
Session用cookie保存客户端数据,所以Session依赖于cookie
如果浏览器不支持Cookie,可以通过浏览器重写来实现
Cookie只能存String类型的数据,而Session可以存Object类型和简单数据类型的数据

Servlet的生命周期
Servlet生命全过程依次为
加载
实例化
初始化
处理请求
退出服务
当客户端第一次向服务器发出servlet请求的时候,web服务器将会创建一个servlet的实例,并且调用servlet的init方法,如果服务器已经存在一个servlet实例,那么将会使用这个实例,然后调用service方法,service方法将会根据客户端的请求方式调用对应的do方法,当servlet从web服务器中删除的时候,web服务器将调用destory方法

Servlet上下文对象
servletContext servlet上下文对象
它是一个公共区域,可以被所有的客户端共享
setAttribute()向公共区域里放入数据
getAttribute()从公共区域中取得数据

JSP与Servlet面试案例
1.JSP有哪些对象?作用分别是什么?
JSP总有9种基本内置组件
request来自客户端的请求,它包含来自POST和GET的请求参数,作用范围request
response是对客户端的响应 ,它的作用范围是page
pageContext页面的管理属性,作用范围也是page
session与请求相应的会话,作用范围是session
application是代码段的运行环境,保留了一些必要的运行参数
out是传送响应的信息流,作用范围是page
config代码段的配置对象
page是JSP页面的本身
exceptoin是JSP页面运行时的抛出的异常,作用范围也是page

2.JSP有哪些动作?作用分别是什么?
JSP共有6种基本动作
jsp:include在页面被请求时引用一个文件
jsp:useBean寻找或实例化一个JavaBean
jsp:setProperty设置JavaBean的属性
jsp:get Property输出某个JavaBean的属性
jsp:forward把请求转到一个新的页面
jsp:plugin根据浏览器类型为Java插件生成OBJECT或EMBED标记

3.JSP中动态include与静态include的区别?
动态include用jsp:include动作实现,它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数。例如:<jsp:include page="includes.jsp" flush="true" />
静态include用include伪代码实现,不会检查所含文件的变化,适用于包含静态页面。例如:<%@ include file="included.html" %>

4.include指令与include动作的区别?
include指令是编译时语法,也就是在编译的时候,把指令所指向的目标文件拷贝到指令所在的位置,替换指令,最后形成一个文件,在运行的时候只有一个文件
include动作指令是运行时语法,包含<jsp:include>动作的文件在执行到这个标签的时候,会转型执行标签所指向的目标文件,执行完目标文件之后,再接着执行标签后的内容,在运行的时候,设计两个文件,就像方法调用一样
当一段代码确定会执行的时候,使用 <%@ include %>,当一段代码可能会执行的时候使用<jsp:include>

4.Servlet与JSP有什么区别?
JSP是Servlet技术的扩展,本质上是Servlet的简易形式,更强调应用的外表表达
JSP编译后是类Servlet,Servlet和JSP最主要的不同点是,Servlet的应用逻辑是在Java文件中,并且完全是从表示层中html中分离出来;JSP的情况是Java和HTML可以组合成一个扩展名为JSP的文件,JSP侧重于视图,而servlet则侧重于逻辑
Servlet和JSP的区别如下:
1.JSP经编译后就是Servlet,也可以说jsp等同于Servlet
2.jsp更擅长页面(表现),servlet更擅长逻辑编程(最核心的区别)
3.在实际应用中采取Servlet来控制业务流程,而采用JSP来生成动态网页,在struts框架中,JSP位于MVC设计模式的视图层,而Servlet位于控制层

MySQL数据库基础面试指导
MySQL初级必会知识点
MySQL数据库的安装、配置和使用
MySQL账号的管理
创建、删除、修改数据表
数据表的索引
SQL语句的基本使用
常用的MySQL内置函数
SQL语句的基本使用
SQL的增删改查基本操作
SQL的条件查询
查询中的order by
查询中的group by和having子句
子查询
JDBC
JDBC主要API
Driver负责与数据库建立连接
DriverManager负责管理驱动程序
Connection表示与数据库之间的一个会话,不管执行什么操作,都必须先建立连接
Statement用于执行SQL语句
ResultSet表示查询的结果集合
DataSet数据源,用于获取数据库中的连接
JDBC连接数据库的过程
JDBC结果集的操作DBC批处理
JDBC事物

MySQL与JDBC知识点精华
管理数据库命令
查看数据库 show databases;
创建数据库 create datebase 数据库名;
使用数据库 use database 数据库名;
删除数据库 drop database 数据库名;

数据表管理命令
1.修改、添加、删除字段,字段改名,修改字段排列顺序,更改表名;
alter table 表名 modify 需要修改字段 修改的类型;
alter table 表名 modify 需要添加的新字段名 字段类型;
alter table 表名 drop 需要删除的字段名;
alter table 表名 change 原来的字段名 新的字段名 新的字段类型;
alter table 表名 modify/add 字段名 字段类型 first/after 字段名;
alter table 原数据表名 rename 新数据表名;

2.创建有索引的表
create index 索引名 on 表名(列表);
或者
create table 表名(index index1(id,name));

3.插入数据
insert into 表名(列表名)
values(要插入的数据);
或者
insert into 表名 set 列表1=数据,列表2=数据;

4.跟新数据
update 表名 set 列表1=数据1,列表2=数据2,...[where clause];

5.删除数据
delete from 表名 [where clause];

6.查询数据
select 列表1,列表2 from 表名1,表名2[where clause];

JDBC连接数据库的基本过程
加载驱动程序
创建连接对象
创建语句对象
编写SQL语句
使用语句对象执行SQL语句
如果有结果集对结果集进行处理
关闭结果集(如果有),关闭语句对象,关闭连接对象

事务相关知识点
事务指逻辑上的一组操作,组成这组操作的各个单元,要么全都操作成功,要么全都操作不成功。数据库事务相关的命令:
start transaction开启事务
Rollback回滚事务
Commit提交事物

创建JDBC事务的步骤
1.设置事务的提交方式为非自动提交 conn.setAutoCommit(false);
2.将需要添加的事务放入代码块try...catch块中,利用其异常机制进行处理
3.在try块内添加事务的提交操作,表示操作无异常,提交事物
conn.commit();
4.在catch块内添加回滚事务,表示操作出现异常,撤销事务;
conn.rollback();
5.设置事务提交方式为自动提交
conn.setAutoCommit(true);

MySQ与JDBC面试案例
1.在MySQL数据库中记录货币用什么字段类型好
使用NUMBERIC和DECIMAL类型。这两种类型可以保存要求精确到和准确度比较高的值,例如与货币有关的数据。当使用这两种类型声明一个数据表字段时,可以指定数据的精度和规模
salary DECIMAL(9,2)
DECIMAL和NUMBERIC的值是作为字符串类型的值存储的,而不是二进制的浮点数,这样可以保存精度比较高的小数部分,DECIMAL和NUMBERIC的最大值的范围和double类型是一样的,但是NUMBERIC和DECIMAL的实际小数部分可以通过参数设置
2.请简述项目中优化SQL语句执行效率的方法
1.尽量选择较小的列
2.将where中使用频率较高的字段建立索引
3.select子句中避免使用“*”
4.避免在索引上使用计算,not,in和<>等操作
5.当使用一行数据的时候使用limit 1
6.保证表单数据不超过200w,适时分割表
3.事务是什么?
事务是访问并可能更新数据库中各项数据项的一个程序执行单元
事务具有原子性、一致性、隔离性和永久性的特点
原子性指事务 必须是原子工作单元
一致性是事务在完成时,必须使所有的数据都保持一样
隔离性是由并发事务所做的修改必须和其他并发事务所做的修改隔离
持久性是指事务完成之后,它对应系统的影响是永久性的,该修改即使出现系统故障也将一直保持
4.在Java中创建一个JDBC访问
注册并加载驱动:使用Class.forName(),驱动类就会注册到DriverManage里面并加载到内存中
用DriverManager获取连接对象:调用Drivermanager.getConnection()方法并传入数据库连接的URL,用户名及密码,就能获取到连接对象
5.有哪些ResultSet
1.TYPE_FORWORD_ONLY:这是默认类型,它的游标只能往下移
2.TYPE_SCROLL_INSENSITIVE:游标可以上下移动,一旦它创建后,数据库中的数据在发生修改,对它来说是透明的
3.TYPE_SCORE_SENSITIVE:游标可以上下移动,如果生成后数据库还发生了修改操作,它是能够感知到的
6.JDBC的异常有哪些
1.java.sql.SQLException 这是JDBC异常的基类
2.java.sql.BathcUpdateExceptoion 当批处理操作执行失败的时候,可能执行这个异常
3.java.sql.SQLWarning SQL操作出现的警告信息
4.java.sql.DataTruncation 字段值由于某些非正常原因被截断了(不是超过字段类型的长度限制)

  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值