財(cái)務(wù)應(yīng)該及早進(jìn)入產(chǎn)品開發(fā)流程,貫穿到企業(yè)愿景,使命,產(chǎn)品規(guī)劃,產(chǎn)品開發(fā)及產(chǎn)品生命周期管理全過程
IPD成本控制主要針對兩個(gè)目標(biāo):
1、 降低開發(fā)成本
2、 降低產(chǎn)品本身的結(jié)構(gòu)成本
研發(fā)人員常犯的成本錯(cuò)誤:
1、 只關(guān)注物料成本,不關(guān)注設(shè)計(jì)成本和維護(hù)成本,出現(xiàn)物料成本雖然降低,但是帶來的設(shè)計(jì)難度、設(shè)計(jì)成本增加
2、 不采購?fù)鈦沓墒旖M件,自行開發(fā),導(dǎo)致產(chǎn)品不穩(wěn)定帶來的維護(hù)成本增加
3、 對公司內(nèi)部成本高的優(yōu)選器件不采用,忽略量產(chǎn)后帶來的采購成本下降
控制綜合成本的手段:
1、 通過需求與規(guī)劃,區(qū)分基本需求、競爭需求、可有可無的需求,避免過度開發(fā)
2、 通過產(chǎn)品化共享,減少低水平重復(fù)開發(fā)
3、 通過技術(shù)分類,識(shí)別核心技術(shù)、關(guān)鍵技術(shù)、通用技術(shù)和一般技術(shù),核心技術(shù)和關(guān)鍵技術(shù)自主開發(fā),通用技術(shù)和一般技術(shù)外包,以降低開發(fā)成本
4、 在設(shè)計(jì)中控制成本:確定目標(biāo)成本,設(shè)計(jì)中采用多方案選擇,減少新模塊,控制質(zhì)量成本,加強(qiáng)可靠性設(shè)計(jì),由高手負(fù)責(zé)設(shè)計(jì)
5、 在開發(fā)與制造中進(jìn)行成本過程控制:保證資源
產(chǎn)品經(jīng)理必須掌握的財(cái)務(wù)成本知識(shí):
1、 了解財(cái)務(wù)基本專業(yè)知識(shí),定期看部門財(cái)務(wù)報(bào)表,分析部門的內(nèi)部核算表
2、 理解核算原則,學(xué)會(huì)用比例定崗
3、 了解公司和部門的固定成本變動(dòng),學(xué)會(huì)控制成本
4、 知識(shí)計(jì)算部門內(nèi)部的盈虧平衡點(diǎn)
5、 知道怎么做預(yù)算,并親自做預(yù)算和審核下級(jí)預(yù)算及費(fèi)用
6、 關(guān)注項(xiàng)目回款,明白影響現(xiàn)金流的原因
7、 熟悉公司財(cái)務(wù)制度,并提出改進(jìn)措施,使其簡潔有效
posted @
2012-12-14 10:57 胡滿超 閱讀(435) |
評論 (0) |
編輯 收藏
新產(chǎn)品開發(fā)的前三單客戶也是產(chǎn)品開發(fā)的一部分,必須由公司高級(jí)別的人員完成,而不是一味地交給客戶經(jīng)理去銷售
產(chǎn)品命名及商標(biāo)管理:
1、 產(chǎn)品命令應(yīng)將技術(shù)語言轉(zhuǎn)換為了市場語言
2、 命名突出賣點(diǎn)
3、 命名保持統(tǒng)一品牌形象
4、 命名不要使用方言,俚語
產(chǎn)品宴會(huì)的FFAB策略:
Feature:技術(shù)賣點(diǎn)
Function:功能賣點(diǎn)
Advantage:產(chǎn)品的優(yōu)點(diǎn)
Benefits:對客戶的好處
1、 如果客戶熟悉技術(shù),突出介紹Function、Feature;不熟悉技術(shù),突出介紹Advantage、Benefits
2、 客戶經(jīng)理(銷售)應(yīng)該掌握,Benefits、Advantage、Function
3、 市場經(jīng)理應(yīng)該掌握,Benefits、Advantage、Function、Feature
4、 技術(shù)經(jīng)理應(yīng)熟悉技術(shù)實(shí)現(xiàn)路徑
5、 嚴(yán)格區(qū)別Advantage、Benefits
產(chǎn)品定價(jià):
1、 要利潤,定高價(jià)
2、 要規(guī)模,定低價(jià)
3、 阻攔對手,定更低價(jià)
4、 把價(jià)格隱藏在服務(wù)中
產(chǎn)品定價(jià)步驟:
1、 明確競爭對手產(chǎn)品
2、 分析競爭對手產(chǎn)品定價(jià)
3、 進(jìn)行比較定價(jià)分析$APPEALS
4、 對產(chǎn)品進(jìn)行成本分析,根據(jù)配置不同進(jìn)行成本分析
5、 根據(jù)戰(zhàn)略價(jià)值及KPI定價(jià)
6、 細(xì)化并驗(yàn)證定價(jià)策略
按價(jià)格承受力把客戶分類:
1、 戰(zhàn)略客戶:樣板用戶,帶動(dòng)其他客戶消費(fèi)
2、 利潤客戶:接受的價(jià)格給公司帶來的利潤大于機(jī)會(huì)利潤
3、 非利潤客戶:接受的價(jià)格給公司帶來的利潤小于機(jī)會(huì)利潤
4、 大客戶:訂單較多
5、 價(jià)值客戶:戰(zhàn)略+利潤+大客戶
定價(jià)避免以下情況:
1、 避免大客戶是非利潤客戶
2、 避免非利潤的戰(zhàn)略客戶太多
3、 避免將戰(zhàn)略客戶等同于價(jià)值客戶
客戶滿意度聚焦利潤客戶,價(jià)值客戶的滿意度必須達(dá)到100%,非戰(zhàn)略非利潤客戶的滿意度不要超過50%
新產(chǎn)品推廣:
一個(gè)資料庫六個(gè)子庫:案例庫,問題庫,產(chǎn)品資料庫,市場資料庫,需求庫,競爭對手資料庫
銷售工具包:內(nèi)部銷售工具包,給客戶資料包
五種手段:公司展廳,展覽會(huì),樣板點(diǎn),研討交流會(huì),廣告/網(wǎng)站/軟性文章
公司高層,產(chǎn)品經(jīng)理,市場經(jīng)理,客戶經(jīng)理都要進(jìn)行客戶關(guān)系的維護(hù)和開拓
產(chǎn)品經(jīng)理和系統(tǒng)級(jí)工程師更要對技術(shù)型的客戶進(jìn)行維護(hù)和開拓
產(chǎn)品銷售工具:產(chǎn)品一紙禪、售前膠片、案例分析、銷售指導(dǎo)書
通過規(guī)范的資料培訓(xùn)銷售人員,營造產(chǎn)品大量進(jìn)入市場的條件
posted @
2012-12-11 09:10 胡滿超 閱讀(399) |
評論 (0) |
編輯 收藏
常見的質(zhì)量管理問題原因:
1、 QA沒有在設(shè)計(jì)時(shí)介入
2、 QA工作不獨(dú)立,影響測試結(jié)果
3、 做評審沒有評審要素,評審人沒有績效考核,走過場
4、 新手做設(shè)計(jì),高手救火
5、 未建立公共模塊共享開發(fā)的研發(fā)模式
6、 引入不成熟的技術(shù)
7、 在設(shè)計(jì)時(shí),未進(jìn)行多方案預(yù)備
構(gòu)建質(zhì)量體系六個(gè)要素:
1、 一套流程:將質(zhì)量管理體系融入研發(fā)流程
2、 兩個(gè)原則:業(yè)務(wù)決策評審與技術(shù)質(zhì)量評審分離、建立產(chǎn)品貨架
3、 三個(gè)職位:系統(tǒng)級(jí)工程師,主審人,PQA
4、 四個(gè)分離:規(guī)劃與系統(tǒng)設(shè)計(jì)分離,設(shè)計(jì)與實(shí)現(xiàn)分離,實(shí)現(xiàn)與測試分離,測試與驗(yàn)證分離
5、 五種手段:規(guī)劃與CBB共享、評審、測試和驗(yàn)證、任職資格與活動(dòng)匹配、缺陷歸零管理
6、 六個(gè)評審點(diǎn)
技術(shù)評審:關(guān)注技術(shù)評估
決策評審:關(guān)注財(cái)務(wù)、資源投入、計(jì)劃
posted @
2012-12-06 16:19 胡滿超 閱讀(343) |
評論 (0) |
編輯 收藏
技術(shù)分類:核心技術(shù),關(guān)鍵技術(shù),一般技術(shù),通用技術(shù)
核心技術(shù):需要進(jìn)行發(fā)展規(guī)劃,進(jìn)行立體開發(fā),知識(shí)產(chǎn)權(quán)保護(hù)
技術(shù)外包進(jìn)行嚴(yán)格評審,避免核心技術(shù),關(guān)鍵技術(shù)外包
核心技術(shù),關(guān)鍵技術(shù):縱向發(fā)展人員
一般技術(shù),通用技術(shù):橫向發(fā)展人員,可以外包
核心技術(shù)特點(diǎn):獨(dú)有性,競爭性,可攔截性,不可替代性,可管理可保護(hù),產(chǎn)生價(jià)值
技術(shù)并不是越多越好,而是核心技術(shù)和關(guān)鍵技術(shù)越多越好
技術(shù)開發(fā)五個(gè)階段:立項(xiàng),開發(fā),驗(yàn)證,發(fā)布,成果貨架化管理
對技術(shù)管理考核:結(jié)果要寬松,過程要嚴(yán)格
共用基礎(chǔ)模塊CBB:在不同產(chǎn)品、系統(tǒng)之間共用的零部件,模塊,技術(shù),設(shè)計(jì)成果
貨架:將不同層次的產(chǎn)品統(tǒng)一管理
貨架產(chǎn)品:成熟度達(dá)到一定程度的CBB
平臺(tái):一系列貨架產(chǎn)品在層級(jí)上的集合
平臺(tái)形成的兩條路:
1、 根據(jù)需求形成平臺(tái)規(guī)劃:平臺(tái)很難規(guī)劃
2、 總結(jié)與沉淀:做3個(gè)定制項(xiàng)目進(jìn)行一次CBB分析
技術(shù)預(yù)研和平臺(tái)開發(fā)人員級(jí)別要高,需要高手開發(fā)
預(yù)研團(tuán)隊(duì)和技術(shù)開發(fā),產(chǎn)品開發(fā)團(tuán)隊(duì)?wèi)?yīng)該合理流動(dòng),以實(shí)現(xiàn)技術(shù)成果的產(chǎn)品化
鼓勵(lì)和激勵(lì)平臺(tái)開發(fā)措施:
1、 通過任職資格牽引
2、 平臺(tái)進(jìn)行內(nèi)部定價(jià)
3、 可以對非競爭的客戶進(jìn)行外部銷售
4、 對平臺(tái)開發(fā)給予戰(zhàn)略補(bǔ)貼和特別激勵(lì)
posted @
2012-12-04 09:38 胡滿超 閱讀(484) |
評論 (0) |
編輯 收藏
項(xiàng)目分級(jí):
A級(jí)項(xiàng)目:公司級(jí)重點(diǎn)關(guān)注和管理項(xiàng)目
B級(jí)項(xiàng)目:產(chǎn)品線重點(diǎn)關(guān)注和管理的項(xiàng)目
C級(jí)項(xiàng)目:產(chǎn)品經(jīng)理或項(xiàng)目經(jīng)理自己管理的項(xiàng)目
項(xiàng)目排序要素:市場吸引力、競爭地位、財(cái)務(wù)評估
單項(xiàng)目主體:項(xiàng)目經(jīng)理
多項(xiàng)目主體:項(xiàng)目管理部
項(xiàng)目開發(fā)四個(gè)階段:階段,步驟,任務(wù),活動(dòng)
三個(gè)計(jì)劃:
1、 一級(jí)計(jì)劃:解決全流程、全要素協(xié)同
2、 二級(jí)計(jì)劃:全流程協(xié)同下的各部門協(xié)同
3、 三級(jí)計(jì)劃:指導(dǎo)更小模塊或個(gè)人具體執(zhí)行任務(wù)計(jì)劃
提高計(jì)劃準(zhǔn)備度和完成率三要素:需求管理,關(guān)鍵資源及時(shí)到位,項(xiàng)目經(jīng)理的能力
計(jì)劃制訂需要分階段,分級(jí)進(jìn)行,避免追求一次成型
posted @
2012-11-26 10:44 胡滿超 閱讀(402) |
評論 (0) |
編輯 收藏
研發(fā)工作四類流程:
1、 技術(shù)開發(fā)流程:預(yù)研、應(yīng)用技術(shù)開發(fā)V版本
2、 平臺(tái)開發(fā)流程:共享模塊開發(fā)V版本
3、 產(chǎn)品開發(fā)流程:每向細(xì)分市場R版本
4、 定制項(xiàng)目開發(fā)流程:在產(chǎn)品和平臺(tái)基礎(chǔ)上針對某一客戶的定制M版本
產(chǎn)品開發(fā)活動(dòng)四個(gè)步驟:階段,步驟,任務(wù),活動(dòng)
概念階段:驗(yàn)證市場需求,確立產(chǎn)品是否可以立項(xiàng)
計(jì)劃階段:確立總體方案,資源投入,確保工藝、結(jié)構(gòu)方案、設(shè)計(jì)方案同步,避免重復(fù)開發(fā)
發(fā)布階段:尋找樣板客戶,準(zhǔn)備商標(biāo)、命令、市場指導(dǎo)書、產(chǎn)品實(shí)驗(yàn)局、初步定價(jià)策略;銷售工具包、售前膠片、銷售指導(dǎo)書、產(chǎn)品的配置、商業(yè)械設(shè)計(jì)、產(chǎn)品的成功安全分析,銷售培訓(xùn),發(fā)布計(jì)劃
產(chǎn)品開發(fā)流程六個(gè)階段:概念、計(jì)劃、產(chǎn)品開發(fā)、驗(yàn)證、生命周期管理
四個(gè)決策評審點(diǎn):概念決策、計(jì)劃決策、發(fā)布決策、生命周期決策
六個(gè)技術(shù)評審點(diǎn):產(chǎn)品包需求評審、系統(tǒng)規(guī)格評審、概要設(shè)計(jì)評審、詳細(xì)設(shè)計(jì)評審、樣機(jī)評審、小批量評審
財(cái)務(wù)角色:
概念階段:產(chǎn)品的定價(jià)分析和成本分析
計(jì)劃階段:核算綜合成本
開發(fā)階段:監(jiān)控成本
發(fā)布階段:明確價(jià)格策略
生命周期階段:進(jìn)行價(jià)格的核準(zhǔn)和調(diào)整價(jià)格
生產(chǎn)、維護(hù)、服務(wù)人員:在方案設(shè)計(jì)階段參與進(jìn)來,提出可維護(hù)、可安裝、可測試、可生產(chǎn)需求,使方案設(shè)計(jì)一步到位。
采購角色:
概念階段:參與供應(yīng)商認(rèn)證
計(jì)劃階段:完成元器件認(rèn)證,明確提前采購的風(fēng)險(xiǎn)
產(chǎn)品生命周期階段:關(guān)注器件的產(chǎn)能情況,提前預(yù)警
企業(yè)執(zhí)行產(chǎn)品開發(fā)流程失敗原因分析:
1、 為流程而流程,只有研發(fā)參與
2、 沒有建立市場管理流程,沒有好的市場經(jīng)理,產(chǎn)品開發(fā)沒有良好的輸入,推行產(chǎn)品開發(fā)流程困難
3、 沒有培養(yǎng)起來系統(tǒng)級(jí)工程師或團(tuán)隊(duì)進(jìn)行總體方案設(shè)計(jì),沒有打通設(shè)計(jì)時(shí)的所有環(huán)節(jié),流程流于形式
4、 評審過于關(guān)注技術(shù),在市場和財(cái)務(wù)成功方面考慮較少
5、 過多關(guān)注流程執(zhí)行的完整性,沒有結(jié)合自身情況,分步推進(jìn)
6、 配套支撐流程和體系建設(shè)跟不上,如項(xiàng)目管理流程、績效管理流程、任職資格體系建設(shè),落地的支撐人員配套跟不上
7、 沒有固化或形成時(shí),過早進(jìn)行IT化,僵化了流程
posted @
2012-11-19 15:32 胡滿超 閱讀(308) |
評論 (0) |
編輯 收藏
研發(fā)與銷售矛盾重重:需要建立市場體系,銷售與市場分離
市場體系:分析客戶需求,進(jìn)行產(chǎn)品規(guī)劃,培訓(xùn)渠道及客戶經(jīng)理,立足核心產(chǎn)品設(shè)計(jì)
市場體系:讓產(chǎn)品好賣,營
銷售體系:將產(chǎn)品賣好,銷
需求管理四個(gè)步驟:需求收集,需求分析與分類,需求分發(fā),需求實(shí)現(xiàn)及驗(yàn)證
需求管理體系目的:讓每個(gè)人在日常活動(dòng)中,將需求進(jìn)行收集并通過分析和分發(fā),以確保非金屬人員面向市場進(jìn)行開發(fā)
需求管理體系原則:落后了,找對手;平行了,建市場;領(lǐng)先了,做標(biāo)準(zhǔn)。
要建立好的市場體系,必須建立鼓勵(lì)研發(fā)人員進(jìn)入營銷體系的機(jī)制。
為了保證快速地反映市場,規(guī)劃必須每三個(gè)月更新一次。
需求分類:
A類:新產(chǎn)品開發(fā)需求
B類:產(chǎn)品設(shè)計(jì)規(guī)格更改需求
C類:詳細(xì)設(shè)計(jì)路徑更改需求
D類:生產(chǎn)訂單需求
E類:CBB和平臺(tái)開發(fā)需求
F類:技術(shù)開發(fā)需求
G類:市場調(diào)研,需要繼續(xù)求證
進(jìn)入一個(gè)客戶群三要素:
1、 市場吸引力:市場規(guī)模,市場成長性,戰(zhàn)略價(jià)值
2、 競爭地位:是否有能力進(jìn)入,市場份額、產(chǎn)品優(yōu)勢、成本優(yōu)勢、渠道能力
3、 財(cái)務(wù)回報(bào):收入增長率,現(xiàn)金流貢獻(xiàn)、研發(fā)投入產(chǎn)出比
確定新產(chǎn)品的需求的方法:
1、 重新進(jìn)行新產(chǎn)品開發(fā)
2、 對老產(chǎn)品進(jìn)行改進(jìn)
外部需求:客戶的要求、功能需求、規(guī)格需求、可靠性需求
內(nèi)部需求:產(chǎn)品化需求(可生產(chǎn)、可安裝、可維護(hù)、可測試、可驗(yàn)證),技術(shù)需求
需求完成包括四類人員:客戶經(jīng)理、市場經(jīng)理、產(chǎn)品經(jīng)理、技術(shù)經(jīng)理
需求產(chǎn)出的四份文檔:
1、 客戶需求規(guī)格說明書
2、 產(chǎn)品包需求說明書
3、 需求的分解分配
4、 技術(shù)規(guī)格說明書
將產(chǎn)品規(guī)格轉(zhuǎn)變?yōu)榧夹g(shù)需求:FFAB
Benefits:對客戶的好處
Advantage:產(chǎn)品的優(yōu)點(diǎn)
Function:功能模塊的賣點(diǎn)
Feature:實(shí)現(xiàn)功能模塊的技術(shù)特性
業(yè)界常用的$APPEALS模型:$價(jià)格、A可獲得性、P包裝、P功能性能、E易用、A保證、L生命周期成本、S社會(huì)接受程度

posted @
2012-11-16 13:37 胡滿超 閱讀(358) |
評論 (0) |
編輯 收藏
企業(yè)戰(zhàn)略規(guī)劃制定:一個(gè)從公司愿景,到經(jīng)營計(jì)劃,到各產(chǎn)品線的愿景,及業(yè)務(wù)計(jì)劃,再到產(chǎn)品平臺(tái)以及核心技術(shù)需求,并落實(shí)到資源規(guī)劃以及各種激勵(lì)機(jī)制的配套保證的總體流程
戰(zhàn)略規(guī)劃分三個(gè)層次:
1、 頂層設(shè)計(jì),戰(zhàn)略研究層
2、 業(yè)務(wù)層,產(chǎn)品線戰(zhàn)略規(guī)劃層
3、 支撐層,資源配置管理改進(jìn)層
產(chǎn)品戰(zhàn)略的W型八個(gè)步驟
技術(shù)型企業(yè)組織績效指標(biāo):
1、 生存類能力指標(biāo):財(cái)務(wù)指標(biāo),交付指標(biāo),
2、 可持續(xù)發(fā)展能力指標(biāo):新業(yè)務(wù)占收入的比重,核心技術(shù)和平臺(tái)帶來的收入占比
3、 核心競爭能力指標(biāo):公共模塊共享率,人員結(jié)構(gòu)合理性及任職資料提升率,引導(dǎo)客戶需求與規(guī)劃能力
產(chǎn)品線的核心考核指標(biāo)是組織績效:對市場成功和財(cái)務(wù)成功負(fù)責(zé)
個(gè)人績效:只能產(chǎn)品線有利潤,組織績效成功,才有意義
企業(yè)增加利潤的路徑:
1、 進(jìn)入新市場
2、 開發(fā)新業(yè)務(wù)
3、 改變商業(yè)模式
4、 降低成本:研發(fā)的首要目的是提高老產(chǎn)品的利潤,其次是開發(fā)新產(chǎn)品,新技術(shù)
5、 提高價(jià)格
企業(yè)新業(yè)務(wù)分類:
1、 聚焦發(fā)展,70%
2、 必須突破的業(yè)務(wù),20%
3、 布局式業(yè)務(wù),10%
筆記原書:
http://www.amazon.cn/%E4%BA%A7%E5%93%81%E7%A0%94%E5%8F%91%E7%AE%A1%E7%90%86-%E6%9E%84%E5%BB%BA%E4%B8%96%E7%95%8C%E4%B8%80%E6%B5%81%E7%9A%84%E4%BA%A7%E5%93%81%E7%A0%94%E5%8F%91%E7%AE%A1%E7%90%86%E4%BD%93%E7%B3%BB-%E5%91%A8%E8%BE%89/dp/B006THMWQS/ref=pd_sim_b_3

posted @
2012-11-13 09:54 胡滿超 閱讀(347) |
評論 (0) |
編輯 收藏
IPD介紹

研發(fā)的六種產(chǎn)出模式:
1、 基礎(chǔ)研究,發(fā)明和標(biāo)準(zhǔn)
2、 應(yīng)用開發(fā),將非成熟的應(yīng)用技術(shù)變成成熟的技術(shù)
3、 項(xiàng)目開發(fā),一次性的定制
4、 產(chǎn)品開發(fā),內(nèi)部共享模塊與產(chǎn)品,外部銷售的產(chǎn)品,可批量,可重復(fù),可復(fù)制生產(chǎn)
5、 解決方案,以產(chǎn)品為核心,為客戶做的跨產(chǎn)品或跨領(lǐng)域集成方案
6、 服務(wù)和運(yùn)營,服務(wù)、運(yùn)營、維護(hù)獲取收益
產(chǎn)品開發(fā)貨架層次:器件、組件、部件、單機(jī)、整機(jī)、子系統(tǒng)、系統(tǒng)
產(chǎn)品分類:
1、 內(nèi)部共享產(chǎn)品:器件、組件、部件
2、 面向細(xì)分客戶群的產(chǎn)品:部件、單機(jī)、整機(jī)、子系統(tǒng)(能力強(qiáng)的公司)
3、 解決方案級(jí)產(chǎn)品:子系統(tǒng)、系統(tǒng)
技術(shù)型企業(yè)的商業(yè)模式:經(jīng)營技術(shù)、經(jīng)營產(chǎn)品、經(jīng)營解決方案、經(jīng)營客戶和服務(wù)
技術(shù)型企業(yè)的商業(yè)模式發(fā)展和演變五個(gè)階段:
1、 勞動(dòng)密集型加工
2、 項(xiàng)目生存型
3、 產(chǎn)品擴(kuò)展型
4、 運(yùn)營客戶型
5、 集成產(chǎn)業(yè)鏈型
產(chǎn)品開發(fā)方式:
1、 先開發(fā)技術(shù),然后做通用產(chǎn)品,再銷售
技術(shù)開發(fā)->產(chǎn)品開發(fā)->形成產(chǎn)品->銷售渠道->通用客戶需求
缺點(diǎn):容易被細(xì)分市場產(chǎn)品替代,技術(shù)一旦落后沒有后續(xù)產(chǎn)出
2、 客戶需求,尋找技術(shù),完成定制
客戶需求->營銷渠道->確定交付->投入開發(fā)->技術(shù)突破
缺點(diǎn):技術(shù)開發(fā)有風(fēng)險(xiǎn);一個(gè)個(gè)項(xiàng)目做,企業(yè)很難做大;質(zhì)量不易保證;人員沒有專業(yè)發(fā)展通道,容易流失;項(xiàng)目越多,管理越難
集成產(chǎn)品開發(fā):
1、 產(chǎn)品開發(fā)與技術(shù)開發(fā)、平臺(tái)開發(fā)分離;
2、 技術(shù)和平臺(tái)開發(fā)先行,解決技術(shù)突破;
3、 產(chǎn)品開發(fā)按細(xì)分客戶群需求
集成產(chǎn)品開發(fā)和技術(shù)開發(fā)特點(diǎn):
1、 產(chǎn)品開發(fā):強(qiáng)調(diào)基于市場需求和共享平臺(tái),對市場和財(cái)務(wù)的成功負(fù)責(zé)
2、 技術(shù)開發(fā):自己掌握業(yè)界成熟的技術(shù),做成貨架,供產(chǎn)品開發(fā)時(shí)共享,以縮短產(chǎn)品開發(fā)周期
集成產(chǎn)品開發(fā)三種產(chǎn)品形態(tài):
1、 產(chǎn)品大版本V:平臺(tái)版本
2、 細(xì)分客戶群版本R:交付給用客戶產(chǎn)品,四要素:客戶及競爭需求、功能與技術(shù)需求、時(shí)間、成本
3、 客戶定制版本M:在R版本的基礎(chǔ)上針對具體客戶的個(gè)性化版本
產(chǎn)品開發(fā)四個(gè)范疇:技術(shù)開發(fā)、市場開發(fā)、生產(chǎn)和服務(wù)開發(fā)、資料包開發(fā)
產(chǎn)品開發(fā)的步驟:
1、 先進(jìn)行市場開發(fā),細(xì)分客戶群,尋找賣點(diǎn)和商業(yè)模式,尋找市場和財(cái)務(wù)成功的要素;
2、 根據(jù)產(chǎn)品需求進(jìn)行分解與分配,進(jìn)行技術(shù)開發(fā)
3、 根據(jù)技術(shù)要求進(jìn)行產(chǎn)品的可生產(chǎn)性,可安裝性,可測試性,可驗(yàn)證性,可服務(wù)性開發(fā)
4、 根據(jù)產(chǎn)品大量進(jìn)入市場,進(jìn)行技術(shù)資料包,服務(wù)資料包和銷售工具的開發(fā)
企業(yè)研發(fā)管理發(fā)展的五個(gè)階段:
1、 單項(xiàng)目單產(chǎn)品階段:以項(xiàng)目為核心
2、 多產(chǎn)品、共享產(chǎn)品和貨架平臺(tái)階段:以產(chǎn)品為核心
3、 以共享為核心面向客戶需求階段:以客戶為核心
4、 以產(chǎn)業(yè)鏈為核心的關(guān)注利潤階段:以利潤為核心
5、 持續(xù)改進(jìn)階段
集成產(chǎn)品開發(fā)管理思想:
1、 產(chǎn)品開發(fā)是一項(xiàng)投資
2、 必須強(qiáng)調(diào)基于市場的創(chuàng)新
3、 執(zhí)行技術(shù)開發(fā)與產(chǎn)品開發(fā)分離
4、 對技術(shù)進(jìn)行分類管理,強(qiáng)調(diào)核心技術(shù),關(guān)鍵技術(shù)的自主開發(fā)
5、 跨部分的協(xié)同開發(fā),實(shí)現(xiàn)全流程全要素(市場、研發(fā)、生產(chǎn)、采購、財(cái)務(wù)協(xié)同)的管理
6、 強(qiáng)調(diào)CBB和平臺(tái)建設(shè),強(qiáng)調(diào)技術(shù)共享
7、 執(zhí)行異步開發(fā)
8、 根據(jù)產(chǎn)品的不同層次和技術(shù)開發(fā)執(zhí)行不同的結(jié)構(gòu)化開發(fā)流程
9、 強(qiáng)調(diào)市場和財(cái)務(wù)成功、核心競爭力的提升是研發(fā)績效考核的重要因素
要實(shí)現(xiàn)IPD要以產(chǎn)品線(產(chǎn)品)為核心進(jìn)行四大重組:財(cái)務(wù)重組、市場重組、產(chǎn)品重組、組織與流程重組
筆記原書:
http://www.amazon.cn/%E4%BA%A7%E5%93%81%E7%A0%94%E5%8F%91%E7%AE%A1%E7%90%86-%E6%9E%84%E5%BB%BA%E4%B8%96%E7%95%8C%E4%B8%80%E6%B5%81%E7%9A%84%E4%BA%A7%E5%93%81%E7%A0%94%E5%8F%91%E7%AE%A1%E7%90%86%E4%BD%93%E7%B3%BB-%E5%91%A8%E8%BE%89/dp/B006THMWQS/ref=pd_sim_b_3

posted @
2012-11-11 21:42 胡滿超 閱讀(724) |
評論 (0) |
編輯 收藏
2011年我開始接觸一些IPD的培訓(xùn)課程,今年10.1長假期間我又參加了兩次有關(guān)IPD的外訓(xùn)課程,對IPD有了一些大概的了解,10.1過后我買了一些有關(guān)IPD的書籍開始閱讀,了解了更多的IPD的知識(shí)后使我感到十分震驚,原來產(chǎn)品的開發(fā)是應(yīng)該這樣搞的,困惑了很久的一些產(chǎn)品管理問題一下子找到了答案(雖然還不是全部)。在中國涉及到產(chǎn)品開發(fā)的公司有很多,各行各業(yè)的都有,做的好做的一般都存在,從我的工作經(jīng)歷看,先在小型軟件公司工作,后到中小型軟件公司工作,之后又在一家世界有名的超大公司做軟件開發(fā),大中小型的公司我都干過了,但依然找不到軟件開發(fā)在管理方面的門徑。傳統(tǒng)管理,營銷管理,人力資源管理都很少涉及產(chǎn)品開發(fā)管理,這說明這是一門很“偏”學(xué)問。產(chǎn)品管理既涉及到開發(fā)人員的管理,又涉及到技術(shù)管理,還有流程建立行者等等,在我的工作經(jīng)歷中經(jīng)常遇到最多的問題包含:1、中小公司無法吸引開發(fā)高手,長期發(fā)展甚至?xí)杏X整個(gè)小行業(yè)人才凋零,沒有前景2、開發(fā)過程混亂,開發(fā)團(tuán)隊(duì)的工作效率主要取決于leader的個(gè)人水平及工作積極性3、質(zhì)量管理較差,需求來源模糊,設(shè)計(jì)稀里糊涂,到了測試階段基本上已經(jīng)無法控制、測試人員對項(xiàng)目影響力較小4、文檔管理幾乎空白,屬于自覺自發(fā)的行為結(jié)果5、人員培養(yǎng)困難6、新手做設(shè)計(jì),高手救火。。。很多很多這些問題,或大或小,或輕或重,在我閱讀完從華為走出來做IPD咨詢這些高手寫的書之后,慢慢找到了答案。IPD集成產(chǎn)品開發(fā)管理思想強(qiáng)調(diào):
1、 產(chǎn)品開發(fā)是一項(xiàng)投資
2、 必須強(qiáng)調(diào)基于市場的創(chuàng)新
3、 執(zhí)行技術(shù)開發(fā)與產(chǎn)品開發(fā)分離
4、 對技術(shù)進(jìn)行分類管理,強(qiáng)調(diào)核心技術(shù),關(guān)鍵技術(shù)的自主開發(fā)
5、 跨部分的協(xié)同開發(fā),實(shí)現(xiàn)全流程全要素(市場、研發(fā)、生產(chǎn)、采購、財(cái)務(wù)協(xié)同)的管理
6、 強(qiáng)調(diào)CBB和平臺(tái)建設(shè),強(qiáng)調(diào)技術(shù)共享
7、 執(zhí)行異步開發(fā)
8、 根據(jù)產(chǎn)品的不同層次和技術(shù)開發(fā)執(zhí)行不同的結(jié)構(gòu)化開發(fā)流程
9、 強(qiáng)調(diào)市場和財(cái)務(wù)成功、核心競爭力的提升是研發(fā)績效考核的重要因素
除了IPD的流程之外,華為人結(jié)合了華為實(shí)踐IPD過程的經(jīng)驗(yàn)與教訓(xùn),及一些成功的管理實(shí)踐,做了完整的總結(jié)與升華,閱讀之后感覺茅塞頓開。
介紹兩本書:
http://www.amazon.cn/gp/product/B001ULBY6W
與http://www.amazon.cn/%E4%BA%A7%E5%93%81%E7%A0%94%E5%8F%91%E7%AE%A1%E7%90%86-%E6%9E%84%E5%BB%BA%E4%B8%96%E7%95%8C%E4%B8%80%E6%B5%81%E7%9A%84%E4%BA%A7%E5%93%81%E7%A0%94%E5%8F%91%E7%AE%A1%E7%90%86%E4%BD%93%E7%B3%BB-%E5%91%A8%E8%BE%89/dp/B006THMWQS/ref=pd_sim_b_3
我將陸續(xù)把自己寫的一些筆記與大家分享。
posted @
2012-11-10 14:20 胡滿超 閱讀(1830) |
評論 (1) |
編輯 收藏
總結(jié)網(wǎng)上訂票系統(tǒng)常見的問題如下:
1、 高峰時(shí)段無法登陸,提示在線用戶過多
2、 訂單提交成功之后,支付環(huán)節(jié)出了問題,瀏覽器意外退出,后再登陸,發(fā)現(xiàn)登陸不上,無法在規(guī)定時(shí)間內(nèi)完成支付,購票失敗
3、 訂單提交反饋時(shí)間過長,熱門線路需要等待20分鐘甚至更長時(shí)間,才能得到反饋
4、 驗(yàn)證碼輸入總是錯(cuò)誤,無法完成驗(yàn)證碼驗(yàn)證環(huán)節(jié),無法登陸
5、 逢用戶高峰,網(wǎng)站反應(yīng)速度較慢
6、 對多瀏覽器支持不好,沒有IOS,Android應(yīng)用入口
以上問題多數(shù)都是用戶體驗(yàn)的問題,用戶體驗(yàn)的問題即有票源稀少的原因,更多的是對訂票系統(tǒng)使用過程中系統(tǒng)登陸困難,反應(yīng)遲鈍,訂單結(jié)果反饋太慢,意外退出等問題難以忍受。
本人并非訂票系統(tǒng)設(shè)計(jì)人員,但是通用對訂票系統(tǒng)外在的表現(xiàn)大膽猜測一下訂票系統(tǒng)的設(shè)計(jì)。
常見問題原因分析:
問題1,高峰時(shí)段無法登陸,提示在線用戶過多;
問題4,驗(yàn)證碼輸入總是錯(cuò)誤,無法完成驗(yàn)證碼驗(yàn)證環(huán)節(jié),無法登陸
無法登陸的問題,其原因顯然是前端用于處理WEB連接服務(wù)器太少或網(wǎng)絡(luò)帶寬不足所至,為了不讓更多的用戶一起連接服務(wù)器導(dǎo)致服務(wù)器較慢,只好拒絕一些用戶的登陸請求。使同時(shí)在線人數(shù)保持在一個(gè)上限以內(nèi)。
驗(yàn)證碼輸入總是錯(cuò)誤的問題,原因也是用于處理WEB連接服務(wù)器太少所至,為了防止一些客戶端使用“惡意”軟件,不斷自動(dòng)登陸的情況,驗(yàn)證碼需求由客戶端向服務(wù)器提交一個(gè)驗(yàn)證請求,可以由于服務(wù)器響應(yīng)實(shí)在太慢,以至于整個(gè)響應(yīng)速度居然超過了驗(yàn)證碼的有效時(shí)間。
常見問題:
問題2:訂單提交成功之后,支付環(huán)節(jié)出了問題,瀏覽器意外退出,后再登陸,發(fā)現(xiàn)登陸不上,無法在規(guī)定時(shí)間內(nèi)完成支付,購票失敗
問題3:訂單提交反饋時(shí)間過長,熱門線路需要等待20分鐘甚至更長時(shí)間,才能得到反饋
問題5:逢用戶高峰,網(wǎng)站反應(yīng)速度較慢
問題2是一個(gè)系統(tǒng)的BUG,但是可以通過一些設(shè)計(jì)來解決這個(gè)問題。
問題3,問題5,可能是由于WEB服務(wù)器與邏輯處理服務(wù)器在同一臺(tái)機(jī)器上,而導(dǎo)致服務(wù)器CPU分配了過多的時(shí)間與資源在處理用戶請求,在執(zhí)行邏輯時(shí)執(zhí)行緩慢。
如果數(shù)據(jù)庫也在同一臺(tái)服務(wù)器上,那問題可能更加嚴(yán)重。當(dāng)然我相信,不在一臺(tái)服務(wù)器上的可能性比較大。
總結(jié)以上問題,其解決方案建議如下:
1、 準(zhǔn)備更多前端WEB服務(wù)器,解決WEB前端的問題沒有別的辦法,只能加服務(wù)器,或者每個(gè)省市放一群單獨(dú)的服務(wù)器,根據(jù)用戶量進(jìn)行增加,直到響應(yīng)流暢為止。
2、 可以考慮把邏輯服務(wù)器單獨(dú)分離出來,與WEB服務(wù)器分開,WEB服務(wù)器只處理WEB請求,邏輯服務(wù)器單獨(dú)運(yùn)行
3、 把數(shù)據(jù)庫服務(wù)器單獨(dú)分離,并且把火車票票量數(shù)據(jù)庫與用戶訂票信息數(shù)據(jù)庫放到不同的機(jī)器上,由于大量的訂票請求會(huì)訪問火車票票量數(shù)據(jù)庫,并且會(huì)有大量訂票數(shù)據(jù)添加到用戶訂票信息數(shù)據(jù)庫中,在處理添加的邏輯占用了大量的數(shù)據(jù)庫資源,會(huì)導(dǎo)致整個(gè)系統(tǒng)變慢。如果放到同一臺(tái)機(jī)器上,必然導(dǎo)致響應(yīng)變慢。把不同性質(zhì)的數(shù)據(jù),放到不同機(jī)器、不同的數(shù)據(jù)系統(tǒng)中,可以合理的分流系統(tǒng)訪問量,使系統(tǒng)響應(yīng)加快,橫向擴(kuò)展更具有彈性。
4、 把支付訂票費(fèi)用放到一個(gè)單獨(dú)的網(wǎng)站進(jìn)行,訂單提交成功后鎖票,之后根據(jù)訂單號(hào)可以在另外一個(gè)單獨(dú)的網(wǎng)站上進(jìn)行單獨(dú)支付,支付時(shí)只要提供訂票號(hào)就可以,這樣做有很多好處:1. 避免了由于支付失敗而導(dǎo)致退出瀏覽器,卻由于在線人數(shù)過多無法登陸導(dǎo)致訂票失敗的情況,2. 電話訂票也可以在此支付,在火車站機(jī)自動(dòng)售票機(jī)器上取票,這樣支付方便,也解決了異地付款取票的問題 3. 單獨(dú)支付會(huì)在一定程度上給訂票網(wǎng)站減輕訪問與處理壓力
5、 提供快遞火車票服務(wù)進(jìn)行創(chuàng)收,支付成功的火車票可以進(jìn)行快遞,這樣即方便訂票人也可以給鐵道部創(chuàng)收
6、 網(wǎng)站可以根據(jù)用戶訂票信息做一些有針對性網(wǎng)站廣告,如旅游、酒店廣告等進(jìn)行創(chuàng)收
7、 開發(fā)出更多的手機(jī)終端軟件,擴(kuò)大訂票系統(tǒng)使用的覆蓋面
8、 支持更多的瀏覽器,而不僅僅是IE
由于本人水平有限,歡迎各個(gè)高手批評指正,希望這篇文章能夠拋磚引玉,大家一起討論。
網(wǎng)上的其他類似文章:
http://cloud.it168.com/a2012/0130/1304/000001304533.shtml
posted @
2012-10-15 17:09 胡滿超 閱讀(2783) |
評論 (7) |
編輯 收藏
轉(zhuǎn)自:http://book.douban.com/annotation/19461092/
半個(gè)月前在豆瓣上看到了一本新書《數(shù)學(xué)之美》,評價(jià)很高。而因?yàn)樵诎肽昵翱戳恕妒裁词菙?shù)學(xué)》就對數(shù)學(xué)產(chǎn)生濃厚興趣,但苦于水平不足的我便立馬買了一本,希望能對數(shù)學(xué)多一些了解,并認(rèn)真閱讀起來。 令我意外并欣喜的是,這本書里邊的數(shù)學(xué)內(nèi)容并不晦澀難懂,而且作者為了講述數(shù)學(xué)之美而搭配的一些工程實(shí)例都是和我學(xué)習(xí)并感興趣的模式識(shí)別,目標(biāo)分類相關(guān)算法相關(guān)聯(lián)的。這讓我覺得撿到了意外的寶藏。 書中每一個(gè)章節(jié)都或多或少是作者親身經(jīng)歷過的,比如世界級(jí)教授的小故事,或者Google的搜索引擎原理,又或者是Google的云計(jì)算等。作者用其行云流水般的語言將各個(gè)知識(shí)點(diǎn)像講故事一樣有趣的敘述出來。 這本書著實(shí)讓我印象深刻,所以我把筆記分享出來,希望更多和我學(xué)習(xí)研究領(lǐng)域一樣的人會(huì)喜歡并親自閱讀這本書,并能支持作者。畢竟國內(nèi)這種書實(shí)在是太少了,也希望能有更多領(lǐng)域內(nèi)的大牛能再寫出一些這種書籍來讓我們共同提高。1. 因?yàn)樾枰獋鞑バ畔⒘康脑黾樱煌穆曇舨⒉荒芡耆磉_(dá)信息,語言便產(chǎn)生了。2. 當(dāng)文字增加到?jīng)]有人能完全記住所有文字時(shí),聚類和歸類就開始了。例如日代表太陽或者代表一天。3. 聚類會(huì)帶來歧義性,但上下文可以消除歧義。信息冗余是信息安全的保障。例如羅塞塔石碑上同一信息重復(fù)三次。4. 最短編碼原理即常用信息短編碼,生僻信息長編碼。5. 因?yàn)槲淖种皇切畔⒌妮d體而非信息本身,所以翻譯是可以實(shí)現(xiàn)的。6. 2012,其實(shí)是瑪雅文明采用二十進(jìn)制,即四百年是一個(gè)太陽紀(jì),而2012年恰巧是當(dāng)前太陽紀(jì)的最后一年,2013年是新的太陽紀(jì)的開始,故被誤傳為世界末日。7. 字母可以看為是一維編碼,而漢字可以看為二維編碼。8. 基于統(tǒng)計(jì)的自然語言處理方法,在數(shù)學(xué)模型上和通信是相通的,甚至是相同的。9. 讓計(jì)算機(jī)處理自然語言的基本問題就是為自然語言這種上下文相關(guān)的特性建立數(shù)學(xué)模型,即統(tǒng)計(jì)語言模型(Statistical Language Modal)。10. 根據(jù)大數(shù)定理(Law of Large Numbers),只要統(tǒng)計(jì)量足夠,相對頻度就等于概率。11. 二元模型。對于p(w1,w2,…,wn)=p(w1)p(w2|w1)p(w3|w1,w2)…p(wn|w1,w2,…,wn-1)的展開問題,因?yàn)閜(w3|w1,w2)難計(jì)算,p(wn|w1,w2,…,wn-1)更難計(jì)算,馬爾科夫給出了一個(gè)偷懶但是頗為有效的方法,也就是每當(dāng)遇到這種情況時(shí),就假設(shè)任意wi出現(xiàn)的概率只與它前面的wi-1有關(guān),即p(s)=p(w1)p(w2|w1)p(w3|w2)…p(wi|wi-1)…p(wn|wn-1)。現(xiàn)在這個(gè)概率就變的簡單了。對應(yīng)的語言模型為2元模型(Bigram Model)。12. *N元模型。wi只與前一個(gè)wi-1有關(guān)近似的過頭了,所以N-1階馬爾科夫假設(shè)為p(wi|w1,w2,…,wi-1)=p(wi|wi-N+1,wi-N+2,…,wi-1),對應(yīng)的語言模型成為N元模型(N-Gram Model)。一元模型就是上下文無關(guān)模型,實(shí)際應(yīng)用中更多實(shí)用的是三元模型。Google的羅塞塔翻譯系統(tǒng)和語言搜索系統(tǒng)實(shí)用的是四元模型,存儲(chǔ)于500臺(tái)以上的Google服務(wù)器中。13. *卡茲退避法(Katz backoff),對于頻率超過一定閾值的詞,它們的概率估計(jì)就是它們在語料庫中的相對頻度,對于頻率小于這個(gè)閾值的詞,它們的概率估計(jì)就小于他們的相對頻度,出現(xiàn)次數(shù)越少,頻率下調(diào)越多。對于未看見的詞,也給予一個(gè)比較小的概率(即下調(diào)得到的頻率總和),這樣所有詞的概率估計(jì)都平滑了。這就是卡茲退避法(Katz backoff)。14. 訓(xùn)練數(shù)據(jù)通常是越多越好,通過平滑過渡的方法可以解決零概率和很小概率的問題,畢竟在數(shù)據(jù)量多的時(shí)候概率模型的參數(shù)可以估計(jì)的比較準(zhǔn)確。15. 利用統(tǒng)計(jì)語言模型進(jìn)行分詞,即最好的分詞方法應(yīng)該保證分完詞后這個(gè)句子出現(xiàn)的概率最大。根據(jù)不同應(yīng)用,漢語分詞的顆粒度大小應(yīng)該不同。16. 符合馬爾科夫假設(shè)(各個(gè)狀態(tài)st的概率分布只與它前一個(gè)狀態(tài)st-1有關(guān))的隨即過程即成為馬爾科夫過程,也稱為馬爾科夫鏈。17. 隱含馬爾科夫模型是馬爾科夫鏈的擴(kuò)展,任意時(shí)刻t的狀態(tài)st是不可見的,所以觀察者沒法通過觀察到一個(gè)狀態(tài)序列s1,s2,s3,…,sT來推測轉(zhuǎn)移概率等參數(shù)。但是隱馬爾科夫模型在每個(gè)時(shí)刻t會(huì)輸出一個(gè)符號(hào)ot,而且ot和st相關(guān)且僅和ot相關(guān)。這個(gè)被稱為獨(dú)立輸出假設(shè)。其中隱含的狀態(tài)s1,s2,s3,…是一個(gè)典型的馬爾科夫鏈。18. 隱含馬爾科夫模型是機(jī)器學(xué)習(xí)主要工具之一,和幾乎所有機(jī)器學(xué)習(xí)的模型工具一樣,它需要一個(gè)訓(xùn)練算法(鮑姆-韋爾奇算法)和使用時(shí)的解碼算法(維特比算法)。掌握了這兩類算法,就基本上可以使用隱含馬爾科夫模型這個(gè)工具了。19. 鮑姆-韋爾奇算法(Baum-Welch Algorithm),首先找到一組能夠產(chǎn)生輸出序列O的模型參數(shù),這個(gè)初始模型成為Mtheta0,需要在此基礎(chǔ)上找到一個(gè)更好的模型,假定不但可以算出這個(gè)模型產(chǎn)生O的概率P(O|Mtheta0),而且能夠找到這個(gè)模型產(chǎn)生O的所有可能的路徑以及這些路徑的概率。并算出一組新的模型參數(shù)theta1,從Mtheta0到Mtheta1的過程稱為一次迭代。接下來從Mtheta1出發(fā)尋找更好的模型Mtheta2,并一直找下去,直到模型的質(zhì)量沒有明顯提高為止。這樣一直估計(jì)(Expectation)新的模型參數(shù),使得輸出的概率達(dá)到最大化(Maximization)的過程被稱為期望值最大化(Expectation-Maximization)簡稱EM過程。EM過程能保證一定能收斂到一個(gè)局部最優(yōu)點(diǎn),但不能保證找到全局最優(yōu)點(diǎn)。因此,在一些自然語言處理的應(yīng)用中,這種無監(jiān)督的鮑姆-韋爾奇算法訓(xùn)練處的模型比有監(jiān)督的訓(xùn)練得到的模型效果略差。20. 熵,信息熵的定義為H(X)=-SumP(x)logP(x),變量的不確定性越大,熵也越大。21. 一個(gè)事物內(nèi)部會(huì)存在隨機(jī)性,也就是不確定性,假定為U,而從外部消除這個(gè)不確定性唯一的辦法是引入信息I,而需要引入的信息量取決于這個(gè)不確定性的大小,即I>U才行。當(dāng)I<U時(shí),這些信息可以消除一部分不確定性,U'=U-I。反之,如果沒有信息,任何公示或者數(shù)字的游戲都無法排除不確定性。22. 信息的作用在于消除不確定性。23. 互信息,對兩個(gè)隨機(jī)事件相關(guān)性的量化度量,即隨機(jī)事件X的不確定性或者說熵H(X),在知道隨機(jī)事件Y條件下的不確定性,或者說條件熵H(X|Y)之間的差異,即I(X;Y)=H(X)-H(X|Y)。所謂兩個(gè)事件相關(guān)性的量化度量,即在了解了其中一個(gè)Y的前提下,對消除另一個(gè)X不確定性所提供的信息量。24. 相對熵(Kullback-Leibler Divergence)也叫交叉熵,對兩個(gè)完全相同的函數(shù),他們的相對熵為零;相對熵越大,兩個(gè)函數(shù)差異越大,反之,相對熵越小,兩個(gè)函數(shù)差異越小;對于概率分布或者概率密度函數(shù),如果取值均大于零,相對熵可以度量兩個(gè)隨機(jī)分布的差異性。25. 弗里德里克·賈里尼克(Frederek Jelinek)是自然語言處理真諦的先驅(qū)者。26. 技術(shù)分為術(shù)和道兩種,具體的做事方法是術(shù),做事的原理和原則是道。術(shù)會(huì)從獨(dú)門絕技到普及再到落伍,追求術(shù)的人會(huì)很辛苦,只有掌握了道的本質(zhì)和精髓才能永遠(yuǎn)游刃有余。27. 真理在形式上從來是簡單的,而不是復(fù)雜和含混的。28. 搜索引擎不過是一張大表,表的每一行對應(yīng)一個(gè)關(guān)鍵字,而每一個(gè)關(guān)鍵字后面跟著一組數(shù)字,是包含該關(guān)鍵詞的文獻(xiàn)序號(hào)。但當(dāng)索引變的非常大的時(shí)候,這些索引需要通過分布式的方式存儲(chǔ)到不同的服務(wù)器上。29. 網(wǎng)絡(luò)爬蟲(Web Crawlers),圖論的遍歷算法和搜索引擎的關(guān)系。互聯(lián)網(wǎng)雖然復(fù)雜,但是說穿了其實(shí)就是一張大圖……可以把每一個(gè)網(wǎng)頁當(dāng)做一個(gè)節(jié)點(diǎn),把那些超鏈接當(dāng)做連接網(wǎng)頁的弧。有了超鏈接,可以從任何一個(gè)網(wǎng)頁出發(fā),用圖的遍歷算法,自動(dòng)訪問到每一個(gè)網(wǎng)頁并且把他們存儲(chǔ)起來。完成這個(gè)功能的程序叫網(wǎng)絡(luò)爬蟲。30. 哥尼斯堡七橋,如果一個(gè)圖能從一個(gè)頂點(diǎn)出發(fā),每條邊不重復(fù)的遍歷一遍回到這個(gè)頂點(diǎn),那么每一個(gè)頂點(diǎn)的度必須為偶數(shù)。31. 構(gòu)建網(wǎng)絡(luò)爬蟲的工程要點(diǎn):1.用BFS(廣度優(yōu)先搜索)還是DFS(深度優(yōu)先搜索),一般是先下載完一個(gè)網(wǎng)站,再進(jìn)入下一個(gè)網(wǎng)站,即BFS的成分多一些。2.頁面的分析和URL的提取,如果有些網(wǎng)頁明明存在,但搜索引擎并沒有收錄,可能的原因之一是網(wǎng)絡(luò)爬蟲中的解析程序沒能成功解析網(wǎng)頁中不規(guī)范的腳本程序。3.記錄哪些網(wǎng)頁已經(jīng)下載過的URL表,可以用哈希表。最終,好的方法一般都采用了這樣兩個(gè)技術(shù):首先明確每臺(tái)下載服務(wù)器的分工,也就是在調(diào)度時(shí),一看到某個(gè)URL就知道要交給哪臺(tái)服務(wù)器去下載,這樣就避免了很多服務(wù)器對同一個(gè)URL做出是否需要下載的判斷。然后,在明確分工的基礎(chǔ)上,判斷URL是否下載就可以批處理了,比如每次向哈希表(一組獨(dú)立的服務(wù)器)發(fā)送一大批詢問,或者每次更新一大批哈希表的內(nèi)容,這樣通信的次數(shù)就大大減少了。32. PageRank衡量網(wǎng)頁質(zhì)量的核心思想,在互聯(lián)網(wǎng)上,如果一個(gè)網(wǎng)頁被很多其他網(wǎng)頁所鏈接,說明它受到普遍的承認(rèn)和信賴,那么它的排名就高。同時(shí),對于來自不同網(wǎng)頁的鏈接區(qū)別對待,因?yàn)榫W(wǎng)頁排名高的那些網(wǎng)頁的鏈接更可靠,于是要給這些鏈接比較大的權(quán)重。33. TF-IDF(Term Frequency / Inverse Document Frequency) ,關(guān)鍵詞頻率-逆文本頻率值,其中,TF為某個(gè)網(wǎng)頁上出現(xiàn)關(guān)鍵詞的頻率,IDF為假定一個(gè)關(guān)鍵詞w在Dw個(gè)網(wǎng)頁中出現(xiàn)過,那么Dw越大,w的權(quán)重越小,反之亦然,公式為log(D/Dw)。1.一個(gè)詞預(yù)測主題的能力越強(qiáng),權(quán)重越大,反之,權(quán)重越小。2.停止詞的權(quán)重為零。34. 動(dòng)態(tài)規(guī)劃(Dynamic Programming)的原理,將一個(gè)尋找全程最優(yōu)的問題分解成一個(gè)個(gè)尋找局部最優(yōu)的小問題。35. 一個(gè)好的算法應(yīng)該像輕武器中最有名的AK-47沖鋒槍那樣:簡單、有效、可靠性好而且容易讀懂(易操作)而不應(yīng)該故弄玄虛。選擇簡單方案可以容易解釋每個(gè)步驟和方法背后的道理,這樣不僅便于出問題時(shí)的查錯(cuò),也容易找到今后改進(jìn)的目標(biāo)。36. 在實(shí)際的分類中,可以先進(jìn)行奇異值分解(得到分類結(jié)果略顯粗糙但能較快得到結(jié)果),在粗分類結(jié)果的基礎(chǔ)上,利用計(jì)算向量余弦的方法(對范圍內(nèi)的分類做兩兩計(jì)算),在粗分類結(jié)果的基礎(chǔ)上,進(jìn)行幾次迭代,得到比較精確的結(jié)果。37. 奇異值分解(Singular Value Decomposition),在需要用一個(gè)大矩陣A來描述成千上萬文章和幾十上百萬詞的關(guān)聯(lián)性時(shí),計(jì)算量非常大,可以將A奇異值分解為X、B和Y三個(gè)矩陣,Amn=Xmm*Bmn*Ynn,X表示詞和詞類的相關(guān)性,Y表示文本和主題的相關(guān)性,B表示詞類和主題的相關(guān)性,其中B對角線上的元素很多值相對其他的非常小,或者為零,可以省略。對關(guān)聯(lián)矩陣A進(jìn)行一次奇異值分解,就可以同時(shí)完成近義詞分類和文章的分類,同時(shí)能得到每個(gè)主題和每個(gè)詞義類之間的相關(guān)性,這個(gè)結(jié)果非常漂亮。38. 信息指紋。如果能夠找到一種函數(shù),將5000億網(wǎng)址隨即地映射到128位二進(jìn)制,也就是16字節(jié)的整數(shù)空間,就稱這16字節(jié)的隨機(jī)數(shù)做該網(wǎng)址的信息指紋。信息指紋可以理解為將一段信息映射到一個(gè)多維二進(jìn)制空間中的一個(gè)點(diǎn),只要這個(gè)隨即函數(shù)做的好,那么不同信息對應(yīng)的點(diǎn)不會(huì)重合,因此這個(gè)二進(jìn)制的數(shù)字就變成了原來信息所具有的獨(dú)一無二的指紋。39. 判斷兩個(gè)集合是否相同,最笨的方法是這個(gè)集合中的元素一一比較,復(fù)雜度O(squareN),稍好的是將元素排序后順序比較,復(fù)雜度O(NlogN),最完美的方法是計(jì)算這兩個(gè)集合的指紋,然后直接進(jìn)行比較,計(jì)算復(fù)雜度O(N)。40. 偽隨機(jī)數(shù)產(chǎn)生器算法(Pseudo-Random Number Generator,PRNG),這是產(chǎn)生信息指紋的關(guān)鍵算法,通過他可以將任意長的整數(shù)轉(zhuǎn)換成特定長度的偽隨機(jī)數(shù)。最早的PRNG是將一個(gè)數(shù)的平方掐頭去尾取中間,當(dāng)然這種方法不是很隨即,現(xiàn)在常用的是梅森旋轉(zhuǎn)算法(Mersenne Twister)。41. 在互聯(lián)網(wǎng)上加密要使用基于加密的偽隨機(jī)數(shù)產(chǎn)生器(Cryptography Secure Pseudo-Random Number Generator,CSPRNG),常用的算法有MD5或者SHA-1等標(biāo)準(zhǔn),可以將不定長的信息變成定長的128位或者160位二進(jìn)制隨機(jī)數(shù)。42. 最大熵模型(Maximum Entropy)的原理就是保留全部的不確定性,將風(fēng)險(xiǎn)降到最小。最大熵原理指出,需要對一個(gè)隨機(jī)事件的概率分布進(jìn)行預(yù)測時(shí),我們的預(yù)測應(yīng)當(dāng)滿足全部已知的條件,而對未知的情況不要做任何主觀假設(shè)。在這種情況下,概率分布最均勻,預(yù)測的風(fēng)險(xiǎn)最小。I.Csiszar證明,對任何一組不自相矛盾的信息,這個(gè)最大熵模型不僅存在,而且是唯一的,此外,他們都有同一個(gè)非常簡單的形式-指數(shù)函數(shù)。43. 通用迭代算法(Generalized Iterative Scaling,GIS)是最原始的最大熵模型的訓(xùn)練方法。1.假定第零次迭代的初始模型為等概率的均勻分布。2.用第N次迭代的模型來估算每種信息特征在訓(xùn)練數(shù)據(jù)中的分布。如果超過了實(shí)際的,就把相應(yīng)的模型參數(shù)變小,反之變大。3.重復(fù)步驟2直至收斂。這是一種典型的期望值最大化(Expectation Maximization,EM)算法。IIS(Improved Iterative Scaling)比GIS縮短了一到兩個(gè)數(shù)量級(jí)。44. 布隆過濾器實(shí)際上是一個(gè)很長的二進(jìn)制向量和一系列隨機(jī)映射的函數(shù)。45. 貝葉斯網(wǎng)絡(luò)從數(shù)學(xué)的層面講是一個(gè)加權(quán)的有向圖,是馬爾科夫鏈的擴(kuò)展,而從知識(shí)論的層面看,貝葉斯網(wǎng)絡(luò)克服了馬爾科夫那種機(jī)械的線性的約束,它可以把任何有關(guān)聯(lián)的事件統(tǒng)一到它的框架下面。在網(wǎng)絡(luò)中,假定馬爾科夫假設(shè)成立,即每一個(gè)狀態(tài)只與和它直接相連的狀態(tài)有關(guān),而和他間接相連的狀態(tài)沒有直接關(guān)系,那么它就是貝葉斯網(wǎng)絡(luò)。在網(wǎng)絡(luò)中每個(gè)節(jié)點(diǎn)概率的計(jì)算,都可以用貝葉斯公式來進(jìn)行,貝葉斯網(wǎng)絡(luò)也因此得名。由于網(wǎng)絡(luò)的每個(gè)弧都有一個(gè)可信度,貝葉斯網(wǎng)絡(luò)也被稱作信念網(wǎng)絡(luò)(Belief Networks)。46. 條件隨機(jī)場是計(jì)算聯(lián)合概率分布的有效模型。在一個(gè)隱含馬爾科夫模型中,以x1,x2,...,xn表示觀測值序列,以y1,y2,...,yn表示隱含的狀態(tài)序列,那么xi只取決于產(chǎn)生它們的狀態(tài)yi,和前后的狀態(tài)yi-1和yi+1都無關(guān)。顯然很多應(yīng)用里觀察值xi可能和前后的狀態(tài)都有關(guān),如果把xi和yi-1,yi,yi+1都考慮進(jìn)來,這樣的模型就是條件隨機(jī)場。它是一種特殊的概率圖模型(Probablistic Graph Model),它的特殊性在于,變量之間要遵守馬爾科夫假設(shè),即每個(gè)狀態(tài)的轉(zhuǎn)移概率只取決于相鄰的狀態(tài),這一點(diǎn)和另一種概率圖模型貝葉斯網(wǎng)絡(luò)相同,它們的不同之處在于條件隨機(jī)場是無向圖,而貝葉斯網(wǎng)絡(luò)是有向圖。47. 維特比算法(Viterbi Algoritm)是一個(gè)特殊但應(yīng)用最廣的動(dòng)態(tài)規(guī)劃算法,利用動(dòng)態(tài)規(guī)劃,可以解決任何一個(gè)圖中的最短路徑問題。它之所以重要,是因?yàn)榉彩鞘褂秒[含馬爾科夫模型描述的問題都可以用它來解碼。1.從點(diǎn)S出發(fā),對于第一個(gè)狀態(tài)x1的各個(gè)節(jié)點(diǎn),不妨假定有n1個(gè),計(jì)算出S到他們的距離d(S,x1i),其中x1i代表任意狀態(tài)1的節(jié)點(diǎn)。因?yàn)橹挥幸徊剑赃@些距離都是S到他們各自的最短距離。2.對于第二個(gè)狀態(tài)x2的所有節(jié)點(diǎn),要計(jì)算出從S到他們的最短距離。d(S,x2i)=min_I=1,n1_d(S,x1j)+d(x1j,x2i),由于j有n1種可能性,需要一一計(jì)算,然后找到最小值。這樣對于第二個(gè)狀態(tài)的每個(gè)節(jié)點(diǎn),需要n1次乘法計(jì)算。假定這個(gè)狀態(tài)有n2個(gè)節(jié)點(diǎn),把S這些節(jié)點(diǎn)的距離都算一遍,就有O(n1*n2)次運(yùn)算。3.按照上述方法從第二個(gè)狀態(tài)走到第三個(gè)狀態(tài)一直走到最后一個(gè)狀態(tài),這樣就得到整個(gè)網(wǎng)絡(luò)從頭到尾的最短路徑。48. 擴(kuò)頻傳輸(Spread-Spectrum Transmission)和固定頻率的傳輸相比,有三點(diǎn)明顯的好處:1.抗干擾能力強(qiáng)。2.信號(hào)能量非常低,很難獲取。3.擴(kuò)頻傳輸利用帶寬更充分。49. Google針對云計(jì)算給出的解決工具是MapReduce,其根本原理就是計(jì)算機(jī)算法上常見的分治算法(Divide-and-Conquer)。將一個(gè)大任務(wù)拆分成小的子任務(wù),并完成子任務(wù)的計(jì)算,這個(gè)過程叫Map,將中間結(jié)果合并成最終結(jié)果,這個(gè)過程叫Reduce。50. 邏輯回歸模型(Logistic Regression)是將一個(gè)事件出現(xiàn)的概率適應(yīng)到一條邏輯曲線(Logistic Curve)上。典型的邏輯回歸函數(shù):f(z)=e`z/e`z+1=1/1+e`-z。邏輯曲線是一條S型曲線,其特點(diǎn)是開始變化快,逐漸減慢,最后飽和。邏輯自回歸的好處是它的變量范圍從負(fù)無窮到正無窮,而值域范圍限制在0-1之間。因?yàn)橹涤虻姆秶?-1之間,這樣邏輯回歸函數(shù)就可以和一個(gè)概率分別聯(lián)系起來了。因?yàn)樽宰兞糠秶谪?fù)無窮到正無窮之間,它就可以把信號(hào)組合起來,不論組合成多大或者多小的值,最后依然能得到一個(gè)概率分布。51. 期望最大化算法(Expectation Maximization Algorithm),根據(jù)現(xiàn)有的模型,計(jì)算各個(gè)觀測數(shù)據(jù)輸入到模型中的計(jì)算結(jié)果,這個(gè)過程稱為期望值計(jì)算過程(Expectation),或E過程;接下來,重新計(jì)算模型參數(shù),以最大化期望值,這個(gè)過程稱為最大化的過程(Maximization),或M過程。這一類算法都稱為EM算法,比如隱含馬爾科夫模型的訓(xùn)練方法Baum-Welch算法,以及最大熵模型的訓(xùn)練方法GIS算法。
posted @
2012-09-18 15:04 胡滿超 閱讀(460) |
評論 (0) |
編輯 收藏
http://ipseeker.cn/tools/pywb.php
posted @
2012-09-07 13:15 胡滿超 閱讀(357) |
評論 (0) |
編輯 收藏
在Windows平臺(tái)做開發(fā)肯定會(huì)接觸到UI程序的編寫,以MFC的UI開發(fā)為例,可以開發(fā)單文檔,多文檔,對話框等形式的應(yīng)用。寫一個(gè)UI程序容易,寫好卻不是一件簡單的事情。在整個(gè)代碼結(jié)構(gòu)的清晰性與可維護(hù)性方面需要多加注意。寫好UI程序需求注意以下幾點(diǎn):
1、圍繞數(shù)據(jù)編程與不是圍繞UI編程
當(dāng)我們拿到需求最先接觸到的就是UI的設(shè)計(jì),也許是美工畫的,也許是設(shè)計(jì)草圖。工程師在具體設(shè)計(jì)的時(shí)候容易受UI的影響,或者干脆從UI開始編程。
這是一個(gè)錯(cuò)誤的編程習(xí)慣,無論UI如何展現(xiàn)與交互,最終都應(yīng)該圍繞數(shù)據(jù)編程。拿到需求后,應(yīng)該先思考和推敲數(shù)據(jù)的設(shè)計(jì)與流轉(zhuǎn),UI不過就是數(shù)據(jù)的一種展現(xiàn)形式而已。
2、做好UI與邏輯的解耦
UI的編程會(huì)涉及到許多控件的操作,消息的處理,不知不覺,一個(gè)UI類的代碼會(huì)越寫越大,以至于一段時(shí)間以后,瀏覽和梳理都會(huì)變得不太方便。
在UI類里,除了與UI本身的操作有關(guān)的代碼以外,任何邏輯代碼都應(yīng)該與此解耦,并根據(jù)具體情況進(jìn)行封裝調(diào)用。如果一個(gè)控件關(guān)聯(lián)了太多數(shù)據(jù)操作,應(yīng)該把這些操作封裝到控件的繼承類中,把一類代碼進(jìn)行集中管理和維護(hù)。
上述問題,在程序?qū)懽鞯某跗谶€不太明顯,隨著代碼逐漸膨脹,會(huì)越會(huì)越讓人難以忍受。
3、數(shù)據(jù)單向依賴,單向更新
UI圍繞的數(shù)據(jù)進(jìn)行展現(xiàn)與更新,在這個(gè)過程中,所以對數(shù)據(jù)的操作應(yīng)該進(jìn)行封裝,而不是散落在UI程序在各個(gè)角落,數(shù)據(jù)的更新、獲取和UI傳遞消息時(shí),應(yīng)該單向操作,如果出現(xiàn)循環(huán)處理的情況,在以后維護(hù)調(diào)試的BUG的過程中會(huì)變得比較困難,導(dǎo)致維護(hù)效率下降。
posted @
2012-08-31 17:00 胡滿超 閱讀(1051) |
評論 (0) |
編輯 收藏
posted @
2012-03-23 17:16 胡滿超 閱讀(6091) |
評論 (1) |
編輯 收藏
在 Windows x64 上共有2種查看方式。一種用于 32-bit 應(yīng)用程序,另一種用于 x64 應(yīng)用程序。默認(rèn)情況下,32-bit 應(yīng)用程序運(yùn)行在 x64 系統(tǒng)的 WOW64 模式下時(shí),只允許使用 32-bit 查看方式。使用
SetRegView 64 將允許安裝程序在 x64 中訪問注冊表鍵值。恢復(fù)訪問32位注冊表使用
SetRegView 32。
它將影響
DeleteRegKey,
DeleteRegValue,
EnumRegKey,
EnumRegValue,
ReadRegDWORD,
ReadRegStr,
WriteRegBin,
WriteRegDWORD,
WriteRegStr 和
WriteRegExpandStr。
posted @
2012-03-09 10:29 胡滿超 閱讀(1594) |
評論 (0) |
編輯 收藏
轉(zhuǎn)自:http://www.ibm.com/developerworks/cn/linux/l-cn-valgrind/
Valgrind 概述
體系結(jié)構(gòu)
Valgrind是一套Linux下,開放源代碼(GPL V2)的仿真調(diào)試工具的集合。Valgrind由內(nèi)核(core)以及基于內(nèi)核的其他調(diào)試工具組成。內(nèi)核類似于一個(gè)框架(framework),它模擬了 一個(gè)CPU環(huán)境,并提供服務(wù)給其他工具;而其他工具則類似于插件 (plug-in),利用內(nèi)核提供的服務(wù)完成各種特定的內(nèi)存調(diào)試任務(wù)。Valgrind的體系結(jié)構(gòu)如下圖所示:
圖 1 Valgrind 體系結(jié)構(gòu)
Valgrind包括如下一些工具:
- Memcheck。這是valgrind應(yīng)用最廣泛的工具,一個(gè)重量級(jí)的內(nèi)存檢查器,能夠發(fā)現(xiàn)開發(fā)中絕大多數(shù)內(nèi)存錯(cuò)誤使用情況,比如:使用未初始化的內(nèi)存,使用已經(jīng)釋放了的內(nèi)存,內(nèi)存訪問越界等。這也是本文將重點(diǎn)介紹的部分。
- Callgrind。它主要用來檢查程序中函數(shù)調(diào)用過程中出現(xiàn)的問題。
- Cachegrind。它主要用來檢查程序中緩存使用出現(xiàn)的問題。
- Helgrind。它主要用來檢查多線程程序中出現(xiàn)的競爭問題。
- Massif。它主要用來檢查程序中堆棧使用中出現(xiàn)的問題。
- Extension。可以利用core提供的功能,自己編寫特定的內(nèi)存調(diào)試工具。
Linux 程序內(nèi)存空間布局
要發(fā)現(xiàn)Linux下的內(nèi)存問題,首先一定要知道在Linux下,內(nèi)存是如何被分配的?下圖展示了一個(gè)典型的Linux C程序內(nèi)存空間布局:
圖 2: 典型內(nèi)存空間布局
一個(gè)典型的Linux C程序內(nèi)存空間由如下幾部分組成:
- 代碼段(.text)。這里存放的是CPU要執(zhí)行的指令。代碼段是可共享的,相同的代碼在內(nèi)存中只會(huì)有一個(gè)拷貝,同時(shí)這個(gè)段是只讀的,防止程序由于錯(cuò)誤而修改自身的指令。
- 初始化數(shù)據(jù)段(.data)。這里存放的是程序中需要明確賦初始值的變量,例如位于所有函數(shù)之外的全局變量:int val=100。需要強(qiáng)調(diào)的是,以上兩段都是位于程序的可執(zhí)行文件中,內(nèi)核在調(diào)用exec函數(shù)啟動(dòng)該程序時(shí)從源程序文件中讀入。
- 未初始化數(shù)據(jù)段(.bss)。位于這一段中的數(shù)據(jù),內(nèi)核在執(zhí)行該程序前,將其初始化為0或者null。例如出現(xiàn)在任何函數(shù)之外的全局變量:int sum;
- 堆(Heap)。這個(gè)段用于在程序中進(jìn)行動(dòng)態(tài)內(nèi)存申請,例如經(jīng)常用到的malloc,new系列函數(shù)就是從這個(gè)段中申請內(nèi)存。
- 棧(Stack)。函數(shù)中的局部變量以及在函數(shù)調(diào)用過程中產(chǎn)生的臨時(shí)變量都保存在此段中。
內(nèi)存檢查原理
Memcheck檢測內(nèi)存問題的原理如下圖所示:
圖 3 內(nèi)存檢查原理
Memcheck 能夠檢測出內(nèi)存問題,關(guān)鍵在于其建立了兩個(gè)全局表。
- Valid-Value 表:
對于進(jìn)程的整個(gè)地址空間中的每一個(gè)字節(jié)(byte),都有與之對應(yīng)的 8 個(gè) bits;對于 CPU 的每個(gè)寄存器,也有一個(gè)與之對應(yīng)的 bit 向量。這些 bits 負(fù)責(zé)記錄該字節(jié)或者寄存器值是否具有有效的、已初始化的值。
- Valid-Address 表
對于進(jìn)程整個(gè)地址空間中的每一個(gè)字節(jié)(byte),還有與之對應(yīng)的 1 個(gè) bit,負(fù)責(zé)記錄該地址是否能夠被讀寫。
檢測原理:
- 當(dāng)要讀寫內(nèi)存中某個(gè)字節(jié)時(shí),首先檢查這個(gè)字節(jié)對應(yīng)的 A bit。如果該A bit顯示該位置是無效位置,memcheck 則報(bào)告讀寫錯(cuò)誤。
- 內(nèi)核(core)類似于一個(gè)虛擬的 CPU 環(huán)境,這樣當(dāng)內(nèi)存中的某個(gè)字節(jié)被加載到真實(shí)的 CPU 中時(shí),該字節(jié)對應(yīng)的 V bit 也被加載到虛擬的 CPU 環(huán)境中。一旦寄存器中的值,被用來產(chǎn)生內(nèi)存地址,或者該值能夠影響程序輸出,則 memcheck 會(huì)檢查對應(yīng)的V bits,如果該值尚未初始化,則會(huì)報(bào)告使用未初始化內(nèi)存錯(cuò)誤。
回頁首
Valgrind 使用
第一步:準(zhǔn)備好程序
為了使valgrind發(fā)現(xiàn)的錯(cuò)誤更精確,如能夠定位到源代碼行,建議在編譯時(shí)加上-g參數(shù),編譯優(yōu)化選項(xiàng)請選擇O0,雖然這會(huì)降低程序的執(zhí)行效率。
這里用到的示例程序文件名為:sample.c(如下所示),選用的編譯器為gcc。
生成可執(zhí)行程序 gcc –g –O0 sample.c –o sample
清單 1
第二步:在valgrind下,運(yùn)行可執(zhí)行程序。
利用valgrind調(diào)試內(nèi)存問題,不需要重新編譯源程序,它的輸入就是二進(jìn)制的可執(zhí)行程序。調(diào)用Valgrind的通用格式是:valgrind [valgrind-options] your-prog [your-prog-options]
Valgrind 的參數(shù)分為兩類,一類是 core 的參數(shù),它對所有的工具都適用;另外一類就是具體某個(gè)工具如 memcheck 的參數(shù)。Valgrind 默認(rèn)的工具就是 memcheck,也可以通過“--tool=tool name”指定其他的工具。Valgrind 提供了大量的參數(shù)滿足你特定的調(diào)試需求,具體可參考其用戶手冊。
這個(gè)例子將使用 memcheck,于是可以輸入命令入下:valgrind <Path>/sample.
第三步:分析 valgrind 的輸出信息。
以下是運(yùn)行上述命令后的輸出。
清單 2
- 左邊顯示類似行號(hào)的數(shù)字(32372)表示的是 Process ID。
- 最上面的紅色方框表示的是 valgrind 的版本信息。
- 中間的紅色方框表示 valgrind 通過運(yùn)行被測試程序,發(fā)現(xiàn)的內(nèi)存問題。通過閱讀這些信息,可以發(fā)現(xiàn):
- 這是一個(gè)對內(nèi)存的非法寫操作,非法寫操作的內(nèi)存是4 bytes。
- 發(fā)生錯(cuò)誤時(shí)的函數(shù)堆棧,以及具體的源代碼行號(hào)。
- 非法寫操作的具體地址空間。
- 最下面的紅色方框是對發(fā)現(xiàn)的內(nèi)存問題和內(nèi)存泄露問題的總結(jié)。內(nèi)存泄露的大小(40 bytes)也能夠被檢測出來。
示例程序顯然有兩個(gè)問題,一是fun函數(shù)中動(dòng)態(tài)申請的堆內(nèi)存沒有釋放;二是對堆內(nèi)存的訪問越界。這兩個(gè)問題均被valgrind發(fā)現(xiàn)。
回頁首
利用Memcheck發(fā)現(xiàn)常見的內(nèi)存問題
在Linux平臺(tái)開發(fā)應(yīng)用程序時(shí),最常遇見的問題就是錯(cuò)誤的使用內(nèi)存,我們總結(jié)了常見了內(nèi)存錯(cuò)誤使用情況,并說明了如何用valgrind將其檢測出來。
使用未初始化的內(nèi)存
問題分析:
對于位于程序中不同段的變量,其初始值是不同的,全局變量和靜態(tài)變量初始值為0,而局部變量和動(dòng)態(tài)申請的變量,其初始值為隨機(jī)值。如果程序使用了為隨機(jī)值的變量,那么程序的行為就變得不可預(yù)期。
下面的程序就是一種常見的,使用了未初始化的變量的情況。數(shù)組a是局部變量,其初始值為隨機(jī)值,而在初始化時(shí)并沒有給其所有數(shù)組成員初始化,如此在接下來使用這個(gè)數(shù)組時(shí)就潛在有內(nèi)存問題。
清單 3
結(jié)果分析:
假設(shè)這個(gè)文件名為:badloop.c,生成的可執(zhí)行程序?yàn)?strong>badloop。用memcheck對其進(jìn)行測試,輸出如下。
清單 4
輸出結(jié)果顯示,在該程序第11行中,程序的跳轉(zhuǎn)依賴于一個(gè)未初始化的變量。準(zhǔn)確的發(fā)現(xiàn)了上述程序中存在的問題。
內(nèi)存讀寫越界
問題分析:
這種情況是指:訪問了你不應(yīng)該/沒有權(quán)限訪問的內(nèi)存地址空間,比如訪問數(shù)組時(shí)越界;對動(dòng)態(tài)內(nèi)存訪問時(shí)超出了申請的內(nèi)存大小范圍。下面的程序就是一個(gè) 典型的數(shù)組越界問題。pt是一個(gè)局部數(shù)組變量,其大小為4,p初始指向pt數(shù)組的起始地址,但在對p循環(huán)疊加后,p超出了pt數(shù)組的范圍,如果此時(shí)再對p 進(jìn)行寫操作,那么后果將不可預(yù)期。
清單 5
結(jié)果分析:
假設(shè)這個(gè)文件名為badacc.cpp,生成的可執(zhí)行程序?yàn)閎adacc,用memcheck對其進(jìn)行測試,輸出如下。
清單 6
輸出結(jié)果顯示,在該程序的第15行,進(jìn)行了非法的寫操作;在第16行,進(jìn)行了非法讀操作。準(zhǔn)確地發(fā)現(xiàn)了上述問題。
內(nèi)存覆蓋
問題分析:
C 語言的強(qiáng)大和可怕之處在于其可以直接操作內(nèi)存,C 標(biāo)準(zhǔn)庫中提供了大量這樣的函數(shù),比如 strcpy, strncpy, memcpy, strcat 等,這些函數(shù)有一個(gè)共同的特點(diǎn)就是需要設(shè)置源地址 (src),和目標(biāo)地址(dst),src 和 dst 指向的地址不能發(fā)生重疊,否則結(jié)果將不可預(yù)期。
下面就是一個(gè) src 和 dst 發(fā)生重疊的例子。在 15 與 17 行中,src 和 dst 所指向的地址相差 20,但指定的拷貝長度卻是 21,這樣就會(huì)把之前的拷貝值覆蓋。第 24 行程序類似,src(x+20) 與 dst(x) 所指向的地址相差 20,但 dst 的長度卻為 21,這樣也會(huì)發(fā)生內(nèi)存覆蓋。
清單 7
結(jié)果分析:
假設(shè)這個(gè)文件名為 badlap.cpp,生成的可執(zhí)行程序?yàn)?badlap,用 memcheck 對其進(jìn)行測試,輸出如下。
清單 8
輸出結(jié)果顯示上述程序中第15,17,24行,源地址和目標(biāo)地址設(shè)置出現(xiàn)重疊。準(zhǔn)確的發(fā)現(xiàn)了上述問題。
動(dòng)態(tài)內(nèi)存管理錯(cuò)誤
問題分析:
常見的內(nèi)存分配方式分三種:靜態(tài)存儲(chǔ),棧上分配,堆上分配。全局變量屬于靜態(tài)存儲(chǔ),它們是在編譯時(shí)就被分配了存儲(chǔ)空間,函數(shù)內(nèi)的局部變量屬于棧上分 配,而最靈活的內(nèi)存使用方式當(dāng)屬堆上分配,也叫做內(nèi)存動(dòng)態(tài)分配了。常用的內(nèi)存動(dòng)態(tài)分配函數(shù)包括:malloc, alloc, realloc, new等,動(dòng)態(tài)釋放函數(shù)包括free, delete。
一旦成功申請了動(dòng)態(tài)內(nèi)存,我們就需要自己對其進(jìn)行內(nèi)存管理,而這又是最容易犯錯(cuò)誤的。下面的一段程序,就包括了內(nèi)存動(dòng)態(tài)管理中常見的錯(cuò)誤。
清單 9
常見的內(nèi)存動(dòng)態(tài)管理錯(cuò)誤包括:
由于 C++ 兼容 C,而 C 與 C++ 的內(nèi)存申請和釋放函數(shù)是不同的,因此在 C++ 程序中,就有兩套動(dòng)態(tài)內(nèi)存管理函數(shù)。一條不變的規(guī)則就是采用 C 方式申請的內(nèi)存就用 C 方式釋放;用 C++ 方式申請的內(nèi)存,用 C++ 方式釋放。也就是用 malloc/alloc/realloc 方式申請的內(nèi)存,用 free 釋放;用 new 方式申請的內(nèi)存用 delete 釋放。在上述程序中,用 malloc 方式申請了內(nèi)存卻用 delete 來釋放,雖然這在很多情況下不會(huì)有問題,但這絕對是潛在的問題。
申請了多少內(nèi)存,在使用完成后就要釋放多少。如果沒有釋放,或者少釋放了就是內(nèi)存泄露;多釋放了也會(huì)產(chǎn)生問題。上述程序中,指針p和pt指向的是同一塊內(nèi)存,卻被先后釋放兩次。
本質(zhì)上說,系統(tǒng)會(huì)在堆上維護(hù)一個(gè)動(dòng)態(tài)內(nèi)存鏈表,如果被釋放,就意味著該塊內(nèi)存可以繼續(xù)被分配給其他部分,如果內(nèi)存被釋放后再訪問,就可能覆蓋其他部分的信息,這是一種嚴(yán)重的錯(cuò)誤,上述程序第16行中就在釋放后仍然寫這塊內(nèi)存。
結(jié)果分析:
假設(shè)這個(gè)文件名為badmac.cpp,生成的可執(zhí)行程序?yàn)閎admac,用memcheck對其進(jìn)行測試,輸出如下。
清單 10
輸出結(jié)果顯示,第14行分配和釋放函數(shù)不一致;第16行發(fā)生非法寫操作,也就是往釋放后的內(nèi)存地址寫值;第17行釋放內(nèi)存函數(shù)無效。準(zhǔn)確地發(fā)現(xiàn)了上述三個(gè)問題。
內(nèi)存泄露
問題描述:
內(nèi)存泄露(Memory leak)指的是,在程序中動(dòng)態(tài)申請的內(nèi)存,在使用完后既沒有釋放,又無法被程序的其他部分訪問。內(nèi)存泄露是在開發(fā)大型程序中最令人頭疼的問題,以至于有 人說,內(nèi)存泄露是無法避免的。其實(shí)不然,防止內(nèi)存泄露要從良好的編程習(xí)慣做起,另外重要的一點(diǎn)就是要加強(qiáng)單元測試(Unit Test),而memcheck就是這樣一款優(yōu)秀的工具。
下面是一個(gè)比較典型的內(nèi)存泄露案例。main函數(shù)調(diào)用了mk函數(shù)生成樹結(jié)點(diǎn),可是在調(diào)用完成之后,卻沒有相應(yīng)的函數(shù):nodefr釋放內(nèi)存,這樣內(nèi)存中的這個(gè)樹結(jié)構(gòu)就無法被其他部分訪問,造成了內(nèi)存泄露。
在一個(gè)單獨(dú)的函數(shù)中,每個(gè)人的內(nèi)存泄露意識(shí)都是比較強(qiáng)的。但很多情況下,我們都會(huì)對malloc/free 或new/delete做一些包裝,以符合我們特定的需要,無法做到在一個(gè)函數(shù)中既使用又釋放。這個(gè)例子也說明了內(nèi)存泄露最容易發(fā)生的地方:即兩個(gè)部分的 接口部分,一個(gè)函數(shù)申請內(nèi)存,一個(gè)函數(shù)釋放內(nèi)存。并且這些函數(shù)由不同的人開發(fā)、使用,這樣造成內(nèi)存泄露的可能性就比較大了。這需要養(yǎng)成良好的單元測試習(xí) 慣,將內(nèi)存泄露消滅在初始階段。
清單 11
清單 11.2
清單 11.3
結(jié)果分析:
假設(shè)上述文件名位tree.h, tree.cpp, badleak.cpp,生成的可執(zhí)行程序?yàn)閎adleak,用memcheck對其進(jìn)行測試,輸出如下。
清單 12
該示例程序是生成一棵樹的過程,每個(gè)樹節(jié)點(diǎn)的大小為12(考慮內(nèi)存對齊),共8個(gè)節(jié)點(diǎn)。從上述輸出可以看出,所有的內(nèi)存泄露都被發(fā)現(xiàn)。 Memcheck將內(nèi)存泄露分為兩種,一種是可能的內(nèi)存泄露(Possibly lost),另外一種是確定的內(nèi)存泄露(Definitely lost)。Possibly lost 是指仍然存在某個(gè)指針能夠訪問某塊內(nèi)存,但該指針指向的已經(jīng)不是該內(nèi)存首地址。Definitely lost 是指已經(jīng)不能夠訪問這塊內(nèi)存。而Definitely lost又分為兩種:直接的(direct)和間接的(indirect)。直接和間接的區(qū)別就是,直接是沒有任何指針指向該內(nèi)存,間接是指指向該內(nèi)存的 指針都位于內(nèi)存泄露處。在上述的例子中,根節(jié)點(diǎn)是directly lost,而其他節(jié)點(diǎn)是indirectly lost。
回頁首
總結(jié)
本文介紹了valgrind的體系結(jié)構(gòu),并重點(diǎn)介紹了其應(yīng)用最廣泛的工具:memcheck。闡述了memcheck發(fā)現(xiàn)內(nèi)存問題的基本原理,基本 使用方法,以及利用memcheck如何發(fā)現(xiàn)目前開發(fā)中最廣泛的五大類內(nèi)存問題。在項(xiàng)目中盡早的發(fā)現(xiàn)內(nèi)存問題,能夠極大地提高開發(fā)效率,valgrind 就是能夠幫助你實(shí)現(xiàn)這一目標(biāo)的出色工具。
參考資料
關(guān)于作者
楊經(jīng),他的技術(shù)興趣包括自動(dòng)化測試與linux系統(tǒng)管理。目前是IBM中國系統(tǒng)與技術(shù)實(shí)驗(yàn)室(CSTL)的軟件工程師,從事中小型企業(yè)(SME)服務(wù)器的測試工作,可以通過cdlyangj@cn.ibm.com與他聯(lián)系。
posted @
2011-12-30 14:24 胡滿超 閱讀(333) |
評論 (0) |
編輯 收藏
新建一個(gè)DEF文件(右鍵Project->Add->New Item->.def)
加入
EXPORTS
fn_function @ 1
重新編譯就OK了
參考鏈接:
http://blog.csdn.net/cglover/article/details/1621685
posted @
2011-11-21 17:45 胡滿超 閱讀(977) |
評論 (0) |
編輯 收藏
Set objshell = CreateObject("wscript.shell")
strDomainDnsName = LCase(objshell.ExpandEnvironmentStrings("%USERDNSDOMAIN%"))
If strDomainDnsName = "%USERDNSDOMAIN%" Then
WScript.Echo "workgroup"
Else
WScript.Echo "Domain"
End if
本文出自 “okhelper” 博客,請務(wù)必保留此出處http://okhelper.blog.51cto.com/313500/197249
注意:下面的鏈接提供了7種方法
http://www.robvanderwoude.com/vbstech_network_names_domain.php
Environment Variable |
VBScript Code: |
Set wshShell = WScript.CreateObject( "WScript.Shell" ) strUserDomain = wshShell.ExpandEnvironmentStrings( "%USERDOMAIN%" ) WScript.Echo "User Domain: " & strUserDomain |
Requirements: |
Windows version: | NT 4, 2000, XP, Server 2003, Vista or Server 2008 |
Network: | Stand-alone, workgroup, NT domain, or AD |
Client software: | N/A |
Script Engine: | WSH |
Summarized: | Works in Windows NT 4 or later, *.vbs with CSCRIPT.EXE or WSCRIPT.EXE only. Doesn't work in Windows 95, 98 or ME, nor in Internet Explorer (HTAs). |
|
[Back to the top of this page] |
|
WshNetwork |
VBScript Code: |
Set wshNetwork = WScript.CreateObject( "WScript.Network" ) strUserDomain = wshNetwork.UserDomain WScript.Echo "User Domain: " & strUserDomain |
Requirements: |
Windows version: | Windows 98, ME, NT 4, 2000, XP, Server 2003, Vista, Server 2008 |
Network: | Stand-alone, workgroup, NT domain, or AD |
Client software: | Windows Script 5.6 for Windows 98, ME, and NT 4 (no longer available for download?) |
Script Engine: | WSH |
Summarized: | Works in Windows 98 or later, *.vbs with CSCRIPT.EXE or WSCRIPT.EXE only. Doesn't work in Windows 95, nor in Internet Explorer (HTAs). |
|
[Back to the top of this page] |
|
ADSI (WinNTSystemInfo) |
VBScript Code: |
Set objSysInfo = CreateObject( "WinNTSystemInfo" ) strUserDomain = objSysInfo.DomainName WScript.Echo "User Domain: " & strUserDomain |
Requirements: |
Windows version: | 2000, XP, Server 2003, Vista or Server 2008 (95, 98, ME, NT 4 with Active Directory client extension) |
Network: | Stand-alone, workgroup, NT domain, or AD |
Client software: | Active Directory client extension for Windows 95, 98, ME or NT 4 |
Script Engine: | any |
Summarized: | Can work in any Windows version, but Active Directory client extension is required for Windows 95, 98, ME or NT 4. Can be used in *.vbs with CSCRIPT.EXE or WSCRIPT.EXE, as well as in HTAs. |
|
[Back to the top of this page] |
|
ADSI (ADSystemInfo) |
VBScript Code: |
Set objSysInfo = CreateObject( "ADSystemInfo" ) strUserDomain = objSysInfo.DomainName WScript.Echo "User Domain: " & strUserDomain |
Requirements: |
Windows version: | 2000, XP, Server 2003, Vista or Server 2008 (95, 98, ME, NT 4 with Active Directory client extension) |
Network: | Only AD domain members |
Client software: | Active Directory client extension for Windows 95, 98, ME or NT 4 |
Script Engine: | any |
Summarized: | For AD domain members only. Can work in any Windows version, but Active Directory client extension is required for Windows 95, 98, ME or NT 4 SP4. Can be used in *.vbs with CSCRIPT.EXE or WSCRIPT.EXE, as well as in HTAs. Doesn't work on stand-alones, workgroup members or members of NT domains. |
|
[Back to the top of this page] |
|
WMI (Win32_ComputerSystem) |
VBScript Code: |
Set objWMISvc = GetObject( "winmgmts:\\.\root\cimv2" ) Set colItems = objWMISvc.ExecQuery( "Select * from Win32_ComputerSystem", , 48 ) For Each objItem in colItems strComputerDomain = objItem.Domain If objItem.PartOfDomain Then WScript.Echo "Computer Domain: " & strComputerDomain Else WScript.Echo "Workgroup: " & strComputerDomain End If Next |
Requirements: |
Windows version: | XP, Server 2003, Vista or Server 2008 |
Network: | Stand-alone, workgroup, NT domain, or AD |
Client software: | N/A |
Script Engine: | any |
Summarized: | Works in Windows XP and later. Can be used in *.vbs with CSCRIPT.EXE or WSCRIPT.EXE, as well as in HTAs. |
|
[Back to the top of this page] |
|
WMI (Win32_NTDomain) |
VBScript Code: |
Set objWMISvc = GetObject( "winmgmts:\\.\root\cimv2" ) Set colItems = objWMISvc.ExecQuery( "Select * from Win32_NTDomain", , 48 ) For Each objItem in colItems strComputerDomain = objItem.DomainName WScript.Echo "Computer Domain: " & strComputerDomain Next |
Requirements: |
Windows version: | XP, Server 2003, Vista or Server 2008 |
Network: | NT domain, or AD |
Client software: | N/A |
Script Engine: | any |
Summarized: | Will work only on AD or NT domain members running Windows XP or later. Can be used in *.vbs with CSCRIPT.EXE or WSCRIPT.EXE, as well as in HTAs. Doesn't work in Windows 95, 98, ME, NT 4, or 2000. Doesn't work on stand-alones or workgroup members. |
|
[Back to the top of this page] |
|
System Scripting Runtime |
VBScript Code: |
Set objIP = CreateObject( "SScripting.IPNetwork" ) strComputerDomain = objIP.Domain WScript.Echo "Computer Domain: " & strComputerDomain |
Requirements: |
Windows version: | any |
Network: | TCP/IP |
Client software: | System Scripting Runtime |
Script Engine: | any |
Summarized: | Works in any Windows version with System Scripting Runtime is installed, with any script engine. |
posted @
2011-09-26 10:09 胡滿超 閱讀(760) |
評論 (0) |
編輯 收藏
摘要: 轉(zhuǎn)自:http://www.cnblogs.com/k-eckel/articles/188489.html深入分析MFC文檔視圖結(jié)構(gòu)(項(xiàng)目實(shí)踐) k_eckel:http://www.mscenter.edu.cn/blog/k_eckel 文檔視圖結(jié)構(gòu)(Document/View Architecture)是MFC的精髓...
閱讀全文
posted @
2011-08-03 11:13 胡滿超 閱讀(1515) |
評論 (0) |
編輯 收藏