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

posted @
2012-11-16 13:37 胡滿超 閱讀(368) |
評論 (0) |
編輯 收藏
企業(yè)戰(zhàn)略規(guī)劃制定:一個從公司愿景,到經(jīng)營計劃,到各產(chǎn)品線的愿景,及業(yè)務(wù)計劃,再到產(chǎn)品平臺以及核心技術(shù)需求,并落實到資源規(guī)劃以及各種激勵機制的配套保證的總體流程
戰(zhàn)略規(guī)劃分三個層次:
1、 頂層設(shè)計,戰(zhàn)略研究層
2、 業(yè)務(wù)層,產(chǎn)品線戰(zhàn)略規(guī)劃層
3、 支撐層,資源配置管理改進層
產(chǎn)品戰(zhàn)略的W型八個步驟
技術(shù)型企業(yè)組織績效指標:
1、 生存類能力指標:財務(wù)指標,交付指標,
2、 可持續(xù)發(fā)展能力指標:新業(yè)務(wù)占收入的比重,核心技術(shù)和平臺帶來的收入占比
3、 核心競爭能力指標:公共模塊共享率,人員結(jié)構(gòu)合理性及任職資料提升率,引導(dǎo)客戶需求與規(guī)劃能力
產(chǎn)品線的核心考核指標是組織績效:對市場成功和財務(wù)成功負責(zé)
個人績效:只能產(chǎn)品線有利潤,組織績效成功,才有意義
企業(yè)增加利潤的路徑:
1、 進入新市場
2、 開發(fā)新業(yè)務(wù)
3、 改變商業(yè)模式
4、 降低成本:研發(fā)的首要目的是提高老產(chǎn)品的利潤,其次是開發(fā)新產(chǎn)品,新技術(shù)
5、 提高價格
企業(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 胡滿超 閱讀(354) |
評論 (0) |
編輯 收藏
IPD介紹

研發(fā)的六種產(chǎn)出模式:
1、 基礎(chǔ)研究,發(fā)明和標準
2、 應(yīng)用開發(fā),將非成熟的應(yīng)用技術(shù)變成成熟的技術(shù)
3、 項目開發(fā),一次性的定制
4、 產(chǎn)品開發(fā),內(nèi)部共享模塊與產(chǎn)品,外部銷售的產(chǎn)品,可批量,可重復(fù),可復(fù)制生產(chǎn)
5、 解決方案,以產(chǎn)品為核心,為客戶做的跨產(chǎn)品或跨領(lǐng)域集成方案
6、 服務(wù)和運營,服務(wù)、運營、維護獲取收益
產(chǎn)品開發(fā)貨架層次:器件、組件、部件、單機、整機、子系統(tǒng)、系統(tǒng)
產(chǎn)品分類:
1、 內(nèi)部共享產(chǎn)品:器件、組件、部件
2、 面向細分客戶群的產(chǎn)品:部件、單機、整機、子系統(tǒng)(能力強的公司)
3、 解決方案級產(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ā)展和演變五個階段:
1、 勞動密集型加工
2、 項目生存型
3、 產(chǎn)品擴展型
4、 運營客戶型
5、 集成產(chǎn)業(yè)鏈型
產(chǎn)品開發(fā)方式:
1、 先開發(fā)技術(shù),然后做通用產(chǎn)品,再銷售
技術(shù)開發(fā)->產(chǎn)品開發(fā)->形成產(chǎn)品->銷售渠道->通用客戶需求
缺點:容易被細分市場產(chǎn)品替代,技術(shù)一旦落后沒有后續(xù)產(chǎn)出
2、 客戶需求,尋找技術(shù),完成定制
客戶需求->營銷渠道->確定交付->投入開發(fā)->技術(shù)突破
缺點:技術(shù)開發(fā)有風(fēng)險;一個個項目做,企業(yè)很難做大;質(zhì)量不易保證;人員沒有專業(yè)發(fā)展通道,容易流失;項目越多,管理越難
集成產(chǎn)品開發(fā):
1、 產(chǎn)品開發(fā)與技術(shù)開發(fā)、平臺開發(fā)分離;
2、 技術(shù)和平臺開發(fā)先行,解決技術(shù)突破;
3、 產(chǎn)品開發(fā)按細分客戶群需求
集成產(chǎn)品開發(fā)和技術(shù)開發(fā)特點:
1、 產(chǎn)品開發(fā):強調(diào)基于市場需求和共享平臺,對市場和財務(wù)的成功負責(zé)
2、 技術(shù)開發(fā):自己掌握業(yè)界成熟的技術(shù),做成貨架,供產(chǎn)品開發(fā)時共享,以縮短產(chǎn)品開發(fā)周期
集成產(chǎn)品開發(fā)三種產(chǎn)品形態(tài):
1、 產(chǎn)品大版本V:平臺版本
2、 細分客戶群版本R:交付給用客戶產(chǎn)品,四要素:客戶及競爭需求、功能與技術(shù)需求、時間、成本
3、 客戶定制版本M:在R版本的基礎(chǔ)上針對具體客戶的個性化版本
產(chǎn)品開發(fā)四個范疇:技術(shù)開發(fā)、市場開發(fā)、生產(chǎn)和服務(wù)開發(fā)、資料包開發(fā)
產(chǎn)品開發(fā)的步驟:
1、 先進行市場開發(fā),細分客戶群,尋找賣點和商業(yè)模式,尋找市場和財務(wù)成功的要素;
2、 根據(jù)產(chǎn)品需求進行分解與分配,進行技術(shù)開發(fā)
3、 根據(jù)技術(shù)要求進行產(chǎn)品的可生產(chǎn)性,可安裝性,可測試性,可驗證性,可服務(wù)性開發(fā)
4、 根據(jù)產(chǎn)品大量進入市場,進行技術(shù)資料包,服務(wù)資料包和銷售工具的開發(fā)
企業(yè)研發(fā)管理發(fā)展的五個階段:
1、 單項目單產(chǎn)品階段:以項目為核心
2、 多產(chǎn)品、共享產(chǎn)品和貨架平臺階段:以產(chǎn)品為核心
3、 以共享為核心面向客戶需求階段:以客戶為核心
4、 以產(chǎn)業(yè)鏈為核心的關(guān)注利潤階段:以利潤為核心
5、 持續(xù)改進階段
集成產(chǎn)品開發(fā)管理思想:
1、 產(chǎn)品開發(fā)是一項投資
2、 必須強調(diào)基于市場的創(chuàng)新
3、 執(zhí)行技術(shù)開發(fā)與產(chǎn)品開發(fā)分離
4、 對技術(shù)進行分類管理,強調(diào)核心技術(shù),關(guān)鍵技術(shù)的自主開發(fā)
5、 跨部分的協(xié)同開發(fā),實現(xiàn)全流程全要素(市場、研發(fā)、生產(chǎn)、采購、財務(wù)協(xié)同)的管理
6、 強調(diào)CBB和平臺建設(shè),強調(diào)技術(shù)共享
7、 執(zhí)行異步開發(fā)
8、 根據(jù)產(chǎn)品的不同層次和技術(shù)開發(fā)執(zhí)行不同的結(jié)構(gòu)化開發(fā)流程
9、 強調(diào)市場和財務(wù)成功、核心競爭力的提升是研發(fā)績效考核的重要因素
要實現(xiàn)IPD要以產(chǎn)品線(產(chǎn)品)為核心進行四大重組:財務(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 胡滿超 閱讀(739) |
評論 (0) |
編輯 收藏
2011年我開始接觸一些IPD的培訓(xùn)課程,今年10.1長假期間我又參加了兩次有關(guān)IPD的外訓(xùn)課程,對IPD有了一些大概的了解,10.1過后我買了一些有關(guān)IPD的書籍開始閱讀,了解了更多的IPD的知識后使我感到十分震驚,原來產(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整個小行業(yè)人才凋零,沒有前景2、開發(fā)過程混亂,開發(fā)團隊的工作效率主要取決于leader的個人水平及工作積極性3、質(zhì)量管理較差,需求來源模糊,設(shè)計稀里糊涂,到了測試階段基本上已經(jīng)無法控制、測試人員對項目影響力較小4、文檔管理幾乎空白,屬于自覺自發(fā)的行為結(jié)果5、人員培養(yǎng)困難6、新手做設(shè)計,高手救火。。。很多很多這些問題,或大或小,或輕或重,在我閱讀完從華為走出來做IPD咨詢這些高手寫的書之后,慢慢找到了答案。IPD集成產(chǎn)品開發(fā)管理思想強調(diào):
1、 產(chǎn)品開發(fā)是一項投資
2、 必須強調(diào)基于市場的創(chuàng)新
3、 執(zhí)行技術(shù)開發(fā)與產(chǎn)品開發(fā)分離
4、 對技術(shù)進行分類管理,強調(diào)核心技術(shù),關(guān)鍵技術(shù)的自主開發(fā)
5、 跨部分的協(xié)同開發(fā),實現(xiàn)全流程全要素(市場、研發(fā)、生產(chǎn)、采購、財務(wù)協(xié)同)的管理
6、 強調(diào)CBB和平臺建設(shè),強調(diào)技術(shù)共享
7、 執(zhí)行異步開發(fā)
8、 根據(jù)產(chǎn)品的不同層次和技術(shù)開發(fā)執(zhí)行不同的結(jié)構(gòu)化開發(fā)流程
9、 強調(diào)市場和財務(wù)成功、核心競爭力的提升是研發(fā)績效考核的重要因素
除了IPD的流程之外,華為人結(jié)合了華為實踐IPD過程的經(jīng)驗與教訓(xùn),及一些成功的管理實踐,做了完整的總結(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 胡滿超 閱讀(1851) |
評論 (1) |
編輯 收藏
總結(jié)網(wǎng)上訂票系統(tǒng)常見的問題如下:
1、 高峰時段無法登陸,提示在線用戶過多
2、 訂單提交成功之后,支付環(huán)節(jié)出了問題,瀏覽器意外退出,后再登陸,發(fā)現(xiàn)登陸不上,無法在規(guī)定時間內(nèi)完成支付,購票失敗
3、 訂單提交反饋時間過長,熱門線路需要等待20分鐘甚至更長時間,才能得到反饋
4、 驗證碼輸入總是錯誤,無法完成驗證碼驗證環(huán)節(jié),無法登陸
5、 逢用戶高峰,網(wǎng)站反應(yīng)速度較慢
6、 對多瀏覽器支持不好,沒有IOS,Android應(yīng)用入口
以上問題多數(shù)都是用戶體驗的問題,用戶體驗的問題即有票源稀少的原因,更多的是對訂票系統(tǒng)使用過程中系統(tǒng)登陸困難,反應(yīng)遲鈍,訂單結(jié)果反饋太慢,意外退出等問題難以忍受。
本人并非訂票系統(tǒng)設(shè)計人員,但是通用對訂票系統(tǒng)外在的表現(xiàn)大膽猜測一下訂票系統(tǒng)的設(shè)計。
常見問題原因分析:
問題1,高峰時段無法登陸,提示在線用戶過多;
問題4,驗證碼輸入總是錯誤,無法完成驗證碼驗證環(huán)節(jié),無法登陸
無法登陸的問題,其原因顯然是前端用于處理WEB連接服務(wù)器太少或網(wǎng)絡(luò)帶寬不足所至,為了不讓更多的用戶一起連接服務(wù)器導(dǎo)致服務(wù)器較慢,只好拒絕一些用戶的登陸請求。使同時在線人數(shù)保持在一個上限以內(nèi)。
驗證碼輸入總是錯誤的問題,原因也是用于處理WEB連接服務(wù)器太少所至,為了防止一些客戶端使用“惡意”軟件,不斷自動登陸的情況,驗證碼需求由客戶端向服務(wù)器提交一個驗證請求,可以由于服務(wù)器響應(yīng)實在太慢,以至于整個響應(yīng)速度居然超過了驗證碼的有效時間。
常見問題:
問題2:訂單提交成功之后,支付環(huán)節(jié)出了問題,瀏覽器意外退出,后再登陸,發(fā)現(xiàn)登陸不上,無法在規(guī)定時間內(nèi)完成支付,購票失敗
問題3:訂單提交反饋時間過長,熱門線路需要等待20分鐘甚至更長時間,才能得到反饋
問題5:逢用戶高峰,網(wǎng)站反應(yīng)速度較慢
問題2是一個系統(tǒng)的BUG,但是可以通過一些設(shè)計來解決這個問題。
問題3,問題5,可能是由于WEB服務(wù)器與邏輯處理服務(wù)器在同一臺機器上,而導(dǎo)致服務(wù)器CPU分配了過多的時間與資源在處理用戶請求,在執(zhí)行邏輯時執(zhí)行緩慢。
如果數(shù)據(jù)庫也在同一臺服務(wù)器上,那問題可能更加嚴重。當然我相信,不在一臺服務(wù)器上的可能性比較大。
總結(jié)以上問題,其解決方案建議如下:
1、 準備更多前端WEB服務(wù)器,解決WEB前端的問題沒有別的辦法,只能加服務(wù)器,或者每個省市放一群單獨的服務(wù)器,根據(jù)用戶量進行增加,直到響應(yīng)流暢為止。
2、 可以考慮把邏輯服務(wù)器單獨分離出來,與WEB服務(wù)器分開,WEB服務(wù)器只處理WEB請求,邏輯服務(wù)器單獨運行
3、 把數(shù)據(jù)庫服務(wù)器單獨分離,并且把火車票票量數(shù)據(jù)庫與用戶訂票信息數(shù)據(jù)庫放到不同的機器上,由于大量的訂票請求會訪問火車票票量數(shù)據(jù)庫,并且會有大量訂票數(shù)據(jù)添加到用戶訂票信息數(shù)據(jù)庫中,在處理添加的邏輯占用了大量的數(shù)據(jù)庫資源,會導(dǎo)致整個系統(tǒng)變慢。如果放到同一臺機器上,必然導(dǎo)致響應(yīng)變慢。把不同性質(zhì)的數(shù)據(jù),放到不同機器、不同的數(shù)據(jù)系統(tǒng)中,可以合理的分流系統(tǒng)訪問量,使系統(tǒng)響應(yīng)加快,橫向擴展更具有彈性。
4、 把支付訂票費用放到一個單獨的網(wǎng)站進行,訂單提交成功后鎖票,之后根據(jù)訂單號可以在另外一個單獨的網(wǎng)站上進行單獨支付,支付時只要提供訂票號就可以,這樣做有很多好處:1. 避免了由于支付失敗而導(dǎo)致退出瀏覽器,卻由于在線人數(shù)過多無法登陸導(dǎo)致訂票失敗的情況,2. 電話訂票也可以在此支付,在火車站機自動售票機器上取票,這樣支付方便,也解決了異地付款取票的問題 3. 單獨支付會在一定程度上給訂票網(wǎng)站減輕訪問與處理壓力
5、 提供快遞火車票服務(wù)進行創(chuàng)收,支付成功的火車票可以進行快遞,這樣即方便訂票人也可以給鐵道部創(chuàng)收
6、 網(wǎng)站可以根據(jù)用戶訂票信息做一些有針對性網(wǎng)站廣告,如旅游、酒店廣告等進行創(chuàng)收
7、 開發(fā)出更多的手機終端軟件,擴大訂票系統(tǒng)使用的覆蓋面
8、 支持更多的瀏覽器,而不僅僅是IE
由于本人水平有限,歡迎各個高手批評指正,希望這篇文章能夠拋磚引玉,大家一起討論。
網(wǎng)上的其他類似文章:
http://cloud.it168.com/a2012/0130/1304/000001304533.shtml
posted @
2012-10-15 17:09 胡滿超 閱讀(2801) |
評論 (7) |
編輯 收藏
轉(zhuǎn)自:http://book.douban.com/annotation/19461092/
半個月前在豆瓣上看到了一本新書《數(shù)學(xué)之美》,評價很高。而因為在半年前看了《什么是數(shù)學(xué)》就對數(shù)學(xué)產(chǎn)生濃厚興趣,但苦于水平不足的我便立馬買了一本,希望能對數(shù)學(xué)多一些了解,并認真閱讀起來。 令我意外并欣喜的是,這本書里邊的數(shù)學(xué)內(nèi)容并不晦澀難懂,而且作者為了講述數(shù)學(xué)之美而搭配的一些工程實例都是和我學(xué)習(xí)并感興趣的模式識別,目標分類相關(guān)算法相關(guān)聯(lián)的。這讓我覺得撿到了意外的寶藏。 書中每一個章節(jié)都或多或少是作者親身經(jīng)歷過的,比如世界級教授的小故事,或者Google的搜索引擎原理,又或者是Google的云計算等。作者用其行云流水般的語言將各個知識點像講故事一樣有趣的敘述出來。 這本書著實讓我印象深刻,所以我把筆記分享出來,希望更多和我學(xué)習(xí)研究領(lǐng)域一樣的人會喜歡并親自閱讀這本書,并能支持作者。畢竟國內(nèi)這種書實在是太少了,也希望能有更多領(lǐng)域內(nèi)的大牛能再寫出一些這種書籍來讓我們共同提高。1. 因為需要傳播信息量的增加,不同的聲音并不能完全表達信息,語言便產(chǎn)生了。2. 當文字增加到?jīng)]有人能完全記住所有文字時,聚類和歸類就開始了。例如日代表太陽或者代表一天。3. 聚類會帶來歧義性,但上下文可以消除歧義。信息冗余是信息安全的保障。例如羅塞塔石碑上同一信息重復(fù)三次。4. 最短編碼原理即常用信息短編碼,生僻信息長編碼。5. 因為文字只是信息的載體而非信息本身,所以翻譯是可以實現(xiàn)的。6. 2012,其實是瑪雅文明采用二十進制,即四百年是一個太陽紀,而2012年恰巧是當前太陽紀的最后一年,2013年是新的太陽紀的開始,故被誤傳為世界末日。7. 字母可以看為是一維編碼,而漢字可以看為二維編碼。8. 基于統(tǒng)計的自然語言處理方法,在數(shù)學(xué)模型上和通信是相通的,甚至是相同的。9. 讓計算機處理自然語言的基本問題就是為自然語言這種上下文相關(guān)的特性建立數(shù)學(xué)模型,即統(tǒng)計語言模型(Statistical Language Modal)。10. 根據(jù)大數(shù)定理(Law of Large Numbers),只要統(tǒng)計量足夠,相對頻度就等于概率。11. 二元模型。對于p(w1,w2,…,wn)=p(w1)p(w2|w1)p(w3|w1,w2)…p(wn|w1,w2,…,wn-1)的展開問題,因為p(w3|w1,w2)難計算,p(wn|w1,w2,…,wn-1)更難計算,馬爾科夫給出了一個偷懶但是頗為有效的方法,也就是每當遇到這種情況時,就假設(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)在這個概率就變的簡單了。對應(yīng)的語言模型為2元模型(Bigram Model)。12. *N元模型。wi只與前一個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)模型,實際應(yīng)用中更多實用的是三元模型。Google的羅塞塔翻譯系統(tǒng)和語言搜索系統(tǒng)實用的是四元模型,存儲于500臺以上的Google服務(wù)器中。13. *卡茲退避法(Katz backoff),對于頻率超過一定閾值的詞,它們的概率估計就是它們在語料庫中的相對頻度,對于頻率小于這個閾值的詞,它們的概率估計就小于他們的相對頻度,出現(xiàn)次數(shù)越少,頻率下調(diào)越多。對于未看見的詞,也給予一個比較小的概率(即下調(diào)得到的頻率總和),這樣所有詞的概率估計都平滑了。這就是卡茲退避法(Katz backoff)。14. 訓(xùn)練數(shù)據(jù)通常是越多越好,通過平滑過渡的方法可以解決零概率和很小概率的問題,畢竟在數(shù)據(jù)量多的時候概率模型的參數(shù)可以估計的比較準確。15. 利用統(tǒng)計語言模型進行分詞,即最好的分詞方法應(yīng)該保證分完詞后這個句子出現(xiàn)的概率最大。根據(jù)不同應(yīng)用,漢語分詞的顆粒度大小應(yīng)該不同。16. 符合馬爾科夫假設(shè)(各個狀態(tài)st的概率分布只與它前一個狀態(tài)st-1有關(guān))的隨即過程即成為馬爾科夫過程,也稱為馬爾科夫鏈。17. 隱含馬爾科夫模型是馬爾科夫鏈的擴展,任意時刻t的狀態(tài)st是不可見的,所以觀察者沒法通過觀察到一個狀態(tài)序列s1,s2,s3,…,sT來推測轉(zhuǎn)移概率等參數(shù)。但是隱馬爾科夫模型在每個時刻t會輸出一個符號ot,而且ot和st相關(guān)且僅和ot相關(guān)。這個被稱為獨立輸出假設(shè)。其中隱含的狀態(tài)s1,s2,s3,…是一個典型的馬爾科夫鏈。18. 隱含馬爾科夫模型是機器學(xué)習(xí)主要工具之一,和幾乎所有機器學(xué)習(xí)的模型工具一樣,它需要一個訓(xùn)練算法(鮑姆-韋爾奇算法)和使用時的解碼算法(維特比算法)。掌握了這兩類算法,就基本上可以使用隱含馬爾科夫模型這個工具了。19. 鮑姆-韋爾奇算法(Baum-Welch Algorithm),首先找到一組能夠產(chǎn)生輸出序列O的模型參數(shù),這個初始模型成為Mtheta0,需要在此基礎(chǔ)上找到一個更好的模型,假定不但可以算出這個模型產(chǎn)生O的概率P(O|Mtheta0),而且能夠找到這個模型產(chǎn)生O的所有可能的路徑以及這些路徑的概率。并算出一組新的模型參數(shù)theta1,從Mtheta0到Mtheta1的過程稱為一次迭代。接下來從Mtheta1出發(fā)尋找更好的模型Mtheta2,并一直找下去,直到模型的質(zhì)量沒有明顯提高為止。這樣一直估計(Expectation)新的模型參數(shù),使得輸出的概率達到最大化(Maximization)的過程被稱為期望值最大化(Expectation-Maximization)簡稱EM過程。EM過程能保證一定能收斂到一個局部最優(yōu)點,但不能保證找到全局最優(yōu)點。因此,在一些自然語言處理的應(yīng)用中,這種無監(jiān)督的鮑姆-韋爾奇算法訓(xùn)練處的模型比有監(jiān)督的訓(xùn)練得到的模型效果略差。20. 熵,信息熵的定義為H(X)=-SumP(x)logP(x),變量的不確定性越大,熵也越大。21. 一個事物內(nèi)部會存在隨機性,也就是不確定性,假定為U,而從外部消除這個不確定性唯一的辦法是引入信息I,而需要引入的信息量取決于這個不確定性的大小,即I>U才行。當I<U時,這些信息可以消除一部分不確定性,U'=U-I。反之,如果沒有信息,任何公示或者數(shù)字的游戲都無法排除不確定性。22. 信息的作用在于消除不確定性。23. 互信息,對兩個隨機事件相關(guān)性的量化度量,即隨機事件X的不確定性或者說熵H(X),在知道隨機事件Y條件下的不確定性,或者說條件熵H(X|Y)之間的差異,即I(X;Y)=H(X)-H(X|Y)。所謂兩個事件相關(guān)性的量化度量,即在了解了其中一個Y的前提下,對消除另一個X不確定性所提供的信息量。24. 相對熵(Kullback-Leibler Divergence)也叫交叉熵,對兩個完全相同的函數(shù),他們的相對熵為零;相對熵越大,兩個函數(shù)差異越大,反之,相對熵越小,兩個函數(shù)差異越小;對于概率分布或者概率密度函數(shù),如果取值均大于零,相對熵可以度量兩個隨機分布的差異性。25. 弗里德里克·賈里尼克(Frederek Jelinek)是自然語言處理真諦的先驅(qū)者。26. 技術(shù)分為術(shù)和道兩種,具體的做事方法是術(shù),做事的原理和原則是道。術(shù)會從獨門絕技到普及再到落伍,追求術(shù)的人會很辛苦,只有掌握了道的本質(zhì)和精髓才能永遠游刃有余。27. 真理在形式上從來是簡單的,而不是復(fù)雜和含混的。28. 搜索引擎不過是一張大表,表的每一行對應(yīng)一個關(guān)鍵字,而每一個關(guān)鍵字后面跟著一組數(shù)字,是包含該關(guān)鍵詞的文獻序號。但當索引變的非常大的時候,這些索引需要通過分布式的方式存儲到不同的服務(wù)器上。29. 網(wǎng)絡(luò)爬蟲(Web Crawlers),圖論的遍歷算法和搜索引擎的關(guān)系。互聯(lián)網(wǎng)雖然復(fù)雜,但是說穿了其實就是一張大圖……可以把每一個網(wǎng)頁當做一個節(jié)點,把那些超鏈接當做連接網(wǎng)頁的弧。有了超鏈接,可以從任何一個網(wǎng)頁出發(fā),用圖的遍歷算法,自動訪問到每一個網(wǎng)頁并且把他們存儲起來。完成這個功能的程序叫網(wǎng)絡(luò)爬蟲。30. 哥尼斯堡七橋,如果一個圖能從一個頂點出發(fā),每條邊不重復(fù)的遍歷一遍回到這個頂點,那么每一個頂點的度必須為偶數(shù)。31. 構(gòu)建網(wǎng)絡(luò)爬蟲的工程要點:1.用BFS(廣度優(yōu)先搜索)還是DFS(深度優(yōu)先搜索),一般是先下載完一個網(wǎng)站,再進入下一個網(wǎng)站,即BFS的成分多一些。2.頁面的分析和URL的提取,如果有些網(wǎng)頁明明存在,但搜索引擎并沒有收錄,可能的原因之一是網(wǎng)絡(luò)爬蟲中的解析程序沒能成功解析網(wǎng)頁中不規(guī)范的腳本程序。3.記錄哪些網(wǎng)頁已經(jīng)下載過的URL表,可以用哈希表。最終,好的方法一般都采用了這樣兩個技術(shù):首先明確每臺下載服務(wù)器的分工,也就是在調(diào)度時,一看到某個URL就知道要交給哪臺服務(wù)器去下載,這樣就避免了很多服務(wù)器對同一個URL做出是否需要下載的判斷。然后,在明確分工的基礎(chǔ)上,判斷URL是否下載就可以批處理了,比如每次向哈希表(一組獨立的服務(wù)器)發(fā)送一大批詢問,或者每次更新一大批哈希表的內(nèi)容,這樣通信的次數(shù)就大大減少了。32. PageRank衡量網(wǎng)頁質(zhì)量的核心思想,在互聯(lián)網(wǎng)上,如果一個網(wǎng)頁被很多其他網(wǎng)頁所鏈接,說明它受到普遍的承認和信賴,那么它的排名就高。同時,對于來自不同網(wǎng)頁的鏈接區(qū)別對待,因為網(wǎng)頁排名高的那些網(wǎng)頁的鏈接更可靠,于是要給這些鏈接比較大的權(quán)重。33. TF-IDF(Term Frequency / Inverse Document Frequency) ,關(guān)鍵詞頻率-逆文本頻率值,其中,TF為某個網(wǎng)頁上出現(xiàn)關(guān)鍵詞的頻率,IDF為假定一個關(guān)鍵詞w在Dw個網(wǎng)頁中出現(xiàn)過,那么Dw越大,w的權(quán)重越小,反之亦然,公式為log(D/Dw)。1.一個詞預(yù)測主題的能力越強,權(quán)重越大,反之,權(quán)重越小。2.停止詞的權(quán)重為零。34. 動態(tài)規(guī)劃(Dynamic Programming)的原理,將一個尋找全程最優(yōu)的問題分解成一個個尋找局部最優(yōu)的小問題。35. 一個好的算法應(yīng)該像輕武器中最有名的AK-47沖鋒槍那樣:簡單、有效、可靠性好而且容易讀懂(易操作)而不應(yīng)該故弄玄虛。選擇簡單方案可以容易解釋每個步驟和方法背后的道理,這樣不僅便于出問題時的查錯,也容易找到今后改進的目標。36. 在實際的分類中,可以先進行奇異值分解(得到分類結(jié)果略顯粗糙但能較快得到結(jié)果),在粗分類結(jié)果的基礎(chǔ)上,利用計算向量余弦的方法(對范圍內(nèi)的分類做兩兩計算),在粗分類結(jié)果的基礎(chǔ)上,進行幾次迭代,得到比較精確的結(jié)果。37. 奇異值分解(Singular Value Decomposition),在需要用一個大矩陣A來描述成千上萬文章和幾十上百萬詞的關(guān)聯(lián)性時,計算量非常大,可以將A奇異值分解為X、B和Y三個矩陣,Amn=Xmm*Bmn*Ynn,X表示詞和詞類的相關(guān)性,Y表示文本和主題的相關(guān)性,B表示詞類和主題的相關(guān)性,其中B對角線上的元素很多值相對其他的非常小,或者為零,可以省略。對關(guān)聯(lián)矩陣A進行一次奇異值分解,就可以同時完成近義詞分類和文章的分類,同時能得到每個主題和每個詞義類之間的相關(guān)性,這個結(jié)果非常漂亮。38. 信息指紋。如果能夠找到一種函數(shù),將5000億網(wǎng)址隨即地映射到128位二進制,也就是16字節(jié)的整數(shù)空間,就稱這16字節(jié)的隨機數(shù)做該網(wǎng)址的信息指紋。信息指紋可以理解為將一段信息映射到一個多維二進制空間中的一個點,只要這個隨即函數(shù)做的好,那么不同信息對應(yīng)的點不會重合,因此這個二進制的數(shù)字就變成了原來信息所具有的獨一無二的指紋。39. 判斷兩個集合是否相同,最笨的方法是這個集合中的元素一一比較,復(fù)雜度O(squareN),稍好的是將元素排序后順序比較,復(fù)雜度O(NlogN),最完美的方法是計算這兩個集合的指紋,然后直接進行比較,計算復(fù)雜度O(N)。40. 偽隨機數(shù)產(chǎn)生器算法(Pseudo-Random Number Generator,PRNG),這是產(chǎn)生信息指紋的關(guān)鍵算法,通過他可以將任意長的整數(shù)轉(zhuǎn)換成特定長度的偽隨機數(shù)。最早的PRNG是將一個數(shù)的平方掐頭去尾取中間,當然這種方法不是很隨即,現(xiàn)在常用的是梅森旋轉(zhuǎn)算法(Mersenne Twister)。41. 在互聯(lián)網(wǎng)上加密要使用基于加密的偽隨機數(shù)產(chǎn)生器(Cryptography Secure Pseudo-Random Number Generator,CSPRNG),常用的算法有MD5或者SHA-1等標準,可以將不定長的信息變成定長的128位或者160位二進制隨機數(shù)。42. 最大熵模型(Maximum Entropy)的原理就是保留全部的不確定性,將風(fēng)險降到最小。最大熵原理指出,需要對一個隨機事件的概率分布進行預(yù)測時,我們的預(yù)測應(yīng)當滿足全部已知的條件,而對未知的情況不要做任何主觀假設(shè)。在這種情況下,概率分布最均勻,預(yù)測的風(fēng)險最小。I.Csiszar證明,對任何一組不自相矛盾的信息,這個最大熵模型不僅存在,而且是唯一的,此外,他們都有同一個非常簡單的形式-指數(shù)函數(shù)。43. 通用迭代算法(Generalized Iterative Scaling,GIS)是最原始的最大熵模型的訓(xùn)練方法。1.假定第零次迭代的初始模型為等概率的均勻分布。2.用第N次迭代的模型來估算每種信息特征在訓(xùn)練數(shù)據(jù)中的分布。如果超過了實際的,就把相應(yīng)的模型參數(shù)變小,反之變大。3.重復(fù)步驟2直至收斂。這是一種典型的期望值最大化(Expectation Maximization,EM)算法。IIS(Improved Iterative Scaling)比GIS縮短了一到兩個數(shù)量級。44. 布隆過濾器實際上是一個很長的二進制向量和一系列隨機映射的函數(shù)。45. 貝葉斯網(wǎng)絡(luò)從數(shù)學(xué)的層面講是一個加權(quán)的有向圖,是馬爾科夫鏈的擴展,而從知識論的層面看,貝葉斯網(wǎng)絡(luò)克服了馬爾科夫那種機械的線性的約束,它可以把任何有關(guān)聯(lián)的事件統(tǒng)一到它的框架下面。在網(wǎng)絡(luò)中,假定馬爾科夫假設(shè)成立,即每一個狀態(tài)只與和它直接相連的狀態(tài)有關(guān),而和他間接相連的狀態(tài)沒有直接關(guān)系,那么它就是貝葉斯網(wǎng)絡(luò)。在網(wǎng)絡(luò)中每個節(jié)點概率的計算,都可以用貝葉斯公式來進行,貝葉斯網(wǎng)絡(luò)也因此得名。由于網(wǎng)絡(luò)的每個弧都有一個可信度,貝葉斯網(wǎng)絡(luò)也被稱作信念網(wǎng)絡(luò)(Belief Networks)。46. 條件隨機場是計算聯(lián)合概率分布的有效模型。在一個隱含馬爾科夫模型中,以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都考慮進來,這樣的模型就是條件隨機場。它是一種特殊的概率圖模型(Probablistic Graph Model),它的特殊性在于,變量之間要遵守馬爾科夫假設(shè),即每個狀態(tài)的轉(zhuǎn)移概率只取決于相鄰的狀態(tài),這一點和另一種概率圖模型貝葉斯網(wǎng)絡(luò)相同,它們的不同之處在于條件隨機場是無向圖,而貝葉斯網(wǎng)絡(luò)是有向圖。47. 維特比算法(Viterbi Algoritm)是一個特殊但應(yīng)用最廣的動態(tài)規(guī)劃算法,利用動態(tài)規(guī)劃,可以解決任何一個圖中的最短路徑問題。它之所以重要,是因為凡是使用隱含馬爾科夫模型描述的問題都可以用它來解碼。1.從點S出發(fā),對于第一個狀態(tài)x1的各個節(jié)點,不妨假定有n1個,計算出S到他們的距離d(S,x1i),其中x1i代表任意狀態(tài)1的節(jié)點。因為只有一步,所以這些距離都是S到他們各自的最短距離。2.對于第二個狀態(tài)x2的所有節(jié)點,要計算出從S到他們的最短距離。d(S,x2i)=min_I=1,n1_d(S,x1j)+d(x1j,x2i),由于j有n1種可能性,需要一一計算,然后找到最小值。這樣對于第二個狀態(tài)的每個節(jié)點,需要n1次乘法計算。假定這個狀態(tài)有n2個節(jié)點,把S這些節(jié)點的距離都算一遍,就有O(n1*n2)次運算。3.按照上述方法從第二個狀態(tài)走到第三個狀態(tài)一直走到最后一個狀態(tài),這樣就得到整個網(wǎng)絡(luò)從頭到尾的最短路徑。48. 擴頻傳輸(Spread-Spectrum Transmission)和固定頻率的傳輸相比,有三點明顯的好處:1.抗干擾能力強。2.信號能量非常低,很難獲取。3.擴頻傳輸利用帶寬更充分。49. Google針對云計算給出的解決工具是MapReduce,其根本原理就是計算機算法上常見的分治算法(Divide-and-Conquer)。將一個大任務(wù)拆分成小的子任務(wù),并完成子任務(wù)的計算,這個過程叫Map,將中間結(jié)果合并成最終結(jié)果,這個過程叫Reduce。50. 邏輯回歸模型(Logistic Regression)是將一個事件出現(xiàn)的概率適應(yīng)到一條邏輯曲線(Logistic Curve)上。典型的邏輯回歸函數(shù):f(z)=e`z/e`z+1=1/1+e`-z。邏輯曲線是一條S型曲線,其特點是開始變化快,逐漸減慢,最后飽和。邏輯自回歸的好處是它的變量范圍從負無窮到正無窮,而值域范圍限制在0-1之間。因為值域的范圍在0-1之間,這樣邏輯回歸函數(shù)就可以和一個概率分別聯(lián)系起來了。因為自變量范圍在負無窮到正無窮之間,它就可以把信號組合起來,不論組合成多大或者多小的值,最后依然能得到一個概率分布。51. 期望最大化算法(Expectation Maximization Algorithm),根據(jù)現(xiàn)有的模型,計算各個觀測數(shù)據(jù)輸入到模型中的計算結(jié)果,這個過程稱為期望值計算過程(Expectation),或E過程;接下來,重新計算模型參數(shù),以最大化期望值,這個過程稱為最大化的過程(Maximization),或M過程。這一類算法都稱為EM算法,比如隱含馬爾科夫模型的訓(xùn)練方法Baum-Welch算法,以及最大熵模型的訓(xùn)練方法GIS算法。
posted @
2012-09-18 15:04 胡滿超 閱讀(469) |
評論 (0) |
編輯 收藏
http://ipseeker.cn/tools/pywb.php
posted @
2012-09-07 13:15 胡滿超 閱讀(362) |
評論 (0) |
編輯 收藏
在Windows平臺做開發(fā)肯定會接觸到UI程序的編寫,以MFC的UI開發(fā)為例,可以開發(fā)單文檔,多文檔,對話框等形式的應(yīng)用。寫一個UI程序容易,寫好卻不是一件簡單的事情。在整個代碼結(jié)構(gòu)的清晰性與可維護性方面需要多加注意。寫好UI程序需求注意以下幾點:
1、圍繞數(shù)據(jù)編程與不是圍繞UI編程
當我們拿到需求最先接觸到的就是UI的設(shè)計,也許是美工畫的,也許是設(shè)計草圖。工程師在具體設(shè)計的時候容易受UI的影響,或者干脆從UI開始編程。
這是一個錯誤的編程習(xí)慣,無論UI如何展現(xiàn)與交互,最終都應(yīng)該圍繞數(shù)據(jù)編程。拿到需求后,應(yīng)該先思考和推敲數(shù)據(jù)的設(shè)計與流轉(zhuǎn),UI不過就是數(shù)據(jù)的一種展現(xiàn)形式而已。
2、做好UI與邏輯的解耦
UI的編程會涉及到許多控件的操作,消息的處理,不知不覺,一個UI類的代碼會越寫越大,以至于一段時間以后,瀏覽和梳理都會變得不太方便。
在UI類里,除了與UI本身的操作有關(guān)的代碼以外,任何邏輯代碼都應(yīng)該與此解耦,并根據(jù)具體情況進行封裝調(diào)用。如果一個控件關(guān)聯(lián)了太多數(shù)據(jù)操作,應(yīng)該把這些操作封裝到控件的繼承類中,把一類代碼進行集中管理和維護。
上述問題,在程序?qū)懽鞯某跗谶€不太明顯,隨著代碼逐漸膨脹,會越會越讓人難以忍受。
3、數(shù)據(jù)單向依賴,單向更新
UI圍繞的數(shù)據(jù)進行展現(xiàn)與更新,在這個過程中,所以對數(shù)據(jù)的操作應(yīng)該進行封裝,而不是散落在UI程序在各個角落,數(shù)據(jù)的更新、獲取和UI傳遞消息時,應(yīng)該單向操作,如果出現(xiàn)循環(huán)處理的情況,在以后維護調(diào)試的BUG的過程中會變得比較困難,導(dǎo)致維護效率下降。
posted @
2012-08-31 17:00 胡滿超 閱讀(1055) |
評論 (0) |
編輯 收藏
posted @
2012-03-23 17:16 胡滿超 閱讀(6111) |
評論 (1) |
編輯 收藏
在 Windows x64 上共有2種查看方式。一種用于 32-bit 應(yīng)用程序,另一種用于 x64 應(yīng)用程序。默認情況下,32-bit 應(yīng)用程序運行在 x64 系統(tǒng)的 WOW64 模式下時,只允許使用 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 胡滿超 閱讀(1601) |
評論 (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)核類似于一個框架(framework),它模擬了 一個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)用最廣泛的工具,一個重量級的內(nèi)存檢查器,能夠發(fā)現(xiàn)開發(fā)中絕大多數(shù)內(nèi)存錯誤使用情況,比如:使用未初始化的內(nèi)存,使用已經(jīng)釋放了的內(nèi)存,內(nèi)存訪問越界等。這也是本文將重點介紹的部分。
- 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)存是如何被分配的?下圖展示了一個典型的Linux C程序內(nèi)存空間布局:
圖 2: 典型內(nèi)存空間布局
一個典型的Linux C程序內(nèi)存空間由如下幾部分組成:
- 代碼段(.text)。這里存放的是CPU要執(zhí)行的指令。代碼段是可共享的,相同的代碼在內(nèi)存中只會有一個拷貝,同時這個段是只讀的,防止程序由于錯誤而修改自身的指令。
- 初始化數(shù)據(jù)段(.data)。這里存放的是程序中需要明確賦初始值的變量,例如位于所有函數(shù)之外的全局變量:int val=100。需要強調(diào)的是,以上兩段都是位于程序的可執(zhí)行文件中,內(nèi)核在調(diào)用exec函數(shù)啟動該程序時從源程序文件中讀入。
- 未初始化數(shù)據(jù)段(.bss)。位于這一段中的數(shù)據(jù),內(nèi)核在執(zhí)行該程序前,將其初始化為0或者null。例如出現(xiàn)在任何函數(shù)之外的全局變量:int sum;
- 堆(Heap)。這個段用于在程序中進行動態(tài)內(nèi)存申請,例如經(jīng)常用到的malloc,new系列函數(shù)就是從這個段中申請內(nèi)存。
- 棧(Stack)。函數(shù)中的局部變量以及在函數(shù)調(diào)用過程中產(chǎn)生的臨時變量都保存在此段中。
內(nèi)存檢查原理
Memcheck檢測內(nèi)存問題的原理如下圖所示:
圖 3 內(nèi)存檢查原理
Memcheck 能夠檢測出內(nèi)存問題,關(guān)鍵在于其建立了兩個全局表。
- Valid-Value 表:
對于進程的整個地址空間中的每一個字節(jié)(byte),都有與之對應(yīng)的 8 個 bits;對于 CPU 的每個寄存器,也有一個與之對應(yīng)的 bit 向量。這些 bits 負責(zé)記錄該字節(jié)或者寄存器值是否具有有效的、已初始化的值。
- Valid-Address 表
對于進程整個地址空間中的每一個字節(jié)(byte),還有與之對應(yīng)的 1 個 bit,負責(zé)記錄該地址是否能夠被讀寫。
檢測原理:
- 當要讀寫內(nèi)存中某個字節(jié)時,首先檢查這個字節(jié)對應(yīng)的 A bit。如果該A bit顯示該位置是無效位置,memcheck 則報告讀寫錯誤。
- 內(nèi)核(core)類似于一個虛擬的 CPU 環(huán)境,這樣當內(nèi)存中的某個字節(jié)被加載到真實的 CPU 中時,該字節(jié)對應(yīng)的 V bit 也被加載到虛擬的 CPU 環(huán)境中。一旦寄存器中的值,被用來產(chǎn)生內(nèi)存地址,或者該值能夠影響程序輸出,則 memcheck 會檢查對應(yīng)的V bits,如果該值尚未初始化,則會報告使用未初始化內(nèi)存錯誤。
回頁首
Valgrind 使用
第一步:準備好程序
為了使valgrind發(fā)現(xiàn)的錯誤更精確,如能夠定位到源代碼行,建議在編譯時加上-g參數(shù),編譯優(yōu)化選項請選擇O0,雖然這會降低程序的執(zhí)行效率。
這里用到的示例程序文件名為:sample.c(如下所示),選用的編譯器為gcc。
生成可執(zhí)行程序 gcc –g –O0 sample.c –o sample
清單 1
第二步:在valgrind下,運行可執(zhí)行程序。
利用valgrind調(diào)試內(nèi)存問題,不需要重新編譯源程序,它的輸入就是二進制的可執(zhí)行程序。調(diào)用Valgrind的通用格式是:valgrind [valgrind-options] your-prog [your-prog-options]
Valgrind 的參數(shù)分為兩類,一類是 core 的參數(shù),它對所有的工具都適用;另外一類就是具體某個工具如 memcheck 的參數(shù)。Valgrind 默認的工具就是 memcheck,也可以通過“--tool=tool name”指定其他的工具。Valgrind 提供了大量的參數(shù)滿足你特定的調(diào)試需求,具體可參考其用戶手冊。
這個例子將使用 memcheck,于是可以輸入命令入下:valgrind <Path>/sample.
第三步:分析 valgrind 的輸出信息。
以下是運行上述命令后的輸出。
清單 2
- 左邊顯示類似行號的數(shù)字(32372)表示的是 Process ID。
- 最上面的紅色方框表示的是 valgrind 的版本信息。
- 中間的紅色方框表示 valgrind 通過運行被測試程序,發(fā)現(xiàn)的內(nèi)存問題。通過閱讀這些信息,可以發(fā)現(xiàn):
- 這是一個對內(nèi)存的非法寫操作,非法寫操作的內(nèi)存是4 bytes。
- 發(fā)生錯誤時的函數(shù)堆棧,以及具體的源代碼行號。
- 非法寫操作的具體地址空間。
- 最下面的紅色方框是對發(fā)現(xiàn)的內(nèi)存問題和內(nèi)存泄露問題的總結(jié)。內(nèi)存泄露的大小(40 bytes)也能夠被檢測出來。
示例程序顯然有兩個問題,一是fun函數(shù)中動態(tài)申請的堆內(nèi)存沒有釋放;二是對堆內(nèi)存的訪問越界。這兩個問題均被valgrind發(fā)現(xiàn)。
回頁首
利用Memcheck發(fā)現(xiàn)常見的內(nèi)存問題
在Linux平臺開發(fā)應(yīng)用程序時,最常遇見的問題就是錯誤的使用內(nèi)存,我們總結(jié)了常見了內(nèi)存錯誤使用情況,并說明了如何用valgrind將其檢測出來。
使用未初始化的內(nèi)存
問題分析:
對于位于程序中不同段的變量,其初始值是不同的,全局變量和靜態(tài)變量初始值為0,而局部變量和動態(tài)申請的變量,其初始值為隨機值。如果程序使用了為隨機值的變量,那么程序的行為就變得不可預(yù)期。
下面的程序就是一種常見的,使用了未初始化的變量的情況。數(shù)組a是局部變量,其初始值為隨機值,而在初始化時并沒有給其所有數(shù)組成員初始化,如此在接下來使用這個數(shù)組時就潛在有內(nèi)存問題。
清單 3
結(jié)果分析:
假設(shè)這個文件名為:badloop.c,生成的可執(zhí)行程序為badloop。用memcheck對其進行測試,輸出如下。
清單 4
輸出結(jié)果顯示,在該程序第11行中,程序的跳轉(zhuǎn)依賴于一個未初始化的變量。準確的發(fā)現(xiàn)了上述程序中存在的問題。
內(nèi)存讀寫越界
問題分析:
這種情況是指:訪問了你不應(yīng)該/沒有權(quán)限訪問的內(nèi)存地址空間,比如訪問數(shù)組時越界;對動態(tài)內(nèi)存訪問時超出了申請的內(nèi)存大小范圍。下面的程序就是一個 典型的數(shù)組越界問題。pt是一個局部數(shù)組變量,其大小為4,p初始指向pt數(shù)組的起始地址,但在對p循環(huán)疊加后,p超出了pt數(shù)組的范圍,如果此時再對p 進行寫操作,那么后果將不可預(yù)期。
清單 5
結(jié)果分析:
假設(shè)這個文件名為badacc.cpp,生成的可執(zhí)行程序為badacc,用memcheck對其進行測試,輸出如下。
清單 6
輸出結(jié)果顯示,在該程序的第15行,進行了非法的寫操作;在第16行,進行了非法讀操作。準確地發(fā)現(xiàn)了上述問題。
內(nèi)存覆蓋
問題分析:
C 語言的強大和可怕之處在于其可以直接操作內(nèi)存,C 標準庫中提供了大量這樣的函數(shù),比如 strcpy, strncpy, memcpy, strcat 等,這些函數(shù)有一個共同的特點就是需要設(shè)置源地址 (src),和目標地址(dst),src 和 dst 指向的地址不能發(fā)生重疊,否則結(jié)果將不可預(yù)期。
下面就是一個 src 和 dst 發(fā)生重疊的例子。在 15 與 17 行中,src 和 dst 所指向的地址相差 20,但指定的拷貝長度卻是 21,這樣就會把之前的拷貝值覆蓋。第 24 行程序類似,src(x+20) 與 dst(x) 所指向的地址相差 20,但 dst 的長度卻為 21,這樣也會發(fā)生內(nèi)存覆蓋。
清單 7
結(jié)果分析:
假設(shè)這個文件名為 badlap.cpp,生成的可執(zhí)行程序為 badlap,用 memcheck 對其進行測試,輸出如下。
清單 8
輸出結(jié)果顯示上述程序中第15,17,24行,源地址和目標地址設(shè)置出現(xiàn)重疊。準確的發(fā)現(xiàn)了上述問題。
動態(tài)內(nèi)存管理錯誤
問題分析:
常見的內(nèi)存分配方式分三種:靜態(tài)存儲,棧上分配,堆上分配。全局變量屬于靜態(tài)存儲,它們是在編譯時就被分配了存儲空間,函數(shù)內(nèi)的局部變量屬于棧上分 配,而最靈活的內(nèi)存使用方式當屬堆上分配,也叫做內(nèi)存動態(tài)分配了。常用的內(nèi)存動態(tài)分配函數(shù)包括:malloc, alloc, realloc, new等,動態(tài)釋放函數(shù)包括free, delete。
一旦成功申請了動態(tài)內(nèi)存,我們就需要自己對其進行內(nèi)存管理,而這又是最容易犯錯誤的。下面的一段程序,就包括了內(nèi)存動態(tài)管理中常見的錯誤。
清單 9
常見的內(nèi)存動態(tài)管理錯誤包括:
由于 C++ 兼容 C,而 C 與 C++ 的內(nèi)存申請和釋放函數(shù)是不同的,因此在 C++ 程序中,就有兩套動態(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 來釋放,雖然這在很多情況下不會有問題,但這絕對是潛在的問題。
申請了多少內(nèi)存,在使用完成后就要釋放多少。如果沒有釋放,或者少釋放了就是內(nèi)存泄露;多釋放了也會產(chǎn)生問題。上述程序中,指針p和pt指向的是同一塊內(nèi)存,卻被先后釋放兩次。
本質(zhì)上說,系統(tǒng)會在堆上維護一個動態(tài)內(nèi)存鏈表,如果被釋放,就意味著該塊內(nèi)存可以繼續(xù)被分配給其他部分,如果內(nèi)存被釋放后再訪問,就可能覆蓋其他部分的信息,這是一種嚴重的錯誤,上述程序第16行中就在釋放后仍然寫這塊內(nèi)存。
結(jié)果分析:
假設(shè)這個文件名為badmac.cpp,生成的可執(zhí)行程序為badmac,用memcheck對其進行測試,輸出如下。
清單 10
輸出結(jié)果顯示,第14行分配和釋放函數(shù)不一致;第16行發(fā)生非法寫操作,也就是往釋放后的內(nèi)存地址寫值;第17行釋放內(nèi)存函數(shù)無效。準確地發(fā)現(xiàn)了上述三個問題。
內(nèi)存泄露
問題描述:
內(nèi)存泄露(Memory leak)指的是,在程序中動態(tài)申請的內(nèi)存,在使用完后既沒有釋放,又無法被程序的其他部分訪問。內(nèi)存泄露是在開發(fā)大型程序中最令人頭疼的問題,以至于有 人說,內(nèi)存泄露是無法避免的。其實不然,防止內(nèi)存泄露要從良好的編程習(xí)慣做起,另外重要的一點就是要加強單元測試(Unit Test),而memcheck就是這樣一款優(yōu)秀的工具。
下面是一個比較典型的內(nèi)存泄露案例。main函數(shù)調(diào)用了mk函數(shù)生成樹結(jié)點,可是在調(diào)用完成之后,卻沒有相應(yīng)的函數(shù):nodefr釋放內(nèi)存,這樣內(nèi)存中的這個樹結(jié)構(gòu)就無法被其他部分訪問,造成了內(nèi)存泄露。
在一個單獨的函數(shù)中,每個人的內(nèi)存泄露意識都是比較強的。但很多情況下,我們都會對malloc/free 或new/delete做一些包裝,以符合我們特定的需要,無法做到在一個函數(shù)中既使用又釋放。這個例子也說明了內(nèi)存泄露最容易發(fā)生的地方:即兩個部分的 接口部分,一個函數(shù)申請內(nèi)存,一個函數(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í)行程序為badleak,用memcheck對其進行測試,輸出如下。
清單 12
該示例程序是生成一棵樹的過程,每個樹節(jié)點的大小為12(考慮內(nèi)存對齊),共8個節(jié)點。從上述輸出可以看出,所有的內(nèi)存泄露都被發(fā)現(xiàn)。 Memcheck將內(nèi)存泄露分為兩種,一種是可能的內(nèi)存泄露(Possibly lost),另外一種是確定的內(nèi)存泄露(Definitely lost)。Possibly lost 是指仍然存在某個指針能夠訪問某塊內(nèi)存,但該指針指向的已經(jīng)不是該內(nèi)存首地址。Definitely lost 是指已經(jīng)不能夠訪問這塊內(nèi)存。而Definitely lost又分為兩種:直接的(direct)和間接的(indirect)。直接和間接的區(qū)別就是,直接是沒有任何指針指向該內(nèi)存,間接是指指向該內(nèi)存的 指針都位于內(nèi)存泄露處。在上述的例子中,根節(jié)點是directly lost,而其他節(jié)點是indirectly lost。
回頁首
總結(jié)
本文介紹了valgrind的體系結(jié)構(gòu),并重點介紹了其應(yīng)用最廣泛的工具:memcheck。闡述了memcheck發(fā)現(xiàn)內(nèi)存問題的基本原理,基本 使用方法,以及利用memcheck如何發(fā)現(xiàn)目前開發(fā)中最廣泛的五大類內(nèi)存問題。在項目中盡早的發(fā)現(xiàn)內(nèi)存問題,能夠極大地提高開發(fā)效率,valgrind 就是能夠幫助你實現(xiàn)這一目標的出色工具。
參考資料
關(guān)于作者
楊經(jīng),他的技術(shù)興趣包括自動化測試與linux系統(tǒng)管理。目前是IBM中國系統(tǒng)與技術(shù)實驗室(CSTL)的軟件工程師,從事中小型企業(yè)(SME)服務(wù)器的測試工作,可以通過cdlyangj@cn.ibm.com與他聯(lián)系。
posted @
2011-12-30 14:24 胡滿超 閱讀(337) |
評論 (0) |
編輯 收藏
新建一個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 胡滿超 閱讀(980) |
評論 (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 胡滿超 閱讀(767) |
評論 (0) |
編輯 收藏
摘要: 轉(zhuǎn)自:http://www.cnblogs.com/k-eckel/articles/188489.html深入分析MFC文檔視圖結(jié)構(gòu)(項目實踐) k_eckel:http://www.mscenter.edu.cn/blog/k_eckel 文檔視圖結(jié)構(gòu)(Document/View Architecture)是MFC的精髓...
閱讀全文
posted @
2011-08-03 11:13 胡滿超 閱讀(1516) |
評論 (0) |
編輯 收藏