首页 / 大家都开始春招面试了吗
#

大家都开始春招面试了吗

#
799040次浏览 11736人互动
大大家都进入面试流程了吗?一起来交流下春招进度呀~
此刻你想和大家分享什么
热门 最新
03-22 11:18
中南大学 Java
场景题:扫码登录
刷到此贴的友友春招/暑期必上岸!!!鼠鼠在秋招的过程中多次被问到场景题,中大厂的考察频率相当之高,一般会放在最后一个问题用来拖时间,也遇到过上来就问你怎么设计一个系统(面试官以此来决定后面对你的态度)。所以鼠鼠准备开这个场景题栏目,分享在秋招过程中遇到的场景题以及如何进行回答,感兴趣和感觉有帮助的友友点个关注和赞吧,你们的点赞和关注是鼠鼠持续更新下去的最大动力!!!话不多说开启今天的主题,扫码登录吧!!!关于扫码登录是现在PC端登录的常见方式,鼠鼠在面试美团,腾讯等公司的时候都遇到过这个问题,当时面试回答的属于是七零八落了,不过鼠鼠有及时复盘的习惯,所以针对场景题,逐渐有了一套自己的方法论,应对不同的面试官可能提出的不同问题。对于场景题,鼠鼠觉得拿到一道题,首先要思考的是业务逻辑,然后就是在这个业务上会有多大的qps请求量,面试官经常会对你设计的方案和系统提出高并发/大流量的情况下会出现什么问题,你如何去解决,从而考察你设计系统的高可用性和系统性。那么对于扫码登录,其请求量其实并不算大,所以我们侧重于业务流程。大家都有过扫码登录的经历:PC端显示二维码,手机扫描后弹出确认登录页面,点击登录后PC端页面进行跳转。那么扫码的过程其实主要就涉及到手机端、PC 端、服务端这三部分。一、账号登录验证扫码登录相比于传统的输入用户号密码登录,其实本质都是账号认证的过程,相信大家入门的第一个项目里一定会有登录这个功能。输入用户名和密码进行提交。服务端接收到用户名和密码,进行用户名和密码的匹配。如果匹配成功,则登录成功。这里在Java里常用的是使用cookie或session,不过大家做的项目里可能使用使用jwt多一点(对没错,就是外卖和点评),也就是借助token来解决session的一些弊端(这里八股提问,cookie和session还有jwt的区别和应用场景分别是什么),我们这里统一使用token的概念进行解释,服务端在登录完成后会生成一个 TOKEN,与当前登录的用户进行绑定。这个 TOKEN 可以存储在 REDIS 内,并设置在 REDIS 内的过期时间,这也是 TOKEN 的过期时间。最后将 TOKEN 返回给客户端。以上就是整个登录认证的过程。后续接口的请求都要带着这个 TOKEN。服务端会验证 TOKEN 的有效性,如果验证通过,则继续进行服务端内的接口的调用。如果验证不通过,则返回认证失败,或者说 TOKEN 过期了,客户端就会跳转到登录页,重新进行登录。二、扫码登录流程现在换成了扫码登录,换汤不换药,还是需要让 PC 端获取到认证的 ID。2.1 二维码解释:扫码登录在PC端生成的二维码,里面不光可以存储数字,还可以存储任何的字符,以二维码的形式展示出来。手机扫码的过程,就是解码的过程。划重点!!理解了手机扫码是解码的过程,那这道题就理解了一大半了PC 端显示的二维码,其实就是PC端向服务端发起请求后,服务端返回的内容。那这个返回内容是什么呢?可以看做是一个唯一请求ID,能够唯一地代表当前的请求,同时这个唯一的ID 是有状态的,表示这个当前二维码是未扫描还是扫描成功,PC端根据服务端返回的唯一请求ID生成一个二维码。同时这个唯一请求ID是有过期时间的。这个二维码过了一段时间,我们不扫描,网页会显示已失效,请刷新。在设计上呢可以将唯一请求ID,作为 KEY 存储到 REDIS 内并设置一个失效时间。综上,这个唯一请求ID最后有三个状态,一个是未扫描,扫描成功还有已失效。已失效就提示它再次进行刷新。2.2 扫码登录接下来到了扫码登录环节。2.2.1 手机扫码要进行手机扫码,前提条件是手机的 APP 必须是登录状态的,这个非常重要,也就是手机端已经进行了用户名和密码的登录认证过程。手机端一定会存储登录认证后的 TOKEN。手机扫码识别 PC 端的二维码后会解析出二维码携带的唯一请求ID。也就是PC端向服务端发起请求后,服务端返回的唯一请求ID,手机会显示确认登录的按钮,按下按钮,手机端会将唯一 请求ID 和手机认证的 TOKEN 一同发送到服务端进行认证。2.2.2 服务端验证最后到了服务端。服务端首先会验证手机端的 TOKEN 是否有效,如果有效会验证唯一请求 ID 的状态,如果唯一请求ID 不存在了说明就已经失效了,Redis过期删除(八股提问,Rediskey过期后一定会马上删除吗)。如果唯一请求 ID 存在且当前状态是未扫码的,也就是说 REDIS 存在唯一请求 ID的KEY。此时就会生成一个 PC 端的 TOKEN,与唯一请求 ID进行关联,设置 REDIS 的唯一请求 ID对应的 VALUE 为 PC端登录 的 TOKEN。此时 PC 的唯一登录 ID 就产生了,其他情况都是验证失败。到这里我们简单总结一下:PC端发起登录请求,服务端返回唯一请求ID,PC端根据请求ID生成二维码,处于登录态的手机已获得手机端的登录token,扫码解析出唯一请求ID后,将唯一请求ID和token一同发给服务端,服务端验证唯一请求ID和token后,生成PC端的登录唯一ID2.2.3 PC 端获得TOKENPC 端在生成完这个二维码之后会启动一个异步请求,向服务端去查询唯一 ID 的状态。1)如果是未扫描,REDIS 内存在唯一请求ID的 KEY,而且 VALUE 是空的,说明这个二维码是有效的。2)如果服务端的 REDIS 内已经没有唯一请求ID的 KEY 了,那说明就已经失效,提示二维码已经失效。3)如果 REDIS 内有唯一请求ID且有对应的 VALUE,则返回扫描成功和关联的 TOKEN,同时 PC 端就会显示登录成功。补充:PC 端通过什么方式来查询唯一请求 ID 的状态?1)轮询,PC 通过轮询的方式一次次的向服务端发送请求查询二维码的状态。2)长轮询,长轮询是指客户端主动给服务端发送二维码状态的查询请求。服务端接收到请求之后会按照情况进行阻塞直至二维码的信息状态更新或者超时。当客户端接收到返回的结果后,若二维码仍未扫描则会继续发送查询的请求,直至状态变化。3)WEB SOCKET ,WEB SOCKET 是指前端或者客户端在生成二维码后会与后端建立连接。一旦后端发现二维码状态发生变化,可以直接通过建立主动推送二维码的状态给前端。(这里其实很容易考到八股文三者的区别,如果友友们对这一块八股不清楚可以不讲出来,当然可能也有小伙伴在项目里用到了web socket,那么这里就可以和项目做一个关联,把面试官往项目上去引,因为场景设计题我们是很难在短时间内想得很完善的,但是我们的项目是千锤百炼过的)总结:以轮询的方式来获取二维码的状态为例。1)PC 端展示登录页面,会请求服务端获取唯一请求 ID,然后服务端会生成相应的唯一请求ID,并设置唯一请求 ID 的过期时间和状态,返回唯一请求 ID 给 PC 端。2)PC 端获取到唯一请求 ID 后生成相应的二维码,PC 端通过轮询的方式请求服务端通过唯一请求 ID 获取二维码的状态。3)手机端扫描二维码获取唯一请求 ID,将手机端的 TOKEN 和唯一请求 ID 发送给服务端确认登录。4)服务端验证手机端 TOKEN。然后根据手机端 TOKEN 和唯一请求 ID 生成 PC 端的 TOKEN。此时 PC 端通过轮循的方式请求服务端,就会获得到这个唯一请求 ID 对应的二维码的状态。如果是成功了,服务端就会返回 PC 端的 TOKEN,显示登录成功。PS:总结部分可以当做这个场景题的精简回答,上面的部分是帮助友友们理解,毕竟八股文如果死记硬背不理解的话稍微变化一下就不会了。其实在整个分析过程中大家可以发现,场景题其实就会把我们背的那些八股和技术运用起来,所以在学习场景题的时候就可以把八股文进行问题,有点像单词背不住就去读阅读文章,在读文章的时候记住八股文,在上面的分析过程中我也有几处进行了随机的八股提问。扫码登录这个过程里Redis用的很多,那友友们是不是可以顺带复习一下Redis的相关八股呢?(1)缓存三剑客是什么?有什么处理方式?(2)Redis缓存删除和内存淘汰策略(3)Redis持久化策略?AOF重写是什么?……以上都是鼠鼠在面试中只要遇到Redis就一定会被问到的,不一定是全部问到,但至少都是三选一了…好了如果大家有什么问题的话欢迎来评论区交流。包括但不限于文章创作改正意见,后续分享内容(面经,知识输出,经验分享等等),都看到这了,点个免费的关注和赞不过分吧#大家都开始春招面试了吗##我发现了面试通关密码##暑期实习   ##春招##场景题##八股#
查看7道真题和解析
点赞 评论 收藏
分享
我客户端春招全军覆没了。。。
我是Android开发,写过compose和flutter。蓝色代表我拒绝流程了,因为我只是想试试,不想留面评or纯懒。分析一下我面试挂了的几个:1. 腾讯:找我的组是电竞中台Flutter偏iOS组。我怀疑是kpi,面试官二面啥也不问,就让我自我介绍,我简短的自我介绍之后,他说这是技术面,我回答这么简短干什么。我寻思自我介绍还能怎么说啊,不都是面试官问我才继续拓展吗。问的也很怪,最后算法题都没考,过了一天挂了。也有可能是有符合条件的iOS同学。2. 腾讯音乐:找我的组是iOS偏KMP组。我面都没面,问了问组内一般干啥就结束面试了。3. 滴滴:两轮车事业部,主要搞青桔单车这些。回答的真的很垃圾,我连下载走的哪个协议层都没答出来(wc我都不知道当时脑子怎么回事???)。但是我回答的那么垃圾都能走到泡池子流程。我清楚记得面试官说了这么一句话:“你学了四年安卓,怎么这个还答不出来?”我当时就有点绷不住了,我说实话还是差的太远了。我这四年学的也是断断续续,只是当前时间减去开始学的时间差不多四年而已。过了不到一周挂了。4. 作业帮:直播课相关,现金流业务。这个挂的不明所以,聊得很开心,基本都是按照简历问的。算法也都做出来了,最后一面就给我挂了,过了几天吧。简历建议:能力要展示在简历上,简历更要匹配你面试能力。你不能否认,有些人他能力确实强,但是一到面试就拉胯。如果你认为自己很强,简历写一大堆很牛逼的经历,结果面试官一问,发现你的面试水平根本配不上你简历的内容,对你的印象就会大打折扣。我就是这样的人,面试的时候脑子跟不上嘴巴的速度,回答的跟一个智障一样。我举个例子:我简历中我有三个能稍微吹的设计,1. 自己的开源项目有一个断点续传下载功能模块。2. 我在小红书根据他们的设计,自己基本独立跟iOS端合作完成了一个UI动态模块化框架,减少了耗时xx ms。3. 掘金上写过技术文章,实现类似纸飞机日夜间切换动画的,巧妙利用了消息队列。好了,看到这些设计,你作为面试官你会怎么问?介绍一下你写的断点续传。这个最好说,先从使用类入手,WorkManager、Room数据库、RandomAccessFile seek到对应长度;再从原理入手,HTTP请求头Ranges;数据库需要哪些字段?最关键的是已下载长度和总长度;里面还实现了控制下载数,这个通过数据库的state字段和自行维护管理的等待、下载队列来控制;并发怎么处理?协程里的Channel,往channel里发送事件会一个个按顺序执行。我写的时候,看着像是行云流水,对自己写的模块了如指掌,但是说的时候就不一样了。但这还算是好的,起码你能一步步按顺序吐出来,我的第三个设计,很多面试官也会问,这个就比较难讲了。其实原理真的不复杂,就是利用了recreate本质是个消息,我们需要在recreate之后执行一个操作,就需要在主线程handler中post那个操作,就这么简单,我就是在文章内分析了一下recreate源码分析。但是要我用嘴说出来的话我根本讲不好,特别是面试官要是看不到动画,我更是在对牛弹琴。面试官最爱问的还得是实习经验,也就是我在小红书到底干了什么?我写的那个确实很有说头,也是作为实习生极有价值的代码。但是太过复杂,我实在不知道怎么去一言以蔽之。我说到A,就想提A中的B;说到B,我就想提B中的C。导致我脑子越绕越晕,讲得越加不明所以。况且好几个月下去,有些关键点我已经有点忘了。有一说一,很多人叫我佬,我其实离佬差得不是一点半点,我的这些面试问题,都是自己准备不充分导致的,所以大家还是平等交流吧。暑期实习、春招的屡次惨败经历让我都想搞点副业了(我已经有规划了)。我觉得凭我这技术能力,也就是中等的水平,自己都感觉走不太长久,唉。#牛客AI配图神器#看我上一个贴子,我打算去香港理工大学读一年研了,所以这次总结不仅是给大家的一点小小建议,更是给我今年或明年的客户端春招、秋招打下一个更坚实的基础(也就是对一些常问的简历问题进行一个总结,让面试官能知道我在干什么)。你们也别问我为什么还走客户端粪坑了,我是真转不动了。#春招##春招你拿到offer了吗##大家都开始春招面试了吗#
你见过凌晨四点的牛客吗_BY_KobeBryant:我佩服你兄弟,我是你粉丝
投递腾讯音乐娱乐集团等公司8个岗位
点赞 评论 收藏
分享
点赞 评论 收藏
分享
3.4 阿里-橙狮体育 一面凉经
面试时间:1h20min面试问题1:自我介绍2:ArrayList和LinkedList的区别3:HashMap是否可以存储空值4:HashMap1.7和1.8的区别和数据结构以及扩容机制5:HashSet和TreeSet的区别6:JVM容器,和JMM7:线程池的创建方式8:线程池的参数9:线程池的运行流程和常用的线程池10:线程池的任务拒绝策略11:mysql的事务隔离级别12:mvcc原理13:在可重复读级别下什么情况会发生幻读14:mysql执行计划要看什么字段15:redis常用的数据结构16:RDB,AOF17:缓存三剑客---开始问项目(点评+RPC)18:Redis在项目中的应用19:分布式锁的实现20:看门狗机制21:布隆过滤器的数据结构,怎么进行预热,如何进行增量保存22:用户签到的实现23:一个场景题,使用Redis保存用户排行榜,从两个维度(点赞量和点赞时间)考虑该怎么实现24:缓存一致性的实现25:全局ID生成器的实现,如何考虑时钟回拨26:Redis的事务27:Lua语句的考虑,为社么使用lua语句,他的效果是什么28:AOP的实现29:动态代理,jdk和cglib的区别30:Spring事务失效的场景31:Spring事务的传播机制32:synchronized的底层原理33:CAS的原理和缺陷34:CAS和synchronized在锁中的使用35:偏向锁,轻量级锁和重量级锁的转化机制36:乐观锁37:ReentrantLock38:项目中用到的和知道的设计模式39:设计对象时需要考虑的原则40:1G的数据,1M内存,如何获取出现次数最多的100个词手撕:三数之和#面试常问题系列##大家都开始春招面试了吗##26届实习##26实届找工作求助阵地##牛客AI配图神器#
点赞 评论 收藏
分享
头像
2024-04-30 20:40
已编辑
美团_软件开发工程师
写点经验给Java选手,回馈牛友
楼主秋招春招加起来应该投了一百七八十家,很多都是秋招投了春招又投,投递大中小厂都有,投递之前会到offershow查查薪资,基本都是能开15k+的才投,大中小厂都oc过,最后选择了团子,分享点个人浅薄的经验吧,大佬们可以忽视。免责声明:以下经验完全主观,不保证一定最优,不保证一定适合你。1.实习很重要,楼主中下211本,科班,秋招没实习没奖,秋招大厂基本笔试完就挂(最后只有百度给面),其他给了面试的一面通过率也不高,就算自我感觉答的不错也一样挂,春招有一份实习经历之后,简历通过率明显提高(包括大厂),一面也大部分都能过(即使有的答的不好)2.算法hot100+codetop的高频题目面试基本够用了,一般大中厂才会要求面试手撕,具体企业要不要手撕可以看牛友们面经3.Java八股先看JavaGuide,然后小林coding(重点关照计网),但这两个加起来还是不够,我自己是经常看别人发的面经知道了一些上面两个没有但经常问的,然后自己去搜,保存了两个网页的收藏夹,但是收藏夹这玩意儿不好分享,大家有需要就去看我下面的图自己搜吧(里面有些是我简历项目相关的八股,觉得少见的可以不背),把我说的这些背完大部分面试八股都可以应对4.投递不要局限于Java后端开发,用Java简历一样可以投go,投客户端服务端,投测开,Java很卷,学历、简历一般般的一定要海投5.简历要好好写,很多面试官喜欢对着你的简历挖,可以有意引导面试官往你会的方面问,我实习的时候用了多线程线程池,我自己有重点准备这方面的知识,每次自我介绍我都会介绍这个实习的这个点,面试官也很喜欢问我这个6.好好把握秋招,有暑期实习一定要去,春招岗位少,hc少,有的甚至都不开 #美团# #秋招# #春招# #24届软开秋招面试经验大赏# #24届秋招同行攻略分享# #我发现了面试通关密码# #offer# #大家都开始春招面试了吗# #如何判断面试是否凉了# #实习,投递多份简历没人回复怎么办#
牛客305799586号:祝阿姨早日康复
点赞 评论 收藏
分享
玩命加载中
牛客网
牛客企业服务