2020

最后更新于:2022-04-02 06:12:24

**第一周(2.17~2.23)** * Node.js CLI工具编写 * [Mobx](https://cn.mobx.js.org/)入门 * 阅读《CSS权威指南 第四版》 * [浏览器的原理](https://www.html5rocks.com/zh/tutorials/internals/howbrowserswork/) * OOCSS * 浏览《精通CSS》和《CSS3艺术》 * React实践 **第二周(2.24~3.1)** * 骨架屏选择,[page-skeleton-webpack-plugin](https://github.com/ElemeFE/page-skeleton-webpack-plugin)和[react-content-loader](https://github.com/danilowoz/react-content-loader) * [Emotion](https://emotion.sh/docs/introduction) * React组件通信 * [OOCSS](https://github.com/stubbornella/oocss/wiki)、[BEM](https://en.bem.info/methodology/)、[SMACSS](http://smacss.com/) * [YUI](https://yuilibrary.com/) * [Ant Design中的设计风格指南](https://ant.design/docs/spec/introduce-cn) **第三周(3.2~3.8)** * Excel查询函数 * 组件间通信 * ref和useEffect() **第四周(3.9~3.15)** * CSS Shapes * 微信公众号 JS-API踩坑 **第五周(3.16~3.22)** * CSS渐变 * CSS矩阵、三维变形 * CSS滤镜 * CSS合成 * CSS裁剪和遮罩 * [LibreOffice]([https://www.libreoffice.org/](https://www.libreoffice.org/)) **第六周(3.23~3.29)** * CSS网格布局 * 阅读Node.js书籍《狼书》 **第七周(3.30~4.5)** * CSS网格布局 * Node.js Buffer、流和事件 **第八周(4.6~4.12)** * Node.js 文件系统和网络 * Node.js 编写命令行 * 编译原理 **第九周(4.13~4.19)** * 重温躬行记 * webpack构建过程、特点、热更新、优化 * 前端路由原理 * 双向绑定,defineProperty和Proxy **第十周(4.20~4.26)** * 自制前端脚手架 * webpack集成Jest * webpack集成ESLint * webpack集成TypeScript * 制作命令行工具 **第十一周(4.27~5.3)** * Koa * Mongoose * MongoDB * ESLint踩坑 * Ant Design **第十二周(5.4~5.10)** * 转盘 **第十二周(5.11~5.17)** * 雪碧图动画,逐帧,steps() * 在JavaScript中编写动画 **第十二周(5.18~5.24)** * SVG精髓 **第十二周(5.25~5.31)** * HTMLMediaElement事件 **第十三周(6.1~6.7)** * 牛客网刷题 **第十四周(6.8~6.14)** * 前端基础题准备 * 前端架构设计 **第十五周(6.15~6.21)** * 各类原理准备 **第十六周(6.22~6.28)** * 性能优化书籍阅读 **第十七周(6.29~7.5)** * 撰写性能优化系统文章 **第十八周(7.6~7.12)** * 算法学习 **第十九周(7.13~7.19)** * 算法实践 **第二十周(7.20~7.26)** * 阅读《算法 第四版》 * 阅读《程序员面试金典》 **第二十一周(7.27~8.2)** * LeetCode做题 **第二十一周(8.3~8.9)** * 阅读浏览器工作原理 **第二十二周(8.10~8.16)** * 记录浏览器工作原理 **第二十三周(8.17~8.23)** * 阅读设计模式之美 **第二十四周(8.24~8.30)** * 记录设计模式之美 **第二十五周(8.31~9.6)** * Flutter学习 **第二十六周(9.7~9.13)** * React原理研究 * Web的音频和视频学习 **第二十七周(9.14~9.20)** * 阅读《黑客攻防技术宝典》 **第二十八周(9.21~9.27)** * 交接 **第二十九周(9.28~10.4)** * 适应新环境 **第三十周(10.5~10.11)** * 欢度国庆
';

日志

最后更新于:2022-04-02 06:12:22

记录了一些自己平时工作或闲暇时所做的事情,只要我觉得有必要记录都会写上,例如: * 新技术或新思想的学习。 * 阅读书籍,技术或非技术的。 * 工作感悟或总结。 * ......
';

2020年

最后更新于:2022-04-02 06:12:20

  继续维护专栏,开辟了Web优化和算法栏目,并且补充了React、Node.js等栏目。   继续GitHub仓库,除了完善[daily](https://github.com/pwstrick/daily)之外,还新增了一个性能分析工具,代号[pineapple](https://github.com/pwstrick/pineapple),不过没有坚持维护下去,也没机会在线上做验证。   除此之外,在年中的时候做了个一个重要的决定:跳槽,离开呆了4年多的公司,跳出这么多年的舒适区,开始新的历程,期间也经历了各种波折,不过都是些不错的体验。下面是一些感悟。   最近跳槽到一家创业多年的小公司,带一个前端小团队。   在这一个多月中,主要是熟悉业务,维护老代码,编写新业务等,期间也发现了当前团队出现的种种问题,打算在接下来的日子里好好改造。   接下来给自己定的小目标是,改变混乱的局面,提升工作效率,团队更加稳定和规范化。 :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/73/8d/738d3298db2dec28f0e4439d8a80ea5c_786x364.png =400x) ## 一、适应新的环境 **1)规章制度**   首先要适应公司的规章制度,主要还是要习惯上下班时间,这和以往不同,本来是到点就走的。现在的话,每天都比较忙碌,下班时间也不定。 **2)新的角色**   其次是要适应自己的新角色,新公司负责的事情要比老公司多很多,以往还是蛮闲的,但现在不同。   并且要带团队,考虑的层面也得比以前更高一点。不能只想着自己的个人发展,更多的是要关注团队发展,为团队的每个人负责。 **3)开发模式**   接着是要适应当前的开发模式,上家公司只做H5相关的事情,也就是做些效果、小程序之类的纯前端工作。   而这里还会涉及到一些后端任务,用Node做了中间层,整合各类数据,执行Redis缓存,有时候还要直接操纵数据库。   刚开始还真有点不适应,不仅要学会用终端,还得知道怎么通过看日志来排查各类问题等等。 **4)业务逻辑**   最后就是要熟悉业务逻辑,前提就是要把项目跑起来,知道怎么修改。   目前公司缺失各类文档,员工离职后很多信息就只能通过代码来了解其中的逻辑了。   为了方便调试,特地搭建了单元测试(主要测试Node方面的代码,[Mocha](https://mochajs.cn/)+[Chai](https://www.chaijs.com/)+[Supertest](https://github.com/visionmedia/supertest)),这样既能保障代码质量,也方便了解某个函数的功能、变量的值等。   目前还有很多我不了解的业务,未来将会经常遇到。对于这些未知业务,除了被动的遇到后再了解之外,还可以主动与各个组的相关负责人了解,未雨绸缪。 **5)难点**   祖传代码还在运行中,代码写的杂乱无章,并且很多服务已无人维护,但是由于缺乏文档,难以轻易地修改。   人员缺乏,每天都疲于修复各种BUG,以及各种杂七杂八的事情,经常要花大精力去查看代码、日志和数据库,计划要写的代码或要做的事情经常无法按时完成,难以达到平衡。虽然短期内加班可以解决,但长期的话还是得补充人员。 ## 二、制订游戏规则 **1)前后端真正分离**   当前公司对前端的要求有点高, 既要会市面上主流的前端技术(HTML和CSS是必须的,还有React、Vue等),也要有后端开发的经验,比如操作MongoDB和MySQL等。   之前公司已经有好几个员工因为这些原因而离职了。以后如果还这么招人,定会遇到许多阻碍,毕竟没有大厂的条件。   前端会负责一个比较庞大的后台管理系统,如果是些简单的查询更新等数据库语句,其实复杂度上倒也没什么,只不过费时间而已。   但前端还要处理金额敏感信息,这块还是需要交接出去,过来后就和后端的大佬们讨论了方案,做到真正的分离,后端组的人也是积极响应,不过这种交接过程将是比较漫长的,毕竟资源有限。   未来尽量由后端服务器组提供数据源,前端就做数据整合以及页面效果的工作,尽量做到专精。 **2)统一技术栈**   当前前端有些技术栈比较老旧,有些活动页面甚至还在用jQuery制作,这样很限制团队成员的发展。   因此打算统一技术栈,将后续的项目迁移到Vue或React这些目前比较主流的库,这样也有利于团队成员的自身发展。 ## 三、补全各类文档 **1)技术文档**   在我进新公司之时,有个老员工要离职了,他了解很多业务,于是就安排他尽可能多的记录到内网的Wiki中。文档虽然不算全,但好歹有个雏形,未来慢慢补全。   当前前端组维护了多个项目,这些项目又分别使用了不同的技术栈。   例如后台管理系统前台采用的是[UmiJS](https://umijs.org/zh-CN)+[DvaJS](https://dvajs.com/)+[Ant Design](https://ant.design/index-cn)+[React](https://react.docschina.org/),后台采用的是[KOA2](https://koa.bootcss.com/)+[NodeJS](http://nodejs.cn/)+[MySQL](https://www.mysql.com/)+[MongoDB](https://www.mongodb.com/)。   自己花了点时间和精力探索了一下这两个项目的运行过程(画了几张流程图),还对其中的技术细节做了归纳和总结,降低后续新加入的小伙伴的理解难度。 **2)代码注释**   未来的话,还需要完善源代码的各种注释,目前很多组件和函数都是没有注释的,只能一行一行的看代码来理解,很是费劲。   公司也打算用工具(例如[swagger](https://swagger.io/))通过写注释的方式,自动生成接口文档。 **3)各类业务**   其他组应该也会有相关文档,未来需要有个引导页面,跳转到相关业务中。如果没有的话,需要找个协商人,让他安排人手去补齐。 ***** > 已建立一个微信前端交流群,如要进群,请先加微信号freedom20180706或扫描下面的二维码,请求中需注明“看云加群”,在通过请求后就会把你拉进来。还搜集整理了一套[面试资料](https://github.com/pwstrick/daily),欢迎阅读。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2e1f8ecf9512ecdd2fcaae8250e7d48a_430x430.jpg =200x200)
';

前端学习之路分享

最后更新于:2022-04-02 06:12:17

  经常会在群里或论坛上看到有人问:“学习前端有什么捷径?”,一般都是卖油翁式的回答:“无他唯手熟尔”。那么该如何让手熟练呢?其实也就是该如何系统的学习前端。在本文中,我会结合自身的经历,分享一下自己学习前端的过程,期间会穿插引用我过去各个阶段所写的博文。 ## 一、启蒙   刚出来混的时候并不是专门做前端的,只是兼顾一下。那时候使用的编程软件是微软的Visual Stadio 2005,开发网页都是拖封装好的控件,做个系统后台,使用的也是简单的模板,改动HTML、JavaScript和CSS的机会也都比较少,这个时候其实对前端还没有什么意识。   然后过了一年,和朋友一起帮人做网站,那个时候就算是正式接触前端了。有一件事印象很深刻,当时负责写静态页面的朋友一直没时间写,于是我就想自己动手,但是完全无从下手,只能等待。在他写了几张页面之后,我就开始研究他的源码,这时候也仅仅是能看懂,再做点小修改,还无法独立布局。   在接下来的几年里,陆续呆了多家公司,无一例外的我都会兼顾前端页面,这也大大提升了我对前端的理解。不过,虽然做了那么多的页面,但总有一种感觉,就是怎么每次布页面都会碰到这样那样的问题,好像永远都无法驾驭布局。现在想想,最主要的还是自己的地基不牢固,很多时候的布局并不难,但会涉及到很多细节,而这些细节很容易产生问题,例如CSS中的百分数计算规则、JavaScript中的全等和相等比较的区别、HTML元素表格的特点等等。这些在开发过程中都会碰到的,我那时候都是碰到了,再去翻资料,很是被动。如果事先就学会了或准备好了文档的话,那么就能提升工作效率,减少开发周期。我将这个混沌的时期称为启蒙阶段。 ## 二、博学   博学就是广泛的学习,吸收知识。我当时首先学习的就是HTML、CSS和JavaScript,然后是数据结构、简单的算法和网络,接着是性能、设计模式和安全,最后还学习了调试工具、营销推广等各类知识,有的与编程有关,有的与编程无关。下面会依次列举学习过程中所涉及的相关知识。 **1)HTML**   HTML很容易被忽略,因为总觉得这个不难。其实的确不难,只是有时候会给人留坑,让人踩进去防不胜防。比如常用的[表格](https://www.cnblogs.com/strick/p/3789114.html),在全方位的了解了它的特点之后,就能知道表格布局的缺点、它的属性有哪些、它的CSS样式该怎么重置、各个浏览器的呈现有何区别等。再比如[iframe](https://www.cnblogs.com/strick/p/3814872.html),在过去常用来异步上传文件,在知道它的特性之后,就能明白其中的原理,碰到此类问题时就能游刃有余了。   如果要系统的学习HTML的话,我推荐阅读《[HTML5权威指南](https://book.douban.com/subject/25786074/)》、[MDN元素参数](https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element),还有[W3C官方规范](https://www.w3.org/TR/html5/introduction.html),但这个比较拗口,理解起来会有难度。过去写的一篇《[前端基础学习分享](https://www.cnblogs.com/strick/p/4377213.html)》也可以参考。 **2)CSS**   CSS要学的内容比HTML要多一些,在CSS2时代,提供的CSS属性并不多,但自从CSS3发布之后,引入了众多新属性,大大提升了CSS的操控性。学习CSS首先要了解该属性或概念是属于CSS2还是CSS3,因为页面要考虑浏览器的兼容性,即对CSS的支持度有差异,很多时候需要权衡。比如[动画属性](https://www.cnblogs.com/strick/category/847675.html),这是CSS3新增的,不仅能让页面生动真实,还能摆脱对Flash的依赖,远离大段的JavaScript脚本。虽然效果很强大,但像IE8、IE9等浏览器并不支持,在这些浏览器中要么降级,要么干脆去掉这些特效。还有一些基础概念,例如盒模型、BFC、选择器、层叠、定位等,也是必须要了解的。   如果要系统的学习CSS的话,我推荐阅读《[CSS权威指南](https://book.douban.com/subject/2308234/)》,目前英文已经出到了第四版,中文的第四版今年肯定会出。第三版没有讲到CSS3的属性,只是列举了CSS2和CSS的基础概念,讲的还是很细的,可以将这本书当做词典来用,需要的时候翻一下。这部书要细读,才能发现平时不注意的CSS细节。当然,[MDN](https://developer.mozilla.org/zh-CN/docs/Web/CSS/Reference)是肯定用的到的,也少不了[W3C规范](https://www.w3.org/TR/selectors-3/)。再分享一个,我平时会用到的在线[CSS参考手册](http://css.doyoe.com/),如果开发PC端的网页,还可以参考我以前的[一篇CSS分享](https://www.cnblogs.com/strick/p/4704356.html)。   目前非常流行的CSS预处理器也有必要了解一下,例如[SASS](http://sass.bootcss.com/docs/sass-reference/)、[LESS](http://lesscss.cn/)等。简单地说,它们就是为CSS设计的编程语言,可以减少工程师的开发量,提升效率。 **3)JavaScript**   这是前端的核心,刚开始的话,先学习JavaScript的语法。我那时候不重视语法,拿来就是干,写出来的代码没有JavaScript的味道,在看别人的代码时,也经常会感到疑惑,不能理解他们的写法,例如获取变量默认值“a || b”、迭代方法forEach()、every()、some()等。学习语法首推《[JavaScript权威指南](https://book.douban.com/subject/10549733/)》、《[JavaScript高级程序设计](https://book.douban.com/subject/10546125/)》和《[深入理解ES6](https://book.douban.com/subject/27072230/)》,可以先读权威指南,然后再去高级程序设计,它们都可以当成字典来用。深入理解ES6主要是讲[ES6](https://www.ecma-international.org/ecma-262/6.0/)标准的,前面两本目前的版本主要是讲[ES5](https://www.ecma-international.org/ecma-262/5.1/)标准的,还有一套《[你不知道的JavaScript](https://book.douban.com/subject/26351021/)》系列,需要先有前面的基础,然后再去读的话,会好理解很多。关于ES6的学习,还可以关注我正在连载的《[ES6躬行记](https://www.cnblogs.com/strick/category/1372951.html)》系列,以基础为主,力求简单而又清晰不遗漏的介绍ES6的方方面面。各大浏览器对ES6的支持,可以参考[ECMAScript 6 compatibility table](http://kangax.github.io/compat-table/es6/)。   我以前学习JavaScript没有那么系统,都是根据项目中碰到了某个知识点,然后再去查相关的资料,例如《[触屏touch事件记录](https://www.cnblogs.com/strick/p/5155042.html)》、《[typeof、toString、instanceof、constructor与in](https://www.cnblogs.com/strick/p/4979949.html)》等。东一点西一点的这样补,很是费劲。 **4)数据结构和算法**   大学里有一门数据结构课,但当时感受不到它的威力,工作后才知道,数据结构是多么的重要。数据结构包括队列、栈、链表、树和图等,具体有什么好处可以参考[这篇知乎](https://www.zhihu.com/question/29587605),里面有各种角度的回答。算法被称为程序的灵魂,经典巨著就是《[算法导论](https://book.douban.com/subject/20432061/)》了,我算法太渣,看这本书蛮吃力的。   我后面还专门去学习了一些数学,想着算法实现基于数学,那么先学习更底层的,可能就会好理解一点。之后就去读了《[程序员的数学思维修炼(趣味解读)](https://book.douban.com/subject/25854719/)》、《[生活中的数学](https://book.douban.com/subject/26646345/)》、《[生活中的概率趣事](https://book.douban.com/subject/26220204/)》和《[枕边算法书](https://book.douban.com/subject/30163021/)》等书。大学里还学过一门离散数学,当时觉得枯燥而无用,进了社会后才知道其实很有用,它可以提高抽象思维和严格的逻辑推理能力。现在还在读大学的工科生,真的很有必要将数学打扎实,对以后会有很大的帮助。 **5)网络**   “[网络](https://www.cnblogs.com/strick/category/832640.html)”我只学习了与我的工作相关的内容,例如HTTP、TCP、HTTPS等协议。做前端,至少得看得懂基本的报文,理解TCP的连接、HTTPS的安全性、HTTP的特点等概念。知道这些后,就能方便自己在调试页面的时候,定位BUG,同时也能更和谐的与后端沟通,例如你调个接口,但是没有数据返回,你可以将报文截图,然后发给后端,这样的话,他们就能知道请求和响应的信息,方便他们定位问题。   大学的网络课很枯燥,等于没学。工作后开始买些网络相关的书看,有《[图解HTTP](https://book.douban.com/subject/25863515/)》和《[图解TCP/IP](https://book.douban.com/subject/24737674/)》,这两本比较通俗,容易消化。还有一本加《[HTTP权威指南](https://book.douban.com/subject/10746113/)》,这本非常专业,内容也很全,就是理解起来费劲一点,可当字典来使用。 **6)工具**   作为前端开发,除了要会使用浏览器的Debugger工具之外,还需要会些其它的工具。首推的是Windows上的[Fiddler](https://www.cnblogs.com/strick/p/4570006.html),Mac上可用Charles替代,Fiddler很适合移动端开发,因为手机上的浏览器不像PC上的Chrome、Firefox那样可以打开调试工具,它们在移动端是不存在。如果要抓取手机访问页面时的通信信息,就得借助Fiddler了。再推[Wireshark](https://www.cnblogs.com/strick/p/6344486.html)网络抓包工具,这个工具抓取的信息要比Fiddler更加底层,例如能抓取TCP三次握手的通信。   前端开发目前都需要自动化构建化工具,例如[Gulp](https://www.cnblogs.com/strick/p/5151714.html)、[Webpack](https://webpack.docschina.org/concepts/)等。构建工具可以编译JavaScript、CSS和HTML,例如将ES6代码编译成浏览器支持的ES5代码、SASS文件编译成普通的CSS文件、合并和压缩JavaScript脚本等,改变了前端的开发模式,解放生产力、提高生产效率。   计算机学习需要上机操作,上面所列的知识都需要上机验证,古语云:“纸上得来终觉浅,绝知此事要躬行”,只有真的做了,才能有更深刻的体会。性能、设计模式和安全等知识,对于初学者来说还不适合学习,目前还是以打基础为核心目标。 ## 三、慎思   慎思就是谨慎的思考,学习不是填鸭式的,需要经常思考,这样才能进步。 **1)技术引入**   我以前每次学到点新技术,就迫不及待的想引入到项目中,例如2011年的时候刚学Ajax,就把整个网站的数据交互用Ajax实现,页面渲染就用简陋的字符串拼接完成,代码丑陋至极(详见《[忆2011年的秋天](https://www.cnblogs.com/strick/p/10007237.html)》)。在项目经历越来越多之后,就会谨慎的看待新技术。对新技术保持旺盛的求知欲,是件毋庸置疑的好事儿,但是把它引用到项目中,就得斟酌一下了,例如要考虑可维护性、与之前代码的兼容度、性能和学习成本等方面。   如果工作中的项目不行,那么可以自己开辟一个开源项目,把想要的新技术加进来。例如自己以前学习了CSS3,就试着做了个[在线简历](https://www.cnblogs.com/strick/category/907450.html),用到了阴影、圆角、动画等CSS3新属性。 **2)知其然而所以然**   “[jQuery](https://jquery.com/)”曾经在前端界有着举足轻重的地位,甚至影响了W3C标准的制订,以前很好奇jQuery是怎么运转的,于是就去查看里面的源码,奈何水平有限,很难读懂。而在移动端有个与之类似的精简DOM库:[Zepto.js](https://zeptojs.com/),这个库的代码量少了很多,还是可以读懂的。接着我就试着写一个类似的库,起名叫“[iSelector](https://www.cnblogs.com/strick/p/5357210.html)”。为何要重复造这个轮子,因为在造的过程中,能够了解到以前不知道的Element、Array等相关的方法或属性,加深对DOM的理解,而且在使用Zepto的时候,能够选取最合适的方法。还有一点在《[制造自己的榫卯](https://www.cnblogs.com/strick/p/5347551.html)》中曾提到过,即应用自己封装的函数,就好比榫卯,拿来即可用,而不需要特定的钉子。   除了造轮子之外,研究开源库的源码也是一种理解原理的途径,例如手势插件[Hammer.js的分析](https://www.cnblogs.com/strick/category/907457.html),[开源网站流量统计系统Piwik源码分析](https://www.cnblogs.com/strick/p/9599023.html)等。 **3)举一反三**   对于同一个问题,会有多种解决方案。在平时的学习中,也有必要举一反三,这样在实际应用时,就能选取最优的方案。自己曾经研究过[Loading(加载)动画效果](https://www.cnblogs.com/strick/p/4551818.html),搜集了网上的4种实现方式,分别是PNG图片+CSS3动画、spin.js、Ladda和Sonic.js。这是一个有趣的过程,不仅可以了解到它们各自的优缺点,还能了解它们不同的实现原理。 **4)开发习惯**   开发也是学习的过程,总结出自己独有的开发习惯,能够提升自己的工作效率。我自己在开发中遇到技术或工具都会做个总结,比如项目中用到了HTML5新增的[Canvas元素](https://www.cnblogs.com/strick/category/847676.html),我就会搜集它的属性、方法和第三方库,再将它的实际应用(如海报生成、图像裁剪、文字合成等)从项目中抽象出来,整理成文。再比如以前为了撰写在线文档而使用了静态页面生成器Jekyll,在事后写了[两篇总结](https://www.cnblogs.com/strick/category/823089.html)(关于安装、配置和应用),以备自己日后阅读。   对于工作中遇到的问题,我也会记录下来,例如[IE6的BUG记录](https://www.cnblogs.com/strick/p/3776378.html),我入行的早期还是IE6横行的时代,兼容IE6是必须的,它那千奇百怪的问题折磨着一代人。   程序员要时刻充电,阅读书籍是最好的一个途径之一。每次在阅读完整本书或某个章节后,[我也喜欢做个总结](https://www.cnblogs.com/strick/p/10053205.html),可以简单的把自己感兴趣的内容摘抄下来,也可以根据书中的内容做一次实践,还可以做简单的记录汇总。   我的开发习惯简单的概括就是:总结和记录。 ## 四、笃行   笃行就是学以致用,践履所学,做到知行合一。 **1)PrimusUI**   在学习了CSS3后,为了能使用到那些新属性,于是就设计了一个UI库,名字叫“[PrimusUI](https://www.cnblogs.com/strick/p/5536321.html)”。这是一个轻量、响应式、移动端、易上手、可定制的UI库。包含文本、表单、列表、网格等13个模块,涉及伸缩盒、自定义字体、阴影、伪元素等属性。 **2)制作插件**   要制作一个插件不仅需要懂得HTML和CSS,还要熟悉JavaScript。我制作的[几个插件](https://www.cnblogs.com/strick/category/847678.html)都是从实际项目中剥离封装出来的,例如[移动端H5通用表单验证插件](https://www.cnblogs.com/strick/p/6801453.html),可验证文本框的字数、格式等,并且将验证规则作为控件的一个属性,写在控件的html中,有点MVVM模式的味道。 **3)抽象共性**   平时我还会想各种方式来提升自己的工作效率,以前曾整理出[网站的通用部分](https://www.cnblogs.com/strick/p/3826485.html),对其中的[注册页面](https://www.cnblogs.com/strick/p/3871374.html)做了详细的分解,包括提示、图标、限制和特效等,准备了这些代码,在以后需要时,就能拿来做更新,而不用再重新编写。 **4)表述**   很多时候看了不代表就懂了,得用自己的语言描述某个技术或概念,一直到自己觉得准确了为止,这个过程也能检验出自己对知识的理解到底处于哪个深度。还可以将自己的体会整理成一套符合自己需求的知识体系。 ***** > 已建立一个微信前端交流群,如要进群,请先加微信号freedom20180706或扫描下面的二维码,请求中需注明“看云加群”,在通过请求后就会把你拉进来。还搜集整理了一套[面试资料](https://github.com/pwstrick/daily),欢迎阅读。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2e1f8ecf9512ecdd2fcaae8250e7d48a_430x430.jpg =200x200)
';

2019年

最后更新于:2022-04-02 06:12:15

  开辟前端躬行记栏目,对ES6、React、TS、Vue、CSS3等各种主流技术来了一次系统性的梳理,并将自己的心得记录下来。   在GitHub上发布一个前端面试的仓库:[daily](https://github.com/pwstrick/daily),不断完善其中的内容,加入各类面试干货,在V站中也做了几次推广,效果不错。   重拾英语,读了一本计算机专业英语和英语语法大全(如下图所示),一下子就点醒了我,让我知道了为何每次阅读外文资料都会头疼,理由就是我只重视词汇量,但却忽略了词法分析。每次碰到英语长句就会无从下手,很多单词虽然会读(当然更多时候是单词也读不懂,我的词汇量非常有限),但总是无法有效的组织起来,因为我不会分析这些长句。为了弥补自己这方面的缺陷,在70周年国庆期间,我特地记录了英语基础语法以及书中提到的一些实用的知识点。文章很长,可以作为备忘资料使用。 :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/c6/c1/c6c171df96d0956d2247995a61e66a64_1206x720.png =500x) ## 一、英语基础语法 **1)词类**   英语的词分为十大类:名词、冠词、代词、数词、形容词、副词、动词、介词、连词和感叹词。 (1)**名词**(n = noun):表示人、事物、地点或抽象概念的名称。 (2)**冠词**(art = article):在名词之前的一个虚词,不能单独使用,也没有词义,分为不定冠词(a或an)和定冠词(the)两种。 (3)**代词**(pro = pronoun):用来指代人或事物的词,代词包括: 1. 人称代词,例如:I,you,they,it等。 2. 物主代词,例如:my,his,their,our,mine,hers等。 3. 反身代词,例如:myself,yourself,itself,ourselves,oneself等。 4. 相互代词,例如:each other,one another等。 5. 指示代词,例如:this,that,these,those,such,same等。 6. 疑问代词,例如:who,whom,whose,which,what等。 7. 关系代词,例如:who,whom,whose,which,that等。 8. 不定代词,例如:some,any,no,all,one,every,many,a little,someone,anything等。 (4)**数词**(num. = numeral):表示“数量”和“顺序”的词,前者称为基数词,例如one、twenty等;后者称为序数词,例如first、twentieth等。 (5)**形容词**(adj. = adjective):用来修饰名词,表示名词属性的词。 (6)**副词**(adv. =adverb):可分为四种: 1. 普通副词,例如:together(一起),well(好),carefully(仔细地)等。 2. 疑问副词,例如:when(何时),where(何地),how(如何),why(为什么)等。 3. 连接副词,例如:therefor(因此),then(然后),however(然而),otherwise(否则)等。 4. 关系副词,例如:where,when,why等。 (7)**动词**(v. = verb):表示动作或状态的词,动词根据其意义和作用可分为实义动词、系动词、情态动词和助动词。 1. 实义动词:有完全的词义,并能独立作谓语,例如:explain,stay,have等。实义动词还可根据是否需要宾语分为及物动词和不及物动词。 2. 系动词:用来辅助主语的动词,不能单独做谓语,包括6大类: a)状态系动词,用来表示主语状态,只有be一词。 b)持续系动词,用来表示主语继续或保持一种状况或态度,主要有keep, remain, stay, lie, stand。 c)表像系动词,用来表示"看起来像"这一概念,主要有seem, appear, look。 d)感官系动词,感官系动词主要有feel, smell, sound, taste。 e)变化系动词,这些系动词表示主语变成什么样,变化系动词主要有become, grow, turn, fall, get, go, come, run。 f )终止系动词,表示主语已终止动作,主要有prove, turn out, 表达"证实","变成"之意。 3. 情态动词:表示能力、义务、必要、猜测等说话人的语气和情感。情态动词只能和动词原形一起构成谓语动词。英语情态动词主要有can,may,must及其过去形式could, might等。 4. 助动词:常和主要动词一起构成各种时态、语态、语气等动词形式,以及用于否定和疑问等结构中。英语助动词主要有shall,will,have,be,should,would,do等。 (8)**介词**(prep = preposition):又叫前置词,放在名词、代词或相当于名词的词之前,表示它后面的词与句子中其它成分之间的关系。介词在句中一般不重读,也不能单独作句子成分。介词后面的名词或代词叫做介词宾语。介词和介词宾语合称为介词短语。 1. 简单介词,例如:in,at,for,since等。 2. 复合介词,例如:into(进入), as for(至于), out of(出自)。 3. 二重介词,例如:until after(直至……之后), from among(从……当中)。 4. 短语介词,例如:according to(根据), because of(因为), in front of(在……之前), in the event of(如果)。 5. 分词介词,例如:regarding(关于), considering(考虑到), including(包括)。 (9)**连词**(conj. = conjunction):连接词、短语、从句或句子的词。连词是虚词,在句中一般不重读,也不能在句中单独作句子成分。根据连词本身的含义及其所连接的成分的性质,可分为并列连词和从属连词。 1. 并列连词是连接并列关系的词、短语、从句或句子的连词,例如:and, or, but, for(因为), not only……but also(不仅……而且), neither……nor(即不……也不)。 2. 从属连词是连接主从复合句的主句和从句的连词,例如:that, if, whether(是否), when(当……时候), although, because, so that(结果)。   从连词本身的结构形式看,又可分为: 1. 简单连词,例如:but,because, if。 2. 关联连词,例如:not only……but also, as……as(和……一样)。 3. 分词连词,例如:supposing(假如), provided(倘若)。 4. 短语连词,例如:as if(好象), as soon as(一旦……就), in order that(以便)。 (10)**感叹词**(interj = interjection):表示喜怒哀乐等感情的词,例如:oh, well, why, hello等。 **2)句子成分**   句子成分包括主语、谓语、表语、宾语、状语、补足语和定语。 (1)**主语**是句子的主体,句子所要说明的人或事,通常位于句首,能担当主语的可以是名词、代词、数词、动词不定式、动名词和从句等。 (2)**谓语**对主语加以陈述,用来说明主语的动作或状态,只有动词才能担当谓语,位于主语之后。 (3)**表语**用来说明主语的身份、特征和状态,一般位于系动词之后,能担当表语的可以是名词、代词、形容词、数词、介词短语和副词等。 (4)**宾语**表示动作的对象或承受者,位于及物动词和介词之后,能担当宾语的可以是名词、代词、数词和动名词等。 (5)**定语**用来修饰名词或代词的词、短语或句子,单个词作定语通常位于所修饰的词之前;但短语、从句作定语时通常位于所修饰的词之后,能担当定语的可以是名词、形容词、数词、介词短语、副词和从句等。 (6)**状语**用来修饰动词、形容词、副词等的句子成分,表示地点、时间、原因、目的、结果、条件、方式等,能担当状语的可以是名词、副词、介词短语、动词不定式等。 (7)**补语**用来补充说明主语和宾语,分为宾语补足语和主语补足语,通常由名词、形容词、介词短词或动词不定式等担当。 ## 二、专业英语语法 (1)经常要将一个**被动语态**句子翻译成主动形式,以便强调某个重点,同时更适合汉语的习惯。专业英语中被动语态的句子要占1/3~1/2。 > 例句:The procedure by which a computer is told how to work is called programming. 译文:告诉计算机如何工作的过程称为程序设计。(句子结构:The procedure is called programming.)   语态是动词的一种形式,它表示主语和谓语的不同关系。语态有两种:主动语态和被动语态。**主动语态**表示句子的主语是谓语动作的发出者;**被动语态**表示主语是谓语动作的承受者。也就是说,主动语态句子中的宾语,在被动语态中做句子的主语。由于被动语态句子的主语是谓语动作的承受者,故只有及物动词才会有被动语态。在科技英语中,为了着重说明客观事物和过程,被动语态用得更为广泛。被动语态构成如下: > 主语 + be +(及物动词)过去分词 1. **一般现在时**的被动语态构成如下: > 主语 + am(is,are)+及物动词的过去分词 例句:I am asked to solve this problem by him. 译文:他请我解决这个问题。 2. **一般过去时**的被动语态构成如下: > 主语 + was(were)+及物动词的过去分词 例句:That plotter was not bought in Beijing. 译文:那台绘图仪不是在北京买的。 3. **一般将来时**的被动语态构成如下: > 主语 + will be + 及物动词的过去分词 例句:What tools will be needed for the job? 译文:工作中需要什么工具?   当主语是第一人称时,可用: >主语 + shall be + 及物动词的过去分词 例句:I shall not be allowed to do it. 译文:不会让我做这件事的。 4. **现在进行时**的被动语态构成如下: > 主语 + is(are)being + 及物动词的过去分词 例句:Our printer is being repaired by John. 译文:约翰正在修理我们的打印机。 5. **过去进行时**的被动语态构成如下: > 主语 + was(were)being + 及物动词的过去分词 例句:The laboratory building was being built then. 译文:实验大楼当时正在建造。 6. **现在完成时**的被动语态构成如下: > 主语 + have(has)been + 及物动词的过去分词 例句:New techniques have been developed by the research department. 译文:研究部门发展了新技术。 7. **过去完成时**的被动语态构成如下: > 主语 + had been + 及物动词的过去分词 例句:Electricity had been discovered for more than one thousand years by the time it came into practical use. 译文:电在发现一千多年之后,才得到实际应用。 (2)**祈使语句**(无主语)常用来表示指示、建议、劝告和命令等意思,可以用于说明书、操作规程和注意事项等资料中。 > 例句:Must be structure field name. 译文:需要的是结构字段名。 (3)用**虚拟语气**(if)表达假设或建议。在说明事理并涉及到各种前提和条件时,也可以用虚拟语气。 > 例句:Backing up your files safeguards them against loss if your hard disk fails or you accidentally overwrite or delete data. 译文:当硬盘发生故障或用户意外覆盖、删除数据时,备份可以保护文件,避免损失。  (4)**It...结构**在专业英语中用的较多。 1. It is +名词+从句 * It is a fact that…… 事实是…… * It is a question that …… ……是个问题 * It is no wonder that …… 毫无疑问…… * It is the law of nature that …… ……是自然规律 * It is a common practice to …… 通常的做法是…… 2. It is +形容词+从句 * It is necessary that …… 有必要…… * It is clear that …… 很清楚…… * It is important that …… 重要的是…… * It is natural that …… 很自然的是……  3. It is +过去分词+从句 * It is said that …… 据说…… * It is believed that …… 确信…… * It has been proved that …… 已证明…… * It is generally considered that …… 人们普遍认为…… 4. It is +介词短语+从句 * It is from this point of view that ……由此看来…… * It is of great significance …… ……具有重大的意义 * It is only under these conditions that …… 只有在这些条件下才能…… 5. It +不及物动词(后面不跟宾语)+从句 * It follows that …… 由此可见…… * It turned out that …… 结果是…… * It may be that …… 可能…… * It stands to reason that …… 显然…… (5)**面对长句**,首先是找出谓语和主语,其次是找出连接词(包括连接代词、连接副词、关系代词和关系副词等)。 (6)**多重复句**的分句之间有两种关系,一种是并列,另一种是主从,这两种关系常常同时出现在一个句子中。 > 例句:This instrument works on the principle that each individual substance emits a characteristic spectrum of light when its molecules are caused to vibrate by the application of heat, electricity, etc.; and after studying the spectrum which he had obtained on this occasion, Hildebrand reported the gas to be nitrogen. 译文:这个仪器工作的原理是,当物质的分子由于加热、通电等而引起振动时,每种物质产生一种独特的光谱;在研究了此种情况下收集到的光谱后, Hildebrand宣布这种气体是氮。(用and连接的两条并列的主句) (7)**动词不定式**是非谓语动词的一种,由不定式符号to加动词原形构成,可以有自己的宾语、状语及宾语补足语。 1. 动词不定式(短语)作**主语**,较多地用来表示一个特定的行为或事情,谓语动词需要用第三人称单数,且常用it作形式主语。 > 例句:To know something about computer is important. 译文:懂得一些计算机的知识很重要。(To know something about computer是动词不定式短语) 不定式短语作主语时,为了句子的平衡,常常把它放在句尾。而用it作形式主语代替不定式放在句首。 例句:It is necessary to learn Visual BASIC. 译文:学习Visual BASIC是很有必要的。 2. 不定式可放在系动词后面作**表语**。 > 例句:To see is to believe. 译文:眼见为实。(to believe作表语) 3. 不定式(短语)在某些及物动词后可作**宾语**。这类及物动词通常有:want,like,wish,hope,begin,decide,forget,ask,learn,help,expect,intend,promise,pledge等。 > 例句:This helps to save coal and reduce the cost of electricity. 译文:这有助于节约用煤以及降低发电成本。   当某些动词后面作宾语的不定式必须有自己的补语才能使意思完整时,要用it作形式宾语,而将真正的宾语(即不定式)后置。常用这种结构的动词有:think、find、make、consider、feel等。 > 例句:The use of semiconductor devices together with integrated circuits make it possible to develop miniaturized equipment. 译文:半导体装置和集成电路一起使用使得发展微型设备成为可能。(to develop miniaturized equipment作宾语) 4. 动词不定式(短语)作**定语**时,通常放在它所修饰的名词(或代词)之后。 > 例句:He never had the change to learn computer. 译文:他从来没有学习计算机的机会。(to learn computer作定语) 5. 不定式作**状语**可以修饰句中的动词、形容词、副词或全句。主要表示目的、程度、结果、范围、原因等。 > 例句:We are glad to hear that you have bought a computer. 译文:听说你买了一台计算机,我们十分高兴。(表示原因) 例句:To meet our production needs, more and more electric power will be generated. 译文:为了满足生产的需要,将生产越来越多的电力。(表示目的) 例句:Solar batteries have been used in satellites to produce electricity. 译文:人造卫星上已经用太阳能电池发电。(表示结果) 6. 某些及物动词要求不定式作**宾语补足语**。宾语补足语是对宾语的补充说明。 >例句:A force may cause a body to move. 译文:力可以使物体移动。(to move是宾语补足语)   当make、let、have、see、hear、watch、notice、feel等动词后面用不定式 作宾语补足语时,不定式都不带to。 >例句:I often hear people talk about this kind of printer. 译文:我经常听人们谈论这种打印机。(talk about this kind of printer是个不带to的动词不定式短语) 7. 当主动语态的句子变成被动语态时,主动语态句子中的宾语补足语就在被动语态中变成**主语补足语**。 > 例句:He was asked to do the experiment at once. 译文:有人请他马上做实验。   当make、let、have、see、hear、watch、notice、feel等动词的句子变为被动语态时,原来在主动语态时作宾语补足语的动词不定式这时也变为主语补足语,此时,动词不定式中的to不能省略。 > 例句:He was made to finish repairing the printer. 译文:他被迫马上修好打印机。 8. 不定式的特殊句型。 > 例句:I am afraid the box is too heavy for you to carry it. 译文:这箱子太重,恐怕你搬不动。(too…to  太……以至于……) 例句:Go in quietly so as not to wake the baby. 译文:轻点进去,别惊醒了婴儿。(so as to  以至于,为了) (8)**定语从句**又称关系从句,在句子中起定语作用,修饰一个名词或代词,有时也可修饰一个句子。被定语从句修饰的名词、词组或代词叫先行词,定语从句通常跟在先行词的后面。 > 例句:This is the software that I would like to buy. 译文:这就是我想买的那个软件。(that I would like to buy是定语从句,this software是先行词)   通常,定语从句都由关系代词that、which、who、whom、whose和关系副词when、where、why、how引导。关系代词和关系副词往往放在先行词和定语从句之间,起联系作用,同时还代替先行词在句中担任一定的语法成分,如主语、宾语、定语和状语等。 1. **限定性定语从句**与先行词关系密切,是整个句子不可缺少的部分,没有它,句子的意思就不完整或不明确。这种定语从句与主句之间不用逗号隔开,译成汉语时,一般先译定语从句,再译先行词。   限定性定语从句如果修饰人,一般用关系代词who,有时也用that。若关系代词在句子中作主语,则who用得较多,且不可省略;若关系代词在句子中作宾语,就应当使用宾格whom或that,但在大多数情况下都可省略。若表示所属,就应用whose。限定性定语从句如果修饰物,用that较多,也可用which。他们可在句中作主语,也可作宾语。若作宾语,则大多可省略。 >例句:Those who agree with me please put up your hands. 译文:同意我的观点的人请举手。(who agree with me是定语从句,修饰Those,who既是引导词,也是句中的主语,不能省略) 2. **非限定性定语从句**与先行词的关系比较松散,从句只对先行词附加说明,如果缺少,不会影响句子的主要意思。从句与主句之间常用逗号隔开,译成汉语时,从句常单独译成一句。   非限定性定语从句在修饰人时用who、whom或whose,修饰物时用which,修饰地点和时间时用where和when引导。关系代词that和关系副词why不能引导非限定性定语从句。 >例句:We do experiments with a computer, which helps to do many things. 译文:我们利用计算机做实验,计算机可帮助做许多工作。(which引导的定语从句是对先行词a computer的说明) (9)英语中的**状语从句**通常由从属连词和起连词作用的词组来引导,用来修饰主句中的动词、形容词、副词等。   状语从句可位于主句前,也可位于主句后;前置时,从句后常用逗号与主句隔开;后置时,从句前通常不使用逗号。状语从句在句子中作状语,修饰可表示时间、原因、目的、结果、条件、比较、方式、让步和地点等不同含义。  1. 引导**时间状语从句**的连词或词组很多,但可根据所表示时间的长短以及与主句谓语动词行为发生的先后这两点去理解和区别。这些连词或词组有: * as(当 ┅ 时候,随着,一边 ┅一边),after(在 ┅之后), * as soon as(一 ┅就),before(在 ┅ 之前) * when(当 ┅ 时候),while(在 ┅ 期间), * until(till)(直到 ┅ 才),since(自从 ┅以来) * no sooner…than(刚一 ┅就┅),once(一旦), * every time(每次)等。 >例句:It changes speed and direction when it moves. 译文:在运动时它改变速度和方向。  2. 引导**原因状语从句**的连词和词组有:because(因为),as(由于),since(既然,由于),now that(既然),in that(因为)等。 >例句:Electric energy is used most widely mainly because it can be easily produced, controlled, and transmitted. 译文:电能用得最广,主要是因为发电容易,而且控制和输送也方便。 3. **目的状语从句**由in order that(为了,以便),so that(为了,以便),that(为了),lest(以免,以防),for fear that(以免,以防)等引导。 >例句:He handled the instrument with care for fear that it should be damaged. 译文:他小心地弄那仪器,生怕把它弄坏。 4. 引导**结果状语从句**的连词有:so that(结果,以致),so … that(如此……以致),such … that(这样的……以致)等。注意so后接形容词或副词,而such后跟名词。so还可以与表示数量的形容词many,few,much及little连用,形成固定搭配。 >例句:This problem is very difficult that it will take us a lot of time to work it out. 译文:这道题很难,我们要用很多时间才能解出。 5. **条件状语从句**用来表示前提和条件。通常由以下连词引导: * if(如果),unless(除非),provided / providing that(假如), * as long as(只要),in case(如果),on condition that(条件是……), * suppose / supposing(假如)等。 >例句:A physical body will not tend to expand unless it is heated. 译文:除非受热,否则物体不会有膨胀的倾向。 6. **比较状语从句**经常是省略句,一般都是省略了重复部分;省略之后不影响句意,反而结构简练。部分比较状语从句还有倒装现象。比较状语从句由下列连词引导: * as … as(像…… 一样),than(比), * not so(as)… as(不像…… 一样), * the more … the more(愈……愈), * as … so(正如……那样)等。 >例句:Electron tubes are not so light in weight as semiconductor devices. 译文:电子管的重量不如半导体器件那么轻。 7. **方式状语从句**通常由as(如同,就像),as if(as though)(好像,仿佛)等连词引导。 >例句:The earth itself behaves as though it were an enormous magnet. 译文:地球本身的作用就像一个大磁铁一样。 8. **让步状语从句**表示在相反的(不利的)条件下,主句行为依然发生了。引导让步状语从句的有: * (al)though(虽然),even if(though)(即使), * as(尽管),however(无论怎样), * whatever(不管),whether…or(不论 ┅ 还是), * no matter(how,what,where,when)(不管怎样,什么,哪里,何时)等。 >例句:It is important to detect such flows, even if they are very slight, before the part is installed. 译文:在安装部件之前,即使变形很轻微,也必须探测出来。 9. 引导**地点状语从句**的词常用的有:where(在 ┅ 地方,哪里),wherever(在任何地方),everywhere(每一 ┅ 地方)等。 >例句:She found her pen where she had left them. 译文:她的笔是她在原来放笔的地方找到的。 10. 状语从句的翻译方法。   a)**顺译法**。当表示目的、原因等的状语从句在主句之前出现时,直接按照原句语序翻译。如果这些状语出现在主句之后,可以将它们提前或者保持原句顺序,翻译在主句之后,对主句意思起到补充说明的作用。 >例句:Whenever you need any specific information, you can search it by Internet. 译文:每当你需要任何专业信息时,你都可以通过互联网搜索得到。   b)**倒译法**。当原文中的时间状语和地点状语在主句后面时,必须倒译;当原文中的原因状语从句、条件状语从句和让步状语从句在主句后面时,一般也可以倒译;另外当特殊比较从句在主句后面时,必须倒译。 >例句:Many business became aware of network when they bought an expensive laser printer and wanted all the PCs to print to it. 译文:当企业购买了一台昂贵的激光打印机,并希望其所有的计算机都能使用该打印机时,他们就想到了网络。   c)**转译法**。当通过对原文的逻辑含义进行分析后,会发现when、where不再单纯的表示时间、地点,或者翻译成“当……”或“在……”不合适时,可以考虑这些词也可以表示“如果”的意思。另外,当状语从句比较短,而关联词可以省略时,可以把状语从句翻译成并列成分,这样也使得句子比较紧凑。 >例句:Where the Hz is too small a unit, we may use the MHz. 译文:当用赫兹作单位太小时,我们可以使用兆赫兹。   d)**缩译法**。有些关联词,比如“so…that…”在很多情况下,可以省略翻译,这样使得汉语的译文就很简练,对于这样的句子就可以采用“缩译法”进行翻译。 >例句:Computers work so fast that they can solve a very difficult problem in a few seconds. 译文:计算机工作如此迅速,一个很难的题目几秒钟内就可以解决。 ## 三、专业英语词汇 (1)**功能词**,包括介词、连词、冠词、代词等,为词在句子中的结构关系提供了结构信号,出现频率最高的10个词都是功能词,其顺序为: * the,of,in,and,to,is,that,for,are,be。 >例句:When the recorder is operated in the record mode, previous recordings are automatically erased. 译文:当录音机工作在录音模式时,以前的录音被自动擦除。 (2)**合成词**,多数以连字符“-”连接单词构成(例如object-oriented、file-based、input、online等),或者采用短语构成(例如machine building、liquid crystal等)。 * 合成方法有名词+名词、形容词+名词、动词+副词、名词+动词、介词+名词、形容词+动词等。 (3)**派生词**,通过对词根加上各种前缀和后缀构成的新词。这些词缀有: * 名词词缀,例如inter-,sub-,in-,tele-,micro-等。 * 形容词词缀,例如im-,un-,-able,-al,-ing,-ed等。 * 动词词缀,如re-,under-,de-,-en,con-等。   加前缀构成新词只改变词义,不改变词性 ,例如multimedia 、interface 、hypertext等。   具有否定意义的前缀: * anti- 表示“反对”   antibody(抗体) * counter- 表示“反对,相反”   counterbalance(反平衡) * contra- 表示“反对,相反”   contradiction(矛盾) * de- 表示“减少,降低,否定”   decrease(减少) * dis- 表示“否定,除去”  disassemble(拆卸) * in- il-(在字母l前)表示“不”   inaccurate(不准确的) illegal(违法的) * im-(在字母m、b、p前)表示“不”  impure(不纯的) * mis- 表示“错误”   non- 表示“不,非”  mislead(误导) * un- 表示“不、未、丧失”  unaccountable(说明不了的)   加后缀构成新词改变词性: * electric(形容词)+ ity → electricity(名词:电,电学) * liquid(名词)+ ize → liquidize(动词:液化) * conduct(动词)+ or → conductor(名词:导体) * invent(动词)+ ion → invention(名词:发明) * propel(动词) + l + er → propeller(名词:推进器) * simple(形容词) + icity → simplicity(名词:单纯,注意拼写有变化) * maintain(动词) + ance → maintenance(名词:维修,注意拼写有变化) (4)**借用词**,是指借用公共英语及日常生活用语中的词汇来表达专业含义。一般来自厂商名、商标名、产品代号名、发明者名、地名等,也可将公共英语词汇演变成专业词意而实现,例如cache、firewall、flag等。 (5)通过**词类转化**构成新词,指一个词不变化词形,而由一种词类转化为另一种或几种词类,英语中名词、形容词、副词、介词可以转化成动词,动词、形容词、副词、介词可以转化成名词。 * coordinate(动词)协调→ coordinate(名词)坐标 * center(名词)中心 → center(动词)集中 * Asian(名词)亚洲人 → Asian(形容词)亚洲的 * break(动词)打破 → break(名词)间歇 * close(关上) → close(副词)靠近 * clear(形容词)明确的 → clear(动词)清除 (6)**分词**是非谓语动词的一种。分词有现在分词和过去分词两种。规则动词的现在分词由动词原形加-ing构成,过去分词由动词原形加-ed构成;不规则动词的分词形式,其构成是不规则的。分词具有形容词和副词的作用;同时还保留着动词的特征,只是在句中不能独立作谓语。 1. 现在分词。 >(1) 作定语 例句:They insisted upon their device being tested under operating conditions. 译文:他们坚持他们的装置要在运转条件下检测。 (2) 作表语 例句:The result of the experiment was encouraging. 译文:实验结果令人鼓舞。 (3) 作补足语 例句:You’d better start the computer running. 译文:你还是把计算机启动起来好。 (4) 作状语 例句:While making an experiment on an electric circuit, they learned of an important electricity law. 译文:他们在做电路实验时,学到了一条重要的电学定律。 2. 过去分词。 >(1) 作定语 例句:The charged capacitor behaves as a secondary battery. 译文:充了电的电容就像一个蓄电池一样。 (2) 作表语 例句:Some substances remain practically unchanged when heated. 译文:有几种物质受热时几乎没有变化。 (3) 作补足语 例句:I don’t know if we can get the computer repaired in time. 译文:我不知道我们能否按时修好计算机。 (4) 作状语 例句:Given the voltage and current, we can determine the resistance. 译文:已知电压和电流,我们就可以求出电阻。 (7)**动名词**是一种非谓语动词,由动词原形加词尾-ing构成,形式上和现在分词相同。由于动名词和现在分词的形成历史、意义和作用都不一样,通常把它们看作是两种不同的非谓语动词。动名词具有动词词性和名词词性,因而又可以把它称为“动词化的名词”和“名词化的动词”。在句中充当主语、表语、定语和宾语等, 动名词也可以有自己的宾语和状语,构成动名词短语。 1. **作主语**,表示一件事或一个行为,其谓语动词用第三人称单数。 >例句:Changing resistance is a method for controlling the flow of the current. 译文:改变电阻是控制电流流动的一种方法。   动名词作主语时,也可用it作形式主语,放在句首,而将真正的主语——动名词短语放在谓语之后。  >例句:It’s no good using this kind of material. 译文:采用这类材料是毫无用处的。 2. 动名词可以在一些及物动词和介词后**作介词宾语**。要求动名词作宾语的常用及物动词有:finish,enjoy,avoid,stop,need,start,mean等。 >例句:This printer needs repairing. 译文:这台打印机需要修理一下。   英语中,suggest、finish、avoid、stop、admit、keep、require、postpone、practice、fancy、deny等动词都用动名词作宾语,不能用不定式作宾语。但是在love、like、hate、begin、start、continue、remember、forget、regret等词后面可以用动名词作宾语,也可以用动词不定式作宾语。 >例句:Do you like watching/to watch TV ? 译文:你喜欢看电视吗?   动名词作宾语时,如本身带有补足语,则常用it作形式宾语。而将真正的宾语——动名词放在补足语的后面。 >例句:I found it useless arguing with her. 译文:我发现与她辩论没有用。 3. 动名词**作表语**为名词性表语。表示主语的内容,而不说明主语的性质。主语常为具有一定内涵的名词,这点与不定式作表语相似。动名词作表语与进行时的区别在于主语能否执行该词的行为。能执行,即为进行时;否则,即为动名词作表语(系表结构)。 >例句:The function of a capacitor is storing electricity. 译文:电容器的功能是存储电能。(storing是动名词,storing electricity作表语) 4. 动名词**作定语**为名词性定语,说明名词的用途,与所修饰名词之间没有逻辑主谓关系,这点是与现在分词作定语相区别的关键。动名词作定语只能使用单词,不可用动名词短语;只能放在所修饰名词前面,不可后置。 >例句:English is one of the working languages at international meeting. 译文:英语是国际会议上使用的工作语言之一。 5. 动名词在句中的作用相当于名词,故可**做宾语补足语**。动名词只能在少数动词后作宾语补足语,补充说明宾语的性质、行为或状态,与宾语具有逻辑主谓关系。 >例句:We call this process testing. 译文:我们称这个过程为检测。(testing作宾语this process的补足语) ## 四、专业资料的翻译 **1)阅读**   **词汇和语法结构**是阅读所必备的语言知识,但仅此是难以进行有效阅读的,还需具备运用这些语言知识的能力,包括根据上下文来确定准确词义好猜测生词词义的能力,辨认主题和细节的能力,正确理解连贯的句与句之间、段与段之间的逻辑关系的能力。阅读能力的提高可从三个方面进行训练。 1. **打好语言基本功**。首先,词汇是语言的建筑材料。其次,语法是语言中的结构关系,用一定的规则把词或短语组织到句子中,以表达一定的思想。 2. **在阅读实践中提高阅读能力**。在打好语言基本功的基础上,还要进行大量的阅读实践。 3. **掌握正确的阅读方法**。阅读时,注意每次视线的停顿应以一个意群为单位,而不应以一个单词为单位。   可以把一篇文章分成几个小部分、几页来读,甚至一次就读一个自然段。阅读要想有效果,就要能够辨认并记住文章中的重要细节。一个细节就是一个段落中的一条信息或一个事实。它们或者给段落的主体提供证据,或者为其提供例子。 **2)翻译技巧** 1. **原文的分析与理解**。采用分组归类的方法辨明主语、谓语、宾语及各种修饰语,联系上下文来分析和理解句与句之间、主句与从句之间的关系。重视语法分析,突出句子骨架,采用分解归类,化繁为简,逐层推进理解的策略。 >例句:The technical possibilities could well exist, therefore, of nation-wide integrated transmission network of high capacity, controlled by computers, interconnected globally by satellite and submarine cable, providing speedy and reliable communications throughout the world. 译文:因此,在技术上完全有可能实现全国性的集成传输网,这张网络容量大,可由计算机控制,并能通过卫星和海底电缆与全球相联系,提供全世界范围内高速、可靠的通信。 (possibilities是主语,could well exist是谓语,介词短语of nation-wide...cable除了修饰possibilities之外没有其他名词可以承受, 分词短语controlled...和interconnected...又进一步修饰介词短语中的network,providing...the world表示结果的状态) 2. **词义的选择和引申**。由于英语词汇来源复杂,一词多义和一词多性的现象十分普遍,因此,一定要选择合适的词义。 >例句:The electronic microscope possesses very high resolving power compared with the optical microscope. 译文:与光学显微镜相比,电子显微镜具有极高的分辨率。 例句:Energy is the power to do work. 译文:能量是指做功的能力。   英语一词多义现象使得在汉语中很难找到绝对相同的词。如果仅按词典意义原样照搬,逐字硬译,不仅使译文生硬晦涩,而且会此不达意,造成误解。因此,有必要结合语言环境透过外延看内涵,把词义做一定程度的扩展、引伸。 >例句:Two and three make five. 译文:二加三等于五。(make本意为“制造”,这里扩展为“等于”) 例句:The report is happily phrased. 译文:报告措词很恰当。(happily不应译为“幸运地”) 3. **词语的增减与变序**。在英译汉时,不可能要求二者在词的数量上绝对相等。通常应该依据句子的意义和结构适当增加、减少或重复一些词,以使译文符合汉语习惯。 >例句:The more energy we want to send, the higher we have to make the voltage. 译文:想要输电越多,电压也就得越高。(省略we)   英语中各种短语或定语从句作修饰语时,一般都是后置的,而汉语的修饰语几乎都是前置的,因而在翻译时应改变动词的顺序。同时,还应注意英语几个前置修饰语(通常为形容词、名词和代词)中最靠近被修饰词的为最主要的修饰语,翻译时应首先译出。此外,英语中的提问和强调也大都用倒装词序,翻译时应注意还原。 >例句:Such is the case. 译文:情况就是这样。(倒装还原) 例句:The transformer is a device of very great practical important which makes use of the principle of mutual induction. 译文:变压器是一种利用互感原理的在实践中很重要的装置。(从句) 4. **词性及成分的转换**。尝试改变原文中某些词的词性以适应汉语的表达习惯,如实词之间,虚词之间以及实词和虚词之间都可以互换。 >例句:Extreme care must be taken to the selection of algorithm in program design. 译文:在程序设计中必须注意算法的选择。(名称care转为动词并作为谓语来翻译)   视具体情况将句子的某一成分(主语、谓语、宾语、定语、表语、状语或补语)译成另一成分,或者将短语与短语、主句与从句、短语与从句进行转换。 >例句:Electronic computers must be programmed before they can work. 译文:必须先为电子计算机编好程序,它才能工作。(从句译为主句) 5. **标点符号的处理**。 * 英语中逗号的使用范围远远大于汉语,其具有汉语的顿号、逗号和其他一些标点符号的作用。 * 英语分号的使用范围较汉语广,也不一定像汉语那样用于连接并列成分。 * 英语中的破折号和省略号都较汉语的短,只及汉语中相应符号长度的一半。 6. **长句的翻译**。在处理长句时,一般采用顺译法、倒译法和分译法。其中分译法可将长句分解成几个独立的句子,顺序基本不变,并注意前后连贯,同时注意增加一些连词。 >例句:The structure design itself includes two different tasks, the design of the structure, in which the sizes and locations of the main members are settled, and the analysis of this structure by mathematical or graphical methods or both, to work out how the loads pass through the structure with the particular members chosen. 译文:结构设计包括两项不同的任务:一是结构设计,确定主要构件的尺寸和位置;二是用数学方法或图解方法或二者兼用进行结构分析,以便在构件选定后计算出各载荷通过结构的情况。 7. **翻译科技资料时应注意的问题**。 * 首先要把原文全部阅读一遍,了解其内容大意,专业范围和体裁风格,然后开始翻译。 * 然后遇到生词,不要马上查字典,应该先判断是属于普通用语,还是属于专业用语。 * 接着在翻译时,最好不要看一句译一句,更不能看一个词译一个词。而应该看一小段,译一小段。这样做便于从上下文联系中辨别词义,也便于注意句与句之间的衔接,段与段之间的联系,使译文通顺流畅,而不致成为一句句孤立译文的堆彻。 * 翻译科技文献要求译文必须概念清楚,逻辑正确,数据无误。文字简练,语句流畅。 参考资料: [零基础入门英语之零基础英语语法入门](https://zhuanlan.zhihu.com/p/22509992) [英语基本语法有哪些](https://www.tutorabc.com.cn/About/NewsDetail/7542.html) [英语基础语法知识](https://wenku.baidu.com/view/8a23a8114431b90d6c85c73c.html) [英语十大词类讲解](https://www.tutorabc.com.cn/About/NewsDetail/6927.html) [系动词](https://baike.baidu.com/item/%E7%B3%BB%E5%8A%A8%E8%AF%8D) ***** > 已建立一个微信前端交流群,如要进群,请先加微信号freedom20180706或扫描下面的二维码,请求中需注明“看云加群”,在通过请求后就会把你拉进来。还搜集整理了一套[面试资料](https://github.com/pwstrick/daily),欢迎阅读。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2e1f8ecf9512ecdd2fcaae8250e7d48a_430x430.jpg =200x200)
';

2018年

最后更新于:2022-04-02 06:12:12

  在2018年9月,经过三个多月的出版社三审三校,撰写的书籍终于正式出版,登录到了各大在线电商网站以及线下书店,除了出版社会做推广之外,自己也会想办法做点推广。例如: 1. 编写软文、海报和迷你书,将迷你书上传到一些平台中。 2. 在百度百科和豆瓣读书建立词条。 3. 在V站和博客中组织评论赠书活动。 4. 在知乎的相关问答中植入书籍名称。 5. 百度搜索关键词优化,收效甚微。   下面是当时写的软文,标题是“面试的自信来源于扎实的基础”。 ## 一、前端四部分   跳槽是每个人都会经历的一件事,而进新公司的途径也是多样的。有的人依靠朋友推荐,直接加入,但更多的人是通过层层面试,最后符合该公司要求后才加入的。而面试的时候就会被提问,问到的问题可以说五花八门,令人不知所措,常说机会留给有准备的人,因此,不管怎样,都得在面试前好好准备准备。但前端这个工种和后端有很大的不同,它的技术栈非常广,知识的更新迭代络绎不绝,每年都会涌现出新的概念、思想或框架,最后给人的感觉就是要准备的知识量非常巨大,无从下手。无论是新接触前端的年轻工程师,还是工作多年的老鸟,有时候都会有这样的迷茫,为了能够成功拿到offer,面试之前该如何系统的学习前端知识,该完善自己的哪些不足。我个人觉得要拿下offer,首先要有扎实的前端基础,而这绝对不是一朝一夕就能实现的,需要经历一个艰难的过程才行。   前端离不开三部分:HTML、CSS和JavaScript。HTML是一种用于创建网页的标记语言,最新版本是HTML5,HTML5不仅仅是HTML的最新版本,它还是一系列Web技术的集合,包括CSS3、JavaScript、多媒体、缓存和无障碍访问等,关于HTML有一本经典的书籍《[HTML5权威指南](https://book.douban.com/subject/25786074/)》。CSS即层叠样式表,是一种样式语言,用于控制页面的表现(外观和内容排版),是HTML的补充,最新版本是CSS3,关于CSS也有一本经典的书籍《[CSS权威指南](https://book.douban.com/subject/2308234/)》,不过目前第三版只讲到了CSS2.1,如果要查阅CSS3相关的内容,可以参考大漠老师编撰的《[图解CSS3](https://book.douban.com/subject/25920727/)》。JavaScript是一种通过解释执行的高级编程语言,目前主流的版本是ES6,但很多浏览器还不能完美支持该版本的特性,因此ES5使用的也比较多,JavaScript可参考的数据比较多,例如《[JavaScript权威指南](https://book.douban.com/subject/10549733/)》、《[JavaScript高级程序设计](https://book.douban.com/subject/10546125/)》、《[你不知道的JavaScript系列](https://book.douban.com/subject/26351021/)》、《[深入理解ES6](https://book.douban.com/subject/27072230/)》等,都非常经典。可先阅读《JavaScript高级程序设计》,然后有疑惑的地方可以结合《JavaScript权威指南》来对比。并且可把《JavaScript权威指南》当成字典使用,因为直接读的话,可能索然无味,但当细细品味的时候,里面会有很多惊喜。前面两本中ES6的内容比较少,《你不知道的JavaScript系列》有专门讲解ES6的,并且该系列表述言简意赅,还提到了许多平时没有意识到的JavaScript中的盲点。《深入理解ES6》是专门讲解ES6的,内容非常丰富,结合许多实例,深度剖析了内在原理,而不仅仅流于表面,当然,还有阮一峰老师的开源书籍《[ES6标准入门](https://book.douban.com/subject/27127030/)》也是值得推荐的。除了这三部分之外,前端还需要修炼网络通信原理,这是与每个前端都息息相关的,理解其中的门道,非常有助于日常的项目开发,推荐阅读通俗易懂的《[图解HTTP](https://book.douban.com/subject/25863515/)》和《[图解TCP/IP](https://book.douban.com/subject/24737674/)》,然后在此基础上可以去阅读《[HTTP权威指南](https://book.douban.com/subject/10746113/)》,这本比较拗口,也可当作字典使用。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/cb/94/cb948d64661123d2cd44db30899540cb_1646x1322.png =800x) ##  二、稳扎稳打   前面所列的四部分仅仅是些前端基础,但内容已经非常多了,如果自己的时间有限,并且想在用短期内有所成效的话,推荐阅读《[前端程序员面试笔试宝典](http://product.dangdang.com/25342065.html)》。这部书浓缩了刚刚提到的四部分,可以将其作为前面部分的补充,书中列举了平时用的比较频繁的知识点,包括HTML5和CSS3等最新的知识点,并且在每一节中都配置了几道例题,让人加深印象,还介绍了一些面试技巧,最大程度的帮助读者能拿到自己满意的offer。 :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/48/fe/48fe3fdf84ec141b5677a582ec6666b4_1079x1445.jpg)   讲了这么多,其实上面也仅仅是第一步,要想完全驾驭前端,还需要掌握其它各项软硬技能。这其中包括数据结构、算法、数学、计算机组成原理、设计模式、前端框架(React、VUE等)、前端工程化(Gulp、Webpack等)、性能优化、正则和安全等硬技能。这里顺便说一下,个人觉得前端有必要掌握一门服务器语言,PHP、Java、Node.js等都可以,这样在与服务器沟通的时候能减少障碍,合作更加愉快,毕竟与服务器要经常打交道,把关系弄僵不利于开展工作。前端从业人员最好还要具备一些沟通、用户体验、产品知识等软技能,因为前端起到一个承上启下的作用,解决了下层的服务器的问题,还要解决上层的产品和UI的问题,有了这些软件技能后,就能避免不必要的麻烦出现,有时候让产品和UI接受自己的建议,能够很大程度上减少许多工作量,更快速的完成目标。最后,说一个外行对我们程序员的误解,他们总是觉得程序员的英语都很棒,但其实不然,很多人的英语都很菜,只不过代码用英文字符比较多,让人产生了误解。不过,如果你的英语很溜,那么你不但能获得更多的机会,而且能比别人学到更多的知识,毕竟很多软件技术都来源于国外,会英语的话就能在第一时间尝鲜,并且遇到问题,用英语搜索能得到许多不错的答案,国内很多都是重复的。   本文并没有列举面试的技巧,只是简单介绍了如何有系统性的学习前端基础,古人云:“千里之行,始于足下”,只要勇敢的迈出第一步,坚持稳扎稳打,相信很快就会有收货。 ***** > 已建立一个微信前端交流群,如要进群,请先加微信号freedom20180706或扫描下面的二维码,请求中需注明“看云加群”,在通过请求后就会把你拉进来。还搜集整理了一套[面试资料](https://github.com/pwstrick/daily),欢迎阅读。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2e1f8ecf9512ecdd2fcaae8250e7d48a_430x430.jpg =200x200)
';

工匠精神

最后更新于:2022-04-02 06:12:10

  最近有点浮躁,也有点膨胀,工作也提不起劲,有点混混的节奏。   在此期间看到了本书《[工匠精神](https://link.zhihu.com/?target=https%3A//book.douban.com/subject/24502209/)》,读了几遍,矫正了一下自己。正像高达OO中的人物们一样,找到了一个战斗的理由。 ## 一、大家对工作的常规理解 1. 好工作的定义:薪水多,轻松,社会地位高。 2. 工作就是为了赚钱,养家糊口,图生存,工作等于钱。 3. 埋怨工资低,待遇差,羡慕别人的福利比自己好。 4. 工作是一种伤害身心健康的事。 5. 高收入等于快乐,人的快乐指数跟工作息息相关。 6. 仅仅看到别人的收获,却不想想人家的付出。 7. 快餐式生活,只求速度,不求内涵。反映在工作上是功利心,浮躁心和投机心。想着投机取巧,以小博大。 8. 做事总想多快好省,工作毛毛糙糙,只想着交差。有点付出,就想要回报,否则觉得吃亏不划算。 9. 缺失信仰,或者说信仰是权利和财富。 10. 这么干差不多就好了,给多少工资干多少活 11. 抱怨公司和领导不重视自己的才华,没有给他提供能展示自己能力的舞台。 12. 急功近利,发财要快,做什么都要快。什么事情都想快点完成,在最快的时间里拿到成果。   大家在工作中肯定会有上面的理解,很正常。但是如果长久以往下去,可能就会杂念太多(薪酬福利职位),按捺不住自己欲望的膨胀。浮躁投机功利的价值观慢慢主导着自己,利己心攀比心索取心与日俱增。为了赚钱而工作,渐渐抛弃了自己当初对这份工作的热爱,不再把它当成一项事业,仅仅是个工具。工作也不再快乐,长久下去,就会越干越吃力,压力越来越大,身体越来越差。每天充斥着埋怨、嫉妒、贪婪、自私,周围被满满的负能量环绕着。自己的心逐渐被侵蚀,成为暴戾的、碌碌无为的人。   有的时候,可以停下来,静静思考一下,反省一下,改变一下自己,洗涤一下心灵,培养一下工匠精神。 **工匠精神**: >有信仰的踏实和认真,勤劳,敬业,投入,全身心奉献,热爱自己的事业。对自己的事业执着专注,对所做的事情和作品精雕细琢、精益求精、一丝不苟。工匠,是那种把每个当下都做到极致的人,工匠做的只是自己,遵循本心做事,遵循本性做人。   结合一部当年火遍大江南北的动画《[中华小当家](https://link.zhihu.com/?target=https%3A//movie.douban.com/subject/2993424/)》,阐述一下这个工匠精神!这部动漫讲的是一群有梦想有目标的厨师们,靠料理拯救世界,保护全人类的故事。 :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/38/d0/38d0a1969ab871b7a5e6baa203598d0c_1440x795.jpg =600x) ## 二、人生态度 **1)好工作**   好工作应该是一份适合你的工作,它能让你有用武之地,而且能长期做下去。工作不能按照别人的标准,父母的期望或亲友的建议来。事业是属于自己的职业之旅,小公司未必不是好公司,高收入未必是好事业。   掌握好自己的节奏,清楚自己在做什么,要做什么,不要着急,相信水到渠成。小当家中的人物,无论是光明料理界,还是黑暗料理界,都找到了适合他们的工作——厨师,虽然大家的目的不同。 :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/1e/00/1e005d8708375b7b3d7a2b79e4d8368c_1440x743.jpg =800x) **2)把工作当事业**   为钱工作的人,除了钱难以得到其他的东西。工作除了钱之外,还有宝贵的经验、良好的训练以及才华的展现。与金钱相比,工作中获得的能力、成长、经历、经验和尊重更有价值。   黑暗料理界的人完完全全诠释了将自己的厨师工作当成自己的事业,不惜杀人放火绑架、拐卖儿童、除善扬恶,各种坏事干尽,只为完成通过料理控制人心和统治世界地目的。 :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/04/77/0477792c53a2e70b15030387af42339e_489x351.jpg =300x) ## 三、幸福 **1)工作是影响幸福的重要因素**   高尔基说:“工作是快乐时,人生便是幸福;工作是义务时,人生便是苦役。”   有四样东西可以让人获得幸福:**被爱、被赞美、为他人服务和被他人需要**。小当家在用料理帮助人们的时候,是非常快乐幸福的。他对料理的执着,以及人格品质,手艺都得到了敌人和朋友的认可。 :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/92/03/92032da6064cc0f2d1e8746b74e38b1c_1440x1193.jpg =300x) **2)在工作中注入爱**   乔布斯说:“从事一份伟大工作的唯一方法,就是去热爱这份工作。”   快乐本来就很简单,如果你能在工作中投入热情,工作本身就是一种快乐。锅巴料理专家贾雄大师,在对料理注入了自己最大的热情,发明了独特锅巴料理,此锅巴料理在视觉、听觉和味觉上给人极大的冲击和震撼。即使80多岁了,仍然对料理充满热情,还要做出更多让人们喜欢的料理。 :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/de/01/de019e5850346d9e8945b68e349c11d5_1440x461.jpg =800x) ## 四、梦想 **1)拥有梦想,提高素养**   拥有梦想,提高素养,是在工作中展现魅力的两大条件。只有做到这两点,你的工作才真正成为你起飞的平台,而不仅仅是养家糊口的工具。   敬业、诚信、正直、勤奋、谦虚、勇敢、节制是做人的原则,说起来容易,做起来难,所谓知易行难。小当家原先的梦想是让父母的餐馆菊下楼成为全国第一的餐馆。但随后在多次粉碎黑暗料理界的阴谋后,提高了自己品格、技艺、素养等各方面的水准,升华了自己的梦想。此时的梦想就是找到传说中的厨具,打倒黑暗料理界。 :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/53/29/5329a66bec07eb8dd48656dad52ef240_1440x465.jpg =800x) **2)工作让我们的梦想得以实现**   立志要如山、行道要如水。不如山,不能坚定;不如水,不能曲达。现在的人不是没有能力而是没有方向,或者有了方向不能持之以恒,或者轻易放弃目标而重新开始。   当生活中只求速度不求内涵的“快餐”越来越多时,原本美好的东西也变了味道,反应在工作上就是功利心、浮躁心和投机心。 ## 五、信仰   你的信仰是什么?信仰是一种强大的精神支柱,一种信念。   短暂的激情靠兴趣,持续的激情靠信仰。很多人存在三大缺失:信仰缺失、诚信缺失和感恩缺失。   前几天看了《[血战钢锯岭](https://link.zhihu.com/?target=https%3A//movie.douban.com/subject/26325320/)》,主角多斯贯彻了自己的信仰:“不杀人,仅救人”,在战场上救了75个人的性命。小当家中的大陆第一特级面点师解师傅,在与面点王白罗的对决中,就强调了自己的信仰,他说道:“料理是为了让你快乐而存在的!”,强烈抨击了白罗的镇魂信仰。 :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/12/e3/12e373438eda5a0bbe67d1daf41248e2_1440x487.jpg =800x) ## 六、思维   注重细节,神韵存在于细节,所谓细节,往往都是我们觉得差不多、无所谓的地方,最后问题往往产生在这些地方。要想改变我们的人生,要先改变我们的思维。有三种常见思维,阻碍我们完成人生价值。 1. 交差思维,草草交差完事,从不关心做事的品质和成果。 2. 差不多思维,没有精品意识和精益求精的精神。 3. 走捷径思维,我们很少有问问题的习惯,失去了好奇心,长此以往,我们获取知识,工作的方式就喜欢走捷径。   小当家与阿Q在制作青椒肉丝的时候,一直为阳泉酒家的青椒肉丝而苦恼,直到最后时刻才发现了用柿子来做料理,从而解决了难题。他们没有仅仅为了交差、差不多而草草的完成料理。 :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/07/0f/070fc59c8d89554ea800f5ad5fb8dab0_1070x414.jpg =800x) ## 七、心 **1)心的问题**   治天下者必先治己,治己者必先治心。   经营心灵要学会解读宽恕的意义,懂得“这个世界上没有什么坎是过不去”的道理。任何事,可以大,可以小。找到适当的参照物,可以让一滴水澎湃,也可以让一座山静默。及第师傅的同门李严,16年来一直憎恨着及第,不能释怀,不惜踏入黑暗料理界,并将当年的食材做成16年的干货,这个复仇的心真是执着。但最终还是被小当家解开了他的心结,摘下了面具,重新做人。 :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/14/da/14da2e9e344cbcb47719888d8d6a2287_1440x598.jpg =800x) **2)心性**   心性左右我们的行为,决定我们的生活,影响我们的未来,人的心性一半是天使,一半是魔鬼。   天使的一半是爱心、欢乐、理想、无私、诚实、谦逊、正直和廉洁;   魔鬼的一半是冷酷、自卑、嫉妒、自私、奸诈、狂傲、残暴和贪婪。   工作就是修行,通过工作,我们可以提高人性,修炼灵魂。仙女阿贝师傅的弟子绍安,就是个不折不扣被心性左右的人,不但将阿贝师傅害死,还要拿下菊下楼,在被小当家打败后,憎恨着他。然而讽刺的是,第一次是被阿贝师傅的料理打败,第二次是因为做了阿贝师傅的料理而被打败。不过最后在小当家嘴盾的攻势下,内心瓦解,选择了弃暗投明。 :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/11/c5/11c57aab52d661e0e22ff8ef3152336a_1268x411.jpg =800x) ## 八、修行 **1)极致**   如何将事情做到极致? 1. 注重细节,神韵存在于细节,所谓细节,往往都是我们觉得差不多、无所谓的地方,但最后问题恰恰是产生在这些地方。 2. 重视品质,品质就是顾客满意、符合标准和零缺陷。 3. 持续、专注地工作,活在当下,对得起此刻的每分每秒。   七星刀雷恩的刀工技术举世无双,他的绝技“猛牛青龙斩”,可以不流一滴血,不掉一滴汁的将一头巨牛瞬间肢解,把最普通的杀牛工作发挥到了极致。 :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/44/52/44529478d38c199d6dbbf84a0615b56e_1440x537.jpg =800x) **2)专注**   简单的事情重复做,你就是专家;重复的事情用心做,你就是赢家。   放下抱怨的心情,把精力集中到面前的本职工作,聚精会神、全力以赴。你会发现,专业其实并不那么高不可攀。提亚的哥哥库柔,为了培育出纯正的乌骨鸡,投入了巨大的精力和财力,不惜倾家荡产,最后积劳成疾而去世。但他的目标最终还是实现了,并且在小当家的帮助下,解除了大家对乌骨鸡的误解,还了他一个清白。 :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/78/3c/783c6763b535fb6303e5297a38dd4d96_1440x566.jpg =800x) **3)价值**   价格是别人给的,但价值是自己创造的。给多少工资干多少活,失去的是在工作中发挥才干,挖掘潜能的机会,放弃的是迅速成长,持续加薪的希望。   先有为后有位:你有了作为,为组织做出了贡献,组织就给你更好的位置,让你施展自己的才华。小当家刚到阳泉的时候,没有人瞧得起他,及第师傅还给他出了个难题:炒青菜,但最终被他用自己的方法解决了,赢得了大家的认可。在后面与许多高手对决后,将对手打败的同时,也赢得了他们的尊重与认可。 :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/85/c1/85c1f2dbb12810efb231b30318f52f43_1440x494.jpg =800x) **4)慢**   欲速则不达,事情一步一步来,按部就班,不可能不经过耕耘就有收获。   不论做什么,都不要急于求成。罗马不是一日早就的,工匠不是一天炼成的。颜丽小姐为了在总督面前露一手,用美人计蛊惑了小当家,让他研究失传的绝技,后面虽然知道了使用方法,但还缺少了一步重要操作。然而颜丽小姐太急功近利,把小当家关起来后,就迫不及待的去献宝了,最终的结果可想而知,当然是失败了。 :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/61/17/61179471d2c810e357dbc5e7a7b5d89c_1440x591.jpg =800x) ## 九、特级程序员 **当你编写的代码完成后,亮出你的软件的时候是下面这样的:** ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/04/f9/04f918b972c8326ac6114d5ef9b51946_353x220.gif) **让客户、同事朋友、领导、老板、竞争对手们体验的时候,大家的反应将先是下面这样:** ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/53/0a/530a58491688236e7f11a1ff80288106_328x196.gif) **然后再依次是下面这样:** ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2a/5c/2a5cea28b5753a5d3c8e4e82caab54ce_1440x702.jpg) **接着会有人提出下面的疑惑:** ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/d2/28/d228cfb986e66f1ded1ccb13764bf26e_1280x720.jpg =300x) **赶紧亮出你的身份:** ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/46/ea/46ea644e4a1bc88d2d336d6a79f1017c_1440x1440.jpg =300x) **史上最杰出的特级程序员——“XXX”,在下图的模板中可替换成你的头像:** ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/86/e6/86e6835a681ec76883a9d5b4d7305290_1440x810.jpg =500x) ***** > 已建立一个微信前端交流群,如要进群,请先加微信号freedom20180706或扫描下面的二维码,请求中需注明“看云加群”,在通过请求后就会把你拉进来。还搜集整理了一套[面试资料](https://github.com/pwstrick/daily),欢迎阅读。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2e1f8ecf9512ecdd2fcaae8250e7d48a_430x430.jpg =200x200)
';

2017年

最后更新于:2022-04-02 06:12:08

  2017年5月份的时候,在博客园收到一条私信,问我有没有兴趣一起写本关于前端的书。我自己从来没有想过写书,最多只是在博客园发几篇博文而已,突然收到这么一条消息,内心既忐忑又激动。怀着试一试的心情,加了发信人的QQ和微信,语音了几个小时。了解到要写一本有关前端面试方面的书,由机械工业出版社出版,主要要做的就是对前端基础知识的梳理,最大的挑战是坚持。这是一场持久战,知识点的梳理不是一朝一夕就能完成的,为此我将失去很多休息的时间。白天要忙碌的工作,晚上还得挑灯夜战,精神和肉体都将承受巨大的压力。并且一写就是一年,一直到2018年的6月,在这一年的时间中,博客完全没有更新,甚至都很少登录,大部分精力都投入到了创作中。   虽然要面临如此之多的困难,但是思前顾后最终还是接下了这个活。一则是为了不想让自己留下遗憾,乘着年轻做些有意义的事;二则是为了巩固自己所学的知识,虽然看了很多书,参与了很多项目,但是很多时候,不能学以致用,有些知识看了以后,并不会在工作中用到,也没有做合适的记录,慢慢就会被遗忘;三则是为了将自己所知的分享给大家,目前市面上各种高级前端技术层出不穷,令人眼花缭乱,而基础知识一直不受人重视,因此我想撰写一本这样的书,希望读者通过此书能快速了解各个基础知识点,再为自己查漏补缺。 ## 一、前期准备   前端面试必然离不开各种笔试题目,因此前期的准备工作就是搜集市面上已知的前端题目。通过笔试网站、个人博客、Github等各种途径,搜集到了国内和国外的各类习题,总计大概有3、4千道,每道题目会涉及一个或多个前端知识点。这些知识点并没有覆盖前端的所有方面,我只挑选了书中将会用到的部分。下图是国外某个网站的题目列表。 :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/ef/b3/efb30330d0f76e91ef1a730432e96bd4_1020x1172.png =300x)   在搜集到这么多题后,下一步就是对它们进行分类。分类不能随便分,是要有根据的,因此要参考一些市面上的权威技术资料。可以是[W3C标准文档](https://www.w3.org/TR),也可以是已出版的书籍,例如CSS权威指南、JavaScript权威指南和HTML5权威指南(如下图所示)等。最终我融合了多处资料,列出了让我满意的目录,这其实也是本书目录的雏形。之所以叫雏形,是因为在撰写过程中,我一直在调整,有的合并、有的分开,挑出重点,更有针对性的讲解,同时令其更容易让读者理解。搜集题目和对其进行分类,前前后后大概花了两周不到的时间,然后就将开始正文的编写。 :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/60/48/60480136139f2e8f8e8d86396f70fa92_968x410.png =600x) ## 二、撰写过程 **1)参考资料**   在撰写过程中,主要参考书籍和[标准文档](https://www.w3.org/TR)。相比较个人分享的博文,书籍所写的内容措辞更严谨、描述更清晰,并且更具权威性。而标准文档虽然内容比较晦涩难读,但是是官方所出,所以准确性更高、术语更专业,如下图所示。当无法理解或对书籍和文档中所记载的内容有疑惑时,我会浏览网上的资料,结合这些资料后,再做出最终的判断。这里吐槽一下网上的资料,很多都是抄来抄去,并且缺少深入的分析,大部分都只是告诉你怎么做,但却不会告诉你其中的内在原理。 :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/58/69/5869b5b417bb68a23ed831a3d80da769_2374x1014.png =600x) **2)措辞严谨**   撰书和写博文有个很大的区别就是措辞。写博文的话可以比较随性,想到什么就写什么;而写书就不一样了,这是要印在白纸上的,比较严肃一点。因此要用最精准的词语来描述自己所要传达的意思。每次遇到这种情况就会思前想后,还要搜索词语的意思,再分别放到语句中,反复体会,最后才会敲定用哪个词语。虽然不会像文学那样讲究,但为了更严谨一些,词语的推敲还是有必要的。例如在编写时遇到了“制定”和“制订”,两个词语发音都是一样的,并且字也差不多,稍不留神就会混用,最后查了词语释义后,才弄清楚两者之间的区别,“制定”偏重于做出最后决定,使完全确定下来,“制订”偏重于从无到有的创制、草拟而后的订立。“制定”常与政策、法令、方针、路线等搭配,“制订”常与计划、方案等搭配。再例如“的”和“地”、“判定”和“判断”等,它们的用法都要加以区别,否则就会混用。 **3)专业术语**   无论是CSS、HTML,还是JavaScript都包含许多专业术语,而最容易忽略的恰恰是这些专业术语。因为在平时的交流中,大家想不到或者说不必用专业术语来交流,都会用约定俗成的口语来表述。例如最常见的引用CSS样式,可以分为内联样式、内嵌样式和外部样式,但我们平时可能就不这么称呼,内联样式可以叫做标签内的样式、内嵌样式可以叫做页面内的样式、外部样式可以叫做CSS文件内的样式。在平时交流中这么称呼都没问题,但在书中却不能这么做,如果每次都用这么口语化的称呼,那么难免会显得不专业,并且内容还特别冗余,语句的前后很难连贯。自己以前也不怎么注意这些专业术语,因此每次都要翻阅好几本技术书籍,以及浏览相关的标准文档。标准文档是最权威的,但都是英文的,当把英文翻成中文时,又会有很多个版本。由于每个版本都会有些差异,因此我在选择时都会反复斟酌。 **4)描述清晰**   以前写博文的时候,为了贯彻自己简洁的风格,都会跳着写,前后并不会连贯,类似于记笔记。虽然很方便,但这种方式却不能移植到写书中,因为两段内容之间没有承上启下的过渡,就会不容易理解。书写出来是为了给读者看的,读者如果看不懂,那么这就是一部失败的作品。在写书的时候,时时刻刻都在提醒自己要站在读者的角度理解。举个简单的例子,在说明某个知识点的时候,通常会配一段代码。以往我都是直接写在相关内容的前面或后面,而且并不会对代码做进一步的说明。想当然的以为读者在浏览这段内容后,就能知道这段代码与内容是有关联的。这是大错特错,应该避免让读者去猜,这样既浪费时间,也会影响阅读体验,有百害而无一利。每次要描述一个知识点或术语(例如对语义化的说明)时,都会出现欲言又止的情况,心里明明很清楚这是什么,但就是无法用文字来准确的描述出来。这种情况循环往复的出现着,书到用时方恨少,这种时候真的对自己的词汇量感到无奈。每次在翻阅许许多多的资料后,才能写出令自己满意的文案。每当写完一篇章节时,都会觉得自己的身体被掏空了一次。 **5)细节把握**   除了刚刚所说的四点,还有一点很重要,那就是细节的把握。例如全书中的写法要统一,无论是标点符号还是刚刚所说的术语,都要一样,如果用了中文符号,那么没有特殊情况就一律用中文符号。如果把HTML元素的style属性中定义的样式叫内联样式,那么所有的地方都要这么叫。还有其它一些细节,例如示例代码的编排,为了提升阅读体验,可以将各条语句的注释以首字母对齐;为每张图设定一个编号,可以在阅读时更精准的定位到某张图等;在合适的位置用句号来结束一段话。 ## 三、总结   著书的过程是痛并快乐着的,我花费了半年多的时间,将自己所有的精力都扑在了写书上,放弃了很多业余生活。虽然每写一篇文章的过程都很艰辛,但我的收获也不少,我对HTML、CSS和JavaScript的认识又上升了一个高度,并且顺带便复习了一下数学(如坐标轴、除数和被除数等)以及网络原理(如HTTP、TCP等协议)等周边知识。看问题也不再那么片面,能从更高的点来分析问题。做事也更加细心,整本书我自己总共校验了六次,每一次我都会认真对待,并且将书中的示例代码整理了一份,已上传到[Github](https://github.com/pwstrick/FrondEndInterviewCode)中。还总结了四张思维导图(也已上传至[Github](https://github.com/pwstrick/FrondEndInterviewCode)),将书中讲到的HTML、CSS、JavaScript和网络相关的知识囊括进了图中,方便平时的复习和浏览。本书的名字叫做《前端程序员面试笔试宝典》,封面如下图所示,如果要支持本书,可点击[此处](http://product.dangdang.com/25342065.html)。 :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/48/fe/48fe3fdf84ec141b5677a582ec6666b4_1079x1445.jpg)   虽然我尽了自己最大的努力,但是时间仓促,并且自己的能力也是有限的,难免会有错误,还望大家多多指正。本书侧重的是前端基础知识部分(如下图所示),包括CSS/CSS3、HTML/HTML5和JavaScript(以ECMAScript 5为主),因此一些比较高级的知识点都没涉及到。像如日中天的React、VUE、TypeScript等,在本书中都没涉及到。再比如复杂一点的性能优化、算法等,也没有涉及到。 :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/03/b4/03b461ef5a0cf61fd3bdd8906790492a_764x416.png =300x) ***** > 已建立一个微信前端交流群,如要进群,请先加微信号freedom20180706或扫描下面的二维码,请求中需注明“看云加群”,在通过请求后就会把你拉进来。还搜集整理了一套[面试资料](https://github.com/pwstrick/daily),欢迎阅读。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2e1f8ecf9512ecdd2fcaae8250e7d48a_430x430.jpg =200x200)
';

PrimusUI

最后更新于:2022-04-02 06:12:05

  “[PrimusUI](http://pwstrick.github.io/PrimusUI/)”是自己在借鉴了如今网上很多开源的UI库,再经过自己整理加工的一个简单代码集合。   每个功能块的CSS代码都很少,力求简单易懂,低门槛,代码可根据自己实际情况轻易修改,改到符合自己场景为止。 ## 一、制作的理由 :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/d3/d7/d3d77cb327df858d67a5e82a3e62caeb_490x315.jpg =500x)   之所以重复造轮子,有以下几点原因: **1)现今开发很多时候讲究效率,给你很短的时间,完成很多的内容。**   如果不备点存货,那只能加班加点的赶进度。 **2)由于是加班加点赶出来的项目,百分百会有各种问题,兼容性啊、功能性啊、与设计图偏差。**   如果碰到挑细节的测试或领导,搞不好就要让你1像素1像素的调界面了。 **3)如果有套经历过沉淀的UI库,那么能够通过样式组件,快速搭建页面,并且兼容性等各方面都有保证。**   开发的时候只要关注各个页面中的细节即可,从容的写代码。 **4)网上的很多开源库都比较大,当需要在实际项目中使用的时候,可能就需要修改部分代码。**   正因为比较大,改动的时候就比较费劲。 **5)很多开源库都做些精细的雕琢,但自己公司的UI设计可能并不喜欢这种风格。**   这样他们设计出来的页面会与那些库不一致,就会出现第4种的情况。 **6)写一套自己的UI库,可以提升自己的想象空间,激发创造力。**   CSS3提供了很多新特性,但平时可能都没用到,不是不想用,而是想不到该如何用,例如伪元素、弹性布局等。 **7)开发的过程也是学习和实践的过程,将平时看到的,用到的,组合到一起,做了以后才会看到问题,再解决实际问题。**   古人说的绝知此事要躬行还是很有道理的。 **8)整套UI库,其实更可以把其看成是套骨架,一套你可以随意修改的骨架,要血肉丰满可以自己动手,这样更有成就感。**   这里只是分享一下思路,抛钻引玉。 :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/63/bc/63bcc37c41afa754f40f2b31fd550681_1406x702.png =800x) ## 二、开发环境   现在前端开发与以前不同了,以前只要个带颜色的文本编辑器,一个浏览器即可。   现在前端项目也越来越大,也需要管理配置。 **1)工程搭建**   本次开发使用了构建工具“[Gulp](http://www.gulpjs.com.cn/)”,基于流的构建工具。利用“Node.js”丰富的包管理,可以将各种插件收入囊中。   如果不熟悉这个玩意儿,可以参考一下我以前写的一篇小教程《[前端自动化构建工具gulp记录](http://www.cnblogs.com/strick/p/5151714.html)》。   也可以参考[PrimusUI](http://pwstrick.github.io/PrimusUI/)库的文档中《[安装](http://pwstrick.github.io/PrimusUI/docs/gulp/install.html)》与《[插件](http://pwstrick.github.io/PrimusUI/docs/gulp/widget.html)》 **2)CSS开发**   CSS现在也可以预编译了,[SASS](http://sass-lang.com/)就是一种,有了预编译,写CSS也可以模块化开发,并且能够自动打包。   预编译可以使用Gulp中的插件“[gulp-sass](https://npm.taobao.org/package/gulp-sass)”,在那篇两教程中有提到过。   还装了浏览器属性兼容插件,rem自动计算插件等。 **3)页面自适应**   借助[flexible.js](https://github.com/amfe/lib-flexible), 通过计算html中的font-size(用于计算rem),设置viewport的放大倍数,来实现移动自适应。 **4)文档库编辑**   说明的文档库是很有必要的,让人更有感性的认识。   文档库是用[jekyll](http://jekyllrb.com/)编写的,这是一个静态网站生成器,前面一段时间也整理过两篇小教程,《[安装与配置](http://www.cnblogs.com/strick/p/5448570.html)》和《[实际应用](http://www.cnblogs.com/strick/p/5484779.html)》 ## 三、应用技巧 :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/9a/63/9a6352c9e99722fa6035e271f99fffb8_455x259.jpg)   所有的文件就如上图所示,下面就介绍下CSS的开发过程,demo展示页面与文档编辑就直接略过了。 **1)rem**   rem(font size of the root element)是指相对于根元素的字体大小的单位。    库中大部分都用了这个单位,这样能做更好的适配。但字体、边框等使用了px单位。   由于要计算,如果手工算的话,那要累成狗了,所以可以使用“Gulp”中的插件“[postcss-px2rem](https://npm.taobao.org/package/postcss-px2rem)”自动计算。 **2)网格(grid.scss)**   在做网格之前,曾经看过[Bootstrap](http://www.bootcss.com/)中的网格代码,就是用float加百分比宽度,或px定宽实现的。   但移动端的话,这么写还不够,移动端的浏览器比PC端的先进,所以可以用更新的CSS3属性来实现。   CSS3中有个弹性布局(Flexible),这是个好东西,可以自动计算宽度的,非常适合手机屏幕。   由于手机屏幕尺寸很多,很多情况下不能写死,即使用百分比,某种角度来说,还是写死的。   弹性布局还有个好处,那就是对齐,我以前碰到过两个字体大小不一样,但是要在同一行底部对齐,当时做起来很费劲。   而使用弹性布局只要一个属性即可,我在这个CSS模块中,封装了多种对齐样式。   如果对这个还比较陌生,可以参考下前面写的一篇小教程《[CSS3伸缩盒Flexible Box](http://www.cnblogs.com/strick/p/5204082.html)》   用网格可以轻易实现元素位置的摆放,而不像以前要用float、position来做布局,列表、布局、表单的实现就需要与网格的协作。 :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/04/b9/04b962f45319e51dc8a6992ccd4dc703_790x156.png) **3)预编译**   CSS代码用了[预编译](http://www.w3cplus.com/sassguide/syntax.html),就和开发服务器代码差不多了,下面几个文件里面放的就是全局会用到的mixin、变量或函数。 :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/c7/6e/c76eca9e90735eab93c1c871aa4f297f_167x85.jpg)   预编译有很多优点: 1. 减少代码,预编译中有条件判断和循环,这样能组织更多的逻辑,还能复用。 ~~~css @for $col from 1 through 12 { .ui-col-#{$col} { @include flex($col); } } ~~~ 2. 变量的定义,能够使得值更有语义。 3. 嵌套语法,可以让CSS更有层次,一眼就能看出父级是谁,不像以前还得写一长串。 ~~~css .ui-flex { display: flex; width: 100%; box-sizing: border-box; & > [class^="ui-width-"], & > [class^="ui-rem-"]{ flex-basis: auto; } } ~~~ 4.  混合(mixin)与函数(function)可以将通用的逻辑或代码提炼出来,能更好的复用。 5. CSS也可以做模块化,通过“@import”引用不同的功能块,适应不同的场景。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/0b/5f/0b5f93017bddc2f24538c4112aa693a2_165x146.jpg)   “[PrimusUI](http://pwstrick.github.io/PrimusUI/)”虽然代码量不多,但制作过程还是挺有劲的,虽然在使用SASS、Jekyll与Gulp的时候有点学习成本,但都是非常轻量的。   会用了以后能够做很多事情,方便开发,提升效率。希望这个库对大家平时的开发会有帮助。   【[GitHub](https://github.com/pwstrick/PrimusUI)】的项目页面用英文写了些介绍,更接地气点。 ***** > 已建立一个微信前端交流群,如要进群,请先加微信号freedom20180706或扫描下面的二维码,请求中需注明“看云加群”,在通过请求后就会把你拉进来。还搜集整理了一套[面试资料](https://github.com/pwstrick/daily),欢迎阅读。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2e1f8ecf9512ecdd2fcaae8250e7d48a_430x430.jpg =200x200)
';

制造自己的榫卯

最后更新于:2022-04-02 06:12:03

## 一、榫卯   榫卯(sǔn mǎo),是古代中国建筑、家具及其它器械的主要结构方式,是在两个构件上采用凹凸部位相结合的一种连接方式。   若榫卯使用得当,两块木结构之间就能严密扣合,达到“天衣无缝”的程度,并且不用钉子。 :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/6a/2a/6a2af20876cd4c585add559e748399a8_600x495.jpg =300x)   下面这张图来自于山西悬空寺,屋檐下面的那些都是用榫卯做成的,没有用一颗钉子。 :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/74/83/7483486fefdd20bad17b47f7c906f3d2_450x389.jpg =300x) ## 二、JavaScript与榫卯   在开发页面的时候,或多或少的要写JavaScript,除了些业务逻辑的代码外。   还有DOM操作,AJAX处理,事件绑定,实用功能,Promises/A+规范实现,样式、集合、数组、函数、对象、时间、URL、动画、模版、cookie等各种操作。   现在网上相关的开源库很多,例如封装DOM操作的,有[Zepto](https://github.com/madrobby/zepto)、[Sizzle引擎](https://github.com/jquery/sizzle)等,实用库[Underscore](http://underscorejs.org/)、[Sugar](http://sugarjs.com/)等。 :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/1c/b5/1cb52371a4785cd898ce154cd665c093_1458x208.png =600x)   这些封装好的库使用起来方便兼容性好,但是有些时候我仅仅是需要使用里面的个别方法,例如做活动页面。   就为了这几个个别方法而把整个库都引进来,有种杀鸡用牛刀的感觉。   当看到下面那位非洲朋友用圣剑来切牛排,囧,瞬间就能体会那种感觉。 :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/30/37/30378b9d05afacf2d3edbe7b030ad92d_523x477.jpg =300x)   而如果想把里面的个别方法抽出来,又不能直接用,因为这些方法可能引用了库中的私有方法属性等,就好像建筑里的钉子,需要钉子来衔接。   所以这个时候就需要使用自己封装的函数,就好比榫卯,拿来即可用,而不需要特定的钉子。 ## 三、构建榫卯结构   要想构建,最方便的还是要参考下现有的库是如何做的,这样能少走些弯路。   在Github上面看到了两个页面,专门记录了各种类库《[Front-End-Develop-Guide](https://github.com/icepy/Front-End-Develop-Guide)》与《[Awesome JavaScript](https://github.com/sorrycc/awesome-javascript)》   有些时候也不用一定要自己写,有相关的类库就直接收录进来,要用的时候就不用再到网上去各种搜索啦! **1)DOM选择器**   这是在平时开发页面必用的,ES5规范出来后,定义了很多实用的方法,可以不再像以前那样编写大量的兼容代码。   原生的“[querySelectorAll](https://developer.mozilla.org/zh-CN/docs/Web/API/Element/querySelectorAll)”和“[querySelector](https://developer.mozilla.org/zh-CN/docs/Web/API/Document/querySelector)”非常强大,语法和JQuery中的选择器大致一样。 [Sizzle](https://sizzlejs.com/)也就是是[jQuery](https://jquery.com/)的选择器引擎,将近2000行的代码,不过很多代码是在兼容IE6、IE7等古老的PC浏览器,关于这个引擎可以参考《[jQuery中的Sizzle引擎分析](http://www.cnblogs.com/strick/p/5078435.html)》   我现在都是在移动端开发,移动端的浏览器都要高级些,所以我打算参考[Zepto](https://github.com/madrobby/zepto)来封装。   这个是针对移动端浏览器,并且是模块化的,想参考里面的3个模块,event是事件模块。 :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2c/ed/2cedad440a7187d0a6f4654d7271ac75_738x118.jpg)   还看到两个更小的库,[HTML](http://nbubna.github.io/HTML/)和[140 medley](https://github.com/honza/140medley)。 **2)实用库**   实用库我打算参考[Underscore](http://underscorejs.org/)与[Sugar](http://sugarjs.com/),这两个库都有各自的主页,分类也很清晰。   Underscore还有个带注释的[源代码页面](http://underscorejs.org/docs/underscore.html)。   Underscore分为Collection、Array、Function、Object、Utility几大部分。   Sugar分为Array、String、Number、Date、Object、Function、RegExp、Range几大部分。   根据他们的分类,两个库之间有些地方应该还能互补一下。 :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/f5/96/f596638169c782991f3dff9022611d7d_419x149.jpg =300x) **3)其他相关的库** 1. 对时间的各种操作,有两个库用的人蛮多,[Datejs](http://www.datejs.com/)和[moment](http://momentjs.com/)。我是比较前者,代码比较少,比较容易看源码。 2. Promises/A+规范的实现,相关库比较多,[when.js](https://github.com/cujojs/when)、[Zepto中的deferred.js](https://github.com/madrobby/zepto/blob/master/src/deferred.js)还有[promise-polyfill](https://github.com/taylorhakes/promise-polyfill)。如果对这个规范概念不是很清楚,可以参考《[Promises/A+规范的实现](http://www.cnblogs.com/strick/p/5092092.html)》 3. 模板喜欢用[mustache](https://github.com/janl/mustache.js),代码简洁,但功能不简洁,用了以后就会知道很方便。 4. 本地存储的封装,可以借鉴或直接引用[store.js](https://github.com/marcuswestin/store.js),代码就100多行,完全能看懂。 5. cookie的各种操作,可以借鉴或直接引用[js-cookie](https://github.com/js-cookie/js-cookie),源码也是我喜欢的100多行。 6. 对URL的基本操作,可以借鉴或直接引用[domurl](https://github.com/Mikhus/domurl)。   我选择库都会选择小巧、功能比较单一、而且不依赖第三方库。   源码看起来也能方便点,抽出代码的时候也能少费点时间。   这里只是做个抛砖引玉,具体怎么构建可以根据实际情况来操作。 ***** 参考资料: [Zepto源码分析](https://github.com/mominger/blog) [前端开发指南](https://github.com/icepy/Front-End-Develop-Guide) [Awesome JavaScript](https://github.com/sorrycc/awesome-javascript) ***** > 已建立一个微信前端交流群,如要进群,请先加微信号freedom20180706或扫描下面的二维码,请求中需注明“看云加群”,在通过请求后就会把你拉进来。还搜集整理了一套[面试资料](https://github.com/pwstrick/daily),欢迎阅读。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2e1f8ecf9512ecdd2fcaae8250e7d48a_430x430.jpg =200x200)
';

2016年

最后更新于:2022-04-02 06:12:01

  在被裁员的那一周,正好看到以前的同事在朋友圈发招聘前端的公告。本来自己就对前端感兴趣,于是就联系了那同事。周五就去面试,他那边非常缺人,上一个前端团队都离职了,他也是从其他部门转过去的,每天忙的飞起来,我过来后就能帮他分摊掉很多事情,他也可以早点下班了。这家公司工作到至今还没换过,从事纯前端,后端有专们的人负责。   刚进公司的时候,分在了前端组。后面在2017年6月的时候,公司内部调岗,CTO将我从原先的前端组转到了广告组。   **1)技术部**   公司CTO是从腾讯过来的,挖了很多腾讯的人过来,技术部的规模比以往要大很多,大概有六七十人,其中后端的PHP开发人数最多。前端组重新组建,只有3个人,都是认识的老同事。前端开发也是让我耳目一新,首次接触ES6、gulp、webpack、nodejs、SASS、Jade、React等等新工具新概念,给了我巨大的冲击,原来前端是这么玩的。公司选用的版本控制系统是Git,不再是SVN了。做的页面也从PC端转到移动端,移动端的页面制作起来比PC端的要快一些,毕竟内容要少很多,这段时间的博文创作也是最多的。 **2)职责**   公司的主营业务都由客户端完成,前端主要做些辅助任务。最多的就是制作活动页面,基本都是一周或两周的时间周期,由产品、运营等部门提出需求,再设计页面。项目都比较小,公司也就没配项目经理,但基本都是按时完成的,与设计、产品、后端等部门的配合都比较默契,从没出现过冲突。记得2016年巴西奥运会的时候,CTO亲自操刀,做个奥运夺金的活动,我们小组的人都参与,前前后后搞了将近一个月,预期日活是100W,不过最终没那么高,只到达了30W。 **3)读书**   这段时间阅读了大量的前端著作,过去也会读技术书籍,但很多时候都是随便翻翻。现在不同,在读完后,会抽时间做点记录,消化学到的知识,并整理成一篇篇文章,再加点自己的一些体会或实践书中的代码,验证书中所述的是否正确。将这些留作[记录](https://www.cnblogs.com/strick/category/1258243.html),可供自己日后浏览。 **4)开源**   自己的闲暇的时候也制作了些简单的脚本插件,例如表单验证、提示框等,还上传到了Github上,很有趣。公司里还搞了个简单的内部UI库,封装了一些常见的模块,提升工作效率。关于这个UI库的具体细节,可以浏览《[小身材大用途,用PrimusUI驾驭你的页面](https://www.cnblogs.com/strick/p/5536321.html)》。 ## 一、广告组 **1)活动页面**   转到广告组后,职能相对就比较单一,主要负责与广告业务相关的活动页面。布局方面也比较统一,与以前的活动完全不同,没有各种花哨的特效,以及独特的功能,而广告业务的活动关注的是线索搜集,没啥特别多的特效。但就是工期经常很短,可能今天说要做,后天就要上线,甚至是明天就要上线,很注重效率。 **2)技术狩猎**   在业余时间,会去研究一些新技术或基础概念。也是在进入这家公司后,我意识到了自己基础的薄弱,需要补一补,于是研读了很多技术基础书籍,为此还做了各种实践,例如重新学习了DOM、CSS的渐变、正则表达式等。   这段时间不仅学习了ES6、HTML5和CSS3等基础知识,还学习了React、性能优化、设计模式等实用技能,不断地弥补自身的不足,期间还加强了对英语的学习。 ***** > 已建立一个微信前端交流群,如要进群,请先加微信号freedom20180706或扫描下面的二维码,请求中需注明“看云加群”,在通过请求后就会把你拉进来。还搜集整理了一套[面试资料](https://github.com/pwstrick/daily),欢迎阅读。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2e1f8ecf9512ecdd2fcaae8250e7d48a_430x430.jpg =200x200)
';

PC网站CSS分享

最后更新于:2022-04-02 06:11:59

  2016年之前的前端开发主要还是以PC端为主,移动端做的比较少。   这里想总结些编写网页的经验,以PC端的为主,前面总结过后台的,今天写些前台的,参考了[bootstrap3.3.5](http://www.bootcss.com/)、[bootstrip2.3.2](http://v2.bootcss.com/index.html)和模版[matrix](http://matrix.pwstrick.com/)。   前段时间还写过一篇[《前端基础学习分享》](http://www.cnblogs.com/strick/p/4377213.html),比较基础的文章。   每次写CSS,总感觉不用写那么多CSS,但是精简的时候, 又难以下手。越写越觉得代码越来越多,越来越乱,所以这次我打算整理出一套比较灵活的结构,供以后使用。   CSS应该也可以像其他那些语言写的有层次,有结构。 ## 一、规划 1. 在拿到psd效果图后,我会将所有的效果图看一遍,然后开始打草稿,在纸上画,在PS中标注都可以。一般都是做个大概的统计,太详细不太现实,既费时间也费精力。 2. 网站的浏览器兼容性要顾及到哪些,IE6,IE7还是IE8以上等,[点击查看浏览器分布情况](http://gs.statcounter.com/)。写CSS的时候还得照顾下低版本的浏览器。 3. 页面中的字体大小有几种;颜色有几种;超链接的:visit,:hover,:visit样式有几种 4. 网站中有多少个小图标,是否可以用现有的字体库替代小图片 5. 网站中是否用到了表格table,有哪几种表格款式,能否做出抽象 6. 有几种按钮款式,扁平的、3D的还是啥样的 7. 写些通用点的宽度与位移类,要能与其他地方配合,例如表单,文本等 8. 表单中是横排的还是竖排的;输入框是怎么样的;下拉框单选框多选框又是啥样的,有些高逼格的网站无法忍受下拉框等的默认样式,那就得美化;颜色有几种 9. 需要哪些辅助类,比如情境背景色等 10. 网站可以抽象出许多可复用的组建,例如分页、错误页面等 11. CSS也可以有面向对象的思维,将通用的结构抽象出来,做成一个基类。 12. 开发的时候将CSS手册打开,一些周边的在线网站准备好,例如[CSS参考手册](http://css.doyoe.com/),[webkit css library - 属性速查](http://ued.ctrip.com/blog/wp-content/webkitcss/quicksearch.html),[CSS3样式生成器](http://www.css88.com/tool/css3Preview/)等。 ## 二、低版本浏览器支持   以IE6、IE7为代表的一些低版本的浏览器很多CSS3、HTML5都不支持,有些伪类也不支持,例如:before等。这个时候就要做些兼容的操作。 **1)modernizr.js**   “[Modernizr](http://modernizr.com/)”是一个用来检测浏览器功能支持情况的 JavaScript 库。 目前,通过检验浏览器对一系列测试的处理情况,Modernizr 可以检测18项 CSS3 功能以及40多项关于HTML5 的功能。可自定义脚本下载。使用了这个插件后,在html标签中会显示class,如下图所示,如果不支持某个CSS3,就会以“no-”开头。这样做的 话,就能优雅降级,在不支持这种样式的时候,换成另外一种样式。 :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/dd/d0/ddd0df2726298b062a5f3b11f2373537_864x70.png) **2)respond.js**   “[Respond.js](https://github.com/scottjehl/Respond)”是一个快速、轻量的 polyfill,用于为 IE6-8 以及其它不支持 CSS3 Media Queries 的浏览器提供媒体查询的 min-width 和 max-width 特性,实现响应式网页设计。 ## 三、基本的CSS设置 **1)CSS的reset**   重新默认样式,这个肯定有必要。参考了[HTML5 Boilerplate](http://www.bootcss.com/p/html5boilerplate/)。模版里的CSS注释是洋文的,自己翻译了一些。 ~~~css /** * HTML5标签 在IE 8 / 9没有定义。 * 在IE 10/11 Firefox 中没有定义`details` or `summary` * 在IE 11中没有定义main */ article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary { display: block; } figure,menu{ margin:0; padding:0; } ul,ol{ padding:0; list-style-type:none; } h1,h2,h3,h4,h5,h6,p,ul,ol,form,dl,dt,dd,li{ margin:0; } ....... ~~~ **2)CSS的通用样式** 1. 左浮动,有浮动,清浮动;左对齐,右对齐,居中;字体粗细,加粗,斜体,普通等;宋体、雅黑字体等 2. position定位,相对定位,绝对定位等;display属性,block、inline、inline-block等 3. overflow属性,有hidden、scrolldeng;zoom属性;cursor属性;text-decoration属性 4. margin的四个方向;padding的四个方向 ~~~css .l{float:left;}.r{float:right;}.cb{clear:both;} .n{font-weight:normal; font-style:normal;}.b{font-weight:bold;}.i{font-style:italic;} .fa{font-family:Arial;}.fg{font-family:Georgia;}.ft{font-family:Tahoma;}.fl{font-family:Lucida Console;}.fs{font-family:'宋体';}.fw{font-family:'微软雅黑';}.fe{font-family:'serif';} .tc{text-align:center;}.tr{text-align:right;}.tl{text-align:left;} .rel{position:relative;}.abs{position:absolute;}.fixed{position:fixed;} .db{display:block;}.dib{-moz-inline-stack:inline-block; display:inline-block;}.di{display:inline;}.dn{display:none;} .ovh{overflow:hidden;}.ovs{overflow:scroll;}.vh{visibility:hidden;}.vv{visibility:visible;} .z{_zoom:1;}.zoom1{*zoom:1;} .mt5{margin-top: 5px;}.mt10{margin-top: 10px;}.mt15{margin-top: 15px;}.mt20{margin-top: 20px;} .mr5{margin-right: 5px;}.mr10{margin-right: 10px;}.mr15{margin-right: 15px;}.mr20{margin-right: 20px;} .mb5{margin-bottom: 5px;}.mb10{margin-bottom: 10px;}.mb15{margin-bottom: 15px;}.mb20{margin-bottom: 20px;} .ml5{margin-left: 5px;}.ml10{margin-left: 10px;}.ml15{margin-left: 15px;}.ml20{margin-left: 20px;} .pt5{padding-top: 5px;}.pt10{padding-top: 10px;}.pt15{padding-top: 15px;}.pt20{padding-top: 20px;} .pr5{padding-right: 5px;}.pr10{padding-right: 10px;}.pr15{padding-right: 15px;}.pr20{padding-right: 20px;} .pb5{padding-bottom: 5px;}.pb10{padding-bottom: 10px;}.pb15{padding-bottom: 15px;}.pb20{padding-bottom: 20px;} .pl5{padding-left: 5px;}.pl10{padding-left: 10px;}.pl15{padding-left: 15px;}.pl20{padding-left: 20px;} .cursor-pointer{cursor:pointer;} .line-del{text-decoration:line-through;} ~~~ **3)工具样式** 1. 清除浮动   2. 强制换行   3. 两边对齐等样式   4. 单选框复选框文字对齐   5. 截断文本,多出的文字显示...   6. 小三角显示 ~~~css .input_align{vertical-align:-3px;}/*单选框复选框文字对齐*/ .interception{white-space:nowrap; text-overflow:ellipsis; -o-text-overflow:ellipsis; overflow:hidden;}/*多出的显示...*/ .br{word-wrap:break-word;word-break:break-all}/*强制换行*/ .same_height{margin-bottom:-3000px; padding-bottom:3000px}/*两边齐平*/ .fix{*zoom:1;} .fix:after,.fix:before{display:block; content:"clear"; height:0; clear:both; overflow:hidden; visibility:hidden;}/*清浮动*/ .min_fix{overflow:hidden;_zoom:1} /** * 小三角 * 纯色的就用一个,如果不是纯色的就用两个重叠再绝对定位 */ span[class^="triangle-"]{ content: ''; height: 0; width: 0; position: absolute; pointer-events: none; } .triangle-top{ border: solid transparent; border-width: 10px;/*宽度自定义*/ border-top-color: #821134;/*四个方向 需要显示那个位置的就设置*/ } ~~~ **4)视网膜屏幕(Retina)**   现在的手机,或苹果电脑等,屏幕都是Retina屏的,高清分辨率,就要做单独处理了。下面的属性参考了[bootstrap](http://v3.bootcss.com/css/)。 ~~~css @media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and ( min--moz-device-pixel-ratio: 2), only screen and ( -o-min-device-pixel-ratio: 2/1), only screen and ( min-device-pixel-ratio: 2), only screen and ( min-resolution: 192dpi), only screen and ( min-resolution: 2dppx) { .css{ /*background-image: url(img_2x.png);*/ } } ~~~ **5)移动端CSS**   这里简单的介绍下移动端的开发。在这篇[《移动web资源整理》](http://www.cnblogs.com/PeunZhang/archive/2015/03/03/3407453.html)的文章中有更多详细的说明,我里面的代码也是参照这篇文章修改的。 ~~~html ~~~ ## 四、字体ICON **1)自定义字体** 1. 以前的icon基本都是用图片sprite技术,现在有了自定义字体,在高版本的浏览器中可以替代图片了。这里我选用了[Font-Awesome](https://fortawesome.github.io/Font-Awesome/icons/),有400多个图标可以选择。 2. 下载后,稍微修改下那个CSS。第二个样式使用了属性选择符,这样的话只要是“fa-”开头的就是会显示字体。 3. 可以直接引用字体库的CSS,也可以按需引用,写到自己的CSS文档中。 4. 这里顺便介绍下[Simple Icons](http://www.bootcss.com/p/simple-icons/),收集众多网站的Logo,并提供高质量、不同尺寸的png格式图片给广大网友。里面是图片,不是字体。 ~~~css @font-face { font-family: 'FontAwesome'; src: url('../fonts/fontawesome-webfont.eot?v=4.3.0'); src: url('../fonts/fontawesome-webfont.eot?#iefix&v=4.3.0') format('embedded-opentype'), url('../fonts/fontawesome-webfont.woff2?v=4.3.0') format('woff2'), url('../fonts/fontawesome-webfont.woff?v=4.3.0') format('woff'), url('../fonts/fontawesome-webfont.ttf?v=4.3.0') format('truetype'), url('../fonts/fontawesome-webfont.svg?v=4.3.0#fontawesomeregular') format('svg'); font-weight: normal; font-style: normal; } .fa, i[class^="fa-"]{ display: inline-block; font: normal normal normal 14px/1 FontAwesome; text-rendering: auto; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; transform: translate(0, 0); } ~~~ **2)h1--h6标签**   这里参考了[bootstrap](http://v3.bootcss.com/css/)中对这几个标签的重置,设置标题、副标题等可以用到,不然老是用p标签加字体大小,页面中的标签就太不丰富啦。 ~~~css h1,h2,h3,h4,h5,h6,.h1,.h2,.h3,.h4,.h5,.h6 { font-family: inherit; font-weight: 500; line-height: 1.1; color: inherit; } h1 small,h2 small,h3 small,h4 small,h5 small,h6 small, .h1 small,.h2 small,.h3 small,.h4 small,.h5 small,.h6 small, h1 .small,h2 .small,h3 .small,h4 .small,h5 .small,h6 .small, .h1 .small,.h2 .small,.h3 .small,.h4 .small,.h5 .small,.h6 .small { font-weight: normal; line-height: 1; color: #777; } h1,.h1,h2,.h2,h3,.h3 { margin-top: 20px; margin-bottom: 10px; } h1 small,.h1 small,h2 small,.h2 small,h3 small,.h3 small, h1 .small,.h1 .small,h2 .small,.h2 .small,h3 .small,.h3 .small { font-size: 65%; } h4,.h4,h5,.h5,h6,.h6 { margin-top: 10px; margin-bottom: 10px; } h4 small,.h4 small,h5 small,.h5 small,h6 small,.h6 small, h4 .small,.h4 .small,h5 .small,.h5 .small,h6 .small,.h6 .small { font-size: 75%; } h1,.h1 {font-size: 36px;} h2,.h2 {font-size: 30px;} h3,.h3 {font-size: 24px;} h4,.h4 {font-size: 18px;} h5,.h5 {font-size: 14px;} h6,.h6 {font-size: 12px;} ~~~ ## 五、表格   网站中或多或少会用到些表格结构,关于表格的一些属性,我在文章[《关于table的一些记录》](http://www.cnblogs.com/strick/p/3789114.html)中做过记录。   实际应用中的表格是多种多样的,绝不是[bootstrip](http://v3.bootcss.com/css/)模版中的几个样式所能摆平的,但模版中的思路可以借鉴,将样式抽象出来做到复用。   在CSS中单独开辟一段专门给表格的样式区域。 **1)加.table样式** 1. 表格内的单元格是居中,居左还是居右可根据实际情况来定。 2. 准备了三个对齐类.tr、.tc和.tl :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/f5/31/f531777de2322abecd50e70cddfac634_781x169.png) **2)条纹状网格.table-striped** 1. 这里是依赖:nth-child CSS 选择器实现的,这样就会有兼容性的问题,IE8浏览器及以下的都不支持 2. 但可以写的普通点,就是在偶数或单数的tr上面单独加样式 :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/4c/c1/4cc172fc4afe7f9369174dd6813befc8_760x156.png) **3)带边框的表格.table-bordered** 1. 就是给td、th加上border属性。 2. 注意标题下面的border是2像素,这些都可以找到相应的代码自定义。 :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/49/f7/49f76333843efe5dd550705d33df68f8_785x173.png) **4)鼠标悬停.table-hover** 1. 就是给tr加个:hover :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/3c/6d/3c6d7b7719bd54b87991fe8e2cb9881d_767x152.png) **5)颜色状态** 1. 有时候要给标题栏或内容栏给定不同的颜色,这里做了几个示例颜色 2. 实际情况可能就是几种完全不同的颜色 :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/71/dc/71dc6aa198a9eda1e04817967fd1cbcc_785x227.png)   根据实际情况可以组合运用   也可以自定义自己实际项目中的样式,组合也行,单独使用也行 ## 六、按钮 1. 这里还是参照[bootstrip](http://v3.bootcss.com/css/)的按钮做demo。 2. 如果模版中没有合适的,可以点击[Buttons](http://www.bootcss.com/p/buttons/)网站,一个开源的按钮CSS样式库,款式众多,也可自定义,总有一款适合你吧。 3. 有三种标签可以做成按钮,\、\ 按钮
~~~ **2)超链接式按钮** 1. 像个超链接一样,如上图的最后一个按钮,只要加个.btn-link样式即可。 2. 这里也可以将超链接样式给抽象出来,将大小、颜色分出来 3. 独特的超链接可以单独写样式 ~~~html ~~~ **3)块级按钮**   将按钮宽度变为100%,有时候会有所需要,如下图所示的就要比刚刚的按钮宽很多。 ~~~html ~~~ ## 七、栅格   这里把[bootstrip2.3.2](http://v2.bootcss.com/scaffolding.html)中的流布局.row-fluid等搬了过来。 **1)流式栅格布局** 1. span1--span12,有12种选项,默认会margin-left:2%左右 2. offset1--offset12,也有12种选项,代表向左便宜的量 3. margin-left与width,都用到了小数点后14位。 4. show-grid这个类仅仅是展示用的,我就写在了页面上面,没有写在style.css文件中 ~~~html
1
1
1
1
1
1
1
1
1
1
1
1
4
4
4
4
8
6
6
12
~~~ :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/6e/39/6e39c900038946d412dfce671914ef6a_785x299.png) **2)默认栅格布局** 1. 流是用百分比计算,这里的话是直接用像素计算 2. span也有12种,详细信息可查看CSS。范围在100px---940px。 3. offset也有12种。范围在100px---980px。 ## 八、表单   这里参考了[bootstrip2.3.2](http://v2.bootcss.com/base-css.html#forms)和[bootstrip3.3.5](http://v3.bootcss.com/css/#forms)中的表单布局。 **1)输入框样式** 1. 默认高度是20px,line-height也是20px,加了CSS3的圆角 2. 当:focus的时候,边框颜色会改变,并加了CSS3的阴影效果 3. disabled,readonly的效果稍有不同 4. 有些输入框旁边需要小图标,左边或右边,这里我就不列出来了,bootstrip中有说明 5. 可将输入框的height,line-height,padding等抽象出来,运用到不同场景 ~~~html
~~~ :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/a7/f8/a7f814282daff1f612e35e7f00d4cab1_350x175.png) **2)多选框与单选框** 1. 同样也有disabled样式 2. 第一种是堆叠在一起的情况 3. 第二种是内联的样式 ~~~html
~~~ :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/7c/dd/7cdd4906413d29339ccf95f717458429_211x217.png) **3)下拉框** 1. 默认高度是34px 2. IE7、IE6低版本浏览器是不受CSS影响的 3. 如果还想好看点的话,可以用插件[select2](http://select2.github.io/),他还提供了额外的功能。 ~~~html ~~~ **4)静态控件** 1. 经常是在查看页面,直接将文字输出 2. 使用了form-control-static类 3. 注意这里用到了上面的流布局,我是在fieldset的父级加上了row-fluid的类。 ~~~html

email@example.com

~~~ **5)堆叠布局**   control-label-block,label标签上面加上这个类即可。 ~~~html
~~~ :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/16/51/1651f11b6b3606cac24cf5df101d9183_419x154.png) **6)内联布局** 1. 注意下面的span3,这里没有用流布局row-fluid,而是直接引用,这个时候不是百分比,而是写死的px值。 2. fieldset外面套的是form-inline。 ~~~html
~~~ :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/b0/d9/b0d91dbae970af9b087eeef7365a1915_597x55.png) **7)水平布局** 1. 标题label,默认是没有设置宽度的,可以添加span1或者其他设置宽度 2. 按钮可以设置offset1或者其他,来设置偏移 3. 加入form-horizontal类和row-fluid类 ~~~html
~~~ :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/ef/bd/efbd083cd68c1c44459ca138faf1d35a_491x145.png) **8)校验状态** 1. 表单免不了要做验证,而验证的时候就需要醒目的颜色提示 2. 默认给了三种颜色类.has-error、.has-warning和.has-success :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/e4/69/e469dca8c8a59b118be470bbee1971c4_527x240.png) ## 九、辅助类 **1)情境背景颜色**   通过颜色来展示意图,当你表单验证的时候,可以用下面的样式展示提示信息。 :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/16/46/164626d1520b4e51dd8d3cb41c121ee0_780x216.png) ## 十、组件 **1)分页** 1. 分页有四种情况,默认的、当前页、不可点击的和移过去变色 2. 分页可以通过URL来分,也可以通过ajax来分,用ajax的话代码会复杂一些 3. 下面是个简单的分页结构,有上一页,下一页,中间页面,还可以有总记录数,总页数,最后一页,第一页,跳转到第几页等 4. 分页也可以在样式不变的基础上,做不同尺寸 ~~~html ~~~ :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/71/34/713447daf0dd74da59b7dac800c2360f_247x50.png) **2)错误页面** 1. 例如404错误呀,查询信息但返回的是空页面。这些根据实际不同,都会特别的设计。 2. 这里做个简单的demo。demo比较朴素,没有图标,只有句简单的话 ~~~html

暂无数据

~~~ :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/21/4b/214be81257bb4bc0e29ce87d0d4ebe05_386x219.png) ***** [点击查看在线demo](https://pwstrick.github.io/melon-skin/) demo下载:[http://download.csdn.net/detail/loneleaf1/8961803](http://download.csdn.net/detail/loneleaf1/8961803) ***** > 已建立一个微信前端交流群,如要进群,请先加微信号freedom20180706或扫描下面的二维码,请求中需注明“看云加群”,在通过请求后就会把你拉进来。还搜集整理了一套[面试资料](https://github.com/pwstrick/daily),欢迎阅读。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2e1f8ecf9512ecdd2fcaae8250e7d48a_430x430.jpg =200x200)
';

然并卵

最后更新于:2022-04-02 06:11:56

  2015年已经过去大半年了,前面这段时间基本都是在加班加点赶项目度过的,勤青恳恳的敲代码,根据产品文档实现功能,然而这并没有什么卵用。完成的程序并没用得到公司的认可,也没有得到其他部门的认可,只有苦劳没有功劳。礼拜二那天还和一个客户端的同事吵了起来,我们两人是多年的同事,当时他异常的激动,起因其实只是一个小小的BUG引起的,换在平时,这根本不是个问题,也根本不可能为这事儿吵起来,一个巴掌拍不响,我们两个肯定都有错。吵架的细节就不说了,此处省略一百多个字。虽然第二天我们相互做了让步,就和解了,但这件事情,让我深刻意识到控制自己情绪的重要性,自己还不够成熟,很容易受外界影响然后心浮气躁,各种不淡定,由于情绪的大波动,很容易影响工作的心情、效率还有与同事的相处。 :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/ad/88/ad887361629e6b484b2271f8a6372612_312x209.png)   平时生活中,与自己相处时间最长的,恐怕就是同事了,如果同事之间相处的不愉快,不但会影响自己的生活,更会影响自己的工作,甚至会影响到别人的工作,问题非常严重。我那同事把我比喻成了一个炸药包,一碰就爆,难以沟通相处,很难合作。我脾气的改变,很大部分的原因是因为前面的几个项目造成的,怨气越积越重。平时的工作中一听到“这是服务器组的问题”、“这个要重写”、“需求改了”、“这个不是很容易实现的”等语句,一股无名的怒火就出来了,导致自己对产品、客户端、销售等有自己的成见,在与他们交流工作的时候,就表现的很不配合。 :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/6c/a3/6ca3110f79e1f9903130c95d7557fd1e_496x368.png =300x)   年前是在搞一个医疗APP的项目,当时出现的问题我在[另外一篇文章中](http://www.cnblogs.com/strick/p/4176761.html)分享了。这个项目加班加的很凶,尤其是发布前的几天,这个项目最大的问题就是产品需求太庞大,时间太短,最后在上线前的几天各种砍需求,做出了个四不像,老板看了APP就直接抛出这东西有什么用。最终项目终止,人员缩减,前面的只能算苦劳,对公司没有任何功劳。 :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/a6/4a/a64a0abae7184a28229843cd4754e775_210x194.png)   一月份的时候两个产品线合并成一个产品线,把剩下的人全部扑到一个母婴APP上面。当时休息了个元旦,上来的时候大家还是挺有斗志的。不过接下来的三次迭代把我们组给弄疲掉了,与其说迭代,不如说是改版,每次新的PRD出来,基本会有部分被推翻掉,并且有时候需求会临时改变。而且产品有些地方设计的不够人性化,有些地方设计的并不符合APP的特点。技术组的一些建议也基本被驳回,大家都是硬着头皮在写代码,一次两次三次后就疲乏了,士气也低下对产品的意见也越来越大。这样发展的话对大家都没有好处,技术组的人对产品的感情越来越淡,没有投入感情怎么能做出好产品,这种恶性循环是很可怕的。同样也会经常加班加点的赶功能赶进度,我们赶出来的东西比较渣,不但架构有各种漏洞,而且有些地方的实现逻辑有问题。给自己埋的坑越来越多,产品的扩展性也很差,可以说很难扩展。就这样修修改改一直到了三月份,这个时候给营销部门的用,营销部门的人对这产品不是很满意,她们的工作也很难展开。这个项目最终的结果还是没得到公司的认可与同事的认可,完全没有阶段性的成果,依旧只有苦劳。前面的辛劳工作真的并没有什么卵用。 :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/8d/d7/8dd7c7fec079d0db6d91c34ffb8ac960_547x445.png =400x)   三月份的时候,管理层觉得这个APP并不能很快给公司带来收益,所以开辟了新方向。借助微信公众号来构建一个知识平台。这次的开发就是纯网页+后台的开发,所以就不需要客户端的参与了,只是服务器组的事情了,当时说这个项目很重要,希望尽快完成。这次的产品换了个人,项目负责人也换了个人。产品PRD很快就出来了,这次的产品其实有个很大的问题,就是相关部门介入的太少,当相关部门验收的时候发现各种问题,很难让他们满意,虽然是加班加点做出来的,但是情况并不理想,我 们组做的时候热情很低,相关部门有时候还会过来提需求,并觉得这个做起来很简单,我们对于这些想法是很反感排斥的,导致了我对这些个人也有成见了,他们也不太愿意直接与我们打交道。   四月份的时候,突然插进一个项目,用当时我那领导的话讲,这个项目可以给公司带来现金流,极其重要,集中精力先把这个检测的功能做好。当时领导还承诺项目完成之后还有奖励和各种庆祝活动。经过加班加点的奋斗,几个礼拜后按期交货。由于缺少销售部的人的参与,当把这个程序交给他们的时候,他们觉得这个东西很难满足他们的要求。与期望结果的差距又很大。又是只有苦劳没有功劳。 :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/a4/94/a494a0fbcc69de75bf0fbde6a20f55d2_324x359.png =300x)   接着五月份,突然有发人冒出来,接手了这个检测项目,要将前面一个版本推翻重做。并告知我们这个项目意义重大,关系到公司的生死存亡,完成了,你们就是公司的大功臣,当时听的也是挺来劲的,想想以后就算不在这里做了,出去的时候也能吹牛说自己当年做了个很重要的项目,帮公司脱离困境,想想不错,那就搏一下啦。用了两个礼拜,把程序推了出来,销售看了以后,也挺满意的,这次的结果还算可以,一个阶段性的小成果。 :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/30/a7/30a7738204c56a918d29e0ce0b9ca5c2_398x379.png =300x)   马不停蹄的又开始了母婴APP的样式改版的工作,一刻都没闲下来,客户端的人都闲了快两个月了,都没事儿干。这次改版,我们组的人都拒绝了加班,基本都是到点就闪人,客户端的人已经把页面做好了,接下来就是调接口,但是调接口的时候又出现了各种问题,一些临界值、一些产品的漏洞、一些细节的把握等等。当时我的一个想法就是他们两个月了怎么连产品都没吃透,当时对于客户端就产生了质疑。这个质疑就埋下了过一个礼拜与同事争吵的伏笔。改了两个礼拜后,基本快好了,但是还没测试呢,这个时候被我们那的主管坑了下,他居然跟老板汇报说周五能上线,当时的情况是还有很多BUG没修补好,测试也仅仅是Android端,IOS端基本没测试。这个时候就又感到了不爽。而且IOS这边调试接口进度又特别慢,而Android端基本都快调好了。当我那个IOS的同事过来跟我讨论修改接口返回结构的时候,被我一口回绝,并且我还毫不客气的问他前一个礼拜干嘛去了,当时场面很尴尬,他都无法回答我,这个时候已经激怒了他只是没爆发。终于在过了一个礼拜后,通过一个小BUG导火线,他爆发了。 :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2f/50/2f50184ae8c96110070e17f9ea73cad4_241x182.png)   我的负面情绪越来越重,越来越觉得自己是炮灰,指挥官更替了几波,被他们各种指挥,今天指东明天指西,瞎转悠。到头来基本只有苦劳,没有功劳,这样越想越气,平时工作调接口,改需求等,就带着自己的一股怨气,搞的大家都不愉快,工作氛围越来越紧张。不够经过这次大吵后,我认识到了这个问题,今后得改,得慢慢改,一下子很难改正,与那同事的关系也恢复到了从前,我们争吵也是对事不对人,不夹杂人身攻击。放平心态,心如止水,要乐观积极向上,囧。 :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/f5/c6/f5c67f640274f7a1f578fe0b2cfa24f5_370x381.png =300x) ***** > 已建立一个微信前端交流群,如要进群,请先加微信号freedom20180706或扫描下面的二维码,请求中需注明“看云加群”,在通过请求后就会把你拉进来。还搜集整理了一套[面试资料](https://github.com/pwstrick/daily),欢迎阅读。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2e1f8ecf9512ecdd2fcaae8250e7d48a_430x430.jpg =200x200)
';

再一次项目反思

最后更新于:2022-04-02 06:11:54

  大约在三个月前,也写过一篇[这样的文章](http://www.cnblogs.com/strick/p/3946475.html),最近也在忙一个项目,最近几天有时间,所以就来这里发发牢骚。   这次要开发两个产品,为期两个月,包括两个APP和三个后台。与上次开发的项目相比,规模要大很多,功能点也要多一些,难度也要大一些。   我负责的是整个后台的前端、部分后台逻辑、部分API接口逻辑与数据抓取分析。 ## 一、雾中前进   这是我在这个迭代期中最直观的感觉,看不到前进的方向,也看不到离终点还有多远,有一种走一步算一步的赶脚。   每天都在忙碌,赶进度,但别人问你还剩下多少或者问你大约做了多少的时候,我却答不上来。   为什么会这样?因为我们在开发的开始阶段没有做项目进度计划,也没有做项目的时间评估。急哄哄的上来就开干,这是我们给自己挖的第一个坑。由于没做这个计划,自然而然的也就低估了这个项目的难度,乐观的以为凭借团队里成员们丰富的开发经验,可以很顺利的完成交付。后面吃进了苦头,经常的加班、返工、修改,陷入了一个恶性循环。 :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/90/10/90100f7de0ae85cfa319a4a0867c63b1_628x306.png) ## 二、原型的理解 **1)仓促的设计**   我们这边产品部门是在原型基本定稿之后,我们才开始开发的,所以需求的变更倒不是很多。不过产品部门的原型设计是在仓促出赶出来的,所以有很多地方写的很模糊,很容易产生歧义。 **2)准备不足**   在项目的开始阶段,没认真的看原型,没仔细的分析,后面出那么多问题,只能说自己当初太任性,怪不得产品太复杂。后面在开发的时候,遇到模糊的地方就与产品面对面的讨论,反反复复许多次,其实完全可以在项目伊始,就该注意到这些歧义点。 **3)原型大而全**   产品的原型做的是大而全,就是想一下子吃成胖子,他们可不帮你考虑实现难度这些问题。我们没做上面的分析,没有与产品讨价还价,等于默认照单全做,这是我们给自己埋的第二个坑。在接下来的日子里,光实现功能就花了我们很多的精力与时间,做出的产品质量可想而知,肯定是漏洞百出。 **4)产品瘦身**   最后在产品发布前不得不瘦身,将能有的功能先上,仓促的发布,非常影响大家的心情,辛辛苦苦做出的东西却被硬生生的砍掉。当初就该与产品据理力争一下,先将核心业务实现出来,然后再围绕这些核心开发出周边的一些可有可无的功能。让我们有充足的时间写出健壮代码,减少返工,少走弯路,稳稳上线,大家开开心心和和气气的,何乐而不为呢。唉.... YY一下啦。   下图是我听到瘦身时候的感受: :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/b3/bb/b3bbeb36d646585336fde319fdcba3a3_508x297.png) ## 三、团队的建设 **1)全新组建**   我们的团队是重新组建的,成员都是在项目中陆续加入的,十一月初的时候服务器组有4个人,IOS和Android各1人,设计1人。这是刚开始的配置,项目在开始45天后,服务器组10人,IOS有6人,Android有5人,设计有4人,团队发展迅速非常快。 **2)磨合期**   大家都是初次合作,就需要一段磨合期,不过项目非常赶,刚进来的人,基本都是给他们介绍一下后,就马上开始,这导致很多潜在问题。例如大家都是各自开发,很多功能其实可以抽象在一起,但每个人都写了一套,也没时间做code review,只能发现一个问题改一个,类似的地方还得复查一遍,以防出现同样的问题。再比如,一开始也没怎么订代码规范,有的成员没在方法的注释中写author,等这个函数出了问题,都不知道该找谁。 **3)对产品的理解不同**   成员都是后面陆续进来的,对产品的理解一开始都是模糊的,直接就开发,难免会走岔,返工是经常的事儿,边开发边理解产品就是我们目前的方式了。 **4)初次配合**   服务器与客户端之间的配合也是第一次,刚开始由于接口文档没有写具体,导致两边之间出现了些沟通问题,很耗时间,刚开始是举步艰难。古语说的万事开头难,真的很有道理。后面经过各种措施,情况得到好转,成员之间的默契也越来越好。 **5)代码从0开始**   刚开始的时候,啥也没有,大部分的工具类代码都没有,都是重新写的,这个也是挺耗时间与精力的。前端的JS脚本和CSS都是重新设计编写,写的代码肯定也不会很健壮。项目开始的时候服务器端只有4个人,我们是先编写后台,所以还得再分出一个人去做前端,人员就更加紧张了。 :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/a3/fb/a3fb38290af78f80eb08346c832a9212_330x201.png) ## 四、与产品的沟通 **1)认识层面不一样**   一个大问题,开发人员与产品设计的理解总是不在一个频道上面。例如原型上面的一个功能,我们按照对原型的理解开发好了,给产品的看要么不是这样做,要么又漏掉了一些细节。有时候在与产品的人讨论过后,我们在开发后也会出现类似的问题。后面就采取措施,每次讨论就要产品把要修改的地方发邮件出来,有根有据的,出了问题也能找到在哪块做岔了。 **2)情绪作怪**   情绪也是个大问题,功能多,时间紧,经常返工,这无形中就给了我们很多压力。有时候在与产品部讨论功能的时候,他们让我改这改那,心中会有种潜在的排斥心理,就是不想配合你,有时甚至会有点怒火,果然还是年轻气盛。经常会听到站在对方角度看问题,就能理解对方,说起来容易,做起来好难。 **3)站的角度不同**   产品设计人员不懂开发,经常是要实现一个功能,但对我们开发来说却不会那么简单。原型上面就有很多这种耗时间的功能,托我们开发的进度,在我看来完全可以在迭代的第二期完成,把核心功能做做扎实,把大流程跑通,大家都方便。产品设计的人是完美主义,我们程序开发是现实主义。 **4)没做短期交付**   我感觉应该每个礼拜都给产品看个demo展示,如果有业务错误就能马上纠正,不用等到后面再花大力气修复。也能让产品的人知道项目进行到什么程度了,让他们心里有底,让他们能早点做补救措施的决定,别到了后面几天才想到抢救。不过做起来还是挺麻烦的,给他们看代码肯定不行的,他们要看的是能操纵的东西,要有血有肉,开始的阶段没数据没页面,流程也跑不起来。得想办法给他们一个能看的懂的东西。   开发的过程中,我经常会向下图那样凌乱: :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/ae/4c/ae4cb48f09588f7b5f24c428313a2399_346x430.png) ## 五、抓数据   为了丰满页面,需要大量的外部数据,只有通过抓取其他网站的数据才能获得。抓数据这块有很多坑,踩了好多个。刚开始是自己抓,我在上一篇[《用PHP抓取页面并分析》](http://www.cnblogs.com/strick/p/4055283.html)写了点分享。后面时间不够,公司就花钱让外面的人抓了,本以为会轻松很多,没想到还是有很多坑。 **1)反复抓取**   刚开始产品的说要以XXX网的数据为准,我们就按照指令去那边抓。后面又说以YYY网的为准,那我们就重新把那个网站的数据抓下来。最后告诉我们说,要以他们自己的一套数据为标准,将抓来的数据和那套数据做个映射关系。一下子感觉好坑,但是没有让产品写抓取数据的规范说明,只能自己认栽啦。这样几个来回让我们非常厌恶抓数据了。 **2)分析数据**   后面让第三方来抓,为了图简单,我们把给抓数据的人定了数据库表,想到时候就直接倒进来。后面在分析数据的时候,缺了很多字段,这些信息都抓取不到,有些数据还是错误的。这些毛胚数据完全不能用,只能再写脚本纠正,有些需要人工校对,先把数据导出成execl,让产品的人整理,再把整理后的execl给我们开发,我们再编写不同的脚本导入到数据库中。反反复复好多次,脚本也写了一个又一个,为这个操碎了心。 **3)条理不清晰**   在还没有跑通正常流程前,就匆匆忙忙的把抓来的数据放到数据库中,直接导致客户端各种问题,不是图片显示不了就是信息没有或者就是直接报错。客户端的APP迟迟不能给产品看,就是因为数据太渣根本没法用。后面将这些数据清掉,走正常流程,从我们的后台录入,录入一些完整的数据,在客户端显示,效果非常明显,客户端的流程顺畅的跑起来了。 :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/00/b8/00b85597c3ebdf83231c67ed02372cbf_441x301.png)   想做好一件事情,绝对需要付出很多精力脑力。前面我提到的很多问题,其实都有很多方法可以对付它们,或者在它们暴露之前就可以扼杀在摇篮中。如果有丰富的经验应该已经一早就能意识到前面有多少坑了。开发经验很有用,解决实际问题的能力很重要。以后还得多积累积累,做到临危不乱,沉着应对,谈笑间樯橹灰飞烟灭。 ***** > 已建立一个微信前端交流群,如要进群,请先加微信号freedom20180706或扫描下面的二维码,请求中需注明“看云加群”,在通过请求后就会把你拉进来。还搜集整理了一套[面试资料](https://github.com/pwstrick/daily),欢迎阅读。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2e1f8ecf9512ecdd2fcaae8250e7d48a_430x430.jpg =200x200)
';

2015年

最后更新于:2022-04-02 06:11:52

  这次也是创业公司,但与以往不同的是,起点很高,起步资金有1500W,而且给我开的工资破万,对我也很有吸引力。这家公司我待的时间蛮长的,有一年半,而且同事之间的感情也比前面两家要好。我在这家公司主要做PHP,兼顾页面的制作。 ## 一、项目开始前   刚开始办公是在漕河泾那边,租的办公室还在装修,可以说休息了将近一个月,就帮公司做了个PC主页,其他时间基本都是摸鱼状态。  **1)吃饭**   中午是包饭的,由于不差钱,于是买了日本进口的那种米,再买了个5000块钱的电饭锅,中午的米饭都想多吃一碗。点的外卖每天都在变,有时候送过来的不是一次性碗,而是那种陶瓷碗,吃完他们会回收的那种,总之价格是其次的,口感才是重要的,公司处处透露着金元的味道。 **2)办公环境**   公司从各处高薪挖来了各种人才,很多都是外企的。他们比较注重企业文化,强调以人为本。让行政采购了一批健身器材,并且还特地在办公室装了个浴室,本来还说要装备按摩椅、休息室啥的,后面这些都没有实施。新的办公地非常宽敞,是我上班到现在见到的最宽敞的办公室。还建了一条塑胶跑道,供大家休闲用。 :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/a7/32/a732bb30af138f9e39d30f45241056b1_1778x616.png =800x) **3)开张大吉**   搬到新地址的时间是老板请风水大师推算的,公司准备了饮料、酒、烤乳猪、甜品等各类食品,那天大家都很开心。开工仪式也很容重,拜天拜地的,一直搞到下午,然后就提前下班了。项目开始前,氛围异常轻松,前景一片光明,似乎已经看到项目成功后的画面了。 ## 二、第一期项目   紧接着十一月份,项目正式启动,我们要做两个产品,分成两组,每组3个PHP、3个iOS和3个Android,为期两个月,团队规模要比以前大很多,但项目难度也比以前大很多。 **1)赶进度**   产品的原型已经有了,好多页,异常复杂,但是团队的成员却还没来齐,陆陆续续的才招齐。加班加点是跑不了的了,很多时候都是到凌晨的,同事也很拼,生病了都不去休息直接回来上班,还有个同事爱猫丢了,也只能先来上班。我除了要做后端的开发,例如支付接口对接、搜索引擎coreseek的配置等工作之外,还要布局后台页面,采用了RequireJS模块化开发。 :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/01/88/0188b1294e83f38ce295322fa1b8c7d9_640x864.jpg =300x)   虽然从早忙到晚,但项目却没有按预期的计划那样执行,最终不幸夭折了,个中缘由可以浏览我的另一篇《[最近一个项目的反思](https://www.cnblogs.com/strick/p/4176761.html)》。 **2)裁员**   12月份的时候,开始大规模的裁员,公司的两个产品砍掉一个,开发、运营、人事、商务、市场等各个职位的人也砍掉好多。后面才知道,裁掉的除了那些倒霉的开发人员之外,还有以另一个同事为首的小团体,那批人都是她挖过来的,这是公司的首次内斗。 **3)游戏**   公司规定,每天的三点半要进行半个小数的活动,俗称三三零活动,每天会有一个部门的人来策划活动并主持,有一个同事玩的投入,把脚搞骨折了,最后在医院躺了一年。在加班加点的时候,还是蛮反感这种活动的,打断我的思路。不过现在想想,这种活动还是挺不错的,让你不用久坐,活动活动筋骨,让自己更有活力。 ## 三、第二期项目   一月份将两条产品线合并成一条后,人员基本就定了,第一次震荡结束。 **1)开辟新业务**   公司渴望创造营收,于是就开辟了一项能马上带来现金的业务。这次与以往不同的是,需要在微信平台开发,也就是通过微信给出的接口,研发自己的业务。不过又出现了新的问题,具体可以阅读我的另外一篇博文《[然而这并没有什么卵用](https://www.cnblogs.com/strick/p/4589951.html)》。 **2)再次裁员**   一晃到了9月份,发生了一件比上次更劲爆的事,我们的老板被股东裁掉了。听说他把投资人的钱挪用到了其他地方,让投资人非常的愤怒,解除并起诉了他。这么多年我还是第一次见到老板被裁掉的,一并裁掉的还有老板的心腹。后面公司从外面找了些人回来,负责公司的产品,但大家都不是很待见他们,公司的项目也一度停滞了,我也闲了好几个月,中途做了个H5页面的[外包](https://www.cnblogs.com/strick/p/4942637.html),赚了点零花钱。一直到2016年1月份,终于公司再次大裁员,将我们团队的负责人以及他找来的人一并裁掉,我也是其中之一,赔偿了2+1。   2015年也是蛮坑的一年,勤勤恳恳的工作,只有苦劳没有功劳,公司就像是一部清朝宫廷剧,经常有戏剧性的事情发生,人物关系错综复杂。 ***** > 已建立一个微信前端交流群,如要进群,请先加微信号freedom20180706或扫描下面的二维码,请求中需注明“看云加群”,在通过请求后就会把你拉进来。还搜集整理了一套[面试资料](https://github.com/pwstrick/daily),欢迎阅读。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2e1f8ecf9512ecdd2fcaae8250e7d48a_430x430.jpg =200x200)
';

前端基础学习分享

最后更新于:2022-04-02 06:11:49

  这是一篇写于2014年的文章,当时在公司内部做了分享,有些技术目前已经过时。   用a标签制作一个按钮为主线,然后围绕这个按钮,做一些效果样式等操作。附件中可以下载CSS参考手册。 ## 一、工具   工欲善其事必先利其器。我们首先需要准备好调试工具,这里我就简单介绍几种,firefox、chrome以及IE。 **1)Firefox**   我们用到的是firebug,非常好用,工具-》附加组件。这里有一篇[firebug教程](http://www.w3cschool.cc/firebug/firebug-tutorial.html)。 :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/e0/1b/e01bdce5d7adb3e7f9317acff7a79cca_277x205.png)   安装好后按F12就可以直接调试了: :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/5c/56/5c56e85665c16f5c0c3837141174126e_1203x306.png) **2)Chrome**   Chrome的调试工具默认就是自带的,也是按F12就可以出来,但这个调试工具还带了个手机的模拟器,可以用来调试手机页面。 :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/7a/a5/7aa50fb03870ca12bb008dd9531170a2_412x353.png) **3)IE**   IE有许多版本,而一台电脑上面默认安装的只能是一个版本的IE,这个时候就需要[IETester](http://www.my-debugbar.com/wiki/IETester/HomePage)来协助了,它能模拟多个版本的IE,不过后面我在调试的时候发现,CSS模拟的还不错,但JS有时候模拟的就不对,所以用这个调试CSS还可以,以后如果要调试JS的话,就自己装个虚拟机来调试吧。里面也带了个调试工具,但不是很好用。 :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/04/b4/04b486f63444cdc3a48dcaaa583293ac_925x530.png =800x)   IE8以后,浏览器也会自带调试工具,那个就好用很多了,也能实时修改CSS属性。 **4)Fiddler**   它是一个非常强大的http(s)协议分析工具。如果你需要查看在手机上打开页面时,查看所产生的http请求,那么用这个工具是不错的选择,[《使用Fiddler调试手机页面请求 》](http://i.wanz.im/2013/04/30/debugging_http_request_with_fiddler/)介绍配置fiddler,让其也能监测手机的请求。 :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/f1/2a/f12a3842a576219dd6aee1a15a242957_502x526.png) ## 二、基础CSS   先推荐几个以后常用的网站: 1. 可以在[caniuse](http://caniuse.com/)上查询各种兼容性。 2. [html5test](http://html5test.com/)可以检测当前访问的浏览器对HTML5特性的支持程度。 3. [html5readiness](http://html5readiness.com/)以时间纬度展示所有浏览器HTML5特性的可用性。 4. [HTML5 Boilerplate](http://www.bootcss.com/p/html5boilerplate/),最流行的web开发前端模版 5. [Mozilla开发者网络(MDN)](https://developer.mozilla.org/zh-CN/),在这里能够查到最新最全的资料,有些页面是英文的 **1)不添加任何样式,朴素的效果如下:**   蓝色,下划线,这些都是a标签默认的样式,很多情况下,标签的默认样式是需要重置的。有网友整理了浏览器标签的默认样式,[《](http://www.cnblogs.com/dragontappi/archive/2011/04/08/2009991.html)[HTML标签CSS属性默认值汇总](http://www.cnblogs.com/dragontappi/archive/2011/04/08/2009991.html)》。在我写的另外一篇文章中,展示了一段重置的CSS代码,[查看reset.css](http://www.cnblogs.com/strick/articles/4201015.html)。   一则,重置后浏览器的兼容性能更好。   二来,有些默认属性是很多余的,例如下面的这个下划线,很多地方都不需要这个样式。 :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/8b/f6/8bf6f13ac5e95e75f6e99cec6ddd42f3_346x77.png)   HTML代码如下,标签都会自己的特有属性,例如下面的href。 ~~~html 按钮 ~~~   在[w3school](http://www.w3school.com.cn/tags/)网站上可以看到各个标签的详细属性,有些属性是支持HTML5的浏览器才能使用的,例如下图所示,有个icon的就是HTML5独有的。 :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/e5/13/e5130c867723098f06cacf9a93a05a78_606x201.png) **2)去除默认样式,改变字体颜色大小,背景等** :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/3a/ca/3aca07069bb0c72a27d3df32dd536efd_334x86.png)   CSS代码如下: ~~~css .btn { text-decoration:none; color:#FFF; font-size:20px; line-height:30px; background-color:#27a9e3 } ~~~   几个常用属性,奥妙无穷。从CSS参考手册中可以查看到:   color可以有多种指定方式:Color Name(颜色名称), HEX, RGB, RGBA, HSL, HSLA, transparent。   font-size的单位可以是px、em、pt或者是rem。这里[《CSS中强大的EM》](http://www.w3cplus.com/css/px-to-em)比较详细的介绍了em。   background在CSS3中又多了几个新属性background-clip、background-size等   一个简单属性的赋值可以是多种的,不同场合用哪种方式比较合适,这是需要调试的,这里只做一个简单的抛砖引玉,有兴趣的可以去按需深入研究下。 **3)让按钮更美观——补白**   上面那张图中的按钮比较丑,字跟边都帖在一起啦。得内补白一下。 ~~~css .btn2 { padding:10px } ~~~   效果如下所示,虽然只加了一个属性,但是效果明显要好很多了。 :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/04/bd/04bd59667bf4fa4c5d1511b792121681_359x110.png)   补白是在页面布局中经常用到的属性,分为外补白【margin】和内补白【padding】。   下面这张图我是加了margin的,上下左右四个方向都加了,但是上面的外边距在我的firefox中失效了。   这里就要提一下,一些属性在某些场合是失效的,有些情况是不同内核的浏览器显示的不一样,有些可以,有些不行;有些情况是所有浏览器都不行。   这种时候就要通过搜索引擎来搜索了,网上肯定有很多人碰到过相关的问题。 :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/b6/8e/b68e2bc501e225f518ffd8c0bcda75fe_355x102.png) ~~~css .btn2 { padding:10px; margin:10px } ~~~   网上找了张比较立体感的示意图: :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/3f/eb/3feb8e488a4aeaae2cb8a05dc3a53a73_564x259.png)   这里顺便提下CSS hack技术:   如果你仅仅是要一种浏览器显示正确,那可以完全忽略这段介绍,如果不是,那你可以阅读下。   由于不同厂商的流览器或某浏览器的不同版本(如IE6- IE11,Firefox/Safari/Opera/Chrome等),对CSS的支持、解析不一样,导致在不同浏览器的环境中呈现出不一致的页面展现 效果。这时,我们为了获得统一的页面效果,就需要针对不同的浏览器或不同版本写特定的CSS样式,我们把这个针对不同的浏览器/不同版本写相应的CSS code的过程,叫做CSS hack!   这是一种比较次的方法,只有在万不得已的情况下才使用。很多时候是可以避免出现这种情况的。   有网友整理了一套hack方法——[《CSS hack方式一览》](http://blog.csdn.net/freshlover/article/details/12132801)。   从[statcounter](http://gs.statcounter.com/)上获取到的最新浏览器统计记录: :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/e3/58/e358caa9759b07ff2dfd57c19778a758_842x481.png) **4)来个两行按钮,每行显示三个按钮** ~~~css .btn3 { padding:10px; margin:10px } ~~~ :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/9d/3e/9d3e7178cb2a9e54217e416dabc6cc9a_367x135.png)   的确是两行,三列了,但是明明加了margin了,上下还是贴在一起了。这里就涉及到一个知识点。   html中有块级元素与行内元素之分,a标签默认是行内元素,而行内元素的一些特性导致了上面的结果。   这里有篇介绍两者区别的文章[《行内元素与块级元素的区别和常用标签》](http://www.l3c.cn/a/HTML5/2013/0926/3.html)   我先简单的介绍下两者的特点: 1. 块级元素【**Block-level element**】 块显示的元素,高度宽度都是可以设置的。比如我们常用的 p, h1~h6, div, ul 默认状态下都是属于块级元素。块级元素比较霸道,默认状态下每次都占据一整个行,后面的内容也必须再新起一行显示。 2. 内联元素【**Inline element**】 文本的显示方式,与块级元素相反,内联元素的高度宽度是不可以设置的,其宽度就是自身文字或者图片的宽度。我们常用到的、、都属于内联元素。   1、通过属性display可以将元素变成块级、内联或内联块元素等。这三个比较常用,它还有好几个值可以选择。 ~~~css .btn3 { padding:10px; margin:10px; display:inline-block } ~~~   立刻立竿见影,好看了许多。 :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/9c/c3/9cc30952f81678c9a5f2e148bde2bc47_359x215.png)   2、页面在一行上面,经常是用float浮动来做的。 ~~~css .btn3 { padding:10px; margin:10px; float:left } ~~~ :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/86/66/8666f5ebbb9dbd2ad19e1a4ba67d63ce_354x212.png)   与上面的比起来,有个细微的差别,那就是按钮之间的右艰巨小了一点。   这个是由于inline-block造成的,因为*inline-block元素之间是有间隙的*,有些布局的情况是不允许有间隙的,宽度间距都是算好的,突然来个不能计算的间隙很容易让布局变形。网上有很多具体的解决方法,例如[《inline-block元素间间隙产生及去除详解》](http://demo.doyoe.com/css/inline-block-space/)   float浮动的用法也是很有讲究的,我这里只是做个简单展示,很多情况下,浮动完后是需要清除的。清除的方法也有很多,网上也是一大堆,例如[《些年我们一起清除过的浮动》](http://www.iyunlu.com/view/css-xhtml/55.html) **5)把按钮放到靠左30px,离上面40px的位置**   果断用position定位,这东西有些地方妙用一下,还是很有用处的。 :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/0c/cb/0ccb5d7b0e8bd856855815bd0382fdbb_351x152.png)   首先要将按钮的父标签设置为position:relative,然后a标签设置为position:absolute。   网上有个关于position的系列文章[《CSS 相对|绝对(relative/absolute)定位系列》](http://www.zhangxinxu.com/wordpress/2010/12/css-%E7%9B%B8%E5%AF%B9%E7%BB%9D%E5%AF%B9%E5%AE%9A%E4%BD%8D%E7%B3%BB%E5%88%97%EF%BC%88%E4%B8%80%EF%BC%89/)可以参考下。 ~~~css .container2 { position:relative; height:100px } .btn4 { position:absolute; top:40px; left:30px; padding:10px; } ~~~   下面的图片布局样式很普通,左边一张图,右边一些说明文字。   我以前布局的话就会用float浮动,给图片和文子两块区域设置为float:left来布局,最后还得做清除浮动。   现在的话我可以用position定位,把图片设置为position:absolute,这样右边的文字区域就能简单的用margin-left来指定位置,避免使用浮动。   顺带说下,下图中的旅行两个字也是用定位来设置的。 :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/92/96/9296580b90d6e1a7200d535a035b97f6_708x206.png) **6)给按钮做个移上去变色的效果**   这里涉及到CSS选择器的概念,将使用:hover来达到效果。 :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/0a/06/0a063d88aaebc958f2fcd48b2a907436_354x100.png) ~~~css .btn5:hover { background-color:#faa732 } ~~~   我以前写过一篇随笔,记录了这些选择器,[《CSS选择器的一些记录》](http://www.cnblogs.com/strick/p/3855874.html)。   顺带说下,你可以在[css3.info](http://tools.css3.info/selectors-test/test.html)网站上面可以测试当前浏览器对CSS选择器的兼容程度。测试不包括:hover,:active, :focus,:selection,:visited,:link。   还有[fortawesome](http://fortawesome.github.io/Font-Awesome/)是一个字体库,里面的CSS代码中就大量用了选择器。例如下面的那个手指icon,CSS我只摘取了部分。 :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/1b/a9/1ba945d150d6c767497024a6cf9b3d14_211x53.png) ~~~css .icon-hand-down:before { content: "\f0a7"; } [class^="icon-"], [class*=" icon-"] { font-family: FontAwesome; font-weight: normal; font-style: normal; text-decoration: inherit; display: inline; width: auto; height: auto; line-height: normal; vertical-align: baseline; background-image: none !important; background-position: 0% 0%; background-repeat: repeat; } ~~~   :before与:after这两个选择器,使用的场景也非常多。在网上搜索下,会有一大堆相关资料,挑自己感兴趣的研究吧。 ## 三、CSS3与HTML5   接下来讲一些CSS3与HTML5的特性,最近这个东西特别的火。 **1)给按钮加个圆角**   如果是以前,那就得切图啦,切几个圆角,然后贴在指定的位置,特费神费事。但自从有了[border-radius](https://developer.mozilla.org/zh-CN/docs/Web/CSS/border-radius),让这一切变的so easy。 :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/6c/ed/6cedcf8332599d5d33516c5a502d3600_352x97.png) ~~~css .btn6 { -webkit-border-radius:10px; -moz-border-radius:10px; border-radius:10px; padding:10px; } ~~~   \-webkit与-moz这是私有前缀,早期的firefox或chrome浏览器只认这些私有前缀的CSS3属性。 * \-moz-对应 Firefox,  * \-webkit-对应 Safari and Chrome * \-o- for Opera * \-ms- for Internet Explorer **2)给按钮加个阴影**   丑是丑了点,这里只做个演示,给个思路。 :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/3b/ce/3bce088fafac3191480ba3aa6c682081_354x101.png) ~~~css .btn7{ -webkit-box-shadow: 0 0 10px 10px #000000; box-shadow: 0 0 10px 10px #000000; padding:10px; } ~~~   现在网上有很多在线调试CSS3代码的小工具,这个就是在线调试的。例如[CSS3 Generator](http://css3generator.com/)。 :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/8e/ea/8eeaceab84ecfe17cd2f2cfc188b7f5e_757x404.png =500x)   这里顺带便再分享几个在线调试工具: 1. [CSS Gradient Generator](http://www.css3factory.com/linear-gradients/) 2. [Gradients、Shadows、CSS Transforms、CSS Text Stroke](http://westciv.com/tools/) ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/18/82/188200d98912669d4015ade2b1eac9dd_1008x377.png =500x) 3. [自己制作icon](http://icomoon.io/) 4. [自适应图片](http://adaptive-images.com/) 5. [傻瓜化的矩阵变形工具](http://www.useragentman.com/matrix/) 6. [CSS3 背景渐变图案](http://lea.verou.me/css3patterns/) 7. [Ultimate CSS Gradient Generator](http://www.colorzilla.com/gradient-editor/) 8. 国外的[fontawesome](http://fontawesome.io/),国内的[iconfont](http://iconfont.cn/) 9. [丰富的css3动画效果](http://www.justinaguilar.com/animations/) ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/a7/98/a7982abdbf4bdb361172385ee67cadff_268x342.png) **3)来个高大上的动画按钮**   以前记录过[《CSS3动画的属性》](http://www.cnblogs.com/strick/p/3839873.html),现在搬出来看看,参考一下。   随便搞了个效果,代码就一大堆。移到中间的时候就变大,移到两边再恢复。 :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/83/70/837063b2da6ba2f3d48f3c6bc443049d_318x120.png) ~~~css .animation1{ -moz-animation-duration: 3s; -moz-animation-name: slidein; -moz-animation-iteration-count: infinite; -moz-animation-direction: alternate; -webkit-animation-duration: 3s; -webkit-animation-name: slidein; -webkit-animation-iteration-count: infinite; -webkit-animation-direction: alternate; -o-animation-duration: 3s; -o-animation-name: slidein; -o-animation-iteration-count: infinite; -o-animation-direction: alternate; -ms-animation-duration: 3s; -ms-animation-name: slidein; -ms-animation-iteration-count: infinite; -ms-animation-direction: alternate; animation-duration: 3s; animation-name: slidein; animation-iteration-count: infinite; animation-direction: alternate; } @keyframes slidein { from {margin-left:50%} 50% {font-size: 300%;margin-left: 25%;width: 150%;} to {margin-left:0;} } @-moz-keyframes slidein { from {margin-left:50%} 50% {font-size: 300%;margin-left: 25%;width: 150%;} to {margin-left:0;} } @-webkit-keyframes slidein { from {margin-left:50%} 50% {font-size: 300%;margin-left: 25%;width: 150%;} to {margin-left:0;} } @-o-keyframes slidein { from {margin-left:50%} 50% {font-size: 300%;margin-left: 25%;width: 150%;} to {margin-left:0;} @-ms-keyframes slidein { from {margin-left:50%} 50% {font-size: 300%;margin-left: 25%;width: 150%;} to {margin-left:0;} } ~~~ **4)现在来说说HTML5**   这里就先不做演示了,就点一下。我现在也正在研究那些特性。 1. canvas 元素   画布是一个矩形区域,您可以控制其每一像素。   canvas 拥有多种绘制路径、矩形、圆形、字符以及添加图像的方法。使用 HTML5 canvas 绘制精美的图形。   例如下面这个,可以用鼠标来拖放。[模拟衣服撕扯动画](http://www.html5tricks.com/demo/html5-cloth-tear/index.html),这效果已经亮瞎了我的眼。 :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/65/80/6580c8f48361e1653b14ad8554163f8a_409x207.png) 2. 数据存储   像Cookie一样,这些数据不会因为你打开新网站,刷新页面,乃至关闭你的浏览器而消失。   而与Cookie不同的时,这些数据不会每次随着HTTP请求被发送到服务器端(当然如果你需要这么做,你可以自己编程实现 )   因为这是HTML5规范的一部分,这一接口会被浏览器原生支持,不用依赖任何第三方插件。   在[caniuse](http://caniuse.com/)网站上查看local storage兼容性。 3. HTML5离线应用   使用它的本地缓存机制可以将应用所需的资源文件都缓存到本地,从而实现应用的离线使用。   应用程序缓存为应用带来三个优势:   离线浏览 - 用户可在应用离线时使用它们   速度 - 已缓存资源加载得更快   减少服务器负载 - 浏览器将只从服务器下载更新过或更改过的资源。 4. WebSocket   HTML5 WebSocket 设计出来的目的就是要取代轮询和 Comet 技术,使客户端浏览器具备像 C/S 架构下桌面系统的实时通讯能力。   浏览器通过 JavaScript 向服务器发出建立 WebSocket 连接的请求,连接建立以后,客户端和服务器端就可以通过 TCP 连接直接交换数据。   因为 WebSocket 连接本质上就是一个 TCP 连接,所以在数据传输的稳定性和数据传输量的大小方面,和轮询以及 Comet 技术比较,具有很大的性能优势。 ***** 附件下载: [CSS参考手册下载](http://download.csdn.net/detail/loneleaf1/8527883) [w3school-html5.chm](http://download.csdn.net/detail/loneleaf1/8529545) [示例代码下载](http://download.csdn.net/detail/loneleaf1/8529529) ***** > 已建立一个微信前端交流群,如要进群,请先加微信号freedom20180706或扫描下面的二维码,请求中需注明“看云加群”,在通过请求后就会把你拉进来。还搜集整理了一套[面试资料](https://github.com/pwstrick/daily),欢迎阅读。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2e1f8ecf9512ecdd2fcaae8250e7d48a_430x430.jpg =200x200)
';

项目反思

最后更新于:2022-04-02 06:11:47

  入行这些年,没多少成功的经验,失败的经验却越来越多。今天花点时间好好的反思一下,老是稀里糊涂的可不行。我下面写的不针对任何人,就事论事。 :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/09/68/09687f4c3433b4b232007578ea363e7d_556x242.png) ## 一、无管理核心   缺少了这个重要的凝聚力,下面的人可以说是在单兵作战,一盘散沙,各自为战,怎么可能把项目做好。还有下面的这些问题: 1. 团队成员碰到的问题无法得到及时的协助和解决,会让人有越来越多的挫折感。 2. 无人管理开发文档,开发任务没有科学的制定会拆分。 3. 由于没人督促,readmine形同虚设,完全没发挥他的作用。 4. 人员不能被合理的分配,成员之间的协作越来越少,甚至有隔阂。 5. 不能有效的控制需求,一会儿做这个,一会儿做那个,最后什么也没做成,士气越来越低。 6. 项目中遇到的意见不统一、冲突,都不能有效的协调好,团队成员思想不能一致。 7. 无法把控开发人员们的进度。 8. 阶段性成果,没有安排时间及时确认。   接下来的那些问题很多都是因为无管理核心导致的,联动效应。 ## 二、需求混乱   规范点的说,需求的管理应该只有一个进口一个出口,拿到需求后,先做个分析,分解细化,然后再转换成可执行的操作,画原型,制作效果图。   现在的情况是出现开发与规划不符的情况时候,直接与开发人员确定需求,今天要这样改,明天那样,不断的变化,得不到控制,原先的开发计划不断的插入新的功能修改,完全不按照计划来了,最后当然不能在指定日期完成预定功能了。   开发人员没有参与到需求的讨论中,听需求的人,在把需求传达给开发人员,经常会出现偏差,最后开发人员买单,将做好的功能页面等再推翻,修改,费时费力,还影响开发人员的心情。   经常会纠缠于一些需求的细节,一步到位,力求达到最好的用户体验与效果。我个人觉得用户体验的好坏是需要真正的用户用过以后才能确定的,在开发阶段是快速的将一个可用的软件拿出来,以后再根据各种数据为基础,改进用户体验。项目的开发都是渐进明晰的,一开始的开发肯定不能预料到各个方面,既然预料不到,就把重要的先做好,以后再改,有了可用软件,什么都好说。   还把测试人员给拖累了,经常会抱怨开发人员临近上线才开始提交代码测试,抱怨开发人员自己不好好测试。临近上线还要一堆BUG。完全没有留时间给他们,让他们很难做,有时候是快到上线日了,软件都还没有,根本没有测试的东西,别人很忙,自己却很清闲。 :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/a3/aa/a3aa4151c99dee8b1a8f1c8370747cde_1558x1174.png) ## 三、不懂业务   开发开始前,应该让开发人员们使用市面上面相关的软件,实际操作下,体验流程。实际操作的效果比嘴上说要有效的多。在操作的过程中,就能体会到市面上的软件哪些地方做的不好,哪些地方做的好,真正换位到用户的位置上。大家嘴上常说要换位思考,但实际操作起来真的很难,但让自己做一个真正的用户就方便很多。   开发人员不懂业务,是个软肋,导致很多问题。第一个是最大的问题。 1. 无法质疑需求的合理性,上面传达下来的需求即使有错,也继续编码,最后就是返工。 2. 很难对项目提出一些比较好的建议,有时候也不能有效的和最高决策人沟通。 3. 开发人员自己估算工作量的时候,会有一些偏差。 4. 代码的设计会有影响,懂业务能更好的设计代码的结构,扩展等 ## 四、沟通阻塞 **1)测试人员与开发人员之间:**   一开始测试人员不熟悉系统,提了许多易用性方面的问题,还有一部分BUG在开发人员眼中并不是问题——就是那样设计的。在提出后,放到readmine上面,分配给测试人员认为的相关开发人员,到这里都很自然顺畅。但是挂在readmine上面的这些问题就这样挂着了,不修改也不反馈,不了了之了。他们的工作很难展开,测试与开发之间出现了小隔阂,团队的凝聚力越来越低。   后面经过大家的讨论,给出一个解决方案。需要一个中间的管理人,让他去分析提交上来的问题,根据他的理解定位这个问题属于谁,再由他转给某个开发人员,由这个人来追踪。测试人员的工作也单一了,不会老是由她来催促修改问题。 **2)Web端与服务器之间:**   这次的项目是需要不同终端互相协调的,web端需要服务器端提供接口协助,让那边提供接口却总是一拖再拖,迟迟不给,即使在readmine中开个任务,还是没有在预定的时间中给接口,一催二催三催,没有结果。这里也缺少个中间的协调人,需要这个人做沟通,安排时间,分配人力,满足web端的需求。开发人员之间是平等的,不存在指挥的关系,谁也管不动谁。开发人员之间出现了小隔阂,团队凝聚力再次降低。 **3)开发人员与需求提供人员之间:**   需求的提供有从最高决策人那里直接发出,有时候也会通过另外几个人员发出。由于需求的一直变化以及传达的时候经常出现偏差,导致了开发人员不在非常相信他们,对于他们提出的需求,经常会做反复的确认,但最后还是会改。他们做的原型或设计的流程,与最高决策人做一一确认有点不现实,这样经常会导致被推翻,直接影响了开发人员,开发人员在实现了以后也要返工。这个地方缺少了个需求的管理者,需要他来制服需求,这头猛兽在摧残着各个相关人员。反复无常的变化,让他们的工作也很难展开。开发人员与需求提供人员之间出现了小隔阂,团队凝聚力势必再次降低。 ***** > 已建立一个微信前端交流群,如要进群,请先加微信号freedom20180706或扫描下面的二维码,请求中需注明“看云加群”,在通过请求后就会把你拉进来。还搜集整理了一套[面试资料](https://github.com/pwstrick/daily),欢迎阅读。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2e1f8ecf9512ecdd2fcaae8250e7d48a_430x430.jpg =200x200)
';

2014年

最后更新于:2022-04-02 06:11:45

  这一年是比较昏暗的一年,我换了三家公司,这其实是一种很不好的情况,跳槽太频繁了。   这家就是我实习和兼职的那家公司,当时和老板一直有联系,他希望我过去帮忙,但我一直婉拒。后面公司解散了,把我们安排到另外一家公司去,我们都不想去,就全部自谋出路了。 ## 一、旅游公司 **1)面谈**   没有合适的去处,就去这家旅游公司了。当时的情况有所不同,我主动过去的,公司老板姿态就高了,开始压工资,换成现在的我肯定马上就走人了。不过那时候还是职场新人,资历不够,也没合适的地方去,就也没说啥了,工资很低,但承诺给我奖金。于是下周一就正式去上班了,去公司的时候发现又换了一波人,私企的常态,人员流动非常大。 **2)接盘**   公司招了一个开发,那老伙身体不好,工资自己开的也很低,能力一般,与其他同事相处有点困难,这让公司的同事对他意见越来越大,后面我来了以后,老板干脆就裁掉了他。他其实也没写多少代码,后面我都重构了。公司的设计也换了一波人,但配合起来还是没有问题。此时,又重拾了C#语言,开发又剩下我一个人了。这段时间渐渐形成了自己的一套页面开发模式,先写静态页面,带上数据请求,待到页面确认后,再改成动态页面。平时周末会兼职做做户外领队,带会员出去徒步旅行,这个还是挺有趣的,就是住宿条件有点差,而且出一身汗后还不能洗澡。 **3)欠薪**   公司旅游的旺季是从9月份开始,其他月份就会没啥收入,这也直接导致现金流断裂。这段时间大概有三四个月没有发工资,非常难熬。这个时候我拼车公司的那个朋友来找我,说他那边缺人,让我过来帮忙。想到这边欠薪,后面就去和老板谈了下,老板当时说:“我把你当兄弟,你把我当老板,没钱就和我说,我给你。”,我蛮无语的,后面协商后,再次答应兼职维护网站。除了欠薪之外,还有一个重要原因是这边没有开发氛围,在这种环境下很难提升技术水平,上一年还有团队协作,今年却变成了单兵作战,有种倒退的感觉。不过业务水平倒是完善了许多,对户外徒步也有了很多了解,每次出去带队,别人还以为我是高手,其实我只是过来凑个人数的而已。 ## 二、金融公司   我朋友那边是家创业型的金融公司,搞期权什么的,我到离职的时候都没搞懂这是啥玩意儿。这也是家创业公司,租了一套别墅作为办公地,员工有十几个人,请了个阿姨专门负责烧中饭和晚饭,不过吃饭要自己出钱的,公司不包饭。也是在这段时间,我开始写博客,并且平均每个月能写八九篇。   平时午休的时候,我们一帮人就喜欢在别墅区里逛,都是豪车,隔壁屋子里还养了四条纯种的哈士奇,据说每一条要100W了。 **1)团队配置**   这次的团队配置与以往不同,有设计、测试、后端和客户端,此处的客户端是用C++开发,针对电脑的,而不是手机。有一个人用C#开发了一套系统,由他来提供各个功能的接口,而我这边就是负责做个网站,管理用户的一些基础信息,而与金融相关的操作只能在客户端中运行。后面听说这套系统的所有权属于这个人,他卖这套系统赚了不少钱,而到这里来也是合作关系,不会把源码提供出来。 **2)加班**   夏天的时候,有一段时间老板想加速开发,就缩短了工期,我住的比较远,没办法就直接住在公司了,大概有三周时间,周末有时候也会加会儿班。在指定时间顺利的完成了任务,不过我做的网站迟迟不上线。我那朋友和我说这块很有前途,老板也一直给大家画饼,把我说的一愣一愣的,但是离职的同事一个接一个,不像说的那么好。后面感觉这个老板不靠谱,而且团队的项目管理也有问题(参考我之前的一篇《[最近一个项目的反思](http://www.cnblogs.com/strick/p/3946475.html)》),就想着离职了。正好有个朋友那边在招人,就联系了我,于是在10月份我就又跳槽了。 ***** > 已建立一个微信前端交流群,如要进群,请先加微信号freedom20180706或扫描下面的二维码,请求中需注明“看云加群”,在通过请求后就会把你拉进来。还搜集整理了一套[面试资料](https://github.com/pwstrick/daily),欢迎阅读。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2e1f8ecf9512ecdd2fcaae8250e7d48a_430x430.jpg =200x200)
';

2013年

最后更新于:2022-04-02 06:11:42

  2012年的12月底跳槽到了新公司,新公司在人民广场北京东路那块,也是家小公司。但与前一家公司不同,新公司刚成立,没有稳定的收入来源,一切都是新的,从零开始。2019年的3月份,我和两个老同事还回去过一次,看了看这家公司的办公点,发现这幢楼里的很多公司都搬走了,基本是空掉了,物非人非。顺便说句,当时楼下还有家小公司叫VIPABC,在线培训英语的,现在是混的风生水起。 :-: ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/31/f1/31f1a63fa9132e13ee9b2f377c5e06b7_934x616.png =500x) ## 一、前半年   前半年技术这块是由我那朋友负责的,他为了节约成本,招了好几个实习生,并且客户端只招了Android开发,测试也是后面招的,前期只有开发,没有产品经理,公司整体的技术团队还是比较薄弱的。公司的主营业务是做拼车,类似于现在的滴滴专车和顺风车。 **1)PHP**   这里的开发语言用的是PHP,也是从这里开始,我舍弃了C#,开始转用PHP开发。语言基本都是通的,看看语法,没几天就上手了,然后与同事开始开发业务逻辑。作为PHP新手,写出来的代码还是非常丑陋的,为了加快研发速度,选了个CI框架。负责PHP开发的人就两个,我和另外一个实习生,我们既要负责后台的开发,还要负责PC端的开发,以及客户端的接口。工作量是客户端的三倍,但人员配置却比客户端要少,这就导致客户端的接口经常来不及给到。后面又招了个PHP,才慢慢的开始改善。 **2)地图**   拼车业务就会用到地图,选择起始点和结束点,以及选取最优线路等。那时候选用的是百度地图,百度为第三方提供了开放的JavaScript脚本,我在那个时候开始学习使用第三方API。当时是个前端菜鸟,有些异步操作都没看出来,老用同步的写法,经常会取不到正确的数据,后面慢慢研究,发现了其中的门路。那时候工作充满热情,经常会熬到晚上十点多才走,一直在研究地图的使用。可惜没把当时的研究成果记录下来,很多都没用到的代码都没留下。 **3)换血**   后面又陆陆续续的进来新的同事,马上要到第一期交付的时候,但系统还没像样的雏形,只得加班加点的做。我离家比较远,有一段时间就直接住在附近的宾馆里,晚上加完班就回宾馆。交付的前一晚,我和另外两个同事通宵调试了一晚,第二天才勉强能演示。几位股东看了成品后,表示非常的不满意,离他们的预期相差甚远。他们想要的是和我们模仿的网站相同的功能,但我们给出的却是一个非常简陋的雏形。股东们把软件开发想的太简单了,以为人到了,产品就能出来了。我们是一个新组建的团队,什么都没有,全部从零开始,而且大家可以说都是新手,客户端的几个人原先也不是做Android的,后端也是PHP新手,项目也没有细致的规划,新团队还需要磨合期,总之有很多的问题。最后的结果是把我朋友下放,重新从外面找人来管团队。 ## 二、后半年   很快,替代的人就来了,他首先裁掉了几个客户端的人,然后又招了设计、iOS和运维,替换掉了原先的CI框架,改用ZF框架。新的负责人来了以后,明显的变化就是钱烧的快了。股东给他的要求是三个月时间,完成要模仿的功能。 **1)日报**   新负责人来了以后就要求我们每天写日报,然后发给他。每天还要开会,叙述今天遇到的问题,后面开会的成本太高,就取消了会议,日报继续发。大家没有受上半年的影响,热情依旧是非常高的,每天还是在努力工作着。 **2)项目管理**   但是项目管理依旧还是有点混乱,后面用他的话讲就是他喜欢散养,不会约束每个人。但由于没有即时的反馈,项目做着做着就又出现了偏差,并且没有原型设计,需求只靠一张嘴,经常出现扯皮的情况,有些功能没有想象中的那么简单,深究一下就会发现很复杂。就比如要做个IM系统,需要能上传语音、图片和文字,客户端的同事花了点时间完成基本功能,后端的我们还要考虑如何保存这些数据。还有个钱包功能,股东们想让用户把钱存到账户中,公司就能有一个现金池,想法很好,但这种财务功能得非常严密,不能出现金额的差错,实现起来又是很费劲。三个月很快就到了,又到了演示的时候,中途开发的时候砍掉了好多复杂的需求,就只完成了拼车业务,股东们还不是非常满意。本来说好项目上线要去神农架自驾旅行,后面改到三清山和洞头岛。 **3)旅行**   用负责人常说的一句话就是:“丑媳妇还是要见公婆的”。我们的产品最终还是上线了,虽然没有达到预期,但好歹能用了,上线后,还是有一点点的用户量。过了几天,公司同事一行人就开了三辆车出发去旅行了,公司解散前的唯一一次旅行。玩的还是蛮开心的,就是自驾坐在车上的时间有点长,有一天晚上九点才到目的地,然后吃顿晚饭,还是蛮辛苦的。 **4)解散**   大股东迟迟看不到成效,就取消了投资。撤资后,公司的另外几个股东想开辟新的业务,类似于美团外卖,不过就是送指定商品,但没有搞起来。最终还是在2013年的12月份,公司先后裁掉了两批员工后,彻底解散了,大家都拿到了相应的赔偿款,为期一年的创业以失败告终。   这一年有很多收获,不仅仅是编程方面,还有项目管理、产品设计、团队协作等各方面都有新的感悟。 ***** > 已建立一个微信前端交流群,如要进群,请先加微信号freedom20180706或扫描下面的二维码,请求中需注明“看云加群”,在通过请求后就会把你拉进来。还搜集整理了一套[面试资料](https://github.com/pwstrick/daily),欢迎阅读。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2e1f8ecf9512ecdd2fcaae8250e7d48a_430x430.jpg =200x200)
';

2012年

最后更新于:2022-04-02 06:11:40

  转眼四年过去了,我也在2011年的6月毕业了。但一直到毕业的时候,还没意识到大学四年是用来打基础的,导致刚毕业那会儿软件基础很薄弱。   实习的那家旅游公司也和我签约了,但由于个人原因,我辞掉了这份工作。经一个朋友推荐,我回到了家附近,位于上海郊区,在那里找到了一家软件外包公司。这家公司主要给政府做PPT和网站,规模很小,全公司只有8个人,我从那离职7年多了,另外那7人还在。   这里我建议刚毕业的学生有机会去规模大点的公司,还是要把握中,因为上规模的公司在组织架构、技术沉淀、规章制度等各方面都比较成熟,并且还有比较好的人脉网,社会终归是由人组成的,你的人脉越广,好的机会也会越多。 ## 一、新的开始 **1)面试**   2011年9月我来到了这家小外包公司面试,我记得那天是周末,过去的时候公司里一个人都没的。公司老板面的我,没涉及多少技术,就说了当前开发用的是我比较熟悉的C#语言,还介绍了一下公司的业务,主要做些和政府相关的项目,然后就让我第二天来上班了。这里说个很巧的事情,公司周五有个同事离职,而我过来就是替代此人的,我结婚那天才发现这个同事就是我老婆关系很近的表姐,真是无巧不成书。   这家公司很少加班,朝八晚五,基本到点就走,包中饭,老财务早上会去菜场买菜,然后在公司烧。活挺轻松的,不过就是工资太低,公积金也不交,试用期是2000一个月,转正后也只有3500,就这样我干了一年半。   其实当时还有另外一次面试,另一个朋友推荐的,一家大公司,在上海市中心南京西路上。我面试后感觉自己能力还不够,并且离家太远,当时不怎么想太折腾,于是就婉拒了他们的复试。安心的在这家小公司锻炼,希望能快速的成长。 **2)上手**   说个题外话,刚进入这家公司的时候,我开通了个人博客,不过对自己不够自信,碍于当时的落后思想,觉得自己太菜,怕被别人嘲讽,因此迟迟没有动笔,损失了一大笔宝贵的技术记忆。一直到3年后的2014年才撰写了自己的第一篇博文,从此一发不可收拾,一有感觉就想记录下来。其实现在想想,平时写点技术和项目的总结,对自己的成长会有很大的帮助。   刚开始给我安排的都是些遗留项目,就是简单的改改页面中的细节,难度不大。有一次,老板问我压力大不大,我很爽快的回答不大。后面让我独立的完成一些项目,总体来说没有什么大难度。政府项目都比较有规律,后台的模块大部分都能套用,前台的页面只是换个皮肤,大框架也比较类似。不过,这段时间对CSS、HTML和JavaScript有了新的认识,公司真正意义上的开发除了我就是另外一个同事,因此很多时候做特效都得自己想办法解决。这段时间搜索引擎发挥了巨大的作用,公司有段时间不能上百度,google又上不去,就改用了Bing,搜索质量感觉比百度要好一点。 **3)挑战**   要说这段时间比较有挑战的项目应该就是一个重阳节登高的报名活动,就是个表单页面,然后填手机号、姓名等信息,最后返回一个报名号给用户。这个页面的并发量比较高,5000个报名量基本在两三个小时内就能全部抢完,对于我这个菜鸟来说,要处理这并不算高的并发还是有点挑战的。我清晰的记得上线前的一天晚上辗转反侧,很担心会出大事故,像页面打不开、报错等等,因为这边没有专业的测试,全凭自己测试,这就很难保证质量。还好,没出大事故,但还是出现了两个或多个领到了同一个报名号的问题,最后另外两个同事一个个的打电话通知他们,换了新号码给他们,这件事就算这么过去了。   活动上线后的第二天,和别人聊天的时候,他正好提到了这个活动,我跟他说这个活动我做的,还是蛮自豪的。 **4)跑客户**   外包公司免不了要跑到客户那边去,了解需求或修改BUG。有些客户就在附近,走过去就行,有些就比较远了,不仅如此,遇到刮风下雨烈日的天气,还得跑出去,日晒雨淋的还是蛮苦的。   有一次蛮坑的,跑到长宁区,基本一个下午就没了,背个电脑过去,然后发现是他们Excel模板用的不对,只能呵呵了,再跑回来,基本已经快到五点下班时间了,一天就没了。还有一次跑到太仓去,老板想开发新客户,然后当天开车来回,有时候回公司已经六七点了。我运气比较好,遇到的客户都是蛮客气的,也很配合,听说太仓那个客户,后面有个老头总是刁难我们。 **5)离职**   我离职的主要原因还是工资的问题,实在太低,后面有个朋友找我,他那边在创业,有个很好的项目,让我过去帮忙,工资还开双倍,我马上就答应了。这个时候是2012年的12月份,马上要过年了,虽然有点年终奖,但很少,所以也就不在意了。   与公司同事相处的还是很融洽的,他们也都很理解我,我在离职前特地请大家去吃了顿小肥羊火锅,算是散伙饭。今年技术有所提升,人际关系的处理上也愈加成熟。 ## 二、兼职   这家公司的活蛮轻松的,上家实习的旅游公司又不想再去外面招人,就找到了我,让我兼职干着,每个月给个固定的2000元。 **1)职能**   主要就是维护网站,其中最忙的是两次改版。尤其是2011年的12月份,我晚上下班后改页面,周末去虹口和公司的人对需求,对页面,那段时间非常的辛苦。当时很年轻,也不觉得,只感觉自己的生活很充实。但有时候,我白天上班的时候旅游网出了问题,就只能远程修改一下了。有一次最严重,周五的时候,页面打不开了,下午就请假,直接打了200多的车过去,然后周末就一直在那边改代码。现在让我做兼职我肯定是不愿意的。 ***** > 已建立一个微信前端交流群,如要进群,请先加微信号freedom20180706或扫描下面的二维码,请求中需注明“看云加群”,在通过请求后就会把你拉进来。还搜集整理了一套[面试资料](https://github.com/pwstrick/daily),欢迎阅读。 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2e1f8ecf9512ecdd2fcaae8250e7d48a_430x430.jpg =200x200)
';