1、使用length属性获取数组长度,public、private、protected、friendly区别
数组名点length
当前类下 同一个包下 子类 不是同一个包
public 1 1 1 1
private 1 x x x
protected 1 1 1 x
friendly 1 1 x x
2、Collection和Collections区别
Collection 是个java.util下的接口,他是各种集合结构的负借口
Collections是java.util下的类,他是各种有结合操作的静态方法
Lis,set,Map是否继承自Collection接口 List ,set 是 Map不是
3、String s=new String(‘xyz’);创建了几个object对象
两种情况,1如果string 常理池中已经创建xyz则不会继续创建,此时只创建了一个对象new String("xyz") 2.如
果string 常理池中么有xyz 则会创见两个对象 一个对象值为xyz,另一个为new string("xyz")
4、short s1=1;
s1=s1+1;是否有错?
第一句没有错,在java中地位转高位不需要强转,而高位转地位时需要强转所以第二句话错了
5、Overriding和Overloading区别
方法覆盖要求参数必须一致,而方法重载要求参数必须不一致,
方法覆盖要求返回值类型必须一致,而方法重载不做限制
方法覆盖至用于子类覆盖的方法,方法重载用于同一个类的所有方法(包括从父类中继承的方法)
方法覆盖对方法的访问权限和抛出的异常有特殊要切,而方法重载没有要求
父类的方法只能被子类覆盖一次,而有个方法所在的类可以被重载很多次
6、Set里面的元素不能重复,用什么方法区分重复与否。
Set里的元素是不能重复的,那么用iterator()方法来区分重复与否。equals()判读两个Set是否相等。
7、给出一个常见的runtime exception。
NullPointerException - 空指针引用异常
ClassCastException - 类型强制转换异常。
IllegalArgumentException - 传递非法参数异常。
ArithmeticException - 算术运算异常
ArrayStoreException - 向数组中存放与声明类型不兼容对象异常
IndexOutOfBoundsException - 下标越界异常
NegativeArraySizeException - 创建一个大小为负数的数组错误异常
NumberFormatException - 数字格式异常
8、error和exception区别
Error类和Exception类的父类都是throwable类,他们的区别是:
error类哟版是指虚拟器相关的问题如系统崩盘,内存不足等,这类错误仅靠程序本身无法恢复和预防,
Exceptio类表示程序可以处理的异常,可以捕获亲且能恢复。
9、List和Set是否继承自Collection接口。
是
10、abstract class和interface 的区别。
接口可以被实现多次
接口没有构造方法,接口么有方法体,接口只能是final static
抽象类里面可以定义方法,也可以实现方法,interface只能定义;
抽象类的的方法在子类中可以不实现,也可以重写父类的方法。 而接口中的所有方法一定要实现
11、是否可以继承String类。
不可以因为String是final的
12、try{}里有一个return语句,紧跟在try后的finally里的code会不会被执行,什么时候执行,return前执行还是
return后执行。
会执行,会在return前执行
13、最有效率的方法算2*8等于几
2<<3
14、两个对象值相同,x.equal(y)==true,但是却可有不同的hashcode,这句话对不对。
也对也不对,如果此对象重写了equals方法,那么可能出现这两个对象equals相同,Object对象的eqyuals方法 默
认使用==实现的,那么如果equals相同,hashcade一定相同!
15、值传递和引用传递
值传递是将变量的一个副本传递到方法中,方法中如何操作该变量副本,都不会改变原变量的值。
引用传递是将变量的内存地址传递给方法,方法操作变量时会找到保存在该地址的变量,对其进行操作。会对原变
量造成影响。
16、switch是否作用在byte、long、string上。
switch(表达式),表达式的内容为整数表达式或枚举常量,整数表达式即为int或integer型,因为byte、short、
char都可以转换成整型,而String、long不可以,所以switch能作用在byte上而不能作用在long和String上
17、ArrayList和Vector区别,HashMap和Hashtable区别(了解这几个类的底层jdk中的编码方式)。
arraylist 线程不安全,vector更加安全
hashmap是线程不安全的 且可以存储空值
Hashtable 是线程安全的,并且不能存储空值
18、GC是什么,为什么要有GC,简单介绍GC。
Java GC 是垃圾回收机制,自动内存管理和垃圾清扫机制,释放内存中的资源和垃圾
19、float f=3.4是否正确。
不正确需要转换
在java里面,没小数点的默认是int,有小数点的默认是 double
20、介绍Java中的Collection framework。
Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set
Map
├Hashtable
├HashMap
└WeakHashMap
21、Collection框架中实现比较方法
要实现 comparable 接口,把你的自定义类实现以上接口,实现 compareTo 方法就OK了
22、String和Stringbuffer的区别
简单地说,就是一个变量和常量的关系。StringBuffer对象的内容可以修改;而String对象一旦产生后就不可以被
修改,重新赋值其实是两个对象。
23、final、finally、finalize区别
final 用于声明属性、方法和类,分别表示属性不可变、方法不可覆盖和类不可被继承
final属性:被final修饰的变量不可变。由于不可变有两重含义:一是引用不可变;二是对象不可变。
final方法:当一个方法声明为final时,该方法不允许任何子类重写这个方法,但子类仍可以使用这个方法。
final类:当一个类被声明为final时,此类不能被继承,所有方法都不能被重写。当这并不表示final类的成员变量
也是不可改变的。
finally:作为异常处理的一部分,在try/catch语句中使用
finalize:是Object类的一个方法,在垃圾回收器执行时会调用被回收的对象的finalize()方法,可以覆盖此方法
来实现对其他资源的回收,例如关闭文件等。需要注意的是,一旦垃圾回收器准备好释放对象占用的空间,将首先
调用其finalize()方法,并且在下一次垃圾回收动作发生时,才会真正回收对象占用的内存。
24、面向对象的特征
抽象,封装,继承,多态
25、String是最基本的数据类型吗。
String 属于引用类型不属于基本类型
26、运行时异常和一般异常的区别
运行时异常:由java虚拟机抛出的异常。用户不必处理。
一般异常是用户可以抛出的异常,如果抛出调用必须进行处理
27、说出ArrayList、Vector、Linkedlist的存储性能和特性
ArrayList 采用的是数组形式来保存对象的,这种方式将对象放在连续的位置中,所以最大的缺点就是插入删
除时非常麻烦
LinkedList 采用的将对象存放在独立的空间中,而且在每个空间中还保存下一个链接的索引 但是缺点就是查
找非常麻烦 要丛第一个索引开始
ArrayList和Vector都是用数组方式存储数据,此数组元素数要大于实际的存储空间以便进行元素增加和插入操
作,他们都允许直接用序号索引元素,但是插入数据元素涉及到元素移动等内存操作,所以索引数据快而插入数据慢.
Vector使用了sychronized方法(线程安全),所以在性能上比ArrayList要差些.
LinkedList使用双向链表方式存储数据,按序号索引数据需要前向或后向遍历数据,所以索引数据慢,是插入数
据时只需要记录前后项即可,所以插入的速度快.
28、heap和stack区别
heap:是由malloc之类函数分配的空间所在地。地址是由低向高增长的。
stack:是自动分配变量,以及函数调用的时候所使用的一些空间。地址是由高向低减少的。
29、Java中的异常处理机制的简单原理和应用
当JAVA程序违反了JAVA的语义规则时,JAVA虚拟机就会将发生的错误表示为一个异常。违反语义规则包括2种情况。
一种是JAVA类库内置的语义检查。例如数组下标越界,会引发IndexOutOfBoundsException;访问null的对象时会引发
NullPointerException。另一种情况就是JAVA允许程序员扩展这种语义检查,程序员可以创建自己的异常,并自由
选择在何时用throw关键字引发异常。所有的异常都是java.lang.Thowable的子类。
30、垃圾回收的原理和特点,并考虑2种回收机制
Java语言中一个显著的特点就是引入了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎刃而解,它使得Java
程序员在编写程序的时候不再需要考虑内存管理。由于有个垃圾回收机制,Java中的对象不再有"作用域"的概念,
只有对象的引用才有"作用域"。垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存。垃圾回收器通常
是作为一个单独的低级别的线程运行,不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清
除和回收,程序员不用实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。回收机制有分代复制垃圾回收
和标记垃圾回收,增量垃圾回收。
31、说出一些常用的 集合类和方法
Collection<--List<--Vector
Collection<--List<--ArrayList
Collection<--List<--LinkedList
Collection<--Set<--HashSet
Collection<--Set<--HashSet<--LinkedHashSet
Collection<--Set<--SortedSet<--TreeSet
32、描述一下JVM加载Class文件的原理和机制
加载
把类的.class文件中的数据读入内存中,通常是创建一个字节数组读入.class文件,然后产生与所加载类对应
的class对象。此时的对象还不稳重,类还不可以使用。
连接
当类被加载后就进入连接阶段,这一阶段包括验证、准备(为静态变量分配内存并设置默认的初始值)和解析
(将符号引用替换为直接引用)三个步骤
初始化
1)如果类存在直接的父类并且这个类还没有被初始化,那么就先初始化父类;
2)如果类中存在初始化语句,就依次执行这些初始化语句。
33、排序的几种方法,了解。(算法和数据结构在面试的时候还没有被问到)
34、Java语言如何进行异常处理,throws,throw,try catch finally代表什么意义,try块中可以抛出异常吗
try块表示程序正常的业务执行代码。如果程序在执行try块的代码时出现了“非预期”情况,JVM将会生成一个异常
对象,这个异常对象将会被后面相应的catch块捕获。
catch块表示一个异常捕获块。当程序执行try块引发异常时,这个异常对象将会被后面相应的catch块捕获。
throw用于手动地抛出异常对象。throw后面需要一个异常对象。
throws用于在方法签名中声明抛出一个或多个异常类,throws关键字后可以紧跟一个或多个异常类。
finally块代表异常处理流程中总会执行的代码块。
对于一个完整的异常处理流程而言,try块是必须的,try块后可以紧跟一个或多个catch块,最后还可以带一个
finally块。
try块中可以抛出异常
35、一个’.java’源文件是否可以包括多个类,有什么限制。
就是一个java文件里可以写多个类,但是只有一个public修饰的类
36、Java中有几种类型流,jdk为每种类型的流提供了一些抽象类以供继承,请分别说出它们是哪些类。字节流,字
符流。字节流继承于InputStream OutputStream,字符流继承于InputStreamReader OutputStreamWriter。在
java.io包中还有许多其他的流,主要是为了提高性能和使用方便。
37、Java中会存在内存泄漏吗,请简单描述。
会。java导致内存泄露的原因很明确:长生命周期的对象持有短生命周期对象的引用就很可能发生内存泄露,尽管
短生命周期对象已经不再需要,但是因为长生命周期对象持有它的引用而导致不能被回收,这就是java中内存泄露
的发生场景。
38、静态变量和实例变量的区别。
一种是被static关键字修饰的变量,叫类变量或者静态变量
另一种没有static修饰,为实例变量
类的静态变量在内存中只有一个,java虚拟机在加载类的过程中为静态变量分配内存,静态变量位于方法区,被类
的所有实例共享。静态变量可以直接通过类名进行访问,其生命周期取决于类的生命周期。
而实例变量取决于类的实例。每创建一个实例,java虚拟机就会为实例变量分配一次内存,实例变量位于堆区中,
其生命周期取决于实例的生命周期。
39、什么是Java序列化,如何实现java序列化。
序列化:把Java对象转换为字节序列的过程。
反序列化:把字节序列恢复为Java对象的过程。
将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,implements Serializable只是为了标注
该对象是可被序列化的,
然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用
ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复
的话则用输入流。
40、是否可以从一个static方法内部发生对非static方法调用。
不可以。因为非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而
static方法调用时不需要创建对象,可以直接调用。也就是说,当一个static方法被调用时,可能还没有创建任何
实例对象,如果从一个static方法中发出对非static方法的调用,那个非static方法是关联到哪个对象上的呢?这
个逻辑无法成立,所以,一个static方法内部发出对非static方法的调用。
41、写clone方法,通常都有一行代码。
Clone 有缺省行为,super.clone();他负责产生正确大小的空间,并逐位复制。
42、Java中如何跳出多重嵌套循环
在Java中,要想跳出多重循环,可以在外面的循环语句前定义一个标号,然后在里层循环体的代码中使用带有标号
的break 语句,即可跳出外层循环。
43、说出常用类、包、接口,各举5个。
常用的类:BufferedReader BufferedWriter
FileReader FileWirter
String Integer
Java.util.Date,
Class,
HashMap
常用的接口 List
Map
Document
NodeList
Servlet,
, HttpServletResponse,
Transaction(hibernate)、
Session(Hibernate),
HttpSession
常用的包:java.lang
java.io
java.util
java.sql
javax.servlet
org.apache.strtuts.action
org.hibernate
44、Java中实现线程的方法,用关键字修饰同步方法。
java多线程实现方法主要有3种:继承Thread类、实现Runnable接口和使用ExecutorService、callable、future实
现有返回结果的多线程。其中前2方式线程执行完后都没有返回值,只有最后一种有返回值。
45、同步和异步区别。
同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。
异步是指:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。
46、线程同步的方法。
用什么关键字修饰同步方法 ? 用synchronized关键字修饰同步方法
同步有几种实现方法,都是什么?分别是synchronized,wait与notify
47、字符串常用方法,字符串转化为整型数方法,整型数转化为字符串方法。
二、Java高级
1、简述面向对象的理解,并举例说出你的理解。
面向对象是基于万物皆对象这个哲学观点. 把一个对象抽象成类,具体上就是把一个对象的静态特征和动态特征
抽象成属性和方法,也就是把一类事物的算法和数据结构封装在一个类之中,程序就是多个对象和互相之间的通信组
成的.
面向对象具有封装性,继承性,多态性.封装隐蔽了对象内部不需要暴露的细节,使得内部细节的变动跟外界脱
离,只依靠接口进行通信.封装性降低了编程的复杂性. 通过继承,使得新建一个类变得容易,一个类从派生类那里获
得其非私有的方法和公用属性的繁琐工作交给了编译器. 而 继承和实现接口和运行时的类型绑定机制 所产生的多
态,使得不同的类所产生的对象能够对相同的消息作出不同的反应,极大地提高了代码的通用性.
总之,面向对象的特性提高了大型程序的重用性和可维护性.
2、写出单例模式-。
//懒汉式单例类.在第一次调用的时候实例化自己
public class Singleton {
private Singleton() {}
private static Singleton single=null;
//静态工厂方法
public static Singleton getInstance() {
if (single == null) {
single = new Singleton();
}
return single;
}
}
3、写出一种11位手机号的正则表达式
^((13[0-9])|(15[^4,\D])|(18[0,3-9]))\d{8}$
4、实现字符串多个空格转换一个空格
public class ReplaceWithSingleCharacter {
public static void main(String[] args) {
String r = repaceWhiteSapce("Hello world I come from china");
System.out.println(r);
}
public static String repaceWhiteSapce(String original){
StringBuilder sb = new StringBuilder();
boolean isFirstSpace = false;//标记是否是第一个空格
// original = original.trim();//如果考虑开头和结尾有空格的情形
char c;
for(int i = 0; i < original.length(); i++){
c = original.charAt(i);
if(c == ' ' || c == ' ')//遇到空格字符时,先判断是不是第一个空格字符
{
if(!isFirstSpace)
{
sb.append(c);
isFirstSpace = true;
}
}
else{//遇到非空格字符时
sb.append(c);
isFirstSpace = false;
}
}
return sb.toString();
}
}
5、字符串常用方法,substring(),split()。
6、start()和run()区别。
start() 方法的作用是启动一个新线程,新线程会执行相应的run()方法,start()不能被重复调用。
而run()方法则只是普通的方法调用,在调用线程中顺序运行而已。
7、写出知道的设计模式。
1、单例模式:控制对象个数
2、装饰者模式:Java的IO系统中使用了较多的装饰模式,主要用于给一个对象添加更多更好的功能,比如说给输入
输出流添加缓冲
3、工厂模式:需要使用对象的时候使用工厂来创建对象
4、抽象工厂模式:可以创建多个系统的对象
5、适配器模式:在不同的系统之间做耦合的作用
6、建造者模式:将创建过程封装起来
7、观察者模式:当相应的事件发生的时候,通知注册了的对象,比如说ide的双击事件等
8、Webservice介绍。(这个我自己没用过,渣渣了)
Web service是一个平台独立的,松耦合的、自包含的、基于可编程的web的应用程序,可使用开放的XML标准来描述
、发布、发现、协调和配置这些应用程序,用于开发分布式的互操作的应用程序。
9、说出Servlet生命周期,Servlet和CGI区别。
Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请
求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。
与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求
,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。
10、sleep和wait的区别。
sleep指线程被调用时,占着CPU不工作,形象地说明为“占着CPU睡觉”,此时,系统的CPU部分资源被占用,其他
线程无法进入,会增加时间限制。
wait指线程处于进入等待状态,形象地说明为“等待使用CPU”,此时线程不占用任何资源,不增加时间限制。
11、什么是发射,如何实现。
是指在运行时状态中,获取类中的属性和方法,以及调用其中的方法的一种机制
通过Class.forName()方法加载字符串,就可以得到该字符串做代表的Class对象。
过类名调用class属性得到该类的Class对象。
如果是基本类型的包装类,则可以通过调用包装类的Type属性来获得该包装类的Class对象
调用实例的getClass()方法
12、检查字符串回文,实现英文中单词个数和单词次数统计(部分公司要求较高,需要手动编程,百度查找一些面
试常用编程题即可)。
public static void main(String []args){
Scanner sc=new Scanner(System.in);
Map<String,Integer> wordMap=new HashMap<String,Integer>();
System.out.println("Please input a String ...");
String testString=sc.nextLine();
sc.close();
String[] stringArray=testString.split(" ");
String word=null;
for(String e:stringArray){
word=e.trim();
if(word.equals("")) continue;
if(wordMap.containsKey(word)){
wordMap.put(word, wordMap.get(word)+1);
}else{
wordMap.put(word,1);
}
}
for(String e:wordMap.keySet()){
System.out.printf("The String contains word %s %s times.
",e,wordMap.get(e));
}
}
13、tcp/ip协议三次握手。
14、http协议几种请求方式,区别。
0,GET
1,HEAD
2,PUT
3,DELETE
4,POST
5,OPTIONS
15、Ajax请求是否可以实现同步。
Ajax请求默认的都是异步的
如果想同步 async设置为false就可以(默认是true)
16、隐藏URL方式。
采用post提交模式,一般get提交模式会显示表单中提交的数据,比如账号密码等信息,但是采用post方式提交,
URL中就会把这些信息进行进行加密的,此时通过地址栏就无法看到该参数了。
后台采用pathinfo模式的URL。一般PHP或者JSP都是支持的,此模式下,URL的传参将会被隐藏,地址栏里是按mvc模
式进行URL访问的。
17、描述取到一个网页内容的实现步骤,不需要具体实现过程(就是爬虫:取到网页的URL,然后从URL中国获取网页
内容),考察逻辑思维能力。
18、简述form表单提交post方法与get方法在字符编码、http协议方面的区别。
1)、Get是用来从服务器上获得数据,而Post是用来向服务器上传递数据。 (2)、Get将表单中数据的按照
variable=value的形式,添加到action所指向的URL后面,并且两者使用“?”连接,而各个变量之间使用“&”连接
;Post是将表单中的数据放在form的数据体中,按照变量和值相对应的方式,传递到action所指向URL。 (3)、
Get是不安全的,因为在传输过程,数据被放在请求的URL中,而如今现有的很多服务器、代理服务器或者用户代理
都会将请求URL记录到日志文件中,然后放在某个地方,这样就可能会有一些隐私的信息被第三方看到。另外,用户
也可以在浏览器上直接看到提交的数据,一些系统内部消息将会一同显示在用户面前。Post的所有操作对用户来说
都是不可见的。 (4)、Get传输的数据量小,这主要是因为受URL长度限制;而Post可以传输大量的数据,所以在
上传文件只能使用Post(当然还有一个原因,将在后面的提到)。 (5)、Get限制Form表单的数据集的值必须为
ASCII字符;而Post支持整个ISO10646字符集。 (6)、Get是Form的默认方法。
19、一个http请求从开始到结束都经历了哪些过程,简写流程图。
建立TCP连接
Web浏览器向Web服务器发送请求命令
Web浏览器发送请求头信息
Web服务器应答
Web服务器发送应答头信息
Web服务器向浏览器发送数据
Web服务器关闭TCP连接
三、框架(只介绍自己熟悉)
1、spring中的事务管理,支持哪几种方式,以及每种方式具体方法。
.Spring可以通过程序控制和声明两种方式管理事务。程序控制可以精确的控制事务回滚的节点,但是程序与业务代
码耦合在一起;声明方式低耦合,但是在对于复杂事务的控制上不如程序控制的方式。
使用tx标签配置的拦截器:
:注解
2、Spring常用注解。
@Component:标准一个普通的spring Bean类。
@Controller:标注一个控制器组件类。
@Service:标注一个业务逻辑组件类。
@Repository:标注一个DAO组件类。
3、hibernate的缓存级别。
Hibernate缓存包括两大类:Hibernate一级缓存和Hibernate二级缓存
Hibernate一级缓存又称为“Session的缓存”,它是内置的,不能被卸载(不能被卸载的意思就是这种缓存不具有
可选性,必须有的功能,不可以取消session缓存)。由于Session对象的生命周期通常对应一个数据库事务或者一
个应用事务,因此它的缓存是事务范围的缓存。第一级缓存是必需的,不允许而且事实上也无法卸除。在第一级缓
存中,持久化类的每个实例都具有唯一的OID。
Hibernate二级缓存又称为“SessionFactory的缓存”,由于SessionFactory对象的生命周期和应用程序的整个过程
对应,因此Hibernate二级缓存是进程范围或者集群范围的缓存,有可能出现并发问题,因此需要采用适当的并发访
问策略,该策略为被缓存的数据提供了事务隔离级别。第二级缓存是可选的,是一个可配置的插件,在默认情况下
,SessionFactory不会启用这个插件。
4、hibernate是什么,工作原理。
①读取并解析hibernate.cfg.xml配置文件;
②由hibernate.cfg.xml中的<mapping resource="com/xx/user.hbm.xml">读取并解析映射信息;
③.通过SessionFactory sf = config.buildSessionFactory();创建SessionFactory
④Session session = sf.openSession();//打开Sesssion
⑤Transaction tx = session.beginTransaction();//创建并启动事务Transation
⑥persistent operate操作数据,持久化操作
⑦tx.commit();//提交事务
⑧关闭Session
⑨关闭SesstionFactory
5、hibernate如何实现延迟加载。
Hibernate从数据库获取某一个对象数据、获取某一个对象的集合属性时,获取某一个对象所关联的另一个对象时
,
由于没有使用该对象的数据,hibernate并不从数据库加载真正的数据。而是为该对象创建一个代理对象来
代表这个对象,
这个对象上的所有属性都为默认值,只有在真正的需要该对象的数据时才创建这个真实的对象,真正的从数
据库中加载数据。
6、hibernate如何怎样类之间的关系。
类与类之间的关系主要体现在表与表之间的关系进行操作,它们都市对对象进行操作,程序中把所有的表与类都
映射在一起,它们通过配置文件中的many-to-one、one-to-many、many-to-many。
7、struts1是什么,工作流程。
8、struts2工作流程。
客户端浏览器发出HTTP请求。
根据web.xml配置,该请求被FilterDispatcher接收。
根据struts.xml配置,找到需要调用的Action类和方法, 并通过IoC方式,将值注入给Aciton。
Action调用业务逻辑组件处理业务逻辑,这一步包含表单验证。
Action执行完毕,根据struts.xml中的配置找到对应的返回结果result,并跳转到相应页面。
返回HTTP响应到客户端浏览器
9、spring是什么。
,Spring就是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
10、介绍IOC和AOP。
当某个角色需要另外一个角色协助的时候,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在
spring中创建被调用者的工作不再由调用者来完成,因此称为控制反转。创建被调用者的工作由spring来完成,然
后注入调用者
面向对象编程将程序分解成各个层次的对象,面向切面编程将程序运行过程分解成各个切面。
AOP从程序运行角度考虑程序的结构,提取业务处理过程的切面,oop是静态的抽象,aop是动态的抽,
是对应用执行过程中的步骤进行抽象,,从而获得步骤之间的逻辑划分
11、springmvc工作原理。
客户端请求提交到DispatcherServlet
由DispatcherServlet控制器查询一个或多个HandlerMapping,找到处理请求的Controller
DispatcherServlet将请求提交到Controller
Controller调用业务逻辑处理后,返回ModelAndView
DispatcherServlet查询一个或多个ViewResoler视图解析器,找到ModelAndView指定的视图
视图负责将结果显示到客户端
12、Mybatis工作流程。
工作原理
使用连接池
统一sql 存取xml
参数封装和结果映射
sql语句的复用封装
执行流程
页面发送请求到web.xml
由springMvc去找handler
前端控制器调用适配器执行handler
视图渲染展示
13、Mybatis与Hibernate区别。
mybatis:
1. 入门简单,即学即用,提供了数据库查询的自动对象绑定功能,而且延续了很好的SQL使用经验,对于没有那么
高的对象模型要求的项目来说,相当完美。
2. 可以进行更为细致的SQL优化,可以减少查询字段。
3. 缺点就是框架还是比较简陋,功能尚有缺失,虽然简化了数据绑定代码,但是整个底层数据库查询实际还是要自
己写的,工作量也比较大,而且不太容易适应快速数据库修改。
4. 二级缓存机制不佳。
hibernate:
1. 功能强大,数据库无关性好,O/R映射能力强,如果你对Hibernate相当精通,而且对Hibernate进行了适当的封
装,那么你的项目整个持久层代码会相当简单,需要写的代码很少,开发速度很快,非常爽。
2. 有更好的二级缓存机制,可以使用第三方缓存。
3. 缺点就是学习门槛不低,要精通门槛更高,而且怎么设计O/R映射,在性能和对象模型之间如何权衡取得平衡,
以及怎样用好Hibernate方面需要你的经验和能力都很强才行。
14、Mybatis框架传递参数方式。
第一种,实体对象的属性,这种比较简单,只要设置parameterType="com.zhdm.pojo.User"即可;
第二种,占位符传值:即用#{0},#{1}的方式接收,这种方式的弊端是如果参数有多个,要写多个占位符,顺序还
不能搞错;
第三种,用@Param注解传值,在Dao方法里的参数前面加上@Param(“provinceId"),即("provinceId") Integer
provinceId,那么在mapper中的sql语句里,就可以用#{provinceId}来获取参数值了。
15、简述Spring事务管理,使用什么设计模式实现。
aop
四、数据库
1、数据库里面的索引和约束是什么。
索引是对数据库表中一列或多列的值进行排序的一种结构。
数据库约束是为了保证数据的完整性(正确性)而实现的一套机制
2、用SQL语句实现Oracle分页查询。
select * from
(select a.*,rownum row_num from
(select * from mytable t order by t.id desc) a
) b
where b.row_num between 1 and 10
3、学生成绩表的常用查询(百度即可查到,常用的查询语法)
4、数据库性能优化常用基础知识,百万级数据优化(百度搜搜即可)。
5、left join ,right join用法。
6、了解Redis,memcache,MongoDB等,最好有项目使用经验。
7、如何防止SQL注入。
8、一个微博评论功能的数据库设计,部门表和员工表的设计,权限管理系统的数据库设计(数据库设计这个是一个
重点,面试了几家公司都问到了,而且是重点)。
9、简述悲观锁和乐观锁。
五、Linux基础
1、修改系统时间命令、修改权限命令、
date -s "20091112 18:30:50"
hmod [who] [+ | - | =] [mode] 文件名
六、前端基础
1、JavaScript中怎样选中一个checkbox,设置它无效的方式。
document.all.cb1[0].disabled = true;
2、form表单 的input可以设置readonly和disable区别。
Readonly只针对input(text / password)和textarea有效,而disabled对于所有的表单元素都有效,但是表单元素
在使用了disabled后,当我们将表单以POST或GET的方式提交的话,这个元素的值不会被传递出去,而readonly会将
该值传递出去(readonly接受值更改可以回传,disable接受改但不回传数据)。
3、javascript变量范围有什么不同,全局变量和局部变量。
全局变量:当前页面内有效
局部变量:方法内有效
4、列举3种数据类型。
主要数据类型:string, boolean, number
复合数据类型:function, object
5、javascript常用对象
还有数组对象(var array=new Array()) 还有数学对象(数学方法,Math.round()等等),Date对象(getTime
()),window对象用的更多(alert(),blur() 等方法document,location等属性),String对象(indexOf
(),subString(),spilt()等方法)
6、javascript中常用的取值赋值方法,对于单选按钮,复选框等的取值赋值等方法。(百度即可,javascript常用
基础)
7、jQuery取值赋值基本方法。
8、获取单选按钮的值,获取复选框的值,获取下拉列表的值,后去复选框的值,获取单选按钮组的值,文本框、文
本域赋值。
9、jquery的append与appendTo区别。
向所有p标签中追加一个单词china,则写法为 $("p").append("china");
使用appendTo这个方法是颠倒了常规的$(A).append(B)的操作,即不是把B追加到A中,而是把A追加到B中。
10、CSS盒子模型的4个顺序。
表示上填充padding-top为1px;
表示右填充padding-right为2px;
表示下填充padding-bottom为3px;
表示左填充padding-left为4px;