笔试简答题范围:
第一部分:Java面向对象 1道题
一、请你谈谈你对类和对象的理解?
类是对现实生活中一类具有共同属性和行为的事物的抽象。
对象是类的一个实例,是具体的。
二、简述面向对象的三大特征
面向对象具有三大特征:封装、继承、多态。
封装:通过方法来控制成员变量的操作,提高了代码的安全性;把代码用方法进行封装,提高了代码的复用性。
继承:继承的出现提高了代码的复用性,提高软件开发效率;继承的出现让类与类之间产生了关系,提供了多态的前提。
多态:多态的出现提高了程序的扩展性,不能访问子类的特有功能。
三、四大访问修饰符及其特点
public(公共访问权限):指定该变量是公共的,可以被任何对象的方法访问。
protected(子类访问权限):指定该变量可以被自己的类及其子类访问。
private(当前类访问权限):指定该变量只能被自己的类访问。
default(包访问权限):同一个包里的类可以访问,其他包里的类不可以,通常省略不写。
四、成员变量和静态变量的区别:
1)、成员变量所属于对象,所以也称为实例变量;静态变量所属于类,所以也称为类变量。
2)、成员变量存在于堆内存中;静态变量存在于方法区中。
3)、成员变量随着对象创建而存在,随着对象被回收而消失;静态变量随着类的加载而存在,随着类的消失而消失。
4)、成员变量只能被对象所调用;静态变量可以被对象调用,也可以被类名调用。
所以,成员变量可以称为对象的特有数据,静态变量称为对象的共享数据。
五、构造方法具有哪些特性?
(1)、构造方法名称与类名称相同;
(2)、构造方法无返回值类型,可以有方法参数,可以用public、private、protected修饰符,默认是public;
(3)、构造方法可以重载,可以相互调用;
(4)、未声明构造方法,每个类存在由编译器提供的无参数的默认构造方法;
(5)、当在类中自定义构造方法之后,默认的无参构造方法自动消失,如果需要无参构造方法,需要手动添加。
六、重载与重写的区别★★★
重载:同一个类中,方法名称相同,参数列表不同(参数个数不同、数据类型不同),与返回值类型无关
重写:子父类中,方法名称相同,参数列表相同(参数个数相同、数据类型相同)、返回值类型都相同。子类要重写父类的方法,方法的权限修饰符不能比父类的更低。
七、抽象类和接口异同★★★
相同点:
- 、都不能直接实例化对象;
- 、都可以包含抽象方法,其子类必须重写这些抽象方法。
区别:
- 、一个类只能继承一个直接父类,却可以实现多个接口。
- 、接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。
- 、抽象类有构造函数,接口没有构造函数。
- 、抽象类可以有抽象方法、非抽象方法,接口只能有抽象方法或者静态、默认方法。
八、static、this、super、final关键字的作用★★★
final修饰的类该类不能再有子类,final修饰的方法该方法不能被子类覆盖,final修饰的变量该变量就成为了常量,值无法改变。
static修饰符表示静态的,其修饰成员属于类,使用类名直接调用。
this指向当前类的对象。
super指代父类。
九、什么是自动装拆箱?请写出八种基本数据类型以及他们的封装类★★★
自动装箱:自动将基本数据类型转换成包装器类型。
自动拆箱:自动将包装器类型转换成基本数据类型。
基本数据类型:byte、short、int、long、float、double、char、boolean
基本数据类型的封装类:Byte、Short、Integer、Long、Float、Double、Character、Boolean
十、Java中基本类型与引用类型举例,它们的区别?
基本数据类型(也叫做简单数据类型、值类型):int、double、boolean、char、byte、short、long、float
引用数据类型(也叫做复合数据类型):数组、String、类、接口等
区别:
基本数据类型变量存储的是变量的值,引用数据类型变量存储的是变量的内存地址。
基本数据类型变量具体内容存储在堆栈中,引用数据类型变量具体内容存储在堆中。
十一、==和equals的区别★★★
- 、==是运算符,equals是方法。
- 、==用在基本数据类型当中,用来比较数值是否相等;==用在引用数据类型当中,用来比较对象地址值是否相等;
- 、equals:用来比较内容是否相等。
十二、String、StringBuilder、StringBuffer的区别
- 、String是只读字符串,内容不可改变;StringBuilder、StringBuffer表示的字符串对象可以直接修改。
- 、StringBuilder适用于单线程,效率更高,StringBuffer适用于多线程,效率比StringBuilder低,但是比String高。
十三、数组和ArrayList集合的区别
- 、Array可以包含基本数据类型和对象类型;ArrayList只能包含对象类型。
- 、Array大小是固定的,ArrayList的大小是动态变化的。
- 、对于基本数据类型数据,集合使用自动装箱来减少编码工作量。但是,当处理固定大小的基本数据类型的时候,这种方式相对比较慢。
- 、ArrayList作为Array的增强版,提供了更多的方法和特性。
十四、java中异常处理机制常用到的关键字有哪些?★★★
java中异常处理机制常用到的关键字:try、catch、finally、throw、throws
十五、throw和throws的区别
(1)、throw用于抛出异常对象,后面跟的是异常对象;throw用在方法内。
(2)、throws用于抛出异常类,后面跟的异常类名,可以跟多个,用逗号隔开;throws用在方法上。
十六、举例常见的五个编译时异常★★★
SQL异常:SQLException
IO异常:IOException
文件找不到异常:FileNotFoundException
类找不到异常:ClassNotFoundException
参数不合法异常:IllegaArguementException
十七、final、finally、finalize的区别
被final修饰的类,不能作为父类而被子类继承,将变量或方法声明为final,可以保证它们被使用的过程中不被修改。
finally是在异常处理时提供finally块来执行任何清除操作。
finalize方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。
十八、Statement与PreparedStatement的区别
(1)、Statement不安全,PreparedStatement是安全的。
(2)、Statement不能进行预编译,PreparedStatement可以预编译SQL语句。
(3)、Statement不能使用占位符,PreparedStatement可以使用“?”占位符。
(4)、PreparedStatement相比较Statement而言,SQL语句更加简洁清晰,效率更高。
第二部分:JSP动态网站开发 2道题
一、<%%>、<%! %>、<%=%> 、<%-- --%>的区别
<%%> 这里面可以添加java代码片段
<%! %> 这里添加java方法
<%=%> 将变量或表达式值输出到页面
<%-- --%> jsp注释
二、常见的状态码及其含义
200:一切正常
300/301:页面重定向(跳转)
302:临时性重定向,表示请求的资源被分配了新的URL,希望本次访问使用新的URL
400:错误请求,服务器不理解请求的语法
403:权限不足(如某目录结构不可见)
404:资源不存在
500:服务器内部错误(代码有误)
三、B/S架构和C/S架构的区别
(1)、B/S架构即浏览器和服务器架构模式;C/S架构是客户端和服务器架构模式。
(2)、B/S架构通过浏览器直接访问服务端;C/S架构必须安装客户端软件。
(3)、当客户端软件需要维护、升级,需要将C/S架构中所有的客户端软件卸载并重新安装;而B/S架构无需安装客户端软件。
(4)、由于客户端实现与服务器的直接相连,C/S架构响应速度更快。
四、九大内置(隐式)对象概述★★★
out:用于页面输出
request:得到用户请求信息
response:服务器向客户端的回应消息
session:用来保存用户的信息
application:所有用户的共享信息
config:服务器配置,可以取得初始化参数
page:指当前页面转换后的Servlet类的实例
pageContext:JSP的页面容器
exception:表示JSP页面所发生的异常,在错误页中才起作用
五、session与application的异同
区别:
- 、session是基于用户的,application是基于全局的、跨用户的。
- 、session从会话连接开始,生命周期开始。application是在web工程启动,生命周期开始,直到web容器关闭。
相同点:
- 、都能实现会话跟踪
- 、都保存在服务器端
- 、都能共享数据
六、jsp对象作用域★★★
四大作用域-----存取值的一个范围
page:只用于当前页面
request:请求,当前页面+跨页面(转发的方式)
session:会话层级,只要不关浏览器,不到期都可以使用
application:只要不停止服务器都可以使用
七、使用JDBC链接数据库
(1)、加载JDBC驱动
(2)、与数据库建立连接
(3)、发送SQL语句,得到返回结果
(4)、处理返回结果
(5)、数据库访问结束后,进行资源释放
八、JSP与Servlet的区别
- 、jsp可以被看作一个特殊的Servlet,jsp经编译后就变成了Servlet。
- 、jsp更擅长表现于页面显示,servlet更擅长于逻辑控制。
- 、Servlet中没有内置对象,Jsp中的内置对象都是必须通过HttpServletResponse对象以及HttpServlet对象得到。
- 、Servlet则是个完整的Java类,这个类的Service方法用于生成对客户端的响应。
九、Servlet页面跳转方式有哪些,并简述它们的区别(至少三点)★★★
Servlet页面跳转方式有两种,分别是:redirect方式、forward方式。
redirect方式:
- 、页面的路径是相对路径;
- 、该方式可以将页面跳转到任何页面,不一定局限于web应用中;
- 、由于跳转后浏览器地址发生变化;
- 、该方式传值有两种方法:url中带参数,session。
forward方式:
- 、页面的路径是绝对路径;
- 、该方式只能跳转到本web应用中的页面上;
- 、跳转后地址栏不会发生变化;
- 、该方式传值有三种方法:url中带参数,session,request.setAttribute()。
十、简述Servlet的生命周期★★★
servlet的生命周期分为四个阶段:
(1)、实例化:为对象分配空间
(2)、初始化:调用 init () 方法,为对象的属性赋值
(3)、处理请求服务:调用 service() 方法
(4)、对象销毁:调用 destroy() 方法,最后由 JVM 的垃圾回收器进行垃圾回收
十一、Servlet会话跟踪技术有哪些?★★★
(1)、URL重写
(2)、隐藏域技术
(3)、session
(4)、cookie
十二、session与cookie的区别★★★
(1)、cookie 数据存放在客户的浏览器上,session 数据放在服务器上。
(2)、由于可以通过分析存放在本地的cookie 进行 cookie 欺骗,考虑到安全,应当使用 session。
(3)、session 会比较占用服务器内存,考虑到减轻服务器性能方面,应当使用 cookie。
(4)、cookie 中只能存储文本类型,session 中能存储 Object 类型。
(5)、单个 cookie 保存的数据不能超过 4K。
- 过滤器的生命周期★★★
过滤器的生命周期分为四个阶段:
(1)、实例化:在web.xml文件中声明一个过滤器,这就是实例化
(2)、初始化:在实例化后,服务器会调用所写的java类中的init方法
(3)、过滤:在初始化后调用doFilter()方法,不管是响应还是请求都进行过滤
(4)、销毁:当服务器停止时,对过滤器销毁,调用destory() 方法
第三部分:Spring框架 1道题
一、谈谈你对Spring的 IOC、AOP 的理解(请你谈谈你对Spring框架的理解)★★★
Spring的核心技术之一是IOC(反转控制)容器,IOC也是一种编程思想,用于实现模块之间的解耦。在Spring中它的作用就是把对象的创建、初始化、销毁交给spring来管理,而不是由开发者控制,实现控制反转。
Spring的另一核心技术就是AOP,AOP的思想就是把横切性的问题(如日志和事务管理)与主业务逻辑进行分离,从而实现解耦的目的。 简单的说它就是把我们程序重复的代码抽取出来,在需要执行的时候,使用动态代理的技术,在不修改源码的基础上,对我们的已有方法进行增强。
二、Spring依赖注入的方式★★★
(1)、构造器注入
(2)、setter方法注入
(3)、工厂注入
(4)、注解注入
三、使用Spring框架的优缺点
优点:
(1)、所有框架几乎都可以和Spring整合在一起使用
(2)、避免关键字new造成的耦合问题
(3)、不需要进行明确的引用关系传递,直接通过配置完成
(4)、本身就是一个工厂,不需要再编写工厂类了
缺点:
(1)、Spring基于大量的xml配置文件,花费大量时间在配置;
(2)、Spring内容太庞大,打断点查看会出现十几二十层代码,阅览性不强
四、BeanFactory和FactoryBean的区别
(1)、BeanFactory是个Factory,也就是IOC容器或对象工厂;FactoryBean是个Bean,是一个能生产或者修饰对象生成的工厂bean
(2)、BeanFactory负责创建和维护容器内所有的bean对象;FactoryBean是用来创建一类bean的接口,通过实现FactoryBean接口,重写FactoryBean的getObject()方法来生成bean对象
五、Bean的作用域
(1)、singleton
(2)、prototype
(3)、request
(4)、session
(5)、global session
六、Spring常用注解
命题点:
(1)、什么是基于Java的Spring注解配置? 给一些注解的例子
答:基于Java的配置,允许你在少量的Java注解的帮助下,进行你的大部分Spring配置而非通过XML文件。
以@Configuration 注解为例,它用来标记类可以当做一个bean的定义,被Spring IOC容器使用。另一个例子是@Bean注解,它表示此方法将要返回一个对象,作为一个bean注册进Spring应用上下文。
(2)、怎样开启注解装配?
答:注解装配在默认情况下是不开启的,为了使用注解装配,我们必须在Spring配置文件中配置 <context:annotation-config/>元素。
(3)、@Component, @Controller, @Repository, @Service 有何区别?
答:@Component, 就相当于bean标签,创建当前类对象存入spring的ioc容器
@Controller,作用于表现层(spring-mvc的注解)
@Service,作用于业务逻辑层
@Repository,作用于持久层
(4)、@Autowired 注解有什么作用
答:@Autowired作用是自动按照类型注入数据
- 、@Qualifier 注解有什么作用
答:@Qualifier 作用是在自动按照类型注入的基础之上,再按照bean的id注入数据
- 、@Autowired和@Resource之间的区别
答:@Autowired作用是自动按照类型注入数据; @Resource作用是直接按照Bean的id注入数据
Spring常用注解可以分为四类:
1)、创建对象的有四个:
@Component, 就相当于bean标签,创建当前类对象存入spring的ioc容器,
由它衍生出三个注解@Controller、@Service、@Repository。
2)、注入数据的有四个
@Value;用于注入基本类型和String的注解
用于注入其他bean类型的有三个注解,
@Autowired,作用是自动按照类型注入,
@Qualifier,作用是在自动按照类型注入的基础之上,再按照bean的id注入,
@Resource,作用是直接按照Bean的id注入。
3)、用于调整bean的作用范围:@Scope
4)、和生命周期相关的包括两个:
@PostConstruct:指定初始化方法,相当于init-method
@PreDestroy:指定销毁方法,相当于destroy-method,
5)、Spring纯注解
@Bean,作用是把当前方法的返回值作为bean的对象,存入ioc容器
@ComponentScan,用于指定创建容器时要扫描的包。
@PropertySource,用于指定properties文件的位置
@Configuration,作用是表明当前类是一个配置类。
@Import,用于导入其他的配置类字节码
八、Spring数据库事务管理
Spring的事务机制包括声明式事务和编程式事务。
编程式事务管理:比较灵活,但是代码量大,存在重复的代码比较多,失去了AOP的意义。
声明式事务管理:
优点:不需要在业务逻辑代码中编写事务相关代码,只需要在配置文件配置或使用注解(@Transaction),这种方式没有侵入性。
缺点:声明式事务的最细粒度作用于方法上
九、解释一下Spring AOP里面的几个名词
连接点(JoinPoint):你要对哪些方法进行增强,那些方法就叫连接点
切入点(Pointcut):你要对方法内部哪一个位置进行增强
增强类:定义增强方法的类
增强/通知(Advice):增强/通知是个在方法执行前或执行后要做的动作
切面(Aspect):将多个类的通用行为封装成可重用的模块,该模块含有一组API提供横切功能。比如,一个日志模块可以被称作日志的AOP切面。简单说切面等于切入点+通知。
代理:本质来说,Spring AOP体现代理模式
目标对象:指的是被代理的对象,比如增删改查方法。
十、Spring通知有哪些类型?★★★
前置通知(before):前置通知,在一个方法执行前被调用。
方法执行后通知(after): 在方法执行之后调用的通知,无论方法执行是否成功。
后置通知(after-returning): 仅当方法成功完成后执行的通知。
抛出异常通知(after-throwing): 在方法抛出异常退出时执行的通知。
环绕通知(around): 在方法执行之前和之后调用的通知。
第四部分:Spring MVC框架 1道题
一、Spring MVC开发流程(详细版)★★★
(1)、用户发送请求至前端控制器DispatcherServlet;
(2)、DispatcherServlet收到请求后,调用HandlerMapping处理器映射器,请求获取Handle;
(3)、处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet;
(4)、DispatcherServlet通过HandlerAdapter处理器适配器调用处理器;
(5)、执行处理器(Handler,也叫后端控制器);
(6)、Handler执行完成返回ModelAndView;
(7)、HandlerAdapter将Handler执行结果ModelAndView返回给DispatcherServlet;
(8)、DispatcherServlet将ModelAndView传给ViewResolver视图解析器进行解析;
(9)、ViewResolver解析后返回具体View;
(10)、DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)
(11)、DispatcherServlet响应用户。
二、Spring MVC工作原理 (简化版)★★★
(1)、客户端发送请求到DispatcherServlet
(2)、DispatcherServlet 查询handlerMapping 找到处理请求的Controller
(3)、Controller 调用业务逻辑后,返回ModelAndView
(4)、DispatcherServlet 查询ModelAndView,找到指定视图
(5)、视图将结果返回到客户端
三、什么是Spring MVC ?简单介绍下你对springMVC的理解?
Spring MVC是一个基于MVC架构的用来简化web应用程序开发的应用开发框架,它是Spring的一个模块,无需中间整合层来整合,属于表现层的框架。同时它还支持Restful编程风格的请求。
四、Spring MVC的优点★★★
(1)、它是基于组件技术的,并且和Spring 提供的其他基础结构紧密集成
(2)、不依赖于Servlet API
(3)、可以任意使用各种视图技术,而不仅仅局限于JSP
(4)、支持各种请求资源的映射策略
(5)、易于扩展
五、Spring MVC的主要组件
(1)、前端控制器 DispatcherServlet(不需要程序员开发)
作用:接收请求、响应结果,相当于转发器,有了DispatcherServlet 就减少了其它组件之间的耦合度。
(2)、处理器映射器HandlerMapping(不需要程序员开发)
作用:根据请求的URL来查找Handler
(3)、处理器适配器HandlerAdapter
注意:在编写Handler的时候要按照HandlerAdapter要求的规则去编写,这样适配器HandlerAdapter才可以正确的去执行Handler。
(4)、处理器Handler(需要程序员开发)
(5)、视图解析器 ViewResolver(不需要程序员开发)
作用:进行视图的解析,根据视图逻辑名解析成真正的视图(view)
(6)、视图View(需要程序员开发jsp)
View是一个接口, 它的实现类支持不同的视图类型(jsp,freemarker,pdf等等)
六、Spring MVC 常用注解★★★
(1)、@ModelAttribute代表的是:该Controller的所有方法在调用前,先执行此@ModelAttribute方法,可用于注解和方法参数中.
(2)、@SessionAttributes即将值放到session作用域中,写在类上面。
(3)、@PathVariable实现Restful的URL参数赋值
(4)、@RequestBody是获取请求参数的全部内容,包括key和value
(5)、@ResponseBody把响应结果转成json输出
(6)、@RequestMapping是一个用来处理请求地址映射的注解,可用于类或方法上
七、@Controller和@RestController的区别
(1)、使用@Controller 注解
在对应的方法上,视图解析器可以解析return 的jsp,html页面,并且跳转到相应页面。
若返回json等内容到页面,则需要加@ResponseBody注解
(2)、@RestController注解
相当于@Controller+@ResponseBody两个注解的结合;返回json数据不需要在方法前面加@ResponseBody注解了,但使用@RestController这个注解,就不能返回jsp,html页面,视图解析器无法解析jsp,html页面
八、Spring MVC里面拦截器是怎么写的
有两种写法,一种是实现HandlerInterceptor接口,另外一种是继承适配器类,接着在接口方法当中实现处理逻辑;然后在SpringMVC的配置文件中配置拦截器即可