你们要的面试题来啦!

avatar
@京东科技

在这里插入图片描述

最近很多朋友在后台咨询 京东云面试的问题

“小编,你们面试一般都有几轮啊?” “小编,你们可以一个面试福利吗?” “小编,才毕业一年可以进你们公司吗?” “小编,我就是想要面试题。

emm……

作为贴心的小编😉😉 当然会尽量满足大家的需求

今天我们挑了部分 可能出现在 京东云 面试实战中的题目 和大家分享

在这里插入图片描述
在这里插入图片描述

Q: 用户访问京东网站时都通过浏览器输入网址而非IP地址,其中是借助DNS进行解析,在DNS解析中都会经过哪些过程? A:

  1. 用户输入访问的域名,查询本机DNS缓存
  2. 如果本地缓存未命中则向LocalDNS进行查询
  3. 如果LocalDNS缓存则返回结果,如果缓存未命中则向ROOT DNS进行迭代
  4. 查询,获得域名的权威DNS地址
  5. LocalDNS向权威DNS查询域名的IP地址
  6. LocalDNS将IP地址返回给用户并缓存解析记录
  7. 用户使用IP地址进行访问

Q: 在京东专有云环境中,涉及到众多的系统,一个系统的响应快慢可能决定着产品性能的好坏,请问如果发现一个应用响应缓慢,如何优化? A: 一个接口的响应缓慢可能是多方面的原因,具体分析如下:

  1. 前端接口调用:如接口本身调用速度较快,而到达前端的耗时较大,或是带宽较少,或是接口返回数据较多导致缓慢。可适量增加带宽,或使用cdn等方式加速静态资源。
  2. 应用程序方面:确保程序算法足够优化,无特耗时的算法处理,如算法无业务处理瓶颈,则可利用多线程将应用逻辑与数据处理并发处理,分而治之,加快响应速度。
  3. 数据库方面:查看数据库慢日志信息,确定待优化的sql语句,查看sql语句是否使用索引,如未使用索引,可为其创建索引,如已使用索引,则优化索引结构(如是否符合三星索引等),减少sql语句查找数据的随机访问磁盘次数,加快数据的检索速度。其次可增加数据库内存大小,添加查询缓存等减少数据库层面的耗时。
  4. 缓存方面:对于常用数据信息也可将其存放到缓存中,如使用Redis、Memcache等中间件产品,减少程序对磁盘的访问,加快应用响应速度。
  5. 应用服务器性能方面:服务器的性能是有限的,当一台服务器资源被占用殆尽时,可适量横向扩展服务器数量,使多个服务器均衡处理请求,提高服务响应能力。

在这里插入图片描述

Q: 京东商城在举办促销活动期间,经常会有业务访问量大幅波动的情况发生,为保证业务平稳健康的运行,一般需要在促销活动之前人工扩展集群规模。能否使用云产品来应对这种场景? A: 弹性伸缩产品。弹性伸缩通过设置伸缩策略,可以自动调整集群规模。在业务高峰期,自动增加云主机实例的数量,保证业务性能不受影响;当业务需求较低时,减少云主机实例数量,以节省成本。


Q: 弹性伸缩有哪几种伸缩策略?适用的场景有哪些? A: 定时策略:在指定周期内定时伸缩集群规模,适用于业务负载变化情况可预知的场景; 告警策略:基于监控指标(如CPU、内存利用率)动态扩展伸缩组中的实例数,适用于无法预估的业务波动场景。


Q: 弹性伸缩适用于什么类型的业务? A: 被伸缩的集群服务需要是无状态、可替换的。不能保存应用的状态信息(如会话)和相关数据(如数据库、日志等)。

在这里插入图片描述

Q: 客户要求在我们的专有云JDStack系统里有一个审批流系统,用于审批资源,且需要兼容IE11。产品发布后却发现这样一个问题:在IE浏览器里打开审批单列表,删除其中一条后,前端会重新请求列表,此时后端确定已删除此条数据,但是接口里却仍然返回了此条数据。请问是什么原因?如何解决? A: 此问题的出现是由于IE浏览器对ajax的get请求响应存在缓存机制。即当我们请求过一次列表,紧接着删除一条数据之后重新发送此获取列表的get请求,那么IE浏览器只会把第一次请求该接口的数据拿出来,所以我们看到的页面数据是没有变化的,留心看控制台的接口情况,可以发现状态码是“304”,即表示“只读/无变化 Not Modified”。 解决这个问题的方法除了把get改成post,也可以在请求接口上做一些处理,让浏览器认为前后两次请求是不一样的,即在url后加上时间后缀的方法:

url:'xxxxxxxxxxxxxxxxxxx+"&"+new Date()

Q: A是一个构造函数,var a = new A(),那么new操作符做了什么? A: 首先创建了一个对象。然后每个对象都有一个__proto__属性,指向它所对应的原型对象,并且继承了原型的方法和属性。其次,每一个函数被创建的时候,JS都会自动为函数添加prototype属性,这个属性指向一个包含constructor字段的对象,constructor对象指向函数自身。 如果把函数当做构造函数,即通过new关键字创造实例的时候,就会把实例的__proto__属性指向构造函数的prototype属性,然后把构造函数prototype上constructor属性传递给实例,并且构造函数内部对象的this替换成实例。 所以new一共做了四件事情:

  1. 创造一个对象;
  2. 实例.proto ===> 构造函数.prototype;
  3. 实例.constructor ===> 构造函数;
  4. 构造函数.call(实例)。

在这里插入图片描述

没有达到任职要求?快点击“JDStack专有云”扩充一下专业知识储备~

欢迎点击“京东云”了解更多精彩内容

在这里插入图片描述