2011年9月23日,百度前端面试题对话记录(2)

   声明:时间有些久远,对话记录不是完整的,有些其实省略了很大部分的废话。


    面试官: 知道AJAX么?

    我:知道,(这里让我咬文嚼字的说概念是说出不来的)大概意思就是异步请求或提交数据而页面不进行跳转。

    面试官: 用AJAX,如何知道响应成功了?

    我:监听状态改变事件,判断返回值的状态码,一般是判断200和304状态妈。

    面试官:200和304分别代表什么意思?

    我:200表示成功响应,304表示内容未变更,读缓存。

    面试官:那么404,5XX之类的呢?

    我:404表示未找到,5XX表示服务器内部错误

    面试官:刚才说到了状态改变事件,那么AJAX状态有几种,你常用到那个状态?

    我:4种,一般都用状态4,completed。

    面试官:状态3表示什么意思?有用到过么?

    我:我记得是interactive,没有用过。

    面试官:嗯,是interactive,这样吧,假设让你做个时钟倒计时程序,现在很多网站都有那种秒杀的商品,下面都会有时钟倒计时的那种,你应该怎么设计?

    我:应该要配合服务端,客户端获取的时间是很容易被更改的,大概是从服务端生成一个标准时间,客户端获得这个时间响应,接着根据这个时间定时减少。但是因为存在网             络延迟这些因素,可能会导致时间会稍微有些误差,可以定时重新请求时间。

    面试官:有没有稍微更优化点的方法?你才也说了,会存在一些误差,能不能尽量减少这个误差,你的方法是从服务端脚本生成一个时间,有没有办法不通过脚本计算,而获                    得这个时间? 当然,服务端还是可以用的。

    我:(稍微想了想)HTTP头里应该有时间戳,可以读HTTP头吧。

    面试官:嗯,确实是这样,很多倒计时程序都会用服务端脚本生成时间戳,其实HTTP头部已经包含了,没必要继续用脚本了,直接返回就行。这也是刚才AJAX中的                                     interactive状态可以用到的地方。

    我:原来interactive状态就可以获得http头部内容了~!

    面试官:嗯,好了,继续下一个问题,对html标签语义有什么理解?

    我:每个html标签基本都有对应语义,比如p表示一个段落,a表示一个链接,li表示一个列表这样。

    面试官:嗯,那说说对em标签的理解。

    我:em表示的语义是强调,在浏览器中的表现是斜体。

    面试官:嗯,很好。 很多人在用em标签的时候,都用它来对文字做斜体处理,其实em是有语义的。

    

    面试小结

   第一次见识到了AJAX中intercative状态的用处,于是下面写了些简单的代码测试(没有做AJAX对象兼容):

<script type="text/javascript">
 var xhr = new XMLHttpRequest();
 xhr.open('get', 'testServer.txt', true); //这里的testServer.txt,其实我没有创建,完全可以不需要这个文件,我们只是要时间罢了
 xhr.onreadystatechange = function(){
     if(xhr.readyState == 3){ //状态3响应
	  var header = xhr.getAllResponseHeaders(); //获得所有的头信息
	  alert(header);//会弹出一堆信息
	  alert(xhr.getResponseHeader('Date')); //弹出时间,那么可以利用获得的时间做倒计时程序了。
     }
 }
 xhr.send(null);
</script>




  • 38
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 29
    评论
百度外包前端面试题红绿灯是一个经典的异步编程问题。题目要求红灯每隔3秒亮一次,绿灯每隔1秒亮一次,黄灯每隔2秒亮一次,并且三个灯需要交替重复亮灯。 题目给出的代码只完成了一次流程,即红灯亮一次,黄灯亮一次,绿灯亮一次。但题目要求的是交替重复亮灯,所以需要对代码进行修改。 可以使用回调函数的方式来实现交替重复亮灯。首先定义一个任务函数`task`,该函数接收三个参数:计时器时间、灯的颜色和回调函数。在`task`函数内部使用`setTimeout`函数来设置定时器,在定时器的回调函数中判断当前灯的颜色并执行相应的操作,然后调用回调函数。在回调函数中再次调用`task`函数来实现循环调用。 具体实现如下: ```javascript const task = (timer, light, callback) => { setTimeout(() => { if (light === 'red') { red() } else if (light === 'green') { green() } else if (light === 'yellow') { yellow() } callback() }, timer) } task(3000, 'red', () => { task(1000, 'green', () => { task(2000, 'yellow', () => { task(3000, 'red', Function.prototype) }) }) }) ``` 上述代码实现了红绿灯的交替重复亮灯,首先通过调用`task`函数来启动红灯,然后在红灯的回调函数中调用`task`函数启动绿灯,再在绿灯的回调函数中调用`task`函数启动黄灯,最后在黄灯的回调函数中再次调用`task`函数启动红灯,从而实现了红绿灯的交替重复亮灯。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [美团前端一面必会手写面试题汇总](https://blog.csdn.net/helloworld1024fd/article/details/127582853)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 29
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值