golang面试归纳总结 - 其他篇(持续更新)

99 阅读2分钟
1. Chrome爬取插件怎么避免敏感性检测?
2. 有没有反编译过安卓软件,具体要怎么实现?
3. 有没有遇到过重复请求的问题,我说一个场景,你看看该怎么处理?
3.1 有针对某个订单的改价,假设商家第一次改价误操作设为0元,此时已经发起请求A,但还未响应或者响应超时,此时商家再次发起第二个请求B将订单设为x元,第二个请求顺利响应。但此时由于客户端的重试机制,重复发送A请求。此时你该怎么处理?

答:

有遇到过,有三个方案可供选择:

  1. 前端处理
    前端请求一次过后按钮置为灰色,除非修改参数,否则不允许重复点击。
  2. 网关处理
    网关拦截,利用API网关设置拦截规则,防止重复请求提交。
  3. 后端处理
    方案一:
    把请求参数(JSON)按KEY做升序排序,排序后拼成一个字符串,并对这个字符串做一个MD5的摘要,存进redis里,过期时间设置为1000ms,也即是1000ms内的重复参数的请求认为是重复请求,重复请求仅响应一次。
    方案二:
    第一步,后端做好请求日志,
    第二步,mysql给数据加上version,并在返回给详情的时候加上version
    第三步,前端发起请求时自动给version+1,当我判断版本号大于数据库中的版本号时,我才更新。
    方案三:(以前公司使用的方案)
    第一步:客户端打开时强制向服务器获取当前时间
    第二步:发起修改请求时自带时间戳,服务器只响应时间差在1000ms以内的请求,过期请求直接返回,“您的请求时间已超时”
4. 有没有用过分布式锁?具体怎么实现?
5. 有没有用过IP池,如果要用ip池伪造请求,该怎么做?

答:

  1. 伪造user-agent
  2. 通过x-forwarded-for:ip来伪造ip
  3. 使用ip代理
    3.1 使用动态拨号的方法改变ip
    3.2 使用代理ip,网上有许多维护中的代理池,有些需要付费,也有免费的但是不太稳定。
    3.3 使用Tor代理服务器
    3.4 使用openvpn 改变ip
6. 你常用的linux服务器装的是哪个版本的系统,有没有关注过Centos7和Centos8的停止维护时间?

答:

CentOS7将于2024年6月30日停止维护,Centos8已于2022年01月01日停止维护。当然了生产环境考虑到安全因素建议采用debian替换。

7. 有没有用过分布式事务?你的解决方案是什么?
8. 描述一个死锁情景。如何解除死锁?
9. Git 你们有哪些branch。