微布开发-上传多张图片控制上传顺序
开发思路:串行上传:在前端逐个上传图片,并等待上一个图片上传成功后再上传下一个图片,以保持上传顺序。
刚开始开发是通过一个for循环依次上传,没有考虑到可能因为图片大小、网络等原因导致后端返回的url顺序不一致,可以理解成多并发上传的时候而导致的顺序问题
代码大致实现:123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566uploadAllPics(selectedImages, index) {//fileListPicStorage 和fileList 都是用于展示组件的时候用的,主要就是存储上传之后的图片url const { fileListPicStorage = [] } = this.data const { fileList = [] } = this.data return new Promise((resolve, r ...
面经-北森后端开发实习一面(线程安全和锁未完成)
为什么离开了法大大实习?阿巴阿巴阿巴。。。。。
为什么当时要用kafka进行UGC消息推送?业务场景是什么?原因:
kakfa是一个高吞吐、低延迟的消息队列,UGC消息需要实时推送给其他用户,比如评论、点赞等,因此kafka可以确保消息被快速处理,从而提供更好的实时性和用户体验。
因为kafka 的可靠性比较高、消息会被持久化在磁盘上,确保消息不会丢失。
因为kafka可以支持多个消费组和分区,UGC在高并发的情况下需要处理大量的消息,而kafka可以轻松应对高负载和大规模的UGC
解耦异步,主要是因为异步的特性,不会因为同步处理的方式导致主线程阻塞,导致性能下降。使用消息队列,可以将这些操作封装成消息,放入消息队列中,异步处理这些操作,不影响主线程的执行,提高系统性能和响应速度。
kafka的生产和消费逻辑?生产实现逻辑:
1、连接到kafka集群,创建一个producer
2、生产者通过producer对象将消息发送到指定的topic。消息可以包含键和值,键可以帮助消息路由到特定的分区,如果没有特定的key就会通过自带的负载均衡机制选择一个分区。
3、通过key实现分区,指定了 ...
面经-七牛云测试开发实习一二面
一面微布校园的分工如何?在开发过程中学到了什么?遇到了什么难的问题?如何解决缓存雪崩、缓存与数据库一致性问题?查询响应速度从超时响应加快到900ms~1s是如何实现的?讲一下雪花算法(当时从组成,为什么可以作为分布式id角度回答)使用kafka实现UGC消息异步推送,起到削峰、解耦的作用,讲一下对削峰、解耦的理解。Redis在哪一部分用的比较多?讲一下http的三次握手、四次挥手?为什么要进行四次挥手?介绍一下udp和tcp之间的区别什么时候用UDP?什么时候用TCP?介绍一下对HTTP的理解Cookie和Session的区别介绍一下token讲一下MySQL的索引,什么时候用到了索引,以及什么时候遇到过索引失效的?介绍一下Redis的数据类型和持久化如何通过Redis实现分布式锁?Redis的淘汰策略有哪些?介绍一下对多线程的理解什么是线程池、为什么要使用线程池?Java的异常有哪些?如何捕获异常?对文件的上传、下载分别有哪些测试功能点?算法题:把两个无序的数组合并成一个有序的数组二面为什么要选择面试测试开发这个岗位?你觉得测开需要学习些什么方面的东西?netty和直接裸写socke ...
面经-万物心选php开发实习
实习项目的监听字段是基于什么实现的?前端进行某个字段变更之后,后端提供接口,将修改后的数据打入消息队列,服务端作为消费者进行监听判断某个字段是否等于某个值然后进行对应的业务逻辑操作。
通过redis作为缓存层,实现分布式锁,保证消息不会被多次消费怎么实现的?(具体的数据流程)通过业务id来保证,业务id作为锁的key,当消费信息的时候,把工单id作为key去申请锁,如果成功拿到了锁,说明此时不存在竞争关系,如果当前进程被阻塞了,说明有进程对该数据进行了消费。
不过后面发现如果有两个并发的线程的时候,被阻塞的业务后面拿到了还是可能会造成重复消费,于是又加了一层缓存,缓存已经消费了的业务id,用来表示是否被消费过,也就是保证业务的幂等性。
当时为什么考虑到设置一个重试机制降低消费的失败率?当初实现合同是临时合同的时候,要删除销售合同的主从表,因为当时是两个表,涉及到了一个同步操作,即先删除主表之后再删除从表的操作,要保证事务的一致性和原子性,可能两个删除操作会有一个或者两个操作均失败的情况,就设计了这个重试机制,如果其中一个操作失败就进行事务回滚,然后将两个同步操作打入重试的队列中进行一次 ...
面经-快手测开 2023 - 7 - 11
简单介绍一下二手市场整体的架构,数据流的实现?整体架构:
持久层和缓存的选型
MySQL作为持久层:
支持复杂条件数据查询:在二手市场中,用户会根据自身需求筛选不同的条件进行各种复杂的查询,例如按照不同条件筛选商品等,MySQL提供丰富的查询语言和索引支持,能够高效查询相关数据。
结构化数据存储:二手市场涉及大量的结构化数据,例如:用户信息,商品信息等。而MySQL是关系型数据库,适合存储和管理结构化数据,提供事务支持,保证数据的一致性和完整性。
Redis作为缓存:
二手市场是多读少写的场景,用户会频繁的浏览商品,但是对商品的修改变更有限,所以可以将物品信息添加至Redis中有效减轻MySQL的读取压力,提高系统的响应和性能。
服务的拆分方式
暂时因为是单体架构,没有钱去购买太多的服务器,所以服务暂时没有进行具体的划分,如果要进行划分的话我觉得可以划分成以下几种服务:
用户服务:主要是对用户的身份信息进行认证和鉴权。
UGC消息通知:可以处理二手市场发布、编辑商品信息后,通过邮件、消息推送的方式告知用户。
商品信息服务:负责二手商品信息的发布、编辑、删除、搜索等 ...
面经-滴滴golang后端实习 2023 - 07 - 04
HTTP有哪些请求方式?
PUT:将数据存储在服务器,覆盖指定URL,常用于更新资源
GET:从服务器获取数据,GET请求是幂等的,即多次请求相同的URL会返回相同的结果
POST:向服务器提交数据,通常用于向服务器发送数据,比如提交表单
DELETE:从服务器删除指定的URL资源。
HEAD:类似于GET请求,但服务器只返回头部信息,不返回实际数据。主要用于检查资源的元数据,例如确认资源是否存在或最后修改日期等。
OPTIONS:获取目标URL支持的请求方法信息。用于查询服务器支持哪些HTTP方法。
PATCH:用于对资源进行局部更新,更新指定的字段而不是像PUT一样更新整个资源。
TRACE:用于目标服务器上执行一个消息环回测试,主要用于诊断。
CONNECT:用于代理服务器请求,通常用于建立代理服务器的隧道。
POST和GET的使用场景及区别?POST主要用于客户端向服务端提交数据的时候使用,GET主要用于客户端向服务端获取请求的时候使用。
POST和GET实际上没有什么区别,如果硬要说有区别可见如下:
GET方法产生一个数据包,POST方法产生两个数据包。
GET方法会将h ...
微布开发-二手市场开发思路(小程序+Java后端)
小程序端:相关参数:
allList:全部商品列表
askBuyList:求购商品列表
sellLis:出售商品列表
开发思路如下:物品列表拉取:
默认获取全部所有的商品list用于初始化加载页面
滑动一级分类,确认一级分类type类型
Type = 转卖
初始化
默认转卖一级分类的所有商品列表
滑动到二级分类,根据二级分类类型对应的categoryBid拉取列表
下拉刷新
若为一级分类的所有商品列表,categoryBid = null
若具体到二级分类的具体类型,categoryBid = 对应的二级分类bid
上滑加载
根据一级分类和二级分类(categoryBid )的类别确定获取什么类型的list并且赋值到allList/sellList/askBuyList
Type = 求购
初始化
默认求购一级分类的所有商品列表
滑动到二级分类,根据二级分类类型对应的categoryBid拉取列表
下拉刷新
若为一级分类的所有商品列表,categoryBid = null
若具体到二级分类的具体类型,categoryBid = 对应的二级分类bid
上滑加载
...
面经- 星环科技Java实习
最高QPS是承受多少?服务器部署位置?目前是单体应用?为什么要使用雪花算法?(分布式id、雪花算法组成)有无发布订阅的功能?应用场景有哪些?Redis的应用场景是哪些?什么情况下会出现缓存雪崩?怎么防止缓存雪崩的问题?怎么保证数据库和redis的一致性问题?怎么解决用户禁言时间失效的问题?介绍一下Java集合ArrayList是基于什么实现的?(从ArrayList和Array的区别出发)ArrayList的怎么动态扩容的?
初始化容量: 当你创建一个新的ArrayList对象时,它会分配一个初始容量,通常是10个元素的大小(这个值可以根据需要进行修改)。
添加元素: 当你向ArrayList中添加元素时,如果当前元素数量达到了容量上限(一般是元素数量到达9/10的时候),就会触发动态扩容。
扩容操作: 在进行动态扩容时,ArrayList会创建一个新的更大容量的数组,然后将原数组中的元素复制到新数组中。
更新引用: 一旦新数组中的元素复制完成,ArrayList会更新内部引用,指向新的数组。
介绍一下JVM的内存区域(面试官其实是想要我自己说出来程序计数器、虚拟机栈等的作用。。。) ...