MyException - 我的异常网
当前位置:我的异常网» Linux/Unix » NFS储存服务部署

NFS储存服务部署

www.MyException.Cn  网友分享于:2013-10-27  浏览:0次
NFS存储服务部署

第1章 NFS介绍

1.1 NFS服务内容的概述

RPC服务知识概念介绍说明,以及RPC服务存在价值必须理解掌握

NFS服务工作原理讲解(必须理解掌握)

NFS共享文件系统使用原理讲解(必须理解掌握

NFS服务配罝文件exports编写格式说明(必须理解掌握

1.2 NFS是什么

NFSNetwork File System)即网络文件系统

   它的主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录。

   分布式文件系统Moosefs(mfs)\glusterFS

1.2.1 NFSqudian

nfs属于本地文件存储服务

   缺点一:

    winndows上无法使用

   缺点二:

在高并发场景,以及存储量比较高的场景,对数据安全性要求比较高场景

        需要采用分布式储存(mfs  FastDFS

        分布式文件系统:无法在服务器中看到真实的文件信息

1.2.2 实现Windowslinux系统文件数据共享方法

        a.ftp(ftp服务部署)

        b.samba服务   

1.3 NFS共享网络文件系统企业应用

主要用于存储web服务器上用户上传的数据信息,图片 附件 头像 视频 音频

1.4 NFS文件系统存在意义

实现数据共享,数据统一一致

1.4.1 实现的不同方法

软件实现:

本地文件系统NFS  分布式文件系统 mfs

硬件实现:

IBM (服务器 小型机 大型机 存储 DS V7000 V5000) oracle EMC = IOE

1.5 NFS 网络文件系统工作方式

* nfs服务端创建共享目录

* 通过mount 网路挂载,将NFS客户端本地目录挂载到NFS服务端共享目录上

* NFS客户端挂载目录上创建、删除、查看数据操作,等价于在服务端进行的创建、删除、查看数据操作

 

如图10-5所示,在 NFS服务器端设置好一个共享目录 /video后,其他有权限访问 NFS服务器端的客户端都可以将这个共享目录 /video挂载到客户端本地的某个挂载点(其实就是一个目录,这个挂载点目录可以自己随意指定),图10-5中的两个 NFS客户端本地的挂载点分別为/ v/video/video ,不同客户端的挂载点可以不相同。

客户端正确挂载完毕后,就可以通过 NFS客户端的挂载点所在的/v/video /video目录查看

NFS服务器端 /video共享出来的目录下的所有数据。在客户端上查看时 NFS服务器端的 /video目录就相当于客户端本地的磁盘分区或目录,几乎感觉不到使用上的区别,根据 NFS服务器端授予 NFS共享权限以及共享目录的本地系统权限,只要在指定的 NFS客户端操作挂载/ v/video/video的目录,就可以将数据轻松地存取到NFS服务器端上的/video目录中了。

1.6 NFS网络文件系统重点要了解两个重要服务

 RPC服务

       NFS服务

1.6.1 NFS工作流程图

 

 

1.6.2 RPC服务工作原理

1.6.3 NFS详细的访问流程

当访问程序通过NFS客户端向NFS服务器存取文件时,其请求数据流程大致如下:

01.首先用户访间网站程序,由程序在NFS客户端上发出存取NFS文件的请求,这时NFS客户端(即执行程序的服务器)的RPC服务(rpcbind服务)就会通过网络向NFS服务器端的RPC服务(rpcbind服务)的111端口发出NFS文件存取功能的询间请求.

02.NFS服务器端的RPC服务(rpcbind服务)找到对应的已注册的NFS端口后,通知NFS客户端的RPC服务(rpcbind服务)。

03.此时NFS客户端获取到正确的端口,并与NFS daemon联机存取数据

04.NFS客户端把数据存取成功后,返回给前端访间程序,告知用户存取结果,作为网站用户,就完成了一次存取操作。

   因为NFS的各项功能都需要向RPC服务(rpcbind服务)注册,所以只有RPC服务才能获取到NFS服务的各项功能对应的端口号(port number)PIDNFS在主机所监听的IP等信息,而NFS客户端也只能通过向RPC服务询问才能找到正确的端□。也就是说,NFS需要有RPC服务的协助才能成功对外提供服务。从上面的描述,我们不难推断,无论是NFS客户端还是NFS服务器端,当要使用NFS时,都需要首先启动RPC服务,NFS服务必须在RPC服务启动之后启动,客户端无需启动NFS服务,但需要启动RPC服务。

第2章 实践操作NFS 服务

2.1 进行服务器架构规划

NFS服务器部署角色IP

服务器系统

角色

IP

CentOS release 6.9 (Final)

NFS服务器端(NFS-Sever)

10.0.0.31

CentOS release 6.9 (Final)

NFS客户端1(NFS-Client1)

10.0.0.8

CentOS release 6.9 (Final)

NFS客户端2(NFS-Client2)

10.0.0.41

2.2 NFS服务端部署过程

2.2.1 第一个里程碑-确认软件是否已经安装,安装NFS服务相关软件

  rpm -qa|grep nfs

  rpm -qa|grep rpc

安装rpcbind nfs-utils服务程序,并进行验证安装是否成功

  yum install -y nfs-utils rpcbind

  rpm -qa nfs-utils rpcbind

 

2.2.2 第二个里程碑-编写nfs配置文件

  nfs配置文件默认存在/etc/exports

  vim /etc/exports

  #share /data by oldboy for share at 20170220

  /data   172.16.1.0/24(rw,sync) 

/etc/exports文件说明:

第一部分:/data            --指定共享目录信息

第二部分:172.16.1.0/24  --指定了一个网段信息,表示允许指定的网段主机挂载到我本地的共享目录上

第三部分:(rw,sync)       --表示定义共享参数信息,

             rw     表示读写,对共享目录设置的权限

             sync   同步数据会先写入到NFS服务器内存中,会立刻同步到磁盘里面==直接存储硬盘中

2.2.3 第三个里程碑:创建共享目录,进行权限设定

  mkdir /data -p

  chown -R nfsnobody.nfsnobody /data

说明:

NFS共享目录管理用户为nfsnobody,此用户不用创建,安装nfs软件时会自动创建

2.2.4 第四个里程碑:启动服务(注意顺序

   首先,启动rpc服务

/etc/init.d/rpcbind start

   其次,启动nfs服务

/etc/init.d/nfs start

  rpcbind服务启动信息查看

  [root@nfs01 ~]# ps -ef|grep rpcbind

  rpc        4050      1  0 10:55 ?        00:00:00 rpcbind

  root       4054   3878  0 10:55 pts/1    00:00:00 grep --color=auto rpcbind

  [root@nfs01 ~]# netstat -lntup|grep 111

  tcp        0      0 0.0.0.0:111                 0.0.0.0:*                   LISTEN      4050/rpcbind       

  tcp        0      0 :::111                      :::*                        LISTEN      4050/rpcbind       

  udp        0      0 0.0.0.0:111                 0.0.0.0:*                               4050/rpcbind       

  udp        0      0 :::111                      :::*                                    4050/rpcbind       

  [root@nfs01 ~]# rpcinfo -p localhost

   program vers proto   port  service

    100000    4   tcp    111  portmapper

    100000    3   tcp    111  portmapper

    100000    2   tcp    111  portmapper

    100000    4   udp    111  portmapper

    100000    3   udp    111  portmapper

    100000    2   udp    111  portmapper

  nfs启动后查看信息

[root@nfs01 ~]# rpcinfo -p localhost

   program vers proto   port  service

    100000    4   tcp    111  portmapper

    100000    3   tcp    111  portmapper

    100000    2   tcp    111  portmapper

    100000    4   udp    111  portmapper

    100000    3   udp    111  portmapper

    100000    2   udp    111  portmapper

    100024    1   udp  28467  status

    100024    1   tcp  56269  status

    100011    1   udp    875  rquotad

    100011    2   udp    875  rquotad

    100011    1   tcp    875  rquotad

    100011    2   tcp    875  rquotad

    100005    1   udp  32886  mountd

    100005    1   tcp   6154  mountd

    100005    2   udp  38339  mountd

    100005    2   tcp  60288  mountd

    100005    3   udp  49824  mountd

    100005    3   tcp  24427  mountd

    100003    2   tcp   2049  nfs

    100003    3   tcp   2049  nfs

    100003    4   tcp   2049  nfs

    100227    2   tcp   2049  nfs_acl

    100227    3   tcp   2049  nfs_acl

    100003    2   udp   2049  nfs

    100003    3   udp   2049  nfs

    100003    4   udp   2049  nfs

    100227    2   udp   2049  nfs_acl

    100227    3   udp   2049  nfs_acl

    100021    1   udp  61803  nlockmgr

    100021    3   udp  61803  nlockmgr

    100021    4   udp  61803  nlockmgr

    100021    1   tcp   6064  nlockmgr

    100021    3   tcp   6064  nlockmgr

    100021    4   tcp   6064  nlockmgr

2.2.5 到此服务端部署配置完成

[root@nfs01 ~]# showmount -e 172.16.1.31

Export list for 172.16.1.31:

/data 172.16.1.0/24

2.3 NFS 客户端部署

2.3.1 第一个里程碑:确认软件有没有安装,进行nfs rpc 服务软件安装部署

yum install rpcbind nfs-utils -y

2.3.2 第二个里程碑:启动服务

提示:

rpcbindnfs软件都可以不启动

2.3.3 第三个里程碑: 检查NFS服务端是否有可以进行挂载的目录

[root@nfs01 ~]# rpm -qf `which showmount`

nfs-utils-1.2.3-75.el6.x86_64

说明:showmount使用,需要安装nfs-utils软件

2.3.4 第四个里程碑:进程nfs客户端挂载

mount -t nfs 172.16.1.31:/data /mnt

  

[root@backup ~]# showmount -e 172.16.1.31

Export list for 172.16.1.31:

/data 172.16.1.0/24

[root@backup ~]# mount -t nfs 172.16.1.31:/data /mnt

说明: 如果nfs软件不安装

        a 无法使用showmount 命令

        b 客户端无法识别nfs 文件系统类型

2.3.5 第五个里程碑: 进行检查测试

[root@backup ~]# df -h

Filesystem         Size  Used Avail Use% Mounted on

/dev/sda3           19G  1.5G   17G   9% /

tmpfs              238M     0  238M   0% /dev/shm

/dev/sda1          190M   40M  141M  22% /boot

172.16.1.31:/data   19G  1.5G   17G   9% /mnt

【测试】本地nfs客户端 进行增删改数据 等价于 nfs服务端共享目录操作

[root@backup mnt]# echo "test123">test.txt

[root@backup mnt]# ll test.txt

-rw-r--r-- 1 nfsnobody nfsnobody 8 Oct 13 11:28 test.txt

[root@nfs01 data]# cat test.txt

test123

第3章 知识深入

3.1 NFS服务相关进程信息

3.1.1 简略说明

rpcbind        rpc启动进程 主进程

rpc state      检查数据存储的一致性

rpc.rquotad    磁盘配额

rpc.mountd     权限管理验证

nfsd            NFS主进程

rpc.idmapd     用户压缩映射

3.1.1 进程/服务 详细说明

服务或进程名

用途说明

portmapper

rpcbind服务的进程(centos5.x 上为 portmap软件)

rquotad

磁盘配额进程

nfsnfs_acl

   nfs服务进程

nfsd (rpc.nfsd )

rpc.nfsd的主要功能是管理NFS客户端是否能够登入NFS服务器端主机,其中还包括含登入者的ID判別等。

mountd

rpc.mountd的主要功能则是管理NFS文件系统。当NFS客户端顺利通过rpc.nfsd登入NFS服务器端主机时,在使用NFS服务器提供数据之前,它会去读NFS的配置文件/etc/exports来比对NFS客户端的权限,通过这一关之后,还要经过NFS服务器端本地文件系统使用权限(就是ownergroupother权限)等认证程序。如果都通过了,NFS客户端就可以取得使用NFS服务器端文件的权限。

注意:这个/etc/exports文件也是我们用来管理NFS共享目录的使用权限与安全设置的地方,特别强调,NFS本身设置的是网络共享权限,整个共享目录的权限还和目录自身的系统权限有关。

rpc.lockd (非必要)

用来锁定文件,用于多客户端同时写入

rpc.statd (非必要)

检查文件的一致性,与rpc.lockd有关。cd两个服务雲要客户端,服务器端同时开启才可以;rpc.statd监听来自其他主机重启的通知,并且管理当本地系统重启时主机列表。

rpc.idmapd

表示用户映射或用户压缩(重要

3.2 /etc/exports配置文件说明

3.2.1 /etc/exports文件说明

NFS共享目录:

NFS服务器端要共享的实际目录,要用绝对路径,如 /data )。注意共享目录的本地权限,如果需要读写共享,一定要让本地目录可以被 NFS客户端的用户 nfsnobody)读写。

NFS客户端地址:

NFS服务器端授权的可访问共享目录的NFS客户端地址,可以为单独的IP地址或主机名、域名等,也可以为整个网段地址。还可以用来匹配所有客户端服务器,这里所谓的客户端一般来说是前端的业务的业务服务器,例如:web服务。

□权限参数集

对授权的NFS客户端的访问权限设置。

nfs权限(共享目录\借给你手机)nfs配置的/ etc/exports /data 172.16.1.0/24(rw)

本地文件系统权限(\手机密码不告诉你)挂载目录的权限rwxr- xr-x root root/data

3.2.2 指定 NFS客户端地址的配置详细说明 

客户端地址           

具体地址        

授权单一客户端访问NFS

10.0.0.30

一般情况,生产环境中此配置不多

授权整个网段可访问NFS

10.0.0.0/24

其中的24等同于255.255.255.0 ,指定网段为生产环境中最常见的配置。配置简单,维护方便

授权整个网段可访问NFS

10.0.0.*

指定网段的另外写法(不推荐使用)

授权某个域名客户端访问

nfs.oldboyedu.com

此方法生产环境中一般情况不常用

授权整个域名客户端访问

*.oldboyedu.com

此方法生产环境中一般情况不常用

3.2.3 常见案例

常用格式说明

要共享的目录客户端IP地址或IP(1,2,)

配罝例一

/data10.0.0.0/24(ro,sync)

说明:允许客户端读写,并且数据同步写入到服务器揣的磁盘里

注意:24"("之间不能有空格

配置例二

/data10.0.0.0/24(rw,sync/all_squash,anonuid=2000,anongid=2000)

说明:允许客户揣读写,并且数据同步写到服务器揣的磁盘里,并且指走客户端

的用户UIDGID,早期生产环境的一种配罝,适合多客户端共享一个NFS服务

单目录,如果所有服务器的nfsnobody账户UID都是65534,则本例没什么必

要了.早期centos5.5的系统默认情况下nfsnobodyUID不一定是65534,

此时如果这些服务器共享一个NFS目录,就会出现访问权限问题.

配置例三

/home/oldboy10.0.0.0/24(ro)

说明:只读共享

用途:例如在生产环境中,开发人员有查看生产眼务器日志的需求,但又不希罜

给开发生产服务器的权限,那么就可以给开发提供从某个测试服务器NFS客户端

上查看某个生产服务器的日志目录(NFS共享)的权限,当然这不是唯一的方法,

例如可以把程序记录的日志发送到测试服务器供开发查看或者通过收集日志等其

它方式展现

3.2.4 nfs客户端访问服务原理

 

3.2.5 nfs服务访问原理

 

客户端(无论用什么用户访问)------服务端(nfsnobody rpc.idmapd

3.3 NFS服务端设置rpcbind nfs服务开机自启动

[root@nfs01 ~]#  chkconfig rpcbind on

[root@nfs01 ~]#  chkconfig nfs  on

[root@nfs01 ~]#  chkconfig |egrep "rpcbinf|nfs"

nfs             0:off  1:off  2:on   3:on   4:on   5:on   6:off

nfslock         0:off  1:off  2:off  3:on   4:on   5:on   6:off

3.4 NFS配置文件编写说明

3.4.1 官方举例配置

EXAMPLE

       # sample /etc/exports file

       /               master(rw) trusty(rw,no_root_squash)

       /projects       proj*.local.domain(rw)

       /usr            *.local.domain(ro) @trusted(rw)

       /home/joe       pc001(rw,all_squash,anonuid=150,anongid=100)

       /pub            *(ro,insecure,all_squash)

       /srv/www        -sync,rw server @trusted @external(ro)

       /foo            2001:db8:9:e54::/64(rw) 192.0.2.0/24(rw)

       /build          buildhost[0-9].local.domain(rw)

3.4.2 /etc/exports文件配置格式为:

    NFS共享目录 NFS客户端地址1(参数1,参数2... 客户端地址2(参数1,参数2...

   

    NFS共享目录 NFS客户端地址1(参数1,参数2...

    NFS共享目录 NFS客户端地址2(参数1,参数2...

注意:nfs服务默认没有认证机制,安全性不如分布式文件系统

      只能通过控制配置文件中网络地址信息,实现安全性

3.5 nfs配置参数说明

 

参数

说明

rw

可读写的权限

ro 

只读的权限

no_root_squash

登入NFS主机,使用该共享目录时相当于该目录的拥有者,如果是root的话,那么对于这个共享的目录来说,他就具有root的权限,这个参数『极不安全』,不建议使用

root_squash

登入NFS主机,使用该共享目录时相当于该目录的拥有者。但是如果是以root身份使用这个共享目录的时候,那么这个使用者(root)的权限将被压缩成为匿名使用者,即通常他的UIDGID都会变成nobody那个身份

all_squash

不论登入NFS的使用者身份为何,他的身份都会被压缩成为匿名使用者,通常也就是nobody

anonuid

可以自行设定这个UID的值,这个UID必需要存在于你的/etc/passwd当中

anongid

anonuid,但是变成groupID就是了

sync

资料同步写入到内存与硬盘当中

async

资料会先暂存于内存当中,而非直接写入硬盘

insecure

允许从这台机器过来的非授权访问

3.6 nfs配置参数实践

3.6.1 all_squash 参数实践

服务端修改配置

[root@nfs01 ~]# vim /etc/exports

#share 20171013 hzs

/data 172.16.1.0/24(rw,sync,all_squash)

[root@nfs01 ~]# /etc/init.d/nfs reload

         配置修改需要平滑重启nfs 服务

         reload    平滑重启

         用户的访问体验更好

nfs客户端进行测试

[root@backup mnt]# touch test.txt

[root@backup mnt]# ll

-rw-r--r-- 1 nfsnobody nfsnobody    8 Oct 13 11:28 test.txt

[root@backup ~]# su - oldboy

[oldboy@backup ~]$ cd /mnt/

[oldboy@backup mnt]$ touch oldboy1.txt

[oldboy@backup mnt]$ ll

-rw-rw-r-- 1 nfsnobody nfsnobody    0 Oct 13 12:34 oldboy1.txt

-rw-r--r-- 1 nfsnobody nfsnobody    8 Oct 13 11:28 test.txt

说明:

不论登入NFS的使用者身份为何,他的身份都会被压缩成为匿名使用者,通常也就是nobody

3.6.2 no_all_squash,root_squash 参数实践

服务端修改配置

[root@nfs01 ~]# vim /etc/exports

#share 20171013 hzs

/data 172.16.1.0/24(rw,sync,no_all_squash,root_squash)

[root@nfs01 ~]# /etc/init.d/nfs reload

 

客户端卸载重新挂载服务器配置修改后客户端要重新挂载

[root@backup ~]# umount /mnt/

[root@backup ~]# mount -t nfs 172.16.1.31:/data /mnt

nfs客户端测试结果:

[root@backup mnt]# touch test1.txt

[root@backup mnt]# ll

-rw-r--r-- 1 nfsnobody nfsnobody    0 Oct 13 12:37 test1.txt

[root@backup mnt]# su - oldboy

[oldboy@backup ~]$ cd /mnt/

[oldboy@backup mnt]$ touch oldboy1.txt

touch: cannot touch `oldboy1.txt': Permission denied

[oldboy@backup mnt]$ touch oldboy2.txt

touch: cannot touch `oldboy2.txt': Permission denied

服务端验证:

[root@nfs01 ~]# ll /data/

-rw-rw-r-- 1 nfsnobody nfsnobody    0 Oct 13 12:34 oldboy1.txt

-rw-r--r-- 1 nfsnobody nfsnobody    0 Oct 13 12:37 test1.txt

-rw-r--r-- 1 nfsnobody nfsnobody    8 Oct 13 11:28 test.txt

说明:

no_all_squash,是所有用户都不进行压缩,所以oldboy用户对nfs的目录没有写入的权限(与nfs服务器的共享目录权限有关)。root用户进行压缩所以可以写入。

3.6.3 no_root_squash 参数实践(root用户不进行压缩映射)

服务端修改配置

[root@nfs01 ~]# vim /etc/exports

#share 20171013 hzs

/data 172.16.1.0/24(rw,sync,no_root_squash)

[root@nfs01 ~]# /etc/init.d/nfs reload

客户端卸载重新挂载服务器配置修改后客户端要重新挂载

[root@backup ~]# umount /mnt/

[root@backup ~]# mount -t nfs 172.16.1.31:/data /mnt

nfs客户端测试结果:

[root@backup mnt]# touch root.txt

[root@backup mnt]# ll

total 16

-rw-rw-r-- 1 nfsnobody nfsnobody    0 Oct 13 12:34 oldboy1.txt

-rw-r--r-- 1 root      root         0 Oct 13 12:45 root.txt

-rw-r--r-- 1 nfsnobody nfsnobody    0 Oct 13 12:37 test1.txt

-rw-r--r-- 1 nfsnobody nfsnobody    8 Oct 13 11:28 test.txt

删除测试

[root@backup mnt]# rm -rf ./*

[root@backup mnt]# ll

total 0

说明:

由于对root用户没有进行压缩,所以到达nfs服务器后依旧是root身份,root用户默认对所有的文件都有权限,所以可以写入。(很危险)

 

文章评论

看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
编程语言是女人
编程语言是女人
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
我是如何打败拖延症的
我是如何打败拖延症的
鲜为人知的编程真相
鲜为人知的编程真相
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
每天工作4小时的程序员
每天工作4小时的程序员
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
总结2014中国互联网十大段子
总结2014中国互联网十大段子
如何成为一名黑客
如何成为一名黑客
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
那些争议最大的编程观点
那些争议最大的编程观点
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
程序员的鄙视链
程序员的鄙视链
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
我的丈夫是个程序员
我的丈夫是个程序员
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
Google伦敦新总部 犹如星级庄园
Google伦敦新总部 犹如星级庄园
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
10个调试和排错的小建议
10个调试和排错的小建议
一个程序员的时间管理
一个程序员的时间管理
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
Java程序员必看电影
Java程序员必看电影
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
程序员必看的十大电影
程序员必看的十大电影
中美印日四国程序员比较
中美印日四国程序员比较
代码女神横空出世
代码女神横空出世
 程序员的样子
程序员的样子
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
程序员都该阅读的书
程序员都该阅读的书
漫画:程序员的工作
漫画:程序员的工作
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
旅行,写作,编程
旅行,写作,编程
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
程序员和编码员之间的区别
程序员和编码员之间的区别
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
那些性感的让人尖叫的程序员
那些性感的让人尖叫的程序员
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有