Java业务面试
描述业务
狂旋仨宇宙
c v工程师
展开
-
1.23第八天
获取锁:当一个客户端尝试获取锁时,Redisson使用Redis的SETNX命令来尝试在Redis中设置一个指定的键值对作为标识,如果该键值对不存在,则表示获取锁成功,否则,获取锁失败;设置过期时间:在获取锁成功之后,Redisson会为这个锁设置一个过期时间,即使持有锁的客户端崩溃或忘记释放锁,锁也会在一段时间之后自动释放,避免死锁的情况发送;释放锁:当客户端使用完锁之后,需要主动调用释放锁的操作,Redisson会使用Lua脚本来保证释放锁的原子性,避免因为网络延迟或者其他原因导致的不一致性;原创 2024-01-25 08:08:13 · 339 阅读 · 0 评论 -
1.22第七天
1.多人并发下超过发放数量产生的原因:因为我首先查询优惠券,然后判断库存是否充足(领取数量<总数量),最后如果充足,更新优惠券领取数量。解决方案:对于这种场景,一般采取悲观锁,我在这里使用的是Synchronized同步代码块,锁用户id,来判断单人是否超领。1.创建优惠卷:创建优惠卷可以设置使用范围,也可以设置优惠卷类型和优惠力度,还可以设置推广方式,发放数量,每人限领等。优惠卷超领在我的项目中,总共分为两种,分别是多人并发下超过发放数量,单人并发超过每人限领。在我的项目中,优惠卷涉及到了促销微服务。原创 2024-01-23 08:13:38 · 357 阅读 · 1 评论 -
1.19第六天
总之,Java1.8中的ConcurrentHashMap在性能和并发性方面有一些改进,这些改进使得Java1.8中的ConcurrentHashMap在高并发环境中表现更优秀。对于数据库的海量数据存储,方案有很多,常见的有分区、分表、分库、集群;在mysql为了防止单表数据量过多,我们采用了分表的设计方案,把一个赛季的数据放到一张表里,我们在查询时根据赛季标识查询,只用查一张表即可。在我的项目中我采用的是分表,以每个赛季为基准进行分表,水平分出不同的表,每张表中存入对应赛季的数据;原创 2024-01-22 08:07:38 · 367 阅读 · 0 评论 -
1.18第五天
如果该积分加上增加的积分大于等于对应类型的积分上限,则增加的积分等于该类型上限积分减去查询的积分;bitmap是以二进制0和1来表示数据的,在我们项目中,用0 表示未签到,1表示已签到,这样就把一个人在某个月份签到记录放到了一条记录里,可以非常高效地表示和查询用户的签到记录,很大程度上节省了存储空间。在Redis中,pipeline是一种用于批量执行多个命令的机制,它可以在一个网络往返中发送多个命令,并在一个网络往返中接收它们的响应,这样减少了网络往返的次数和网络开销,可以大大提高性能。原创 2024-01-19 08:16:58 · 321 阅读 · 1 评论 -
1.16第四天
4-1 你们项目是如何部署XXL-JOB的XXL-JOB是一种定时任务,主要用于分布式系统。首先,参考官方文档搭建基础环境。然后,在本地配置调度中心的名字和执行器的端口并且在定期任务上使用@xxljob注解指定工作处理器的名字。其次,打开调度中心的网址,创建调度中心连接执行器,要和本地配置一致最后,创建任务,任务中jobhandle和@xxljob指定的名字一致。4-2 说一说你的评论点赞功能是如何完成(reids版本) 评论点赞主要涉及到两个微服务,分别是点赞微服务和学习微服务。原创 2024-01-18 09:24:04 · 288 阅读 · 0 评论 -
1.15第三天
3-1 你们的项目是如何进行参数校验的 为了保证数据的正确性和完整性,我们项目是用了Spring的Validation/ˌvælɪˈdeɪʃn/,这是一套基于注解的权限校验框架,在方法参数上添加字段限制,来对接口请求的参数进行后端的校验。 常见的注解有下面几类: 一、空值上的检验: @Null:可以标注在任意类型元素上,被标注的元素必须为null; @NotNull:可以标注在任意类型元素上,被标注的元素必须不能为null,但是原创 2024-01-18 09:21:05 · 309 阅读 · 1 评论 -
1.13第二天
首先,当浏览器查询的请求发过来后,从课程表中查询,设置业务条件(登录用户Id,并且以最后一次学习时间倒序排列),执行查询,虽然最近学习章节只会查询一个结果,但由于返回结果vo中需要该用户课表的数量,为了提高性能,少从数据库查一次数量,所以这里查询该用户的所有课,取第一个。生成课表则是在课表微服务,生成课表的方式有很多,我在项目中使用的是消息中间键MQ,在交易微服务业务功能返回结果的前一步,向MQ投递消息,收费的需要生成订单,支付,清空购物车,然后生成课表,免费的则是生成订单,然后生成课表。原创 2024-01-15 08:24:44 · 360 阅读 · 0 评论 -
1.12第一天
接下来就要进行前端传入密码和数据库查询到的密码比对,由于数据库的密码是加密保存的,所以在比对之前,还需要对前端传入的秘密进行加密;然后根据账号在数据库员工表进行查询,如果没有查到,说明此账号不存在,可以直接给前端返回一个提示,如果查询到了说明这个账号存在。这确保了项目能够高效地集成和部署。打包和部署:使用Maven等构建工具打包应用程序,然后将打包好的应用程序部署到目标环境,如测试环境或生产环境。其次,在保存完文章信息后,进行一个异步调用文章审核功能,文章审核使用的是阿里云的文字审核和图片审核。原创 2024-01-12 21:04:10 · 331 阅读 · 0 评论