阿里Java程序员必会的Spring+MySQL面试题
前言
进大厂是大部分Java程序员的梦想,而进大厂的门槛也是比较高的。所以这里整理了一份阿里、美团、滴滴、头条等大厂面试大全,其中概括的知识点有:Java、Mysql、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached
Redis、MySQL、Spring、Spring Boot、Spring Cloud、RabbitMQ、Kafka、Linux 等技术栈共有1000+道面试题。
本文就Java面试过程中最常见的Spring+Mysql内容进行分享。
面试题整理十分全面,文末还有答案解析!(文章比较长,耐心看完,让你面试提升一大截!)
————————————————
Java工程师职业要求
目前Java工作的要求千奇百怪,但总的说来,还是以Spring系列+Mysql系列为基础,因此在Java面试过程中,把握好这两种语言,面试成功率也会更大一些。
JAVA工程师(岗位职责)
职位描述
岗位职责:
1、根据开发规范与流程完成模块的编码;
2、独立进行程序单元、功能的测试,查出软件存在的缺陷并保证其质量;
3、完成开发组长布置的量化工作,独立处理和解决所负责的任务;
4、熟悉该语言,了解软件工程开发流程和实际开发中涉及的技术。
任职要求:
1、女,大专以上学历,2年的开发经验;
2、掌握java编程语言,有扎实的java基础知识。
3、由企业应用软件开发经验(OA、HR、ERP)
4、精通jsp/servlet、html、javascript、ajax、jquery等WEB开发技术,熟悉Webmvc框架
5、熟练使用MyEclipse、Eclipse开发工具;
6、熟悉了解主流框架struts2、spring mvc、spring、hibernate、ibatis、mybatis;
7、熟悉常见的数据库MySQL、Orale;Tomcat、Jboos;
8、具备良好的文档编写能力
9、在github上有开源项目者优选
此数据摘自相关公司实际发布的招聘要求
JAVA工程师(岗位职责)
职位描述
岗位职责:
1、完成直接主管下达的研发任务,按研发规范提交最终成果;
2、完成规定的版本研发,按研发规范提交最终成果;
3、能充分理解软件设计师提出的设计方案和计划;
4、能根据设计方案和计划进行编码实现,在进度和质量上符合方案和计划的要求;
5、及时对BUG库中的软件问题进行跟踪修正;
6、上级交待的其他任务。
任职要求:
1、熟悉Javaee体系结构,熟悉Html5、CSS、JavaScript、ajax等Web技术,熟悉Oracle数据库;
2、熟悉关系数据库MySQL/Oracle/SQL Server
3、熟悉webwork/Struts2/Spring/Hibernate开发
4、熟悉软件工程,有较强的逻辑思维能力,了解软件开发基本知识,有团队合作意识,性格开朗;
5、忠诚、勤奋,对工作有责任感和团队精神,能够在压力下工作。良好的沟通表达(口头及书面)能力;
6、诚实可靠,愿意踏实做事情,可承受大工作压力。
此数据摘自相关公司实际发布的招聘要求
JAVA工程师(岗位职责)
职位描述
【岗位职责】
1、 负责参与产品的开发、调试及监控;
2、 根据产品需求进行系统研发和改进,并提出建设性意见。
3、 熟悉医疗及支付行业背景,进行业务需求沟通;
4、 按照产品开发进度服从技术总监工作调配。
【任职要求】:
1、本科及以上学历,互联网、计算机软件及相关专业;
2、熟悉服务端相关框架spring等,MVC模式,restful协议框架,能够独立完成功能模块;
3、熟悉数据库访问相关框架(Hibernate、mybatis等),熟练使用redis、memcache等缓存;
4、精通J2EE开发及部署,熟悉Oracle、MySQL和NOSQL等主流数据库;
5、熟悉分布系统,了解医疗及支付行业模式尤佳;
6、具有良好的项目规划、需求控制、进度控制、风险管理能力,承担项目的需求分析、规划、设计及文档转换工作优先。
【公司福利】
薪资+奖金+五险一金+节日福利+员工旅游+通讯补贴+餐补+定期体检
此数据摘自相关公司实际发布的招聘要求
JAVA工程师(岗位职责)
职位描述
【岗位职责】
1、公司电商平台核心模块的开发及维护;
2、参与系统需求分析与设计、架构设计、架构原型实现,完成相关的技术文档编写;
3、通过技术手段不断优化核心接口性能;
【任职要求】
1、本科及以上学历,扎实的计算机专业基本功;
2、3年以上 Java 开发经验,精通 Java 及面向对象设计开发,熟练应用J2EE的相关开发技术;
3、熟悉常见设计模式,精通 Spring, MyBatis等流行开源框架;
4、精通 MySQL 应用开发,熟悉数据库原理和常用性能优化技术;
5、参与过大型复杂分布式互联网 WEB 系统的设计开发者优先,拥有和工作年限相称的广度和(或)深度;
6、有较强的逻辑思维能力,善于分析、归纳、解决问题,具有技术钻研精神,追求完美,有较强自驱力;
7、有电商经验优先,有大型互联网公司、高并发系统开发经验者优先,阅读过JAVA开源软件代码、参与过JAVA开源项目者优先;
8、强烈的责任心和良好的团队协作能力。
spring基础面试题
Spring面试题内容
1. 谈谈你对Spring的理解?
Spring框架是一个轻量级的开源框架,是核心容器、数据访问与集成、AOP、Web、消息、测试六个模块的集成,主要是为了简化企业级应用的后台开发,降低耦合性。平时接触到最多的还是IoC和AOP两个特性。IoC指的是控制反转,把对象的创建和依赖关系的维护交给Spring容器去管理。Spring通过工厂模式、反射机制等技术管理对象的作用域和生命周期。AoP一般称为面向切面编程,是面向对象的一种补充,将程序中独立于其他功能的方法抽取出来,使Java开发模块化,仅需专注于主业务即可
2. Spring的特点是什么?
轻 量、控 制 反 转、面 向 切 面 的 编 程(AOP)、容 器、MVC 框 架、事 务 管 理、异 常 处 理
3. Spring的优缺点是什么?
优点
方便解耦,简化开发
可以将对象的创建和依赖关系的维护交给Spring管理。
提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能。
声明式事务的支持
只需要通过配置就可以完成对事务的管理,而无需手动编程。
可以通过注解方便的测试程序。
内部提供了对各种优秀框架的直接支持,方便集成各种优秀框架。
降低 JavaEE API 的使用难度
缺点
Spring明明一个很轻量级的框架,却给人感觉大而全
Spring依赖反射,反射影响性能
使用门槛过高,入门Spring需要较长时间
4. Spring由哪些模块组成?
Spring 总共有 20 个模块, 由 1300 多个不同的文件构成。 而这些组件被分别整合在核心容器 、 AOP和设备支持 、数据访问与集成 、 Web、 消息 、 测试 6 个模块中
5. 详细讲解一下核心容器(spring context应用上下文) 模块
这是基本的 Spring 模块,提供 spring 框架的基础功能, BeanFactory 是任何以 spring 为基础的应用的核心.它使 Spring 成为一个容器 。BeanFactory是工厂模式的一个实现,提供了控制反转功能,用来把应用的配置和依赖从真正的应用代码中分离。最常用的就是org.springframework.beans.factory.xml.XmlBeanFactory ,它根据XML文件中的定义加载beans。该容器从XML 文件读取配置元数据并用它去创建一个完全配置的系统或应用。
6. 解释AOP模块
AOP 模块用于 Spring 应用做面向切面的开发,很多支持由 AOP 联盟提供,这样就确保了 Spring和其他 AOP 框架的共通性。AOP模块将元数据编程引入Spring。
7. 解释JDBC抽象和DAO模块
通过使用JDBC抽象和 DAO 模块,保证数据库代码的简洁,并能避免数据库资源错误关闭导致的问题, 它在各种不同的数据库的错误信息之上,提供了一个统一的异常访问层。它还利用 Spring 的 AOP 模块给 Spring 应用中的对象提供事务管理服务。
8. 解释对象/关系映射集成(ORM)模块
Spring 通过提供ORM模块,支持我们直接在JDBC 之上使用一个对象/关系映射(ORM)工具。
Spring 支持集成主流的 ORM 框架。
Spring 的事务管理同样支持主流的 ORM 框架及 JDBC。
9. 解释WEB模块
Spring 的 WEB 模块是构建在 application context 模块基础之上,提供一个适合 web 应用的上下文。
10. Spring配置文件
Spring 配置文件是个XML文件,这个文件包含了类信息,描述了如何配置它们,以及如何相互调用。
11. 什么是Spring IoC 容器。
控制反转即IoC ,它把传统上由程序代码直接操控的对象的调用权交给容器,通过容器来实现组件对象的装配和管理。所谓的“控制反转”概念就是对组件对象控制权的转移,从程序代码本身转移到了外部容器。Spring IOC 负责创建对象,管理对象,装配对象,配置对象,并且管理这些对象的整个生命周期。
12. 控制反转(IoC)有什么作用
管理对象的创建和依赖关系的维护。
方便解耦,由容器去维护具体的对象
托管了类的产生过程。
13.控制反转(IoC)的优点是什么?
把应用的代码量降到最低。
它使应用容易测试,单元测试不再需要单例和JNDI查找机制。
最小的代价和最小的侵入性使松散耦合得以实现。
IoC容器支持加载服务时的饿汉式初始化和懒加载。
14. Spring IoC 的实现机制
Spring 中的 IoC 的实现原理就是工厂模式加反射机制。
15. Spring 的 IoC支持哪些功能
依赖注入
依赖检查
自动装配
支持集合
指定初始化方法和销毁方法
支持回调某些方法
16. ApplicationContext 通常的实现是什么?
FileSystemXmlApplicationContext容器 :此容器从一个XML 文件中加载 beans 的定义,XML Bean配置文件的全路径名必须提供给它的构造函数 。
ClassPathXmlApplicationContext容器:此容器从一个 XML 文件中加载 beans 的定义,需要正确设置 classpath 。因为这个容器将在 classpath 里面找 bean 的配置。
WebXmlApplicationContext容器:此容器加载一个 XML 文件,此文件定义了一个 WEB 应用的所有 bean。
17. BeanFactory和 Application contexts 有什么区别?
BeanFactory:是Spring里面最低层的接口,提供了最简单的容器的功能,而且只提供了实例化对象和拿对象的功能;
ApplicationContext:是应用上下文,继承BeanFactory接口,它是Spring的一个更高级的容器,提供了更多的有用的功能,这些功能包括;
国际化
访问资源,如URL和文件
载入多个有继承关系的上下文 ,使得每一个上下文都专注于一个特定的层次,比如应用的web层
消息发送和响应机制
AOP
两者的区别在于装载beans时的区别:
BeanFactory在启动的时候不会去实例化Bean,当Spring应用中有从容器拿Bean的时候才会去实例化;
ApplicationContext在启动的时候就把所有的Bean全部实例化了,它还可以通过配置来实现Bean的延迟实例化,所以实际开发中推荐使用Application contexts。
18. 一个 Spring 的应用看起来像什么?
一个定义了一些功能的接口 。
Spring AOP
Spring 的 XML 配置文件
使用以上功能的客户端程序
19. 什么是Spring的依赖注入(DI)?
依赖注入是组件之间的依赖关系,由容器在应用系统运行期来决定,也就是由容器动态地将某种依赖关系的目标对象实例化,并注入到应用系统中的各个关联的组件之中。组件不做定位查询,只提供普通的Java方法让容器去决定依赖关系。
20. 依赖注入的基本原则?
应用组件不应该负责查找资源或者其他依赖的协作对象。
配置对象的工作应该由IoC容器负责,查找资源的逻辑应该从应用组件的代码中抽取出来,交给IoC容器负责。
IoC容器全权负责组件的装配,它会把符合依赖关系的对象通过属性或者是构造器传递给需要的对象。
————————————————
MYSQL基础面试题
MySQL面试题内容
1. 简述在MySQL数据库中引擎MyISAM和InnoDB的区别?
存储结构方面:MyISAM每个MyISAM在磁盘上存储成三个文件.frm文件存储表定义、数据文件的扩展名为.MYD、索引文件的扩展名是.MYI;InnoDB所有的表都保存在同一个数据文件中,表的大小只受限于操作系统文件的大小,一般为2GB。
存储空间方面:MyISAM可被压缩,存储空间较小。支持三种不同的存储格式:静态表、动态表、压缩表;InnoDB需要更多的内存和存储,它会在主内存中建立其专用的缓冲池用于高速缓冲数据和索引。
事务支持方面:MyISAM强调的是性能,每次查询具有原子性,其执行数度比InnoDB类型更快,但是不提供事务支持;InnoDB提供事务支持事务。
表锁差异方面:MyISAM只支持表级锁;InnoDB支持事务和行级锁。
表主键:MyISAM允许没有任何索引和主键的表存在,索引都是保存行的地址。InnoDB如果没有设定主键或者非空唯一索引,就会自动生成一个6字节的主键。
增删改查操作方面:如果执行大量的SELECT,MyISAM是更好的选择。如果执行大量的INSERT或UPDATE,出于性能方面的考虑,应该使用InnoDB表。
外键方面:MyISAM不支持;InnoDB支持。
2. MySQL中有哪几种锁?
表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。
行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。
页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。
3. 什么是通用SQL函数?
CONCAT(A, B): 连接两个字符串值以创建单个字符串输出。通常用于将两个或多个字段合并为一个字段。
FORMAT(X, D): 格式化数字 X 到 D 有效数字。
CURRDATE():CURRTIME():返回当前日期或时间。
NOW():将当前日期和时间作为一个值返回。
MONTH():DAY(),YEAR(),WEEK(),WEEKDAY() :从日期值中提取给定数据。
HOUR():MINUTE(),SECOND() : 从时间值中提取给定数据。
DATEDIFF(A,B):确定两个日期之间的差异,通常用于计算年龄
SUBTIMES(A,B):确定两次之间的差异。
FROMDAYS(INT): 将整数天数转换为日期值。
4. MySQL中有哪些不同的表格?
MyISAM、Heap、Merge、INNODB、ISAM
5. CHAR和VARCHAR的区别?
CHAR 和 VARCHAR 类型在存储和检索方面有所不同
CHAR 列长度固定为创建表时声明的长度,长度值范围是1到255当CHAR值被存储时,它们被用空格填充到特定长度,检索 CHAR 值时需删除尾随空格。
6. MySQL中InnoDB支持的四种事务隔离级别名称,以及逐级之间的区别?
read uncommited :读到未提交数据
read committed:脏读,不可重复读
repeatable read:可重复读
serializable :串行事务
7. myisamchk是用来做什么的?
它用来压缩 MyISAM 表,这减少了磁盘或内存使用。
8. 主键和候选键有什么区别?
表格的每一行都由主键唯一标识,一个表只有一个主键,主键也是候选键。按照惯例,候选键可以被指定为主键,并且可以用于任何外键引用。
9. 如果一个表有一列定义为TIMESTAMP,将发生什么?
每当行被更改时,时间戳字段将获取当前时间戳。
10. 列设置为AUTO INCREMENT时,如果在表中达到最大值,会发生什么情况?
它会停止递增,任何进一步的插入都将产生错误,因为密钥已被使用。
11. MySQL 数据库作发布系统的存储,一天五万条以上的增量,预计运维三年,怎么优化?
设计良好的数据库结构,允许部分数据冗余,尽量避免 join 查询,提高效率。
选择合适的表字段数据类型和存储引擎,适当的添加索引。
MySQL 库主从读写分离。
找规律分表,减少单表中的数据量提高查询速度。
添加缓存机制,比如 memcached,apc 等。
不经常改动的页面,生成静态页面。
书写高效率的SQL。比如SELECT * FROM TABEL改为SELECT field_1,field_2, field_3 FROM TABLE.
12. 你怎么看到为表格定义的所有索引?
索引是通过以下方式为表格定义的:SHOW INDEX FROM ;
13.MySQ 支持事务吗?
在缺省模式下,MySQL是autocommit模式的,所有的数据库更新操作都会即时提交,所以在缺省情况下,MySQL是不支持事务的。但是如果你的MySQL表类型是使用 nnoDB Tables或BDB tables的话,你的MySQL就可以使用事务处理,使用SET AUTOCOMMIT=0就可以使MySQL允许在非autocommit模式,在非autocommit模式下,你必须使用COMMIT来提交你的更改,或者用ROLLBACK来回滚你的更改。
14. 如何在 Unix 和 MySQL 时间戳之间进行转换?
UNIX_TIMESTAMP 是从 MySQL 时间戳转换为 Unix 时间戳的命令
FROM_UNIXTIME 是从 Unix 时间戳转换为 MySQL 时间戳的命令
15. 列对比运算符是什么?
在 SELECT 语句的列比较中使用=,<>,<=,<,> =,>,<<,>>,<=>,AND,OR 或 LIKE 运算符。
16. LIKE 声明中的%和_是什么意思?
%对应于 0 个或更多字符,_只是 LIKE 语句中的一个字符。
17. MySQL_fetch_array 和 MySQL_fetch_object 的区别是什么?
MySQL_fetch_array(): 将结果行作为关联数组或来自数据库的常规数组返回。
MySQL_fetch_object :从数据库返回结果行作为对象。
18. 怎样才能找出最后一次插入时分配了哪个自动增量?
LAST_INSERT_ID 将返回由 Auto_increment 分配的最后一个值,并且不需要指定表名称。
19. MySQL 如何优化 DISTINCT?
DISTINCT 在所有列上转换为 GROUP BY,并与 ORDER BY 子句结合使用。SELECT DISTINCT t1.a FROM t1,t2 where t1.a=t2.a;
20. 实践中如何优化 MySQL?
最好是按照以下顺序优化:
SQL 语句及索引的优化
数据库表结构的优化
系统配置的优化
硬件的优化
说明:本文限于篇幅,故而只展示部分的文档截图,完整的 Java面试学习文档小编已经帮你整理好了,有需要的朋友点赞+关注我后,点击此处领取spring+mysql资料
分享不易,感谢大家的阅读!