连连支付Java后端实习生一面

自我介绍+项目介绍:5分钟左右

项目面:

你在简历中的两个项目里都是负责人是吗?是的。

在这两个项目中遇到的印象比较深刻的技术问题/项目推进和沟通方面的问题?协调不同团队成员的开发进度,要尝试去了解各个成员最近都在做的事情,尊重大家的现实情况,在不施压的情况下最大化开发进度;前后端的协作问题,接口规范,先开发后端还是先开发前端,或者相反又或者是一起推进(数据渲染中字段修改麻烦,数据库层面可能也会面临修改),团队项目的初期沟通是十分重要的;

那后面是否有提出一些改进的方案呢,比如后端定义好一些接口规范?每次会议都进行接口的讨论,基于RESTful API规范进行开发,尽量减少二次修改的可能性;

那么在开发过程中是否遇到过一些开发层面的困难呢?多级评论功能的实现;并发安全的问题,比如挂号服务的号源超卖问题,讲述项目场景(多线程场景下select后紧跟update),解决问题的方案(单体加锁->分布式锁),后端开发基本原则是尽量不引入中间件去解决问题,尝试去从MySQL的锁的角度去解决问题,即使用select for update来得到最新的号源数量。

有没有考虑过for update启动的锁它的范围是什么样的?当某个进程使用select for update的时候,其他线程想要加锁的时候就会被阻塞,所以能够得到最新的值。

他一定加的会是行锁吗,有没有可能是间隙锁或者一些范围区间的锁是由什么决定的?没有考虑到这个问题)(新阅读了一些资料,估计是想问间隙锁,就是幻读以及锁范围太大的情况)。

这样可能会有个问题,就是范围相对比较大,所以可能存在死锁的这种情况?应该不满足循环等待这个条件。

每次挂号的时候需要加锁的数据是不是只有一行的?是的,所以应该不会产生这种资源的互相等待的情况。

那除了这个之外呢是否还有对其他资源进行加锁,这一次的挂号操作?先尝试去医院端那边更新,只有对方那边成功返回这个情况才考虑我们这边数据进行号源数量的同步减少的原子性操作。

这个是调用的第三方接口吗?不是的,是我们自己模拟的一个医院服务器,通过HTTP请求进行通信。

对方告诉我们处理成功了是不是就是意味着在数据层面上医院端已经处理成功了?是的,所以我们需要对数据进行一个同步。

那如果失败了呢?就不做其他的逻辑了。

那假设医院端的信号没有发过来呢,比如网络包丢失了或者发生异常情况了,导致数据没有传输过来?可以采用超时机制,也就是如果在一定时间内没有返回,那么可以超时重传。

相当于失败了就要去重试了,那假设对方已经处理成功了数据库也更新了只不过返回的包丢失了,那么重传是不是就导致了多次重复处理?没有考虑到这个问题。

本质是分布式系统之间的一致性问题,你现在想想假如要保证一致性该怎么做?定时任务假如不一致那么就进行同步化。

你怎么知道什么时候不一致呢怎么进行同步呢?网站下线进行同步迁移(其实当时没懂这个场景,乱回答的)。

针对这一笔订单,既然我们其实并不知道医院方返回给我们的数据是否是可信的,到底是丢包了呢,还是他们发生异常了呢或者各种情况那么如何进行一个补偿性的操作弥补这个问题?重试一次。

可能有点太粗暴了,比如一笔支付要付钱,但是你现在要依赖对方返回给你的这个支付是否成功的一个接口,既然依赖他,但是结果又不明确,所以不能轻易无脑当做失败,因为他们那边可能实际上的处理是成功的,那么是不是就可能会出现问题?可以考虑做一个缓存,记录我们发出去的请求id,当对方收到我们的请求的时候也记录下这些请求id,每个请求设置多个状态,发送方记录是否收到回传,接收方记录是否收到信息,定期校验这两个缓存,如果我们已经发送且对方已经收到,但是我们还没收到对方的那么就让对方再发一次请求,如果我们发出去的对方没有收到,那么我们就再发一次请求。

那么对方也需要一个缓存?是的,要协商一下。

那基本不可能,因为公司提供的接口是固定的,不可能为你单独添加这样的扩展,还有什么方案吗,有个比较简单的方案,你想想?把我们这个请求涉及到的数据再查一次对面数据库的档案来进行比对,只有查询的操作。

好的,你基本说出来了,就是总的来说掉单了,那么就要放在一个掉单表里面,通过定时任务来获取掉单的数据,通过对应的接口来查询订单的状态,基本是这样的一个方式,因为既然不明确,那么就多问几次,查询操作其实影响是比较小的,你项目里用到了zset,你说说key存的是什么?不是我负责的这块(得去恶补一下了,为了显得好看临时包装的)。

项目里用到了Feign,那你有了解过其他的一个RPC框架吗?Spring Cloud&&Dubbo和gRPC&&Thrift。

你用到了微信支付的SDK,那你们这个网站是上线已经运营了吗?(因为SDK的使用需要注册一个服务号类型的公众号后认证该公众号同时提交资料申请微信支付,开户成功后登陆商户平台进行验证最后签署在线协议,所以才有这个问题,我推测)用的是网上的人提供的一个凭证。

你做的还是团队的成员做的呢?参与但是没有负责这个模块,设计了数据库的表和订单的一个监控行为。

推广的时候有没有考虑过资金损失的场景?我们这个除了云服务器应该没有资金损失吧..

付款的时候可能会涉及到部分退款和全额退款还是补偿,那么就可能会损失资金?我们采用的是全额退款,就是调取第三方接口。

就是说即使那笔订单已经退过了,但是再次发起退款还会再退?这个会根据我们数据库里的订单记录来查询退款状态。

八股文:

MySQL的回表你知道吗?聚簇索引/二级索引相关。

索引覆盖知道吗?联合索引相关。

索引失效有了解过吗?不太清楚。

场景其实挺多的,好吧那索引下推呢?最左匹配原则以及在使用 ICP(索引下推) 的情况下,如果存在某些被索引的列的判断条件时,MySQL 服务器将这一部分判断条件传递给存储引擎,然后由存储引擎通过判断索引是否符合 MySQL 服务器传递的条件,只有当索引符合条件时才会将数据检索出来返回给 MySQL 服务器 ,减少查询压力。

数据库的隔离级别了解吗?四大隔离级别。

分别会出现什么问题,哪些级别是去解决什么问题?脏读&&读提交,不可重复读&&可重复读隔离级别;

幻读了解吗?概念有点记不清楚了(早上面试完没有及时复盘去搜资料,吃了亏)。

可重复读是怎么实现的你能说一下吗?MVCC机制。

Spring里面有几种实现事务的方式呢?编程式事务(TransactionTemplate的execute方法&&TransactionManager的commit和rollback);声明式事务(@Transactional注解);注解失效的场景。

看你用了RabbitMQ,你能说说不同角色比如生产者消费者以及消息队列本身消息丢失的一个解决方案吗?生产者(开启MQ事务;开启Confirm模式);中间件(Emm忘记了);消费者(ACK自动确认机制的关闭);

消息是存储到哪里的呢?哦对,是磁盘,所以中间件是采用持久化的方式来避免丢失的。

反问环节

#JAVA##后端##实习#
全部评论
实习问这么难
1 回复 分享
发布于 2023-11-07 23:03 浙江
八股文还好,但是项目问的好难😭😭😭
点赞 回复 分享
发布于 2023-12-04 23:05 北京

相关推荐

02-27 11:51
南京大学 C++
前些日子在腾讯校招官网投递了后台开发的日常实习,不久后微信支付部门就约我一面。我是c++开发技术栈的。这是我第一次面大厂,我相当重视,在面试前疯狂地背八股 写算法题,但整个面试过程还是大大地出乎我的意料,不知道各位uu们看完后对此有什么见解。一开始很正常,面试官介绍了微信事业部,要求我自我介绍。然后就是介绍项目。我打开项目的代码,介绍了整个项目。面试官一开始沉默不语,然后突然问我项目里用户的密码是怎么加密的,我说用的openssl库里的哈希函数,把密码哈希之后存在数据库。他要求我打开代码看看。我把处理的代码给他看,他又问我:这样就安全了吗?问到这我就感觉很奇怪了,这真的是我作为一个大二的来面日常实习的人必须掌握的嘛……(而且这是他提的唯一一个问题)。不过幸亏我做项目写到这的时候多查了一会资料,知道一些加盐存储之后再哈希的做法,于是就给面试官说了。面试官也没有说什么,既没有肯定也没有否定。接下来面试官就提了我觉得整个过程中最奇怪的要求,让我现场作答。要求如下:独立部署开源产品分析工具Posthog,用于产品信息收集,并基于Capacitor创建一个简单的移动App(可用任何前端框架),提供一个主界面,集成posthog sdk,展示一个按钮,按钮点击5次后,触发Posthog弹出Survey页面/弹窗,根据survey的信息在Posthog的产品洞察中做简单分析参考:源码参考: https://github.com/PostHog/posthog推荐使用Cursor AI开发工具我当时大受震撼。首先我在简历上完全没写前端的任何经验(实际上我对前端的了解也仅限于HTML CSS这些的),我面的也是后台开发。其次我对上面这些名词甚至完全听都没听过。于是我询问面试官能不能换题,并表示我不会前端。面试官说这是考察我的学习能力……我硬着头皮打开那个网址,读文档,了解这个玩意是干什么的……折腾了二三十分钟,实在是没什么进展。面试官就问我多久能做好。我其实也没什么把握,就说三天吧。面试官让我加个微信,什么时候做好就什么时候发给他。面试就这么结束了。我整个人都是懵的,回来继续研究这题。从下午三点到晚上八点,我快速了解、从头安装使用了vue 、Capacitor、 Android Studio ,以及那个posthog,还真的把他要求的最终结果做了出来。美中不足的是,要求里posthog是需要本地部署的,但是posthog的文档中要求本地部署要有一台4g的服务器,也要有一个对应的A域名(如果有这些,一条指令就可以一键部署)。而这些我都没有。于是我就按文档中的另一种推荐方法,临时用提供的cloud部署一下。其实做到这,我还是很有成就感的(毕竟从头速通了那么多东西,头一次做出来一个APP)然后我就把整个过程的记录文档发给面试官了。面试官立刻就回复说需要我本地部署。我向他说明了我没有符合要求的服务器和域名,并且本地部署也不复杂(我觉得根本就算不上一个需要考察的点)。面试官坚持要求我本地部署,并且表示让我自己想办法(没有给出任何解决方法的提示)。到这里我感觉我就像被泼了盆冷水一样,实在不理解面试官为什么要这么做。最后直接把我一面挂掉了。我晚上想了很久很久。我投了一个星期的简历,许多面试官看了简历都以我是27届把我拒掉了,可谓是处处碰壁。好不容易有大厂愿意面我,但面的过程却是这样,从头到尾没有问任何八股 算法题,而是这种我从未在任何面经上见到的题目……而且明明已经做出了成果,对方却一点引导也没有,甚至毫无肯定的意思。不知道这种形式的面试有没有uu们见过。经过此面,我感觉到了深深的挫败感……我其实相当喜欢后端开发的,上至各种框架,下至底层内核,我都投入了许多精力。但是今天大厂第一面,使得我产生了深深地怀疑……这是一种出现在未来的新形式面试吗,还是说进大厂注定要抛弃自己原有的知识,被迫待在不熟悉的领域,以及得不到正反馈呢……就写到这吧。继续寻找机会中。#面试中的破防瞬间#
zhiyog:别急,wxg就是这样,基本只要超人,大一才接触代码的话基本很难进的
查看5道真题和解析 面试中的破防瞬间
点赞 评论 收藏
分享
查看25道真题和解析
点赞 评论 收藏
分享
评论
5
21
分享

创作者周榜

更多
牛客网
牛客企业服务