zoukankan      html  css  js  c++  java
  • 2013第3周六小结

    今天腊八,早上再小区门口喝了腊八粥,感觉不错,就是有点凉了,然后来到杭州图书馆,先是打开很多网页,但人渐渐多了后网速实在太慢,就决定把刚才打开的一些网页消化整理一下,摘录一些将来可能会用到的地方或一些感觉很好的话。

    JavaScript 项目优化总结

    模块化(类编程):代码清晰、有效防止变量污染问题、代码重用方便扩展等;

    JavaScript压缩混淆:JavaScript公共库文件使用UglifyJS压缩,减少size优化加载时间,混淆保护代码;

    JavaScript文件合并:减少http请求优化网络耗时提升性能;

    生成文档:方便公共库的使用,查找接口方便。

    前端开发之面向对象

      面向对象的英文全称叫做Object Oriented,简称OO。OO其实包括OOA(Object Oriented Analysis,面向对象分析)、OOD(Object Oriented Design,面向对象设计)和OOP(Object Oriented Programming,面向对象的程序设计)。

      javascript本身是一种基于对象(object-based)的语言,我们日常编码过程中用到的所有东西几乎都是对象(Number, String, Boolean, etc.)。但是,相对于一些流行的面向对象语言(C++, C#, java),它又不是一种真正的面向对象编程(OOP)语言,因为它的语法中没有class的概念。

      1. 对象封装 – 原始模式

      假定我们把猫看成一个对象,它有"name"和"color"两个属性, "etc" 行为。

    var Cat = {

    name: ''

    color: '',

    eat: function() {}

    };

      现在,我们需要根据这个原型对象的规格(schema),生成两个实例对象。

    function eat() {

    console.log('I\'m eta fish');

    }

    var cat1 = {name: 'Kitty', color: 'white', eat: eat};

    var cat2 = {name: 'Smokey', color: 'black', eat: eat};

      不方便创建多个实例对象,扩展性差, 实例(cat1, cat2)之间找不到联系。…

      2. 对象封装 – 构造函数模式

      "构造函数",就是一个普通函数,但是内部使用了 `this` 变量。对函数使用 `new` 运算符,就能生成实例,并且 `this` 变量会绑定在实例对象上。

      使用构造器创建出来的对象会有一个 `constructor` 属性,指向它们的构造函数。

      `Class` 只是一个模板,创建出来的来实例都是由模板生成。

      比如,猫的原型对象现在可以这样写:

    function Cat(name,color){

    this.name = name;

    this.color = color;

    this.eat = function() { console.log('eat fish'); };

    }

    var cat1 = new Cat('Kitty', 'black');

    console.log(cat1.name); // Kitty

    console.log(cat1 instanceof Cat); // TRUE

    // 这时 cat1 实例会自动含有一个 `constructor` 属性,指向它们的构造函数 `Cat`。

    var cat2 = Cat('Smokey', 'white');

    console.log(cat2); // undefined

      3. 对象封装 – Prototype 模式

      `prototype` 是 `Function` 对象的一个属性,这个属性指向另一个对象。 这个对象的所有属性和方法,都会被构造函数的实例继承。

      同时 `prototype` 又存在一个指向构造函数的引用 `constructor`,这样就成功的构成一个循环引用的原型链结构。

      我们可以把那些不变的属性和方法,直接定义在 `prototype` 对象上, 节省内存开销。

    function Cat(name, color) {

    this.name = name;

    this.color = color;

    }

    Cat.prototype.type = 'mammal';

    Cat.prototype.eat = function() { console.log('eat fish'); };

    var cat1 = new Cat('Kitty', 'white');

    var cat2 = new Cat('Smokey', 'black');

    console.log(cat1.type); // mammal

    console.log(cat1.eta === cat2.eta); // TRUE, same reference

    console.log(cat1.constructor === Cat) // TRUE, from Person.prototype

       将持有共性特点的属性或行为抽象出一个基本类, 可以按不同层次结构的业务分组抽象出多个基础类。

      1. 继承 – 构造函数绑定

      使用call或apply方法,将父对象的构造函数绑定在子对象上。

    function Animal() {

    this.species = 'animal';

    this.sleep = function() { console.log('I\'m sleep at night'); };

    }

    function Cat(name, color) {

    this.name = name;

    this.color = color;

    }

      让`Cat` 继承 `Animal` 的特性:

    /** @class Cat */

    function Cat(name, color) {

    Animal.apply(this);

    this.name = name;

    this.color = color;

    }

    var cat1 = new Cat('Kitty', 'white');

    cat1.sleep(); // I am sleep at night

      2. 继承 – 原型链继承

      如果"猫"的prototype对象,指向一个Animal的实例,那么所有"猫"的实例,就能继承Animal了。

    /** @class Cat */

    function Cat(name, color) {

    this.name = name;

    this.color = color;

    }

    Cat.prototype = new Animal;

    Cat.prototype.eta = function() { console.log('fish is my delicious'); };

      它相当于完全删除了prototype 对象原先的值,然后赋予一个新值

    // 任何一个prototype对象都有一个constructor属性,指向它的构造函数

    Cat.prototype.constructor = Cat; // fix prototype chains

    var cat = new Cat('Kitty', 'fish');

    cat.eat(); // fish is my delicious

    cat.sleep(); // I'm sleep at night'

    console.log(cat instanceof Cat); // TRUE

    console.log(cat instanceof Animal); // TRUE

      需要创建父类实列来实现 `prototype` 继承

      3. 继承 (Inheritance) – 利用空对象作为中介实现原型继承

    var F = function() {};

    F.prototype = Animal.prototype;

    Cat.prototype = new F();

    Cat.prototype.constructor = Cat;

     

      我们将上面的方法,封装成一个函数,便于使用。

    function extend(ctor, superctor, px) {

    if (!superctor || !ctor) throw Error('extend failed, verify dependencies');

    var F = function() {};

    F.prototype = superctor.prototype;

    ctor.prototype = new F();

    ctor.prototype.constructor = ctor;

    ctor.superclass = superctor.prototype; // cache super class proto reference.

    if (px) { // extend class implements

    for (var k in px) {

    if (px.hasOwnProperty(k)) ctor.prototype[k] = px[k];

    }

    }

    return ctor;

    }

      4 继承 – 借住工具方法实现继承

    /** @class Mammal */

    extend(Cat, Animal, {

    eat: function() {

    Cat.superclass.eat.call(this); // call super method

    console.log('Also i like some ofther food, such as beef and more.');

    }

    });

    var cat = new Cat('Smokey', 'fish');

    cat.sleep();

    cat.eat();

    console.log(cat instanceof Animal);

    console.log(cat instanceof Cat);

      1. 多态 – 通过重写原型方法来实现方法重名调用

    /** @class Cat */

    extend(Cat, Animal, {

    eat: function() {

    Cat.superclass.eat.call(this); // call super method

    console.log('Also i like some ofther food, such as beef and more.');

    }

    });

     

    2. 多态 (Polymorphism) – 原型继承 `prototype` 链上的方法、属性查找

    非计算机专业人员如何成为专业人员的学习之路

      我认为认识一个事物,首先要去了解这个事物的整体,然后再去研究它的内理。就像我们认识一座大楼,我们第一步要先从大楼的四周去看这个大楼的结构,第二步去看这个大楼内部的整体的支撑骨架,第三步才是去研究每一层的结构和房间部署。假如我们首先就从其内部细节开始研究,由于我们对这个事物的整个结构没有了解,就很有可能在一个地方徘徊,可能就在大楼的一层中徘徊,根本就不知道楼上还有几层,也不知道这个大楼的整体骨架,犹如盲人摸象,只能知道其中一部分。纵然最后认识清楚了,也需要耗费很多的时间,走很多弯路。

    网络通信的过程,编译器的优化,数据结构的优化,多进程多线程编程等等,这些是他们所欠缺的。就像是盖楼房,地基没有打好就在上面开始加砖盖墙,倒是必然的。这也是为什么有些非计算机专业的人很努力的去学习,学MySQL,学PHP,但是进步依然缓慢的原因。因为对计算机专业知识这所大楼的整体结构、整体骨架没有了解,所以就找不到最合适的学习方法和学习路线,纵然付出很多时间,进步依然缓慢。

      下面说一下我的学习历程吧,刚开始工作一年的时候,总想着完成工作才是目标,所以在遇到问题的时候就不断的去问Google去问百度再不行就得问别人,反正一切以解决问题完成工作为目的,在这个不断搜索不断询问的过程中,慢慢发现"地基"的概念,知道自己没有基础知识这块,对知识缺乏系统性的学习。在第二年的时候,开始买书去学习MySQL数据库原理,去学Linux操作系统,去学编译原理。这个学习过程很是坎坷和经常间断,这个过程就是我那个兄弟现在处于的一种情况,想学的东西很多,却不知从何学起,而且花了很长时间去学习编译原理,在工作中也不能用到,而且在学习过程中还有很多不知所云的东西,心情很是浮躁,一会学习Javascript一会学习编译原理,一会学习Linux操作系统。这个过程持续了大概半年多,学习成果真的没有多少,但是最大的收获是我在这个工程中慢慢的对这个知识体系的认识慢慢清晰起来,慢慢的知道自己该学什么了,而且心情不是那么浮躁了,而且还明白了这个学习阶段并不是一个短期工程,需要一个长时间的积累。这样工作第二年的多半年就过去了。

     

      然后,我开始计划用两年的时间将大学里计算机专业的学习书籍都看一遍,是最重要的,我不能不顾工作,而将大部分时间和经历都放在学习上,工作不好,就会被淘汰,生存就是问题。所完成非专业向专业方向的转变,之所以用两年,是我在很好的完成我的工作之余才去干这件事,因为我觉得生存下去以我会在我很好的完成工作之余才去做这件增强自己能力的事情。我从《计算机组成原理》开始了解计算机相关的硬件和最基础的知识,比如主板、CPU、CPU时间片、中断等知识;而后从《计算机网络》学习网络通信过程,比如TCP、UPD、路由规则等网络知识;而后从《计算机操作系统》学习进程调度,文件系统等系统环境知识;而后从《Linux操作系统》中学习Linux操作与系统知识;而后从《编译原理》中学习编译器的相关知识,学习到编程语言的运行原理;而后从《C程序设计》学习C语言知识,从《C++程序设计》中学习C++,学习C/C++语言是为了去学习一些用C/C++开发出的一些底层的软件,比如分析Nginx源码、PHP源码等;而后从《数据结构》学习数据结构,如链表、堆栈、HashTable等;而后从《设计模式》中学习到那些以前不知所云的工厂模式、装饰器模式等。这些知识虽然不多,但是这些方面的知识是整个计算机专业知识体系里面的最重要的几部分。当学过这些知识后,我发现我对整个计算机专业相关的知识都清晰了很多,工作中对一些底层的东西也越来越清楚了。能够跟运维一起商量操作服务器的一些设置,因为我学过操作系统,能够跟PHP大牛去谈PHP源码的一些东西,因为我学过C/C++,看过源码。

      计划用两年,但其实一年都没用了,就完成了我的两年计划。其实有些事情你去做的时候比你去想的时候要简单,要快速。接下来,我会研究更多的开源东西,比如Hadoop大数据处理,Sphinx搜索引擎的内部实现,还有Linux的源代码去更深的了解系统知识。回头想想,其实学过的东西还是那么一点点,要学的东西还是那么多,不过,我现在是对计算机越来越感兴趣了,由之前的谋生手段到现在的爱好,我知道我要去学什么,我知道我要去干什么了。

      书是人类进步的阶梯,扎扎实实的去学吧,一步一个脚印的去学,不要浮躁,不要急功近利,慢慢的你就会发现自己在不断的蜕变,可能用不了多长时间,你就是一个专业的人了。

      推荐几本书给大家,我觉得这几本书是不错的。

      其他书籍:《把时间当做朋友》《暗时间》《人性的弱点》《四书道贯》

    专业书籍:《计算机组成原理》《数据结构-使用c语言》《现代操作系统》《深入理解计算机系统》《计算机网络》《编译原理》《C程序设计》《C++程序设计》《设计模式》《程序员修炼之道》《鸟哥的Linux私房菜》《设计模式》《精通Linux C编程》《C Primer Plus》

    大公司,还是小公司?

    我觉得大概分两种:

    1.真正的黑穷丑

    入职原因:实在没地方去了,毕业什么也不会,来做苦工吧

    缺点:加班是家常便饭、工资少的可怜、福利基本没有,事事都要你干

    优点:锻炼你顽强的意志力、培养男人的愤怒血性,当然干的多了能力自然也会有提升,不过如果没有牛人带且自己也不是特强的话,你的视野应该是比较窄的

    2.有稳定业务、公司盈利还不错,待遇也可以媲美大公司

    缺点:还是个人视野的问题,如果你个人能力很好,不是野心很大,在小公司也不错

    优点:至少福利待遇不会差,环境也还可以,公司小自己做的贡献领导会看到,做个2,3年可能就是公司的主干力量了,有成就感。

    所以我觉得,大公司、小公司都无所谓,首先我们要让自己牛逼,或者知道怎样牛逼起来,然后再有施展技能的平台就够了,大、小只是一个壳罢了,问题的根源在于你是否能够牛逼起来。

    各种AJAX方法的使用比较

    阅读目录

    开始

    第一代技术:生成客户端代理脚本调用服务端

    新技术的改进方向

    第二代技术:jQuery直接调用WebService

    第三代技术:更简单的数据格式

    第四代技术:直接提交表单

    多submit按钮的提交(用jQuery.form实现)

    批量输入控件的提交(用jQuery.form实现)

    提交复杂表单(用jQuery.form实现)

    各种AJAX开发方法的对比与总结

  • 相关阅读:
    测试常用的sql语句总结
    测试常用的Linux命令总结
    【转载】vim 中如何替换选中行或指定几行内的文本
    1074 Reversing Linked List
    1077 Kuchiguse
    LC 355. Design Twitter
    LCP 5. 发 LeetCoin
    LC 1409. Queries on a Permutation With Key
    1095 Cars on Campus
    LC 1369. Get the Second Most Recent Activity
  • 原文地址:https://www.cnblogs.com/doit8791/p/2867397.html
Copyright © 2011-2022 走看看