Java面试题简讲(一)

59 篇文章 1 订阅
3 篇文章 0 订阅

1、JavaBean

JavaBean 是一种JAVA语言写成的可重用组件。为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器。JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性,set和get方法获取。众所周知,属性名称符合这种模式,其他Java 类可以通过自省机制(反射机制)发现和操作这些JavaBean 的属性。

JavaBean是一种可重用的Java组件,它可以被Applet、Servlet、SP等Java应用程序调用.也可以可视化地被Java开发工具使用。它包含属性(Properties)、方法(Methods)、事件(Events)等特性。

JavaBean的种类按照功能可以划分为可视化和不可视化两类。可视化的JavaBean就是拥有GUI图形用户界面的,对最终用户是可见的。不可视化的JavaBean不要求继承,它更多的被使用在JSP中,通常情况下用来封装业务逻辑、数据分页逻辑、数据库操作和事物逻辑等,这样可以实现业务逻辑和前台程序的分离,提高了代码的可读性和易维护性,使系统更健壮和灵活。随着JSP的发展,JavaBean更多的应用在非可视化领域,并且在服务器端应用方面表现出了越来越强的生命力。

2、Servlet

Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。

Servlet 是在服务器上运行的小程序。这个词是在 Java applet的环境中创造的,Java applet 是一种当作单独文件跟网页一起发送的小程序,它通常用于在客户端运行,结果得到为用户进行运算或者根据用户互作用定位图形等服务。

服务器上需要一些程序,常常是根据用户输入访问数据库的程序。这些通常是使用公共网关接口Common Gateway Interface,CGI)应用程序完成的。然而,在服务器上运行 Java,这种程序可使用 Java 编程语言实现。在通信量大的服务器上,JavaServlet 的优点在于它们的执行速度更快于 CGI 程序。各个用户请求被激活成单个程序中的一个线程,而无需创建单独的进程,这意味着服务器端处理请求的系统开销将明显降低。

3、Spring框架

Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而言,绝大部分Java应用都可以从Spring中受益。

◆目的:解决企业应用开发的复杂性

◆功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能

◆范围:任何Java应用

Spring是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架。

4、Spring的七个模块

如果作为一个整体,这些模块为你提供了开发企业应用所需的一切。但你不必将应用完全基于Spring框架。你可以自由地挑选适合你的应用的模块而忽略其余的模块。

就像你所看到的,所有的Spring模块都是在核心容器之上构建的。容器定义了Bean是如何创建、配置和管理的——更多的Spring细节。当你配置你的应用时,你会潜在地使用这些类。但是作为一名开发者,你最可能对影响容器所提供的服务的其它模块感兴趣。这些模块将会为你提供用于构建应用服务的框架,例如AOP和持久性。

核心容器

这是Spring框架最基础的部分,它提供了依赖注入(DependencyInjection)特征来实现容器对Bean的管理。这里最基本的概念是BeanFactory,它是任何Spring应用的核心。BeanFactory是工厂模式的一个实现,它使用IoC将应用配置和依赖说明从实际的应用代码中分离出来。

应用上下文(Context)模块

核心模块的BeanFactory使Spring成为一个容器,而上下文模块使它成为一个框架。这个模块扩展了BeanFactory的概念,增加了对国际化(I18N)消息、事件传播以及验证的支持。

另外,这个模块提供了许多企业服务,例如电子邮件、JNDI访问、EJB集成、远程以及时序调度(scheduling)服务。也包括了对模版框架例如Velocity和FreeMarker集成的支持。

Spring的AOP模块

Spring在它的AOP模块中提供了对面向切面编程的丰富支持。这个模块是在Spring应用中实现切面编程的基础。为了确保Spring与其它AOP框架的互用性,Spring的AOP支持基于AOP联盟定义的API。AOP联盟是一个开源项目,它的目标是通过定义一组共同的接口和组件来促进AOP的使用以及不同的AOP实现之间的互用性。通过访问他们的站点,你可以找到关于AOP联盟的更多内容。

Spring的AOP模块也将元数据编程引入了Spring。使用Spring的元数据支持,你可以为你的源代码增加注释,指示Spring在何处以及如何应用切面函数。

JDBC抽象和DAO模块

使用JDBC经常导致大量的重复代码,取得连接、创建语句、处理结果集,然后关闭连接。Spring的JDBC和DAO模块抽取了这些重复代码,因此你可以保持你的数据库访问代码干净简洁,并且可以防止因关闭数据库资源失败而引起的问题。

这个模块还在几种数据库服务器给出的错误消息之上建立了一个有意义的异常层。使你不用再试图破译神秘的私有的SQL错误消息!

另外,这个模块还使用了Spring的AOP模块为Spring应用中的对象提供了事务管理服务。

对象/关系映射集成模块

对那些更喜欢使用对象/关系映射工具而不是直接使用JDBC的人,Spring提供了ORM模块。Spring并不试图实现它自己的ORM解决方案,而是为几种流行的ORM框架提供了集成方案,包括Hibernate、JDO和iBATIS SQL映射。Spring的事务管理支持这些ORM框架中的每一个也包括JDBC。

Spring的Web模块

Web上下文模块建立于应用上下文模块之上,提供了一个适合于Web应用的上下文。另外,这个模块还提供了一些面向服务支持。例如:实现文件上传的multipart请求,它也提供了Spring和其它Web框架的集成,比如Struts、WebWork。

Spring的MVC框架

Spring为构建Web应用提供了一个功能全面的MVC框架。虽然Spring可以很容易地与其它MVC框架集成,例如Struts,但Spring的MVC框架使用IoC对控制逻辑和业务对象提供了完全的分离。

它也允许你声明性地将请求参数绑定到你的业务对象中,此外,Spring的MVC框架还可以利用Spring的任何其它服务,例如国际化信息与验证。

5、Java开发的三大框架

三大框架是用来开发web应用程序中使用的.
Struts:基于MVC的充当了其中的图层和控制器
Hibernate:做持久化的,对JDBC轻量级的封装,使得我们能过面向对象的操作数据库
Spring: 采用了控制反转的技术,管理Bean,降低了各层之间的耦合.

Struts2充当控制器部分,就是一个大的servlet (struts1)
HIbernate 数据持久层,访问数据库的,可以取代JDBC (ibatis)
Spring管理Bean,整合框架

6、Java面试之五大框架理解

五大框架(springMVC,struts2,spring,mybatis,hibernate)

说说你对springMVC框架的理解?

简要口述(如果感觉说的少可以在完整答案里面挑几条说)

Springmvc就是spring框架的一个模块,它是一个基于mvc设计思想的前端web层框架,主要作用就是对前端请求进行处理。

完整答案

Springmvc就是spring框架的一个模块,所以它可以和spring框架可以进行无缝整合,它是一个基于mvc设计思想的前端web框架,主要作用就是对前端请求进行处理。他的前端控制器是一个servlet.它的请求拦截是基于方法级别的.他的执行流程是

Spring的MVC框架主要由DispatcherServlet、处理器映射、处理器(控制器)、视图解析器、视图组成

(1)客户端请求提交到DispatcherServlet

2)由DispatcherServlet控制器查询一个或多个HandlerMapping,找到处理请求的Controller

(3)DispatcherServlet将请求提交到Controller

(4)Controller调用业务逻辑处理后,返回ModelAndView

(5)DispatcherServlet查询一个或多个ViewResoler视图解析器,找到ModelAndView指定的视图

(6)视图负责将结果显示到客户端

说说你对struts2框架的理解?

Struts2,它是一个基于mvc设计思想的前端web层框架,主要作用就是对前端请求进行处理。他的核心是拦截器.但是他的前端控制器是一个过滤器

完整答案:

Struts2,它是一个基于mvc设计思想的前端web层框架,主要作用就是对前端请求进行处理。他的核心是拦截器.但是他的前端控制器是一个过滤器. 它的请求拦截是基于类级别,OGNL也提供了在Struts2里访问各种作用域中的数据的简单方式.大大简化了获取数据的代码.struts2的执行流程是:

A. 页面请求传递到后台, 首先进入Struts2 的核心过滤器 StrutsPrepareAndExecutedFilter .

B. 请求进入到struts2 之后, 会根据请求的路径到 struts.xml 文件中根据 package的 namespace 属性 与 action 的 name 属性配置到请求处理的Action 类.

C. 匹配到对应 Action 类的对应方法 , 执行该方法进行业务处理, 处理完毕之后会返回一个结果视图(字符串).

D. 然后根据返回的结果视图 , 到struts.xml 中对应的Action的result结果集配置中 匹配 对应的视图页面(或action).

E. 然后根据 result 的type属性, 转发(或重定向) 对应的页面(或action).

SpringMVC和Struts2两个框架对比一下.

注意:两个技术已经很多年了,技术非常成熟.用户群体很大.不能片面的用好与不好来说.只能说适合不适合.因为每个东西都有擅长和不擅长

注意:说出几点即可

A、springmvc入口是一个servlet前端控制器,struts2入口是一个filter过虑器。

B、struts2通过在action类中定义成员变量接收请求参数,struts2只能使用多例模式管理action。springmvc通过在controller方法中定义形参接收请求参数,springmvc可以使用单例模式管理controller。

C、springmvc是基于方法开发的,注解开发中使用requestMapping将url和方法进行映射,如果根据url找到controller类的方法生成一个Handler处理器对象(只包括一个method)。struts2是基于类开发,每个请求过来创建一个action实例,实例对象中有若干的方法。开发中建议使用springmvc,springmvc方法更类似service业务方法。

E、Struts采用值栈存储请求和响应的数据,通过OGNL存取数据, springmvc通过参数绑定器是将request请求内容解析,并给方法形参赋值。

Spring的核心有很多.其中比较主要也是我们常用的就是AOP,IOC,DI.也就是面向切面编程,控制反转,依赖注入.Spring一般是作为容器管理其他框架.例如常见的web层框架(struts2,springMVC)和持久成框架(mybatis,hibernate).一般都由spring来管理

完整答案:

(1)aop:面向切面编程,将跟业务逻辑没有关系的代码提取出来,在调用目标方法之前或者之后执行。常用场景,事务,日志,权限控制,异常处理等方面。

(2)ioc:创建对象的权利,交给spring容器创建。

 (3)di:如果一个对象A需要使用另一个对象B才能实现某个功能,这时就可以说A对象依赖于B对象,而Spring容器在创建A对象时,会自动将A对象需要的B对象注入到A对象中,此过程就是依赖注入。

核心容器:核心容器提供 Spring 框架的基本功能。核心容器的主要组件是 BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转 (IOC) 模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。

    Spring 上下文:Spring 上下文是一个配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企业服务,例如 JNDI、EJB、电子邮件、国际化、校验和调度功能。

    Spring AOP:通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何对象支持 AOP。Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,不用依赖 EJB 组件,就可以将声明性事务管理集成到应用程序中。

    Spring DAO:JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。

    Spring ORM:Spring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构。

    Spring Web 模块:Web 上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文。所以,Spring 框架支持与 Jakarta Struts 的集成。Web 模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。

    Spring MVC 框架:MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。通过策略接口,MVC 框架变成为高度可配置的,MVC 容纳了大量视图技术,其中包括 JSP、Velocity、Tiles、iText 和 POI。

说说你对mybatis框架的理解

Mybatis是一个优秀的ORM框架.应用在持久层. 它对jdbc的 操作数据库过程 进行封装,使开发者只需要关注 SQL 本身,而不需要花费精力去处理例如注册驱动、创建connection、等jdbc繁杂的过程代码.一般使用mapper代理的方式开发.直接在xml里面写sql(如果对hibernate了解.可以话题转向mybatis和hibernate的对比)

完整答案:

Mybatis的工作流程

(1) mybatis配置

SqlMapConfig.xml,此文件作为mybatis的全局配置文件,配置了mybatis的运行环境等信息。

mapper.xml文件即sql映射文件,文件中配置了操作数据库的sql语句。此文件需要在SqlMapConfig.xml中加载。

(2) 通过mybatis环境等配置信息构造SqlSessionFactory即会话工厂

(3) 由会话工厂创建sqlSession即会话,操作数据库需要通过sqlSession(DefaultSqlSession)进行。

(4)  mybatis底层自定义了Executor(BaseExecutor)执行器接口操作数据库,Executor接口有两个实现,一个是基本执行器、一个是缓存执行器。

(5) Mapped Statement也是mybatis一个底层封装对象,它包装了mybatis配置信息及sql映射信息等。mapper.xml文件中一个sql对应一个Mapped Statement对象,sql的id即是Mapped statement的id。

(6)  Mapped Statement对sql执行输入参数进行定义,包括HashMap、基本类型、pojo,Executor通过 Mapped Statement在执行sql前将输入的java对象映射至sql中,输入参数映射就是jdbc编程中对preparedStatement设置参数。

(7)  Mapped Statement对sql执行输出结果进行定义,包括HashMap、基本类型、pojo,Executor通过 Mapped Statement在执行sql后将输出结果映射至java对象中,输出结果映射过程相当于jdbc编程中对结果的解析处理过程。

说说你对hibernate框架的理解

Hibernate是轻量级的持久层解决方案,是一个关系数据库ORM框架, 对JDBC访问数据库的代码做了封装.我们可以很容易的对数据库进行增删改查操作.

完整答案:

hibernate查询方式?

    (1)导航对象图检索方式。根据已经加载的对象,导航到其他对象。

    (2)OID检索方式。使用get或者load加载对应的对象

    (3)HQL检索方式。

    (4)QBC检索方式。

    (5)SQL检索方式。

sql与hql的区别?

    (1)sql是直接操作数据库的

    (2)hql是通过操作对象操作数据库,对大小写敏感。

一级缓存和二级缓存的区别?

    (1)一级缓存是session级别的缓存,二级缓存是sessionFactory级别的缓存。

hibernate中get和load的区别?

    get和load都是根据id获取数据。

    (1)get先查询session中对应id是否有数据,如果有则直接返回,有查询数据库,如数据库中没有则返回为null;

    (2)load方式查询session中对应id是否有数据,如果没有生成代理对象,查询数据库。如没有对应的id则抛出异常

Hibernate和mybatis对比

注意:两个技术已经很多年了,技术非常成熟.用户群体很大.不能片面的用好与不好来说.只能说适合不适合.因为每个东西都有擅长和不擅长

(1)在移植性方面hibernate配置一下方言即可.而一般情况下mybatis则需要修改sql语句

(2)hibernate是一个完全的ORM框架.完全的面向对象.更符合我们开发者的思维模式.mybatis需要我们手动写sql语句

(3)hibernate的优化成本比较高.因为hibernate的sql语句是自动生成的,所以在优化方面一般的新手无从下手.而mybatis只要修改sql就可以了.更加容易上手

(如果对某一个框架非常了解.这里话锋可以转向具体的详细介绍某一个框架)

7、对JAVA的认识

Java是一门面向对象的编程语言,从C++衍生出来的,摒弃了c++中难以理解的多继承、指针等概念。单看语言,两种语言的语法上相类似,功能上也彼此接近,但是执行与处理机制完全不同,java的应用在高层,离不开逻辑业务,而c++在中间和底层,可以离开逻辑业务,为java服务。

解释对编译:Java是一种解释性语言,意味着它在执行的时候会被“翻译”JVM成二进制形式,c++是编译性语言,一步到位成机器语言。

内存安全:java会给定数组分配任意参数,即使超出范围也只会返回错误提示,而c++会引起错误,甚至是奔溃。

指针:java不支持指针,可以使用值引用的方式进行值传递,而c++中指针允许直接在内存中进行管理。

重载:java允许方法重载,而c++允许运算符重载。

垃圾回收机制:java自动回收,而c++用析构函数回收垃圾。

语言的区别:

(1)java只能单继承,即一个类只能由一个父类继承,而c++可以多继承,一个类有多个父类。

(2)java中运算符都用运算符“.”,而C++中的域运算符用“::”,指针运算用“->”;。

(3)java中采用关键字“import”以包的形式导入,文件层级之间采用符号“.”隔开,C++中包含文件采用预处理命令“#include”,文件层级之间用符号“\”隔开。

(4)java的程序代码是在包package里面,而C++中所有的程序代码都在一个“.h”或者“.cpp”文件里面。

(5)java中声明常量的关键字是“final”。

8、听过ftp吗?

ftp(file transfer protocol)文件传输协议,用于internet上的控制文件的双向传输。同时,它也是一个应用程序(Application)。在FTP的使用当中,用户经常遇到两个概念:“下载”(Download)和"上传"(Upload)。"下载"文件就是从远程主机拷贝文件至自己的计算机上;"上传"文件就是将文件从自己的计算机中拷贝至远程主机上。

9、Java编译处理过程

A、源文件由编译器编译成字节码
B、字节码由java虚拟机解释运行
因为java程序既要编译同时也要经过JVM的解释运行,所以说Java被称为半解释语言。

10、Javaee、Javase的区别

Java SE(标准版),主要活跃在桌面领域,主要包含了Java API组件。

Java EE(企业版),活跃在企业级领域,除了包含Java API组件外, 还扩充有Web组件、事务组件、分布式组件、EJB组件、消息组件等,综合这些技术, 开发人员完全可以构建出一个具备高性能、结构严谨的企业级应用,并且Java EE也是用于构建SOA(面向服务架构)的首选平台。

Java ME(精简版),活跃在嵌入式领域, 称之为精简版的原因是,它仅保留了Java API中的部分组件,以及适应设备的一些特有组件。

11、Java虚拟机

java虚拟机是执行字节码文件(.class)的虚拟机进程。
java源程序(.java)被编译器编译成字节码文件(.class)。
然后字节码文件,将由java虚拟机,解释成机器码(不同平台的机器码不同),利用机器码操作硬件和操作系统。

12、JRE和JDK的区别

jdk是java的开发工具包,其中包括jre,而JDK包括了同版本的JRE,此外还包括有编译器和其它工具 jre是java的运行时环境; JDK是java开发工具包(java Development Kit)的缩写。 它是一种构建在java平台上发布的应用程序、apple和组件的开发环境。 JDK是一切java应用程序的基础,所有的java应用程序是构建在这个之上的。 它是一组API,也可以说是一些java Class。要成为一个Java程序员,JDK是必不可少的最基本的工具。

JRE是Java运行环境(Java Runtime Enviroment)的缩写。 它基本上就和Java虚拟机是同一个概念。 一般来说,在谈论一个具体的产品的时候,可以说“JRE”,而说到理论中的一个模型的时候,我们常用的是“Java虚拟机”。 要使用Java程序,JRE是必不可少的环境。

13、JDBC的操作步骤

     ·加载驱动程序

     ·通过Connection和DriverManager完成数据库的连接

     ·通过一些类完成数据库的操作

          ·Statement:完成数据库的增删改查操作(也叫数据库操作类)

          ·PreparedStatement:完成数据库的增删改查操作,但是多了一个预处理的过程

          ·ResultSet:接受数据库查询结果

     ·关闭数据库连接,在实际开发中,数据库的资源非常有限,操作完成之后必须要关闭,不然很容易造成数据库的崩溃。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

毛栗子201105

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值