面试题整理

最近一直复习阅读各种各样的面试题,将一些基础的部分,没有怎么包含框架的进行整理,留待学习。


概念理解

1:简述jsp与Servlet的异同之处

1.jsp经编译后就变成了servlet(jsp本质就是servlet,jvm只能识别java的类,不能识别jsp代码,web容器将jsp的代码编译成jvm能够识别的java类)

2.jsp更擅长表现于页面显示,servlet更擅长于逻辑控制

3.setvlet中没有内置对象,jsp中的内置对象都是必须通过HttpServletRequest对象,HttpServletResponse对象及HttpServlet对象得到

4.jsp是servlet的一种简化,使用jsp只需要完成程序员需用输出到客户端的内容,jsp中的java脚本如何镶嵌到一个类中,由jsp容器完成,而servlet则是个完整的java类,这个类的service方法用于生成对客户端的响应

2.简述jsp内置对象及其作用
JSP中一共预先定义了9个这样的对象,分别为:request、response、session、application、out、pagecontext、config、page、exception

1、request对象 request 对象是 javax.servlet.httpServletRequest类型的对象。
该对象代表了客户端的请求信息,主要用于接受通过HTTP协议传送到服务器的数据。(包括头信息、系统信息、请求方式以及请求参数等)。request对象的作用域为一次请求。
2、response对象 response
代表的是对客户端的响应,主要是将JSP容器处理过的对象传回到客户端。response对象也具有作用域,它只在JSP页面内有效。
3、session对象 session
对象是由服务器自动创建的与用户请求相关的对象。服务器为每个用户都生成一个session对象,用于保存该用户的信息,跟踪用户的操作状态。session对象内部使用Map类来保存数据,因此保存数据的格式为
“Key/value”。 session对象的value可以使复杂的对象类型,而不仅仅局限于字符串类型。 4、application对象
application
对象可将信息保存在服务器中,直到服务器关闭,否则application对象中保存的信息会在整个应用中都有效。与session对象相比,application对象生命周期更长,类似于系统的“全局变量”。
5、out 对象 out 对象用于在Web浏览器内输出信息,并且管理应用服务器上的输出缓冲区。在使用 out
对象输出数据时,可以对数据缓冲区进行操作,及时清除缓冲区中的残余数据,为其他的输出让出缓冲空间。待数据输出完毕后,要及时关闭输出流。
6、pageContext 对象 pageContext 对象的作用是取得任何范围的参数,通过它可以获取
JSP页面的out、request、reponse、session、application
等对象。pageContext对象的创建和初始化都是由容器来完成的,在JSP页面中可以直接使用 pageContext对象。
7、config 对象 config 对象的主要作用是取得服务器的配置信息。通过 pageConext对象的
getServletConfig() 方法可以获取一个config对象。当一个Servlet 初始化时,容器把某些信息通过
config对象传递给这个 Servlet。 开发者可以在web.xml
文件中为应用程序环境中的Servlet程序和JSP页面提供初始化参数。 8、page 对象 page
对象代表JSP本身,只有在JSP页面内才是合法的。 page隐含对象本质上包含当前 Servlet接口引用的变量,类似于Java编程中的
this 指针。 9、exception 对象 exception 对象的作用是显示异常信息,只有在包含
isErrorPage=”true”
的页面中才可以被使用,在一般的JSP页面中使用该对象将无法编译JSP文件。excepation对象和Java的所有对象一样,都具有系统提供的继承结构。exception
对象几乎定义了所有异常情况。在Java程序中,可以使用try/catch关键字来处理异常情况;
如果在JSP页面中出现没有捕获到的异常,就会生成 exception 对象,并把 exception
对象传送到在page指令中设定的错误页面中,然后在错误页面中处理相应的 exception 对象。

3.静态变量和实例变量的区别?

在语法定义上的区别:静态变量前要加static关键字,而实例变量前则不加。
在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例对象,其中的实例变量才会被分配空间,才能使用这个实例变量。静态变量不属于某个实例对象,而是属于类,所以也称为类变量,只要程序加载了类的字节码,不用创建任何实例对象,静态变量就会被分配空间,静态变量就可以被使用了。总之,实例变量必须创建对象后才可以通过这个对象来使用,静态变量则可以直接使用类名来引用。

4.什么是对象持久化?

对象持久化就是将对象存储在可持久保存的存储介质上,例如主流的关系数据库中。

5.请写出代表Servlet声明周期的几个方法,并简单描述其生命周期

1.如果一个Servlet的实例不存在,则Web容器加载servlet类,创建一个servlet实例,调用init()方法初始化Servlet实例
2.调用Service方法,传递一个请求和相应对象,
3调用Destroy方法,移除一个Servlet

6.什么是cookie?session和cookie有什么区别?

1,session 在服务器端,cookie 在客户端(浏览器)
2,session 默认被存在在服务器的一个文件里(不是内存)
3,session 的运行依赖 session id,而 session id 是存在 cookie 中的,也就是说,如果浏览器禁用了cookie ,同时 session 也会失效(但是可以通过其它方式实现,比如在 url 中传递 session_id)
4,session可以放在 文件、数据库、或内存中都可以。
5,用户验证这种场合一般会用 session

7.说出数据库的五种约束并简单描述

1.—-主键约束(Primay Key Coustraint) 唯一性,非空性
2.—-唯一约束 (Unique Counstraint)唯一性,可以空,但只能有一个
3.—-检查约束 (Check Counstraint) 对该列数据的范围、格式的限制(如:年龄、性别等)
4.—-默认约束 (Default Counstraint) 该数据的默认值
5.—-外键约束 (Foreign Key Counstraint) 需要建立两表间的关系并引用主表的列

8.解释下Seriallzation和Deserialization

Java提供了一种叫做对象序列化的机制,他把对象表示成一连串的字节,里面包含了对象的数据,对象的类型信息,对象内部的数据的类型信息等等。因此,序列化可以看成是为了把对象存储在磁盘上或者是从磁盘上读出来并重建对象而把对象扁平化的一种方式。反序列化是把对象从扁平状态转化成活动对象的相反的步骤。

9.线程的创建方式,那种方式更受欢迎

三种方式可以用来创建线程:
继承Thread类
实现Runnable接口
应用程序可以使用Executor框架来创建线程池
实现Runnable接口这种方式更受欢迎,因为这不需要继承Thread类。在应用设计中已经继承了别的对象的情况下,这需要多继承(而Java不支持多继承), 只能实现接口。 同时,线程池也是非常高效的,很容易实现和使用

10.转发与重定向的区别

重定向与转发的比较:(必须记住)
转发是在服务器端发挥作用,通过forward方法将提交信息在多个页面间进行传递。
转发是在服务器内部控制权的转移,客户端浏览器的地址栏不会显示出转向后的地址。
重定向是在客户端发挥作用,通过请求新的地址实现页面转向。
重定向是通过浏览器重新请求地址,在地址栏中可以显示转向后的地址。

11.ArrayList和LinkedList的区别

1.ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。
2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。

12.IO流按照流向分为?按照单位分?

流向: 输入:InputStream Reader 输出:OutputStream Writer
单位: 字节:Stream > 字符:Reader,Writer

13.简述List,set,map的区别, HashMap和HashTable的区别

List和set继承自接口Collection,Map没继承。
List存放有序,可以重复的数据。
Set存放无序,不可以重复的数据,通过Enumration遍历。
Map以键值对形式存储,键值具有唯一性。
Hashtable线程同步,HashMap线程不同步。

14.通过代码描述JDBC的使用过程

1.加载JDBC驱动程序
Class.forName(“com.mysql.jdbc.Driver”)
2.提供JDBC的URL地址
jdbc:mysql://localhost:3306/test? ;
3.创建数据库对象
Connection con = DriverManager.getConnection(url , username , password ) ;
4.创建Statement
Statement stmt = con.createStatement() ;
PreparedStatement pstmt = con.prepareStatement(sql) ;
5.执行SQL
ResultSet rs = stmt.executeQuery(“SELECT * FROM …”) ;
6.处理结果
7.关闭JDBC对象
// 关闭记录集rs.close() ;
// 关闭声明stmt.close() ;
// 关闭连接对象conn.close() ;

15.三层模式分哪三层,分别对应着什么组件

三层架构和MVC是有明显区别的,MVC应该是展现模式(三个加起来以后才是三层架构中的UI层) 三层架构(3-tier application) 通常意义上的三层架构就是将整个业务应用划分为:表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。区分层次的目的即为了“高内聚,低耦合”的思想。 1、表现层(UI):通俗讲就是展现给用户的界面,即用户在使用一个系统的时候他的所见所得。 2、业务逻辑层(BLL):针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理。 3、数据访问层(DAL):该层所做事务直接操作数据库,针对数据的增添、删除、修改、更新、查找等。
MVC是 Model-View-Controller,严格说这三个加起来以后才是三层架构中的UI层,也就是说,MVC把三层架构中的UI层再度进行了分化,分成了控制器、视图、实体三个部分,控制器完成页面逻辑,通过实体来与界面层完成通话;而C层直接与三层中的BLL进行对话。
mvc可以是三层中的一个表现层框架,属于表现层。三层和mvc可以共存。 三层是基于业务逻辑来分的,而mvc是基于页面来分的。 MVC主要用于表现层,3层主要用于体系架构,3层一般是表现层、中间层、数据层,其中表现层又可以分成M、V、C,(Model View Controller)模型-视图-控制器

16.Overriding和Overloading的概念

1.重载:相同的方法名,参数列表不同,不能根据方法名和返回值来判断重载。
2.重写:子类继承父类,并重写父类的方法,必须和父类拥有相同的方法名和参数。
3.方法重载是一个类的多态性表现,方法重写是子类与父类的一种多态性表现。

17.访问权限修饰符有哪几种,各自的范围

1.public:所有包
2.Protected:子类
3.Friendly:(default)默认,同包
4.Private: 本类。

18.JSP的作用域分哪几种,简单介绍各自的范围特点

page:在一个页面范围内有效,通过pageContext对象访问该范围内的对象。
request:在一个服务器请求范围内有效,与客户端请求绑定在一起。
session:在一次会话范围内内容有效,在会话期间与session绑定的对象皆属于该范围。
application:在一个应用服务器范围内有效,当应用服务启动后即创建该对象,并向所有用户所共享。

19.上一题的作用域用el表达式如何获取

—————1、pageContext对象:获取JSP页面中的pageContext对象————–
pageContext2pageScopepage(pageScope)<{pageScope.name}
—————3、requestScope对象:从request域(requestScope)中获取数据—-
<% request.setAttribute(“name”,”123”); //map %>
requestScope.name4sessionScopesession(sessionScope)<{sessionScope.user}
—————5、applicationScope对象:从application域(applicationScope)中获取数据————-
<% application.setAttribute(“user”,”123”); //map %>
${applicationScope.user}

20.JSTL中如何使用循环遍历某个集合

<c:forEach items="${person}" var="user">
         key=${user.key },name=${user.value.name },age=${ user.value.age}
     </c:forEach>

这里写图片描述

21.Abstract class 和 interface有什么区别

1.抽象类可以有构造方法,接口中不能有构造方法。
2.抽象类中可以有普通成员变量,接口中没有普通成员变量
3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。
4. 抽象类中的抽象方法的访问类型可以是public,protected,但接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。
5. 抽象类中可以包含静态方法,接口中不能包含静态方法
6. 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。
7. 一个类可以实现多个接口,但只能继承一个抽象类。

22.String、StringBuffer和StringBulider的区别?

String类是不可变类,任何改变都会导致新的String对象生成,而stringbuffer则是可变类,可以向对象中添加新的字符串,
如果操作少量的数据用String
单线程下操作大量数据用StringBulider
多线程操作大量数据用stiringbuffer

23.举例说明MySQL、Oracle或SQL Server的SQL语法上的不同点

1.放在内存中的表在写别名使用as
sql: select * from (select * from base_org) as bs – 可以用as
orcl: select * from (select * from base_org) bs –不用as
2.连接符
Sql: +
Orcl: ||
3.是否为空的函数
sql: isnull(a.STORE_TYPE, ”)
orcl: nvl (a.STORE_TYPE, ”)

24.列举几种常见的异常,并说明含义

1.空指针异常:调用空对象的方法或属性导致
2.ClassCastException:类型强制转换异常
比如:Object x = new String(“String”);
System.out.println((Integer) x);
3.ArrayIndexOutOfBoundsException
4.ArithmeticException:算数运算异常
5.NumberFormatException数字格式异常,比如将it转换成integer型

25.Java语言支持的8中基本数据类型是?什么是值传递和引用传递?

Int ,short, long ,float ,double ,byte,char,boolean
值传递传递的是变量的值,引用传递传递的是对象的地址

26.试分析基本数据类型和引用数据类型的基本特点

概念上:基本数据类型变量名指向具体的数值
引用数据类型变量名指向存数据对象的内存地址,即变量名指向hash值。
内存构建上:基本数据类型变量在声明之后java就会立刻分配给他内存空间
引用数据类型以特殊的方式(类似C指针)指向对象实体(具体的值),这类变量声明时不会分配内存,只是存储了一个内存地址。
使用上:基本数据类型使用时需要赋具体值,判断时使用“==”号
引用数据类型使用时可以赋null,判断时使用equals方法

27.什么是BS架构?什么是CS架构

CS(Client/Server):客户端—-服务器结构。C/S结构在技术上很成熟,它的主要特点是交互性强、具有安全的存取模式、网络通信量低、响应速度快、利于处理大量数据。因为客户端要负责绝大多数的业务逻辑和UI展示,又称为胖客户端。它充分利用两端硬件,将任务分配到Client 和Server两端,降低了系统的通讯开销。C/S结构的软件需要针对不同的操作系统系统开发不同版本的软件,加之产品的更新换代十分快,已经很难适应百台电脑以上局域网用户同时使用。
C/S 架构是一种典型的两层架构,其客户端包含一个或多个在用户的电脑上运行的程序,而服务器端有两种,一种是数据库服务器端,客户端通过数据库连接访问服务器端的数据;另一种是Socket服务器端,服务器端的程序通过Socket与客户端的程序通信。
BS(Browser/Server):浏览器—-服务器结构,是目前应用系统的发展方向。BS是伴随着Internet技术的兴起,对C/S架构的改进,为了区别于传统的C/S 模式,特意称为B/S模式。在这种结构下,通过W3浏览器来进入工作界面,极少部分事务逻辑在前端(Browser)实现,主要事务逻辑在服务器端(Server)实现,形成三层(3-tier)结构。这样使得客户端电脑负荷大大简化(因此被称为瘦客户端),减轻了系统维护、升级的支出成本,降低了用户的总体成本(TCO)。
BS的主要特点是分布性强、维护方便、开发简单且共享性强、总体拥有成本低。但数据安全性问题、对服务器要求过高、数据传输速度慢、软件的个性化特点明显降低,难以实现传统模式下的特殊功能要求。它是瘦客户端,对大量的数据输入以及报表的应答等都需要通过浏览器与服务器进行交互,通信开销大,而且对于实现复杂的应用构造有较大的困难。

28.GET,POST区别

一.表单:GET与POST方法的区别
1. get是从服务器上获取数据,post是向服务器传送数据。
2. get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
3. 对于get方式,服务器端用Request.QueryString获取变量的值,对于post方式,服务器端用Request.Form获取提交的数据。
4. get传送的数据量较小,不能大于2KB。post传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KB,IIS5中为100KB。
5. get安全性非常低,post安全性较高。

29.Jsp常用的动作

      <jsp:useBean>:定义jsp页面使用一个JavaBean实例;
       <jsp:setProperty>:设置一个JavaBean中的属性值;
       <jsp:getProperty>:从JavaBean中获取一个属性值;
       <jsp:include>:在JSP页面包含一个外在文件;
       <jsp:forward>:把到达的请求转发另一个页面进行处理;
       <jsp:param>:用于传递参数值;
       <jsp:plugin>:用于指定在客户浏览器中插入插件的属性;
       <jsp:params>:用于向HTML页面的插件传递参数值;
       <jsp:fallback>:指定如何处理客户端不支持插件运行的情况;

30。J2EE是什么,核心是什么

J2EE平台由一整套服务(Services)、应用程序接口(APIs)和协议构成,它对开发基于Web的多层应用提供了功能支持。
核心:
一、JDBC(Java Database Connectivity)
JDBC API为访问不同的数据库提供了一种统一的途径,象ODBC一样,JDBC对开发者屏蔽了一些细节问题,另外,JDBC对数据库的访问也具有平台无关性。
二、JNDI(Java Name and Directory Interface)   JNDI
API被用于执行名字和目录服务。它提供了一致的模型来存取和操作企业级的资源如DNS和LDAP,本地文件系统,或应用服务器中的对象。

三、EJB(Enterprise JavaBean)

  J2EE技术之所以赢得媒体广泛重视的原因之一就是EJB。它们提供了一个框架来开发和实施分布式商务逻辑,由此很显著地简化了具有可伸缩性和高度复杂的企业级应用的开发。EJB规范定义了EJB组件在何时如何与它们的容器进行交互作用。容器负责提供公用的服务,例如目录服务、事务管理、安全性、资源缓冲池以及容错性。但这里值得注意的是,EJB并不是实现J2EE的唯一途径。正是由于J2EE的开放性,使得有的厂商能够以一种和EJB平行的方式来达到同样的目的。
四、RMI(Remote Method Invoke)
  调用远程对象上的方法。它使用了序列化方式在客户端和服务器端传递数据。RMI是一种被EJB使用的更底层的协议。 五、Java
IDL/CORBA   在Java
IDL的支持下,开发人员可以将Java和CORBA集成在一起。他们可以创建Java对象并使之可在CORBA
ORB中展开,或者他们还可以创建Java类并作为和其它ORB一起展开的CORBA对象的客户。后一种方法提供了另外一种途径,通过它Java可以被用于将你的新的应用和旧的系统相集成。
六、JSP(Java Server Pages)
  JSP页面由HTML代码和嵌入其中的Java代码所组成。服务器在页面被客户端所请求以后对这些Java代码进行处理,然后将生成的HTML页面返回给客户端的浏览器。
七、Java Servlet
  Servlet是一种小型的Java程序,它扩展了Web服务器的功能。作为一种服务器端的应用,当被请求时开始执行,这和CGI
Perl脚本很相似。Servlet提供的功能大多与JSP类似,不过实现的方式不同。JSP通常是大多数HTML代码中嵌入少量的Java代码,而servlets全部由Java写成并且生成HTML。
八、XML(Extensible Markup Language)
  XML是一种可以用来定义其它标记语言的语言。它被用来在不同的商务过程中共享数据。
 XML的发展和Java是相互独立的,但是,它和Java具有的相同目标正是平台独立性。通过将Java和XML的组合,您可以得到一个完美的具有平台独立性的解决方案。
九、JMS(Java Message Service)

  JMS是用于和面向消息的中间件相互通信的应用程序接口(API)。它既支持点对点的域,又支持发布/订阅(publish/subscribe)类型的域,并且提供对下列类型的支持:经认可的消息传递,事务型消息的传递,一致性消息和具有持久性的订阅者支持。JMS还提供了另一种方式来对您的应用与旧的后台系统相集成。
十、JTA(Java Transaction Architecture)
  JTA定义了一种标准的API,应用系统由此可以访问各种事务监控。 十一、JTS(Java Transaction Service)
  JTS是CORBA OTS事务监控的基本的实现。JTS规定了事务管理器的实现方式。该事务管理器是在高层支持Java
Transaction API (JTA)规范,并且在较底层实现OMG OTS
specification的Java映像。JTS事务管理器为应用服务器、资源管理器、独立的应用以及通信资源管理器提供了事务服务。
十二、JavaMail
  JavaMail是用于存取邮件服务器的API,它提供了一套邮件服务器的抽象类。不仅支持SMTP服务器,也支持IMAP服务器。
十三、JAF(JavaBeans Activation Framework)
  JavaMail利用JAF来处理MIME编码的邮件附件。MIME的字节流可以被转换成Java对象,或者转换自Java对象。大多数应用都可以不需要直接使用JAF。


数据库操作

1.写出创建学生表STUDENT的SQL语句,注意添加相关约束,要求表名、字段名都是英文

create table student(
  s_no char(6) primary key,
  s_name varchar2(20) not null,
  s_sex char(2) check (s_sex='男'or s_sex='女'),
  s_birthday date ,
  s_score number(5,1),
  s_addf number(5,1), 
  class_no char(5),
  CONSTRAINT fk_class FOREIGN KEY (class_no) REFERENCES class(class_no)
)

2。查询入学成绩大于其所在班级平均入学成绩的所有学生的学号,姓名,成绩

select s_no,s_name,s_score from student stu,
(select class_no ,avg(s_score) avg_s from student group by class_no) temp_stu
where stu.class_no=tem_stu.class_no and stu.s_score>tem_stu.avg_s 

3。关于SQL92语法方面的操作

原文地址:https://www.cnblogs.com/aixing/p/13327668.html