人生中的第一个offer和第一份拒信

人生中第一个offer是3个小时前收到的,来自国内某大型软件公司。

两天前打酱油似的参加了该公司在学校的宣讲,紧接着带着积攒经验的心态参加了现场笔试、面试。

就在3个小时前,一份热腾腾的offer摆在了面前。

哦,原来offer是这个样子的啊。

哦,原来发offer时的hr这么和蔼啊。

顿时,人生阅历丰富了一截。

我仔细地打量了它,像一张精致的贺卡,比我的大学录取通知书好看的多。

时间到了3个小时后的现在,我即将发出人生中的第一份拒信。

对,拒掉刚拿到的offer。

一个理由。

趁年轻,给自己一个拼的机会。

关于Javascript中constructor和prototype的一点理解

constructor和prototype,顾名思义,是构造者(构造器)和原型的意思。

从语义的角度来看,对象A构造了对象B,则A就是B的constructor,如果对象A的形态来自对象B,则对象B是A的原型。

看一段代码:

function Person() {
    Person.prototype.name = "myname";
    Person.prototype.age = 18;
    Person.prototype.sayName = function () { alert(this.name); };
}
var person1 = new Person();
person1.sayName();

这里Person就是Person.prototype的constructor,为什么?因为Person构造了Person.prototype。而person1的prototype不是Person.prototype。在person1初始化时,可以理解成把Person拷贝了一份(就是new了一份)扔给person1,而Person每new一次,都会从他的原形处继承(只是称为继承,方便理解)了一份name,age,sayName。person1是copy了Person,但是prototype并没有copy,所以说person1的prototype是undefined。

这里person1很容易被理解成由Person构造,这样的话person1.constructor岂不成了Person,现在就要区别一下构造和原形,构造,我们把它理解成从一个框架里建立一个对象,而原形,则是说对象的所有东西(数据)都要从原形继承过来。

再看一个函数:

function Person(name, age) {
    this.name = name;
    this.age = age;
    this.sayName = function() { alert(this.name); };
}
var person2 = new Person( "myname", 18 );
person2.sayName();

这里的Person和上面的Person想必相比,上面的Person不光构建了一个框架,而且填上了数据,而下面的Person只构建了框架,现在就很好区别constructor和prototype了,person1从一个对象继承了数据和框架,而person2从一个对象只获取了结构(我们把这个过程理解成Person构建了person2),那么person2的构造者自然就是Person。

现在应该比较容易弄清constructor和prototype的意义了。

update1:

这里还有一个非常说明问题的例子:

var arrayTest = new Array();
alert(arrayTest.constructor); // 为Array

update2:

还有一个可能遇到的问题,先看代码:

var person3 = new Person();
person3.prototype.name = "name3";

上面的错误非常明显,person3是Person的实例,不能为实例定义原型。

浏览器不支持removeAttribute()的解决方法

今天在做一个网页的时候,想实现mouse over时候给li加载background-image,在mouse out时候移除background-image。
通过js实现:

if(action == 0) {
    btn.style.backgroundImage = "url(images/index_nav1_07.jpg)";
    btn.style.backgroundRepeat = "repeat-x";
} else {
    btn.removeAttribute("style");
}

发现可以兼容ff和ie,但是在chrome下mouse out动作没有执行。

后发现可能是chrome不支持removeAttribute(),于是加入兼容写法:

if(action == 0) {
    btn.style.backgroundImage = "url(images/index_nav1_07.jpg)";
    btn.style.backgroundRepeat = "repeat-x";
} else {
    btn.style.backgroundImage = "";
    btn.style.backgroundRepeat = "";
    btn.removeAttribute("style");
}

此方法实现了ff、ie和chrome兼容。

将Apache和Mysql添加为CentOS服务

当安装自己编译的Apache和Mysql后,默认是不添加为系统服务的,所以我们需要手动将其添加为服务。

添加Apache为系统服务

1.将apachectl拷贝到init.d下

#cp /usr/local/apache/bin/apachectl /etc/rc.d/init.d/httpd

2.修改httpd

#vi /etc/rc.d/init.d/httpd

添加以下注释内容

#chkconfig: 345 85 15
#decription: apache server

3.向系统服务添加apache

#chkconfig --add httpd

添加Mysql为系统服务

  1. 将mysql拷贝到init.d下

    #cp /usr/local/mysql5/share/mysql/mysql.server /etc/init.d/mysqld
    
  2. 将mysqld添加到系统服务

    #chkconfig --add mysqld
    

完成上述步骤,就可以使用

#service httpd/mysqld restart/start/stop

来控制apache/mysql的启动停止重启了

MacOS+VMware Fusion安装CentOS网络设置

在vmware中最小化安装centos6.3后发现无论vmware设置城共享还是桥接形式都无法连接网络,在网络上查询到vmware workstation下安装centos的设置方法,尝试后发现并不适用mac os下的vmware fusion。
经过尝试,发现fusion下centos网络配置非常简单。方法如下:

  1. 将vmware设置成桥接网络
  2. 改变网卡设置

    $vi /etc/sysconfig/network-scripts/ifcfg-eth0

修改为如下值:

BOOTPROTO="dhcp" //使用dhcp配置ip地址  
ONBOOT="yes" //使设备启动  

3.重启网络服务

$service network restart

4.查看网络

$ifconfig

查看设备eth0是否分配到正确ip,网络是否可以ping通。

iOS 推送证书制作 (JAVA/PHP)

在使用Java或者PHP制作iOS推送服务器的时候,需要自己从开发者网站上导出的aps_developer_identity证书和Apple Development Push Services证书进行合成,生成可以供Java使用的p12证书或供PHP使用的pem证书。

aps_developer_identity证书和Apple Development Push Services证书的申请过程可以参考:

http://www.cnblogs.com/hubj/archive/2012/06/14/2549816.html

本文着重讨论如何合成证书

1.将aps_developer_identity.cer转换成pem

1
$openssl x509 -in aps_developer_identity.cer -inform der -out PushChatCert.pem

2.将Apple Development Push Services证书转换成pem

1
$openssl pkcs12 -nocerts -out PushChatKey.pem -in Push.p12

3.合成两个pem证书

1)Java服务器所需的证书为p12格式

1
$openssl pkcs12 -export -in PushChatCert.pem -inkey PushChatKey.pem -out pushCert.p12 -name “apns-cert”

2)PHP服务器所需证书为pem格式

1
$cat PushChatCert.pem PushChatKey.pem > pushCert.pem