Java面试笔试资料.docx
- 文档编号:4305208
- 上传时间:2022-11-29
- 格式:DOCX
- 页数:20
- 大小:659.81KB
Java面试笔试资料.docx
《Java面试笔试资料.docx》由会员分享,可在线阅读,更多相关《Java面试笔试资料.docx(20页珍藏版)》请在冰豆网上搜索。
Java面试笔试资料
面向对象编程思想:
Java的核心是面向对象编程,它的基本思想是使用类、对象、继承、封装、消息等基本概念来进行程序设计。
封装:
将对象的实现细节隐藏起来,然后通过一些公用方法来暴露该对象的功能。
继承:
是面向对象实现软件复用的重要手段,当子类继承父类之后,子类作为一个特殊的父类,将直接获得父类的属性和方法。
继承类用关键字:
extends;继承接口用关键字:
implements。
多态:
子类对象可以直接赋给父类变量,但运行时依然表现出子类的行为特征,这意味着同一个类型的对象在执行同一个方法时,可能表现出多种行为特征。
抽象:
忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标相关的方面。
软件架构设计:
贫血模式
设计模式:
单例模式、简单工厂、代理模式、命令模式、策略模式、门面模式、桥接模式、观察者模式。
抽象类和接口的区别:
抽象类必须用abstract修饰符来修饰,不能被实例化,只能当做父类被其他子类继承。
接口是更彻底的抽象类,接口里的所有方法都是抽象的,所有的成员变量都是publicstaticfinal的。
1)接口可以被多重implements,抽象类只能被单一extends
2)接口只有定义,抽象类可以有定义和实现
3)接口的字段定义默认为:
publicstaticfinal,抽象类字段默认是:
friendly
静态变量和实例变量的区别:
静态变量也称为类变量,归全类共有,它不依赖于某个对象,可通过类名直接访问。
而实例变量必须依存于某一实例,只能通过对象才能访问到它。
垃圾收集(GC):
内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃。
Java程序员不用担心内存管理,因为垃圾收集器会自动进行管理。
要请求垃圾收集,可以调用下面的方法之一System.gc()或Runtime.getRuntime().gc()。
常用的类:
BufferedReaderBufferedWriterFileReaderFileWriterStringjava.util.DateSystemClassListHashMap
常用的包:
java.langjava.iojava.utiljava.sqljavax.servletorg.apache.struts.actionorg.hibernate
常用的接口:
RemoteListMapDocumentNodeListServletTransactionSession
对象关系映射(ORM):
是一种为了解决面向对象与面向关系数据库存在的互不匹配的现象的技术,简单的说,ORM是通过使用描述对象和数据库之间映射的元数据,将java程序中的对象自动持久化到关系数据库中,本质上就是将数据从一种形式转换到另外一种形式。
程序员可以以面向对象的方式操作持久化对象,而ORM框架则负责转换成对应的SQL操作。
Hibernate的5个核心接口:
1.Configuration接口:
配置Hibernate,根据其启动Hibernate,创建SessionFactory对象。
2.SessionFactory接口:
初始化Hibernate,充当数据存储源的代理,创建session对象,SessionFactory是线程安全的,意味着它的同一个实例可以被应用的多个线程共享,是重量级、二级缓存。
3.Session接口:
负责保存、更新、删除、加载和查询对象,是线程不安全的,避免多个线程共享同一个session,是轻量级、一级缓存。
4.Transaction接口:
管理事务。
5.Query和Criteria接口:
执行数据库的查询。
SSH框架整合:
Struts是一个很好的MVC框架,主要技术是Servlet和JSP。
Struts的MVC设计模式可以使我们的逻辑变得很清晰,让我们写的程序层次分明。
Spring提供了管理业务对象的一致方法,并鼓励注入对接口编程而不是对类编程的良好习惯,使我们的产品在最大程度上解耦。
Hibernate是用来持久化数据的,提供了完全面向对象的数据库操作。
Hibernate对JDBC进行了非常轻量级的封装,它使得与关系型数据库打交道变得非常轻松。
SSH架构图
Struts负责Web层:
ActionFormBean接收网页中表单提交的数据,然后通过Action进行处理,再Forward到对应的网页,在Struts-config.xml中定义了
Spring负责业务层管理,即Service:
Service为Action提供统一的调用接口,封装持久层的DAO,并集成Hibernate,Spring可对JavaBean和事物进行统一管理。
Hibernate负责持久层,完成数据库的CRUD操作:
Hibernate有一组hbm.xml文件和PO,是与数据库中的表相对应的,然后定义DAO,这些是与数据库打交道的类。
轻量级JavaEE应用的架构:
通常会使用Spring作为核心,向上整合MVC框架,向下整合ORM框架。
使用Spring的IoC容器来管理各组件之间的依赖关系时,Spring的声明事务将负责业务逻辑层组件的事务管理。
JSP:
作为表现层,负责收集用户请求数据,以及业务数据的表示。
MVC框架:
使用Struts2.2,所有用户请求(包括系统的超链接和表单提交),都发给Struts2.2的Action,使用拦截器的权限控制。
Spring框架:
系统核心,Spring提供的IoC容器是业务逻辑组件和DAO组件的工厂,它负责生成并管理这些实例。
借助于Spring的依赖注入,各组件之间以松耦合的方式组合在一起。
Struts2拦截器的主要工作流程:
(1)创建拦截器类
(2)指定拦截的Action对象
(3)执行拦截方法中定义的处理规则
Hibernate:
是一个可以将Java对象与关系数据库进行映射的工具,它对JDBC进行了轻量级的包装,在开发过程中可以根据面向对象编程的思想来操作数据库。
工作原理:
1.读取并解析配置文件
2.读取并解析映射信息,创建SessionFactory
3.打开Session
4.创建事务Transaction
5.持久化操作
6.提交事务
7.关闭Session
8.关闭SesstionFactory
Hibernate的工作流程图
优点:
1.对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。
2.Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。
他很大程度的简化DAO层的编码工作。
3.Hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。
4.Hibernate的性能非常好,因为它是个轻量级框架。
映射的灵活性很出色。
它支持各种关系数据库,从一对一到多对多的各种复杂关系。
Hibernate的3种对象状态:
ØTransientObjects临时对象:
它是由关键字new创建的一个对象,这时由于Session没有指向它,所以并没有将其放入Session缓存中,因此它在数据库里没有相对应的数据。
ØPersistObjects持久化对象:
当Session对象指向它并将其放入Session缓存中时,它在数据库中具有相对应的数据并与数据库里的数据同步。
ØDetachedObjects游离对象:
表示该对已经被实例化,但是却没有Session对象指向它。
这时数据库中可能还有相对应的数据,但是却不能与数据库中的数据同步。
类的关联,继承在数据库中的体现:
类定义―――>表定义
类属性―――>表字段
类关系―――>表关系
对象―――>表记录
Spring为企业应用的开发提供一个轻量级的解决方案(基于依赖注入的核心机制,基于AOP的声明式事务管理,与多种持久层技术的整合,以及优秀的WebMVC框架等)
控制反转(IoC):
由Spring容器为对象设置属性的方式。
其实就是依赖关系的转移,通过XML配置文件由容器来管理类,而不是在类中直接生成Bean的实例。
依赖注入(DI):
当某个Java实例(调用者)需要另一个Java实例(被调用者)时,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。
在依赖注入的模式下,创建被调用者的工作不再由调用者来完成,因此称为控制反转。
创建被调用者的实例工作通常由Spring容器来完成,然后注入调用者,因此也成为依赖注入。
两种方式:
设值注入和构造注入。
Spring两个核心接口:
BeanFactory和ApplicationContext。
都可代表Spring容器,Spring容器是生成Bean实例的工厂,并管理容器中的Bean。
对于prototype作用域的Bean,Spring容器仅仅负责创建,当容器创建了Bean实例之后,Bean实例完全交给客户端代码管理,容器不再跟踪其生命周期。
每次客户端请求prototype作用域的Bean时,Spring都会产生一个新的实例。
对于singleton作用域的Bean,每次客户端代码请求时都返回同一个共享实例,Spring容器可以跟踪Bean实例的产生、销毁。
面向切面编程(AOP):
专门用来处理系统中分布于各个模块(不同方法)中的交叉关注点的问题,如事务管理、安全检查、缓存、对象池管理等等。
DAO模式:
核心思想:
(所有的数据库访问,都通过DAO组件完成,DAO组件封装了数据库的增、删、查、改等原子操作。
)业务逻辑组件依赖于DAO组件提供的数据库原子操作,完成系统业务逻辑的完成。
JavaEE应用分层:
表现层、业务逻辑层、数据持久层。
轻量级JavaEE架构以SpringIoC容器为核心,承上启下:
其向上管理来自表现层的Action,向下管理业务逻辑层组件,同时负责管理业务逻辑层所需的DAO对象。
Hashtable:
线程安全,不允许null作为key和value。
HashMap:
线程不安全,所以比Hashtable性能高一点,HashMap允许最多只有一个key-value对的key为null,但可以无数多个key-value为null。
Vector:
线程安全的,所以是同步的。
当数据需要增长时,Vector默认增长为原来一倍。
ArrayList:
是线程不安全的,不是同步的。
ArrayList默认增长为原来的一半。
多线程有两种实现方法:
分别是继承Thread类和实现Runnable接口。
同步的实现方面有两种:
分别是synchronized,wait和notify。
抽象类和接口都用于抽象,但是抽象类(Java中)可以有自己的部分实现,而接口完全是一个标识(同时有多重继承的功能)。
数据库方面:
存储过程是用户定义的一系列SQL语句的集合,涉及特定表或其他对象的任务,用户可以调用存储过程,而函数通常是数据库已定义的方法,它接受参数并返回某种类型的值并不涉及特定用户表。
事务是作为一个逻辑单元执行一系列特定的操作,一个逻辑工作单元必须有四个属性:
称为ACID(原子性、一致性、隔离性和持久性)属性,只有这样才能成为一个属性。
Java使用JDBC访问数据库的步骤:
1.得到数据库驱动程序
2.创建数据库连接
3.执行SQL语句
4.得到结果集
5.对结果集进行相应的处理(增删改查)
6.关闭资源
Spring方面:
v目的:
解决企业应用开发的复杂性
v功能:
使用基本的JavaBean代替EJB,并提供了更多的企业应用功能。
v范围:
任何Java应用,简单来说Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
vSpring的核心机制,控制反转,也叫(dependencyinjection)依赖注入。
依赖注入让bean和bean之间以配置文件组织在一起,而不是以硬编码的方式耦合在一起。
v依赖注入:
是指程序运行过程中,如果需要调用另外一个对象协助时,无须在代码中创建被调用者,而是依赖于外部的注入。
Spring的依赖注入对调用者和被调用者几乎没有任何要求,完全支持对POJO之间依赖关系的管理。
IOC实现方式:
1.设值注入:
指通过setter方法传入被调用者的实例。
2.构造注入:
指通过构造函数来完成依赖关系的设定。
AOP:
在典型的面向对象开发方式中,可能要将日志记录语句放在所有方法和Java类中才能实现日志功能。
在AOP方式中,可以反过来将日志服务模块化,并以声明的方式将它们应用到需要日志的组件上。
当然,优势就是Java类不需要知道日志服务的存在,也不需要考虑相关的代码。
所以用SpringAOP编写的应用程序代码是松散耦合的。
AOP具体应用:
日志记录、事务控制、权限校验、性能统计、异常处理。
项目中为什么使用SSH框架:
1.使用Struts:
是因为Struts是基于MVC模式的,很好的将应用程序进行了分层,使开发者更加关注业务逻辑的实现,其次使用Struts具有丰富的taglib,如能灵活运用,将会大大的提高开发效率。
2.使用Hibernate:
因为Hibernate为Java应用提供了一个易用的、高效率的对象关系映射框架。
Hibernate是一个轻量级的持久性框架,功能丰富。
3.使用Spring:
因为Spring是基于IoC和AOP架构多层J2EE系统的框架,但它不强迫你必须在每一层中必须使用Spring,因为它模块化的好,允许你根据自己的需要选择使用它的某一个模块,采用IoC使得可以很容易的实现Bean的装配,提供了简洁的AOP并据此实现事务管理(TransactionManagement)。
控制循环结构:
1.break:
用于完全结束一个循环,跳出循环体。
2.continue:
只是终止本次循环。
3.return:
结束一个方法。
MVC方面:
MVC是Model—View—Controller,即模型—视图—控制器。
它是一种设计模式,它强制性的把应用程序的输入、处理和输出分开。
1.视图:
是用户看到并与之交互的界面。
视图向用户显示相关的数据,并接受用户的输入,视图不进行任何业务逻辑的处理。
2.模型:
表示业务数据和业务处理,相当于JavaBean。
一个模型能为多个视图提供数据,这提高了应用程序的重用性。
3.控制器:
当用户点击Web页面的提交按钮时,控制器接受请求并调用相应的模型去处理请求,然后根据处理的结果调用相应的视图来显示处理的结果。
Ajax方面:
全称是AsynchronousJavaScriptAndXML。
AJAX技术基于Javascript和HTTPRequest.传统的Javascript编程中,如果想得到服务器端数据库或文件上的信息,或者发送客户端信息到服务器,需要建立一个HTMLform然后GET或者POST数据到服务器端。
用户需要点击”Submit”按钮来发送或者接受数据信息,然后等待服务器响应请求,页面重新加载。
因为服务器每次都会返回一个新的页面,所以传统的web应用有可能很慢而且用户交互不友好。
使用AJAX技术,就可以使Javascript通过XMLHttpRequest对象直接与服务器进行交互。
通过HTTPRequest,一个web页面可以发送一个请求到web服务器并且接受web服务器返回的信息(不用重新加载页面),展示给用户的还是通一个页面,用户感觉页面刷新,也看不到Javascript后台进行的发送请求和接受响应。
优点:
1.最大的一点是页面无刷新,用户的体验非常好。
2.使用异步方式与服务器通信,具有更加迅速的响应能力。
3.可以把以前一些服务器负担的工作转嫁到客户端,利用客户端闲置的能力来处理,减轻服务器和带宽的负担,节约空间和宽带租用成本,并且减轻服务器的负担。
ajax的原则是“按需取数据”,可以最大程度的减少冗余请求和响应对服务器造成的负担。
4.基于标准化的并被广泛支持的技术,不需要下载插件或者小程序。
缺点:
1.Ajax不支持浏览器back按钮。
2.安全问题AJAX暴露了与服务器交互的细节。
3.对搜索引擎的支持比较弱。
4.破坏了程序的异常机制。
5.不容易调试。
JavaEE应用架构分层:
1.领域对象层DomainObject:
由系列的POJO(PlainOldJavaObject普通传统Java对象)组成。
2.数据访问对象层DAO(DataAccessObject):
由系列DAO组件组成,DAO组件实现了对数据库的创建、查询、更新和删除(CRUD)等原子操作。
3.业务逻辑层:
由系列逻辑对象组成,实现了系统所需要的业务逻辑方法。
4.控制器层:
由系列控制器组成,用于拦截用户请求,并调用业务逻辑组件的业务逻辑方法,处理用户请求,并根据处理结果转发到不同的表现层组件。
5.表现层:
由系列JSP页面组成,负责收集用户请求,并将显示处理结果。
JSP方面
JSP注释:
<%--注释内容--%>
JSP声明:
<%!
声明部分%>
JSP表达式:
<%=表达式%>
JSP的3个编译指令:
1、page指令:
该指令是针对当前页面的指令
2、include指令:
用于指定包含另一个页面
3、taglib指令:
用于定义和访问自定义标签
JSP的7个动作指令:
1、jsp:
forward:
执行页面转向,将请求的处理转发到下一个页面
2、jsp:
param:
用于传递参数,必须与其他支持参数的标签一起使用
3、jsp:
include:
用于动态引入一个JSP页面
4、jsp:
plugin:
用于下载JavaBean或Applet到客户端执行
5、jsp:
useBean:
用于创建一个JavaBean的实例
6、jsp:
setProperty:
设置JavaBean实例的属性值
7、jsp:
getProperty:
输出JavaBean实例的属性值
JSP脚本中的9个内置对象:
1、application
2、config
3、exception
4、out
5、page
6、pageContext
7、request
8、response
9、session
JDBC编程:
JDBCAPI:
DriverManager:
用于管理JDBC驱动的服务类,主要功能是获取Connection对象。
Connection:
代表数据库连接对象。
Statement:
用于执行SQL语句的工具接口。
PreparedStatement:
预编译的Statement对象。
ResultSet:
结果集对象。
JDBC编程步骤:
(1)加载数据库驱动–Class.forName(“com.mysql.jdbc.Driver”)
(2)通过DriverManager获取数据库连接—DriverManager.getConnection(url,user,pass)
(3)通过Connection对象创建Statement对象
(4)使用Statement执行SQL语句
(5)操作结果集
(6)回收数据库资源:
包括关闭ResultSet、Statement和Connection等资源
使用PreparedStatement比使用Statement好的原因:
(1)PreparedStatement预编译SQL语句,性能更好
(2)PreparedStatement无须“拼接“SQL语句,编程更加简单
(3)PreparedStatement可以防止SQL注入,安全性更好
Hibernate充当了面向对象的程序设计语言和关系数据库之间的桥梁,Hibernate允许程序员用面向对象的方式来操作关系数据库。
ORM对象关系数据库映射(ObjectRelationMapping):
完成面向对象的编程语言到关系数据库的映射。
Path:
windows系统执行命令时要搜寻的路径。
ClassPath:
Java在编译和运行时要找的class所在的路径。
Java程序先编译后执行,Javac:
编译Java程序,Java:
运行Java程序。
变量先声明,后使用;变量要素包括变量名、变量类型和作用域。
局部变量:
方法体内部声明的变量(包括形参)。
成员变量:
在方法体外,类体内声明的变量。
4类8种基本数据类型:
v逻辑型:
boolean
v文本型:
char
v整数型:
byteshortintlong
v浮点型:
floatdouble
Java字符采用Unicode编码,每个字符占两个字节。
一个汉字=两个字节。
一个字节8位1byte=8bit
形参:
在方法被调用时用于接收外界输入的数据。
实参:
在调用方法时实际传给方法的数据。
返回值:
方法在执行完毕后返回给调用它的环境的数据。
实参的数目、数据类型和次序必须和所调用方法声明的形参列表匹配。
return语句终止方法的运行并指定要返回的数据。
构造函数是定义在Java类中的一个用来初始化对象的函数,它与类同名且没有返回值。
Java中的访问控制符:
子类的对象可以当做基类的对象来使用称作向上转型(upcasting)。
用abstract关键字来修饰一个类时,这个类叫做抽象类;修饰一个方法时叫做抽象方法。
含有抽象方法的类必须被声明为抽象类,抽象类必须被继承,抽象方法必须被重写,抽象类不能被实例化,抽象方法只需声明,而不需实现。
接口是更加彻底的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现。
接口中声明属性默认为publicstaticfinal的,接口中只能定义抽象方法,而且这些方法默认为public的。
final的变量的值不能够被改变,final的方法不能够被重写,final的类不能够被继承。
异常的捕获和处理:
getMessage()方法:
用来得到有关异常事件的信息。
printStackTrace():
用来跟踪异常事件发生时执行堆栈的内容。
节点流为可以从一个特定的数据源(节点)读写数据(文件、内存)。
处理流是连接在已存在的流(节点流或处理流)之上,通过对数据的处理为程序提供更为强大的读写功能。
节点流类型:
处理流类型:
多进程:
在操作系统中能同时运行多个任务(程序)。
多线程:
在同一应用程序中有多个顺序流同时执行。
OSI参考模型
应用层
表示层
会话层
传输层
网络层
数据链路层
物理层
IP(InternetProtocol)协议是网络层的主要协议,支持网络间互连的数据报通信。
它提供主要功能有:
无连接数据报传送和数据报路由选择和差错控制。
Java中的异常可以分为两大类:
Error(错误):
是指JVM系统内部错误、资源耗尽等情况,如内存溢出,程序员无法处理。
Exception(异常):
是指因编程原因或偶然的外部因素导致的问题,程序员可以预先防范。
Linux常用命令:
1.man对你熟悉或不熟悉的命令提供帮助解释
eg:
manls就可以查看ls相关的用法
注:
按q键或者ctrl+c退出,在linux下可
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Java 面试 笔试 资料