java就业面试大全
笔试题值java基础部分
1、一个“java”源文件中是否可以包括
多个类(不是内部类)?有什么限制
可以有多个类,但只能有一个public的类,并且public的类名必须与文件名相一致
2、java有没有goto?
java中的保留字,现在没有在java中使用
3、说说&和&7的区别
&&和&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符俩边的表达式的结果都为true时,整个运算结果才为true,否则一方为true,则结果为false
&
如果有一方为false,还会计算第二个表达式
&&
如果一方为false,则不会计算下一个表达式
4、在java中如何跳出当前的多重嵌套循环?
一种方式是可以加标号,在条件满足的时候就是用break加标号即可
另一种方式就是让外层的循环条件表达式的结果可以受到里层循环体代码的控制
5、switch语句能否作用在byte上,能否作
用在long上,能否作用在String上?
byte是可以的
因为byte,short,char都可以隐式转换为int
long和String不可以
不符合switch语法的规定
6、short s1 = 1; s1 = s1 + 1;有什么错?
short s1 = 1; s1 += 1;有什么错?
对于short s1 = 1; s1 = s1 + 1,s1+1运算时会自动提升为int类型,会报强制类型转换异常
short s1 = 1; s1 += 1,+=是java运算符,可以正确编译
7、char类型中能否储存
一个汉字,为什么?
正面回答
可以,因为char类型是来储存Unicode棉麻的字符的,Unicode编码字符集包含了汉字,所以,char类型变量当然可以储存汉字
补充回答
不过,如果某个特殊的汉字没有被包含在Unicode编码字符集中,那么,这个char型变量就不能储存这个特殊汉字
Unicode编码占2个字节,所以char类型的变量也是占2个字节
8、用最有效率的方法算出2乘以8等于几?
2<<3,
因为讲一个数左移n位就相当于这个数乘以这个数的n次方,而位运算是cpu直接支持的,所以效率最高
9、使用final关键字修饰一个变量时
是引用不能变还是引用的对象不能变
final关键字修饰一个变量时,是指引用变量不能变,引用
变量所指向的对象中的内容还是可以改变的
10、==和equals方法究竟有什么区别
==
比较基本类型,比较的是基本类型的值
比较引用类型比较的是引用类型的地址值
equals
只能比较引用类型,默认比较地址值
11、静态变量和实例变量的区别
语法定义上
静态变量前要加static关键字
实例变量不加
程序运行时
实例变量属于某个对象的属性,必须创建了实例对象,其
中的实例变量才会被分配空间,才能使用实例变量
静态变量可以直接使用类名来引用
12、能否从一个静态方法内部
发出对非静态方法的调用
不可以,因为非静态方法是要与对象关联在一起的,必须
创建一个对象后,才可以在该对象上进行方法调用,而静
态方法调用的时候不需要创建对象,可以直接调用
13、Integet和int的区别
int
1、是java的基本数据类型
2、默认值为0
Integer
1、是int的包装类
2、默认值为null
14、Math.round(11.5)等于多少?
Math.round(-11.5)等于多少?
这是math类中提供的取整的方法,里面有三个数
ceil
表示向上取整
floor
表示向下取整
round
加上0.5之后向下取整
所以结果为12/-11
15、请说出作用域public,private,
protected以及不写时的区别
作用域 当前类 同一package 子孙类 其他package
public √ √ √ √
protected √ √ √ ×
friendly √ √ × ×
private √ × × ×
16、Overload和Override的区别。Overloaded
的方法是否可以改变返回值的类型
Overload
1、是重载的意思
2、重载就是方法名相同,参数列表和类型不同
Override
1、是覆盖的意思,也就是重写
2、重写就是表示子类中的方法和父类中的方法完全相同
这也是面向对象中多态的一种体现
Overloaded
如几个Overloaded的方法的参数列表不一样,他们的返回值类型当然也就不一样
如果俩个方法的参数列表完全一样,是否可以让他们的返回值不同来实现重载Overload,不可以
17、一个房子里有椅子,椅子有腿和背,
房子和椅子是什么关系?椅子与腿和背是什么关系?
如果房子有多个椅子,就是聚合关系,否则就是一种关联关系,当然,聚合就是特殊的关联,椅子与腿和背是组合关系
18、说一下has a和is a的区别?
is - a
表示的是属于关系,比如兔子属于一种动物(继承关系)
has - a
表示组合,包含关系。比如兔子包括头和腿等组件
19、线程如何同步和通讯?
同步代码块 synchronized
使用synchronized关键字加上一个锁对象来定义一段代码(锁对象可以是任意类型)
使用条件:多线程并发操作同一数据的时候(各自想得到对方的锁)
死锁
同步代码块嵌套并且使用相同的锁容易出现死锁,
尽量不要嵌套
20、说一下servlet的生命周期?
servlet生命周期(面试问)
init() 初始化
初始化方法
执行者:服务器
执行次数:一次
执行实际:默认第一次访问的时候
service() 服务
服务
执行者:服务器
执行次数:请求一次,执行一次
执行实际:请求来的时候
distory() 销毁
销毁
执行者:服务器
执行次数:一次
执行实际:当servlet被移除的时候或者服务器正常关闭的时候
servlet是一个单实例多线程
默认第一次访问的时候,服务器创建servlet,并调用init实现初始化操作.
并调用一次servlet方法,
每当请求来的时候,服务器创建一个线程,调用servlet方法执行自己的业务逻辑
当servlet被移除的时候服务器正常关闭的时候,服务器调用servlet的destory方法实现销毁操作
21、分层设计的好处?
1、实现了软件之间的解耦
2、便于进行分工
3、便于维护
4、提高软件组件的重用性
5、便于提到某种产品,比如说持久层的hibernate
6、便于产品功能的扩展
7、便于使用用户需求的不断变化
22、构造器Constructor是否可以被override
构造器Constructor不能被继承,因此不能被重写Override,但是可以被在、重载Overload
23、抽象类
抽象类与普通类唯一的区别就是不能创建实例化对象和抽象类允许有abstract方法
24、写clone()方法是,通常有一行代码,是什么?
clone有缺省行为,super.clone(),首先要把父类中的成员复制到位,然后才是复制自己的成员
25、面向对象的特征:
封装、继承、抽象、多态
抽象:
找出事物的相似和共性之处,然后将这些事物归为一个类,这个类只考虑这些事物的相似和共性之处
26、java中实现多态的机制是什么?
靠的是父类或接口定义的引用变量可以指向子类或具体实现类的实例对象,而程序调用的方法在运行期才动态绑定,就是引用变量所指向的具体实例对象的方法,也就是内存里正在运行的那个对象的方法,而不是引用变量的类型中定义的方法
27、抽象类和接口的区别
抽象类
1、抽象类可以有构造方法
2、抽象类可以有普通的成员方法
3、抽象类中可以有抽象方法,也可以有非抽象方法
4、抽象类中的方法访问类型可以为public 和 protected
5、抽象类中可以包含静态方法
6、抽象类中的静态成员变量可以使任何变量
7、一个类只能集成一个抽象类
抽象类在代码实现方面发挥作用,可以实现代码的重用
接口
1、接口不能有构造方法
2、接口中没有普通的成员方法
3、接口中的方法必须是抽象的
4、接口中只能是public
5、接口中不能包含静态方法
6、接口中的成员变量必须是final修饰的常量
7、一个类可以实现多个接口
接口一般是运用于系统架构设计方法发挥作用,主要用于定义模块之间的通信契约
28、内部类
匿名内部类是否可以继承其
他类,是否可以实现接口
匿名内部类就是没有名字的内部类,不能继承其他类,但是一个匿名内部类可以作为一个接口,由另一个内部类实现
29、内部类可以引用它的包含类的成员吗?
有没有什么限制?
完全可以,如果是静态嵌套类,那么在这种情况下不可以访问外部类的普通成员,而只能访问外部类中的静态成员
30、jdk中那些类不能被继承?
不能被继承的类是那些被final修饰的类
31、运行时异常和一般异常有什么区别?
运行时异常表示虚拟机的通常操作中可能遇到异常,是一种常见的异常
一般异常表示成语运行过程中可能出现的非正常状态
32、==和equals的区别
equals 只能比较引用数据类型 如果类没有重写object中的equals方法,比较的和==一样,就是地址值,重写了以后比较的是内容
== 是一个比较运算符,可以比较基本数据类型也可以比较引用数据类型,引用数据类型比较的是地址值
33、error和exception的区别
error
表示回复不是不可能但是很困难的情况下的一种严重问题。比如内存溢出
exception
表示一种设计实现的问题,也就是说他表示如果程序运行正常,就不会发生的情况
34、请说出5个常见的运行时异常
ArrayIndexOutOFBoundsException 数组索引越界异常
NullPointerException 空指针异常
ClassCastException 类型转换异常
ConcurrentModifictionException 并发修改异常
35、sleep和wait的区别
sleep
不释放资源
必须传参数(毫秒值)
是Thread中的静态方法
可以再任何地方使用
需要捕获异常
不需要唤醒
wait
释放资源
可传可不传
是Object类中的方法
只能在同步代码块中使用
不需要捕获异常
需要唤醒
36、多线程
多线程并行和并发的区别
并行就是俩任务同时进行(要求多核CPU)
用俩个电脑和俩个人聊天
并发就是俩个都请求运行,CPU就安排俩个轮流进行,看起来好像是同时进行的
一个电脑和俩个人聊天
JVM启动时多线程的吗?
是,JVM至少启动了垃圾回收线程和主线程,所以是多线程的
多线程的实现方式有几种?
俩种:1.继承Thread类重写run方法2.实现Runnable接口,重写run方法
继承Thread和实现Runnable的区别
继承Thread
好处:可以直接使用Thread类中方法,代码简单
弊端:如果已经有了父类,就不能用这种方法
实现Runnable
好处:即使线程有继承或者有接口都可以实现Runnable接口,接口可以多实现,多态的表现
弊端:不能直接使用Thread中的方法,需要先获得线程才能得到Thread方法,代码复杂
推荐使用
同步代码块 synchronized
使用synchronized关键字加上一个锁对象来定义一段代码(锁对象可以是任意类型)
使用条件:多线程并发操作同一数据的时候(各自想得到对方的锁)
死锁
同步代码块嵌套并且使用相同的锁容易出现死锁,
尽量不要嵌套
俩个线程是么时候通信,怎么通信?
前提: 在多线程并发的时候,希望他有序的执行
调用wait等待,唤醒的时候使用notify唤醒
线程的五种状态
新建
就绪
运行
阻塞
sleep等待
wait等待
死亡
说说你对线程池的理解
在Java程序中,创建线程是很耗费资源的,所以Java就给出了线程池,它是用来存放线程的一个大仓库,当线程运行结束后不会死亡,而是回到线程池中成为空闲状态,这样大大提高了程序的性能, 直观的反应出来的就是Java程序在启动的时候可能有点慢,但是一旦启动,运行速度还是很不错的.在JDK5以前,需要我们手动创建自己的线程池,但是jdk5以后就支持内置线程池了
37、同步和异步
同步:
如果数据将在线程间共享,例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取
异步:
当应用程序在对象上调用了一个需要花费很长事件来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率
38、集合
Collection 单列集合根接口
list 有序 有索引 可重复
ArrayList 数组实现(查找快,增删慢) (线程不安全)
遍历方式
转成数组遍历
迭代器遍历
在迭代时,不能通过集合对象操作集合中的元素,可能会发生ConcurrentModificationException 并发修改异常
可以 删除 但是要通过自身的remove方法,要不就报并发修改异常
普通for循环get()遍历
可以删除 要索引
增强for循环
不能删除
数组 length 属性
集合 length() 方法
LinkedList 链表实现(查找慢,增删快)
Vactor 数组实现 (线程安全的)
set 无序 无索引 不可重复
HashSet 哈希算法
字符串 : 它本身就重写了Hashcode和equals方法,保证键的唯一
自定义对象 : 需要重写hashcode和equals方法
只有hashcode一样才调用equals方法
TreeSet 二叉树算法
比较字符串: 本身重写了hashcode和equals方法
比较自定义对象: 自然排序 比较器排序
泛型
泛型的好处
提高了安全性(将运行期的错误转换到编译期)
省去了强转的麻烦
泛型的注意事项
<>中放的必须是引用数据类型
前后泛型必须一致或者后面的泛型可以省略不写(jdk1.7的新特性)
泛型的由来
早期的object类可以接收任意对象类型,但是在实际使用中会出现类型转换的问题,也就存在这种隐患,所以Java提供了泛型来解决这种问题
通配符 右边是不确定泛型时,左边可以用通配符
? entends E 向上限定,E及其子类
? super E 向下限定,E及其父类
Map集合双列集合根接口
hashmap (线程不安全)
linkedhashmap
treemap
hashtable (线程安全的)
properties
Map集合的遍历方式
通过keySet()获得键,通过键找值
通过entry.set()获取键值对集合
HashMap和Hashtable的区别
Hashtable : jdk1以后 线程安全,效率低不能储存null值和null键
HashMap: jdk1.2以后,线程不安全,效率高.可以储存null值和null键
这俩个类也有共同点,都是双列集合,底层都是哈希算法
键唯一,值可以重复
Collection和Collections的区别
Collection
集合的上级接口,继承他的主要有set和list
Collections
是针对集合类的一个辅助类
39、说出一下常用的类和接口、包。请各举出5个
BufferedReader
BufferedWriter
FileReader
FileWirter
String
Integer
java.util.Date
System
Class
List
HashMap
40、IO流 是用来处理设
备之间的数据传输
字节流
InputStream
FileInputStream
BufferedInputStream 包装类
内置缓冲区数组的长度为8192
OutputStream
FileOutputStream
BufferedOutputStream 包装类
等缓冲区数组写满以后,才把缓冲区的数据一次写到文件中
字节流在读取中文的时候可能读到半个中文,造成乱码,写出的时候必须将中文转换成字节数组getBytes();
字符流
Reader
FileReader
BufferedReader 包装类
readLine()
LineNumberReader
setLineNumber
getLineNumber
Writer
FileWriter
BufferedWriter 包装类
newLine()
转换流
InputStreamReader 字节输入流到字符输入流
OutputStreamWriter 字节输出流到字符输出流
BGK/UTF-8
其他流
SequenceInputStream 序列流(序列流可以把多个字节输入流整合成一个)
ByteArrayOutputStream 字节数组内存输出流
ByteArrayInputStream 字节数组输入流
RandomAccessFile 随机读写访问流 (object)
ObjectOutputStream 序列化流,将对象写入到文件
要实现Serializable接口
反序列化流ObjectInputStream
要向下转型
DateInputStream 数据输入流
DateOutputStream 数据输出流 (保证原样性)
标准流
System.In是InputStream标准流
System.out是PrintStream标准流
递归
递归就是自己调用自己的方法
System.setIn
System.setOut
是第十种拷贝方式
41、什么是java序列化,如何实现java序列化
或者请解释serializable接口的作用
使用序列化保存数据比直接写在文件里更有安全性,而且读取的事后处理也简单
还有一个更重要的用途就是在rmi和ejb使用的时候,作为参数传递的对象必须是Serializable的
42、java机制方面
1、谈谈java的垃圾回收机制
1、垃圾回收机制是java虚拟机提供的能力,用于在空闲时间以不定时的方式动态回收无任何引用的对象占据的内存空间
2、垃圾回收回收的是无任何引用的对象占据的内存空间而不是对象本身
3、真正垃圾回收机制具体在什么时间点开始发生动作这同样是不可预料的,这和抢占式的线程在发生作用时的原理一样
2、描述一下JVM加载class文件的原理和机制
类加载器吧类装进一个java虚拟机的时候,
要进过三个步骤,装载,连接和初始化
1、装载:
查找和导入类或接口的二进制数据
2、链接:
执行下面的校验、准备和解析步骤,其中解析步骤是可以选择的
1、校验:
检查导入类或接口的二进制数据的正确性
2、准备:
给类的静态变量分配并初始化存储空间
3、解析:
将符号引用转成直接引用
3、初始化:
激活类的静态变量,初始化Java代码和静态Java代码块
3、GC是什么?为什么要用GC
GC:
是垃圾回收的意思
为什么使用GC
内存处理是编程人员最容易出现问题的地方,忘记或者错误的内存回收会导致系统的不稳定甚至崩溃,java提供的GC可以自动检测对象是否超过作用域从而达到检测内存的目的
43、iBatis(mybatis)与Hibernate有什么不同?
相同点
屏蔽jdbc api的底层访问细节,使用我们不用与jdbc api打交道,就可以访问数据。
jdbc api编程流程固定,还将sql语句与java代码混杂在了一起,经常需要拼凑sql语句,细节很繁琐
ibatis(mybatis)的好处
屏蔽jdbc api的底层访问细节;将sql语句与java代码进行分离;提供了将结果集自动封装称为实体对象和
|对象的集合的功能,queryForList返回对象集合,用queryForObject返回单个对象;提供了自动将实体对象的属性传递给sql语句的参数
hibernate
Hibernate是一个全自动的orm映射工具,它可以自动生成sql语句,ibatis需要我们自己在xml配置文件中
写sql语句,hibernate要比ibatis功能负责和强大很多
44、介绍一下hibernate的二级缓存
按照以下思路来回答:(1)首先说清楚什么是缓存,(2)再说有了hibernate的Session就是一级缓
存,即有了一级缓存,为什么还要有二级缓存,(3)最后再说如何配置Hibernate的二级缓存。
Hibernate的Session就是一种缓存,我们通常将之称为Hibernate的一级缓存,当想使用session从数据
库中查询出一个对象时,Session也是先从自己内部查看是否存在这个对象,存在则直接返回,不存在才去访问数据库,并将查询的结果保存在自己内部
二级缓存是独立于Hibernate的软件部件,属于第三方的产品,多个厂商和组织都提供有缓存产品,例
如,EHCache和OSCache等等
45、JDO是什么
JDO是Java对象持久化的新的规范,为java data object的简称,也是一个用于存取某种数据仓库中的对
象的标准化API。JDO提供了透明的对象存储,因此对开发人员来说,存储数据对象完全不需要额外的代码(如JDBC API的使用)
46、UML
标准建模语言UML。用例图,静态图(包括类图、对象图和包图),行为图,交互图(顺序图,合作图),实现图
47、j2ee中的设计模式?
总共23种,分为三大类:创建型,结构型,行为型
我只记得其中常用的6、7种,分别是:
创建型(工厂、工厂方法、抽象工厂、单例)
结构型(包装、适配器,组合,代理)
行为(观察者,模版,策略)
然后再针对你熟悉的模式谈谈你的理解即可。
Java中的23种设计模式:
Factory(工厂模式), Builder(建造模式), Factory Method(工厂方法模式),
Prototype(原始模型模式),Singleton(单例模式), Facade(门面模式),
Adapter(适配器模式), Bridge(桥梁模式), Composite(合成模式),
Decorator(装饰模式), Flyweight(享元模式), Proxy(代理模式),
Command(命令模式), Interpreter(解释器模式), Visitor(访问者模式),
Iterator(迭代子模式), Mediator(调停者模式), Memento(备忘录模式),
Observer(观察者模式), State(状态模式), Strategy(策略模式),
Template Method(模板方法模式), Chain Of Responsibleity(责任链模式)
48、说明工厂模式
工厂模式是一种经常被使用到的模式,根据工厂模式实现的类可以根据提供的数据生成一组类中某一个
类的实例,通常这一组类有一个公共的抽象父类并且实现了相同的方法,但是这些方法针对不同的数据进行了不同的操作
49、BS与CS的联系与区别
B/S
Brower/Server的缩写,客户机上只要安装一个浏览器(Browser),如Netscape
Navigator或Internet Explorer,服务器安装Oracle、Sybase、InFORMix或 SQL Server等数据库
C/S
是Client/Server的缩写。服务器通常采用高性能的PC、工作站或小型机,并采用大型数据库系
统,如Oracle、Sybase、InFORMix或 SQL Server。客户端需要安装专用的客户端软件
50、B/S和C/S的区别
1、硬件环境不同
C/S
一般建立在专用的网络上, 小范围里的网络环境, 局域网之间再通过专门服务器提供连接和数据交换服务.
B/S
建立在广域网之上的, 不必是专门的网络硬件环境,例与电话上网, 租用设备. 信息自己管理. 有比C/S更强的适应范围, 一般只要有操作系统和浏览器就行
2、对安全要求不同
C/S
一般面向相对固定的用户群, 对信息安全的控制能力很强. 一般高度机密的信息系统采用C/S 结构适宜. 可以通过B/S发布部分可公开信息.
B/S
B/S 建立在广域网之上, 对安全的控制能力相对弱, 可能面向不可知的用户
3、对程序架构不同
C/S
程序可以更加注重流程, 可以对权限多层次校验, 对系统运行速度可以较少考虑
B/S
对安全以及访问速度的多重的考虑, 建立在需要更加优化的基础之上. 比C/S有更高的要求 B/S结构的程序架构是发展的趋势,
4、软件重用不同
C/S
程序可以不可避免的整体性考虑, 构件的重用性不如在B/S要求下的构件的重用性好
B/S
对的多重结构,要求构件相对独立的功能. 能够相对较好的重用.就入买来的餐桌可以再利用,而不是做在墙上的石头桌子
5、系统维护不同
C/S
程序由于整体性, 必须整体考察, 处理出现的问题以及系统升级. 升级难. 可能是再做一个全新的系统
B/S
构件组成,方面构件个别的更换,实现系统的无缝升级. 系统维护开销减到最小.用户从网上自己下载安装就可以实现升级
6、处理问题不同
C/S
程序可以处理用户面固定, 并且在相同区域, 安全要求高需求, 与操作系统相关. 应该都是相同的系统
B/S
建立在广域网上, 面向不同的用户群, 分散地域, 这是C/S无法作到的. 与操作系统平台关系最小
7、用户接口不同
C/S
多是建立的Window平台上,表现方法有限,对程序员普遍要求较高
B/S
建立在浏览器上, 有更加丰富和生动的表现方式与用户交流. 并且大部分难度减低,减低开发成本
8、信息流不同
C/S
程序一般是典型的中央集权的机械式处理, 交互性相对低
B/S
信息流向可变化, B-B B-C B-G等信息、流向的变化, 更像交易中心
51、应用服务器和web service的区别
应用服务器
Weblogic、Tomcat、Jboss
web service
Web Service是基于网络的、分布式的模块化组件,它执行特定的任务,遵守具体的技术规范,这些规范使得Web Service能与其他兼容的组件进行互操作
IIS、 Apache
52、对j2ee常用的名词进行解释
1、web容器
给处于其中的应用程序组件(JSP,SERVLET)提供一个环境,使JSP,SERVLET直接更容器中的环境变量接口交互,不必关注其它系统问题
2、EJB容器
Enterprise java bean 容器。更具有行业领域特色。他提供给运行在其中的组件EJB各种管理功能
3、JNDI
(Java Naming & Directory Interface)JAVA命名目录服务。主要提供的功能是:提供一个目录系统,让其它各地的应用程序在其上面留下自己的索引,从而满足快速查找和定位分布式应用程序的功能
4、JMS
(Java Message Service)JAVA消息服务。主要实现各个应用程序之间的通讯。包括点对点和广播
5、JTA
(Java Transaction API)JAVA事务服务。提供各种分布式事务服务。应用程序只需调用其提供的接口即可
6、JAF
(Java Action FrameWork)JAVA安全认证框架。提供一些安全控制方面的框架。让开发者通过各种部署和自定义实现自己的个性安全控制策略
7、RMI/IIOP
(Remote Method Invocation /internet对象请求中介协议)他们主要用于通过远程调用服务
53、SpringMvc架构流程
1、用户发送请求至前端控制器DispatchServlet
2、DispatcherServlet收到请求调用HandlerMappling处理器映射器
3、处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet
4、DispatcherServlet通过HandlerAdapter处理器适配器调用处理器
5、执行处理器(Controller,也叫后端控制器)
6、Controller执行完成返回ModelAndView
7、HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet
8、DispatcherServlet将ModelAndView传给ViewReslover视图解析器
9、ViewReslover解析后返回具体View
10、DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)
11、DispatcherServlet响应用户
54、问的稀里糊涂的问题
四种会话跟踪技术
page
是代表与一个页面相关的对象和属性。一个页面由一个编译好的 Java servlet 类(可以带有任何的 include 指令,但是没有 include 动作)表示。这既包括 servlet 又包括被编译成 servlet 的 JSP 页面
request
是代表与 Web 客户机发出的一个请求相关的对象和属性。一个请求可能跨越多个页面,涉及多个 Web 组件(由于 forward 指令和 include 动作的关系)
session
是代表与用于某个 Web 客户机的一个用户体验相关的对象和属性。一个 Web 会话可以也经常会跨越多个客户机请求
application
是代表与整个 Web 应用程序相关的对象和属性。这实质上是跨越整个 Web 应用程序,包括多个页面、请求和会话的一个全局作用域
javaweb部分
1、Tomcat的优化经验
去掉web.xml的监视,把jsp提前编辑成servlet
有富余的物理内存的情况,加大tomcat使用的jvm的内存
1.前端技术
html
展示
form表单
action
表示提交的路径
method
表示提交的方式
post
get
区别:
1.get请求会把说有的参数追加到地址栏 post 不会
2.get请求参数大小有限制 post没有限制
3.post相对于get更安全
子标签
input
10中type
text
文本框
readonly --- 表示只读
password
密码框
readio
单选按钮
checkbox
复选框
checked 默认选中
file
文件上传选
submit
提交按钮
butten
普通按钮
reset
重置按钮
hidden
隐藏域
image
上传图片
select
下拉列表框
子标签
option
selected 默认选中
table
tr 行
td 列
th
超链接标签
target属性
_blank
使用新的窗口打开
_parent
使用父窗口打开
_self
在当前窗口打开 默认值
css
作用
渲染
什么是css
层叠样式表
css和html结合的方式
1.内联样式表
直接在html元素上使用style属性编写css样式
2.内部样式表
在html的<head>标签中使用<style>标签来定义css
3.外部样式表
将css定义成一个css后缀名的文件,在html中导入
语法
选择器{
属性:值;
属性:值
}
选择器
基本选择器
id
#id
优先级为1
class
.class
2
属性
标签名[属性]
元素选择器
xxx{...}
3
派生选择器
后代选择器
选择器 后代选择器{...}
在满足第一个选择器的条件下找后代选择器,给满足条件的元素添加样式
悬浮
float属性取值
left--悬浮到左边
right--悬浮到右边
clean属性 -- 清除
left--清除左边浮动
right--清除右边浮动
both--清除俩侧浮动
属性
display:
是否显示及如何显示
none
隐藏的
block
显示的
inline
框模型(盒子模型)
js -- javaScript
动画
改变html的内容/样式/表单校验/操作浏览器
作用
html
使用标签封装数据
css
设置样式
js
提供程序设计语句
特点
交互性
用户体验比较好
安全性
js程序不能访问本地硬盘
扩平台性
浏览器可以解析js
组成
ECMAScript
js底层规范
bom
浏览器对象模型
dom
文档对象模型
基础语法:
var 变量名
数据类型
原始类型(5中)
typeof 判断
引用类型
array
String
regExp
test() 匹配字符串是否匹配正则
全局
eval('alert("123")')
函数
function 函数名(){}
匿名函数
function(){...}
事件(5)
onclick
单击事件
焦点(2)
onblur
失去焦点
onfocus
获取焦点
onsubmit
表单提交
onload
页面加载
绑定事件
通过元素的事件属性 <xxx onclick="ss">
派发事件
document.getElementById(id).onclick=function(){...}
BOM
浏览器对象模型
window
提示框
alert
询问框
confirm()
删除前的询问
定时器(2)
setInterval(方法,参数)
在规定的时间内执行N此该方法
setTimeout(方法,参数)
在规定的时间内只执行一次该方法
打开关闭 open close
location
href:
获取或者是设置当前的地址栏
history --浏览器历史相关的对象
go
-1
代表上一页
1
代表下一页
DOM
获取元素的4中方式
操作元素的style属性
操作元素的value属性
操作元素的标签体 innerHTML
jquery
概念
js的类库
优点
1.轻量级的js类库,兼容各大浏览器
2.更方便的处理html,实现动画效果,方便的为网站提供ajax交互
3.不需要再html里面插入一堆js来调用,只需要设置id就行
兼容各大浏览器
获取jQuery对象
$("选择器")
$(dom对象)
选择器
基本选择器
$("#id值")
$(".class值")
$("标签名")
层次选择器
a b
a>b
a+b
a~b
索引
:odd
:even
:eq(index)
.....
可见性过滤
:hidden
表单对象属性选择过滤器
checked
selected
表单对象属性过滤选择器
:enabled
匹配所有可用元素
:disabled
匹配所有不可用元素
:checked
选中的(针对于单选框和复选框)
:selected
选中的(针对于下拉选)
属性和CSS操作总结
对属性的操作
attr();/prop
用来设置|获取元素的属性
使用方式:
removeAttr("属性名称")
移除指定的属性
添加class属性的时候
addClass("指定样式值");
相当于attr("class","值");
removeClass("指定的样式值");
对CSS的操作
操作元素的style属性
css();
获取|设置css样式
使用方式:
1. css("属性名称");
获取
2. css("属性名称","值");
设置一个属性
3. css({
"属性1":"值1","属性2":"值2"
})
设置多个
获取尺寸的方法
width()
height()
文本操作
html
text()
val()
文档处理
内部插入(2组4个)
外部插入(2组4个)
删除
掌握俩
效果
hide
show
元素遍历
jQuery对象.each(fn)
bootstrap
前端css框架
响应式的框架
响应式
适应四种屏幕大小
媒体查询
(栅格系统)
(大屏幕)假如大屏幕,每行显示6个, 超大电脑,屏幕分辨率>1200
使用: col-lg-2
(中等屏幕)假如屏幕小点,每行显示4个, 992<分辨率<1200
使用: col-md-3
(小屏幕)再小点,每行显示2个, 768<分辨率<992
使用: col-sm-6
(超小屏幕)继续小,每行显示1个, 分辨率<768
col-xs-12
hidden-xs/sm/md/lg
在什么情况下隐藏
数据库
多表
一对多
在多表的一方添加一个外键,指向一表的逐渐
alter table 多表 add foreign key (多表外键) reference 一表(主键)
多对多
引入一张中间表,将多对多拆成俩个一对多
多表查询
内连接
普通内连接
* 关键字是 select * from 表1 inner join 表2 on 主外键关联
select * from dept inner join emp on dept.did = emp.dno
隐式内连接(开发中用的多)
使用select * from 表1,表2 where 主外键关联方式
select * from dept,emp where dept.did = emp.dno
外链接
左外连接
使用关键字 select * from 表1 left outer join 表2 on 主外键关联
outer关键字省略不写
select * from dept d left outer join emp e on d.did = e.dno
右外连接
使用关键字 select * from 表1 right outer join 表2 on 主外键关联
outer关键字省略不写
select * from dept d right outer join emp e on d.did = e.dno;
select * from dept d right join emp e on d.did = e.dno;
子查询
嵌套查询
select username,english from stu where english > (select avg(english) from stu)
连接池
c3p0
概念:
就是提前创建好一些链接,保存到内存中
导入jar包
编写配置文件
位置
src
名称
c3p0.properties c3p0-config.xml
使用
new combopooledDataSource("name")
DButils
三个核心
QueryRunner
操作sql
DBUtils
事务管理 资源管理
ResultSetHandler
封装结果集
beanlisthander
beanhandler
MapListHandler
ScalarHandler
web基础
WEB
也就是说网页的意思
分类
静态网页
页面数据不变化
HTML,CSS,JS
动态网页
页面的数据时刻发生变化
servlet,jsp
常见的资源框架
C/S
客户端/服务器端
B/S---开发常用
浏览器端/服务器端
开发都是基于请求和响应的模式
xml
作用:
是用来传输数据的,而不是显示数据的
作为配置文件出现
显示数据
解析方式
DOM解析
加载配置文件到内存中形成树状结构,有了树状结构就可以进行增删改查
SAX解析
边读别解析
在项目中的应用
用到数据从存储,信息配置俩方面。在做数据交换平台时,将不能数据源的数据组装成xml文件,然后将xml文件压缩打包加密后通过网络传送给接受者,接收解密与解压缩后再同xml文件中还原相关信息进行处理
解析方式的区别
DOM
优点
可以完成增删改查的所有操作
缺点
如果文档非常大,容易产生内存溢出
SAX
优点
只能做查询操作,不能进行增删改操作
缺点
不容易出现内存溢出
xml文档定义有几种形式?
dtd
schema
他们之间有何本质区别?
schema
本身是xml的,可以被xml解析器解析
解析xml文档有哪几种方式
DOM
SAX
STAX等
DOM4J
在查找节点的时候速度比较快
servlet
概述/作用:
可以接收和响应从客户端发来的请求
生命周期
servlet生命周期(面试问)
init() 初始化
初始化方法
执行者:服务器
执行次数:一次
执行实际:默认第一次访问的时候
service() 服务
服务
执行者:服务器
执行次数:请求一次,执行一次
执行实际:请求来的时候
distory() 销毁
销毁
执行者:服务器
执行次数:一次
执行实际:当servlet被移除的时候或者服务器正常关闭的时候
servlet是一个单实例多线程
默认第一次访问的时候,服务器创建servlet,并调用init实现初始化操作.
并调用一次servlet方法,
每当请求来的时候,服务器创建一个线程,调用servlet方法执行自己的业务逻辑
当servlet被移除的时候服务器正常关闭的时候,服务器调用servlet的destory方法实现销毁操作
路径
相对路径
绝对路径
三种配置方式的优先级
完全路径匹配=>目录匹配=>扩展名匹配
servletContext
全局管理者(上下文)
作用
1.获取全局的初始化操作(了解)
2.资源通信(域对象)
3.获取资源文件
4.获取mimetype
rr
request
请求
获取从浏览器发送过来的数据
获取参数
注意中文乱码
获取项目目录
request.getContextPath()
request.getHeaer("user-agent")
response
响应
往浏览器写东西
写东西
getWriter().print()
注意中文乱码
response.setContentType("text/html;charset=utf-8")
重定向
response.sendRedirect(绝对路径)
操作请求参数
常用的方法:
getParameter(String key)
获取一个
String[] getParameterValues(String key)
通过一个key获取多个值
Map<String,String[]> getParameterMap()
获取所有的参数名称和值
域对象
request
创建:
一次请求来的时候创建
销毁:
响应生成的时候
作用:
一次请求里面的数据
请求转发(请求链,请求串)
request.getRequestDispatcher("/内部路径").forward(请求,响应)
生命周期
重定向和请求转发的区别
请求转发
发送一次请求
地址栏不改变
从服务器内部(指路径)
存在域对象
是request的方法
不可以请求站外资源
重定向
发送俩次请求
地址栏发生改变
从浏览器发过来的
是response的方法
不存在域对象
可以请求站外资源
会话技术
概念/作用
因为HTTP是一个无状态协议,它记录不了上次访问的内容,用户在访问过程中难免会产生一些数据,通过会话技术就可以保存起来,一次浏览器的打开和关闭可以看做是一次会话
cookie
就是通过response将cookie写回浏览器,储存一段时间
注意事项
cookie不能跨浏览器
cookie中不支持中文
session
服务器端的会话技术,底层依赖于cookie
request.getSession()
获取session
session的生命周期
第一次访问浏览器的时候创建,在浏览器关闭的时候销毁,也可以手动干掉session
jsp/el/jstl
jsp
内置对象(9)
1、request
用户端请求,此请求包含来自get/post请求的参数
2、response
网页传回用户端的回应
3、pageContext
这里用来管理网页属性
4、session
与请求有关的会话期
5、application
servlet正在执行的内容
6、out
用来传送回应 的输出
7、config
servlet的构架部件
8、page
jsp网页本身
9、exception
针对错误网页,未捕捉的例外
动作及作用
1、jsp:include
在页面被请求的时候引入一个文件
2、jsp:useBean
寻找或者实例化一个JavaBean
3、jsp:setProperty
设置JavaBean的属性
4、jsp:getProperty
输出某个JavaBean的属性
5、jsp:forward
把请求转到一个新的页面
6、jsp:plugin
根据浏览器类型为Java插件生成OBJECT或EMBED标记
jsp和servlet有哪些相同点和不同点
他们之间的联系是什么?
jsp是servlet技术的扩展,本质上是servlet的建议方式,更强调应用的外表表达
servlet和jsp的主要的不同点在于servlet的应用逻辑是在java文件中,并且完全从表示层中的HTML里分离开来
二jsp的情况是java和HTML可以组合成一个扩展名为。jsp的文件。
jsp侧重于视图
servlet主要用于控制逻辑
el
就是用来取值的
${el表达式}
jstl
c:if
c:foreach
数据库的高级
事务的特性
(ACID)面试问
原子性
A
事务里面的操作单元是不可切割的
一致性
C
事务执行前后,业务状态和其他的业务状态保持一致
隔离性
I
一个事务执行的时候,最好不要受别的事务的影响
不考虑隔离性会出现的读问题
出现的的问题
脏读
在一个事务中读取到了另一个事务没有提交的数据
不可重复读
一个事务中俩次查询的结果不一致(针对的是update操作)
虚读
在一个事务中,俩次查询的结果不一致(针对insert操作)
设置隔离级别避免以上问题
1.read uncommited
读未提交
以上三个问题都会出现
2.read commited
读已提交
可以避免脏读的发生
3.repeatable read
可重复读
可以避免脏读和不可重复读的发生
4.serializble
串行化
可以避免所有的问题
但是也带来一个问题:锁表--只能一个操作完事再进行下一个
四种隔离级别的效率
1>2>3>4
四种隔离级别的安全性
4>3>2>1
MySQL中的默认隔离级别
repeatable read
oracle中的默认隔离级别
read commited
Java中控制隔离级别(了解)
Connection的api
setTransactionIsolation(int level) level是常量
持久性
D
一旦事务提交|回滚了,这个状态都要持久化到数据库中]
数据库的三范式是什么?
第一范式
字段具有原子性,不可再分。所有的关系型数据库系统都满足第一范式
第二范式
在第一范式的基础上建立起来的,及满足第二范式必须满足第一范式
要求数据库中的每个实例或行必须可以被唯一的区分
第三范式
满足第三范式必须满足第二范式
要求一个数据库表中不包含已在其他表中已包含的非主关键字信息
特征
1、每一列只有一个值
2、每一行都能区分
3、每一个表都不包含其他表已经包含的飞猪关键字信息
union和union all有什么不同
union
1、在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复记录再返回结果
效率慢
union all
1、只是简单的将俩个结果合并后就返回
效率高
为什么要用ORM?和jdbc有什么不一样
Java中如何管理实务
Connection
setAutoCommit(false)
commit()
rollback()
web高级
ajax
概念/作用
异步JavaScript和xml
AJAX是一种用创建快速动态网页的技术
通过后台与服务器进行少量的数据交换,意味着不需要进行网页
加载就就可以实现数据的校验
步骤:
1.创建一个核心对象 XMLHttpRequest
2.编写一个回调函数
3.编写请求的方式和请求的路径(open操作)
4.发送请求(send操作)
jQuery中的ajax
$.get(url,params,function(data){},"json")
$.post(url,params,function(data){},"json")
注意中文乱码
filter
概念/作用
概述:
filter是一个实现了特殊接口的Java类,实现对请求资源的过滤功能
过滤器是servlet中最为实用的功能
作用:
对目标资源进行过滤
过滤请求和响应
例如:自动登录,统一编码,过滤关键字
过滤器
一个资源有可能被多个过滤器匹配成功,多个过滤器的执行顺序是按照web.xml中的maping的顺序决定的
反射
传入一个class对象 就可以做任何事情
代理:
小汽车的案例想一想
书写步骤
1.要求被装饰者和装饰者实现同一个接口或者继承同一个类
2.在装饰者中要有被装饰者的引用
3.对需要加强的方法进行加强
4.对不需要加强的方法调用原来的方法
mvc
MVC的各个部分都有哪些技术来实现,如何实现
model
代表的是应用的业务逻辑
通过javabean,ejb组件实现
view
是应用的表示面
由jsp页面产生
controller
是提供应用的处理过程控制
一般是一个servlet
通过这种设计模式把应用逻辑、处理过程和显示逻辑分成不同的组件实现。这些组件可以进行交互和重用
实际项目开发的面试题
1、在eclipse中调试时,
怎样查看一个变量的值
1、首先设置断点,然后debug启动
2、跳转到方法中,将鼠标指向变量即可在展示窗口查看变量信息
3、想要知道一个方法被调用的调用链,可以在方法栈中查看
2、你们公司使用的代码配置管理工具是什么
除了说以前使用cvs,现在新项目使用SVN了,还要检验说一下使用过程,如
果有可能,再说说仓库的概念和如何使用锁之类的细节
3、你们的项目总金额多少,多少人开发,总共花了多少个月
像巴巴运动网这种规模的项目,可以说是4、5个人,开发了4、5个月,费用则是四五十万
4、大数据量下的分页解决办法
最好的办法是利用sql语句进行分页,这样每次查询出的结果集中就只包含某页的数据内容
考试代码
1、用 JDBC 查询学生成绩单, 把主要代码写出来
Connection cn = null;
PreparedStatement pstmt =null;
Resultset rs = null;
try
{
Class.forname(driveClassName);
cn = DriverManager.getConnection(url,username,password);
pstmt = cn.prepareStatement(“select score.* from score ,student “ +
“where score.stuId = student.id and student.name = ?”);
pstmt.setString(1,studentName);
Resultset rs = pstmt.executeQuery();
while(rs.next())
{
system.out.println(rs.getInt(“subject”) + “ ” + rs.getFloat(“score”) );
}
}catch(Exception e){e.printStackTrace();}
finally
{
if(rs != null) try{ rs.close() }catch(exception e){}
if(pstmt != null) try{pstmt.close()}catch(exception e){}
if(cn != null) try{ cn.close() }catch(exception e){}
}