現在位置: 首頁 > 黃專家專欄 > 文章
2020年01月06日 綜合, 黃專家專欄 ⁄ 共 1012字 評論關閉
  開發者應該都知道編程界有一頭大象,代表的形象。那麼你們知道為什麼要用大象作為PHP的吉祥物嗎? 「大象」是怎麼誕生的?   1998年,我決定開始學習PHP語言。作為一個圖形設計師,我想學習如何用動態語言為自己做一個個人網站。在我學習的過程當中,我發覺到這門語言和其應用的強大本領。自然地,我開始畫關於PHP的畫了。所以,我創造了第一頭「大象」,用圖片來說明PHP的強大… 1999年我第一幅」大象」的畫   畫這張圖片只是...
閱讀全文
2014年11月03日 黃專家專欄 ⁄ 共 4632字 評論關閉
文件分片 函數 1 2 3 4 5 6 7 8 9 10 private int writeSplits(org.apache.hadoop.mapreduce.JobContext job, Path jobSubmitDir) throws IOException, InterruptedException, ClassNotFoundException { JobConf jConf = (JobConf)job.getConfiguration(); int maps; if (jConf.getUseNewMapper()) { maps = writeNewSplits(job, jobSubmitDir); } else { maps = writeOldSpli...
閱讀全文
2014年11月03日 黃專家專欄 ⁄ 共 4672字 評論關閉
整體流程 簡單的代碼就可以運行一個作業 1 2 3 4 5 6 7 8 9 10 11 12 13 14 // Create a new JobConf JobConf job = new JobConf(new Configuration(), MyJob.class); // Specify various job-specific parameters job.setJobName("myjob"); job.setInputPath(new Path("in")); job.setOutputPath(new Path("out")); job.setMapperClass(MyJob.MyMapper.class); job.setReducerClass(My...
閱讀全文
2014年10月30日 黃專家專欄 ⁄ 共 7168字 評論關閉
本文假設了解 boost::function 相關用法 首先需要包含的頭文件為 boost/function.hpp 裡面內容比較簡單 1 2 3 4 5 6 7 8 9 10 11 # if BOOST_FUNCTION_MAX_ARGS >= 0 # include <boost/function/function0.hpp> # endif # if BOOST_FUNCTION_MAX_ARGS >= 1 # include <boost/function/function1.hpp> # endif # if BOOST_FUNCTION_MAX_ARGS >= 2 # include <boos...
閱讀全文
2014年10月30日 黃專家專欄 ⁄ 共 1924字 評論關閉
boost 中包含了許多奇技淫巧的代碼,這裡分析宏的自身迭代 以這樣的宏代碼調用 1 BOOST_PP_ENUM_PARAMS(4, typename T) 它的宏展開為 1 typename T0 , typename T1 , typename T2 , typename T3 這在boost中被多用於簡化代碼量 比如 boos::function 中 下面來分析這類宏的具體實現 宏1: 1 #define BOOST_PP_ENUM_PARAMS(count, param) BOOST_PP_REPEAT(count, BOOST_PP_ENUM_PARAMS_M, pa...
閱讀全文
2014年10月30日 黃專家專欄 ⁄ 共 1704字 評論關閉
模板函數的重載遵循SFINAE原則(substitution-failure-is-not-an-error):當一個模板函數的返回值或參數類型無效的時候,該實例不會參與重載解析,也不會導致編譯錯誤。 所以常用 is_same enable_if 等 is_same 表示兩個類型是否相同 一般來說代碼是這樣實現的 1 2 3 4 5 6 7 8 9 10 11 12 13 14 // stl 實現 4.1.2 template<typename _Tp, _Tp __v> struct integral_constant { static const ...
閱讀全文
2014年10月30日 黃專家專欄 ⁄ 共 1016字 評論關閉
Octopress 是一個靜態博客系統,在我的 VPS 上搭建了這個 Blog 後,每一次寫新的日誌就需要在本機生成靜態頁面再通過 rsync 同步到伺服器,這是個繁瑣的過程,主要在於本機上也要安裝 ruby 環境和 Octopress。如果在其他受限的環境下就只能存儲編寫的 markdown 文件,存儲待以後發布或者 ssh 到 VPS 上發布,這是個比較噁心的過程。 Git 是一個分散式版本控制工具,如果 Blog 存儲在 git 伺服器上,那麼就將版本和存儲結合在一...
閱讀全文
2014年10月30日 黃專家專欄 ⁄ 共 1725字 評論關閉
一般情況下,程序出現 segmentation fault,可以有多種方法 debug,利用 log 能找出程序 90% 以上的 bug,剩下的簡單一點可以採取二分法注釋掉代碼或者祭起 gdb 這個大殺器。但是有的時候,gbd 給出的 crash 上下文其實並不是真正發生問題的第一現場,在多線程程序設計中,這種情景會讓 bug 的追查陷入誤區。 介紹一個內存 debug 的工具, electric-fence。 我手頭的版本是 2.1.13。 electric-fence 的原理是重寫 malloc(3) 和 ...
閱讀全文
2014年10月30日 黃專家專欄 ⁄ 共 2170字 評論關閉
簡單說,所謂原子操作是指不會被打斷的操作,這種」打斷」在操作系統層面,一般是指線程間的上下文切換。假設,一個線程對一個共享的變數寫入一個 值,那麼另一個觀察這個變數的線程,要麼看到原值,要麼看到新值,不會看到一種中間狀態,這種中間狀態可以簡單理解為部分寫入(torn write)。 轉到程序設計層面,如果你用C/C++寫入或者讀取一個變數,這個操作是原子的嗎? 答案是:不一定。 假設我們有一個 64bit 的共享變數, sto...
閱讀全文
2014年10月30日 黃專家專欄 ⁄ 共 1463字 評論關閉
討論模板的顯式實例化之前,先弄清楚什麼是模板的實例化。 模板的實例化 : 指的是用具體的類型替代了模板參數的一個過程。這個過程的產物是一個模板的實例。 另外,只要在代碼中正確使用模板,編譯器會自動引發一個模板的實例化過程,這叫做隱式的(implicit)實例化。 例如: 1 2 3 4 5 6 7 8 9 10 11 #include<string> #include<map> template<class T> void Foo(T t) { } int ...
閱讀全文