原创

整合一下去面试时遇到的面试题


分享一下前几天面试的面试题

1.简述JRE、JDK、和JVM的关系

JRE:英文名称(Java Runtime Environment),Java 运行时环境。它主要包含两个部分,jvm 的标准实现和 Java 的一些基本类库。它相对于 jvm 来说,多出来的是一部分的 Java 类库
JDK:英文名称(Java Development Kit),Java 开发工具包。jdk 是整个 Java 开发的核心,它集成了 jre 和一些好用的小工具。例如:javac.exe,java.exe,jar.exe 等
JVM:英文名称(Java Virtual Machine),就是我们耳熟能详的 Java 虚拟机。它只认识 xxx.class 这种类型的文件,它能够将 class 文件中的字节码指令进行识别并调用操作系统向上的 API 完成动作。所以说,jvm 是 Java 能够跨平台的核心

2.float f = 3.4; 是否正确?

不正确。3.4是双精度数,将双精度型(double)赋值给浮点型(float)属于下转型(down-casting,也称为窄化)会造成精度损失,因此需要强制类型转换float f =(float)3.4; 或者写成float f =3.4F

3.String和字符串常量的比较相等

用equals()方法

4.面向对象的四大特征和理解

  • 抽象:将具体的物体的特性抽象出来,是对真实世界的一种描述,用于模拟实际事物的特征和行为

  • 封装:封装是将对象的实现细节隐藏,然后定义一些公有方法来显示该对象的功能。封装可以保证代码具有优良模块性的基础,目的是实现代码的“高内聚,低耦合”

  • 继承:子类就是父类

  • 多态:多态是指允许不同类的对象对同一信息作出响应。不用修改源程序代码,就可以让程序选择多个运行状态。多态性包括参数化多态性和包含多态性,能够很好的解决程序函数同名问题。

5.重载和重写的理解

  • 重载:重载是指不同的函数使用相同的函数名,但是函数的参数个数或类型不同。调用的时候根据函数的参数来区别不同的函数
  • 重写:重写是指在派生类中重新对基类中的虚函数(注意是虚函数)重新实现。即函数名和参数都一样,只是函数的实现体不一样。

6.final、finally、finalize的区别和作用

  • final:修饰类:当用final修饰类的时,表明该类不能被其他类所继承。当我们需要让一个类永远不被继承,此时就可以用final修饰,但要注意:final类中所有的成员方法都会隐式的定义为final方法。修饰方法:把方法锁定,以防止继承类对其进行更改。修饰变量:final成员变量表示常量,只能被赋值一次,赋值后其值不再改变
  • finally:在异常捕捉模块里定义,即:程序抛出异常与否,如果没有特定前提,都会执行该模块下的代码。注:特定前提:1.得先进入try模块。2.在try模块中执行 System.exit (0); 3.断电/该线程断掉
  • finalize:finalize()是在java.lang.Object里定义的,也就是说每一个对象都有这么个方法。这个方法在gc启动,该对象被回收的时候被调用。其实gc可以回收大部分的对象(凡是new出来的对象,gc都能搞定,一般情况下我们又不会用new以外的方式去创建对象),所以一般是不需要程序员去实现finalize的。

7.接口是否可以使用继承?

可以

8.列出自己经常使用的JDK包

java.lang , java.awt , java.io , java.util

9.Java反射机制的作用

通过反射可以使程序代码访问装载到JVM 中的类的内部信息。(成员变量/方法/构造方法)

10.你是怎么理解Java中的泛型的?

泛型,即“参数化类型”,本质是参数化类型,也就是说所操作的数据类型被指定为一个参数

11.GC是什么?为什么要有GC?

GC是垃圾回收机制的意思。有了GC,就不需要程序员去人工释放内存空间。当Java虚拟机发觉内存资源紧张的时候,就会自动地去清理无用变量所占用的内存空间。当然,如果需要,程序员可以在Java程序中显式地使用System.gc()来强制进行一次立即的内存清理

12.什么是Java序列化?如何实现Java序列化?

  • 把对象转换为字节序列的过程称为对象的序列化,把字节序列恢复为对象的过程称为对象的反序列化。
  • 序列化的实现:将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。

13.多线程有几种实现方式?都是什么?同步的方法有几种?都是什么?

  • 实现方式:有四种方式。方式一:继承Thread类的方式。方式二:实现Runnable接口的方式。方法三实现Callable接口。方法四:使用线程池
  • 同步方式:五种。1-2:用synchronized修饰方法/代码块。3.Volatile 4. 使用重入锁实现线程同步 5. ThreadLocal

14.简述Servlet的生命周期

1. init()方法进行初始化。 2.service()方法来处理客户端的请求。 3.destroy()方法终止(结束)。(初始化,响应,终止)

15.doget和dopost的区别?

  • 通过get方式提交的数据有大小的限制,通常在1024字节左右。也就是说如果提交的数据很大,用get方法就可需要小心;而post方式没有数据大小的限制,理论上传送多少数据都可以。
  • 通过get传递数据,实际上是将传递的数据按照”key,value”的方式跟在URL的后面来达到传送的目的的;而post传递数据是通过http请求的附件进行的,在URL中并没有明文显示(post请求比get请求更安全)

16.描述JSP和Servlet的区别、共同点、各自应用的范围?

  • JSP在本质上就是SERVLET,但是两者的创建方式不一样。
  • Servlet完全是JAVA程序代码构成,擅长于流程控制和事务处理,通过Servlet来生成动态网页很不直观。
  • JSP由HTML代码和JSP标签构成,可以方便地编写动态网页。
  • 因此在实际应用中采用Servlet来控制业务流程,而采用JSP来生成动态网页。

17.Tomcat的默认服务器端口是多少?

8080

18.什么是ORM?

ORM 对象 - 关系映射(Object Relational Mapping)常用的ORM框架有:Mybatis/Hibernate

19.为什么要使用Spring框架?他有什么优点?

1.轻量级框架。2.非侵入性的。 优点:方便解耦,简化开发,声明式事务的支持,方便集成各种优秀框架。

20.MyBatis原理,为什么使用,优点是什么?

  • MyBatis 是支持普通bai SQL查询,存储过程和du高级映射的优秀持久zhi层框架。MyBatis 消除了几乎所有的JDBC代码dao和参数的手工设置以及结果集的检索。
  • MyBatis使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Ordinary Java Objects,普通的 Java对象)映射成数据库中的记录。
  • 每个MyBatis应用程序主要都是使用SqlSessionFactory实例的,一个SqlSessionFactory实例可以通过SqlSessionFactoryBuilder获得。用xml文件构建SqlSessionFactory实例是非常简单的事情。
  • 为什么使用:简单易学,灵活,提供映射标签/对象关系映射标签

21.SpringMVC的工作原理是什么?为什么要使用Spring?

  • 客户端(浏览器)发送请求,直接请求到 DispatcherServlet。

  • DispatcherServlet 根据请求信息调用 HandlerMapping,解析请求对应的 Handler。

  • 解析到对应的 Handler(也就是我们平常说的 Controller 控制器)后,开始由 HandlerAdapter 适配器处理。

  • HandlerAdapter 会根据 Handler 来调用真正的处理器开处理请求,并处理相应的业务逻辑。

  • 处理器处理完业务后,会返回一个 ModelAndView 对象,Model 是返回的数据对象,View 是个逻辑上的 View。

  • ViewResolver 会根据逻辑 View 查找实际的 View。

  • DispaterServlet 把返回的 Model 传给 View(视图渲染)。

  • 把 View 返回给请求者(浏览器)

  • SpringMVC对servlet进行封装,且SpringMVC类里面可以通过RequestMapping处理很多请求,并且支持Rest风格的请求,如DELETE/PUT等, SpringMVC参数的映射可以直接封装成实体类

22.Spring常用注解?

@Controller @Autowrid @Service @Component

23.触发器的作用?

  • 自动计算数据值,如果数据的值达到了一定的要求,则进行特定的处理。
  • 同步实时地复制表中的数据。
  • 实现复杂的非标准的数据库相关完整性规则。
  • 可在写入数据表前,强制检验或转换数据。
  • 触发器发生错误时,异动的结果会被撤销。

24.什么是存储过程?用什么来调用?

存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说只需创建一次,以后在该程序中就可以调用多次。如果某次操作需要执行多次SQL,使用存储过程比单纯SQL语句执行要快。 调用: 1)可以用一个命令对象来调用存储过程。 2)可以供外部程序调用,比如:java程序。

25.索引的作用?它的优点和缺点是什么?

索引的作用:创建索引能够大大的提高系统的性能
优点:
  • 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性
  • 大大加快数据的检索速度,这也是创建索引的最主要原因
  • 加快表与表之间的连接,在实现数据的参考完整性方面特别有意义
  • 在使用分组和排序,子句进行数据检索时,同样可以显著减少查询中分组和排序的时间
  • 通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。
缺点:
  • 创建索引和维护索引需要时间,这种时间随着数据量的增加而增加
  • 索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占物理空间,如果要建立聚簇索引,需要的空间更大
  • 当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这就降低了数据的维护速度。

26.什么是事务?什么是锁?

事务指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行

简单的说,事务就是并发控制的单位,是用户定义的一个操作序列。
而一个逻辑工作单元要成为事务,就必须满足ACID属性
事务四大特性(ACID):A:Atomicity(原子性),C:Consistent(一致性),I:Isolation(隔离性),D:Durable(持久性)

锁可以分为乐观锁和悲观锁:

悲观锁:认为在修改数据库数据的这段时间里存在着也想修改此数据的事务;
乐观锁:认为在短暂的时间里不会有事务来修改此数据库的数据;
我们一般意义上讲的锁其实是指悲观锁,在数据处理过程中,将数据置于锁定状态(由数据库实现)。
如果开启了事务,在事务没提交之前,别人是无法修改该数据的;
如果rollback,你在本次事务中的修改将撤消(不是别人修改的会没有,因为别人此时无法修改)。
当然,前提是你使用的数据库支持事务。
还有一个要注意的是,部分数据库支持自定义SQL锁覆盖事务隔离级别默认的锁机制,如果使用了自定义的锁,那就另当别论。
重点:一般事务使用的是悲观锁(具有排他性)。

SQL

用一条SQL语句,查出每门功课都大于80分的学生姓名

t_mark

namekechengfenshu
居居语文90
居居数学85
居居英语80
小咏语文90
小咏数学90
小咏英语90
Admin语文90
Admin数学80
Admin英语70
select name from t_mark group by name having min(fenshu)>=80
运行后如下
name
居居
小咏

多表查询

t_department

iddepartment
1设计
2市场
3售后

t_user

idusernamedepartment_id
1居居1
2六子1
3六爷2
4赵六3
5田七4

用一条SQL语句,怎么显示如下结果?

iddepartment_idusernamedepartment
11居居设计
21六子设计
32六爷市场
43赵六售后
54田七
select u.id,d.department_id,u.username,d.department
from t_department d
right JOIN t_user u
on u.department_id = d.department_id
ORDER BY u.id
基础
随笔
面试题集
  • 作者:JarvisYang(联系作者)
  • 发表时间:2020-08-12 22:16
  • 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)
  • 评论