【无标题】

java开发

笔试简答题范围:

第一部分:Java面向对象   1道题

一、请你谈谈你对类和对象的理解?

类是对现实生活中一类具有共同属性和行为的事物的抽象。

对象是类的一个实例,是具体的。

 

二、简述面向对象的三大特征

面向对象具有三大特征:封装、继承、多态。

封装:通过方法来控制成员变量的操作,提高了代码的安全性;把代码用方法进行封装,提高了代码的复用性。

继承:继承的出现提高了代码的复用性,提高软件开发效率;继承的出现让类与类之间产生了关系,提供了多态的前提。

多态:多态的出现提高了程序的扩展性,不能访问子类的特有功能。

 

三、四大访问修饰符及其特点

public(公共访问权限):指定该变量是公共的,可以被任何对象的方法访问。

protected(子类访问权限):指定该变量可以被自己的类及其子类访问。

private(当前类访问权限):指定该变量只能被自己的类访问。

default(包访问权限):同一个包里的类可以访问,其他包里的类不可以,通常省略不写。

 

四、成员变量和静态变量的区别:

1)、成员变量所属于对象,所以也称为实例变量;静态变量所属于类,所以也称为类变量。

2)、成员变量存在于堆内存中;静态变量存在于方法区中。

3)、成员变量随着对象创建而存在,随着对象被回收而消失;静态变量随着类的加载而存在,随着类的消失而消失。

4)、成员变量只能被对象所调用;静态变量可以被对象调用,也可以被类名调用。

所以,成员变量可以称为对象的特有数据,静态变量称为对象的共享数据。

 

五、构造方法具有哪些特性?

(1)、构造方法名称与类名称相同;

(2)、构造方法无返回值类型,可以有方法参数,可以用public、private、protected修饰符,默认是public;

(3)、构造方法可以重载,可以相互调用;

(4)、未声明构造方法,每个类存在由编译器提供的无参数的默认构造方法;

(5)、当在类中自定义构造方法之后,默认的无参构造方法自动消失,如果需要无参构造方法,需要手动添加。

 

六、重载与重写的区别★★★

重载:同一个类中,方法名称相同,参数列表不同(参数个数不同、数据类型不同),与返回值类型无关

重写:子父类中,方法名称相同,参数列表相同(参数个数相同、数据类型相同)、返回值类型都相同。子类要重写父类的方法,方法的权限修饰符不能比父类的更低。

 

七、抽象类和接口异同★★★

相同点:

(1) 、都不能直接实例化对象;

(2) 、都可以包含抽象方法,其子类必须重写这些抽象方法。

区别:

(1) 、一个类只能继承一个直接父类,却可以实现多个接口。

(2) 、接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量。

(3) 、抽象类有构造函数,接口没有构造函数。

(4) 、抽象类可以有抽象方法、非抽象方法,接口只能有抽象方法或者静态、默认方法。

 

八、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的区别★★★

(1) 、==是运算符,equals是方法。

(2) 、==用在基本数据类型当中,用来比较数值是否相等;==用在引用数据类型当中,用来比较对象地址值是否相等;

(3) 、equals:用来比较内容是否相等。

 

十二、String、StringBuilder、StringBuffer的区别

(1) 、String是只读字符串,内容不可改变;StringBuilder、StringBuffer表示的字符串对象可以直接修改。

(2) 、StringBuilder适用于单线程,效率更高,StringBuffer适用于多线程,效率比StringBuilder低,但是比String高。

 

十三、数组和ArrayList集合的区别

(1) 、Array可以包含基本数据类型和对象类型;ArrayList只能包含对象类型。

(2) 、Array大小是固定的,ArrayList的大小是动态变化的。

(3) 、对于基本数据类型数据,集合使用自动装箱来减少编码工作量。但是,当处理固定大小的基本数据类型的时候,这种方式相对比较慢。

(4) 、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的异同

区别:

(1) 、session是基于用户的,application是基于全局的、跨用户的。

(2) 、session从会话连接开始,生命周期开始。application是在web工程启动,生命周期开始,直到web容器关闭。

相同点:

(1) 、都能实现会话跟踪

(2) 、都保存在服务器端

(3) 、都能共享数据

 

六、jsp对象作用域★★★

四大作用域-----存取值的一个范围

page:只用于当前页面

request:请求,当前页面+跨页面(转发的方式)

session:会话层级,只要不关浏览器,不到期都可以使用

application:只要不停止服务器都可以使用

 

七、使用JDBC链接数据库

(1)、加载JDBC驱动

(2)、与数据库建立连接

(3)、发送SQL语句,得到返回结果

(4)、处理返回结果

(5)、数据库访问结束后,进行资源释放

 

八、JSP与Servlet的区别

(1) 、jsp可以被看作一个特殊的Servlet,jsp经编译后就变成了Servlet。

(2) 、jsp更擅长表现于页面显示,servlet更擅长于逻辑控制。

(3) 、Servlet中没有内置对象,Jsp中的内置对象都是必须通过HttpServletResponse对象以及HttpServlet对象得到。

(4) 、Servlet则是个完整的Java类,这个类的Service方法用于生成对客户端的响应。

 

九、Servlet页面跳转方式有哪些,并简述它们的区别(至少三点)★★★

Servlet页面跳转方式有两种,分别是:redirect方式、forward方式。

redirect方式:

(1) 、页面的路径是相对路径

(2) 、该方式可以将页面跳转到任何页面,不一定局限于web应用中;

(3) 、由于跳转后浏览器地址发生变化;

(4) 、该方式传值有两种方法:url中带参数,session。

forward方式:

(1) 、页面的路径是绝对路径

(2) 、该方式只能跳转到本web应用中的页面上;

(3) 、跳转后地址栏不会发生变化;

(4) 、该方式传值有三种方法: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。

 

13、 过滤器的生命周期★★★

过滤器的生命周期分为四个阶段:

(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作用是自动按照类型注入数据

(5) 、@Qualifier 注解有什么作用

答:@Qualifier 作用是在自动按照类型注入的基础之上,再按照bean的id注入数据

(6) 、@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的配置文件中配置拦截器即可

 

 

算法   1道题

没有

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值