超越起点 追随自由

我看不见,我的明天,但今天,绝不重复昨天;顺风是滑翔,逆风才是飞翔,火烧过才能化凤凰!

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  294 随笔 :: 16 文章 :: 1118 评论 :: 24 Trackbacks

今天发现博客上不少流量来自于蓝色理想,跟过去一看,晕倒,原来greengnn这小子把我前年的Web标准面试考题翻出来透气扑灰。

一年半的时间过去了,回头看看还真感慨。这是我出的唯一一道题,只用了一次,亏啊……想到一直以来我并没有给出解释,现在心血来潮,顺带就说说看。因为这道题是完全开放的考题,并没有限制结构(XHTML)也没有限制表现(CSS),所以是没有标准答案的,不过既然是我出的题,自然会有很多考点,或叫考虑吧,用我心目中的“标准答案”来审视面试者的Web标准水平。说起来这道题还有个故事呐……

当时我上跳下窜,举着实例,基本上从扫地的一直说到CEO(很搞笑,由于我频繁的说,说到后来CTO笑着对我说以后咱们不叫你爆牙齿了,你改名叫“Web标准”算了),折腾一个月后总算成功完成对卡当的忽悠,正式决定开始全面部署应用标准。但整个公司就我一个人知道标准(还有个小子知道,但他正沉浸在成功脱离前端设计转入产品设计的快乐中,没啥用处……),新人的培训速度跟不上产品的发布进度,于是急需招个高手来帮我分担工作。在当时要找个高手真是不太容易,更重要的是需要一招制敌,因为万一没找对人,会严重影响高速的整体进度。

相比漫山遍野的程序员,前端人员甚至愿意做前端的少之又少(好坏太直观很容易被挑三捻四工作也复杂待遇还低技术中也最缺乏地位不被重视……),虽然我很清楚,但还是没啥挑选余地。不过幸运的是手中寒酸的,一只手就可以数清的简历中,有一份简历说自己有一年半的标准应用经验,一算时间,2005年初就开始用标准了,哟,只比我晚半年,是不是真的哦!叫来看看!

从2004年8月接触标准后到当时2006年7月,我走过的公司,我的身边,只有一个鬼知道“Web标准”这几个字还会用用,就是那个转进产品设计happy去了的鬼。所以一听说这个家伙有一年半的标准应用经验,我超级饥渴,能有个知音不容易啊。然后06年7月11日上午我就开始设计考题,满怀希望的迎接中午他来面试。

人来了,没啥说的,做题吧。说到做题我小跑一下题,我这个人最恨面试做考题,之前我去面试的公司老让我做题,我是对做题深恶痛绝,妈的当时我已经工作了6年了,还拿着厚厚一叠大学般的试题来考我,那些理论概念模型之类的我知道个屁啊,老子只知道无论遇到什么难题,不畏艰难险阻从各个角度、想各种办法去解决,脑袋是用来转的不是用来记的(“不畏艰难险阻”说起来容易,做起来真不是那么容易的,恰恰都不会说的“放弃”,做起来很容易)。后来几次面试,凡是遇到拿着厚厚一叠题的公司,我只说一句话:“对不起,我是不做题的。”然后当场转身离去。我的题,当然不一样,哈哈哈哈。

我没管他,我想一个用了标准一年半的人,做起来应该很容易,不管他怎么做的,我只需要问他为什么这么做,可是,555,他完全不给我机会……半个小时后我晃了一眼,没写出几行代码,一个小时之后,还是没写出几行代码,甚至甚至连手写代码都相当不熟练(之前还叫我安装dreamweaver……),更不要说页面了。我火热火热的心啊,拔凉拔凉的……受不了了,不让他继续了,在我对他展现了我那颗拔凉拔凉的心之后,临别前还是提醒了他四个字:独立于根。完全不报任何希望,一个连键盘都敲不熟的人知道了也没用,因为还有标记的选择还有各种CSS技巧,怎么可能嘛。

没想到这小子是个两面派,当面一套背后一套,当天晚上给我发来一份答案,我一看,晕倒,基本上接近我心中的“标准答案”。“独立于根”虽然我提醒了他,但他还原了设计稿,说明css水平通过。另外就是选择了p和br而没选择div或li或全p,还有a的位置。只是缺乏两点:1、没有选择hx。2、没有把“附:考题说明”分离出来。我糊涂了,当面一个新手背面一个高手,我信啥呢?

先链一下那张图片吧

我从Gmail中翻出这位兄弟当年给我的答案,截出结构部分,如下:

<body>
<!--Begin #Header-->
<div id="header">
    
<img alt="页面logo" border="0" lowsrc="logo_s.gif" src="logo.gif" id="logo" />
    
<span id="date">2006 7 11</span>
    
<p><span class="t">页头</span><br />
    页面居中时宽度为700px
<br />
    页面自适应时宽度自适应
<br />
    高度固定为100px
<br />
    色彩代码为:#0099CC
    
</p>
</div>
<!--End #Header-->

<!--Begin #Content-->
<div id="c1">
    
<p><span class="t">栏目一</span><br />
    宽度固定120px
<br />
    高度固定为300px
<br />
    色彩代码为:#FF9900
    
</p>
    
<class="more" href="#" >更多&gt;&gt;</a>
</div>
<div id="c2">【同上】</div>
<div id="c3">【同上】</div>
<div id="c4">【同上】</div>
<div id="c5">【同上】</div>
<!--End #Content-->

<!--Begin #Footer-->
<div id="footer">
    
<p><span class="t">页脚</span><br />
    页面居中时宽度为700px
<br />
    页面自适应时宽度自适应
<br />
    高度固定为100px
<br />
    色彩代码为:#009966
    
</p>
    
<class="r"><span class="t">附:考题说明</span><br />
    请写出xhtml和css展现
<br />
    出图片中所有内容
<br />
    
<span class="tWhite">没有标准答案</span><br />
    JS部分未来加上
    
</p>
</div>
<!--End #Footer-->

</body>

当时我心中的答案如下:

<body>
<h1>爆牙齿的Web标准面试考题 <span>2007 1 11</span></h1>
<div id="header">
    
<h2>页头</h2>
        
<p>
    页面居中时宽度为700px
<br />
    页面自适应时宽度自适应
<br />
    高度固定为100px
<br />
    色彩代码为:#0099CC
    
</p>
</div>
<div id="c1">
    
<h2>栏目一</h2>
        
<p>
    宽度固定120px
<br />
    高度固定为300px
<br />
    色彩代码为:#FF9900
    
</p>
    
<class="more" href="#" >更多&gt;&gt;</a>
</div>
<div id="c2" class="x">【同上】</div>
<div id="c3">【同上】</div>
<div id="c4" class="x">【同上】</div>
<div id="c5">【同上】</div>
<div id="footer">
    
<h2>页脚</h2>
        
<p>
    页面居中时宽度为700px
<br />
    页面自适应时宽度自适应
<br />
    高度固定为100px
<br />
    色彩代码为:#009966
    
</p>
</div>
<div id="a">
    
<h2>附:考题说明</h2>
        
<p>
    请写出xhtml和css展现
<br />
    出图片中所有内容
<br />
    
<em >没有标准答案</em><br />
    JS部分未来加上
    
</p>
</div>
</body>

可能大家都关心css在哪里,我并不在意css,对我来说,这道题主要还是用来了解面试者对结构的认知。

面试者可以“套”div,怎么“套”都可以,关键是你如何解释这些用来“套”的div,比如在c1/c2/c3/c4/c5外面“套”一个div,你的解释如果是为了居中,那么我会认为你的思路是以表现定结构,而如果你的解释是这部分作为内容主体的一个节点,那么好我会认为你的思路是分离了的。在比如,如果在c2/c3/c4外面“套”一个div,同样会有两种解释,1、为了浮动为了布局。2、为了文档结构。而我很显然会偏向以文档结构优先来定xhtml的面试者,我会认为作出这种解释的人是真正在思想上分离了表现和结构,不是泛泛而谈。当然还有其他的看点,内容部分标记的选择,hx、a、p、em和br的选择等方面,这部分就不说了。总而言之,我认为,每个标签的选择都应该有它在文档中的结构意义,也就是说你在选择标记的时候应该赋予它结构层面上的含义。

至于我所选择的“独立于根”结构,我个人认为是对于这道题来说,最精简的答案,把布局完全交付给CSS来完成。至于CSS水平,如果能在这种结构下完成题目所要求的界面设计,我认为根本没问题。所以我打开这位兄弟的结构,再用浏览器预览,CSS压根就一眼没看。介于他的两面派作风,我犹豫半天还是招了他,还好没错,是个悟性很高,擅于解决问题的高手,从设计到开发技术比我还全面,只不过有点三心二意、两天打渔三天晒网。这位兄弟后来在我离开卡当后是卡当的前端顶梁柱,现在也以一人之力撑起了海词前端所有的JS交互开发。

我不建议使用这种“独立于根”的结构,虽然我至今还在采用。因为“独立于根”的弊端还是蛮多的,我被害了一年半,已经快抗不住了。之所以还在硬着头皮使用,因为这种方式还是有不少优点,而且在全局上有些我认为很关键的优势,还有一个原因是我同时负责产品和设计,我可以通过其他角度尽量回避其劣势,发挥其优势。我觉得这种方式在结构上比较完美,唯一的不完美并不是因为xhtml,而是因为css,是css2的不完美导致这种结构在css实现上障碍重重。我又情不自禁的憧憬着xhtml2和css3的配合,不知道自己能否等到那天,能否撑到那天。

现阶段,要完全面向结构,完全脱离表现还是太难了,但是我觉得我们至少应该去靠近,从思想上去靠近,去分析页面,把结构和表现尽可能的分离。然后,然后才可以挖掘出更多的东东来……

最后严正提醒,别被我忽悠了,别跟着我学,我是有天时地利人和的条件,有所处位置、兄弟的配合、自身功力这些条件才敢去玩“独立于根”这种至今还没明确好坏的方式。在有市场对产品的限制、产品对设计的限制、设计对前端开发的限制情况下,还是多“套”几个div,省心省力省时间,也不会如我一样天天奔沙县小吃吃猪脑补充高速阵亡的脑细胞。

posted on 2008-01-08 01:13 爆牙齿 阅读(2782) 评论(13)  编辑 收藏 所属分类: 4、奋斗《重构之美》

评论

#1楼  2008-01-08 06:31 怪怪      
呵呵, LZ有意思, 不过那哥们能力确实不错, 短短几个小时就从不会到会; 不只能力不错, 而且也有心; 很多人认为自己不会没什么, 下一个面试就不考这些了, 想学还是不想学, 决定了学习的速度.

另外LZ的概念也非常好. 问题是, 不用元素去实现定位, 我靠, 我靠我靠, 5555. 反正想实现韩国一个页面上花边比内容还多的页面, 确实痛苦的要死. 说实话, 你说的这些我基本全能理解, 不过我还是忍不住天天瞎胡写, 背叛革命...

代码大全上有一句话, "分离软件与信仰", 对我来说应该换成"分离活命与信仰", 比如一些承包来的项目一开始就是失败的, 我何必为它浪费过多时间呢? 如果真讲原则, 我看做都不应该做, 泼一盆冷水然后轰委托方走就是了. 不过我不做也有别人做不是?

另外一些问题可能是投入的问题吧, 如果别人只给你三毛钱, 其中两毛9分是为了非界面的部分给的, 那界面也只能按1分钱给他做了. 他认可并需要多大价值, 我们就给他多大价值呗, 除非将来实现Web标准根本不费劲了.

说这些倒不是劝LZ, 只是顺便发发自己的牢骚, 想做好, 但又做不到, 还是很郁闷地. 幸亏我根本上将只是一个程序开发者, 文档结构上我不用象LZ般进入角色, 坚决捍卫某一信仰. 而程序如何写, 比起标准化, 相对灵活太多了...
  回复  引用  查看    

#2楼  2008-01-08 09:17 看客 [未注册用户]
满口 md lz....

lz也不是什么好鸟,要不就是永远长不大的孩子.....

  回复  引用    

#3楼  2008-01-08 09:19 冰雪无情      
对于Web标准来说如果各家浏览器能够统一解析的话那对前端开发人员来说就能省却太多的时间了,随着CSS3的应用前端开发人员将会面临更大的挑战啊
  回复  引用  查看    

#4楼  2008-01-08 09:23 Jeff Yang      
呵呵,我一看就是上中下三个Table呀,唉,现在流行DIV+CSS。
  回复  引用  查看    

#5楼  2008-01-08 09:49 新手23 [未注册用户]
请问LZ,你这样外面不套DIV 整体如何居中呢?谢谢!
  回复  引用    

#6楼  2008-01-08 10:59 破曉之陽      
那張圖片有幾處小錯誤
栏目五是:色彩代碼是#FFFF00

页脚 色彩代碼是#009966
我是看著您的圖,做了一遍,結果我一運行,發現不一樣的。
嘿嘿。

  回复  引用  查看    

#7楼  2008-01-08 13:07 Cat Chen      
你的解释如果是为了居中,那么我会认为你的思路是以表现定结构,而如果你的解释是这部分作为内容主体的一个节点,那么好我会认为你的思路是分离了的。
--
Excellent!
  回复  引用  查看    

靠,“爆牙齿”不要把我按丑陋的结构晒出来,没写几行代码是你的浏览器有问题拉。其实你这个独立于根的思想在B/S软件应用中还是比较有用处的,我上周刚写了一个,呵呵,可惜这里不能上传附件啊,不然扔上来兄弟们分享一下。

  回复  引用    

#9楼  2008-01-08 14:15 暗香浮动      
哉崽vs爆牙齿
兄弟见面分外眼红。哈哈
  回复  引用  查看    

#10楼  2008-01-08 15:26 李华顺      
@新手23


HTML:
<body>
<div id="layer1"></div>
<div id="layer2"></div>
<div id="layer3"></div>
</body>

CSS:
body{text-align:center;}
#layer1{margin:0 auto; background:blue; width:500px;}
#layer2{margin:0 auto; background:red;width:500px;}
#layer3{margin:0 auto; background:green;width:500px;}


  回复  引用  查看    

#11楼  2008-01-08 18:54 Enzo      
@我是当年的那位兄弟(哉崽)
o(∩_∩)o... 这位朋友好样的!

  回复  引用  查看    

#12楼  2008-01-09 10:35 Icebird      
DIV+CSS可以很容易的通过修改CSS进行布局再调整,
如果是TABLE,那就是不可能的任务了
  回复  引用  查看    

#13楼  2008-03-03 14:48 chez [未注册用户]
我想请问一下,
1:
页面居中时宽度为700px
页面自适应时宽度自适应
高度固定为100px

这种状态时,如何做到自适应并且min-width: 700px; ?

2:
虽然说是面试题目,但是header,content,footer都定高并不是好现象.
最外层height: auto; 由内部内容将其增高.应该才是好的解决办法.

3:
不是很懂这份东西正确合理的答案是什么. 自己试了一下.


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8"/>
<title>Page Title</title>
<style type="text/css" media="screen">
body {
margin: 0;
padding: 0;
font: normal normal 62.5% Arial, sans-serif;
}
#header,#maincontent,#footer {
width: auto;
margin: 0 auto;
min-width: 700px; /* 换成max-width可以看到另一种效果 */
height: auto;
}
#header {
background-color: #09c;
}
.content {
min-width: 460px;
height: 100px;
margin: 0 120px;
}
.sidebar {
width: 120px;
height: 300px;
margin-top: -300px;
margin-bottom: 0;
}
.one,.three {
background-color: #900;
}
.two {
background-color: #039;
}
.four {
background-color: #f90;
float: left;
}
.five {
background-color: #ff0;
float: right;
}
#footer {
background-color: #096;
clear: both;
}
.indie {
height: 100px;
width: 700px;
}
p {
margin: 0;
}
</style>
</head>

<body>
<div id="header">
<p class="indie ins"></p>
</div>
<div id="maincontent">
<p class="content one"></p>
<p class="content two"></p>
<p class="content three"></p>
<p class="sidebar four"></p>
<p class="sidebar five"></p>
</div>
<div id="footer">
<p class="indie cos"></p>
</div>
</body>
</html>
  回复  引用