Posts Tagged ‘ Reprint

[转载]学程式设计的人不能不看的好文章

转载自: http://www.vcroad.net/ (枣子原创 [email protected])


做为一名大四的学生,我去面试过不少的公司,有成功的也有失败的,但是对我来说所有的失败在某种意义上都是一种成功,特别是我下面写的这些,写这篇文章的时候,我已经签了南京的一家软件公司,但是想起今年 2 月 21 日我面试苏州台湾的 IT 公司的经历联想到我们现在学习程式设计的一些情况我真的深有感触,这次面试使我深深的体会到了失败但也收获了很多。

我要说的将分成三部分:

  1. 我去面试的具体经过
  2. 由面试想到的
  3. 现今我应该做的

当然这些话很大程度上是我个人的意见,不可能完全得到大家的赞同,所以在某些观点上如果哪位朋友觉得跟我的有很大出入,请不要介意,也不要对我攻击,就当我没有说过,欢迎和我联系共同探讨这些问题!
Read more

[转载]软件工程师缩短工时

转载自: CNet


微软软件设计工程师Adam Barr最近常和家人共用晚餐。但以前可不是如此。90年代末期,Barr忙于工作,往往无法准时下班,和妻子小孩共用晚餐,那时每周平均工作50至60小时,若碰到截止日期逼近,加班更是家常便饭,有时甚至一连数周每周工作70小时。

现在Barr固定早上8:30上班,5点下班。他说:“对这种朝九晚五的上班模式,微软已能睁只眼闭只眼,不跟员工计较。以前绝非如此。”

Barr能更常和家人一起享用晚餐,凸显软件界工作形态出现变化:越来越多员工不再超时卖命工作。根据美国劳工部的统计,软件出版界员工(多半是电脑专家)去年平均每周工作36.4小时,低于2001年的41.4小时。

原因之一可能是靠达康(dot.com)致富的诱因大幅褪色,再者是工程师愿意更用心经营工作之外的生活。当然软件公司渐渐学会如何提升专案管理的效率也 是其一。其实一些软件业者坦言,员工日以继夜超时工作反而有损产能。Atlantic System Guild的顾问Tom DeMarco说:“经常加班的公司,往往浪费许多正规上班时间。正常上下班之所以优于加班,在于工作产能高。”

Read more

[转载][MySQL]数据库表单及字段命名规则实例

转载自: Neo’s Blog


今天大概把几种常见的数据库命名方式给整理了一下。

1.数据库表单(Table)名称:

单复数皆有人使用,如 products、product。

美国人命名比较喜欢依照口语习惯来用复数命名,知名的 OpenSource 软件像 phpBB、OSCommerce、In-Link、pLog 皆是以复数命名。而 Moveable Type 则是少数使用单数名命的软件,台湾人也是单数命名居多。

2.数据库字段名称:

使用 MySQL 的 Opensource 软件比常见整批性的加前缀(Prefix) 在字段里面,如 products 表单中的“产品名称”,可能就会命名为“products_name”而 Microsoft SQL Server 则是以纯字段名称居多,如产品名称就直接取叫“name”了。

前缀的命名有“语意导向”跟“实用导向”二种,所谓语意导向以口语的习惯来命名,像 products 是产品的集合(复数),里面的每个产品是单数,所以用产品名称为例就是“product_name”。

而实用导向常见的就是以表单名称做为前缀,如前例在 products 里的产品名称字段就会命名为“products_name”,如此做的好处是程式会非常清楚每个字段是从哪个表单抓出来的。但是缺点是在程式里面语意不清,看起来会很不习惯。

然而大部份的字段前缀字符还是以语意导向为主,若要使用实用导向,最好表单名称采用单数(如 Moveable Type),否则像 OSCommerce 的全员复数,感觉程式在用名字就很奇怪,如程式明明就是只抓一笔产品名称出来,看到 products_name 就觉的既不是复数,而且文法上也不通,意义上反而比较像 product’s name。

3.大小写:

Microsoft 的命名方式喜欢单字第一个字母大写,如 OrderDetail。而 MySQL 比较常见全部小写,单字中间加底线的命名方式,如 order_detal。这跟数据库的字符大小写敏感度默认值有关,MS SQL Server 默认是大小写不分,MySQL 则是大小写视为不同字段,所以统一小写比较不容易出错。

[转载][PHP]PHP 对于文件锁定的处理方式

转载自: 中文 PHP 资讯站


一般个人免费主页空间都不会提供mysql支援,就是提供也很苛刻,所以寻找也个良好的替代方案很重要哦!

PHP的文件处理功能很强大,所以可以用文件的存取来代替来!(要知道没有数据库的时候,什么都是用文件组织的哦!呵呵!),其中个资料项目用特殊符号分割,我采用的是"||",方便通过explode()函数读取单个记录

其实这里数据库的思想还是可以用到的!象数据库的索引!所以必须先做个索引文件!(这样说也并不正确)

Read more

[转载][PHP]使用 PHP v4.2.0 及以后版本的注意事项

转载自: 中文 PHP 资讯站


从PHP 4.2.0版本开始中, PHP 指令 register_globals 的默认值为 off(在php.ini配置文件里). 这是 PHP 的一个主要变化。register_globals是干什么用的呢?它是PHP用来控制是否将EGPCS (Environment, GET, POST, Cookie, Server)变量是否注册为总体变量的。
例如,对于 http://www.xx.php?var=2 这里的var,在为 on 时,你只需用 $var 即可,但在 off 时,就必须用 $_GET["var"] 来接收了~ 这里的 $_GET 就是一个PHP超总体变量阵列。和它性质一样的还有:

  • $GLOBALS

 

包含一个引用指向每个当前脚本的全局范围内有效的变量。该阵列的键标为总体变量的 名称。从 PHP 3 开始存在 $GLOBALS 阵列。

 

  • $_SERVER

 

变量由 Web 服务器设定或者直接与当前脚本的执行环境相关联。等同于旧阵列 $HTTP_SERVER_VARS 阵列,但和 $_SERVER 不是一个变量,因为PHP处理它们的方式不同,下同。虽然$HTTP_SERVER_VARST和下面的$HTTP_*_VARS仍然可以使用,但绝不推 荐您再使用$HTTP_*_VARS.

 

  • $_GET

 

经由 HTTP GET 方法提交至脚本的变量。例如由 URL、表单的GET方式 产生的变量。使用方式:$_GET["xx"];

 

  • $_POST

 

经由 HTTP POST 方法提交至脚本的变量。例如由 表单的POST方式 产生的变量。使用方式:$_POST["xx"];

Read more

[转载][PHP][MySQL]PHP 和 MySQL 开发的 8 个技巧

转载自: 中文 PHP 资讯站


LAMP 架构的网站,我以前注重的多是安装/配置方面的,讲述开发的相对较少,因为自己从事开发也少。本文的原文当然也来自:

看了以后,颇有启发,以前开发中遇到的一些问题,迎刃而解。所以翻译出来和大家共用。

Read more

[转载][PHP]PHP 使用无限生命期 Session 的方法

转载自: 中文 PHP 资讯站


在PHP4.0中加入了对Session的支援,方便了我们很多程式,比如购物车等等。

在很多论坛中,Session也用于处理用户的登陆,记录下用户名和密码,使得用户不必每次都输入自己的用户名和密码!但是一般的Session的生命期有限,如果用户关闭了浏览器,就不能保存Session的变量了!那么怎么样可以实现Session的永久生命期呢?

大家知道,Session储存在服务器端,根据用户端提供的SessionID来得到这个用户的文件,然后读取文件,取得变量的值,SessionID可 以使用用户端的Cookie或者Http1.1协定的Query_String(就是访问的URL的"?"后面的部分)来传送给服务器,然后服务器读取 Session的目录……

Read more

[转载]apache 部份参数说明

转载自: 小红帽技术论坛


Part I

AllowOverride 的属性功能

AllowOverride Limit 允许覆写原连结属性的范围
AllowOverride Authconfig 可做密码设定: 如: 藏密
AllowOverride Options 可将该目录之 Options 功能覆写
AllowOverride FileInfo 可将该目录之任何文件型态覆写, 如: DefaultType, ErrorType
AllowOverride Indexs 可将该目录之显示打印功能覆写, 如: AddIcon, HeaderName, ReadName

Options 的属性功能

Indexs 当无 index.html 可用打印目录方式显示, 如: center3 homepage 若用 -Indexs 则看不见 listing
FollowSymLinks 加一属性如 +FollowSymLinks 可允许使用 symbol link 时, 依旧可浏览
ExecCGI 当为 +ExecCGI 可执行 CGI SCRIPT
Includes 可执行 Server site include, 若为 +Includes
IncludesNOEXEC 可执行 Server site include, 若为 +Includes, 但不可执行 CGI
None 没有任何功能可用
All 均可
总之, 以 +, - 符号可加或删减其功能, 若未给符号, 则只有初步功能

Read more

[转载][PHP]正规表示式基本语法

转载自: 中文 PHP 资讯站


首先让我们看两个特殊的符号: ^ 和 $。他们的作用是分别指出一个字串的开始和结束。例子如下:

  • ^The:表示所有以“The”开始的字串(“There”、“The cat”等);
  • of despair$:表示所有以“of despair”结尾的字串;
  • ^abc$:表示开始和结尾都是“abc”的字串--呵呵,只有“abc”自己了;
  • notice:表示任何包含“notice”的字串。

像最后那个例子,如果你不使用两个特殊字符,你就在表示要查找的串在被查找串的任意部分--你并不把它定位在某一个顶端。

Read more

[转载]Linux 上的用户管理

转载自: 中文 PHP 资讯站


在linux中,每个普通用户都有一个帐户,包括用户名、密码和主目录等资讯。除此之外,还有一些系统本身创建的特殊用户,它们具有特殊的意义。其中最重要的是超级用户,在linux中,它默认用户名是root。

基本操作

增加一个用户 newuser :

useradd newuser
passwd newuser

然后根据提示两次输入新用户的密码,请注意,用useradd增加一个用户后应该立刻用passwd给新用户修改密码,没有密码的新帐号将不能使用。在/etc/passwd文件中,没有密码的新用户的记录是如下一行:

newuser:!!:506:506::/home/newuser:/bin/bash

在这一行里,用户的密码域被设置成了”!!”,这就意味着用户密码还没有设置,用户不能登陆。(passwd文件的格式是 用户名:密码:用户ID(UID):组ID(GID):全名:用户目录:外壳脚本)。

当然你可以用-d参数设置新用户的主目录(例如:useradd newuser -d /www),也可以用-g参数为用户指定新组名(例如:useradd newuser -g linuxusers),你还可以用-G参数把新用户设成系统其他一些组的成员(例如:useradd newuser -G users,shutdown)。所有这些,你都可以在本站的命令查询中得到详细资讯。

附注:相应的,仅仅增加一个新组可以用命令groupadd。

修改现有用户的帐号:

  • 修改密码
  • 普通用户可以用passwd修改自己的密码,只有管理员才能用passwd username为其他用户修改密码。
  • 修改用户shell设置
  • 使用chsh命令可以修改自己的shell,只有管理员才能用chsh username为其他用户修改shell设置。注意,指定的shell必须是列入/etc/shells文件中的shell,否则该用户将不能登陆。
    你也可以使用usermod命令修改shell资讯,如下所示:
    usermod -s(new shell path)(username)
    其中new shell path和username应取相应的值。
  • 修改主目录设置
  • usermod -d(new home directory)(username)
    如果想将现有主目录的主要内容转移到新的目录,应该使用-m参数,如下所示:
    usermod -d -m/www/newuser newuser
  • 修改UID
  • usermod -u UID username
    主目录中所有该用户所拥有的文件和目录都将自动修改UID设置。但是,对于主目录外该用户所拥有的文件,只能手工用chown命令修改所有权设置。
  • 修改默认组设置
  • username -g(group name) or GID username
  • 修改帐号的有效期
  • 如果使用了影子密码,则可以使用如下命令来修改一个帐号的有效期:
    usermod -e MM/DD/YY username
    例如把用户newuser的有效期定为12/31/01:
    usermod -e 12/31/01 newuser
  • 删除或禁止用户帐号
  • 使用userdel命令删除现有用户。例如,下面的命令将删除bluewind用户:
    usedel bluewind
    如果想同时删除该用户的主目录以及其中所有内容,要使用-r参数来递回删除。值得注意的是你无法删除已经进入系统的用户,如果想强行完成,需要先killall有关它的进程,然后再运行userdel命令。
  • 如果只是想暂时禁止某个帐号,可以使用下列方法:
  • - 使用无效的shell。例如使用usermod -s newshell username将用户的 shell改为/bin/false(最好把它列入/etc/shells文件里)。
    - 使该帐号过期。如果使用影子密码,可使用usermod -e MM/DD/YY username命令使该帐号过期。
    如果想禁止所有帐号(root帐号当然除外)的访问,可以创建一个名为/etc/nologin的文件,说明系统暂时不允许访问。注意,确认你还能用root直接登陆才使用这个办法,否则你惨了。

    本文中的所有命令都可以在linuxaid获得中文详细的帮助,下面我们一起来继续探讨有关用户管理的高级内容。

    建立多个超级用户

    不少新系统管理员认为root用户是唯一的超级用户,其实root只是系统默认的超级用户的名称,root并非因为它叫root而成为超级用户的。随便打开一个/etc/passwd文件的例子,你就会发现如下几行:

    root:asiewhgYfaoO/J:0:0:root:/root:/bin/tcsh
    bin:*:1:1:bin:/bin:
    daemon:*:2:2:daemon:/sbin:
    lanf:Yuao56Ioyefg:0:0:bluewind:/home/bluewind:/bin/bash
    jake:gUyfaiIodashfj:501:501:jake cheng:/home/jake:/bin/tcsh
    apache:!!:502:502::/usr/local/apache:/bin/false

    可以看到,root的UID和GID都被设置为0了。实际上,超级用户的充要条件就是UID和GID都等于0。也就是说,任何用户,只要它的UID和GID都为0,就与常被称为root超级用户没有什么两样了。比如上面那个例子里面的lanf,也是一个超级用户。

    所以,可以将任何普通用户变成超级用户。但是,这样做并没有好处,很多时候这都会增加系统的隐患。除非在组织中需要多个系统管理员管理同一个系统,这就需要有多个超级用户帐号。这有利于各个管理员明确责任,通过日志知道不同的人分别做过什么事。

    还有一种情况,也可能出现多个超级用户帐号,那就是黑客入侵后设置一个看起来象普通帐号的用户,却修改了UID和GID使之为0。这样根本就不需要知道root用户密码,就可以执行超级用户权限了。而从我们的系统管理员的一方来说,我们不可能时刻注意passwd文件的变化的,没有那个时间也没有那个精力。这时只好编写一个脚本来帮助监视,例如:

    /bin/grep '0:0' /etc/passwd |awk 'BEGIN{FS=":"}{print $1}'|mail -s "`date +"%D%T"`"root

    这是一个很小的脚本程式,使用了一些常规的命令来查看/etc/passwd文件,把UID和GID为0的行寄给root用户。把这个脚本放在/etc/cron.daily文件中让cron运行,root将每天收到一封信,报告当前的超级用户。

    实际上,由于PAM(可插入验证模组)的限制,在telnet上是不允许超级用户登入的,也就是说,黑客修改了自己的UID和GID后,想再次登陆从而获得超级用户的权限的话,不修改/etc/seuretty文件是不可能的–除非你傻到自己添加了为TTY设备ROOT用户登陆权限。一般可以让超级用户先用普通用户帐号登陆,再su(su命令相关内容请参考本站命令查询部分)。

    为普通用户分配特权

    使用sudo命令可以允许普通用户执行超级用户才能执行的命令。无论是基于信任的建立需要时间,还是基于是否存在这种必要,我们都不会把超级用户的所有权限轻易许人的。这是网管工作的原则。所以,当一些用户必须访问某些内容时,我们可以配置sudo以允许单独的普通用户运行特权命令。

    sudo命令允许已经在/etc/sudoers文件中指定的用户运行超级用户命令。例如,一个已经获得许可的普通用户可以运行:

    sudo vi /etc/passwd

    实际上,sudo的配置完全可以让我们指定某个列入/etc/sudoers文件的普通用户可以做什么、不可以做什么。/etc/sudoers的配置行如下:

  • 空行或注释行(以#字符打头):无用行。
  • 可选的主机别名行:用来创建主机列表的简称。必须以Host_Alias关键字开头,列表中的主机必须用逗号隔开。例如:
  • Host_Alias REDHAT=binbu,qd

    其中binbu和qd是俩主机名,你可以用REDHAT(别名)统称它们。

  • 可选的用户别名行:用来创建用户列表的简称。用户别名行必须以User_Alias关键字开头,列表中的用户名必须以逗号隔开。其格式同主机别名行。
  • 可选的命令别名行:用来创建命令列表的简称。必须以Cmnd_alias开头,列表中的命令必须用逗号隔开。
  • 可选的运行方式别名行:也是用来创建用户列表的简称。不同的是,使用这样的别名可以告诉sudo程式以列表中某一用户的身份来运行程式。
  • 必要的用户访问说明行:用户访问的说明语法如下:
  • user host= [run as user ] command list

    在user处指定一个真正的用户名或定义过的别名,同样的,host也可以是一个真正的主机名或者定义过的主机别名。默认情况下,sudo执行的所有命令都是以root身份执行。如果你想使用其他身份可以指定。至于command list可以是以逗号分隔的命令列表,也可以是一个已经定义过的别名。例如:

    lanf binbu=/sbin/shutdown

    这一句说明lanf可以在binbu主机上运行关机命令。

    注意:

  • 可以在一行定义多个别名,中间用:隔开。
  • 可以在命令或命令别名之前加上!号,使该命令或命令别名无效。
  • 有两个关键字:ALL 和NOPASSWD。ALL意味着”所有文件”(所有主机或所有命令),NOPASSWD意味着不用密码。
  • 下面是一个sudoers文件的例子:

    #sudoers files#User alias specificationUser_Alias ADMIN=yourid:POWERUSER=hisid,herid#user privilege specification ADMIN ALL=ALLPOWERUSER ALL=ALL,!/bin/su

    第三行定义了两个别名ADMIN和POWERUSER,第五行说明在所有主机上ADMIN都可以以root身份执行所有命令。第六行给POWERUSER除了运行su命令外同等ADMIN的权限。

    return top