做营销,别把自己不当回事

作者:admin · 日期:2010-03-02 08:28:26 发表评论 »

做营销不仅是做生意,更重要的是做人。有的人说:“顾客是上帝”,我个人觉得这种说法是不合情理的,大家想想,顾客花钱买你的产品或是服务,你给他提供相应价值的产品与服务,这就完成了一个交易过程。为何非要画蛇添足,加上一句“顾客是上帝”呢,上帝是何等的神圣,大家愿意为上帝出生入死,为上帝效劳而感到光荣,那是不需要任何回报的,你看看,哪个客户要是少给了你几笔钱,看看他还是不是你的上帝,我想你到时斜眼瞧他的目光都比杀人的刀锋利。有人就说了,我对上帝的忠诚其实也有目的的,希望上帝保佑我家人平安,工作顺利,呵呵,这样的上帝他能叫上帝吗?简直就成了你的“保镖”。所以说,我认为销售者没有必要把客户虚伪的称呼为“上帝”。 合作讲究的是一个“合”字,单方面是不能完成的。再看看他的谐音“he”第二声,同“和”音完全一样,所以古人很了不起,把生意场上的两个重要关键字加在了一起,告诉我们“生意是双方的事情,不能不合,真是因为有合,必然会产生分歧,那就不能不和。”不是有这样一句俗话吗,“和气生财”我想就应该是这个道理吧。 既然做生意讲究“合”与“和”,那么我们就要从这两个方面下功夫。 首先你要做到“合”不简单,知己知彼才能加强相互之间的了解,怎么才能做到知己知彼,多听少说绝对没有错。这时我想又有人反驳我了,你看看哪个销售人员不是满嘴流油,说得天翻地覆,说得唾沫横飞,呵呵,那简直可以用一个词来形容“驳贾捅金”。何谓“驳贾捅金”呢,我认为啊,你说的太多,客户没有说话的余地了,自己还认为口才了得,到最后客户所关心的东西不是你推销的东西,问题没有得到解决,拜访过程已经结束了,客户完全了解了你个人、产品以及公司理念,但是你对他的关心点“完全”漠视,最终的结果是“先生,您说的很好,但不是我想要的,谢谢您,下次有机会合作,送客!”为什么会这样,你的话太多了,自己把自己给驳倒了。“贾”就是商人的意思,“驳贾”就是不给商人表达自己需求的意思。“捅”就是自己给自己捅了篓子,必然生意做不成,失了金。这就是销售人员不注意叫停,自己在那里“驳贾捅金”。 其次就是要做到“和”,其实做到和不难,只要你坦诚相待,把心态调整到做不成生意做个朋友也好啊,世界上哪有那么多生意可做,个个都是生意伙伴,那还得了,你做得过来吗?呵呵,所以只要你对你的客户做到了坦诚相待,着实的站在他的角度考虑问题,还怕交不到朋友,害怕做不成生意。没有必要空喊口号“顾客是上帝”一旦出了小小的一点问题,这个“上帝”就“降罪”与你,不当朋友没有做成,生意也是灰飞烟灭。

    我有这样一个朋友,他也是刚刚大学毕业,一直在做服装销售,口才非常了得。可是不到一年的时间里,他换了三家公司,原因很简单,第一家公司是因为他太能说了,忽悠了客户,自己给客户的承诺不能兑现,客户几次投诉,最终老板实在是不忍心把它炒了。进来第二家公司之后,他吸取了前一家公司的教训,说话少了,听的境界高了,业绩也非常不错,可是他成了一个月光族,实在是赚的钱不够养活自己,我就很奇怪了,这会这样呢,原来啊,他为了拿单,自己经常耍小聪明,请客户吃饭,喝酒,蹦迪,交了一群“酒肉朋友”确切的说是“酒肉客户”最后是入不敷出,让自己“倒闭”了。现在他在东莞一家服装公司做销售,很久没有联系了,听另外一个朋友说做得很不错,此时甚感欣慰。

    做销售难吗?但是做销售不容易呀,方方面面都要考虑周全,公司和客户之间,销售人员要在其中找到一个平衡点,这个平衡点就在物理学中叫做“支点”,如果你这个“支点”偏向任何一方,你自己所承受的“压力”都会比中心点大。

    别把自己不当回事!认真做事,坦诚做人。做好我们自己这个“支点”的角色,比什么都强。

网站建设之提高网站性能的规则

作者:admin · 日期:2010-01-31 11:43:53 发表评论 »

网站的性能关乎用户访问体验,让网站支撑更多用户,让每个用户的等待时间更短是我们的目标。性能的提高靠的是数据库优化,高效率的 HTML 代码渲染以及内容缓存。  以下是提高网站性能的一些规则:  对数据库进行优化设计  合理使用 Index,使用高效 SQL 语句,减少数据库表的全表扫描,只返回必要的数据,这些都是非常有效的数据库优化方式,数据库往往是一个网站的性能瓶颈,您需要对数据库进行持续地优化,每一点微不足道的性能提高,累积起来都会带来质的改变。  使用 Store Procedure 进行数据库和网站业务层的数据交流   存储过程(Store Procedure )的执行效率远远高于分散的 SQL 语句。只要您的数据库支持 Store Procedure 您就应当使用它作为网站业务逻辑端和数据库端的数据交流通道。  分页返回数据库中的记录,不使用业务层的分页  在返回大量数据记录的时候,应该使用分页机制逐页显示这些数据,您需要在数据库端分页,在业务层分页将导致大量重复数据来往于数据层和业务层之间,造成性能瓶颈。  使用成熟优化的 Web 页面渲染技术  ASP.NET, PHP, JSP, Ruby 以及 CGI 都可以充当网站表现层的 HTML 渲染引擎,您可以根据自己的需求选择合适的平台。需要注意的是,诸如 ASP.NET 一类的平台,为了满足绝大多数应用场合并尽可能降低用户代码量,使用了很多可能降低性能的技术,如 View State,您可以关闭这些功能以提高页面渲染和执行效率。事实上,我们在 Comsharp CMS 使用了 Direct Render 方式,抛开 ASP.NET 的页面生命周期模型,直接渲染 HTML 代码生成网页,获得了非常理想的性能。  使用 XHTML + External CSS + External Javascript 降低 Http 请求  您应当将页面的内容,修饰,行为分开,内容为纯粹的 XHTML,修饰为外部 CSS 文件,行为为外部 Javascript 文件,这种模型的好处是,浏览器可以对外部 CSS 和 Javascript 进行缓存,每次只需从服务器端请求 XHTML 内容,大大降低页面的请求尺寸,对性能的改善有很大的帮助。  使用干净代码(XHTML, Javascript, CSS)  您的 HTML 代码,Javascript 和 CSS 文件需要包含干净的代码,干净,符合 W3C 标准的代码不仅短小,而且降低浏览器的负担,浏览器不需要进行各种容错分析,完全按照标准输出内容,执行效率大大提高。

五大国外免费主机服务商

作者:admin · 日期:2010-01-27 11:44:23 发表评论 »

最近感觉没啥内容可以,或许是没做好计划吧!因为最近一直在搜索主机,为什么嘛当然也想自己挑个心仪的主机,为以后的发展最准备了。于是,就来了想法,Loveblogearn新增一个分类,博客主机,内容嘛当然是与主机之类相关的了。那么开头第一篇,就给大家推荐国外5大免费PHP主机

这个文章中的这5大国外免费PHP主机,都是没有广告的,并且提供了很多先进的功能,如FTP访问,支持PHP和MySQL,自定义域和免费子域名等,最主要的是支持PHP,那就可以做博客主机只用了,新手们怕买了主机不会玩的话,可以先用他们来建个网站来练练。

1. 000WebHost

000WebHost 提供了一个最可靠的和功能丰富的主机托管服务,没有广告。所有的帐户都有1500M的磁盘空间, 100 GB的数据传输和支持PHP和MySQL数据库的。

主要服务功能,以下是详细名单:

1)1500 MB空间

2)100G流量

3)支持Web或FTP方式上传

4)可以绑定自己的域名,也提供二级域名

5)功能强劲的cPanel控制面板

6)支持PHP, MySQL, Perl, CGI, Ruby

7)一键安装WordPress、phpBB2、Drupal、Joomla等热门PHP程序

8)5个MySQL数据库

9)无广告

2. Zymic

Zymic.com 是德国的一家免费主机商,提供了一个最可靠和功能便携免费网络托管服务。包括PHP / MySQL的免费域名,无广告,充足的磁盘和流量。

主要服务功能,以下是详细名单:

1)5G空间

2)100G流量

3)支持Web或FTP方式上传

4)功能强劲的cPanel控制面板

5)支持PHP, MySQL

6)5个MySQL数据库

7)无广告

3. 110MB Hosting

110MB Hosting 是美国非常知名的一个免费空间提供商,其提供的为PHP空间,拥有多台免费空间的服务器。支持PHP 和 MySql。

主要服务功能,以下是详细名单:

1)5G空间

2)300G流量

3)支持Web或FTP方式上传

4)提供二级域名,也可以绑定自己的域名

5)功能强劲的cPanel控制面板

6)支持PHP, MySQL, Perl, CGI, Ruby,Ssl

7)可安装WordPress、phpBB2、Drupal、Joomla等热门PHP程序

8)5个MySQL数据库

9)无广告,无垃圾留言

4. Sitesfree

Sitesfree 是另一个免费主机上,提供50M免费php空间,支持PHP脚本, MySQL

主要服务功能,以下是详细名单:

1)500M空间

2)7G流量

3)支持Web或FTP方式上传

4)提供二级域名

5)功能强劲的cPanel控制面板

6)支持PHP, MySQL,

7)无广告

5. Your Free Hosting

YourFreeHosting.net 是一种新的,快速的免费提供虚拟主机。所有帐户配备了易于使用的控制面板,使其非常简单,来管理您的网站和文件。免费帐户是用PHP , MYSQL数据库 ,5GB的磁盘空间和50GB的带宽和更。您可以选择使用您自己的域名,或者免费的子网域。

主要服务功能,以下是详细名单:

1)5G空间

2)500G流量

3)支持Web或FTP方式上传

4)提供二级域名,也可以绑定自己的域名

5)功能强劲的cPanel控制面板

6)支持PHP, MySQL

7)可安装WordPress、phpBB2、Drupal、Joomla等热门PHP程序

5个免费主机商列表出来了,具体指数可能有所不同,但都大同小异,不过都可以建立WordPress博客的。感兴趣的可以试试,不过好多都要挂VPN代理才能注册。

PS:刚发这个文章不久,朋友们就提供给我新信息了,说DreamHost出了个 DreamHost Apps ,看样子也是个免费空间,你知道Google App Engine,Google不久前的产品,只支持python。DreamHost Apps 支持php,并且在后台实现一键安装各类开源程序,基于 Web 的应用程序,都是开源的PHP+MySQL程序:WordPress、 PhpBB、Zenphoto、 Drupal、MediaWiki等。具体自己看了才知道,:)

互联网公司招聘web前端笔试题目

作者:admin · 日期:2010-01-21 23:32:58 发表评论 »

随着各大互联网公司设立了Web前端开发工程师、设计工程师等职位,web前端越来越得到互联网企业的认可。而且其重视程度与地位也随着浏览器端的富客户端的体现而日益提高。 眼前对HTML5的未来和走向,业内的预测是会和Flash、Silverlight等相结合,从而取代传统的客户端应用程序。而实现这个目标的客户端核心工作是有Web前端工程师来完成的。 从另一个角度,对于web产品来说,交互和用户体验是产品的第一价值,这部分价值的体现就是在web前端。可以说web前端是一个web产品的长相和谈吐、行为。

     下面就简单的说明一下web前端的组成部分。

1. UI设计部分

   这是web产品化的第一步。这个部分通常在稍大型的公司里,被单独设立为一个部门或者一些人来工作。主要是要掌握Photo, AI,可以很快的将创意转化为平面设计图,并制作PNG等小图片。 同时,UI设计还要预包含用户交互设计的元素,如何和用户交互的基本原型等。

2. HTML/CSS,页面静态化

这是web产品化的2步,就是将UI设计师的设计图切成静态页面。这里的“切”不是单纯的切,而是使用css里面背景色和边框样式等方式对设计原稿进行解读,并形成符合web标准的html代码。这里web前端还需要将图片、html页面以及css样式进行合理的文件分布安排等

3.Javascript, AS 客户端动态化

这是web产品化的3步,工程师使用DOM操作、AJAX,实现数据和服务端的通信以及本地样式的切换。同时,由于Javascript、AS是一门动态语言,所以这部分的编码要求web前端工程师有较好的编码习惯,能写高效率的OOP代码,并对代码进行压缩上线以降低带宽消耗等。

4.Flash、Silverlight、Video    多媒体化

这部分针对不同web产品有不同的要求,通常要求是可以使用Flash和web、Server进行交互,并对Flash进行设计与开发。

5.PHP、Java等CGI, 服务端通信基本知识和编码

这部分主要是更好的使用Ajax等技术,了解服务端的工作方式将更有利于web前端工程师工作的开展。通常优秀的web前端工程师都是对服务端的一种开发语言很了解。

下面是webryan整理的百度web前端笔试和面试的一些题目和过程,提供给大家借鉴。

百度web前端笔试试卷上的题目:

1.判断字符串是否是这样组成的,第一个必须是字母,后面可以是字母、数字、下划线,总长度为5-20
2.截取字符串abcdefg的efg
3.让一个input的背景颜色变成红色
4。给一个页面,写html css
5。div的高宽等于浏览器可见区域的高宽,浏览器滚动,div始终覆盖浏览器的整个可见区域
6。判断一个字符串中出现次数最多的字符,统计这个次数
7。IE与FF脚本兼容性问题

又重新问的是1,4,6,7,这次问出题者的意图,并且让给出7的更多答案,以及IE FF不兼容的原因
然后看了看简历,没有问简历上的项目,而是让自己随便谈谈
1对于web客户端技术未来趋势发展谈谈看法
javascript + ajax=RIA
Adobe Flash AS 3
Flex
Sliveright
2web开发团队人员应该如何分工协作
布局 CSS 脚本
比如脚本人员长期的积累可能铸造类型YUI这样的产品级脚本库(亮点)
3web开发曾经的团队有没有别人遇到问题,什么问题,向你请教
4如果要实习,什么时候可以
5自己在开发的过程中遇到什么问题,谈谈看法
6web开发脚本开发环境用什么、调试用什么
试过aptana,现在就用editplus
调试肯定用firebug,ie下看页面DOM用IEInspector
7如果有个新技术,现在需要掌握,你会怎么做
新技术的发现我一般是通过RSS工具,比如我用GoogleReader
每天有半个小时左右在看最新的资讯、技术走向
发现新技术,首先有个大概了解,如果有深入的必要
我一般会看他的官网,比如jquery,我会搜索到www.jquery.com,然后看Docs、samples
如果要用到项目中,有困难的问题,我会svn得到最新的这个技术的源码,深入跟踪进去,看实现原理
一般现在涌现的技术都是opensource

提问时间
1百度web开发脚本是否有做类似YUI库的打算
2百度web开发工程师打算招多少人

 

百度电话二面回忆 web开发部–web开发工程师

首先是自我介绍
然后谈谈做的web项目
然后开始问技术问题

前端开发的优化问题
答:
产品发布时,js的压缩,即函数名替换、整个文件压缩成一行
css开发的时候 注释写清楚,先有个base.css,然后根据不同页面需要再加css,发布的时候将css中的一个定义写成一行,目的是压缩文件大小
最终发布的时候甚至可以将css,js分别压缩成一个文件,甚至css、js通过技巧压缩到一个里边(亮点)
这样的目的是,减少用户访问web产品的http连接数

web前端产品的开发流程
答:首先根据产品的定位、用户群,确定配色,然后纸上设计整体布局,然后png或者psd出效果图,切出需要的小图片,然后手写代码div+css构造出页面,然后根据功能写脚本
参考126邮箱首页,将所有小图片放到一个图片中,通过css的background-position实现页面,还是为了优化,减少http连接数

规避javascript多人开发函数重名问题
答:首先是通过命名规范,比如根据不同的开发人员实现的功能,在函数名加前缀,虽然函数名看起来复杂,发布的时候还是可以替换,从而优化。
还有一种办法是,每个开发人员都把自己的函数封装到类中,然后调用的时候即使函数名相同,但是因为是要类.函数名来调用,所以也减少了重复的可能性。

javascript面向对象中继承实现
答:我是用prototype.js extend.js扩展
然后子类中parent.initialize()…
答的不好
正确答案:

 

// 1. 构造器
function Animal() {};
function Mammal() {};
function Canine() {};
function Dog() {};
// 2. 原型链表
Mammal.prototype = new Animal();
Canine.prototype = new Mammal();
Dog.prototype = new Canine();

prototype.js实现的基本原理
答:
将功能封装
比如Ajax.Request,还是有判断浏览器的代码;Position这样的实现页面元素位置的计算

prototye太大,如果一个页面功能不需要这样的,自己实现,怎么做
答:首先页面、css、脚本分离之后,脚本中将整个模块功能写成一个类var Do={}
其中初始化函数init:function(){},然后最后做Do.init()
其中init会对页面上form中需要交互的元素绑定事件,比如$(’input1′).onclick=function(){}

IE、FF下面脚本的区别
答:
1.IE有outerHTML,FF没有
2.页面元素id,IE可以直接取,FF必须document.getElementById()
3.Ajax里边FF是new XMLHttpRequest,而IE是
try new ActiveXObject(’Msxml2.XMLHTTP’) try new ActiveXObject(’Microsoft.XMLHTTP’)

FF下面实现outerHTML
答:.parenet.firstChild .parent.innerHTML
这个没答好
正确答案:原理是,get:取到这个标签的tagname,然后属性循环构造成这个标签的属性
set:把字符串用insertBefore插入到这个元素前面,然后removeChild这个元素

 

<head>
<SCRIPT LANGUAGE=”JavaScript”>
<!–
if(typeof(HTMLElement)!=”undefined” && !window.opera)
{
HTMLElement.prototype.__defineGetter__(”outerHTML”,function()
{
var a=this.attributes, str=”<”+this.tagName, i=0;
for(;i<a.length;i++)
if(a[i].specified)
str+=” “+a[i].name+’=”‘+a[i].value+’”‘;
if(!this.canHaveChildren)
return str+” />”;
return str+”>”+this.innerHTML+”</”+this.tagName+”>”;
});
HTMLElement.prototype.__defineSetter__(”outerHTML”,function(s)
{
var d = document.createElement(”DIV”); d.innerHTML = s;
for(var i=0; i<d.childNodes.length; i++)
this.parentNode.insertBefore(d.childNodes[i], this);
this.parentNode.removeChild(this);
});
HTMLElement.prototype.__defineGetter__(”canHaveChildren”,function()
{
return !/^(area|base|basefont|col|frame|hr|img|br|input|isindex|link|meta|param)$/.test(this.tagName.toLowerCase());
});
}
//–>
</SCRIPT>

IE、FF下面CSS的解释区别
答:
1.png透明背景,FF下面没有问题,IE需要用滤镜通道
2.z-index在IE、FF下面的解释问题,

IE会认为第一个z-index=0
3.长字符串,word-wrap:break-all可以解决IE,但是FF需要overflow:hidden才行
冯舒娅补充:
1、有些标签在ff中不能用,比如button
2、滤镜
3、鼠标cursor:hand cursor:pointer
4、div的高度自适应
5、对box模型解析不一样
6、ul、ol的padding和margin

IE都能识别*,标准浏览器(如FF)不能识别*;
IE6能识别*,但不能识别 !important;
IE7能识别*,也能识别 !important;
FF不能识别*,但能识别 !important;
例如style=”*width:10px;!important width:20px;”
这样在IE6下宽度为10px,在IE7下宽度时20px

web前端技术的展望
答:javascript ajax;flash AS;Flex;Sliveright
附上网上的百度web开发工程师笔试问题集
1编写一个方法 求一个字符串的字节长度

 

<script language=”javascript” type=”text/javascript”>
new function(s)
{
if(!arguments.length||!s) return null;
if(””==s) return 0;
var l=0;
for(var i=0;i<s.length;i++)
{
if(s.charCodeAt(i)>255) l+=2;
else l++;
}
alert(l);
}(”hello你好,我好,大家好!world!”);
</script>

2编写一个方法 去掉一个数组的重复元素

 

<script language=”javascript” type=”text/javascript”>
Array.prototype.strip=function()
{
if(this.length<2) return [this[0]]||[];
var arr=[];
for(var i=0;i<this.length;i++)
{
arr.push(this.splice(i–,1));
for(var j=0;j<this.length;j++)
{
if(this[j]==arr[arr.length-1])
{
this.splice(j–,1);
}
}
}
return arr;
}
var arr=["abc",85,"abc",85,8,8,1,2,5,4,7,8];
alert(arr.strip());
</script>

3说出3条以上ff和ie的脚本兼容问题
IE 有children,FF没有;IE有parentElement,FF没有;IE有innerText,outerText,outerHTML,FF 没有;FF有HTMLElement,HTMLDivElement,XMLDocument,DocumentFragment,Node, Event,Element等等,IE没有;IE有数据岛,FF没有;IE跟FF创建HttpRequest实例的方法不一样。。等等。。
4用脚本写去除字符串的前后空格

 

String.prototype.trim = function(mode)
{//前后去空格
if (mode==’left’) {
return ((this.charAt(0) == ” “ && this.length > 0) ? this.slice(1).trim(’left’) : this);
} else
if (mode == ’right’) {
return ((this.charAt(this.length – 1) == ” “ && this.length > 0) ? this.slice(0, this.length – 1).trim(’right’) : this);
} else {
return this.trim(’left’).trim(’right’);
}
};

5算出字符串中出现次数最多的字符是什么,出现了多少次

 

<script type=”text/javascript”>
//<![CDATA[var str ="adadfdfseffserfefsefseeffffftsdg"; //命名一个变量放置给出的字符串
var maxLength = 0; //命名一个变量放置字母出现的最高次数并初始化为0
var result = ''; //命名一个变量放置结果输入

while( str != '' ){ //循环迭代开始,并判断字符串是否为空
oldStr = str; //将原始的字符串变量赋值给新变量
getStr = str.substr(0,1); //用字符串的substr的方法得到第一个字符(首字母)
eval("str = str.replace(/"+getStr+"/g,'')"); //详细如补充

if( oldStr.length-str.length > maxLength )
{ //判断原始的字符串的长度减去替代后字符串长度是否大于之前出现的最大的字符串长度
maxLength = oldStr.length-str.length; //两字符串长度相减得到最大的字符串长度
result = getStr + "=" + maxLength //返回最大的字符串结果(字母、出现次数)
}
}

alert(result) //弹出结果
//]]>
</script>

6写出3中使用this的典型应用
在HTML元素事件属性中inline方式使用this关键字:

7.最后一个问题是,如何制作一个combo选项,就是可以输入可以下拉菜单选择。

这个网上有很多成品,主要是通过绝对定位和相对定位结合的方式,改造原有的select 标签和input标签的方法。

 

附上javascript正则表达式的基本知识:
g: 全局匹配
i: 忽略大小写
^ 匹配一个输入或一行的开头,/^a/匹配”an A”,而不匹配”An a”
$ 匹配一个输入或一行的结尾,/a$/匹配”An a”,而不匹配”an A”
* 匹配前面元字符0次或多次,/ba*/将匹配b,ba,baa,baaa
+ 匹配前面元字符1次或多次,/ba*/将匹配ba,baa,baaa
? 匹配前面元字符0次或1次,/ba*/将匹配b,ba
(x) 匹配x保存x在名为$1…$9的变量中
x|y 匹配x或y
{n} 精确匹配n次
{n,} 匹配n次以上
{n,m} 匹配n-m次
[xyz] 字符集(character set),匹配这个集合中的任一一个字符(或元字符)
[^xyz] 不匹配这个集合中的任何一个字符
[b] 匹配一个退格符
b 匹配一个单词的边界
B 匹配一个单词的非边界
cX 这儿,X是一个控制符,/cM/匹配Ctrl-M
d 匹配一个字数字符,/d/ = /[0-9]/
D 匹配一个非字数字符,/D/ = /[^0-9]/
n 匹配一个换行符
r 匹配一个回车符
s 匹配一个空白字符,包括n,r,f,t,v等
S 匹配一个非空白字符,等于/[^nfrtv]/
t 匹配一个制表符
v 匹配一个重直制表符
w 匹配一个可以组成单词的字符(alphanumeric,这是我的意译,含数字),包括下划线,如[w]匹配”$5.98″中的5,等于[a-zA-Z0-9]
W 匹配一个不可以组成单词的字符,如[W]匹配”$5.98″中的$,等于[^a-zA-Z0-9
举例:验证email
var myReg = /^[_a-z0-9]+@([_a-z0-9]+.)+[a-z0-9]{2,3}$/;
if(myReg.test(strEmail)) return true;

整理及优化CSS代码的七个原则

作者:admin · 日期:2010-01-19 18:44:22 发表评论 »

作为网页设计者,你可能还记得曾经的那个网页大小建议:一个网页(包括HTML、CSS、Javacript、Flash和图片)尽量不要超过30KB的大小,随着互联网的日益庞大,网络带宽也在飞速发展,很多设计师已经不再考虑这条30KB的理想准则。随着越来越受欢迎的CSS布局和Javascript对网站用户体验的强化,使得这种现象越来越普遍,尤其是对于大型网站来说,仅仅一个CSS文件就已经超过了30KB的上限。

但是即便如此,现在也有很多准则来帮助你在完成CSS布局后进行CSS代码的压缩和优化。CSS代码优化的目的并不仅仅是减少CSS文件的大小,它还能让你的CSS代码更有条理、更高效。更多关于CSS代码优化的知识,能帮你更熟悉CSS代码的规范性。熟悉这些概念还能让你成为更全面的网页设计师,从而写出更优化的CSS代码。

1.使用简写:

如果你现在还对简写一点都不了解,那你就又写落伍了,不过幸好,学起来并不是很难。使用简写是一种让代码减少的最简单方法。没有比现在更适合实践代码简写的时候了,还等什么,一起来看看吧。

Margin、border、padding、background、font、list-style和outline 都是可以进行简写的属性。CSS简写就是不再使用不同的相类似属性的声明…

程序代码 程序代码
p { margin-top: 10px;
margin-right: 20px;
margin-bottom: 30px;
margin-left: 40px; }

你可以把它们简写成这样:

程序代码 程序代码
p { margin: 10px 20px 30px 40px; }

浏览器可以通过不同数量的属性值来解释你定义的CSS代码,请看图解:

上面的简写图解说明的是依据不同的属性值可以进行不同的缩写,这种方法同样适用于padding和Border-width属性。Font的简写对于缩小代码量很有帮助,而且能让你少打很多字母:

2.避免使用Hack:

Hack是一个糟糕的东西,它会为不同浏览器定义一样的代码,使得CSS繁冗。现在我们知道使用条件性注释来代替hack,他们在IE6和IE7中是被认可的,甚至IE团队也推荐这样使用。使用条件性注释服务于符合浏览器特性专用的CSS代码,因此,更小的、核心的CSS代码用来服务于遵从标准的浏览器,只有需求条件出现的时候(比如IE),才会去下载额外的CSS文件!

下面来看看IE6使用条件性注释的代码范例:

程序代码 程序代码
<!–[if IE 6]>
<link rel=”stylesheet” type=”text/css” href=”ie6.css” mce_href=”ie6.css”>
<![endif]–>

这段代码使得IE6去下载额外的ie6.css解析它专用的css代码。同样的,如果针对IE7只用把上面的6与7替换就行了。

3.使用留白:

无论是为了自己阅读还是二次开发,都要让CSS保持良好的可读性,留白就充当了关键的角色。我们不鼓励你为了得到一个更小的CSS文件,就去掉所有的空白格式,如tab,换行,空格等。这里推荐嵌套的代码使用一个tab缩进,所有属性独立一行:

对比上图中的两种CSS书写格式,哪一种格式能让你更加节约阅读和修改的时间呢?留白的效果显而易见,它会让你更容易管理代码。

4.移除多余的结构(Frameworks)和重设(Resets):

如果你选择使用CSS Framework,包括你自己写的,如果你去检查代码一定会发现该Framework包含的一些规则并不适用于你当前的文件,它们是可以被删除的。

由此可以想到的还有Reset,YUI Grid CSS使用的Eeset和Eric Meyer’s 重设(Reset) 目前都很流行, Resets能够移除不同浏览器的默认样式,使得页面在各个浏览器之间的表现一致。但是它们通常包含了一个大的网站需要的所有属性,一些例如<pre>,<code>,<sub>,<dfn>,<var>等等属性对于普通网站来说根本不会用上,删掉那些你用不上的。Eric Meyer也会鼓励你这样做!Framework和Reset会很好的帮助你的工作,但是如果不去掉那些你用不上的使用,反而会拖累你页面的效率和可读性。

5.让CSS能保证日后的维护:

另一种优化CSS代码的方法是按照你的习惯将CSS生命分成清晰的结构块。将CSS文件的声明用注释分隔开并进行排版,可以更方便自己在很长时间以后重新审理这个CSS文件,到那时你的效率会高出许多。然而,很多人更崇尚那种拆分布局风格,也就是给每种布局一个单独的CSS文件。Andy Clarke的《超越CSS》(Transcending CSS)一书也是提倡这种方法。

6.记录你的工作:
如果你是一个设计团队中的一员,那么让你的代码保持规则的一致性并能与其他成语建立良好的沟通是相当重要的,而且还要建立一种网站的标准。例如,团队中的某个成员想出了一个比较不错的网站标签切换界面,记录下来这些想法和注解会帮助团队的其他成员再次使用这种效果,这样能够避免HTML或CSS代码的臃肿。

记录工作主要包括标记向导(Markup Guides)和样式表向导(Style Sheet Guides),这种工作并不仅仅适用于团队,也同样适用于一个人的设计工作。毕竟,在完整一个设计项目之后,经过一年甚至更长的时间,当你再回来看到这些曾经自己写的代码时,也一样会觉得很陌生。将来你会通过自己曾经的记录了解到在那些CSS结构是如何让网页表现的,或那个网页对表单按钮的起到副作用。

记住,一定要养成为CSS写注释的习惯。

7.压缩使用:

为了使得浏览器节省更多下载个载入时间,压缩是一个不错的解决方案,但是仅限于发布的时候。YUI Compressor 和CSSTidy 就是这样方面的专家,他们能够去除多余的代码,校验属性互相覆盖的错误。
许多流行的编辑器,比如BBEdit, TextMate, 和 TopStyle 都能够帮助你格式化你的CSS代码成你想要的样子。你还能通过服务器压缩技术使用PHP处理你的CSS。你可以找到更多的CSS优化和压缩的CSS工具。

有一点,这些程序尽可能会降低错误的发生,但并不是完美的。同样,最好不要用他们去处理包含CSS hack的文件。这也是另一个让那些hack储存在另外的文件里的原因。

总结

整理和优化代码不仅是为了你的CSS文件大小,还包括了维护性和可读性。以上的原理并不只是针对CSS,它们还能应用到HTML,Javascript以及其他编程语言。CSS文件不只是为了呈现给你网站的最终用户。上面的原理可以帮助用户体验以及开发者经验。运用这些原则到你未来的项目中,一定能够获得重大的成效。

排列算法 C语言演算

作者:admin · 日期:2010-01-03 20:05:31 发表评论 »

我不知道大家有没有听说,明年起程序员考试就不分初,中,高级了,而我们软件专业明年就要过程序了,据说相当于考中程,或者还要难一些,虽然不知道消息的正确性,但这的确是我们的老师告诉我们的,所以老师就出一些题给我们练,下面是一道关于数学中全排列的算法的问题,编了我4天!真是的看起来容易,编起来难……….下面给出我的源代码, 并给大家解释我的思路:

/***********************************************/
void chang(char str[],int m) /*定义循环左移函数(我没有用左移函数)*/
{
int i,j;
char temp=str[0];
for (i=0;i str[i]=temp;
}
void pai(char str[],int m,int n) /*定义全排列函数*/
{
int k;
void chang(char str[],int m);
if (m {
for (k=0;k<=m;k++)
{
pai(str,m+1,n); /*递归调用*/
chang(str,m); /*调用左移函数*/
}
}
else printf("%s\t",str);
}
#include "stdio.h"
main()
{char str[]="ABCD"; /*全排列字符,可以任意多个(相应的下面排列函数中参数"4"改成全排列字符的个数)*/
clrscr();
pai(str,0,4); /*这里参数0(下标)表示从第一个元素开始,4表示元素个数(不是下标)*/
getch();
}
/*********************************************/

下面我来解释一下,我花了近1天的时间,找到这样一个规律如下:
┏ ABCD
┣ BCDA
┏ ABCD ━┫
┃ ┣ CDAB
┏ ABCD ━╋ BCAD ┗ DABC
┃ ┃ .
┃ ┗ CABD .
ABCD ━┫ .
┃ ┏ BACD .
┃ ┃ .
┗ BACD ━╋ ACBD ┏ CBAD
┃ ┣ BADC
┗ CBAD ━┫
┣ ADCB
┗ DCBA
简化图如下所示 ==>
┏ ABCD
┣ BCDA
┏ ABC ━┫
┃ ┣ CDAB
┏ AB ━╋ BCA ┗ DABC
┃ ┃ .
┃ ┗ CAB .
A ━┫ .
┃ ┏ BAC .
┃ ┃ .
┗ BA ━╋ ACB ┏ CBAD
┃ ┣ BADC
┗ CBA ━┫
┣ ADCB
┗ DCBA
大家看到了,以上就是一步一步循环左移就能得到所有全排列的数了.以上程序在Trubo C 2.0 中运行通过,如果大家还有什么疑问,请加我QQ:156301529,Email:rodgersnow@163.com,我们共同讨论.另外,我在想, 如果是n个数或字符中取m个进行排列的话,该怎么改呢?目前正在考虑中,本人觉得难度很大,希望大家能帮帮我,请加我QQ,谢谢!
另附我在网上找到的经典全排列算法,叫”后补法”,大家自己好好研究吧,在Trubo C 2.0 中运行通过了的.

#include
void permutation(char a[], int m, int n)
{
int i;
char t;
if (m permutation(a, m+1, n);
for (i=m+1;i t=a[m]; a[m]=a[i]; a[i]=t;
permutation(a, m+1, n);

t=a[m]; a[m]=a[i]; a[i]=t;
}
} else
{
printf(”%s\n”, a);
}
}
int main() {
char a[]=”ABCDE”;
permutation(a, 0,5);
return 0;
}

jQuery 选择器详细介绍

作者:admin · 日期:2009-12-21 20:49:50 发表评论 »

jQuery 具有一个相当强大的选择器引擎,提供了完整的选择器语法,允许我们选择几乎所有的元素组合。jQuery 的选择器语法主要是基于 CSS3 和 XPath 的,对 CSS3 和 XPath 了解越多,使用 jQuery 时就越显得心应手。有关 CSS 和 XPath,请参阅以下链接: CSS 1 CSS 2 CSS 3 xPath 值得注意的是, CSS3 并没有得到现今所有浏览器的支持,因此我们很少使用它。然而,我们仍然可以在 jQuery 中使用 CSS3 选择元素,因为 jQuery 具备自己的自定义选择器引擎,并且实现了对 CSS3 的支持。 想了解 jQuery 选择器更多信息,可以访问 jQuery 的官方文档有关 Selector 的部分。下面,在原官方文档的基础上作一些简单的翻译和说明。 1. CSS 选择器(CSS Selectors) jQuery 完整地支持 CSS 1-3,并且可以在(选择器)表达式里加入自定义的 CSS-like (和xPath)。 1.1 jQuery 支持的 CSS 选择器语法 * 任何 element E 类型为 E 的所有element(其实 E 可以是任何 element) E:nth-child(n) 一个类型为 E 的 element,它是其父 element 的第 n 个子 element E:first-child 一个类型为 E 的 element,它是其父 element 的第一个子 element (相当于E:nth-child(0)) E:last-child 一个类型为 E 的 element,它是其父 element 的最后一个子 element E:only-child 一个类型为 E 的 element,它是其父 element 的唯一子 element E:empty 一个类型为 E 的用户界面(UI) element,它没有子 element(包括 文本 element) E:enabled 一个类型为 E 的用户界面(UI) element,它被设置为禁止(disabled) E:disabled 一个类型为 E 的用户界面(UI) element,它被设置为允许(enabled) E:checked 一个类型为 E 的用户界面(UI) element,它处于选中(checked)状态(适用于单选按钮和复选框) E:selected 一个类型为 E 的用户界面(UI) element,它处于被选择(selected)状态(在选择范围内,有一个或多个可供选择的 element )。注意:selected 属性并不在 CSS 的规范内,但jQuery 提供内部支持 E.myclass 一个类型为 E 的 element,它的 class 类是“myclass” E#myid 一个类型为 E 的 element,它的 id 是“myid” E:not(s) 一个类型为 E 的 element,并且结果集中的 element 不匹配(不包含)选择器 s(用作过滤) E F 一个类型为 F 的 element,它是类型为E 的 element 的子孙 element(注意是子孙 element) E > F 一个类型为 F 的 element,它是类型为E 的 element 的子 element(注意是子 element) E + F 一个类型为 F 的 element,它是紧跟在类型为E 的 element 后面的一个兄弟 element(注意 F 是 E 的兄弟节点,并且是紧跟随其后的一个) E ~ F 一个类型为 F 的 element,它是类型为E 的 element 后面的一个兄弟 element(注意 F 是 E 的兄弟节点,并且位置在E 的后面) E,F,G 一个类型为 E 的 element,一个类型为 F 的 element,一个类型为 G 的 element(用于选择多个 element) 1.2 jQuery 支持,但(跟 CSS 规范)有所不同的选择器语法 不同之处是必须在属性名前加上符号“@” E[@foo] 一个类型为 E 的 element,它具有属性“foo” E[@foo=bar] 一个类型为 E 的 element,它具有属性“foo = bar” E[@foo^=bar] 一个类型为 E 的 element,它具有属性“foo“,并且其属性值是以”bar“开头的 E[@foo$=bar] 一个类型为 E 的 element,它具有属性“foo“,并且其属性值是以”bar“结尾的 E[@foo*=bar] 一个类型为 E 的 element,它具有属性“foo“,并且其属性值包含”bar“ E[@foo=bar][@baz=bop] 一个类型为 E 的 element,它具有属性“foo = bar”和属性”baz = bop“ 注:以上的“bar”和“bop”均为字符串。 1.3 jQuery 不支持的选择器语法(略) 因为没什么实际的作用,所以这里也不作赘述,想了解详情的可以参阅官方帮助文档。 1.4 Contex 和 Anchoring 可以设置 contex 来 anchor(定位) 选择器,这也是 jQuery 跟 CSS 规范的一个不同之处。用户可以使用语法: $(expr, context) 来设置 context root。默认的 context root 是整个文档。 2. XPath 选择器(XPath Selectors) XPath 也是 jQuer 支持的选择器语法之一。jQuery 支持基本的 XPath 语法。下面以一些例子作说明。 2.1 定位路径(Location Paths) 绝对路径,相对于整个 HTML 文档 $(”/html/body//p”) $(”body//p”) $(”p/../div”)相对路径,相对于设置的 context node “this” $(”p/*”, this) $(”/p//a”, this)2.2 支持 Axis 选择器 “//” : 子孙 elements (div 所有类型为 p 的子孙 elements) $(”/div//p”) $(”//div//p”)“/” : 子 elements (div 所有类型为 p 的子 elements) $(”//div/p”)“~” : 兄弟 elements (div 所有类型为 form 的兄弟 elements) $(”//div ~ form”) ““..”: 父 elements (div 的父 element 下的类型为 p 的子 elements) $(”//div/../p”)2.3 支持谓词语法(Predicates) [@foo] 具有属性“foo” $(”//input[@foo]“)[@foo='test'] 具有属性“foo = ‘test’” $(”//a[@foo = 'tsxt']“)[Nodelist] 其子孙 elements 匹配 Nodelist(用于过滤) $(”//div[p]“) $(”//div[p/a]“)2.4 jQuery 支持,但(跟 XPath 规范)有所不同的谓词语法(Predicates) [last()] or [position()=last()] becomes :last(选择结果集中的最后一个 element) $(”p:last”)[0] or [position()=0] becomes :eq(0) or :first(选择结果集中的第个 element) $(”p:first”) $(”p:eq(0)”)[position() < 5] becomes :lt(5)(选择结果集中索引大于5的 elements) $(”p:lt(5)”)[position() > 2] becomes :gt(2)(选择结果集中索引小于2的 elements) $(”p:gt(2)”)注:“becomes” 前面的是 XPath 的 predicates 语法,后面是等价的 jQuery 语法。 3. jQuery 自定义的选择器(Custom Selectors) jQuery 具有一些自定义的选择器语法,这些语法虽然并不在 CSS 和XPath 规范之内,但它们相当的便捷,所在 jQuery 将它们囊括进来。 3.1 自定义选择器(Custom Selectors) :even 结果集中其索引为偶数(双数)的 elements :o dd 结果集中其索引为奇数(单数)的 elements :eq(N) and :nth(N) 选择结果集中索引为 N 的 elements :gt(N) 选择结果集中索引大于 N 的 elements :lt(N) 选择结果集中索引小于 N 的 elements :first 选择结果集中的第一个 element (相当于 eq(0) 或者 nth(0)) :last 选择结果集中的最后一个 element :parent 在结果集中选择 elements,它必须具有子 elements(包括文本节点)(跟 :empty 相反) :contains(‘test’) 选择结果集中包含有指定文本的 elements :visible 选择所有可见(visible)的 elements( display 属性的值等于 visible、block、inline,或者 visibility 属性的值等于 visible,不包括 hidden 类型的 elements(关于 hidden 类型,如
)) :hidden 选择所有隐藏(visible)的 elements( display 属性的值等于 none,或者 visibility 属性的值等于 hidden,不包括 hidden 类型的 elements(关于 hidden 类型,如
)) 例子: $(”p:first”).css(”fontWeight”,”bold”); $(”div:hidden”).show(); $(”/div:contains(’test’)”, this).hide();3.2 表单选择器(Form Selectors) :input 选择所有表单 elements(input, select, textarea, button) :text 选择所有文本域 (type=”text”). :password 选择所有密码域 (type=”password”). :radio 选择所有单选按钮 (type=”radio”). :checkbox 选择所有复选框 (type=”checkbox”). :submit 选择所有提交按钮 (type=”submit”). :image 选择所有图像域 (type=”image”). :reset 选择所有重置按钮 (type=”reset”). :button 选择所有按钮 (type=”button”). :file 选择所有
. :hidden 也是可用的,在上面的3.1 节有介绍。 建议在使用表单选择时提供一个 context root,例子: $(’#myForm :input’) $(’input:radio’, myForm)上面最后的一行语句将会选择所有的“myForm”表单里的所有单选按钮,相当于[@type=radio](即 $(“[@type = radio],myForm”)),但用表单选择器会稍微快点,尤其对于大型的表单。 3.3 更多选择器 jQuery 选择器可以通过第三方的插件来扩展: More Selectors Plugin Mike Alsup on Custom Selectors Patch to allow selection by CSS property (full plugin to be released simultaneously with 1.1) 参考资料: http://docs.jquery.com/DOM/Traversing/Selectors

Kohana 框架常用方法

作者:admin · 日期:2009-12-15 11:37:25 发表评论 »

<?php echo html::anchor(’email_marketing/active’,'活动列表’);?>

输出:<a href=”/email_marketing/active”>活动列表</a>

<?php echo form::open(’email_marketing/add_3/’, array(’class’=>’need_validate’)); ?>

输出:<form action=”/email_marketing/add_3″ method=”post”>

用javascript中insertRow函数动态给表格(table)插入一行(tr)

作者:admin · 日期:2009-12-15 10:45:33 发表评论 »

用javascript中insertRow函数动态给表格(table)插入一行(tr):
语法:
oTR = object.insertRow(iIndex)
参数说明:
iIndex:可选项。整数值(Integer)。指定插入 tr 的序号。默认值为 -1 ,插入单元格到 rows 集合内的最后一个。
返回值:
oTR:对象(Element)。成功则返回新建 tr 的引用。否则返回 null 。
说明:
在表格行内建立新的行( tr ),同时添加到 rows 集合内。
假如你插入行(Row)到 tFoot , tBody , tHead 内,你也需要将行加入 table 的 rows 集合内。加入你指定了 iIndex ,这个序号应该是相对于其最接近的父对象的 rows 集合。例如,假如你插入 tr 到 tFoot 内,那么 iIndex 应该是相对于 tFoot 的 rows 集合,而不是 table 的。
推荐使用的方法,是依据默认值将单元格插入到 rows 集合内的最后一个。这是速度最快的插入方式。
示例代码:
<script type=”text/javascript”>
function rdl_doAdd(){
var oBody=document.createElement(”<tbody id=myBody>”);
document.all(”myTable”).insertBefore(oBody,document.all(”myFoot”));
for (m=0;m<3;m++) {
var myTR =oBody.insertRow();
for (i=0;i<4;i++) {
var myTD=myTR.insertCell();
myTD.innerText=”第”+(i+1).toString()+”个单元格”;
}
}
document.all(”myHeadTD”).colSpan=document.all(”myFootTD”).colSpan=i.toString();
window.resizeTo(320,310);
}
</script>
<table cellspacing=1 id=myTable width=90%>
<thead id=myHead><tr><td id=myHeadTD>这是标题</td></tr></thead>
<tfoot id=myFoot><tr><td id=myFootTD>这是脚注</td></tr></tfoot>
</table>
<br><input type=button value=” 插入TBODY ” onclick=”rdl_doAdd();”>

jquery实现动态添加、删除数据行

作者:admin · 日期:2009-12-14 15:14:15 发表评论 »

<html>
<head>
<meta http-equiv=”Content-Language” content=”zh-cn”>
<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″>
<title>Untitled Document</title>
<script src=jquery-1.2.1.js>
</script>
</head>
<body>
<div>
添加门店&nbsp;
<input type=”text” name=”warehouseno” maxlength=”20″ value=”" onchange=”javascript:udf_lookup(this, -1, ”)”
>
<img src=”images/button_lookup.gif” onclick=”javascript:lookupBasWarehouseFORwarehouseno()”
width=”15″ height=”15″ border=”0″ alt=”Lookup” align=”middle” hspace=”3″ style=’display:none’>

<table border=1 cellSpacing=”0″ bordercolor=”#CEDFFF” cellPadding=”2″ width=”100%”>
<tr>
<td noWrap bgColor=”#cedfff”>仓库编码</td>
<td noWrap bgColor=”#cedfff”>销售门店</td>
<td noWrap bgColor=”#cedfff”>操作</td>
</tr>

<!– 模板行 –>
<tr>

<!– 隐藏的数据 id –>
<input type=hidden name=”newRowId”>

<!– 关键数据 id 对应的文字描述:编号、名称 –>
<td><span></span></td>
<td><span></span></td>
<td>
<A href=”" onclick=”return false;” title=”删除”>
<img src=”images/del.gif” style=”border:0px”>
</A>
</td>
</tr>
</table>
</div>

</body>

<script type=”text/javascript”>
$(document).ready(function(){
$(”tr.templeteRow”).hide();//确保隐藏
addNewRow(123,’1.1′,”哈哈1″);
addNewRow(234,’1.2′,”哈哈2″);
addNewRow(345,’1.3′,”哈哈3″);
});
function getTimeRndString() {
var tm=new Date();
var str=tm.getMilliseconds()+tm.getSeconds()*60+tm.getMinutes()*3600+tm.getHours()*60*3600+tm.getDay()*3600*24+tm.getMonth()*3600*24*31+tm.getYear()*3600*24*31*12;
return str;
};
/**
* 添加行
* @param {Object} id
* @param {Object} no
* @param {Object} name
*/
function addNewRow(id,no,name){
var templeteRow=$(”tr.templeteRow”);
var newRow = templeteRow.clone(true);
var rndID=”tmpUID”+getTimeRndString();
newRow.insertBefore(templeteRow);
newRow.show();
newRow.attr(”class”, “valueRow”);
newRow.attr(”id”, rndID);

newRow.find(”input.newRowId”).attr(”value”,id);
newRow.find(”span.newRowNo”).text(no);
newRow.find(”span.newRowName”).text(name);

newRow.find(”a.delDetailRow_Link”).attr(”id”,rndID);
newRow.find(”a.delDetailRow_Link”).click(function(){
act_delDetailRow(this);
});
}

/**
* 删除所在行
* @param {Object} who
*/
function act_delDetailRow(who){
$(”#”+who.id).remove();
}
</script>
</html>


 Powered by Max Banner Ads 
8 pages