在Q浏览器有很多广告上搜某明星的图片,有很多,但大多数图片加载完后不是太清楚,能看倒是能看,但不是高清,总是

当前访客身份:游客 [
当前位置:
楼主想必是对该面试官提问百度都能搜出答案的嗤之以鼻。
虽然我不太清楚该面试官的题目有多简单,但是我有必要为这个可怜的面试官辩解说两句。
我也算是面试过很多人了,答题也是自己编写的,也姑且自诩在这个行业里面混了10年吧。
那我就拿出我题库中一道百度也能搜到的题目说说吧:
javascript获取服务器时间
百度链接为:/s?wd=javascript%E8%8E%B7%E5%8F%96%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%97%B6%E9%97%B4&rsv_spt=1&issp=1&f=8&rsv_bp=0&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_sug3=5&rsv_sug1=5
其实这题的是因为这个问题衍生:「秒杀倒计时,所有用户显示的倒计时时间都一样,确保数据都是在同一秒拥入。」
获取服务器时间,百度一搜一大把,对吧,楼主,
但是提供的答案基本上都是:使用服务脚本将时间打印到页面上。比如PHP:var serverTime = new Date(&?php echo time() * 1000;?&);
这解决了问题,对,如果不考虑服务器解析执行脚本的时间、浏览器对页面解析到加载到本段Javascript的时间、网络传输的时间、是否有缓存头等、或者跨域。
(仔细想一下这些延时)
那你解决了问题吗?
其实这是一个认知层面的问题,当你觉得百度出的答案解决问题的时候,你停留在哪个阶段?
上面的话,对部分人来说,很尖锐。也许他们会拿出各种各种的理由来反驳你,什么公司没那么高的要求,只要解决问题就好了,我的任务很重没时间,等等。
=======================================================
但是,如果你能答出下面的答案,对你和面试官而言,都是一个很高的提升
百度第一页中chinaunix有了一个较为高级的答案:http://bbs.chinaunix.net/thread--1.html
使用Ajax(cache: false)去GET当前外联的js文件,然后读取其HTTP的Date头,根据此头计算时间。
//获取外联的js文件路径
var scripts = document.getElementsByTagName("script");
var thiscript = scripts[ scripts.length - 1 ];
var ajaxURL = thiscript.
var deltaTime = 0; //得到deltaTime 之后,随时可以用 客户端时间 + deltaTime,从而得到服务器时间
url:ajaxURL,
type:'GET',
cache:false, //禁止缓存
async:false, //同步
dataType:'text', //不解析内容
success:function(data,textStatus,XMLHttpRequest){
deltaTime = (new Date(XMLHttpRequest.getResponseHeader('Date'))).getTime() - (new Date()).getTime();
error:function(XMLHttpRequest, textStatus, errorThrown) {
deltaTime = (new Date(XMLHttpRequest.getResponseHeader('Date'))).getTime() - (new Date()).getTime();
timeout:5000
(以上代码经过T公司N次秒杀线上测试,80%的秒杀数据在00秒整点拥入(一秒上万并发),可放心使用)
这个答案其实并不是太高深,但是重点体现在细节部分,需要你融会运用Ajax、HTTP头的知识,无Cache、同步提交以便得到delta值
当然,这个答案也并不完美,也会有毫秒级别的误差(Date头无法输出毫秒),但是相比之下,服务器返回静态页面的速度更快、无动态脚本执行时间、以及无浏览器执行到Javascript的时间,等延时问题有很大的提高。
这里有HTTP协议的知识,有apache、nginX处理机制的理解,也有浏览器的渲染逻辑等。
大家可以看到,这些并不是技术难题,但是需要你深入了解B/S、HTTP的运作机制,
一个优秀的程序员不仅体现在他的编码能力,更体现在他对该功能实现的深度和高度。
同样是百度的问题,你答出了面试官想要的吗?
===========================完=============================
==========================================================
其实,还有一种方式:SSI,这个相比服务器脚本有一定的提升,但是没有ajax精度高
if ('&!--#set var="simpletimer" value="Server Side Includes"--&&!--#echo var="simpletimer"--&' == 'Server Side Includes') //SSI support
&!--# config timefmt="%A, %d-%b-%Y %H:%M:%S %Z" --&
var serverTime = new Date('&!--#echo var="DATE_LOCAL" --&');
===========================================================
如果大家对倒计时感兴趣,可以访问/hb/js/common/jquery/jquery.simpletimer.js
&div id="a" target="08/11/:00"&00:00:00&/div&Javascript日期格式:月/日/年 时:分:秒
$('#a').simpleCountdown('%D天%H小时%M分%S秒 总秒数为:%s');
去掉%D 会自动将天累加到时
去掉%H 会将时累加到分
不过这个代码年久失修,但是可以用,最新的代码暂未发布。
====================================================
====================================================
这个题目,经过面试N个人,回答的答案有4种:
1. 不知道 --------- 应该是仔细看了题目
占比 70%,中级以下
2. new Date() &-----------答题者心里还在骂面试官,怎么这么简单
初级,此类人绝对是菜鸟,我的题目中已经用上下文、粗体强调了调取服务器时间
3. 使用服务器端语言,&?php echo time();}& ------------- 可是我的题目明确说了只能使用js
中级,此类人算的上是有一定经验的人群,但是仍然处于「会用」这个层面,谈不上高手
4. Ajax取Header
高级,占比 1%,能答出这个答案的,应该是处理过相应问题,最不济也是在网路上研究过这些帖子,或者经过思考。
如果还能答出unix时间戳转换js时间需要乘以1000,这可以肯定,此人注意细节,可用!
----------------------------------------------
其实面试人群中也有很多工作年份比较长,但是很多深入的题目都答不出来的情况,因为每个人的职业生涯也不尽相同,多年工作的菜鸟的人也大把存在。
面试时,大部分人群都是普通水平,而这群人中很大部分有一些共性:浮躁,眼高手低。
其中不乏有些狂妄之辈,掌握这个语言,用CRUD写了几个项目,便以为了解了全部
深入理解,融会贯通。中级成为高级的秘诀,便在于此!
=======================================================
比如PHP面试题:
目前网络上有违禁词10多万条,请处理一篇文章,将这些词语替换成为*,要求最快的运行速度
共有25个评论
<span class="a_vote_num" id="a_vote_num_
& 如何根据这个服务器时间做一个时钟呢? 通过JS的计时器功能会有误差吗?
<span class="a_vote_num" id="a_vote_num_
引用来自“xsySunny”的评论
& 如何根据这个服务器时间做一个时钟呢? 通过JS的计时器功能会有误差吗?
已经更新原文,可以看下倒计时部分。 即使当前页面因为其它js过程导致卡死数秒,只要再次触发Timer的时候,实时获取本地Date + delta 即可,这不会有误差。
这也是一个小细节,如果只$i = 300;setInterval(function() {$i--;},1000);&
这样的写法,肯定是误差很大,因为你无法保证中间没有其他的js在操作,这是Timer的实现机制问题,所以你需要去了解这个细节。
因此,需要实时去取当前时间来操作。具体看源代码。
<span class="a_vote_num" id="a_vote_num_
您老想多了。
他们的过程大概是这样的:
面:用过jQuery吗?
被:用过,每个项目都用。
面:说说常用的xxx api。
被:api都是平时百度查一下,一秒钟就够了,我不记得。
==========================
这类型的题目答出来不能说明问题,答不出来就能说明问题了。
其实也可以这么考,刷菜鸟用的。意义就在于此。
--- 共有 1 条评论 ---
api都是snipplet自动完成的好么?
(6个月前)&nbsp&
<span class="a_vote_num" id="a_vote_num_
引用来自“江南若水”的评论
您老想多了。
他们的过程大概是这样的:
面:用过jQuery吗?
被:用过,每个项目都用。
面:说说常用的xxx api。
被:api都是平时百度查一下,一秒钟就够了,我不记得。
==========================
这类型的题目答出来不能说明问题,答不出来就能说明问题了。
其实也可以这么考,刷菜鸟用的。意义就在于此。
前几天我这边面试人就这样的
我在旁边听了后来忍不住问
考这个会不会简单了点……
回答也是刷菜鸟用。
--- 共有 2 条评论 ---
: document.getElementById(),这个是我用的最多的,其他的的确用的不多
(6个月前)&nbsp&
考这个是简单了点,如果这个还要百度,就有问题了。。。
(6个月前)&nbsp&
<span class="a_vote_num" id="a_vote_num_
& 那要是服务器比较繁忙(一秒上万并发),ajax请求到返回中间也有时间差的吧?
<span class="a_vote_num" id="a_vote_num_
引用来自“LAJS”的评论& 那要是服务器比较繁忙(一秒上万并发),ajax请求到返回中间也有时间差的吧?
并发上万,我猜测这种牛X的环境下,肯定会启用:负载均衡,或静态文件CDC。毕竟T公司只有在推送Tips的时候,才会有如此高的单篇稿件并发量
既然是多服务器,肯定有ntp时间同步确保网内服务器均在统一时间
1. 负载均衡、CDC:系统会自动分配到空闲服务器处理,这时间差可以忽略
2. 任何方式,都有时间差,只是时间差多少的问题,如果网络已经慢成那么逑样了,那基本很难一起玩耍了。
在网络良好的情况下,ajax方式也有时间差,因为HTTP不能输出毫秒,但是你可以改进算法,比如250/500/750毫秒之后再次请求,计算这些的差集,以确保时间精度在250毫秒内
3. 秒杀是先打开的页面,然后静静的等待倒计时,这个不存在如此高并发去读取时间的情况。
<span class="a_vote_num" id="a_vote_num_
好流弊 &尽然是个女的 &更流弊啊
<span class="a_vote_num" id="a_vote_num_
获取静态文件 DATE 头的确不错,节省掉解析 PHP的时间
但是直接写在php脚本里面更好些吧,毕竟 PHP 解析执行时间基本差不多,基本固定在几十毫秒,
脚本里面补上就行了,
不好确定的是,每个用户的网络延迟不同。
而解析php的时间差基本都是一致的
所以:&?php echo time() + 延迟时间;}&,更方便,而且不比那个ajax的差
<span class="a_vote_num" id="a_vote_num_
引用来自“o__o”的评论
获取静态文件 DATE 头的确不错,节省掉解析 PHP的时间
但是直接写在php脚本里面更好些吧,毕竟 PHP 解析执行时间基本差不多,基本固定在几十毫秒,
脚本里面补上就行了,
不好确定的是,每个用户的网络延迟不同。
而解析php的时间差基本都是一致的
所以:&?php echo time() + 延迟时间;}&,更方便,而且不比那个ajax的差
那你计算了从php输出时间,然后发送给浏览器,然后到浏览器渲染页面&然后到解析到该行Javascript的时间吗?
如果是ie,它会把很多css/图片下载了之后才开始解析js,chrome可能会好一点
你此条js的位置,如果放置在body中,那要计算上head中获取css、js等文件的时间,以及页面的渲染时间等。
如果客户电脑卡呢?
而ajax就解决了这个问题,只有当解析到该js时,才去调取服务器时间。
所以,我只看到了这个方法的方便,而不是这个方法的「不比ajax差」
--- 共有 3 条评论 ---
: 哦,确实这种方案确实差些,导致时间不精确主要是网络请求各个客户端不一样,
PHP解析啊html解析这种,每个客户端时间也差不了多少
(6个月前)&nbsp&
: DOM解析的时间呢?ie 6 7 8的同步加载呢?难道将你这行js写到head的第一位?将这些不可控的误差交给HTML开发人员,和用户浏览器才真的叫糟糕。其实退一万步说,这误差大部分人都可以容忍!
(6个月前)&nbsp&
DOM加载完就解析js,图片和css异步加载的。
(6个月前)&nbsp&
<span class="a_vote_num" id="a_vote_num_
var serverTime = new Date(&?php echo time() * 1000;?&);
如果不考虑服务器解析执行脚本的时间、浏览器对页面解析到加载到本段Javascript的时间、网络传输的时间、是否有缓存头等、或者跨域。
楼主请解释下,这句最多就是服务器解析执行脚本的时间吧,为什么浏览器对页面解析到加载到本段Javascript的时间、网络传输的时间、是否有缓存头等还会影响,在我看来&?php echo time() * 1000;?&
这句话在服务器解析完毕后,不会受你说是那些因数影响吧,通过http 的date 头信息来计算也会存在客户端修改时间的情况吧,楼主求解释下,3q
--- 共有 4 条评论 ---
: 没必要css加载前执行ajax,异步的话,不用管css加载的问题
jquery的话,直接用:
$(function(){
//请求服务器时间
就行了,当然可以补一点时间差
(6个月前)&nbsp&
: 请问如何保证在加载css,dom前执行ajax?3q
(6个月前)&nbsp&
: 具体也不一定非要请求静态文件,如果做个获取服务器时间的接口,然后补上脚本执行时间。这个也是慢精确地
(6个月前)&nbsp&
ajax 异步,主要作用是:如果直接写在 PHP脚本里面的话,浏览器拿到页面,还要做别的事情,比如加载CSS,加载DOM等
干完这些,都过了一些时间了,拿到的时间就慢了一些。如果异步的话,就没了加载CSS和解析DOM这些了。所以精确些了
(6个月前)&nbsp&
更多开发者职位上
有什么技术问题吗?
会员的其它问题
类似的话题* 自动以的webviewclient
* @author jwguo
private class MyWebViewClient extends WebViewClient {
& & & & @Override
public void onPageFinished(WebView view, String url) {
// TODO Auto-generated method stub
& & & & view.loadUrl(&script:var imgs = document.getElementsByTagName(&#8216;img&#8217;);for(var i = 0; i&imgs. i&#43;&#43;){imgs[i].style.width = &#%';imgs[i].style.height = &#8216;auto';}&);
& & & & public boolean shouldOverrideUrlLoading(WebView view, String url) {
& & & & & & // TODO Auto-generated method stub
& & & & & & view.loadUrl(url);
& & & & & &
webview.setWebViewClient(new MyWebViewClient());
这样就可以了,注入的js代码有点web基础的人都看的懂,就是获取html中所有的img标签,然后添加个style宽100%,高度自适应而已。
&#8211;&(void)webViewDidFinishLoad:(UIWebView&*)webView
&&&&[HUD&show:NO];
&&&&[HUD&removeFromSuperview];
&&&&[webView&stringByEvaluatingFromString:
&&&&&@&javascript:var&imgs&=&document.getElementsByTagName(&#8216;img&#8217;);&
&&&&&&for(var&i&=&0;&i&imgs.&i&#43;&#43;){&
&&&&&&imgs[i].style.width&=&&#%';&
&&&&&&imgs[i].style.height&=&&#8216;auto';}&];
上面就是正确的做法,当然了js代码不止这一种,你可以随意发挥,下面我们来看看其他的做法。
webview.getSettings().setLayoutAlgorithm(LayoutAlgorithm.SINGLE_COLUMN);
比如这个,这个是网上最常见的,但是,这个并不好,因为这会缩放整个以便一屏幕宽度显示,这样字体一样会变小,那样虽然全屏显示了,但是文字看不到了,所以没有办法只缩小图片,而不处理文字,但是上面的方式是没有问题的。
这个方法也是不好的。
对于IOS有这么一种处理方法,/questions/7085800/adjusting-font-size-and-image-in-uiwebview-ios
为了方便还在GFW内的同学,老外给的答案是:
(void)webViewDidFinishLoad:(UIWebView *)wView {
[wView stringByEvaluatingJavaScriptFromString:@&document.getElementsByTagName('body')[0].style.webkitTextSizeAdjust= '50%'&];
[wView stringByEvaluatingJavaScriptFromString:@&document.getElementsByTagName('body')[0].style.zoom= '0.5'&];
IOS代码看不懂也没有关系,我们可以大概理解下,就是拿到html的body标签,然后修改它的style属性,设置文字为原始的50%(你可以可以设置为100%),把缩放比例设置为0.5,那么显而易见的,我们既缩放了页面的其他,又没有改变文字的大小,这总可以了吧,但是会有下面两个问题:
1.zoom设置缩放为0.5这个比例是没有根据的,原始尺寸的0.5并不是适应我们屏幕的结果,可能在一些恰好的机器上是没有问题的,在或大或小的机器上,总还会显示不正确的。
2.这个方法在android上是无法复制的,我不知道到底是android的webview内核(4.4之后修改了内核)或者webkit的问题,他正确解析了zoom属性,但是无法正确解析webkitTextSizeAdjust属性,那么结果是显而易见的,和方法一没什么区别。
其实方法二使用的就是我的解决方法,只不过使用js不太对而已。为什么手机去百度看图片很模糊,在电脑上看却很清?_百度知道
为什么手机去百度看图片很模糊,在电脑上看却很清?
如果你说的同一张的图,可能是图片太大,手机网速慢没有把图片完全下载下来,你看的是缩略图,所以不清晰。而电脑上看的是完整图片。如果不是同一张图那就不好比较了,也许是图片本身的区别,也许是手机屏幕分辨率不高啊。你可以在手机连wifi的时候试试,看是不是清晰。
其他类似问题
为您推荐:
提问者采纳
手机端为了省流量被百度压缩
手机端都会被压缩的
提问者评价
太给力了,你的回答完美解决了我的问题!
其他7条回答
会不会是还没有完全加载完毕,尚未加载完全的图片是模糊的。
手机的屏幕分辨率差
不可能,在电脑上传到手机一样这么清,然后如果在手机传到电脑也很模糊
可能百度的问题吧
为什么会这样
无语&#128531;
百度公司这样,没办法
同时按下电源键和音量减键
亲,好评哦
同时按下会怎样?
我发错了对不起
我对你太~无语了
亲,好评哦
没有最佳答案
浏览器转码被压缩了。
不管手机事
我的就很清楚
屏幕分辨率要在
小米2S,和魅族mx3
我的也是啊
我的挺清楚
手机分辨率太差
手机的问题吧
手机分辨率低呢!
看图片的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 沉默的大多数 mobi 的文章

 

随机推荐