2023年自己的详细总结面试宝典_第1页
2023年自己的详细总结面试宝典_第2页
2023年自己的详细总结面试宝典_第3页
2023年自己的详细总结面试宝典_第4页
2023年自己的详细总结面试宝典_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Java面试宝典2023版(黄sir学生专用)TOC\o"1-3"\h\z\uHYPERLINK\l"_Toc"项目介绍 PAGEREF_Toc\h5HYPERLINK\l"_Toc"前言 PAGEREF_Toc\h7HYPERLINK\l"_Toc"一.Java基础部分ﻩPAGEREF_Toc\h9HYPERLINK\l"_Toc"1、 请说一下break和continue的区别?ﻩPAGEREF_Toc\h9HYPERLINK\l"_Toc"2、 switch中用于判断的表达式,可以用哪些数据类型?ﻩPAGEREF_Toc\h9HYPERLINK\l"_Toc"3、 char型变量中能不能存贮一个中文汉字?为什么? PAGEREF_Toc\h9HYPERLINK4、 静态变量和实例变量的区别? PAGEREF_Toc\h9HYPERLINK5、 是否可以从一个static方法内部发出对非static方法的调用? PAGEREF_Toc\h9HYPERLINK6、ﻩInteger与int的区别ﻩPAGEREF_Toc\h9HYPERLINK\l"_Toc"7、ﻩOverload和Override的区别。参数列表相同,返回值不同的方法,是否是重载方法? PAGEREF_Toc\h10HYPERLINK8、ﻩ接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类(concreteclass)? PAGEREF_Toc\h10HYPERLINK\l"_Toc"9、ﻩ面向对象有哪三大特性? PAGEREF_Toc\h10HYPERLINK12、ﻩString和StringBuffer的区别ﻩPAGEREF_Toc\h11HYPERLINK13、 数组有没有length()这个方法?String有没有length()这个方法? PAGEREF_Toc\h11HYPERLINK\l"_Toc"14、 final,finally,finalize的区别。 PAGEREF_Toc\h11HYPERLINK\l"_Toc"15、ﻩ请说一下你常用的几种异常?ﻩPAGEREF_Toc\h11HYPERLINK16、ﻩ线程的基本概念?线程的基本状态以及状态之间的关系ﻩPAGEREF_Toc\h12_Toc"18、 多线程有几种实现方法? PAGEREF_Toc\h12HYPERLINK\l"_Toc"19、 启动一个线程是用run()还是start()?. PAGEREF_Toc\h12HYPERLINK\l"_Toc"20、ﻩSet和List的区别,List和Map的区别 PAGEREF_Toc\h12HYPERLINK\l"_Toc"21、ﻩHashMap和Hashtable的区别 PAGEREF_Toc\h12HYPERLINK22、 说出ArrayList,LinkedList的区别ﻩPAGEREF_Toc\h13HYPERLINK\l"_Toc"23、ﻩ请描述一下JDK1.5有哪些新特性? PAGEREF_Toc\h13HYPERLINK\l"_Toc"24、ﻩ为什么要使用单例模式 PAGEREF_Toc\h13HYPERLINK\l"_Toc"二.Javaweb部分ﻩPAGEREF_Toc\h13HYPERLINK25、 什么是B/S和C/S? PAGEREF_Toc\h13HYPERLINK26、 如何设立servlet初始化参数?如何获取servlet初始化的参数?ﻩPAGEREF_Toc\h13HYPERLINK27、ﻩAjax是干么用的?有哪些常用的Ajax框架?ﻩPAGEREF_Toc\h14HYPERLINK\l"_Toc"28、 HTTP请求的GET与POST方式的区别ﻩPAGEREF_Toc\h14HYPERLINK30、 ServletAPI中forward()与redirect()的区别?ﻩPAGEREF_Toc\h14HYPERLINK\l"_Toc"31、ﻩjsp有哪些内置对象?ﻩPAGEREF_Toc\h14HYPERLINK\l"_Toc"32、 Session和Cookie的区别? PAGEREF_Toc\h15HYPERLINK\l"_Toc"33、ﻩ静态include和动态include的区别? PAGEREF_Toc\h15HYPERLINK\l"_Toc"三.数据库部分ﻩPAGEREF_Toc\h15HYPERLINK36、ﻩ什么是数据库中的视图,其好处是什么? PAGEREF_Toc\h16HYPERLINK\l"_Toc"37、 数据库中索引的好处是什么?一个数据库表,经常要进行添加和删除记录的操作,应当为该表建多个索引吗?ﻩPAGEREF_Toc\h16HYPERLINK38、 什么是数据库游标?ﻩ16HYPERLINK\l"_Toc"39、 什么是事务?ﻩPAGEREF_Toc\h16HYPERLINK\l"_Toc"40、ﻩ数据库中日记的作用是什么? PAGEREF_Toc\h16HYPERLINK\l"_Toc"41、ﻩ什么是主键和外键? PAGEREF_Toc\h17HYPERLINK42、 什么是数据库中的存储过程和触发器?存储过程的好处? PAGEREF_Toc\h17HYPERLINK\l"_Toc"43、 内连接和外连接的区别? PAGEREF_Toc\h17HYPERLINK\l"_Toc"44、ﻩ请介绍一下数据库连接池技术? PAGEREF_Toc\h17HYPERLINK\l"_Toc"45、ﻩMySQL、Oracle、SQLServer各数据库服务的端标语?ﻩPAGEREF_Toc\h17HYPERLINK\l"_Toc"46、 Oracle和SQLServer的分页有什么区别? PAGEREF_Toc\h18HYPERLINK\l"_Toc"47、 如何对数据库进行优化?ﻩPAGEREF_Toc\h18HYPERLINK\l"_Toc"48、 JDBC连接数据库的环节?ﻩPAGEREF_Toc\h18HYPERLINK49、ﻩJDBC中的PreparedStatement相比Statement的好处ﻩPAGEREF_Toc\h18HYPERLINK四.其他部分 PAGEREF_Toc\h18HYPERLINK50、 xml有哪些解析技术?区别是什么? PAGEREF_Toc\h18HYPERLINK\l"_Toc"51、 xml文档在实际项目中有哪些应用? PAGEREF_Toc\h19HYPERLINK\l"_Toc"五.流行框架与技术ﻩPAGEREF_Toc\h19HYPERLINK52、 什么是MVC?常用的MVC框架有哪些?ﻩPAGEREF_Toc\h19HYPERLINK\l"_Toc"53、ﻩ谈谈Struts的工作流程(或运营原理)ﻩPAGEREF_Toc\h19HYPERLINK\l"_Toc"54、 谈谈Struts2的工作流程(或运营原理) PAGEREF_Toc\h20HYPERLINK\l"_Toc"55、ﻩ说说struts1与struts2的区别ﻩPAGEREF_Toc\h20HYPERLINK57、 什么是Hibernate,好处是什么? PAGEREF_Toc\h21HYPERLINK58、ﻩhibernate中的update()和saveOrUpdate()的区别ﻩPAGEREF_Toc\h21HYPERLINK\l"_Toc"59、ﻩhibernate中持久化对象的三种状态?ﻩPAGEREF_Toc\h21HYPERLINK\l"_Toc"60、 session的load()和get()的区别 PAGEREF_Toc\h22HYPERLINK\l"_Toc"61、 iBatis与Hibernate有什么不同? PAGEREF_Toc\h22HYPERLINK63、 什么是AOP?谈谈你对他的理解。ﻩPAGEREF_Toc\h23HYPERLINK64、 什么是IOC和DI?ﻩPAGEREF_Toc\h23HYPERLINK65、ﻩ依赖注入的两种方式? PAGEREF_Toc\h23HYPERLINK\l"_Toc"66、 SpringIOC容器中Bean默认的范围(scope)? 23ﻬ项目介绍在进行技术面试前,提醒大家,必须要准备好项目介绍,即需要准备好你的简历中列的所有项目的项目介绍!面试时关于项目,面试官常见的问题及回答(以银行柜台系统为例):你给我简要介绍一下银行柜台系统?1、简易银行柜台系统是模拟银行柜台的基本功能而做的一个系统。2、系统分前台和后台部分,前台部分是银行柜台人员操作的,涉及:注册登录模块、开销户模块、帐号管理模块、存取钱转账模块、柜台人员信息管理;后台部分是银行管理者操作的,涉及查看日记模块、管理柜台人员信息模块;3、我重要负责的是前台的所有功能;你具体介绍一下你负责的模块的功能?1、我负责的注册登录模块和柜台人员信息模块事实上是管理柜台人员信息的,内容比较简朴;2、开销户模块、帐号管理模块、存取钱转账模块是为银行储户服务的模块。其中开销户就是为储户开户、销户的功能,账户管理模块就是帮储户冻结帐号、修改密码等功能,存取钱转账模块就是为储户存钱、取钱,帮储户转账的功能;这个项目几个人做的?用了多长时间?这个项目比较小,由2个人合作完毕的,我负责的是前台部分;项目大约用了4天左右的时间;这个项目使用了什么技术?这个项目使用Struts2、Hibernate3和MySQL你在做这个项目的时候,碰到了什么困难,怎么解决的?比如在Hiberante的使用,关于表之间关联关系的配置,我开始操作的时候不太熟悉,后来通过查文档、和其他同学沟通的方式,这个问题也得到了解决;备注:假如你在这里提到了表之间关联关系的配置,那么这个问题面试官非常有也许接下去就问这个技术问题,所以务必认真准备这个技术问题。ﻬ前言这套面试题重要目的是帮助那些还没有java软件开发实际工作经验,而正在努力寻找java软件开发工作的学生在笔试/面试时更好地赢得好的结果。由于这套试题涉及的范围很泛,很广,很杂,大家不也许一天两天就看完和学完这套面试宝典,即使你已经学过了有关的技术,那么至少也需要半个月的时间才干消化和掌握这套面试宝典,所以,大家应当早作准备,从拿到这套面试宝典之日起,就要坚持在天天闲暇之余学习其中几道题目,日积月累,等到出去面试时,一切都水到渠成,面试时就自然会游刃有余了。答题时,先答是什么,再答有什么作用,要注意什么(这条可以没有)比如说面试官问:给我介绍一下ORM?较好回答:ORM就是ObjectRelationalMapping,就是对象关系映射;作用:我们在写程序的时候,用的是面向对象的方法,但是在关系型数据库里,存的是一条条的记录;为了用纯面向对象的思想解决问题,所以需要将程序中的对象和数据库中的记录建立起映射关系,ORM就是将对象和数据库中的记录建立起映射的技术;答案要层次分明,条理清楚,从这些表面的东西也可以看出一个人的习惯、办事风格、条理等。答题不局限于什么格式和形式,就是要将自己的掌握的技术内容展现出来,比如可以采用举例的说法:需要特别注意的是,由于面试官自身水平层次不齐,不要由于人家题目问的模棱两可(或者题目问的不准确),你就心里胆怯和没底气了,不敢回答了。你要大胆地提出对方题目中你不清楚的地方,希望对方能重新明确的提出问题?例如,你可以问:您提的问题,我刚才没有完全听明白,能不能再说一遍。

一.Java基础部分请说一下break和continue的区别?1、这两个语句都可以用于跳出循环的;2、break是中止循环,执行循环体以后的语句,而continue是跳出本次循环,执行下一次循环;3、break还可以用在switch结构中,用于跳出switch结构.4、break假如用于多重循环中,可以跳出内部循环,直接进入外部循环.switch中用于判断的表达式,可以用哪些数据类型?1、可以是char、byte、short、int,不可以是long、String等其他类型;2、从JDK1.7开始,支持String类型;char型变量中能不能存贮一个中文汉字?为什么?Java里采用了Unicode编码格式,Unicode编码中一个char型占用2个字节,而一个汉字也是占用2个字节,所以可以存储中文汉字。备注:C语言里,char占用1个字节,不用存汉字。静态变量和实例变量的区别?在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加。在程序运营时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分派空间,才干使用这个实例变量。静态变量不属于某个实例对象,而是属于类,所以也称为类变量,不用创建任何实例对象,静态变量就会被分派空间,静态变量就可以被使用了。总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用。注意:也许涉及局部变量的考核问题?是否可以从一个static方法内部发出对非static方法的调用?不可以。由于非static方法是要与对象关联在一起的,必须创建一个对象后,才可以在该对象上进行方法调用,而static方法调用时不需要创建对象,可以直接调用。也就是说,当一个static方法被调用时,也许还没有创建任何实例对象,假如从一个static方法中发出对非static方法的调用,那个非static方法是关联到哪个对象上的呢?这个逻辑无法成立,所以,一个static方法内部发出对非static方法的调用。实例方法与静态方法的区别?抽象方法?静态方法:用static声明的方法,不需要对象,就可以调用,在调用该方法时,不会将对象的引用传递给它。实例方法:就是没有static前缀的一类的一般方法,被对象拥有。抽象方法:就是以abstract修饰的方法,这种方法只声明返回的数据类型、方法名称和所需要的参数,没有方法体,抽象方法只需要声明,不需要实现。Integer与int的区别包装类与基本类型的关系1、int是基本数据类型,Integer是包装类;2、int的默认值是0,Interger的默认值是null;3、Boolean—booleanDouble—doubleCharacter-charFloatfloat:valueOf()4、包装类和字符串之间的转换:包装类提供了parseXXX()方法Overload和Override的区别。参数列表相同,返回值不同的方法,是否是重载方法?Overload是重载的意思,Override是覆盖的意思,也就是重写。重载是指在一个类里,方法名相同,参数不同;重写是指子类继承父类,子类里重新编写了父类中的同名(同参数)方法,也就是覆盖了父类的方法;不是!由于重载必须规定参数列表不同!在OOP中,什么是方法的重载,什么是方法的重写?方法的重载:指的是一个类中可以定义相同的名字,但参数不同的多个方法,调用时会根据不同的参数表选择相应的方法,注意:只有返回值不同不构成方法的重载、只有形参的名称的不同不构成方法的重载。方法的重写:重写方法必须和被重写的方法具有相同的方法名称、参数列表和返回类型。重写方法不能使用比被重写方法更严格的访问权限。接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承具体类(concreteclass)?接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承具体类。备注:只要明白了接口和抽象类的本质和作用,这些问题都很好回答。只有记住抽象类与普通类的唯一区别就是不能创建实例对象和允许有abstract方法。Servlet:接口HttpServlet(抽象类)GernericServlet面向对象有哪三大特性?1、面向对象有三大特性,分别是:封装、继承和多态。2、封装:面向对象的封装就是把描述一个对象的属性和行为的代码封装在一个类中,有些属性是不希望公开的,或者说被其他对象访问的,所以我们使用private修饰该属性,使其隐藏起来;类中提供了方法(用public修饰),常用的是get、set方法,可以操作这些被隐藏的属性,其他类可以通过调用这些方法,改变隐藏属性的值!下面的回答是更高规定,不需要学生必须掌握:封装是保证软件部件具有优良的模块性的基础,封装的目的就是要实现软件部件的“高内聚、低耦合”,防止程序互相依赖性而带来的变动影响。在面向对象的编程语言中,对象是封装的最基本单位,面向对象的封装比传统语言的封装更为清楚、更为有力。3、继承:在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,使用extends关键字实现继承;子类中可以加入若干新的内容,或修改本来的方法使之更适合特殊的需要,这就是继承。继承是子类自动共享父类数据和方法的机制,这是类之间的一种关系,提高了软件的可重用性和可扩展性。4、多态:多态就是在声明时使用父类,在实现或调用时使用品体的子类;即不修改程序代码就可以改变程序运营时所绑定的具体代码,让程序可以选择多个运营状态,这就是多态性,多态增强了软件的灵活性和扩展性。这里可以举个例子,比如声明时使用的是动物类,调用时传递的是一个猫类(动物类的子类)的对象,具体执行父类里动物——吃的方法时,实际执行的是猫——吃的方法。abstractclass和interface有什么区别?ﻩ1、抽象类里面可以用普通方法,而接口中的方法所有都是抽象的;2、在应用范围上来说,接口往往在程序设计的时候,用来定义程序模块的功能,方便各模块协同工作;抽象类是对相似类进行抽象,形成一个抽象的父类可供重用!有了抽象类为什么还需要接口?继承的局限性:单根性Java编程思想所制:面向接口编程String是最基本的数据类型吗?1、String是个类,不是基本数据类型;引用数据类型(array,String,类(自定义的类和系统提供的类),接口)2、基本数据类型涉及byte、int、char、long、float、double、boolean和short。String和StringBuffer的区别?3、StringBuffer与StringBuilder区别1、String是个不可变长度的字符串,而StringBuffer是个可变长度的字符串;2、在对String类进行操作的时候(例如增长字符),事实上是在内存中产生了一个新的String对象;而StringBuffer是给原对象增长字符,不是新创建一个对象;3、StringBuilder:线程非安全的,可变字符序列,但是效率高ﻫStringBuffer:"线程安全的,可变字符序列,但是效率低4、什么叫线程安全?

jvm有一个mainmemory(主存储器),而每个线程有自己的workingmemory(工作的存储器),一个线程对一个variable(变量)进行操作时,都要在自己的workingmemory里面建立一个copy,操作完之后再写入main

memory。多个线程同时操作同一个variable,就也许会出现不可预知的结果,即线程不安全。加锁来实现线程安全,每个线程在获得这个锁之后,要执行完(load到workingmemory

->

use&assign

->

store到mainmemory)自己的一系列的过程,才会释放它得到的锁。这样就实现了所谓的线程安全。数组有没有length()这个方法?String有没有length()这个方法?数组没有length()这个方法,有length的属性。String有length()这个方法。final,finally,finalize的区别。final用于声明属性,方法和类,分别表达属性不可变,方法不可覆盖,类不可继承。finally是异常解决语句结构的一部分,表达总是执行。finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文献等。JVM不保证此方法总被调用请说一下你常用的几种异常?比如:空指针异常;数组下标越界;类型转换异常;算数异常,例如除数为零;IO异常,比如说找不到文献;找不到类异常;sql异常,例如sql语句不能正常运营;…线程的基本概念?线程的基本状态以及状态之间的关系1、是程序执行流的最小HYPERLINK""\t"_blank"单元。在单个程序中同时运营多个线程完毕不同的工作,称为HYPERLINK""\t"_blank"多线程。2、开始时:就绪状态,等待cpu调用后进入运营状态,运营过程中碰到阻塞事件,进入阻塞状态,等待阻塞事件结束后,重新进入就绪状态;假如没有阻塞事件,运营结束后,则进入结束状态。sleep()和wait()有什么区别?sleep就是暂停当前线程一段时间,把cpu让给其他线程使用,届时后会自动恢复。调用sleep不会释放对象锁。wait方法导致本线程放弃对象锁,进入等待,只有等到本对象的notify方法(或notifyAll)后本线程才进入就绪状态,等待执行。多线程有几种实现方法?多线程有两种实现方法,分别是继承Thread类与实现Runnable接口启动一个线程是用run()还是start()?.启动一个线程是调用start()方法,使线程就绪状态,以后可以被调度为运营状态,一个线程必须关联一些具体的执行代码,run()方法是该线程所关联的执行代码。Set和List的区别,List和Map的区别1、Set是无序的,元素不可反复;List是有序的,元素可以反复;他俩同为Collection的子接口2、List存储的是单个对象的集合(有序的),Map存储的是键值对为对象的集合(无序的);HashMap和Hashtable的区别1、HashMap和Hashtable都完毕了Map接口;2、HashMap非线程安全的,而Hashtable是线程安全的,因素是Hashtable里面的方法使用Synchronize关键字修饰的;3、由于Hashtable使用了Synchronize关键字修饰,其性能比较差;(具体因素不做具体说明)说出ArrayList,LinkedList的区别1、ArrayList和LinkedList都完毕了List接口;2、ArrayList底层是用数组实现的,而LinkedList使用链表实现的;3、ArrayList在插入、删除时,需要移动数组元素,故性能较差;但是在查询时,由于是连续的数组,所以查询速度快;LinkedList正好相反。请描述一下JDK1.5有哪些新特性?//不是很懂1、泛型2、For-Each循环3、自动装包/拆包4、枚举5、静态导入6、Annotation为什么要使用单例模式(进行补充,使其成为典型)1、避免在开发程序的时候,创建出一个类的多个实例(占用空间,性能问题),所以使用单例模式,保证该类只创建一个对象;2、一般单例模式通常有两种形式:它的构造函数为private的,必须有一个静态方法返回自己的实例;实行形式有两种,懒汉式和饿汉式;所谓的饿汉式就是在声明实例的时候直接初始化对象,而懒汉式是先声明一个空对象,在静态方法中实例化该对象并返回。二.Javaweb部分什么是B/S和C/S?1、B/S:浏览器服务器模式;2、C/S:客户端服务器模式;如何设立servlet初始化参数?如何获取servlet初始化的参数?1、在web.xml里为每一个Servlet配置初始化参数;2、通过ServletConfig对象实现对Servlet初始化对象的获取;Ajax是干么用的?有哪些常用的Ajax架?(重点应用)1、Ajax是采用了异步请求的方式,解决了页面无刷新式提交的问题,改善了页面的用户体验效果;常用在google地图,注册时用户名反复性校验,百度搜索下拉列表框;2、常用的Ajax框架:底层框架:JQuery、HYPERLINK""\t"_blank"Prototype;高层框架:DWR、DOJO、EXTJS、YUI;HTTP请求的GET与POST方式的区别(描述的具体点)Get和Post都是提交表单的方式之一;1、get方式表单中的数据放到HTTP数据包的头部,post方式放到body中;2、get方式提交后,数据会在地址栏中显示出来,而post方式不会,所以post更安全;3、get方式在提交数据的时候,数据长度是有限制的;而post方式在理论上对提交数据的大小是无限制的;4、get提交表单永远使用字符方式提交;而post方式提交表单可以是字节方式也可以是字符方式说一说Servlet的生命周期?Servlet里常用的方法有哪些?Servlet生命周期涉及加载和实例化、初始化、解决请求以及服务结束;Servlet生命周期是由容器进行管理的,不可以被程序员手工销毁;”0Servlet被服务器实例化后(用户第一次访问该Servlet时),容器运营其init方法,请求到达时运营其service方法,service方法自动派遣运营与请求相应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。ServletAPI中forward()与redirect()的区别?(具体、聊、)1、forward是请求转发,而redirect是重定向;2、请求转发是服务器将客户端的请求转发到另一个地址去解决,然后将响应返回给客户端;事实上是1次请求,1次响应,对客户端而言是透明的;而重定向是服务器根据客户端发来的请求,返回给一个客户端一个新的地址,客户端根据这个返回的地址再发送请求,得到响应;事实上是2次请求,2次响应,并且客户端的地址是第二次访问的地址;3、转发只能转发到自己的资源,重定向无限制。jsp有哪些内置对象?(各自的作用)JSP共有以下9个内置的对象:(JSP内置对象即无需声明就可以直接使用的对象实例)1、request用户端请求客户端的请求信息被封装在request对象中,通过它才干了解到客户的需求,从这个对象中可以取出客户端用户提交的数据或者是参数2、response网页传回用户端的回应服务器端向客户端返回的数据,从这个对象中可以取出部分与服务器互动的数据和信息,只有接受这个对象的页面才可以访问这个对象,服务器需要对客户端进行某些操作的时候也需要response对象,例如服务器要在客户端生成Cookies,那么这时候response对象就是一个很好的选择3、pageContext网页的属性是在这里管理(1)只合用于当前页面范围,即超过这个页面就不可以使用了4、session与请求有关的会话期(1)维护客户端用户和服务器端状态,从这个对象中可以去除用户和服务器交互过程中的数据和信息。这个对象在用户关闭浏览器离开Web应用之前一直有效。保存的内容是用户与服务器整个交互过程中的信息,假如是想在整个交互的过程中都可以访问到信息,就可以选择存放在session对象中)(2)Session的生命周期:session存储在服务器端,Sessinon在用户访问第一次访问服务器时创建,需要注意只有访问JSP、Servlet等程序时才会创建Session,只访问HTML、IMAGE等静态资源并不会创建Session,可调用request.getSession(true)强制生成Session。session什么时候失效?1.服务器会把长时间没有活动的Session从服务器内存中清除,此时Session便失效。Tomcat中Session的默认失效时间为20分钟。2.调用Session的invalidate方法。5、application1、在服务器一开始执行服务,到服务器关闭为止。它的范围最大,生存周期最长2、应用:在线人员记录、在线人员名单列表6、out用来传送回应的输出7、config8、pageJSP网页自身9、exception页面中的异常和错误Session和Cookie的区别?(之间的关联)1、Session和Cookie都是会话跟踪技术;2、Session是保存在服务器端的技术(保持用户登录状态的检查常用Session),而Cookie是保存在客户端的技术;3、Cookie只能存字符串,Session可以存对象;解释:session机制采用的是一种在客户端与服务器之间保持状态的解决方案。同时我们也看到,由于采用服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制也许需要借助于cookie机制来达成保存标记的目的。当程序需要为某个客户端的请求创建一个session时,服务器一方面检查这个客户端的请求里是否已包含了一个session标记(称为sessionid),假如已包含则说明以前已经为此客户端创建过session,服务器就按照sessionid把这个session检索出来使用(检索不到,会HYPERLINK""\t""新建一个),假如客户端请求不包含sessionid,则为此客户端创建一个session并且生成一个与此session相关联的sessionid,sessionid的值应当是一个既不会反复,又不容易被找到规律以仿造的字符串,这个sessionid将被在本次响应中返回给客户端保存。ﻫ保存这个sessionid的方式可以采用cookie,这样在交互过程中浏览器可以自动的按照规则把这个标记发挥给服务器。一般这个cookie的名字都是类似于SEEESIONID。但cookie可以被人为的严禁,则必须有其他机制以便在cookie被严禁时仍然可以把sessionid传递回服务器。因素:http协议是无状态协议,通俗点说就是当你发送一次请求道服务器端,然后再次发送请求到服务器端,服务器是不知道你的这一次请求和上一次请求是来源于同一个人发送的。session就能很好解决这个问题静态include和动态include的区别?(不大懂)1、静态包含属于编译期包含(包含页面和被包含的页面在编译期形成一个jsp文献),动态包含属于运营期包含(包含页面和被包含的页面分别编译成两个文献,然后运营时把两个文献组装起来);2、动态包含可以带参数;1)补充:动态INCLUDE用jsp:include动作实现

<jsp:includepage="included.jsp"flush="true"/>ﻫ它总是会检查所含文献中的变化,适合用于包含动态页面,并且可以带参数ﻫ<%@includefile="included.htm"%>

静态INCLUDE用include伪码实现,定不会检查所含文献的合用于包含静态页面变化,2)动态HYPERLINK""\t""INCLUDE在使用的时候,会先解析所要包含的页面(你例子中的HYPERLINK""included.jsp),解析后在和主页面放到一起显示;

静态HYPERLINK""INCLUDE在使用的时候,不会解析所要包含的页面(你例子中的included.htm),也就是说,不管你的included.htm中有什么,我的任务就是把你包含并显示,其他的一概不管三.数据库部分重要备注:此数据库部分面试题不含SQL语句(含各类函数)面试具体的题目,关于SQL语句的使用,请学生自己准备!SQL语言涉及哪三种类型,每种类型又涉及哪些语句?数据定义:createTable,AlterTable,DropTable,Create/DropIndex等(学生需要了解)数据操纵:select,insert,update,delete(这个最重要,学生需要开展学习准备)数据控制:grant,revokeSQL语言包含4个部分:数据定义语言(DDL),例如:CREATE、DROP、ALTER等语句。数据操作语言(DML),例如:INSERT(插入)、UPDATE(修改)、DELETE(删除)语句。数据查询语言(DQL),例如:SELECT语句。数据控制语言(DCL),例如:GRANT、REVOKE、COMMIT、ROLLBACK等语句。SQL语言涉及三种重要程序设计语言类别的语句:数据定义语言(DDL),数据操作语言(DML)及数据控制语言(DCL)。Sql题表A(varchar(32)NAME,intGRADE)数据:ZHANGSHAN80,LISI60,WANGWU84ﻫ表B(varchar(32)NAME,intAGE)

数据:ZHANGSHAN26,LISI24,WANGWU26,WUTIAN26ﻫ1)写SQL语句得到如下查询结果:

NAME

GRADE

AGE

ZHANGSHAN

80

26

LISI

60

24ﻫWANGWU

84

26ﻫWUTIAN

NULL

26答:select*fromArightjoinBonA.NAME=B.NAMEHYPERLINK""\t""LEFTHYPERLINK""JOIN或HYPERLINK""LEFTOUTERHYPERLINK""\t""JOIN。ﻫ左向外联接的结果集涉及HYPERLINK""\t""LEFTOUTER子句中指定的左表的所有行,而不仅仅是联接列所匹配的行。假如左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。

HYPERLINK""RIGHTHYPERLINK""\t""JOIN或HYPERLINK""\t""RIGHTOUTERJOIN。

右向外联接是左向外联接的反向联接。将返回右表的所有行。假如右表的某行在左表中没有匹配行,则将为左表返回空值。2)写SQl语句根据名字(NAME)相同按年龄(AGE)分组得到不同年龄的人的平均成绩,并写出结果。答:avg(grade)groupbyname,age在emp表中略掉名字中不具有‘LL’的雇员,然后按照部门进行分组,按部门平均薪水大于2023的组,按照平均薪资的倒序排列。答:Selectavg(sal)FromempWhereenamenotlike‘%LL’GroupbydeptnoHavingsag(sal)>2023Orderbyavg(sal)desc;平均薪资最高的部门的部门编号答:SelectdeptnoFromempGroupbydeptnoWhereavg(sal)=selectmax(avg(sal))fromempgroupbydeptno)求部门平均薪资的等级答:Selectdeptno,avg_sal,gradeFromselect(deptno,avg(sal)avg_salfromempgroupbydeptno)t,SalgradesWhereavg_salbetweens.losalands.hisal比普通用户的最高薪资还要高的经理人的名称Selectename,salFromempWheresal>(max(sal)fromempwhereempnonotin(selectdistinctmgrfromempwheremgrisnotnull)Andempnoin(Selectdistinctmgrfromempwheremgridnotnull))求薪资最高的五名员工Selectename,salFrom(selectsalfromemporderbysaldesc)Whererownum<=5薪资最高的第六到第十位雇员Selectename,salFrom(selectename,sal,rownumrfrom(selectmax(sal)fromemporderbysaldescWhererownum<10)Wherer>5andr<10简要介绍一下数据库有哪些常用对象?常用的数据库对象涉及:表、视图、索引、函数、存储过程、触发器等。什么是数据库中的视图,其好处是什么?1、视图是一个虚拟表,是由查询语句产生的,不是真实存在的表;同真实的表同样,视图包含一系列带有名称的列和行数据。2、它重要出于两种因素:安全因素,视图可以隐藏一些数据,如:员工信息表,可以用视图只显示姓名,HYPERLINK""\t"_blank"年龄、性别等通用信息,而隐藏工资等敏感信息,另一因素是多表连接,可使复杂的查询易于理解和使用。数据库中索引的好处是什么?一个数据库表,经常要进行添加和删除记录的操作,应当为该表建多个索引吗?1、索引是一种特殊的查询表,简朴的理解就是在数据库中,将数据按一定的顺序进行排列(分物理索引:只有1个和逻辑索引:可以有多个),用来快速访问数据库表格或者视图里的数据,查询的时候,可以有效提高查询速度。2、假如一个表要频繁的进行添加和删除记录的操作(不是查询),不建议建立多个索引,由于添加和删除记录,都需要调整索引,增长数据库承担,影响性能。什么是数据库游标?1、游标是对查询出来的结果集进行解决的一个对象,游标可以定在该集合中的特定行,从而根据游标从结果集中检索出一行或多行。什么是事务?1、事务是一系列的HYPERLINK""\t"_blank"数据库操作,是数据库应用的基本逻辑单位,事务由事务开始(begintransaction)和事务结束(endtransaction)之间执行的全体操作组成。2、事务具有如下特性:(其中原子性最为重要,必须掌握)原子性(atomicity)一个事务是一个不可分割的工作单位,事务中涉及的诸操作要么都做,要么都不做。一致性(consistency)事务必须是使HYPERLINK""\t"_blank"数据库从一个一致性状态变到另一个一致性状态。隔离性(isolation)一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。持久性(durability)连续性也称永久性(permanence),指一个事务一旦提交,它对HYPERLINK""\t"_blank"数据库中数据的改变就应当是永久性的。接下来的其他操作或故障不应当对其有任何影响。数据库中日记的作用是什么?日记的作用是记录所有对数据库数据的修改,重要是保护数据库以防止故障发生后,对数据库进行恢复;什么是主键和外键?1、主键和外键是用来建立数据库表之间关联关系的;2、举例来说,有一个学生表(学生学号、姓名、班级编号等信息)和一个班级表(班级编号、班级名称),通过编辑编号建立班级表和学生表之间一对多的关联,则班级表中班级编号是主键,学生表中的班级编号是外键。主键是表格里的(一个或多个)字段,只用来定义表格里的行;主键里的值总是唯一的。外键是一个用来建立两个表格之间关系的约束。这种关系一般都涉及一个表格里的主键字段与此外一个表(也许是同一表)里的字段。那么这些相连的字段就是外键。什么是数据库中的存储过程和触发器?存储过程的好处?1、数据库中的存储过程是用于定义的一系列的sql语句的集合(含控制语句),涉及特定表和其他对象的任务,用户可以调用存储过程(有些类似java里的方法);2、触发器(trigger)是个特殊的HYPERLINK""\t"_blank"存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,HYPERLINK""\t"_blank"比如当对一个表进行操作(insert,delete,update)时就会激活它执行。3、存储过程的好处:SQL语句已经预编绎过了,因此运营的速度比较快;常用功能的集合,提高了重用性;用户只需要调用存储过程,不需要逐个写存储过程中的语句,减少了数据传输量;内连接和外连接的区别?1、内连接是保证两个表中所有的行都要满足连接条件,而外连接则不然。2、在外连接中,某些不满条件的列也会显示出来,也就是说,只限制其中一个表的行,而不限制另一个表的行。分左连接、右连接、全连接(笛卡尔集)三种。请介绍一下数据库连接池技术?1、数据库连接池技术,就是数据库启动时会建立一定数量的数据库连接(也称为池连接),并一直维持不少于此数目的池连接。2、客户端程序需要连接数据库时,数据库连接池会返回一个未使用的池连接给数据库使用。假如当前没有空闲连接,数据库连接池就新建一定数量的连接。当使用的池连接调用完毕后,连接池将此连接表记为空闲,其他调用就可以使用这个连接。这样做的目的是提高了应用程序访问数据库的性能。MySQL、Oracle、SQLServer各数据库服务的端标语?1、MySQL:33062、Oracle:15213、SQLServer:1433Oracle和SQLServer的分页有什么区别?在SQLServer中使用TOP分页,在Oracle中用ROWNUM,或分析函数ROW_NUMBER,在MySQL中用Limit。mysql和oracle区别1.组函数用法规则mysql中组函数在select语句中可以随意使用,但在oracle中假如查询语句中有组函数,那其他列名必须是组函数解决过的,或者是groupby子句中的列否则报错2.自动增长的数据类型解决MYSQL有自动增长的数据类型,插入记录时不用操作此字段,会自动获得数据值。ORACLE没有自动增长的数据类型,需要建立一个自动增长的序列号,插入记录时要把序列号的下一个值赋于此字段。3.单引号的解决MYSQL里可以用双引号包起字符串,ORACLE里只可以用单引号包起字符串。如何对数据库进行优化?1、先优化SQL语句;2、表级别优化:比如说建立索引;3、数据库级别优化:比如说数据库参数设立,例如连接池数量;JDBC连接数据库的环节?加载JDBC驱动程序在连接数据库之前要把连接数据库的驱动加载到JVM(Java虚拟机),ﻫ这通过java.lang.Class类的静态方法forName(StringclassName)实现。创建数据库的连接;要连接数据库,需要向java.sql.DriverManager请求并获得Connection对象,ﻫ该对象就代表一个数据库的连接。ﻫ使用DriverManager的getConnectin(Stringurl,Stringusername,ﻫStringpassword)方法传入指定的欲连接的数据库的途径、数据库的用户名和ﻫ密码来获得。创建一个Statement对象;要执行SQL语句,必须获得java.sql.Statement实例,Statement实例分为以下3

种类型:

1、执行静态SQL语句?通常通过Statement实例实现。

2、执行动态SQL语句?通常通过PreparedStatement实例实现。ﻫ3、执行数据库存储过程。通常通过CallableStatement实例实现。执行SQL语句;Statement接口提供了三种执行SQL语句的方法:executeQuery、executeUpdate

和executeﻫ1、ResultSetexecuteQuery(StringsqlString):执行查询数据库的SQL语句ﻫ,返回一个结果集(ResultSet)对象。

2、intexecuteUpdate(StringsqlString):用于执行INSERT、UPDATE或

DELETE语句以及SQLDDL语句,如:CREATETABLE和DROPTABLE等ﻫ3、execute(sqlString):用于执行返回多个结果集、多个更新计数或两者组合的返回并解决结果;两种情况:1、执行更新返回的是本次操作影响到的记录数。

2、执行查询返回的结果是一个ResultSet对象。ﻫResultSet包含符合SQL语句中条件的所有行,并且它通过一套get方法提供了对这些ﻫ行中数据的访问。ﻫ使用结果集(ResultSet)对象的访问方法获取数据:关闭连接;操作完毕以后要把所有使用的JDBC对象全都关闭,以释放JDBC资源,关闭顺序和声

明顺序相反:

1、关闭记录集

2、关闭声明

3、关闭连接对象JDBC中的PreparedStatement相比Statement的好处1、PreparedStatement是Statement的子接口;2、PreparedStatement有绑定参数的功能,避免SQL注入,安全性更好;3、PreparedStatement对SQL语句有预编译的功能,所以性能更好;四.其他部分xml有哪些解析技术?区别是什么?XML的DOM其实就是映射在内存中的数据.XML是树型结构,操作很麻烦.DOM的出现就是解决这个问题的.运用DOM,可以轻松地在节点间进行读取,增长,删除等一系列操作User.dir(用户工作目录)1、有DOM,SAX等2、DOM:解决大型文献时性能比较差,因素是DOM需要把整个文档装入内存,适合对XML的随机访问;DOM:将文档一次性所有加载到内存中然后构建DOM树,根据XML文档的属性文本建出相应的结点。优点:可以整体的把握文档,对文档结点进行增删改。缺陷:文献大时加载有延迟,内存消耗严重SAX:是事件驱动型的XML解析方式,它顺序读取XML文献,不需要一次所有装载整个文献,当碰到像文档开头、文档结束或标签开头和结束时,会触发一个事件,用户可以进行解决;SAX:以事件流的方式解析文档,不会创建文档,只是给我们的代码发送事件我们根据事件解决所需要的数据优点:没有延迟,内存消耗少,随时可以停止解析创建XML文献环节:创建节点(给结点添加属性,文本)将节点进行有机的关联创建XML文档(Documentdocument=newDocument(usersElement);)将文档写到硬盘XMLOutputterxmlOutputter=newXMLOutputter(format);xmlOutputter.output(document,newFileOutputStream(path));解析XML文档环节:获得解析器讲XML文献以流的方式读取到内存中解析器开始解析输入流获取文档的根节点然后对文献进行修改将文档写到硬盘xml文档在实际项目中有哪些应用?1、配置文献中使用XML文档;2、XML是标准的文献传输格式,异构系统数据互换常采用XML;五.流行框架与技术什么是MVC?常用的MVC框架有哪些?M:Model模型层重要用来解决业务逻辑,承载数据;Model又叫实体类,这样,Model在三层架构中的位置,和int,string等变量的地位就同样了,没有其它的目的,仅用于数据的存储而已,只但是它存储的是复杂的数据2、V:View视图层重要用来做页面显示的3、C:Control控制层重要用来进行业务流程控制;4、常用的MVC框架涉及:Struts、Struts2、SpringMVC;谈谈Struts的工作流程(或运营原理)备注:下面的描述必须转换成自己的语言进行表述!!!这道题非常重要,面试官关于Struts的很多问题都可以从本题中找到答案。1、Struts是一个应用于Web层的MVC框架;2、以ActionServlet作为核心控制器,接受用户所有请求,并将请求分发到不同的Action中进行解决,并将响应结果返回给客户端;3、我们可以在web.xml文献中将符合某种特性的所有请求交给这个核心控制器进行解决,这核心控制器再参照一个配置文献(通常为/WEB-INF/struts-config.xml)将各个请求分别分派给不同的Action去解决。4、ActionServlet把请求交给Action去解决之前,会将请求参数封装成一个formbean对象。备注:假如面试官需要解释一下formbean,则按如下思绪回答:ActionServlet把formbean对象传递给action的execute方法之前,也许会调用formbean的validate方法进行校验,只有校验通过后才将这个formbean对象传递给action的execute方法,否则,它将返回一个错误页面,这个错误页面由input属性指定,(看配置文献)作者为什么将这里命名为input属性,而不是error属性,我们后面结合实际的运营效果进行分析。5、Action执行完后要返回显示的结果视图,这个结果视图是用一个ActionForward对象来表达的,actionforward对象通过struts-config.xml配置文献中的配置关联到某个jsp页面,由于程序中使用的是在struts-config.xml配置文献为jsp页面设立的逻辑名,这样可以实现action程序代码与返回的jsp页面名称的解耦。谈谈Struts2的工作流程(或运营原理)备注:下面的描述必须转换成自己的语言进行表述!!!这道题非常重要,面试官关于Struts2的很多问题都可以从本题中找到答案。1、客户端发送一个指向Servlet容器(例如Tomcat)的请求,服务器接受请求,将HttpServletRequest传进来。2、这个请求通过一系列的过滤器(Filter)3、接着FilterDispatcher(核心控制器)被调用,将request中所携带的数据放入值栈(ValueStack);4、FilterDispatcher(核心控制器)询问ActionMapper来决定这个请求是否需要调用某个Action,把请求的解决交给ActionProxy;5、ActionProxy通过ConfigurationManager询问框架的配置文献(struts.xml),找到调用的Action类;6、ActionProxy创建一个ActionInvocation对象,执行其execute方法;ﻫ7、在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用;8、一旦Action执行完毕,根据struts.xml中的配置找到相应的返回结果(JSP显示结果)。说说struts1与struts2的区别备注:下面的描述必须转换成自己的语言进行表述!!!1、都是MVC的WEB框架;2、struts1的前端控制器是一个Servlet,名称为ActionServlet,struts2的前端控制器是一个filter,在struts2.0中叫FilterDispatcher,在struts2.1中叫StrutsPrepareAndExecuteFilter;3、struts1的action需要继承Action类,struts2的action可以不继承任何类;struts1对同一个途径的所有请求共享一个Action实例(单例模式),struts2对同一个途径的每个请求分别使用一个独立Action实例对象(多例模式),所有对于struts2的Action不用考虑线程安全问题。4、在struts1中使用formbean封装请求参数,在struts2中直接使用action的属性来封装请求参数。(不懂)5、struts1中的多个业务方法放在一个Action中时(即继承DispatchAction时),要么都校验,要么都不校验;对于struts2,可以指定只对某个方法进行校验,当一个Action继承了ActionSupport且在这个类中只编写了validateXxx()方法,那么则只对Xxx()方法进行校验。Struts优缺陷优点:1、实现MVC模式,结构清楚,使开发者只关注业务逻辑的实现;2、有丰富的tag可以用,Struts的标记库(Taglib),如能灵活动用,则能大大提高开发效率;3、通过配置文献,使系统的脉络更加清楚。一个配置文献,即可把握整个系统各部分之间的联系,这对于后期的维护有着很大的好处。4、Struts提供了两周异常解决方式,声明式异常解决和编程式异常解决——此处学生需要自己多看看相关资料,可以进一步回答面试官问题;5、对国际化进行支持,支持I18N;缺陷:1、实现MVC模式,代码复杂度提高;2、需要维护配置文献,比较麻烦;什么是Hibernate,好处是什么?1、Hibernate是一个操作数据库的框架,实现了对JDBC的封装;2、Hibernate是一个ORM(对象关系映射)框架,我们在写程序的时候,用的是面向对象的方法,但是在关系型数据库里,存的是一条条的记录;为了用纯面向对象的思想解决问题,所以需要将程序中的对象和数据库中的记录建立起映射关系,ORM就是将对象和数据库中的记录建立起映射的技术,而Hibernate就是这样一个ORM框架;3、Hibernate简化了代码编写,本来JDBC需要写一堆代码完毕的功能,Hibernate需要少量的代码即可以实现;4、Hibernate屏蔽了数据库的差异,增长了对不同数据库的可移植性(通过方言);5、使用Hibernate的基本流程是:配置Configuration对象、产生SessionFactory、创建session对象,启动事务,完毕CRUD操作,提交事务,关闭session;6、使用Hibernate时,先要配置hibernate.cfg.xml文献,其中配置数据库连接信息和方言等,还要为每个实体配置相应的hbm.xml文献,hibernate.cfg.xml文献中需要登记每个hbm.xml文献。hibernate中的update()和saveOrUpdate()的区别1、update针对

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论