写点什么

70 道 Java 开发面试题及答案,2022 最新大厂高频微服务面试总结

  • 2022 年 4 月 22 日
  • 本文字数:7047 字

    阅读完需:约 23 分钟

  • 释放连接

30. 简单说一下你对 JDBC 的理解

Java database connection java 数据库连接,数据库关系系统很多,每个数据库关系管理系统支持的命令是不一样的.?


Java 只定义接口,让数据库厂商自己实现接口,对于我们开发人员而言,只需要导入对应厂商开发的实现即可,然后以接口的方式进行调用(mysql+mysql 驱动(实现)+jdbc)

31. 写一个 JDBC 的访问 ORACLE 的列子

public class OracleUtils {


static {


try {


Class.forName("oracle.jdbc.driver.OracleDriver");


} catch (ClassNotFoundException e) {


e.printStackTrace(); 《一线大厂 Java 面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》开源


}


}


//获取连接


public static Connection getConnection() throws SQLException {


Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@ip:1521:orcl", "username", "password");


return conn;


}


//关闭资源


public static void close(ResultSet rs, Statement stmt, Connection conn) {


}


}


.....


调用


Connection conn = OracleUtils.getConnection();


PreparedStatement stmt = conn.prepareStatement(sql);


ResultSet rs = stmt.executeQuery();


OracleUtils.close(rs, stmt, conn);

32. JDBC 中 PREPAREDSTATEMENT 比 STATEMENT 的好处

PreparedStatement 可以防止 sql 注入攻击,它是预编译的,

33. 数据库连接池的作用

  1. 限定数据库的连接个数,不会由于数据库连接过多导致系统运行缓慢或崩溃

  2. 数据库连接不需要每次都去创建或销毁,节约了资源

  3. 数据库连接不需要每次都去创建,响应时间更快.

34. 简单说一下 HTML,CSS,JAVASCRIPT 在网页开发中的定位

  • Html 超文本标记语言,定义网页的结构?

  • Css 层叠样式表,用来美化页面?

  • Javascript 主要用来验证表单,做动态交互(其中 ajax)

35. 简单介绍了一下 AJAX

什么是 ajax?异步的 javascript 和 xml?


作用是什么?通过 ajax 与服务器进行数据交换,ajax 可以使网页实现局部更新.这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新.?


怎么实现?ajax xmlhttpRrqueset 对象,使用这个对象可以异步向服务器发送请求,获取响应,完成局部更新,open send responseText/responseXml 局部响应.?


使用场景:登陆失败时不跳转页面,注册时提示用户名是否存在,二级联动等等.

36. JS 和 JQUERY 的关系

JQuery 是一个 js 框架,封装了 js 的属性和方法,并且增强了 js 的功能,让用户使用起来更加便利,并且增强了 js 的功能.?


原来是使用 js 是要处理很多兼容性的问题(比如注册事件等),由 JQuery 封装了底层,就不用处理兼容性问题.?


原生的 js 的 dom 和事件绑定和 ajax 等操作非常麻烦,JQuery 封装了以后,操作非常方便.

37. JQUERY 中的常用选择器

  • ID 选择器?

  • Class 选择器?

  • 标签选择器?

  • 通用选择器?

  • 层次选择器?

  • 属性选择器

38. JQUERY 中页面加载完毕事件

为什么需要页面加载事件?很多时候我们需要获取元素,但是必须等到该元素被加载后才能获取,我们可以把 js 代码放到该元素的后面,但是这样就会造成 js 在我们的 body 中存在不好管理.所有页面加载完毕后,所有的元素当然已经加载完毕,一般获取元素做操作都要在页面加载完毕后.?


$(function{}表示的是页面结构被加载完毕?


Window.onload 表示的是页面被加载完毕

39. JQUERY 中 AJAX 和原生 JS 实现 AJAX 的关系

JQuery 中的 ajax 也是通过原生的 js 封装的,封装完成后让我们使用起来更加便利,不用考虑底层实现或兼容性等的处理.?


如果采用原生 js 实现 ajax 是非常麻烦的,并且每次都是一样的.如果我们不适用 JQuery,我们也要封装对象的方法和属性,有像 JQuery 这些已经封装完成,经过很多企业实践过的框架,比较可靠,我们不需要封装,直接使用成熟的框架(JQuery)即可.

40. BOOTSTRAP 的是什么

Bootstrap 是一个移动设备优先的 UI 框架.我们不用写任何的 css 和 js 代码就能实现比较漂亮的有交互性的页面.我们程序员对页面的编写是有硬伤的,所以要自己写页面的话,就要使用类似 bootstrap 这样的 UI 框架.?


平时经常用的:?


模态框?


表单,表单项?


布局?


栅格系统

41. 什么是框架

框架(Framework)是一个框子—–具有约束性,也是一个架子—-具有支撑性.?


IT 语境中的框架,特支为解决一个开放性问题而设计的具有一定约束性的支撑架构.在此结构上可以根据具体问题扩展.安插更多的组成部分.从而更迅速和更方便的构建完整的解决问题的方案.


  • 框架本身一般不完整到可以解决特定问题,但是可以帮助我们快速解决特定问题

  • 框架天生就是为了扩展而设计的

  • 框架里面可以为后续扩展的组件提供很多辅助性,支撑性的方便易用的使用工具.也就是说框架时常配套; 一些帮助解决某类问题的库或工具.

42. 简单介绍一下 MVC 模式

MVC 全名是 model view Controller,是模型(model)—视图(view)—控制器(Controller)的缩写,是一种软件设计典范.?


最简单的,最经典的就是 jsp(view)+servlet(Controller)+javabean(model)?


1.当控制器收到来自用户的请求?


2.控制器调用 javabean 完成业务?


3.完成业务后通过控制器跳转 jsp 页面的方式给用户反馈信息?


4.Jsp 给用户做出响应

43. 简单说一下对 MVC 框架的理解

是为了解决传统的 MVC 模式(jsp+servlet+javabean)问题而出现的框架.


传统 MVC 模式问题?


1.所有的 servlet 和 servlet 映射都要配置在 web.xml 中,如果项目太大,web.xml 就太庞大,并且不能实现模块化管理.?


2.Servlet 的主要功能就是接受参数,调用逻辑,跳转页面,比如像其他字符编码,文件上传等功能也要写在 servlet 中,不能让 servlet 功能单一.?


3.接受参数比较麻烦,不能通过 model 接收,只能单个接收,接收完成后转换封装进 model.?


4.跳转页面方式比较单一(forward,redirect),并且当页面名称发生变化时,需要修改 servlet 源代码.


常用的 MVC 框架:struts2,springMVC

44. STRUTS2 的执行流程或者 STRUTS2 的原理

1.浏览器发送请求,经过一系列的过 filter,到达 strutsPrepareAndExecuteFilter?


2.strutsPrepareAndExecuteFilter 通过 ActionMapper 判断当前的请求是否需要某个 Action 处理,如果不需要,则走原来的流程.如果需要,把请求交个 ActionProxy 来处理?


3.ActionProxy 通过 Configuration Manager 询问框架的配置文件 struts.xml,找到需要调用的 Action 类;?


4.创建一个 ActionInvocation 实例,来调用 Action 的对应方法来获取结果集的 name,在调用前后会执行相关拦截器?


5/通过结果集的 name 找到对应的结果集来对浏览器进行响应

45. STRUTS2 的拦截器是什么

通过动态配置方式,可以在执行 Action 的方法前后,加入相关逻辑,完成业务 .struts2 中的功能, 都是通过系统拦截器实现的.比如:参数处理,文件上传,字符编码.当然,我们也可以自定义拦截器?


使用场景:用户登陆判断,在执行 Action 的前面判断是否已经登陆,如果没有登陆则跳转到登陆页面;用户权限的判断,在执行 Action 的前面判断是否具有权限,如果没有给出提示信息;

46. SPRING MVC 的执行流程

1.用户发送请求,被前端控制器(DispatcherServlet捕获(捕获请求)?


2.前端控制器进行解析,得到 URI,通过 URI 调用 HandlerMapping 并获得该 Handler 配置的所有相关对象(查找 Handler)?


3.前端控制器根据得到的 Handler,选择合适的 HandlerAdapter,提取 Request 中的模型数据,填入 Handler 入参,开始执行 Handler,最后返回一个 ModelAndView 对象.(执行 Handler)?


4.前端控制器根据返回的 ModelAndViewm,选择合适的 ViewResolver(选择 ViewResolver)?


5.通过 ViewResolver 结合 Model 和 View 来渲染视图,前端控制器将渲染结果返回给客户端(渲染并返回)

47. SPRINGMVC 和 STRUTS2 的不同

  1. 核心控制器不同:springmvc 是 servlet,struts2 是 filter


  1. 控制器实例:springmvc 会比 struts 快(理论上),springmvc 是基于方法设计,struts 是基于对象,每发一次请求都会实例一个 action.springmvc 只有一个实例,每次请求执行对应的方法即可,简单来说,springmvc 是单例,是 trust 是多例


  1. 管理方式:springmvc 是 spring 的一个模块,所以 spring 对于 springmvc 的控制管理更加简单方便.而 struts 需要使用 xml 配置很多参数来管理


  1. 参数传递:struts2 中自身提供多种参数接收,其实都是通过 valuestack 进行传递和赋值.而 springmvc 是通过方法参数进行接收.


  1. interceptor 的实现机制:struts 有自己的 interceptor 机制,springmvc 用的是独立的 aop 方式.


  1. Springmvc 处理 ajax 请求,直接返回数据,方法中使用注解 @ResponseBody,springmvc 自动帮我们将数据转成 json 数据,而 struts2 是通过插件的方式进行处理

48. 简单介绍一下 SPRING 或者 SPRING 的两大核心

Spring 是什么?spring 是 j2ee 应用程序框架,是轻量级的 IOC 和 AOP 的容器框架,主要针对 javabean 的生命周期进行管理的轻量级容器,可以单独使用,也可以跟其它框架组合使用.


IOC(inversion of control)或 DI(dependency injection)控制反转?


原来:我的 service 要调用 Dao,我就在 service 中创建 Dao 对象,这时 Dao 对象的创建的控制权在我手中?


Spring:spring 发现我的 service 依赖于 Dao,就给我的 service 注入 Dao 对象,这时 Dao 对象创建的控制权在 spring 手中?


核心原理:工厂模式+反射+配置文件


AOP:面向切面编程?


核心原理:使用动态代理的方式在执行前后或出现异常后做相关逻辑.?


我们主要使用 AOP 来做:?


事务处理?


权限判断?


日志记录

49. AOP 是什么?都用它做什么?

AOP:面向切面编程?


核心原理:使用动态代理的方式在执行前后或出现异常后做加入相关逻辑.?


我们主要使用 AOP 来做:?


事务处理 执行方法前,开启事务,执行方法后提交事务,出现异常后回滚事务?


权限判断 在执行方法前,判断是否具有权限?


日志记录 在执行方法前执行日志

50. SPRING 事务的传播特性和隔离级别

事务的传播特性:多个事务存在是怎么处理的策略.


| 传播行为 | 意义 |


| --- | --- |


| PROPAGATION_MANDATORY | 表示该方法必须运行在一个事务中。如果当前没有事务正在发生,将抛出一个异常 |


| PROPAGATION_NESTED | 表示如果当前正有一个事务在进行中,则该方法应当运行在一个嵌套式事务中。被嵌套的事务可以独立于封装事务进行提交或回滚。如果封装事务不存在,行为就像 PROPAGATION_REQUIRES 一样。 |


| PROPAGATION_NEVER | 表示当前的方法不应该在一个事务中运行。如果一个事务正在进行,则会抛出一个异常。 |


| PROPAGATION_NOT_SUPPORTED | 表示该方法不应该在一个事务中运行。如果一个现有事务正在进行中,它将在该方法的运行期间被挂起。 |


| PROPAGATION_SUPPORTS | 表示当前方法不需要事务性上下文,但是如果有一个事务已经在运行的话,它也可以在这个事务里运行。 |


| PROPAGATION_REQUIRES_NEW | 表示当前方法必须在它自己的事务里运行。一个新的事务将被启动,而且如果有一个现有事务在运行的话,则将在这个方法运行期间被挂起。 |


| PROPAGATION_REQUIRES | 表示当前方法必须在一个事务中运行。如果一个现有事务正在进行中,该方法将在那个事务中运行,否则就要开始一个新事务。 |


ISOLATION_DEFAULT?使用后端数据库默认的隔离级别。


</tr>


ISOLATION_READ_UNCOMMITTED?允许读取尚未提交的更改。可能导致脏读、幻影读或不可重复读。


</tr>


ISOLATION_READ_COMMITTED?允许从已经提交的并发事务读取。可防止脏读,但幻影读和不可重复读仍可能会发生。


</tr>


ISOLATION_REPEATABLE_READ?对相同字段的多次读取的结果是一致的,除非数据被当前事务本身改变。可防止脏读和不可重复读,但幻影读仍可能发生。


</tr>


ISOLATION_SERIALIZABLE?完全服从 ACID 的隔离级别,确保不发生脏读、不可重复读和幻影读。这在所有隔离级别中也是最慢的,因为它通常是通过完全锁定当前事务所涉及的数据表来完成的。


</tr>

51. ORM 是什么?ORM 框架是什么?

对象关系映射(Object Relational Mapping,简称 ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。简单来说,将程序中的兑现自动持久化到关系数据库中。那么,到底如何实现持久化呢?一种简单的反感是采用硬编码的方式(jdbc 操作 sql 方式),为每一种可能的数据库访问操作提供单独的方法。这种方法存在很多缺陷,所以使用 ORM 框架(为了解决面型对象与关系数据库存在的互不匹配的现象的框架)来解决。


Java 典型的 ORM 框架有:Hibernate,mybatits

52. WEBSERVICE 的使用场景

Webservice 是一个 SOA(面向服务的编程)的架构,它是不依赖于语言,不依赖于平台,可以实现不同的语言间的相互调用,通过 Internet 进行基于 http 协议的网络应用间的交互.


  1. 异构系统(语言)的整合

  2. 不同客户端的整合,浏览器 手机端 pc 端等终端的访问


例子:?


天气预报:可以通过实现 webservice 客户端调用远程天气服务实现的.?


单点登录:一个服务器实现所有系统的登陆

53. ACTIVITI 的简单介绍

Activiti 是一个业务流程管理(BPM)和工作流系统,适用于开发人员和系统管理人员,其核心是超快速,稳定的 BPMN2 流程引擎,它易与 spring 集成使用.


主要用在 OA 中,把线下流程放到线上,把现实生活中的一些流程固话定义到系统中,然后通过输入表单数据完成业务.

54. LINUX 的使用场景

Linux 是一个长时间运行比较稳定的操作系统,所以我们一般会拿它作为服务器(web,db.app 等).?


Linux 本身具有 c 的编译环境.我们的一些软件是没有软件包的(redis,nginx),需要在 linux 编译得到软件包

55. LINUX 常用命令

Cd 跳转到目录?


Pw Java 开源项目【ali1024.coding.net/public/P7/Java/git】 d 获取当前路径?


Su 切换用户?


Ll 查看当前目录下文件和目录?


Tail 查看文件?


Rm –rf 删除文件?


Vi 修改文件?


Mv 移动/重命名 文件或文件夹?


Mkdir 创建文件夹?


Rm –f 删除文件夹?


Tar 打包/解压?


Grep 查找想要的信息

56. 怎么操作 LINUX 服务器

需要依赖于 linux 服务器安装 ssh 服务端,一般这个 ssh 服务的端口为 22,?


需要依赖于 linux 服务器安装 sftp 服务端,一般这个 sftp 服务的端口为 25,


使用 ssh 客户端连接 linux 服务器,通过命令操作 linux 服务器?


使用 sftp 客户端来连接 sftp 服务端,来上传和下载文件(安装包,修改文件上传)

57. 有没有使用过云主机

使用过阿里云?


云主机:就是一些云服务运营商(阿里,华为,新浪等)提供的远程服务器功能,我们公司只要付费就可以租用对应的服务器.

58. 数据库优化方面的事情

定位:查找,定位慢查询,并优化?


优化?


1.创建索引:创建合适的索引,我们就可以在索引中查询,查询到以后直接找对应的额记录?


2,分表:当一张表的数据比较多或者一张表的某些字段的值比较多并且很少使用时,采用水平分表或垂直分表来优化,比如 spu 表?


3,读写分离:当一台服务器不能满足需要时,采用将读写分离的方式进行集群?


4.缓存:使用 redis 来进行缓存

59. 选择合适的索引

索引是帮助 DBMS 高效获取数据的数据结构.?


分类:普通索引,唯一索引,主键索引,全文索引?


1.普通索引:允许重复的值出现?


2.唯一索引:除了不能有重复的记录外,其它和普通索引一样.(用户名;用户身份证;手机号)?


3.主键索引:是随着设定主键而创建的;也就是把某个列设为主键的时候,数据库就会给该列创建索引;唯一且没有 null 值?


4.全文索引:用来对表中文本域(char,varchar,text)进行索引,全文索引针对 myisam

60. 使用索引的一些技巧

索引弊端:?


1. 占用磁盘空间.?


2. 对 dml(插入,修改.删除)操作有影响,变慢?


使用场景:?


1. 肯定在 where 条件经常使用,如果不做查询就没有意义?


2. 该字段的内容不是唯一的几个值(sex).?


3. 字段内容不是频繁变化

61. 项目的并发

1.需求:用户量,这个客户说了算,大概也就是 1-5 年内用户总量?


2.根据 pv(页面点击量,浏览量)和 uv(ip 数量)预估,大致能达到多大的并发量.我们的项目大概能达到 1000-3000 的并发量?


3.确定我们的服务器数量,我们使用的是 tomcat,tomcat 的默认线程数 150,我们可以将它优化调到 400 左右.而我们大致需要 5 台 web 服务器?


4.重要的因素(硬件服务器水平—去 IOE),我们没有做这个,因为我们没钱.

62. http 协议

1.无状态,为了解决 http 无状态问题,引入 cookie 技术?


2.http1.0 是短连接,http1.1 是长连接?


3.http 协议是基于 B/S 请求-应答模式

63. cookie 和 session

1.Cookie 是由服务器创建的,通过 response 对象的 addCookie(Cookie cookie)方法写回客户端,存储在客户端的会话技术.key-value 的结构?


2.session 是基于 cookie,session 的创建是由服务器做,可以通过 request.getSession()获取(要从你的请求中找一个 cookie—Jessionid,如果能找到这个 cookie,他会拿着这个 cookie 的值去跟服务器端的 session 的 id 比较,如果找到相应的 session,就不创建 session.如果找不到相应的 session,会创建 session).session 一旦创建就会有一个 id 属性(唯一的),通过 response 以 cookie 的方式写回客户端(这个 cookie 就叫做就 sessionid).


会话:会话就是简单的理解成打开浏览器(包含了一次请求或多次请求).

64. session 共享的方案

1.广播:会造成内网网络风暴,大量占用内网宽带?


2.IP_hash:在 nginx 中配置和,相同的 ip 找固定的同一台服务器,这种方案会造成服务能力差?


3.使用第三方中间件(数据库,redis),我们是使用 redis

65. 高并发问题:索引库同步

1.硬编码:在相应的代码中增加索引库同步的代码。不过,这种方法耦合度太高,将原本不相关的系统耦合在了一起,容易造成不可预估的错误,是电商项目的大忌。?


2.spring 的 aop:编写一个索引库同步的方法,利用 aop 的形式,将它和数据库数据更新的方法联系起来。这种方式也会造成耦合。?


3.消息队列:不过,这个方法会造成一个问题,那就是消息消费失败问题。

66. 单点登录的核心是什么?

单点登录的核心是如何在多个系统之间共享身份信息

67. solr 的索引查询为什么比数据库要快。

Solr 使用的是 Lucene API 实现的全文检索。全文检索本质上是查询的索引。而数据库中并?


不是所有的字段都建立的索引,更何况如果使用 like 查询时很大的可能是不使用索引,所以?

写在最后

很多人感叹“学习无用”,实际上之所以产生无用论,是因为自己想要的与自己所学的匹配不上,这也就意味着自己学得远远不够。无论是学习还是工作,都应该有主动性,所以如果拥有大厂梦,那么就要自己努力去实现它。


最后祝愿各位身体健康,顺利拿到心仪的 offer!


由于文章的篇幅有限,所以这次的蚂蚁金服和京东面试题答案整理在了 PDF 文档里





用户头像

还未添加个人签名 2022.04.13 加入

还未添加个人简介

评论

发布
暂无评论
70道Java开发面试题及答案,2022最新大厂高频微服务面试总结_Java_爱好编程进阶_InfoQ写作社区