腾讯实习一面-PCG大数据平台-运营开发面经
前面的IEG秒挂后1天被这个部门捞了,这几天准备了下算法,但是项目有点懈怠了
时间:3月11日 14:40 ,时长45分钟
全程拷打Java项目,掺了一些业务相关的八股
拷打查询优化细节:
因为项目亮点手贱,写了用Redis缓存优化前时间、优化后时间。结果疯狂拷打怎么得出的优化时间 其实是编的数据😭😭,引以为鉴!!
⭕查询时间是怎么测出来的?
肉眼对比效果 + 查询前时间 对比 查询后时间
❌拷打一连串问题:
数据量多大? sql查询出多少条记录? 是什么查询场景?查询条件是什么?小程序端提供哪些查询条件?有哪些类别?一条记录大小是多大呢?
凭记忆硬答,远古项目以前没想到会问,早知道不写了,还是太天真
❌通过引导得出最终的疑问:你这个查询很小简单,不应该有这么多的性能提升啊?
寄了,道歉,说不记得了
⭕不带缓存时查询会经过哪些关键节点?
客户端应用层构建查询语句->网络传输中发送查询请求到服务器->Mysql解析并接受请求 -> 数据库中执行语句
⭕从小程序发起查询请求开始,到最终输出结果,网络层面上,完成一次查询会经过哪些阶段?
答了计网,tcp连接后->http发起请求->TCP打包->IP寻路和转发->服务器协议栈解包->MySql获取到请求包并得到语句->执行
⭕经过哪些网络上面的硬件和物理的东西?
硬件和物理:网卡、网络传输路径
❌那么你觉得上面经历的各个环节哪些占用时间的比例比较大?
答的网络中TCP的连接和传输可能占用时间更长,还是不太理解
⭕假设以20条记录的查询为例去算(假设是千兆网),怎样算出各部分的时间?
`发送时有发送时延=数据包大小/网络传输速度,传播时延利用网络工具可大概知道延时``
❌你说不用缓存DB的查询会慢,你有测试DB的耗时是多久吗?
再次重申真的只是应用层写了两行代码😭
❌DB是怎么配置有注意吗? 也就是数据库服务器的规格有注意吗?
没做这方面的考虑,全部都是默认配置
❌时间测试是在本机测试还是在云端测试?
本地测完,云端只是用docker把后端jar包、mysql、Redis都部署在服务器上了,没再测过
拷打缓存
❌缓存是怎么实现的?
答了放入redis,只是用到了,对原理还在学习
⭕缓存之后,数据有更新怎么处理?
超时删除 + 更新后主动清除缓存并重新写入
⭕缓存清空是一个什么样的粒度?
获取当前记录的缓存,清空本次修改的数据缓存
❌缓存更新有没有别的方式?
道歉并答了Redis还不太懂
⭕为什么放在Redis中会快?
只答了因为是内存存储的键值对数据库
❌你是Redis部署在多点的网络环境上吗?
否,和后端环境在同一个服务器机器上
❌真实环境中Redis部署在网络上,还能起到加速的作用吗?
没懂考察啥知识点,大概是数据库和后端服务分离,怎么保证响应速度吧
JWT你可以讲一下吗?
承接上一次的JWT
参考:
❌JWT和普通的直接签名认证有什么区别?
寄,没听过
直接签名认证是什么?
只包含了签名部分登录后生成token并用共享密钥对其签名,然后发回给客户端,其每次请求时在请求头中放入URL或者字段中,服务器收到请求后利用共享密钥验证
JWT是直接签名认证的升级
其除了签名外,规定了 头部.载荷.签名 的标准化格式和内容,使得认证更加通用和安全
总结:
JWT是升级版,在格式和内容方面进行了拓展
,除了用加密算法签名外规定了数据的格式:头部、载荷、签名
,以及内容:使用JSON格式
JSON的优势:
易读性
:结构简单易读,因此代替了XML数据结构灵活、易扩展
:可以表达多种类型的数据跨平台和通用性
:多平台有JSON解析和生成的工具
⭕JWT是为了解决什么问题的呢?
答了跨域,回复:这只是功能之一,又答了比较通用和泛化,回复:对
首先是无状态性:
- 传统的session-cookies中服务器检查会话信息来识别客户端,并存储客户端的状态信息session_id到cookie,这样服务器负载比较高。
- JWT每个请求都包含了完整的认证信息,服务器不需要为验证维护一个session并记录状态,减少了服务器鉴权的负担
其次是解决跨域问题:
- 传统的session-cookies中浏览器因为安全原因发送请求时只会带上和目标同源的cookies,所以A网站登录过一次后B中不会带上A的cookies,导致
跨域问题:也就是不同源(协议、域名、端口)的cookie限制交互
- JWT因为是无状态的,而且包含有登陆的信息,所以和A网站登录成功后生成的JWT,如果B网站采用
相同的签名和加密
,并且没有过期且密钥安全地保存,那么A网站就可以和B网站发起连接和通讯,解决了跨域问题
安全性:
- 利用签名和共享密钥可以实现登录信息的完整性
- 也可以使用对JWT加密或者使用https再放入请求头,来保证安全性
闲聊
- Java这方面不是主力语言吧,不考研吗?
- 为什么不直接找C++方面的工作呢?
讲了自己的想法,回复:应该多注意下Java上的业务技术点要更深入进去
算法
时间不够了,你10分钟内做完这道题合并两个有序数组
经典双指针,幸好没忘,秒了基本逻辑,第一次用ACM模式折腾了了一小会儿
有没有可能优化成一次循环?
太菜了没看过优化,之后看了题解发现倒序双指针可以
时间复杂度是多少
O(m+n)
反问:
- 当时在捞我的时候参考了哪些方面?
答:简历是同事推给我的,看到做了一些基础性的东西,但是看起来对Java这方面做的不深(别骂了😭)
- 您个人在面试时侧重于考察哪些方面?
从项目开始引入知识点,看细节有没有深入的思考,一直问看你能回答出的深度和广度
总结:
有点大意了,没想到这个烂项目还有人问,直接没复习,全在凭借残存的记忆硬答,简历上的东西真的不能大意😭😭😭
面试官人超好,说话超温柔(比上一次那位好多了),还闲聊了一下感觉很亲切,不会的地方会换个方式来引导你
对我的建议帮助很大,之前侧重底层的基架方面和算法基础,以为这样可以差异化竞争,Java八股都是死背的,业务开发这方面确实很久没复习了,以前觉得这些CRUD简单,面试不会很考察,面业务岗还不注重业务项目是真的天真😭😭
要好好搞一下业务项目了,引以为鉴,不可大意
结果还没出,没秒挂已经进步了😢
----------------------
一天后3月12日,看了一下流程终止了,果然还是寄了,专心沉淀😭😢
#腾讯PCG##面经##腾讯面经##腾讯实习基地#