前言 上篇文章给大家介绍在java面试中常见一些面试问题并给出了相应的参考答案,主要包括JavaSE中的多线程问题、反射中常见的一些面试题以及对象的拷贝和JavaWeb中常见的一些问题。本文继续给大家介绍java中的常见面试题,首先给大家介绍的就是java中常见的异常问题: 一、异常 1、throw和throws的区别? throws:是声明可能会抛出一个异常。 2、final、finally、finalize有什么区别?final:是修饰符,如果修饰类,此类不能被继承;如果修饰方法和变量,则表示此方法和此变量不能再被改变,只能使用。 finally:是try{}catch{}finally{}最后一部分,表示不论发生任何情况都会执行,finally部分可以省略,但如果finally部分存在,则一定会执行finally里面的代码。 finalize:是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法。 3、trycatchfinally中哪个部分可以省略? trycatchfinally其中catch和finally都可以被省略,但是不能同时省略,也就是说有try的时候,必须后面跟一个catch或者finally。 4、trycatchfinally中,如果catch中return了,finally还会执行吗? finally一定会执行,即使是catch中return了,catch中的return会等finally中的代码执行完之后,才会执行。 5、常见的异常类有哪些?NullPointerException空指针异常 ClassNotFoundException指定类不存在 NumberFormatException字符串转换为数字异常 IndexOutOfBoundsException数组下标越界异常 ClassCastException数据类型转换异常 FileNotFoundException文件未找到异常 NoSuchMethodException方法不存在异常 IOExceptionIO异常 SocketExceptionSocket异常 二、网络 1、http响应码301和302代表的是什么?有什么区别?301:永久重定向。 302:暂时重定向。 它们的区别是: 301对搜索引擎优化(SEO)更加有利; 302有被提示为网络拦截的风险。 2、forward和redirect的区别?forward是转发和redirect是重定向: 地址栏url显示:fowardurl不会发生改变,redirecturl会发生改变; 数据共享:forward可以共享request里的数据,redirect不能共享; 效率:forward比redirect效率高。 3、简述tcp和udp的区别?tcp和udp是OSI模型中的运输层中的协议。tcp提供可靠的通信传输,而udp则常被用于让广播和细节控制交给应用的通信传输。 两者的区别大致如下: tcp面向连接,udp面向非连接即发送数据前不需要建立链接; tcp提供可靠的服务(数据传输),udp无法保证; tcp面向字节流,udp面向报文; tcp数据传输慢,udp数据传输快; 4、tcp为什么要三次握手,两次不行吗?为什么? 如果采用两次握手,那么只要服务器发出确认数据包就会建立连接,但由于客户端此时并未响应服务器端的请求,那此时服务器端就会一直在等待客户端,这样服务器端就白白浪费了一定的资源。若采用三次握手,服务器端没有收到来自客户端的再次确认,则就会知道客户端并没有要求建立请求,就不会浪费服务器的资源。 5、说一下tcp粘包是怎么产生的?tcp粘包可能发生在发送端或者接收端,分别来看两端各种产生粘包的原因: 发送端粘包:发送端需要等缓冲区满才发送出去,造成粘包; 接收方粘包:接收方不及时接收缓冲区的包,造成多个包接收。 6、OSI的七层模型都有哪些?物理层:利用传输介质为数据链路层提供物理连接,实现比特流的透明传输。 数据链路层:负责建立和管理节点间的链路。 网络层:通过路由选择算法,为报文或分组通过通信子网选择最适当的路径。 传输层:向用户提供可靠的端到端的差错和流量控制,保证报文的正确传输。 会话层:向两个实体的表示层提供建立和使用连接的方法。 表示层:处理用户信息的表示问题,如编码、数据格式转换和加密解密等。 应用层:直接向用户提供服务,完成用户希望在网络上完成的各种工作。 7、get和post请求有哪些区别?get请求会被浏览器主动缓存,而post不会。 get传递参数有大小限制,而post没有。 post参数传输更安全,get的参数会明文限制在url上,post不会。 8、如何实现跨域?实现跨域有以下几种方案: 服务器端运行跨域设置CORS等于; 在单个接口使用注解CrossOrigin运行跨域; 使用jsonp跨域; 9、说一下JSONP实现原理? jsonp:JSONwithPadding,它是利用script标签的src连接可以访问不同源的特性,加载远程返回的JS函数来执行的。 三、设计模式 1、说一下你熟悉的设计模式?单例模式:保证被创建一次,节省系统开销。 工厂模式(简单工厂、抽象工厂):解耦代码。 观察者模式:定义了对象之间的一对多的依赖,这样一来,当一个对象改变时,它的所有的依赖者都会收到通知并自动更新。 外观模式:提供一个统一的接口,用来访问子系统中的一群接口,外观定义了一个高层的接口,让子系统更容易使用。 模版方法模式:定义了一个算法的骨架,而将一些步骤延迟到子类中,模版方法使得子类可以在不改变算法结构的情况下,重新定义算法的步骤。 状态模式:允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。 2、简单工厂和抽象工厂有什么区别?简单工厂:用来生产同一等级结构中的任意产品,对于增加新的产品,无能为力。 工厂方法:用来生产同一等级结构中的固定产品,支持增加任意产品。 抽象工厂:用来生产不同产品族的全部产品,对于增加新的产品,无能为力;支持增加产品族。 四、SpringSpringMVC 1、为什么要使用spring?spring提供ioc技术,容器会帮你管理依赖的对象,从而不需要自己创建和管理依赖对象了,更轻松的实现了程序的解耦。 spring提供了事务支持,使得事务操作变的更加方便。 spring提供了面向切片编程,这样可以更方便的处理某一类的问题。 更方便的框架集成,spring可以很方便的集成其他框架,比如MyBatis、hibernate等。 2、解释一下什么是aop?aop是面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。 简单来说就是统一处理某一切面(类)的问题的编程思想,比如统一处理日志、异常等。 3、解释一下什么是ioc?ioc:InversionofControl(中文:控制反转)是spring的核心,对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的关系。 简单来说,控制指的是当前对象对内部成员的控制权;控制反转指的是,这种控制权不由当前对象管理了,由其他(类,第三方容器)来管理。 4、spring有哪些主要模块?springcore:框架的最基础部分,提供ioc和依赖注入特性。 springcontext:构建于core封装包基础上的context封装包,提供了一种框架式的对象访问方法。 springdao:DataAccessObject提供了JDBC的抽象层。 springaop:提供了面向切面的编程实现,让你可以自定义拦截器、切点等。 springWeb:提供了针对Web开发的集成特性,例如文件上传,利用servletlisteners进行ioc容器初始化和针对Web的applicationContext。 springWebmvc:spring中的mvc封装包提供了Web应用的ModelViewController(MVC)的实现。 5、spring常用的注入方式有哪些?setter属性注入 构造方法注入 注解方式注入 6、spring中的bean是线程安全的吗?spring中的bean默认是单例模式,spring框架并没有对单例bean进行多线程的封装处理。 实际上大部分时候springbean无状态的(比如dao类),所以某种程度上来说bean也是安全的,但如果bean有状态的话(比如viewmodel对象),那就要开发者自己去保证线程安全了,最简单的就是改变bean的作用域,把singleton变更为prototype,这样请求bean相当于newBean了,所以就可以保证线程安全了。 有状态就是有数据存储功能。 无状态就是不会保存数据。 7、spring支持几种bean的作用域?spring支持5种作用域,如下: singleton:springioc容器中只存在一个bean实例,bean以单例模式存在,是系统默认值; prototype:每次从容器调用bean时都会创建一个新的示例,既每次getBean相当于执行newBean操作; Web环境下的作用域: request:每次http请求都会创建一个 session:同一个httpsession共享一个bean实例; globalsession:用于portlet容器,因为每个portlet有单独的session,globalsession提供一个全局性的httpsession。 注意:使用prototype作用域需要慎重的思考,因为频繁创建和销毁bean会带来很大的性能开销。 8、spring自动装配bean有哪些方式?no:默认值,表示没有自动装配,应使用显式bean引用进行装配。 byName:它根据bean的名称注入对象依赖项。 byType:它根据类型注入对象依赖项。 构造函数:通过构造函数来注入依赖项,需要设置大量的参数。 autodetect:容器首先通过构造函数使用autowire装配,如果不能,则通过byType自动装配。 9、spring事务实现方式有哪些?声明式事务:声明式事务也有两种实现方式,基于xml配置文件的方式和注解方式(在类上添加Transaction注解)。 编码方式:提供编码的形式管理和维护事务。 10、说一下spring的事务隔离? spring有五大隔离级别,默认值为:ISOLATIONDEFAULT(使用数据库的设置),其他四个隔离级别和数据库的隔离级别一致: 12、springmvc有哪些组件?前置控制器DispatcherServlet。 映射控制器HandlerMapping。 处理器Controller。 模型和视图ModelAndView。 视图解析器ViewResolver。 13、RequestMapping的作用是什么? 将http请求映射到相应的类方法上 14、Autowired的作用是什么? Autowired它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作,通过Autowired的使用来消除setget方法。 五、SpringBootSpringCloud1、什么是springboot? springboot是为spring服务的,是用来简化新spring应用的初始搭建以及开发过程的。 2、为什么要用springboot?配置简单 独立运行 自动装配 无代码生成和xml配置 提供应用监控 易上手 提升开发效率 3、springboot核心配置文件是什么?springboot核心的两个配置文件: bootstrap(。yml或者。properties):boostrap由父applicationContext加载的,比applicaton优先加载,且boostrap里面的属性不能被覆盖; application(。yml或者。properties):用于springboot项目的自动化配置。 4、springboot配置文件有哪几种类型?它们有什么区别? 配置文件有。properties格式和。yml格式,它们主要的区别是书法风格不同。 properties配置如下: spring。RabbitMQ。port56721 yml配置如下: 注意:yml格式不支持PropertySource注解导入。 5、springboot有哪些方式可以实现热部署?使用devtools启动热部署,添加devtools库,在配置文件中把spring。devtools。restart。enabled设置为 使用IntellijIdea编辑器,勾上自动编译或手动重新编译。 6、jpa和hibernate有什么区别? jpa全称JavaPersistenceAPI,是Java持久化接口规范,hibernate属于jpa的具体实现。 7、什么是springcloud? springcloud是一系列框架的有序集合。它利用springboot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用springboot的开发风格做到一键启动和部署。 8、springcloud断路器的作用是什么? 在分布式架构中,断路器模式的作用也是类似的,当某个服务单元发生故障(类似用电器发生短路)之后,通过断路器的故障监控(类似熔断保险丝),向调用方返回一个错误响应,而不是长时间的等待。这样就不会使得线程因调用故障服务被长时间占用不释放,避免了故障在分布式系统中的蔓延。 9、springcloud的核心组件有哪些?Eureka:服务注册于发现。 Feign:基于动态代理机制,根据注解和选择的机器,拼接请求url地址,发起请求。 Ribbon:实现负载均衡,从一个服务的多台机器中选择一台。 Hystrix:提供线程池,不同的服务走不同的线程池,实现了不同服务调用的隔离,避免了服务雪崩的问题。 Zuul:网关管理,由Zuul网关转发请求给对应的服务。 总结 上篇文章给大家介绍在java面试中常见一些面试问题并给出了相应的参考答案,主要包括JavaSE中的多线程问题、反射中常见的一些面试题以及对象的拷贝和JavaWeb中常见的一些问题。本文给大家介绍了JavaSE中的异常、网络中常见的面试题,另外还介绍了设计模式的相应的面试题。最后给大家介绍了流行了框架中的常见面试题,主要包括springspringmvc以及springboot和springcloud的相关面试题。希望大家在理解的基础上好好掌握,这是java的基础,也是核心,只有这些基础知识掌握扎实,我们才会更好的将这些应用在实际的开发过程中。总之,无论是面试还是初学者,本文对java方向的同行们多多少说会有帮助,希望大家认真学习,努力工作,活到老,学到老,不断提高自己的技能水平。同时也希望正在找工作的小伙伴们都能找到一份满意的工作!!!! Java架构师面试题及其他福利教程领取方式: 1、点赞评论(勾选同时转发) 2、关注小编。并私信回复关键字【19】