转自:https://www.runoob.com/w3cnote/set-ssh-login-key.html

我们一般使用 PuTTY 等 SSH 客户端来远程管理 Linux 服务器。但是,一般的密码方式登录,容易有密码被暴力破解的问题。所以,一般我们会将 SSH 的端口设置为默认的 22 以外的端口,或者禁用 root 账户登录。其实,有一个更好的办法来保证安全,而且让你可以放心地用 root 账户从远程登录——那就是通过密钥方式登录。

密钥形式登录的原理是:利用密钥生成器制作一对密钥——一只公钥和一只私钥。将公钥添加到服务器的某个账户上,然后在客户端利用私钥即可完成认证并登录。这样一来,没有私钥,任何人都无法通过 SSH 暴力破解你的密码来远程登录到系统。此外,如果将公钥复制到其他账户甚至主机,利用私钥也可以登录。

下面来讲解如何在 Linux 服务器上制作密钥对,将公钥添加给账户,设置 SSH,最后通过客户端登录。

1. 制作密钥对

首先在服务器上制作密钥对。首先用密码登录到你打算使用密钥登录的账户,然后执行以下命令:

[root@host ~]$ ssh-keygen  <== 建立密钥对  #或生成pem:ssh-keygen -t rsa -f my.pem -C "your@email.com"
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): <==  Enter
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase): <== 输入密钥锁码,或直接按 Enter 留空
Enter same passphrase again: <== 再输入一遍密钥锁码
Your identification has been saved in /root/.ssh/id_rsa. <== 私钥
Your public key has been saved in /root/.ssh/id_rsa.pub. <== 公钥
The key fingerprint is:
0f:d3:e7:1a:1c:bd:5c:03:f1:19:f1:22:df:9b:cc:08 root@host

密钥锁码在使用私钥时必须输入,这样就可以保护私钥不被盗用。当然,也可以留空,实现无密码登录。

现在,在 root 用户的家目录中生成了一个 .ssh 的隐藏目录,内含两个密钥文件。id_rsa 为私钥,id_rsa.pub 为公钥。

2. 在服务器上安装公钥

键入以下命令,在服务器上安装公钥:

[root@host ~]$ cd .ssh
[root@host .ssh]$ cat id_rsa.pub >> authorized_keys

如此便完成了公钥的安装。为了确保连接成功,请保证以下文件权限正确:

[root@host .ssh]$ chmod 600 authorized_keys
[root@host .ssh]$ chmod 700 ~/.ssh

3. 设置 SSH,打开密钥登录功能

编辑 /etc/ssh/sshd_config 文件,进行如下设置:

RSAAuthentication yes
PubkeyAuthentication yes

另外,请留意 root 用户能否通过 SSH 登录:

PermitRootLogin yes

当你完成全部设置,并以密钥方式登录成功后,再禁用密码登录:

PasswordAuthentication no

最后,重启 SSH 服务:

[root@host .ssh]$ service sshd restart

4. 将私钥下载到客户端,然后转换为 PuTTY 能使用的格式

使用 WinSCP、SFTP 等工具将私钥文件 id_rsa 下载到客户端机器上。然后打开 PuTTYGen,单击 Actions 中的 Load 按钮,载入你刚才下载到的私钥文件。如果你刚才设置了密钥锁码,这时则需要输入。

载入成功后,PuTTYGen 会显示密钥相关的信息。在 Key comment 中键入对密钥的说明信息,然后单击 Save private key 按钮即可将私钥文件存放为 PuTTY 能使用的格式。

今后,当你使用 PuTTY 登录时,可以在左侧的 Connection -> SSH -> Auth 中的 Private key file for authentication: 处选择你的私钥文件,然后即可登录了,过程中只需输入密钥锁码即可。

最近入了一台独立服务器,如果直接拿来跑项目的话就太浪费资源了。于是打算使用Proxmox VE这款虚拟化管理软件进行VPS管理。

Proxmox VE是一款套开源的虚拟化管理软件,用户可通过网页的方式来管理服务器上使用 kvm 以及 lxc 技术运行的虚拟机。同时提供了一些先进功能的支持,如集群、HA等。

0x00 安装

Proxmox VE是基于Debian进行开发的,主要有两种安装方式。
其一是通过官方提供的iso作为一个全新的系统安装
另一种方式是在已有的Debian系统上安装
手动安装时请务必保证网卡配置正确,若出错的话在不带IPMI的机子上很难处理。

安装完成后即可通过https://ip:8006/访问管理页面

另外,这里记录一下版本升级的方法。由于Proxmox VE是一家商业公司在运营,所以一些功能是需要购买订阅才能使用的,例如说版本更新功能。但是可以通过一些方法绕过限制。注意这些更新方法请勿用于生产环境中。

将软件源更改为测试源

修改/etc/apt/sources.list.d/pve-install-repo.list, 将 pve-no-subscription 修改为pvetest
然后apt三连即可更新为新版本。

apt-get keyword">update
apt-keyword">get keyword">upgrade
apt-keyword">get dist-keyword">upgrade

0x01 相关设定

对于kvm虚拟化的虚拟机,若想上传需要用到的iso文件,可以直接通过网页端上传,也可以直接将文件放入/var/lib/vz/template/iso/
如果想对kvm虚拟机的启动参数进行调整,官方提供了api:qm set,具体可参照官方文档
对于lxc虚拟化的虚拟机,可以直接从系统中下载对应发行版的模板,无需自行下载。
可以直接使用LXC自带的api对lxc虚拟机进行管理,注意-n为虚拟机的id。

0x02 网络配置

对于多ip的服务器,本身官方就是按照桥接的方式做好网络配置的,直接在虚拟机中填写分配的ip即可。
对于单ip服务器,可以采用NAT的方法让虚拟机连上外部网络。这里介绍俩种方式。

采用QEMU自带的NAT

对于KVM虚拟机,可以直接在创建虚拟机的时候勾上NAT,这时候就会自动为虚拟机分配一个虚拟的子网并且虚拟机可以通过nat连接到外部网络,基本上是开箱即用。同时也支持端口映射,具体可参考官方wiki下的QEMU port redirection。但之前在使用的过程中,发现这个端口映射并不是很稳定。同时虽然这种方法很简单,但是虚拟机之间是隔离的,无法互通数据,这样就非常不灵活。
同时,LXC虚拟机是没有这种开箱即用的NAT的。

配置iptables创建子网以实现nat

主要思路是创建一个虚拟桥接设备并创建一个子网,然后将所有虚拟机包括宿主机都连接到这个子网内,再开启iptables的NAT功能。
编辑配置文件/etc/interfaces,以下是参考配置

auto vmbr2
iface vmbr2 inet static
    address 10.0.0.254
    netmask 255.255.255.0
    bridge_ports none
    bridge_stp off
    bridge_fd 0
    post-up echo 1 > /proc/sys/net/ipv4/ip_forward
    post-up iptables -t nat -A POSTROUTING -s '10.0.0.0/24' -o vmbr0 -j MASQUERADE
    post-down iptables -t nat -D POSTROUTING -s '10.0.0.0/24' -o vmbr0 -j MASQUERADE

以上配置创建了vmbr2并且分配了一个子网10.0.0.0/24,同时宿主机(同时亦为网关)在这个子网内的ip为10.0.0.254。然后开启了内核的转发功能与iptables的NAT功能(其中vmbr0为通向外部网络的设备)。
若想添加端口转发直接在iptables中增加相关条目即可。
例如想要将宿主机vmbr0的80端口的tcp连接转发到10.0.0.102的80端口上:
iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 80 -j DNAT --to 10.0.0.102:80
如果想保存转发规则,使之重启后依然有效,则需要在/etc/interfaces相应位置加入

post-up iptables -t nat -A PREROUTING -i vmbr0 -p tcp --dport 80 -j DNAT --to 10.0.0.102:80
post-down iptables -t nat -D PREROUTING -i vmbr0 -p tcp --dport 80 -j DNAT --to 10.0.0.102:80

通过以上方法就能组建一个灵活的子网了,kvm虚拟机和lxc虚拟机都可接入,并且都可以有端口转发。由于没有DHCP服务器所以要自行分配ip。注意创建虚拟机的时候将其挂载到vmbr2端口下。
我的服务器只有一个ip,所以内部组网就只能采取这种这种的方法了hhhh。为了充分利用资源,我将80,443端口转发到内部一台虚拟机上,这台虚拟机再使用nginx反代到内网的其它虚拟机,以充分利用单个ip。

启用BBR优化网络

目前的Proxmox VE版本的linux内核版本比较新,已经包含了bbr模块了。

修改sysctl.conf

echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf

保存生效

sysctl -p

检测是否已启用bbr模块

lsmod | grep bbr

如果含有bbr即说明内核内已启用bbr模块

Let's Encrypt作为一个公共且免费SSL的项目逐渐被广大用户传播和使用,是由Mozilla、Cisco、Akamai、IdenTrust、EFF等组织人员发起,主要的目的也是为了推进网站从HTTP向HTTPS过度的进程,目前已经有越来越多的商家加入和赞助支持。

Let's Encrypt免费SSL证书的出现,也会对传统提供付费SSL证书服务的商家有不小的打击。到目前为止,Let's Encrypt获得IdenTrust交叉签名,这就是说可以应用且支持包括FireFox、Chrome在内的主流浏览器的兼容和支持,虽然目前是公测阶段,但是也有不少的用户在自有网站项目中正式使用起来。

实战申请Let's Encrypt永久免费SSL证书过程教程及常见问题

在今年黑色星期五的时候,Namecheap各种促销活动中也包括年费0.88美元的SSL证书,当时老左也有购买了2个备用学习和适当的放到一些网站中看看效果(据说英文网站谷歌会很喜欢),当时冷雨同学就建议到时候直接使用Let's Encrypt免费SSL,毕竟有很多大公司支持的,比一些小公司提供的免费SSL证书靠谱很多。

虽然目前Let's Encrypt免费SSL证书默认是90天有效期,但是我们也可以到期自动续约,不影响我们的尝试和使用,为了考虑到文章的真实性和以后的实战性,老左准备利用一些时间分篇幅的展现在应用Let's Encrypt证书的过程,这篇文章分享申请的方法教程。

第一、安装Let's Encrypt前的准备工作

根据官方的要求,我们在VPS、服务器上部署Let's Encrypt免费SSL证书之前,需要系统支持Python2.7以上版本以及支持GIT工具。这个需要根据我们不同的系统版本进行安装和升级,因为有些服务商提供的版本兼容是完善的,尤其是debian环境兼容性比CentOS好一些。

比如CentOS 6 64位环境不支持GIT,我们还可以参考"Linux CentOS 6 64位系统安装Git工具环境教程"和"9步骤升级CentOS5系统Python版本到2.7"进行安装和升级。最为 简单的就是Debian环境不支持,可以运行"apt-get -y install git"直接安装支持,如果是CentOS直接运行"yum -y install git-core"支持。这个具体遇到问题在讨论和搜索解决方案,因为每个环境、商家发行版都可能不同。在这篇文章中,老左采用的是debian 7 环境。

第二、快速获取Let's Encrypt免费SSL证书

在之前的博文中老左也分享过几篇关于SSL部署的过程,我自己也搞的晕乎晕乎的,获取证书和布局还是比较复杂的,Let's Encrypt肯定是考虑到推广HTTPS的普及型会让用户简单的获取和部署SSL证书,所以可以采用下面简单的一键部署获取证书。

PS:在获取某个站点证书文件的时候,我们需要在安装PYTHON2.7以及GIT,更需要将域名解析到当前VPS主机IP中。

git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt
./letsencrypt-auto certonly --standalone --email admin@laozuo.org -d laozuo.org -d www.laozuo.org

然后执行上面的脚本,我们需要根据自己的实际站点情况将域名更换成自己需要部署的。

快速获取Let's Encrypt免费SSL证书

看到这个界面,直接Agree回车。

Let's Encrypt安装成功

然后看到这个界面表示部署成功。目前根据大家的反馈以及老左的测试,如果域名是用的国内DNS,包括第三那方DNSPOD等,都可能获取不到域名信息。

Let's Encrypt国内域名DNS不支持

这里我们可以看到有"The server could not connect to the client to verify the  domain"的错误提示信息,包括也有其他提示错误,"The server experienced an internal error :: Error creating new registration"我们在邮局的时候不要用国内免费邮局。所以,如果我们是海外域名就直接先用域名自带的DNS。

第三、Let's Encrypt免费SSL证书获取与应用

在完成Let's Encrypt证书的生成之后,我们会在"/etc/letsencrypt/live/laozuo.org/"域名目录下有4个文件就是生成的密钥证书文件。

cert.pem  - Apache服务器端证书
chain.pem  - Apache根证书和中继证书
fullchain.pem  - Nginx所需要ssl_certificate文件
privkey.pem - 安全证书KEY文件

如果我们使用的Nginx环境,那就需要用到fullchain.pem和privkey.pem两个证书文件,在部署Nginx的时候需要用到(参考:LNMP一键包环境安装SSL安全证书且部署HTTPS网站URL过程)。在这篇文章中老左就不详细演示Let's Encrypt证书证书的安装,后面再重新折腾一篇文章详细的部署证书的安装Nginx和Apache。

ssl_certificate /etc/letsencrypt/live/laozuo.org/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/laozuo.org/privkey.pem;

比如我们在Nginx环境中,只要将对应的ssl_certificate和ssl_certificate_key路径设置成我们生成的2个文件就可以,最好不要移动和复制文件,因为续期的时候直接续期生成的目录文件就可以,不需要再手工复制。

第四、解决Let's Encrypt免费SSL证书有效期问题

我们从生成的文件中可以看到,Let's Encrypt证书是有效期90天的,需要我们自己手工更新续期才可以。

./letsencrypt-auto certonly --renew-by-default --email admin@laozuo.org -d laozuo.org -d www.laozuo.org

这样我们在90天内再去执行一次就可以解决续期问题,这样又可以继续使用90天。如果我们怕忘记的话也可以制作成定时执行任务,比如每个月执行一次。

第五、关于Let's Encrypt免费SSL证书总结

通过以上几个步骤的学习和应用,我们肯定学会了利用Let's Encrypt免费生成和获取SSL证书文件,随着Let's Encrypt的应用普及,SSL以后直接免费不需要购买,因为大部分主流浏览器都支持且有更多的主流商家的支持和赞助,HTTPS以后看来也是趋势。在Let's Encrypt执行过程在中我们需要解决几个问题。

A - 域名DNS和解析问题。在配置Let's Encrypt免费SSL证书的时候域名一定要解析到当前VPS服务器,而且DNS必须用到海外域名DNS,如果用国内免费DNS可能会导致获取不到错误。

B - 安装Let's Encrypt部署之前需要服务器支持PYTHON2.7以及GIT环境,要不无法部署。

C - Let's Encrypt默认是90天免费,需要手工或者自动续期才可以继续使用。

本文固定链接: http://www.laozuo.org/7676.html | 老左博客

转:http://www.senra.me/remove-proxmox-ve-dont-have-valid-subscription-notice/

一.问

最近把我的OVH独服重装了下,打算用Proxmox开点VM来用,省得一直吃灰(雾,安装很简单,毕竟是OVH提供的模板,但是,这玩意每次登陆都会有个蛋疼的提示(You do not have a valid subscription for this server. Please visit www.proxmox.com to get a list of available options.),而且找了半天没找到有关的地方,然后去官网看了下订阅的价格,呵呵呵,我还是自己想办法吧……

二.解

对于一个网页,要明白它到底发生了什么,那当然是直接F12怼一波,看了下控制台发现有个pvemanagerlib.js,看看名字就觉得很像是这玩意在搞事啊,右击在新页面打开,看看内容,首先根据之前的提示文字来搜索

很好,找到目标,然后再次搜索noSubKeyHtml

一切顺利,找到了执行订阅检测的地方,现在简单了,直接改判断条件或者怼掉show操作都行,问题来了,这个文件在浏览器里又不能改,它到底在哪?

其实很简单,随便locate一下就找到了,我们先用cp备份一下,然后开始修改这个文件

然后注销重新登录,一切OK,世界清静

Hbase hbck

[plain] view plain copy

在CODE上查看代码片派生到我的代码片

  1. 新版本的 hbck 可以修复各种错误,修复选项是:
  2. (1)-fix,向下兼容用,被-fixAssignments替代
  3. (2)-fixAssignments,用于修复region assignments错误
  4. (3)-fixMeta,用于修复meta表的问题,前提是HDFS上面的region info信息有并且正确。
  5. (4)-fixHdfsHoles,修复region holes(空洞,某个区间没有region)问题
  6. (5)-fixHdfsOrphans,修复Orphan region(hdfs上面没有.regioninfo的region)
  7. (6)-fixHdfsOverlaps,修复region overlaps(区间重叠)问题
  8. (7)-fixVersionFile,修复缺失hbase.version文件的问题
  9. (8)-maxMerge <n> (n默认是5),当region有重叠是,需要合并region,一次合并的region数最大不超过这个值。
  10. (9)-sidelineBigOverlaps ,当修复region overlaps问题时,允许跟其他region重叠次数最多的一些region不参与(修复后,可以把没有参与的数据通过bulk load加载到相应的region)
  11. (10)-maxOverlapsToSideline <n> (n默认是2),当修复region overlaps问题时,一组里最多允许多少个region不参与
  12. 由于选项较多,所以有两个简写的选项
  13. (11) -repair,相当于-fixAssignments -fixMeta -fixHdfsHoles -fixHdfsOrphans -fixHdfsOverlaps -fixVersionFile -sidelineBigOverlaps
  14. (12)-repairHoles,相当于-fixAssignments -fixMeta -fixHdfsHoles -fixHdfsOrphans
  15. 新版本的 hbck
  16. (1)缺失hbase.version文件
  17.  加上选项 -fixVersionFile 解决
  18. (2)如果一个region即不在META表中,又不在hdfs上面,但是在regionserver的online region集合中
  19.  加上选项 -fixAssignments 解决
  20. (3)如果一个region在META表中,并且在regionserver的online region集合中,但是在hdfs上面没有
  21.  加上选项 -fixAssignments -fixMeta 解决,( -fixAssignments告诉regionserver close region),( -fixMeta删除META表中region的记录)
  22. (4)如果一个region在META表中没有记录,没有被regionserver服务,但是在hdfs上面有
  23. 加上选项 -fixMeta -fixAssignments 解决,( -fixAssignments 用于assign region),( -fixMeta用于在META表中添加region的记录)
  24. (5)如果一个region在META表中没有记录,在hdfs上面有,被regionserver服务了
  25. 加上选项 -fixMeta 解决,在META表中添加这个region的记录,先undeploy region,后assign
  26. (6)如果一个region在META表中有记录,但是在hdfs上面没有,并且没有被regionserver服务
  27. 加上选项 -fixMeta 解决,删除META表中的记录
  28. (7)如果一个region在META表中有记录,在hdfs上面也有,table不是disabled的,但是这个region没有被服务
  29. 加上选项 -fixAssignments 解决,assign这个region
  30. (8)如果一个region在META表中有记录,在hdfs上面也有,table是disabled的,但是这个region被某个regionserver服务了
  31. 加上选项 -fixAssignments 解决,undeploy这个region
  32. (9)如果一个region在META表中有记录,在hdfs上面也有,table不是disabled的,但是这个region被多个regionserver服务了
  33. 加上选项 -fixAssignments 解决,通知所有regionserver close region,然后assign region
  34. (10)如果一个region在META表中,在hdfs上面也有,也应该被服务,但是META表中记录的regionserver和实际所在的regionserver不相符
  35. 加上选项 -fixAssignments 解决
  36. (11)region holes
  37. 需要加上 -fixHdfsHoles ,创建一个新的空region,填补空洞,但是不assign 这个 region,也不在META表中添加这个region的相关信息
  38. (12)region在hdfs上面没有.regioninfo文件
  39. -fixHdfsOrphans 解决
  40. (13)region overlaps
  41. 需要加上 -fixHdfsOverlaps
  42. 说明:
  43. (1)修复region holes时,-fixHdfsHoles 选项只是创建了一个新的空region,填补上了这个区间,还需要加上-fixAssignments -fixMeta 来解决问题,( -fixAssignments 用于assign region),( -fixMeta用于在META表中添加region的记录),所以有了组合拳 -repairHoles 修复region holes,相当于-fixAssignments -fixMeta -fixHdfsHoles -fixHdfsOrphans
  44. (2) -fixAssignments,用于修复region没有assign、不应该assign、assign了多次的问题
  45. (3)-fixMeta,如果hdfs上面没有,那么从META表中删除相应的记录,如果hdfs上面有,在META表中添加上相应的记录信息
  46. (4)-repair 打开所有的修复选项,相当于-fixAssignments -fixMeta -fixHdfsHoles -fixHdfsOrphans -fixHdfsOverlaps -fixVersionFile -sidelineBigOverlaps
  47. 新版本的hbck从(1)hdfs目录(2)META(3)RegionServer这三处获得region的Table和Region的相关信息,根据这些信息判断并repair

示例:

[plain] view plain copy

在CODE上查看代码片派生到我的代码片

  1. 查看hbasemeta情况
  2. hbase hbck
  3. 1.重新修复hbase meta表(根据hdfs上的regioninfo文件,生成meta表)
  4. hbase hbck -fixMeta
  5. 2.重新将hbase meta表分给regionserver(根据meta表,将meta表上的region分给regionservere)
  6. hbase hbck -fixAssignments

整体感受

笔者是2012年进入SEO和个人站长这个行当的,4年时间不算长也不算短,12年年底时读这本书第1版,但那个时候有很多其实是看不懂的,《SEO实战密码》这本在SEO界被封为圣经的书,积极意思在于整体详细的梳理了SEO的思路,但也带来了很大的消极影响,早期包括到现在中国大陆SEO粗暴的伪原创、发外链的行为很大程度上受了此书影响。

这本书是以研究Google为主,外链因素在当前包括谷歌、必应在内的外国搜索引擎中还是重要,但目前在百度中因素比较小,12、13年正好是百度算法大规模变动的时候,个人觉得百度的算法调整比Google更为合理自然,可能是因为国情不同。整个第3版600多页,就中国大陆人来看很臃肿,毕竟中国大陆以百度为主,书中包括外链、作弊方式等等很多都过时了,但这本书只有新增补充,并没有做太多相应的删减。

尽信书不如无书,学会带着自己思维去看去做会更好,SEO算法本就不是公开的,一旦公开可能又会有很多作弊手段出现,但现在百度官方给出了很多良好的建议应该认真关注,SEO趋势会更加自然,更强调用户体验。本整理按书中章数编写,删减冗余过时当下不常见的内容,补充百度站长平台官方意见及自己的总结,希望对大家有所帮助。

注:本文有将近一半内容为笔者经验总结,其余捡其要者录之,做SEO除了看书外,注意多看下百度官方建议,然后多尝试,总结出自己的思路,希望对大家有用。本经验总结侧重于于中文搜索引擎优化。

《SEO实战密码(第3版)》精华整理

第一章 为什么要做SEO

1、SEO定义

SEO 即Search Engine Optimization,中文译名“搜索引擎优化”,通过对网站内部调整优化及站外优化,使网站满足搜索引擎收录排名需求,在搜索引擎中关键词排名提高,从而把精准用户带到网站,获得免费流量,产生直接销售或品牌推广。(通俗来讲:SEO即百度自然排名,一般所说的搜索引擎指综合搜索,除此外还有垂直搜索和站内搜索。)

2、SEO有什么用 SEO与推广的对比区别

互联网各应用使用比例

《SEO实战密码(第3版)》精华整理

流量入口占比

《SEO实战密码(第3版)》精华整理

SEO有什么用:

SEO是目前给网站带来流量最好的方法,其他推广营销方法做的好也会很不错,但相比之下,SEO的人力资金成本会低很多,所以SEO适合人力资金有限的中小公司和个人,竞价、网推、电销、地推等适合人力资金充裕追求效率的大型公司,大型公司如果重视SEO更是势如破竹。

SEO与推广的区别:

1、搜索引擎从诞生到现在的使用率一直居于前列,几乎所有人都有搜索需求,流量集中;其他应用兴衰无常,流量分散,使用人群有着明显的年龄行业兴趣区别。

2、SEO的展示是用户主动搜索其需要的信息,进入官网,转化率高且友好;网络推广或者电话地推都会使人反感,而且需要二次转化到官网实现销售或广告变现,需要能力优秀的销售人员。

3、网站有用户关注的内容,可以留住访客;只是产品介绍的网站,访客可能就只是需要时访问或者长期不访问而废弃。

4、质量好的网页可以长期存在搜索引擎结果中获得流量;推广推则有不推则无,热度很容易被掩埋。

5、好做SEO建好网站,做好内容就可以了,成本相对而言较低;而成功的推广营销需要耗费大量的人力和资金。

SEO 与推广区别举例:如果将营销比作泡妞,那么SEO是吸引女生,推广则是的追求女生,吸引女生需要外在的气质和内在的品质,就像做好SEO需要顺畅的网页和优质的内容;追求女生,需要百般的技巧和大量的时间,推广亦是如此,每个人都有适合的自己方式,但一般而言,吸引女生比追求女生可靠些。

3、做好SEO的要素

那是不是说SEO就没有成本,很容易做呢?显然不是,成功的SEO可能每天从搜索引擎获得几十万的流量,而大量的网站从搜索引擎获得流量微乎其微甚至没有,在内容泛滥和搜索引擎算法进步的今天SEO是一个脚踏实地的机会和挑战。

做好SEO需要:思维、耐心、时间、运气

4、SEO做的非常好的网站举例:

企业门户站:金投网:投资理财门户,黄金和白银、股票、外汇、P2P等多个二级域名分站目录链接交错,网站结构布局庞大,内容优质,SEO性质的问答价格和分析文章合理布局,内容优质排版良好,SEO到极致,预估每天从搜索引擎获得百万IP。

个人门户站:三联网:个人综合门户网站,IT教程、素材资源、生活百科、诗词文学等几乎囊括所有搜索需求,三级目录繁多,内容丰富,文章注重网友搜索特点,预估每天从搜索引擎获得50万IP。

公司官网站:无忧主机:虚拟空间公司官网,小IDC商,通过大量的DEDECMS、PHPCMS、WordPress、EMLOG、Discuz!、服务器、数据库等等教程文章,获取搜索引擎流量,文章虽然是复制的,但都有经过一些修改,经常搜索相关CMS问题可以看到其排名,因为大量来源是文章长尾,所以站长工具的预计就不太准,预估每天从搜索引擎获得几千甚至过万IP。

第二章 了解搜索引擎

1、搜索引擎工作原理

《SEO实战密码(第3版)》精华整理

1、爬行抓取:搜索引擎蜘蛛跟踪链接,抓取页面html代码存入数据库,低权重复制内容过滤;

2、预处理:文字和相关标签抓取,中文分词,去掉无意义内容提炼页面主要关键词(对于蜘蛛没有意义:如:的、啊、从而等,广告、申明等),去重(同一内容不同网站或同一网站不同网址);倒排索引:关键词到内容,链接投票,文件处理(目前只能根据标签和相关描述文字识别),质量判断:搜索引擎算法;

3、排名:中文分词(排除无实际意义的词后对搜索词的拆分重组,百度快照可查询分词结果),相关性计算:越常用的词对搜索词的意义贡献越小,词频,关键词位置形式距离(标题、H1、黑体等),链接分析(锚文本、周边文字、原站本身主题),排名过滤调整(百度第11位)。

2、链接原理:

1、李彦宏超链专利(关键词锚文本);

2、Gongle PR(页面链接投票,作弊链接排除,Google2014年10月表示停止更新,最后更新时间为2013年12月6号),pr只是谷歌排名算法中200多个因素之一,搜狗评级类似;

3、Hilltop算法提示外部链接更应该主题相关。

3、用户关注点击程度

谷歌英文点击率参考(2014):第一页71%,第1位31%,第2位14%,第3位10%,第6-10为4%,处于分屏之处的第6位不利于展现和点击,搜索引擎结果页展示效果不断变化中,中文习惯并不完全符合上述点击特点。

搜索引擎结果关注点击程度,英文点击更具“F型”金三角,中文结果前十名查找时间更长,点击差距相比于英文平和。

SEO应尽一切力量方法丰富自己页面的展现格式,图片、目录、开放数据等,排名重要,展现方式也越来越重要。

4、高级搜索指令

site: 收录,百度以索引为准,link:谷歌随机外链,百度不支持,“”全文搜索,-排除(如“苹果 -电影”:排除电影),*通配符(百度不支持),inurl:搜索词出现在url中的页面(如“inurl:zhanzhangdaohang”百度不支持),inanchor:导入链接锚文字包含搜索词页面(如“inanchor:网络热词”百度不支持),intitle:页面标题包含关键词

高级使用:Inurl:.edu.cn intitle:交换链接 愿意交换链接的中国学校网站

5、搜索引擎份额

搜索引擎简史:1994年Yahoo!诞生,1998年Google诞生,2000年百度诞生,2012年360搜索(好搜)推出。

《SEO实战密码(第3版)》精华整理

国内搜索引擎份额(2016年1月预估):PC端份额大致为:百度50%,好搜30%,搜狗15%;移动端百度80%,神马14%,搜狗5%,按PC与移动平分来算,整体份额比约为百度:好搜:搜狗:神马=65%:15%:10%:7% ,神马可能比搜狗高一点,必应中国、谷歌香港份额可忽略。

全球搜索引擎份额(2015年12月):Google-Global、Bing、百度、Yahoo–Global份额比为66.04%、14.61%、9.61%、7.66%。

6、搜索引擎重要算法历程:

早期关键词和外部链接成为Google/百度两个主要排名因素,也就导致很多人为了SEO而欺骗搜索引擎,如堆砌关键词和发布大量外链(甚至批量生成),来获得搜索引擎重视排名,降低了用户体验的同时砸了搜索引擎口碑也扰乱了SEO良性发展,故而促使搜索引擎算法改进,而现在这么做的大多收到了惩罚。

2011年,Google推出熊猫算法,打击低质内容页面;

2012年,Google推出企鹅算法,打击作弊链接和垃圾链接;

2012年,百度多次出现大面积K站排名甚至收录清零,有针对垃圾内容和链接;

2013年,百度推出绿萝算法,打击垃圾链接和买卖链接;博客论坛群发买卖。

2013年,百度推出石榴算法,打击低质量内容页面,弹窗广告;

2013年,百度推出起源算法,打击采集站、伪原创站;

2015年,百度尝试推出原创保护,提升原创内容排名并标识,提出扶持新站的“蝶变”计划。

2011年至今,Google/百度算法的改变,使SEO更加自然,更强调用户体验。2012年以来,百度对SEO也更加开放推出完善站长平台及工具,官方给出指导文档,并积极的与网站SEOer沟通。

第三章 竞争研究

1、关键词分析

关键词原则:关键词决定了栏目内容规划、链接结构等重要后续步骤,需要注意主题内容相关,不同词商业价值,主关键词不可太宽泛,确保目标关键词有人搜索,降低优化难度,寻找有效流量(地区与业务与公司贴合),善用工具。

竞争程度:搜索结果数、竞价结果数、内页排名数、大型著名门户数(站长之家工具)

竞争对手分析:百度权重(第三方)/搜狗评级<谷歌pr2014年停更>、alexa预估流量/爱占、站长之家预估百度流量、网站年龄(域名年龄)、收录、外链、社交网络曝光

建立关键词库:按首页、频道、栏目划分,长尾扩展规则举例

关键词分组:行业细分、地区分类、部位分类等

关键词分类:信息类:小米手机怎么样,导航类:小米手机官网(品牌),交易类:小米手机价格。

关键词波动预测:行业趋势、季节特性、社会热点(百度风云榜、最新网络事件热词)

2、关键词布局

首页(行业词、品牌词)-频道(大分类词)-栏目(主词、栏目名分类词)专题/标签(热门内容知识点集合)-文章(文章长尾)<商城:产品描述等同文章>

3、关键词挖掘途径

1、爱站/站长之家长尾词挖掘工具。此工具挖掘出的长尾词按照百度指数排列,没有百度指数的不会出现,故而是最重要的长尾词工具。

2、百度搜索框下拉词和百度相关词。百度相关词和百度提示框下拉词是搜索量很大的,除了有部分是同行刷出来词,因此此类词也是非常重要的长尾。

3、百度知道平台。百度知道作为最大的中文问答平台,积聚了无数网友的提问,虽然其中不乏互刷关键词的,但算是不错的参考,输入主词,出现的有针对性的都可算作长尾词。

4、百度搜索风云榜。百度、谷歌、搜狗等热门搜索词、事件。

5、头脑风暴。自己是人,能想到的长尾词,自然也有人会想到会搜索。

6、同行网站。别人有所研究的就用价值,没研究乱搞的也不会有什么价值,注意识别。

《SEO实战密码(第3版)》精华整理

4、关键词扩展方式

1、品牌

手机 - 苹果手机、三星手机、小米手机等

2、地区和行业

地区:网站建设 - 北京网站建、上海网站建设、温州网站建设等

行业:SEO-医疗SEO、金融SEO、游戏SEO等

3、限定和形容词

为扩展词加上一些限定词或者形容词进行组合。如免费、促销、价格等这些限定词都是大家经常搜索的,还有便宜、怎样、是什么、好吗、评测、图片等也是常见的限定词。如:

电视机 - 电视机价格、电视机促销等。

服务器 - 企业服务器、VPS、免费空间。

4、关键词变形

1) 同义词

酒店:宾馆、住宿、客栈等

2) 相关词

网站建设:网页设计、网络营销、SEO

3) 简写

清华大学简称清华、北京大学简称北大、Photoshop简称PS

4) 常用输入法、同音词

罗辑思维:逻辑思维

5、网站诊断

百度/好搜/搜狗/神马站长平台、robots文件、首选域(是否带www,其他不解析或者301)、外部链接(百度已经下架外链工具,谷歌和百度都在打击垃圾外链,内容为主,外链顺其自然,回到推广引流的正确位置,禁大量垃圾无意义外链)。

内链、抓取错误统计(服务器、tttp、抓取异常等)、百度模拟抓取是否正常、移动友好检测、网址是否唯一(301或者robots)。

第四章 网站结构优化

目前搜索引擎只能抓取文字,图片、视频无法识别只有通过便签说明。

蜘蛛陷阱:flash、session id(跟踪用户访问生成网址参数)、框架架构(Frame)、动态url(数据库生成带有?=及参数的网址,目前抓取来说没有问题,过多参数还是不利于搜索引擎,建议生成静态,伪静态注意url唯一)、js、强制使用cookie。

导航清晰:树状结构,主次栏目导航、面包屑导航(当前位置)、避免页脚堆积栏目。

网站权重布局:首页>频道>栏目>文章页;子域名>目录。

禁止抓取:nofollow:不跟踪链接,不传递权重和锚文本;robots:禁止抓取网站内容,如淘宝网全站禁止,一般禁止抓取后台及数据库信息,可以屏蔽目录来解决重复收录的问题(如:http://xxx.xxx.com/robots.txt),Canonical:地址规范标签。

动态url:数据库生成带有问好、等号及参数,容易让搜索引擎限于死循环,现在抓取没有问题,容易造成重复,所以建议Url静态化、伪静态(url重写)。

Url规范:越短越好、注意目录层次。

网站地图:用户看的文字栏目地图和给搜索引擎的链接xml地图。

尽可能多的曝光内链促进收录和内部投票(织梦做到了极致:头条、推荐、幻灯、特荐、相关、排行、最新等)。

第五章 页面优化

1、title

不同网页标题不一致,网页相关,字数限制(30个中文字符),尽量不要堆砌,关键词出现最前面,吸引点击,一个页面关键词控制在3个内,标题不要写没意义的词句,关键词之间的连接符:_、-、〉、|。

2、description

现主流搜索算法不采用,搜索结果采用,影响点击,如果与不包含搜索词则提取内文或随机。77字符,首页、栏目、自己写,内容也提取摘要便签,或者正文前几十个字符,或者留空。

3、keywords

现主流搜索算法不采用,内容页调用tag标签或留空。

4、正文

词频与密度,以前说密度在2%-8%之间,现在的重要性降低,内容页长尾关键词2次左右,正文第一段、中间、结尾穿插,首页、栏目主词无定数,自然恰当,合适融入,切莫堆砌。

网页内标签:H(H1-H6,标题)、黑体(内容重点)、alt(图片说明)

关键词的变形多次、组合、拆分,有助于提取页面主题

语义相关:算法通过词与词之间是否经常出现在同一网页分析他们之间的联系,如优化“奥巴马”,多出现白宫、美国等能帮助搜索引擎页面真正意思。

用户体验:段落清晰,主次分明,重点加黑,第一屏是否有实质内容、广告是否影响浏览。

5、精简代码

css的冗余、css/js外部调用、减少删除注释,控制页面大小(128kb,过大影响打开速度和抓取)

6、内部链接合理,过大总体排名降低;

7、外部链接相关性帮助与提升自身页面相关性。

8、保持合理的页面更新频率及数量

9、社会化分享:如百度分享、评论可能会作为页面受欢迎参考值。

Google沙盒期:新站或长期不更新网站突然大量更新增加大量外链等不正常现象的排名呢后移,Google会有6个月左右,百度新站很注重网站内容质量。

10、文章优化注意点(呓城经验总结)

1、标题:具有用户搜索属性,多有疑问词,比如是什么、怎么办等,可以用复合标题

2、摘要:摘要言简意赅,能概况文章内容,或起到引导作用,包含关键词

3、结构:排版工具格式化,段落清晰;格式化编辑,分段小标题、关键词加粗;可以用1234、一二三四目录格式,添加图片,这两种对用户体验和当前搜索引擎结果页展示都很良好

4、内容:不要完全照抄,多篇文章整合,加上自己描述,删繁就简,注重内容对用户的价值,谨慎做标题党文无题意,或者文章内容过多没有重点标识用户难以找到想知道的内容等损害用户体验的事情

第六章 外部链接建设(百度官方意见)

百度多次打击外链,并且已经下架外链工具,SEO已经从以前单纯发外链就可以得到排名,到现在极度注重内容的阶段,这是好事,我表达下我的观点,我认为外链工作应该从SEO中剔除,我承认高权相关的外链人仍有排名助力,但不要刻意,低质垃圾外链有害无用,还有一点,做长尾不要发外链,不然很容易抢占自身的排名,恢复起来时间很漫长,总得来说就是,做SEO不要再发外链了,注重关键词内容质量优化,外链应该回到推广引流的正确位置,而非继续浪费时间制造互联网垃圾,友情链接对SEO依然很重要。

百度官方:外链的作用(2014版)

曾经,“内容为王超链为皇”的说法流行了很多年,通过超链计算得分来体现网页的相关性和重要性,的确曾经是搜索引擎用来评估网页的重要参考因素之一,会直接参与搜索结果排序计算。但随着该技术被越来越多的SEO人员了解,超链已经逐渐失去作为投票的重要意义,无论是谷歌还是百度,对超链数据的依赖程度都越来越低。那么,在现在,超链在发挥着怎样的作用?

1, 吸引蜘蛛抓取:虽然百度在挖掘新好站点方面下了很大工夫,开放了多个数据提交入口,开避了社会化发现渠道,但超链依然是发现收录链接的最重要入口。

2, 向搜索引擎传递相关性信息:百度除了通过TITLE、页面关键词、H标签等对网页内容进行判断外,还会通过锚文本进行铺助判断。使用图片作为点击入口的超链,也可以通过alt属性和title标签向百度传情达意。

3, 提升排名:百度搜索引擎虽然降低了对超链的依赖,但对超链的识别力度从未下降,制定出更加严格的优质链接、正常链接、垃圾链接和作弊链接标准。对于作弊链接,除了对链接进行过滤清理外,也对链接的受益站进行一定程度的惩罚。相应的,对优质链接,百度依然持欢迎的态度。

4, 内容分享,获取口碑:优质内容被广泛传播,网站借此获得的流量可能并不多,但如果内容做得足够,也可以树立自己的品牌效应。

*严格来讲,这并不属于超链的作用。在百度眼里,网站的品牌比超链要重要得多。

第七章 SEO效果监控及策略修改

1、非流量数据

收录(SEO重点分类,目录查询:Site:www.xxx.com inurl:/a/b/)<内链、抓取友好度、内容原创度不够>、

有效收录:能带来搜索流量的页面

排名

首页、分类、文章页;已有主要排名的升降和新增主要关键词

外链

转化销售或广告收入的升降

2、流量

IP、UV、PV, 平均页面 时常 跳出率 来源(直接网址、搜索引擎<多个搜索引擎>、外部链接)

是否达到预期,是否刻意优化、哪类关键词来路多、用户搜索习惯

3、调整

分析流量页面和用户搜索词,挖掘关键词扩展

排名下滑:内外分析,先静观其变,大幅度下滑改进,优化调整第2、3页的关键词

SEO实验:外链、标题关键词次数、图片alt、页面有无图片等对排名影响

第八章 SEO作弊及惩罚

1、作弊或对搜索引擎不友好手段

常用方式:

1、关键词堆砌:标题、标签、图片ALT文字、正文、页脚、评论、列表等。程度比较模糊,有轻度、重度、极端及无关堆砌。

2、垃圾链接(论坛签名、纯锚文本、锚文本与内容主题不符、群发软件),搜索引擎过滤效果为零

3、买卖链接 判断:主题是否相关、是否大量单向、位置

3、站群 几十几百个 配合采集伪原创工具、链接群发等等(医疗站常用)

4、诱饵替换 以获得正规排名页面替换或增加商业或******非法词 以获得搜索引擎短暂排名(******站常用)

5、利用或劫持高权重网站 百度自身产品 其他博客论坛 政府学校域名网站 注意是否带有nofollow(******站常用)

6、链接向惩罚网站

隐藏文字、桥页等其他方式现在连******/医疗等类站点都已不常用。

2、搜索引擎惩罚

作弊积分制度,单独使用可能在搜索引擎容忍范围,多个被搜索引擎判定为作弊手段可能就会降权惩罚。不要学大网站,搜索引擎对大站名站容忍度更高是为了用户体验,他们经过了长期优质内容积累,用户也信任大站的内容。

惩罚种类:整站删除,排名下降,谷歌付6、负30,百度11位。

检测:site、网站名称(特有或备案号联系方式)首页不在第一、站长平台提醒信息、大部分关键词大幅下降、日志、搜索流量变化(不同搜索引擎)、关键词周期季节热度变化。

3、网站排名波动的主要原因及对策

1、复制程度高,百度认为有质量高于你的网站结果出现(加强内容质量)

2、关键词堆砌、优化过度(降低关键词堆砌痕迹,标题、内文适中自然)

3、服务器宕机、网站打开速度慢(加固或更换服务器,简化代码,查看删改网页卡住的代码,站长平台投诉)

4、被******攻击篡改,友情链接牵连(删除加固,站长平台投诉)

5、程序重要细节问题(url一定要是唯一,同一网页多个url可访问排名结果会有很大影响)

第九章 SEO专题

1、整合搜索(网页搜索并入新闻源、图片、视频、地图等垂直搜索)

图片搜索:ALT、页面标题、图片周围文字、点击图标锚文本、图片像素

视频搜索:标题、描述、播放次数、评论、评分、缩略图

地图搜索:本地商户标注,营业执照、关键词标签

2、更该域名:301,平台验证,更改服务器:抓取ip是否更新

3、SEO与域名

.gov比。com排名好没有根据,只是因为其注册主体决定了网站内容更加可靠高质量,搜索引擎对域名后缀没有偏见,不常见的域名后缀排名少只是因为知道使用的人少而已。

老域名比新域名有力,但要看其什么时候做的网站,有没被惩罚过,域名包含关键词只对英文有好处,续费时间,不要使用匿名注册信息。

4、主机

虚拟主机牵连只存在同服务器上大部分网站都被惩罚,是否抓取正常,稳定性与速度、url重写(伪静态)

5、SEO与品牌:行业展示,专业展示,消除负面

6、地理定位:页面的地理关键词,用户所在地区,国家;关键词、本地网站地图标注。

7、避免过度优化:去优化稀释关键词密度,把时间精力放在创造高质量的内容和吸引分享链接上比花在在页面细节上有效安全的多。

8、用户行为影响搜索排名的猜想

点击率,网站粘度(弹出率、停留时间)、多次搜索及相应网站的访问情况、品牌效应、社会化媒体,回归用户体验。

9、个人化搜索的趋势

百度记录cookie使得经常访问的网站结果被提前,好搜也做过登录后自行排序第一页结果的尝试。

10、百度与Google的区别

一、百度有比较大的首页优势,谷歌对所有页面一视同仁,影响到网站架构关键词布局。

二、百度对外部链接的依耐性比较小,对页面本身的相关性却比较铭感,这种铭感体现在正确的地方出现关键词有助于排名,堆砌关键词容易引来惩罚。谷歌与外部链接很重视,特别是权重较高的链接,对页面关键词出现的频率与位置没那么铭感。

三、百度排名经常大起大落,谷歌渐进式。

四、百度对更新比较看重,谷歌没那么铭感。

11、移动搜索优化

百度把移动网站分为跳转适配(二级域名移动站)、代码适配(url不变一段代码适配)、自适应(url不变,响适应模板适应于所有设备分辨率)三种,当前的情况是百度受限于技术原因,推崇跳转适配,中国四大搜索引擎都有适配通道;谷歌推崇自适应,自适应是潮流,省去了建设优化移动站的麻烦,url不变有利于网站统一,百度也承认自适应的优点,目前仍在努力识别中,自适应优化百度给出是标签标注申明和防止百度转码。

百度移动网站排名因素:移动搜索的结果是由PC搜索结果加入更多的移动端特征后进一步调整而来,优先对移动页面进行排序(PC网站移动化、适配申明、访问速度、地域网络等等)。新站的话建议用自适应,老站的话百度未给出跳转和自适应切换的途径,识别能力目前很差,建议暂时不要更换。

12、APP搜索排名优化

标题、关键词、描述、热度、下载、评分

第十章 SEO观念及原则

1、SEO发展原则

SEO的根本原理在于提高网站内容的相关性(第一代:页面关键词、网站主题)、权威性(第二代:网站自身的积累、外部链接)、实用性(第三代:用户体验、访客行为跟踪),前两者容易作弊,后者作弊难。

2、SEO与赚钱

SEO接单服务,给自己做SEO(资讯信息、B2C电商<货源>)

3、SEO基本而重要的要素

网站结构内链

标题、H1标签包含关键词

正文包含关键词两三次

内容原创避免重复

自然的外部链接

4、内容为王

信息爆炸的同时造成的优质内容匮乏是SEO机会和挑战。

第十一章 SEO工具

1、SEO工具

百度站长平台、百度统计、爱站、站长之家、百度指数(搜索量加媒体曝光)、百度搜索风云榜、百度竞价后台、站长导航

2、SEO学习资源

《百度搜索引擎网页质量白皮书》

《百度移动搜索》

《第37次中国互联网络发展状况统计报告》(2016年1月)

第十二章 SEO项目管理

团队分工:

SEO主管、网页设计、程序优化、内容编辑、友情链接(替代外部链接)、数据分析

优化流程:

1、记录所有修改

2、工作目标(页面、标签、收录、排名、流量,时间)

3、任务分解

4、资源调配

5、内容规范:标题、正文排版 关键词 内容编写

6、获得高层支持(SEO作用、竞争对手、预算、时间期望、执行报告)

7、沟通、内部培训、建立规范(技术:url、标题H1图片alt概述;编辑:标题、正文排版 关键词 内容编写)

8、应急:监控、替代流量、网站诊断

第十三章 搜索引擎排名因素调查

百度排名因素猜想

10分为满分

正面因素

网站关键词及自身因素:

1、标题中出现关键词、关键词完整匹配 10

2、正文、摘要及其他位置出现关键词或关键词的同义词相关词 10

3、H1标签包含关键词 10

4、URL静态化 9

5、原创内容 9

6、网站域名信任程度 8

7、正文内容结果清晰,以1234或者一二三四分段 7

8、正文包含图片 6

9、描述便签包含关键词 5

10、图片ALT 5

11、关键词黑体加粗 5

12、页面更新频率及时间 4

外部链接因素:

13、外部链接的权威相关程度 4

用户行为猜想:

14、搜索结果的点击率 3

15、页面访问时长 3

16、百度分享数量,被微信、微博、豆瓣等分享 3

17、评论 3

负面因素

1、同一网页内容Url存在多个,url存在大量动态参数 10

2、服务器宕机 9

3、网站打开速度慢(服务器和网站代码2方面原因 ) 9

4、大量404等错误页面 9

5、页面出现******、色情关键词,导出链接为被标注为风险或被惩罚的网站 8

6、被判定为链接买卖双方,外链优化过度 8

7、标题、正文关键词堆砌,锚文本过渡优化 8

8、弹窗广告或页面广告太多 7

第十四章 SEO案例分析(略)

作者:呓城之城

来源:卢松松博客(QQ:13340454),欢迎分享本文,转载请保留出处!

国内外vps主机提供商所提供的主机大多是基于Xen、OpenVZ、KVM、Hyper-V、VMWare五种虚拟化技术。

一、Xen 官网:http://xen.org/

Xen 由剑桥大学开发,它是基于硬件的完全分割,物理上有多少的资源就只能分配多少资源,因此很难超售。可分为Xen-PV(半虚拟化),和Xen-HVM(全虚拟化)。

Xen是不能超售内存和硬盘的,当母服务器只有16G内存以及100G硬盘时,当开Xen架构(任意一个虚拟化)的1G内存、25G硬盘的子机时,会直接占用服务器1G内存,以及25G硬盘,所以Xen的性能,相比OpenVZ在超售的情况下要好。

Xen-PV:半虚拟化,所以它仅仅适用于linux系列VPS,但它的性能损失比较少,大概相对于母机的4%-8%左右。
Xen-HVM:全虚拟化,可以安装windows或自由挂载ISO文件安装任意系统,由于是全虚拟化,所以性能损失较大,大概相对于母机性能损失8%-20%左右。

Xen适用人群:预算较为充足,且希望VPS有较高性能的客户
Xen注意事项:注意Xen-PV和Xen-HVM的区别。
Xen可用系统:Xen-PV:纯Linux,Xen-HVM:支持Windows、Linux等。
Xen代表商家:Linode.com

二、OpenVZ 官网:http://openvz.org/

OpenVZ(简 称OVZ)采用SWsoft的Virutozzo虚拟化服务器软件产品的内核,是基于Linux平台的操作系统级服务器虚拟化架构。这个架构直接调用母服务器(母机)中的内核,模拟生成出子服务器(VPS,小机),所以,它经过虚拟化后相对于母服务器,性能损失大概只有的1-3%。

当然 OpenVZ可以超售,意思味着一台服务器总共16G内存,他可以开出配置为1G内存×17台以上的子服务器。因为他的虚拟架构关系属于:客户用多少,就扣除母服务器多少,所以OpenVZ架构的VPS较为便宜。但由于存在超售因素,如果服务商毫无休止的超售会导致服务器的性能急剧下降。

OpenVZ另一个特点是,它是直接调用母服务器的内核,所以会导致部分软件无法使用,以及部分内核文件是无法修改。

OpenVZ适用人群:新手、低预算客户
OpenVZ注意事项:资源不是自己独有的,安装VPN服务需要注意检测虚拟网卡支持。
OpenVZ可用系统:Linux(不支持Windows)
OpenVZ代表商家:Buyvm.net

三、KVM 网站:http://www.linux-kvm.org/

KVM是Linux下的全功能虚拟化架构,基于KVM架构的VPS,默认是没有系统的,可自己上传ISO或调用服务商自带的ISO手动安装系统。这个非常适合热爱DIY自己VPS的客户。

由于KVM架构全功能虚拟化架构,甚至拥有独立的BIOS控制,所以对母服务器性能影响较大,所以基于KVM的VPS较贵,但KVM VPS相对其它架构的VPS较为自由。

KVM适用人群:折腾帝
KVM注意事项:虚拟化性能比Xen略低
KVM可用系统:Windows、Linux系列
KVM代表商家:Hostgation.com

四、Hyper-V 网站:http://www.microsoft.com/zh-cn/server-cloud/

Hyper-V是微软的一款虚拟化产品,大部分国内的VPS服务商使用这个架构,主要是因为其转为Windows定制,管理起来较为方便。目前的Hyper-V也支持Linux,只不过性能损失比较严重。

Hyper-V完美支持Windows系统,包括32位和64位。如果大家选购Hyper-V架构的VPS,强烈建议使用Windows。

Hyper-V目前不能超售内存,但可超售硬盘,硬盘是根据客户使用情况扣除。一般来说,服务器的硬盘不会100%用完,这点不用担心。

Hyper-V适用人群:Windows系统爱好者
Hyper-V注意事项:Linux操作系统性能较低
Hyper-V可用系统:Windows、Linux

五、VMWare 网站:http://www.vmware.com/

VMWare 是全球桌面到数据中心虚拟化解决方案的领导厂商开发的一款全功能完全虚拟化的软件。但由于VMWare用于开设类似VPS(含独立面板)的系列产品授权费用非常昂贵,所以大部分使用VMWare服务商会使用 VMware工作站(VMware Workstation)提供VPS。

使用VMware工作站(VMware Workstation)开设的VPS是无控制面板的,操作系统需要服务商手动安装,但现在网上寻找VMware Workstation的神KEY非常容易,对于VPS服务商来说节省不少成本。一般用于新创业的VPS服务商。

使用VMWare Workstation实质上的VPS可以超售,因为其和OpenVZ架构一样,子机用多少内存,就扣除系统多少内存,但如果物理内存不足时可能导致母服务器使用Windows虚拟内存。

VMWare适用人群:认真建站或挂机的客户
VMWare注意事项:无控制面板
VMWare可用系统:Windows、Linux系列

以上衡量超售指的是内存、磁盘,其它硬件条件,如网络带宽、CPU等不在考虑范围内。

六、Xen和OpenVZ的区别
Xen由dom0和domU组成,Dom0是虚拟出CPU, IO总路线等资源,供工作于DomU上的不同的kernel运行。
这样的好处是,
1. 对可以运行的操作系统限制较少。
2. domU上系统的crash不会影响其他的dom. 当然Dom0发生故障时还是会有问题。
坏处:
1. 由于需要虚拟CPU,BUS等物理资源,开销会更大点。

OpenVZ使用了完全不同的方式,它所创造的虚拟机都使用工作在同一个kernel下。
这样的好处是
1. 性能好。
坏处:
1. 任何一个kernel bug都会危及所有的虚拟机。 因kernel bug所crash的可能性大大增加。
2. 他需要对内核作很多的改动。

区分上最明显的,XEN VPS有swap区,基于RHEL5的OpenVZ VPS没有swap区,基于RHEL6的OpenVZ VPS有VSwap区。

 

转:https://qiaodahai.com/xen-openvz-kvm-hyper-v-vmware-virtualization.html

转自:http://blog.csdn.net/mapboo/article/details/49536297

CSDN博主Mapboo原创,感谢博主!

==============================

前言:

纵观国内的广告平台,比如多盟,万普,百度,腾讯,或者别的一些广告平台,真是应接不暇,但是具体接入那就自己判断了,经过一番折腾,最终还是选择了谷歌平台,理应是稳定,可靠,安全,收入颇高,但是登录网络有点问题,应该大家都懂吧,这里就不再赘述了,各自想办法吧;

准备工作:

1,首先你是Android开发者,或者至少会点Java编程基础;

2,熟悉使用Android Studio(以下简称:AS),即官方Android应用开发工具;

3,注册了http://www.google.cn/admob/ 应用,并且有个banner_ad_unit_id吧;

4,待加入横幅广告条的app;

5,可参考官方接入指南:https://developers.google.com/mobile-ads-sdk/docs/admob/android/quick-start

开发过程:

1,创建或打开AS 工程,本示例是新建工程;

2,打开Android SDK Manager安装Google Repository;

3,关联我们的广告SDK,这里有两种方式:

A  点击Project Structure 直接选取,如下图:

com.google.android.gms:play-services:7.8.0;

B 打开build-gradle 加入一行代码,如下图:

compile 'com.google.android.gms:play-services:6.+'

4,程序会开始自动编译,然后打开AndroidManifest.xml 文件,添加如下代码:

[java] view plain copy

print?

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3.     keyword">package="com.mapboo.adviewdemo" >
  4.    <span style="color:#ff0000;"> <uses-permission android:name="android.permission.INTERNET" />
  5.     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/></span>
  6.     <application
  7.         android:allowBackup="true"
  8.         android:icon="@mipmap/ic_launcher"
  9.         android:label="@string/app_name"
  10.         android:theme="@style/AppTheme" >
  11.        <span style="color:#ff0000;"> <meta-data android:name="com.google.android.gms.version"
  12.             android:value="@integer/google_play_services_version" /></span>
  13.         <activity
  14.             android:name=".MainActivity"
  15.             android:label="@string/app_name" >
  16.             <intent-filter>
  17.                 <action android:name="android.intent.action.MAIN" />
  18.                 <category android:name="android.intent.category.LAUNCHER" />
  19.             </intent-filter>
  20.         </activity>
  21.        <span style="color:#ff0000;"> <activity
  22.             android:name="com.google.android.gms.ads.AdActivity"
  23.             android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"
  24.             android:theme="@android:style/Theme.Translucent" /></span>
  25.     </application>
  26. </manifest>

 

5,打开activity_main.xml 文件,输入如下代码:

[java] view plain copy

print?

  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2.     xmlns:tools="http://schemas.android.com/tools"
  3.     xmlns:ads="http://schemas.android.com/apk/res-auto"
  4.     android:layout_width="match_parent"
  5.     android:layout_height="match_parent"
  6.     android:paddingBottom="@dimen/activity_vertical_margin"
  7.     android:paddingLeft="@dimen/activity_horizontal_margin"
  8.     android:paddingRight="@dimen/activity_horizontal_margin"
  9.     android:paddingTop="@dimen/activity_vertical_margin"
  10.     tools:context=".MainActivity"
  11.     android:gravity="center_vertical">
  12.     <TextView
  13.         android:layout_width="match_parent"
  14.         android:layout_height="wrap_content"
  15.         android:text="@string/demoName"
  16.         android:gravity="center"
  17.         android:textSize="30dp"
  18.         android:layout_marginTop="150dp"
  19.         />
  20.     <com.google.android.gms.ads.AdView
  21.         android:id="@+id/adView_bottom"
  22.         android:layout_width="match_parent"
  23.         android:layout_height="wrap_content"
  24.         android:layout_alignParentBottom="true"
  25.         android:layout_centerHorizontal="true"
  26.         android:layout_gravity="bottom"
  27.         ads:adSize="BANNER"
  28.         ads:adUnitId="@string/banner_ad_unit_id" />
  29. </RelativeLayout>

 

[java] view plain copy

print?

  1. <resources>
  2.     <string name="app_name">AdViewDemo</string>
  3.     <string name="demoName">谷歌Admob广告条示例</string>
  4.     <string name="banner_ad_unit_id">ca-app-pub-8514769117499822/6386262194</string>
  5. </resources>

 

6,打开MainActivity文件,输入如下代码:

[java] view plain copy

print?

  1. keyword">package com.mapboo.adviewdemo;
  2. keyword">import android.support.v7.app.ActionBarActivity;
  3. keyword">import android.os.Bundle;
  4. keyword">import android.util.Log;
  5. keyword">import android.view.Menu;
  6. keyword">import android.view.MenuItem;
  7. keyword">import com.google.android.gms.ads.AdListener;
  8. keyword">import com.google.android.gms.ads.AdRequest;
  9. keyword">import com.google.android.gms.ads.AdView;
  10. keyword">public keyword">class MainActivity keyword">extends ActionBarActivity {
  11.     @Override
  12.     keyword">protected keyword">void onCreate(Bundle savedInstanceState) {
  13.         keyword">super.onCreate(savedInstanceState);
  14.         setContentView(R.layout.activity_main);
  15.         /**
  16.          * 创建广告条对象
  17.          */
  18.         AdView mAdView = (AdView) findViewById(R.id.adView_bottom);
  19.         AdRequest adRequest = keyword">new AdRequest.Builder().build();
  20.         /**
  21.          * 创建一个监听,比如判断用户是不是已经点击了广告条,以此来给用户增加积分等操作;
  22.          */
  23.         AdListener listener = keyword">new AdListener() {
  24.             @Override
  25.             keyword">public keyword">void onAdClosed() {
  26.                 keyword">super.onAdClosed();
  27.                 Log.i("TAG""onAdClosed");
  28.             }
  29.             @Override
  30.             keyword">public keyword">void onAdFailedToLoad(keyword">int errorCode) {
  31.                 keyword">super.onAdFailedToLoad(errorCode);
  32.                 Log.i("TAG""onAdFailedToLoad");
  33.             }
  34.             @Override
  35.             keyword">public keyword">void onAdLeftApplication() {
  36.                 keyword">super.onAdLeftApplication();
  37.                 Log.i("TAG""onAdLeftApplication");
  38.             }
  39.             @Override
  40.             keyword">public keyword">void onAdLoaded() {
  41.                 keyword">super.onAdLoaded();
  42.                 Log.i("TAG""onAdLoaded");
  43.             }
  44.             @Override
  45.             keyword">public keyword">void onAdOpened() {
  46.                 keyword">super.onAdOpened();
  47.                 Log.i("TAG""onAdOpened");
  48.             }
  49.         };
  50.         /**
  51.          * 设置监听
  52.          */
  53.         mAdView.setAdListener(listener);
  54.         /**
  55.          * 开始载入广告条
  56.          */
  57.         mAdView.loadAd(adRequest);
  58.     }
  59.     /**
  60.      *
  61.      官方示例:https://developers.google.com/mobile-ads-sdk/docs/admob/android/quick-start
  62.      
  63.      分享:安卓发布平台 http://blog.csdn.net/mapboo/article/details/49531043
  64.      应用汇:http://www.appchina.com/
  65.      安智市场:http://www.anzhi.com/
  66.      华为市场:http://appstore.huawei.com/
  67.      百度市场:http://app.baidu.com/pass/center
  68.      蒲公英:http://www.pgyer.com
  69.      N多网 :http://www.nduoa.com/developer
  70.      豌豆荚:http://developer.wandoujia.com/
  71.      360:http://dev.360.cn
  72.      QQ:http://op.open.qq.com
  73.      FIR:http://fir.im
  74.      Android中国开发者 交流QQ群:361871827 欢迎加入一起讨论技术...
  75.      */
  76. }

 

编译运行:

运行代码,就会出现Admob广告条,只要替换自己的banner_ad_unit_id就能开始赚钱了;

效果图:

本实例源代码下载地址:http://pan.baidu.com/s/1pJ3UEcr

Android中国开发者 QQ群:361871827 欢迎一起讨论技术..

导语:美国专栏作家斯蒂芬·斯宾塞分享了如何从现有的数据中挖掘黑马词的经验。你如果已经完成了关键词的挖掘,并且制定出了关键词策略,你认为工作到此就结束了吗?远远不够。你确定没有错过任何高质量的关键词?我这有几个技巧帮助你利用现有数据和工具挖掘黑马词。

SEO|如何从现有数据中挖掘黑马词

Keyword 关键字

SEO优化最关键的步骤之一,就是精准选择关键词。

有许多工具可以帮助你挖掘关键字,比如Google AdWords Keyword Planner, Searchmetrics, SEMrush, Keyword Discovery, WordStream等工具。(译者:国内有百度凤巢、站长工具、金花站长工具等。如果你需要了解更多关于SEO关键词挖掘相关的文章,请点击微信号的菜单查看。)开发站内搜索词

这是网络营销人员做关键词研究与策略时会忽略的主要领域之一。如果你的网站有一个搜索功能,请导出这些数据,从中找到可能被我们忽视的关键词。

当一个用户在你的网站上搜索时,他们会告诉你几件事:

①我觉得这个项目或是信息肯定在这个网站上的某个地方,但是我不知道具体在哪里。②我不知道你的网站上有没有这样的项目或信息,但我希望你有。③我知道这个项目或信息在你的网站上,但是通过你的网站搜索引擎比通过导航找到它们要更快。

在搜索那些确实存在于你的网站上的产品或信息的情况下,大量的搜索可能是提醒你将这些项目变得更容易被找到,或是将你的导航变得更加直观。

然而你可能会发现,用户很可能用你以前从来都没有考虑过的关键词来搜索你的产品。从本质上来讲,这是用户在告诉你,他们的搜索习惯是什么。

如果有相当多的人在你的网站上搜索一些特定的关键词,同时这些关键词也能带来转化,那么你一定要确保这些关键词已经包含在跟踪系统和优化策略中。

你可以优化这些关键词现有的着陆页,或是为这些关键词创建新的着陆页,当排名上升后就可以将用户从搜索引擎结果页直接指引到关键词着陆页上。你不仅可以获得更多的流量,而且用户通过搜索引擎找到想要的产品比通过导航寻找所需的时间更短。

你可以用GA(谷歌分析工具)跟踪用户的搜索行为,你只需要在GA进行设置,并且给URL进行打码即可实现,跟踪的参数和资源包括:

①?keyword= 跟踪关键词字符串②search? 搜索参数字符串③?query= 查询参数字符串④searchpage.jsp? 搜索页面参数字符串⑤search/?text= 搜索文本字符串

你可以对上面任意参数进行组合使用,只要确保这组参数不会和GA其他跟踪参数重复即可。

从这里开始,你就可以很便捷的在GA中查看数据报告,并且可以运用过滤器来筛选结果,其中包括识别搜索页面的字符串。

SEO|如何从现有数据中挖掘黑马词

GA筛选出所有页面的报告

在下面的例子中,关键词已经被隐藏,第4行的关键词可能会给网站带来不错的价值。当关键词被足够多的用户搜索时,很可能会为网站带来销售转化。

SEO|如何从现有数据中挖掘黑马词

谷歌分析筛选出所有的页面报告你应该优化网站以更好的突显产品,同时你也应该研究关键词,是否有新的关键词能带来新的流量。那些你所不知道关键字词才是真正机会

另一个不错的战术就是寻找那些你目前还没有追踪或定向的,但已经有排名的关键词。

我曾在过去的策略中写过怎样运用Searchmetrics挖掘那些“未被发现”的关键词,以便补充你的整个关键词体系和策略。去寻找那些未被发现的黑马词,并且创建友好型的页面内容,可以使关键词为网站带来更多流量。

我最近使用的另一个工具:AuthorityLabs的“Now Provided”功能,可以帮助我们挖掘关键词提升网站流量。

在搜索引擎跟踪、多平台跟踪、多域名跟踪的功能之外,这个工具还有一个快速而强大的功能:发现那些可以对你的网站造成巨大的影响的微小变化,同时也监测未优化却已经有排名的关键词。

这个报告中的数据是从谷歌分析和SEMrush中导出的,并且添加了AuthorityLabs中的数据,展现了有排名的着陆页和排名TOP50的关键词。

SEO|如何从现有数据中挖掘黑马词

AuthorityLabs的“Now Provided”报告-登陆页面

当你深入研究某个页面时,这个报告可以告诉你每个关键词,或者至少是排名TOP50关键词的预估流量。

在下面这个例子中,“新关键词”是指网站没有追踪或优化的关键词。事实上,这些词就算没有优化仍然可以在谷歌的排名第十一位。然而,如果在这个关键词的着陆页面中重点突出相关产品,可能会带来不错的销售转化。

SEO|如何从现有数据中挖掘黑马词

AuthorityLabs“Now Provided”报告-关键词排名的承接页

试想一下,如果他们对这个关键词稍微优化一下,比如增加关键词的密度、内部链接或者修改一下meta标签。这个词的排名可能会跃升至搜索结果页第2页的首位甚至是第1页。这会带来更多的自然流量。

这个工具还有一个强大的功能,就是可以以Excel CSV格式导出所有你正在挖掘的关键词数据。通过一个简单的数据查询,然后应用数据过滤器,你可以迅速地将有相同特质的关键词进行归类。

在为你展示着陆页、关键词、跳出率、排名位置、搜索量和PPC点击价格等数据的基础上,它也给出了关键词竞争力的评级(从0到1.0)和“关键词优化难度等级”。

AuthorityLabs基于各种因素计算出关键词优化难度等级。它可以快速排序,以此找到流量和价值最高的关键词。

SEO|如何从现有数据中挖掘黑马词

AuthorityLabs“Now Provided”的报告-CSV的导出

你可以根据这个报告找到关键词优化的机会从而带来自然流量,相比购买最昂贵的CPC而言,这种渠道的投资回报率更高。

“排名位置排序”是我分析这个报告最喜爱的方式之一。将搜索引擎结果页的位置2移动到位置1可以导致非常大的流量变化,可能会使流量翻番。你可以分析究竟有多少位置2的关键词能够有潜力上升到位置1。

另外一个机会可能是根据排名11,12或13位置的关键词,来过滤这个报告。如果这些关键词只排在第2页,可能只带来较少的流量,相比较而言,将其中一些关键词优化到第1页也许并不需要花很大的精力。而在搜索结果首页的关键词会得到更高的点击率。

这里有许多排序或筛选报告的方法,你可以在已关注的关键词中寻找机会,也可以分析出是什么因素提升了提升了流量,也许此前你并不知情。

顺便说一句,一个我从来没有在其他地方(甚至是GA中,尽管所有的数据都来自那里)见到过的和AuthorityLabs一样的报告,即自然流量的承接页报告。这并不是流量或关键词报告,而是每天为网站带来自然流量的承接页的页面总和。这个报告可以作为你网站的“探测仪”。如果你发现有些页面的流量突然下降,那么可能是谷歌刻意对你的网站进行了降权,或是监测工具出现了问题,或是技术人员无意中封锁了网站的某个部分。

我喜欢将它用作关键词和内容优化的指导。如果带来自然流量的页面数量越来越多或者关键词排名逐渐靠前,这意味着,你的网页优化和内容创建工作卓有成效。

SEO|如何从现有数据中挖掘黑马词

AuthorityLabs可以监测每天有多少页面带来了谷歌自然流量

在上面的例子中,你可以看到这个网站在2015年9月有一个转折点。转折点之后,伴随着新内容创建的完成,这个网站有相当多的页面带来了自然流量。最后的思考

我敢打赌你并不知道,在你现在的网站中,有一个绝好的关键词机会可以带来更多的流量、增加更多销售并且提升品牌知名度。永远不要认为你的关键字策略已经“完美”了,直到你已经用完了所有可以带来流量的关键词机会。

挖掘好关键词之后,创建良好的用户体验以及高质量的内容,自然流量就会得到提升。方法已经告诉你,剩下的就是你怎么去执行了。如果你有任何问题,可以在评论中留言。

注:本文内容由九枝兰团队翻译,转载请加上今日头条号:九枝兰网络营销 以及微信ID:jiuzhilan。对于不署名者,九枝兰将保留追究的权利。

原作者:Stephan Spencer

译者:郭雨知@九枝兰

转:http://toutiao.com/i6233234312968274433/

Node.js是一个面向服务器的框架,立足于Chrome强大的V8 JS引擎。尽管它由C++编写而成,但是它及其应用是运行在JS上的。本文为开发者总结了4个Node.js要点。

1. 非阻塞(Non-blocking)或异步I/O

由于Node.js一个服务器端框架,所以它主要工作之一是处理浏览器请求。在传统的I/O系统中,每个请求的发出都是在上一请求到达之后才发出的。所以这被称为阻塞(blocking)I/O。服务器会阻挡其它的请求以处理当前请求,从而导致浏览器等待。

Node.js不以这种方式来进行I/O处理。如果一个请求需要长时间处理,Node.js会把该请求发送给一个事件循环(event loop),然后继续处理在调用堆栈(call stack)中的下一请求。当延后请求处理完毕时,它会告知Node.js同时浏览器会做出响应反馈。

以下使用一个事例来说明。

Blocking I/O

// take order for table 1 and wait...
var order1 = orderBlocking(['Coke', 'Iced Tea']);
// once order is ready, take order back to table.
serveOrder(order1);
// once order is delivered, move on to another table.
// take order for table 2 and wait...
var order2 = orderBlocking(['Coke', 'Water']);
// once order is ready, take order back to table.
serveOrder(order2);
// once order is delivered, move on to another table.
// take order for table 3 and wait...
var order3 = orderBlocking(['Iced Tea', 'Water']);
// once order is ready, take order back to table.
serveOrder(order3);
// once order is delivered, move on to another table.

在这个餐馆例子中,服务员接收了菜单指令,等待饭菜处理,然后在饭菜处理完成后把饭菜端到桌子上。在服务员等候饭菜处理期间,他会拒绝其它客人的菜单指令。

Non-blocking I/O

// take order for table 1 and move on...
orderNonBlocking(['Coke', 'Iced Tea'], function(drinks){
  return serveOrder(drinks);
});
// take order for table 2 and move on...
orderNonBlocking(['Beer', 'Whiskey'], function(drinks){
  return serveOrder(drinks);
});
// take order for table 3 and move on...
orderNonBlocking(['Hamburger', 'Pizza'], function(food){
  return serveOrder(food);
});

而在非阻塞模式下,服务员会告知厨师他接受到的菜单指令,然后去接收下一桌的指令。当第一桌饭菜处理完毕时,他会为那桌客人上菜,然后继续接收其它客人的指令。这样一来服务员不会由于阻塞指令而造成时间浪费。

2. 原型(Prototype)

原型在JS中是一个复杂的概念。在典型继承机制语言如Java或C++中,为了实现代码复用,你必须先创建一个类然后透过它来生成对象或透过类扩展来生成对象。但是在JS中没有类似的类概念。在JS中创建一个对象后,你需要透过它来扩展对象或创建新对象。这就叫做原型继承(prototypal inheritence)。

每个JS对象都连接着一个原型对象并对并继承该对象的属性。每个对象与预定义JS的Object.prototype相联系。如果你透过obj.propName或obj['propName'>方式来查找对象属性但查找失败时,这时可尝试通过obj.hasOwnProperty('propName')的方式进行查找,JS运行时会在在原型对象中查找属性。如果属性不存在于原型链中,那么将返回undefined值。

让我们用以下例子来进行说明:

if (typeof Object.create !== 'function') {
    Object.create = function (o) {
        var F = function  {};
        F.prototype = o;
        return new F;
    };
var otherPerson = Object.create(person);

当你创建了一个新对象,你必须选定一个以原型为基础的对象。在这里,我们为对象函数添加了一个create方法。create方法创建了一个以其它对象为原型的对象,并作为参数传入。

当我们变更新的对象时,它的原型是保持不变的。但是,当我们改动了原型对象,该变更会影响所有基于该原型的对象。

3. 模块(Modules)

如果你曾在Java中使用过包,那么Node.js的组件与之类似。如果没有,也不用担心;组件其实是简单的JS文件,用于实现特定的功能。组件模式的意义是让你工作得更加轻松。要使用组件,你必须像在JAVA中导入包一样进行JS文件导入。Node.js中有两种组件

核心组件(Core Modules)- 核心组件是结合Node.js库被预编译的。其目的是把程序员经常使用的功能开放出来,避免重复劳动。常见的核心组件有HTTP, URL, EVENTS, FILE SYSTEM等等。

用户自定义组件(UserDefined Modules)- 用户自定义组件是提供给用户使用以实现具体功能的组件。当核心组件不足以满足程序员需要的时候,自定义组件就可派上用场了。

组件是通过require函数被抽取的。如果这是一个核心组件,那么参数就是组件名。如果这是一个用户自定义组件,那么参数就是其在文件系统中的组件路径。例如:

// extract a core module like this
var http = require('http);
// extract a user defined module like this
var something = require('./folder1/folder2/folder3/something.js');

4. 回调(Callbacks)

在JS中,函数是第一类对象。也就是说你可以像对常规对象那样对函数进行所有操作。例如指派函数到一个变量,把这些作为参数传给方法,把它们声明为对象的属性,甚至是把它们从函数里返回。

回调在JS中是异步函数,可以作为参数传递给其它函数或从其它函数里执行或返回而后再执行。这是回调的基本概念。

当我们把一个回调函数作为参数传递给另外的函数时,我们传递的仅仅是函数的定义;换言之,我们不会知道回调函数的执行时间。这完全依赖于回调函数机制。它会在稍后某个时间点进行回调调用。这是Node.js的非阻塞或异步行为的基本概念,可用下例进行说明:

setTimeout(function {
    console.log("world");
}, 2000)
console.log("hello");

这是一个最简单的调用。我们把一个匿名函数作为参数进行传递,作用是为setTimeout函数进行控制台的输出记录登记。因为这仅仅是个函数定义,我们不知道函数何时会被执行。这取决于setTimeout函数的second参数,即2S后。

首先,second记录语句记录了对控制台的输出,2S后,在回调函数中的记录语句记录了输出的内容。

// output
hello
world

写在最后

以上4点对Node.js开发者来说是要彻底理解和掌握的,建议多动手来好好体会这4个要点的含义。

原文出自: Dzone

(责编/夏梦竹)

 

转:http://toutiao.com/news/6228307537867833858/