java笔试 - 套题(八)

答案见下方

基础题

1、cookie和 session的区别,分布式环境怎么保存用户状态
2、RequestMapping和 GetMapping的不同之处在哪里?
3、Spring Boot提供了哪些 Starter Project Options?选一个比较熟悉的介绍。
4、Spring Boot自动配置原理是什么?
5、介绍 SpringCloud中的 gateway或zuul,如何实现动态路由?

前端方面

6、JavaScript里“==”和“===”的区别
7、比较下Flex布局和 Float布局
8、JS里,this 关键字指向的是什么?

中间件

9、如何实现异步请求(队列)?
10、rabbitmg有哪些重要的角色?
11、rabbitmq 如何保证消息的唯一消费及稳定性?
12、如何实现订单30分钟未支付自动取消并通知客户的功能?
13、Redis有哪些数据类型,分别介绍使用场景?
14、如何使用 Redis实现考试分数排名?

持久层+数据库


15、mybatis是否支持证迟加载?延迟加载的原理是什么?
16、简单描述你在项目中有代表性的mysql 优化经验

实战场景

17、微信对接token失效,如何确保在不间断中请求正常?
18、预约报名业务,怎么来保证每次报名都是有序且正常进行?

答案

1,Session和Cookie的区别?

1、数据存储位置:cookie数据存放在客户的浏览器上,session数据放在服务器上。
2、安全性:cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session。
3、服务器性能:session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie。
4、数据大小:单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。session存储在我们的服务器端,没有存储数量限制,可以保存更多复杂类型的数据结构
5、信息重要程度:可以考虑将登陆信息等重要信息存放为session,其他信息如果需要保留,可以放在cookie中。
6、生命周期不同:以20分钟为例,cookie的生命周期是累计的,从创建时开始计时,20分钟后cookie生命周期就结束了。session的生命周期是间隔的,从创建时开始计时,如果在20分钟内没有访问的我们的session,那么session生命周期就被销毁了,但是如果在20分钟内,比如第19分钟时呢访问过session,那么将重新计时session生命周期
分布式环境下的session(举例两种):
1,服务器session复制
原理: 任何一个服务器上的session发生改变(增删改),该节点会把这个 session的所有内容序列化,然后广播给所有其它节点,不管其他服务器需不需要session,以此来保证Session同步。
优点: 可容错,各个服务器间session能够实时响应。
缺点: 会对网络负荷造成一定压力,如果session量大的话可能会造成网络堵塞,拖慢服务器性能。
2,session共享机制
使用分布式缓存方案比如memcached、redis,但是要求Memcached或Redis必须是集群。

2,RequestMapping和 GetMapping的不同之处在哪里?

二者均用于限定该Controller方法只能使用get方式请求,@GetMapping作为@RequestMapping的派生注解,作用是简单直观。作用范围不同:
@RequestMapping 能注解在类(ElementType.Type)和方法(ElementType.Method)中,可以指定GET、POST请求方式
@GetMapping 只能注解方法(ElementType.Method)中,等价于 @RequestMapping(method= RequestMethod.GET)

3、Spring Boot提供了哪些 Starter Project Options?

容器类Starter

名称描述
spring-boot-starter-jetty使用Jetty作为Servlet容器,是spring-boot-starter-tomcat的替代者之一。
spring-boot-starter-reactor-netty使用Reactor Netty作为内置的响应式Http服务器。
spring-boot-starter-tomcat使用Tomcat作为Servlet容器,也是使用 spring-boot-starter-web时的默认选项。
spring-boot-starter-undertow使用Under作为Servlet容器,是spring-boot-starter-tomcat的替代者之一。

应用类Starter

生产环境工具类Starter

名称描述
spring-boot-starter-actuator此Starter提供用于应用监控和管理相关功能,这些功能在生产环境非常实用。

4、Spring Boot自动配置原理是什么?

自动配置原理 SPI:是server provider interface 的简写,字面意思是服务发现接口,我理解就是第三方拓展API,他是java提出的,即开箱即用的思想。在spring的生态中已经运用得非常多,比如springMVC中官方推荐的去web.xml的方式,用一个onStart的方法就将dispatcherServlet到IOC的容器中,这也是利用了tomcat的SPI。在springBoot中,当我们加一个starter的包,spring将帮我们注入了一些类。你删掉包后,spring就不会注入。不会产生任何的影响,这就是SPI的思想,拆箱即用

5、介绍 SpringCloud中的 gateway或zuul,如何实现动态路由?

spring-cloud-gateway(2)--->spring-cloud-gateway如何实现动态路由_该码就码的博客-CSDN博客

6、JavaScript里“==”和“===”的区别

=== 表示恒等,首先比较两边的变量数据类型是否相等,其次比较两边的变量的数值是否相等;== 表示相等即仅仅比较两边变量的数值是否相等。

7、比较下Flex布局和 Float布局

float元素宽高和元素之间的间距都是固定的,随着页面缩小,元素会换行。(可以设置为 不换行)。
flex布局的元素宽高和元素之间的间距是变化的,随着页面缩小,父类空白空间减少,元素能分配到的空间也减少,元素的间距也减少。

响应式布局----float和flex布局 - 知乎

8、JS里,this 关键字指向的是什么?

一、this关键字      
        (1)在方法中,this表示该方法所属的对象
        (2)若单独使用,this表示全局对象
        (3)在函数中,this表示全局变量
        (4)在事件中,this表示接受事件的元素
二、this理解:
        (1)this是js的一个关键字,指向一个对象,然后替代this;函数中的this指向行为发生的主体,函数外的this指向window
        (2)函数内的this和函数在什么环境下定义的没有关系,意思是和他的作用域没有关系,而是和自己执行时候的主体有关
        (3)主体:看函数调用前面有没有点(.),若有则就是其前面的对象,若没有就指向window
        (4)一般来说,this指向的是哪个最后调用它的对象
        (5)若函数中有this,但他没有被上一级对象所调用,那么this就指向window;若被上一级对象调用,则this就指向上一级对象

9,如何实现异步请求(队列)?

异步请求实现_congchp的博客-CSDN博客_异步请求

10、rabbitmq有哪些重要的角色?

RabbitMQ中重要的角色有:生产者、消费者和代理:
①生产者:消息的创建者,负责创建和推送数据到消息服务器;
②消费者:消息的接收方,用于处理数据和确认消息;
③代理:就是RabbitMQ本身,用于扮演“快递”的角色,本身不生产消息,只是扮演“快递”的 角色。

11、rabbitmq 如何保证消息的唯一消费及稳定性?

RabbitMQ 如何保证消息不会被重复消费_一江溪水的博客-CSDN博客_rabbitmq保证消息不被重复消费
RabbitMQ如何保证消息的可靠性 - King-DA - 博客园
RabbitMQ如何保证稳定性_RyFit的博客-CSDN博客_rabbitmq 怎么保证消息的稳定性?

12、如何实现订单30分钟未支付自动取消并通知客户的功能?

5种方案实现订单30分钟未支付,则自动取消_独行侠梦的博客-CSDN博客

13、Redis有哪些数据类型,分别介绍使用场景?

Redis有哪些数据类型,以及各自应用场景_蹲在角落数蚂蚁的博客-CSDN博客_redis各个数据类型应用场景
14、如何使用 Redis实现考试分数排名?

使用Redis实现积分排行榜,并支持同积分按时间排序_Java艺术的博客-CSDN博客
15、mybatis是否支持证迟加载?延迟加载的原理是什么?

什么是延迟加载?

延迟加载的条件:resultMap可以实现高级映射(使用association、collection实现一对一及一对多映射),association、collection具备延迟加载功能。
延迟加载的好处: 先从单表查询、需要时再从关联表去关联查询,大大提高 数据库性能,因为查询单表要比关联查询多张表速度要快。
延迟加载的实例: 如果查询订单并且关联查询用户信息。如果先查询订单信息即可满足要求,当我们需要查询用户信息时再查询用户信息。把对用户信息的按需去查询就是延迟加载。

Mybatis仅支持association关联对象和collection关联集合对象的延迟加载,association指的就是一对一,collection指的就是一对多查询。在Mybatis配置文件中,可以配置是否启用延迟加载lazyLoadingEnabled=true|false。
它的原理是,使用CGLIB创建目标对象的代理对象,当调用目标方法时,进入拦截器方法,比如调用a.getB().getName(),拦截器invoke()方法发现a.getB()是null值,那么就会单独发送事先保存好的查询关联B对象的sql,把B查询上来,然后调用a.setB(b),于是a的对象b属性就有值了,接着完成a.getB().getName()方法的调用。这就是延迟加载的基本原理。
当然了,不光是Mybatis,几乎所有的包括Hibernate,支持延迟加载的原理都是一样的。

16、简单描述你在项目中有代表性的mysql 优化经验

数据库 - SQL优化_森!!仔的博客-CSDN博客

17、微信对接token失效,如何确保在不间断中请求正常?

微信小程序token过期后重新执行失效的请求封装(用户无感刷新token)_Your-Nikee的博客-CSDN博客_微信小程序token过期怎么办
18、预约报名业务,怎么来保证每次报名都是有序且正常进行?

【开发经验】排队预约系统开发思路_叁滴水的博客-CSDN博客_java预约实现思路


版权声明:本文为zs1972551648原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。