加入收藏 | 设为首页 | 会员中心 | 我要投稿 晋中站长网 (https://www.0354zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 运营中心 > 交互 > 正文

知名互联网公司校招 Java 开发岗面试知识点解析

发布时间:2021-01-01 02:11:41 所属栏目:交互 来源:网络整理
导读:天之道,损有余而补不足,是故虚胜实,不足胜有余。 本文作者在一年之内参加过多场面试,应聘岗位均为 Java 开发方向。在不断的面试中,分类总结了 Java 开发岗位面试中的一些知识点。 主要包括以下几个部分: Java 基础知识点 Java 常见集合 高并发编程(JU

答:作为单个逻辑工作单元执行的一系列操作,满足四大特性:

  1. 原子性(Atomicity):事务作为一个整体被执行 ,要么全部执行,要么全部不执行;
  2. 一致性(Consistency):保证数据库状态从一个一致状态转变为另一个一致状态;
  3. 隔离性(Isolation):多个事务并发执行时,一个事务的执行不应影响其他事务的执行;
  4. 持久性(Durability):一个事务一旦提交,对数据库的修改应该永久保存。

4)事务的并发问题有哪几种?

答:丢失更新、脏读、不可重复读以及幻读。

5)数据库中的锁有哪几种?答:独占锁、排他锁以及更新锁。

6)事务的隔离级别有哪几种?

答:读未提交、读已提交、可重复读和序列化。

扩展问题:MySQL 事务默认隔离级别是哪个?

答:可重复读。

解析:关于问题(4)(5)(6)的详细解答,请参阅我的博客:数据库并发机制和事务的隔离级别详解

(ps,关于数据库事务方面的深层次考察还有分布式事务即两段提交和三段提交等,限于本人水平,请各位自行学习)

7)数据库的索引有什么作用?(必考) 底层数据结构是什么,为什么使用这种数据结构?

答:

  1. 索引 是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息;
  2. 底层数据结构是 B+ 树;
  3. 使用 B+ 树的原因:查找速度快、效率高,在查找的过程中,每次都能抛弃掉一部分节点,减少遍历个数。( 此时,你应该在白纸上画出什么是 B+ 树 )

扩展问题:聚簇索引和非聚簇索引的区别?

8)MyISAM 和 InnoDB 的区别有哪些?

答:

  • MyISAM 不支持事务,InnoDB 是事务类型的存储引擎;
  • MyISAM 只支持表级锁,BDB 支持页级锁和表级锁,默认为页级锁;而 InnoDB 支持行级锁和表级锁,默认为行级锁;
  • MyISAM 引擎不支持外键,InnoDB 支持外键;
  • MyISAM 引擎的表在大量高并发的读写下会经常出现表损坏的情况;
  • 对于 count( ) 查询来说 MyISAM 更有优势;
  • InnoDB 是为处理巨大数据量时的最大性能设计,它的 CPU 效率可能是任何其它基于磁盘的关系数据库引擎所不能匹敌的;
  • MyISAM 支持全文索引(FULLTEXT),InnoDB 不支持;
  • MyISAM 引擎的表的查询、更新、插入的效率要比 InnoDB 高。
最主要的区别是:MyISAM 表不支持事务、不支持行级锁、不支持外键。 InnoDB 表支持事务、支持行级锁、支持外键。(可直接回答这个)

9)数据库中 Where、group by、having 关键字:

答:?关键字作用:

  1. where 子句用来筛选 from 子句中指定的操作所产生的的行;
  2. group by 子句用来分组 where 子句的输出;
  3. having 子句用来从分组的结果中筛选行;

having 和 where 的区别:

  1. 语法类似,where 搜索条件在进行分组操作之前应用;having 搜索条件在进行分组操作之后应用;
  2. having 可以包含聚合函数 sum、avg、max 等;
  3. having 子句限制的是组,而不是行。

当同时含有 where 子句、group by 子句 、having 子句及聚集函数时,执行顺序如下:

  1. 执行 where 子句查找符合条件的数据;
  2. 使用 group by 子句对数据进行分组;对 group by 子句形成的组运行聚集函数计算每一组的值;最后用 having 子句去掉不符合条件的组。

10)还有一些问题,如 MySQL 和 SQL Server 用法上的区别、limit 关键字的使用等问题。

小结:数据库方面还是事务机制、隔离级别比较重要,当然了数据库索引是必考的问题。偶尔也会给你几个表,让你现场写 SQL 语句,主要考察 group by 和 having 等关键字。

(八)MVC 框架相关知识点

我在项目中使用的框架有 Spring MVC 和 MyBatis,所以在简历上只写了这两种框架,面试官主要针对这两种框架进行提问。以下问题供小伙伴们参考。

JavaWeb 开发经典的 3 层框架:Web 层、Service 层(业务逻辑层)和 Dao 层(数据访问层)

  • Web 层:包含 JSP 和 Servlet 等与 Web 相关的内容;
  • 业务层:只关心业务逻辑;
  • 数据层:封装了对数据库的访问细节。

Spring 知识点

1)Spring 的 IOC 和 AOP 有了解吗?

答:

  • IOC:控制反转,(解耦合)将对象间的依赖关系交给 Spring 容器,使用配置文件来创建所依赖的对象,由主动创建对象改为了被动方式;
  • AOP:面向切面编程,将功能代码从业务逻辑代码中分离出来。

2)AOP 的实现方式有哪几种?如何选择?(必考)

答:JDK 动态代理实现和 cglib 实现。

选择:

  1. 如果目标对象实现了接口,默认情况下会采用 JDK 的动态代理实现 AOP,也可以强制使用 cglib 实现 AOP;
  2. 如果目标对象没有实现接口,必须采用 cglib 库,Spring 会自动在 JDK 动态代理和 cglib 之间转换。

扩展:JDK 动态代理如何实现?(加分点)

答:JDK 动态代理,只能对实现了接口的类生成代理,而不是针对类,该目标类型实现的接口都将被代理。原理是通过在运行期间创建一个接口的实现类来完成对目标对象的代理。

  1. 定义一个实现接口 InvocationHandler 的类;
  2. 通过构造函数,注入被代理类;
  3. 实现 invoke( Object proxy,Method method,Object[] args)方法;
  4. 在主函数中获得被代理类的类加载器;
  5. 使用 Proxy.newProxyInstance( ) 产生一个代理对象;
  6. 通过代理对象调用各种方法。

解析:关于 IOC 和 AOP 的详细阐述,请各位参阅我的博客:Spring 核心 AOP(面向切面编程)总结,Spring 框架学习—控制反转(IOC)

3)Spring MVC 的核心控制器是什么?消息处理流程有哪些?

答:核心控制器为 DispatcherServlet。消息流程如下:

知名互联网公司校招 Java 开发岗面试知识点解析

4)其他问题包括:重定向和转发的区别、动态代理和静态代理的区别等。

Mybatis 知识点

(编辑:晋中站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读