2010年11月份 java开发基础面试题--整理复盘(2020.11.03)



1、GC是什么?为什么要有GC?

GC是垃圾收集的意思(GabageCollection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java 语言没有提供释放已分配内存的显示操作方法。

2、简述垃圾回收机制。

在Java中,程序员是不需要显示的去释放一个对象的内存的,而是由虚拟机自行执行。在JVM中,有一个垃圾回收线程,它是低优先级的,在正常情况下是不会执行的,只有在虚拟机空闲或者当前堆内存不足时,才会触发执行,扫面那些没有被任何引用的对象,并将它们添加到要回收的集合中,进行回收。

3、Spring有几种配置方式?

将Spring配置到应用开发中有以下三种方式:
1.基于XML的配置

依赖和服务需要在专门的配置文件中来实现。
配置文件通常以< Bean>开头,然后可以配置:context、beans、jdbc、tx、aop、mvc、aso

2.基于注解的配置
可以用注解的方式来替代XML方式的bean描述,可以将bean描述转移到组件类的内部,只需要在相关类上、方法上或者字段声明上使用注解即可。

<beans>
	<context:annotation-config/>
	<!--配置完成后可自动装配变量-->
</beans>
  1. @Required:该注解应用于设值方法。
  2. request:在请求bean范围内会每-个来自客户的网络请求创建一一个实例,在请求完成以后bean 会失效并被垃圾回收器回收。
  3. Session:与请求范围类似,确保每个session中有一一个bean的实例,在session过期后,bean 会随之失效。
  4. global- session:global-session和Portlet应用相关。当你的应用部署在Portlet容器中工作时,它包含很多portlet。 如果你想要声明让所有的portlet共用全局的存储变量的话,那么这全局变量需要存储在global-session中。
    全局作用域与Servlet 中的session作用域效果相同。

3.基于Java的配置

4、SpringMVC的流程

1.用户发送请求至前端控制器DispatcherServlet。
2.DispatcherServlet收到请求调HandlerMapping处理器映射器。
3.处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)-并返回给DispatcherServlet。
4.DispatcherServlet调用HandlerAdapter处理器适配器,
5.HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。
6.Controller执行完成返回ModelAndView。
7.HandlerAdapter将controller 执行结果ModelAndView返回给DispatcherServlet。
8.DispatcherServlet将ModelAndView传给ViewReslover视图解析器。
9.ViewReslover解析后返回具体View。
10.DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。
11.DispatcherServlet响应用户。

5、#{}和${}的区别是什么?

1、#{}是预编译处理,${}是字符串替换。
2、Mybatis在处理#{}时,会将sql中的#{}替换为?号,调用PreparedStatement的set方法来赋值;
3、Mybatis在处理${}时,就是把${}替换成变量的值。
4、使用#{}可以有效的防止SQL注入,提高系统安全性。

6、为什么说Mybatis是半自动ORM映射工具?它与全自动的区别在哪里?

Hibernate属于全自动ORM映射工具,使Hibernate查询关联对象或者关联集合对象时,可以根据对象关系模型直接获取,所以它是全自动的。
而Mybatis在查询关联对象或关联集合对象时,需要手动编写sql来完成,所以,称之为半自动ORM映射工具。

7、java获取反射的三种方式

1、通过new对象实现反射机制
2、通过路径实现反射机制
3、通过类名实现反射机制

public class Get {
	// 获取反射机制三种方式
	public static void main (String [] args) throwsClassNotFoundException {
		// 方式1(通过建立对象) 
		Student stu =new Student(); 
		Class classobj1=stu.getClass(); 
		System.out.println (classobj1.getName()); 
		// 方式2(所在通过路径-相对路径) 
		Class classobj2=Class.forName (" fanshe.Student "); 
		System.out.println (classobj2.getName()); 
		// 方式3(通过类名) 
		Class classobj3=Student.class;; 
	 	System.out.println (classobj3.getName()); }}

8、异常分类

  • 错误: Error类以及他的子类的实例,代表了JVM本身的错误。错误不能被程序员通过代码处理, Error很少出现。
    因此,程序员应该关注Exception为父类的分支下的各种异常类。
  • 异常: Exception以及他的子类,代表程序运行时发送的各种不期望发生的事件。可以被Java异常处理机制使用,
    是异常处理的核心。
    在这里插入图片描述

9、wait和sleep的区别

1、 sleep来自Thread类,和wait来自object类。
2.最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。
3、wait , notify和notifyAll只能在同步控制方法或者同步控制块里面使用,而sleep可以在任何地方使用(使用范围)
4、sleep必须捕获异常,而waitnotifynotifyAll不需要捕获异常

  • (1)sleep方法属于Thread类中方法,表示让一个线程进入睡眠状态,等待一定的时间之后 ,自动醒来进入到可运行状态,不会马上进入运行状态,因为线程调度机制恢复线程的运行也需要时间,一个线程对象调用了sleep方法之后,并不会释放他所持有的所有对象锁,所以也就不会影响其他进程对象的运行。但在sleep的过程中过程中有可能被其他对象调用它的interrupt(),产生InterruptedException异常,如果你的程序不捕获这个异常,线程就会异常终止,进入TERMINATED状态,如果你的程序捕获了这个异常,那么程序就会继续执行catch语句块(可能还有finally语句块)以及以后的代码。
    注意sleep()方法是一个静态方法,也就是说他只对当前对象有效,通过t. sleep()让对象进入sleep ,这样的做法是错误的,它只会是使当前线程被sleep而不是t线程
  • (2) wait 属于object的成员方法,一旦一个对象调用了wait方法,必须要采用notify()notifyAll()方法唤醒该进程;如果线程拥有某个或某些对象的同步锁,那么在调用了wait()后,这个线程就会释放它持有的所有同步资源,而不限于这个被调用了wait()方法的对象。wait()方法也同样会在wait的过程中有可能被其他对象调用interrupt()方法而产生。

10、Java面向对象编程三大特性:封装继承多态

封装

封装把一个对象的属性私有化,同时提供一些可以被外界访问的属性的方法,如果属性不想被外界访问,我们大可不必提供方法给外界访问。但是如果一个类没有提供给外界访问的方法,那么这个类也没有什么意义了。
继承
继承是使用己存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能,但不能选择性地继承父类。通过使用继承我们能够非常方便地复用以前的代码。

关于继承如下3点请记住:

  • 1.子类拥有父类非private 的属性和方法。
  • 2.子类可以拥有自己属性和方法,即子类可以对父类进行扩展。
  • 3.子类可以用自己的方式实现父类的方法。(以后介绍) 。

多态
所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。

在Java中有两种形式可以实现多态:继承(多个子类对同一方法的重写)和接
口(实现接口并覆盖接口中同一方法) 。

11、自动装箱与拆箱

  • 装箱:将基本类型用它们对应的引用类型包装起来;
  • 拆箱:将包装类型转换为基本数据类型;

12、在一个静态方法内调用一个非静态成员为什么是非法的

由于静态方法可以不通过对象进行调用,因此在静态方法里,不能调用其他非静态变量,也不可以访问非静态变量成员。

13、 在Java 中定义一个不做事且没有参数的构造方法的作用

Java程序在执行子类的构造方法之前,如果没有用super( 来调用父类特定的构造方法,则会调用父类中“没有参数的构造方法”。因此,如果父类中只定义了有参数的构造方法,而在子类的构造方法中又没有用super() 来调用父类中特定的构造方法,则编译时将发生错误,因为Java程序在父类中找不到没有参数的构造方法可供执行。解决办法是在父类里加上一个不做事且没有参数的构造方法。

14、SSM是什么

Spring + Spring MVC + MyBatis
今天面试过程中,面试官问我,ssm是什么,可以简单介绍一下么,当时就懵了,学了这么久的ssm,竟然解释不清ssm是什么

ssm是一个java后端开发的框架集,由Spring、MyBatis两个开源框架整合而成(SpringMVC是Spring中的部分内容)。常作为数据源较简单的web项目的框架。

  • 其中spring是一个轻量级的控制反转和切面编程的容器框架。
  • mybatis是一个支持普通sql查询,存储过程和高级映射的优秀持久层框架。
  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值