Java面试1000题突击班(抓住金九银十) 持续更新中(二)

这篇具有很好参考价值的文章主要介绍了Java面试1000题突击班(抓住金九银十) 持续更新中(二)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

**Java面试1000题突击班(抓住金九银十) 持续更新中(一)**

三、Spring

1.Spring原理、特点等

  • 原理:它是一个全面的、企业应用开发一站式的解决方案,贯穿表现层、业务层、持久层。但是Spring可以和其他框架无缝整合。
  • 特点:轻量级、控制反转、面向、切面、容器(可以看我的SpringIOC详解文章和AOP)

2.Spring 常用模块

  • 核心容器:核心容器提供Spring框架的基本功能,核心容器的主要组件是BeanFactory,它是工厂模式的实现,BeanFactory使用控制反转(IOC)模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。
  • Spring上下文:Spring上下文是一个配置文件,向Spring框架提供上下文信息。比如国际化。
  • Spring AOP:通过配置管理特性,Spring AOP模块直接将面向切面的编程功能集成到了Spring框架中。可以将一些通用任务,如安全、事务、日志等集中进行管理,提高了复用性和管理的便捷。
  • Spring DAO:为JDBC DAO提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写地异常代码数量。(打开、关闭连接)
  • Spring ORM:Spring插入了若干个ORM框架,从而提供了ORM的对象关系工具,JDO、Hibernate、iBatis SQL Map。所有这些都是从Spring的通用事务和DAO异常层次结构。
  • Spring Web:web上下文模块建立在程序上下文之上,为基于Web的应用程序提供了上下文,所以,Spring框架支持与Struts的集成。Web模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。
  • Spring MVC:MVC框架是一个全功能的构建Web应用程序的MVC实现,通过策略接口,MVC框架变成为高度可配置的,MVC容纳了大量试图技术,其中包括JSP、Velocity、Tiles、iText、POI。

3.Spring常用注解

@Controller、@RestController、@Component、@Repository、@Service

@ResponseBody、@RequestMapping、@Autowired、@PathVariable、@RequestParam、@Valid

4.spring和spring boot区别

二者主要区别是:

1、Spring Boot提供极其快速和简化的操作,让 Spring 开发者快速上手。
2、Spring Boot提供了 Spring 运行的默认配置。
3、Spring Boot为通用 Spring项目提供了很多非功能性特性。

5.Contended注解的作用

使用@Contended来保证被标识的字段或者类不与其他字段出现内存争用。
注意:如果想要@Contended注解起作用,需要在启动时添加JVM参数:

-XX:-RestrictContended

6.SpringMVC的工作流程

这篇文章介绍的挺全面的

7.Springboot-事务处理

@Transactional是用来声明一个事务的注解,表示该方法是事务性的,当方法发生异常时,将自动回滚。

  • 7.1该注解有没有失效的时候(参考链接):

1.不要在接口上声明@Transactional ,而要在具体类的方法上使用 @Transactional 注解,否则注解可能无效。
2.不要图省事,将@Transactional放置在类级的声明中,放在类声明,会使得所有方法都有事务。故@Transactional应该放在方法级别,不需要使用事务的方法,就不要放置事务,比如查询方法。否则对性能是有影响的。

3.使用了@Transactional的方法,对同一个类里面的方法调用, @Transactional无效。比如有一个类Test,它的一个方法A,A再调用Test本类的方法B(不管B是否public还是private),但A没有声明注解事务,而B有。则外部调用A之后,B的事务是不会起作用的。(经常在这里出错)

4.使用了@Transactional的方法,只能是public,@Transactional注解的方法都是被外部其他类调用才有效,故只能是public。道理和上面的有关联。故在 protected、private 或者 package-visible 的方法上使用 @Transactional 注解,它也不会报错,但事务无效。
5.spring的事务在抛异常的时候会回滚,如果是catch捕获了,事务无效。可以在catch里面加上throw new RuntimeException();
6.最后有个关键的一点:和锁同时使用需要注意:由于Spring事务是通过AOP实现的,所以在方法执行之前会有开启事务,之后会有提交事务逻辑。而synchronized代码块执行是在事务之内执行的,可以推断在synchronized代码块执行完时,事务还未提交,其他线程进入synchronized代码块后,读取的数据不是最新的。

分布式事务
同样在面试中,也多数据源事务问题@Primary注解

8.自动装配机制

自动装配就是去吧第三方组件的Bean装载到IOC组件中。@SpringBootApplication可以实现自动装配,但该注解是一个复合注解,其中主要是@EnableAutoConfiguration。主要依靠三个核心关键技术。

  1. 引入Starter,启动依赖组件的时候,组件内必须包含一个@Configuration配置类,而这个配置类里边,我们需要通过@Bean注解去声明需要装配到IOC容器里面的Bean对象
  2. 这个配置类是放在第三方的jar包里面,然后通过springboot中约定优于配置的这样一个理念,把这个类的全路径放在spring.factories文件内,springboot就可以知道第三方jar包的位置,这个主要是用到了SpringFactoriesLoader来完成的
  3. springboot拿到第三方jar包声明的这个配置类以后,再通过spring提供的ImportSelector这样一个接口来实现对这些类的动态加载。

9.约定大于配置

是一种软件范式,是减少软件开发人员对配置项的维护,从而让开发人员更加聚焦在业务逻辑上。
比如:springboot Starter启动依赖项(管理jar包的版本);springboot会自动内置Tomcat容器来运行web应用;springboot的自动装配;自动加载spring.fatories。

10.SpringCloud常用组件

  1. 注册中心组件:Eureka、nacos、Zookeeper等
  2. 负载均衡组件:Ribbon
  3. 远程调用组件:OpenFeign
  4. 网关:Gateway、Zuul
  5. 服务保护:Hystrix、Sentinel
  6. 服务配置管理组件:SpringCloudConfig、Nacos

11.Nacos的服务注册表结构是怎么样的

需要从两个方面入手:

  1. Nacos的分级存储模型
  2. Nacos的服务端源码

12.Nginx和Gateway

gateway是前端工程到后台服务器之间的一个对内网关
nginx是用户到前端工程的网关对外网关

13.Mybatis中涉及到了哪些模式

构建者模式:sqlSessionFactoryBuilder
工厂模式:sqlSessionFactory
代理模式:jdk动态代理 mapper接口 代理对象
单例模式
责任链模式:
模板模式:excutor接口

14.spring中经常用到的设计模式

1.单例模式(Singleton Pattern):
某个类只能生成一个实例,该类提供了一个全局访问点供外部获取该实例
Spring 的默认 bean 作用域就是单例模式,保证每个 bean 只有一个实例。

2.工厂模式(Factory Pattern):
Spring 提供了多种工厂模式,如 BeanFactory 和 ApplicationContext 等,通过这些工厂可以创建和管理对象的实例。

3.代理模式(Proxy Pattern):
Spring AOP 就是基于代理模式实现的,通过代理对象来对目标对象的方法进行增强。

4.观察者模式(Observer Pattern):
Spring 事件机制就是基于观察者模式实现的,通过事件源和监听器来实现对象之间的解耦。

5.适配器模式(Adapter Pattern):
Spring MVC 中的处理器适配器就是基于适配器模式实现的,将不同类型的处理器适配到统一的处理器接口上。

6.模板方法模式(Template Method Pattern):
Spring 的 JdbcTemplate 就是基于模板方法模式实现的,通过定义抽象的模板方法和具体的子类实现来实现数据访问的流程控制。

7.策略模式(Strategy Pattern):
Spring 的 BeanPostProcessor 就是基于策略模式实现的,通过在不同的时机调用不同的策略方法来实现对 bean 的后置处理。

8.装饰器模式(Decorator Pattern):
Spring 的 AOP 还可以通过装饰器模式来实现增强对象的功能,如通过动态代理和 AspectJ 实现的环绕通知就是一种装饰器模式。
综上所述,Spring 中运用了许多经典的设计模式,这些模式为 Spring 提供了良好的架构和扩展性,也为我们在实际开发中提供了更多的思路和方案。

15. 如何解决跨域问题

这个是我在面试的时候经常被问到的一个问题,可以从下面去回答。
首先跨域产生的原因:因为一般的浏览器都有一个安全机制——同源策略限制(即,用户输入的URL中包含的协议、域名、端口都完全相同。如果有一项不同,浏览器会觉得有安全风险。)
为了支持跨域问题,浏览器设置了预检机制。也就是说在发出跨域请求时,浏览器会自动发出一个查询请求,称为预检请求,用来确认目标资源是否支持跨域。Java面试1000题突击班(抓住金九银十) 持续更新中(二)
如何解决:在后端服务添加CORS策略的配置就可以解决跨域问题。
Cross Origin Resource Sharing(跨域资源访问)
解决跨域问题具体有以下4种方式:文章来源地址https://www.toymoban.com/news/detail-480189.html

  1. 普通web项目,添加一个corssdomain.xml文件
<?xml version="1.0"?>   
<!DOCTYPE cross-domain-policy SYSTEM "http://www.adobe.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
    <site-control permitted-cross-domain-policies="master-only"/>
    <!-- 允许example.com及其子域访问 -->
    <allow-access-from domain="*.example.com"/>
    <!-- 允许http://www.example.com访问 -->
    <allow-access-from domain="www.example.com"/>
    <allow-http-request-headers-from domain="*.csdn.net" headers="*"/>
</cross-domain-policy>
  1. Spring项目,添加处理跨域的过滤器或者拦截器
  2. SpringBoot项目,在支持跨域的方法上添加@CrossOrign注解
    springboot项目实现过滤方法如本链接可参考
  3. Sptingboot项目更方便二点方式,实现WebMvcConfigurer接口

到了这里,关于Java面试1000题突击班(抓住金九银十) 持续更新中(二)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 金九银十面试题之《Spring IOC》

    🐮🐮🐮 辛苦牛,掌握主流技术栈,包括前端后端,已经7年时间,曾在税务机关从事开发工作,目前在国企任职。希望通过自己的不断分享,可以帮助各位想或者已经走在这条路上的朋友一定的帮助 ❤️金九银十马上就要来啦,各位小伙伴们有计划跳槽的要开始准备了,博

    2024年02月14日
    浏览(49)
  • 金九银十面试题之《数据结构和算法》

    🐮🐮🐮 辛苦牛,掌握主流技术栈,包括前端后端,已经7年时间,曾在税务机关从事开发工作,目前在国企任职。希望通过自己的不断分享,可以帮助各位想或者已经走在这条路上的朋友一定的帮助 ❤️金九银十马上就要来啦,各位小伙伴们有计划跳槽的要开始准备了,博

    2024年02月16日
    浏览(45)
  • 金九银十面试怒拿6个offer——测试开发面试题整理

    金九银十面试怒拿6个offer——测试开发面试题整理 1、软件测试的流程是什么? 2、测试用例主要有哪些元素? 3、软件测试有什么策略和阶段? 4、黑盒测试和白盒测试是什么?二者有什么区别? 5、软件测试有什么类型? 6、测试用例是什么?有什么作用? 7、你平时是怎么

    2023年04月08日
    浏览(39)
  • 金九银十面试题之《Spring Data JPA、Spring MVC、AOP》

    🐮🐮🐮 辛苦牛,掌握主流技术栈,包括前端后端,已经7年时间,曾在税务机关从事开发工作,目前在国企任职。希望通过自己的不断分享,可以帮助各位想或者已经走在这条路上的朋友一定的帮助 ❤️金九银十马上就要来啦,各位小伙伴们有计划跳槽的要开始准备了,博

    2024年02月15日
    浏览(48)
  • 疫情下,我的金九银十计划

    2到3年是一个阶段,想要加薪,还得跳槽.我也不例外. 往年的3-4月、9-10月,招聘市场都有很多岗位可选,但今年真的是少得可怜.大家也感觉到了吧.还有份工作,活着好像真的也很不错了.不过该准备的还是准备,没准就有了呢. 以往的备战,我都打开百度,java面试攻略,找一大堆内容,没想

    2024年02月17日
    浏览(49)
  • 软件测试金九银十即将到来,求职套路多你有多大把握拿offer

    面试问题第一问,95%都会是:请简单的做个自我介绍吧~分以下几点说明。 1、年纪太大与太小,都不需要主动去说明。 比如我年纪只有20岁 例子:面试官您好,我叫***,来自于哪里,从事软件测试工作有几年了。 2、专业不对口也不要过多的去提及(提到了就会增加问你的概

    2024年02月10日
    浏览(39)
  • maven项目打包跳过单元测试,又是一年金九银十

    org.apache.maven.plugins maven-surefire-plugin 2.22.2 true 方法二(建议) 通过idea 工具实现,点击右上角 有点像闪电样子的图标,看到 test 被划掉了。然后点击maven 打包的功能就可以跳过测试了。 Maven命令栏的工具栏有下图中的图标,这个图标就是 Skip Tests。点击选中,再用LifeStyle中的

    2024年04月11日
    浏览(42)
  • 【面试突击】Java 项目安全面试实战(下)

    🌈🌈🌈🌈🌈🌈🌈🌈 欢迎关注公众号(通过文章导读关注:【11来了】),及时收到 AI 前沿项目工具及新技术的推送! 在我后台回复 「资料」 可领取 编程高频电子书 ! 在我后台回复「面试」可领取 硬核面试笔记 ! 文章导读地址:点击查看文章导读! 感谢你的关注!

    2024年01月25日
    浏览(42)
  • 如何短时间突击 Java 通过面试?

    大家好,我是伍六七。 Java 面试是越来越难,那么如何能快速通过 Java 岗位的面试呢?阿七来聊聊这个问题。 先找那些你不是很想去的公司面试,积累经验和面试题。 一定要整理所有碰到的面试题,碰到不会回答的面试题,一定要在面试结束之后自己找到答案并且融会贯通

    2024年02月07日
    浏览(38)
  • rabbitmq原理面试,java面试突击第一季github

    1.1 什么是线程 1.2 线程创建与运行 1.3 线程通知与等待 1.4 等待线程执行终止的join 方法 1.5 让线程睡眠的sleep 方法 1.6 让出CPU 执行权的yield 方法 1.7 线程中断 1.8 理解线程上下文切换 1.9 线程死锁 1.10 守护线程与用户线程 1.11 ThreadLocal 2.1 什么是多线程并发编程 2.2 为什么要进行

    2024年03月14日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包