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