跳到主要內容

發表文章

Thunk函數的使用

Thunk函數的使用 編譯器的求值策略通常分為傳值調用以及傳名調用, Thunk 函數是應用於編譯器的傳名調用實現,往往是將參數放到一個臨時函數之中,再將這個臨時函數傳入函數體,這個臨時函數就叫做 Thunk 函數。 求值策略 編譯器的求值策略通常分為傳值調用以及傳名調用,在下面的例子中,將一個表達式作為參數進行傳遞,傳值調用以及傳名調用中實現的方式有所不同。 var x = 1; function s(y){ console.log(y + 1); // 3 } s(x + 1); 在上述的例子中,無論是使用傳值調用還是使用傳名調用,執行的結果都是一樣的,但是其調用過程不同: 傳值調用:首先計算 x + 1 ,然後將計算結果 2 傳遞到 s 函數,即相當於調用 s(2) 。 傳名調用:直接將 x + 1 表達式傳遞給 y ,使用時再計算 x + 1 ,即相當於計算 (x + 1) + 1 。 傳值調用與傳名調用各有利弊,傳值調用比較簡單,但是對參數求值的時候,實際上還沒用到這個參數,有可能造成沒有必要的計算。傳名調用可以解決這個問題,但是實現相對來說比較複雜。 var x = 1; function s(y){ console.log(y + 1); // 3 } s(x + 1, x + 2); 在上面這個例子中,函數 s 並沒有用到 x + 2 這個表達式求得的值,使用傳名調用的話只將表達式傳入而並未計算,只要在函數中沒有用到 x + 2 這個表達式就不會計算,使用傳值調用的話就會首先將 x + 2 的值計算然後傳入,如果沒有用到這個值,那麼就多了一次沒有必要的計算。 Thunk 函數就是作為傳名調用的實現而構建的,往往是將參數放到一個臨時函數之中,再將這個臨時函數傳入函數體,這個臨時函數就叫做 Thunk 函數。 var x = 1; function s(y){ console.log(y + 1); // 3 } s(x + 1); // 等同於 var x = 1; function s(thunk){ console.log(thunk() + 1); // 3 } var thunk = funct...

容器技術之Docker-machine

  前文我們聊了下docker容器的資源限制,回顧請參考https://www.cnblogs.com/qiuhom-1874/p/13138725.html;今天我們來聊一聊docker machine;docker machine是docker 官方提供的工具,這個工具可以在不同主機/不同系統上快速安裝、管理docker環境;docker machine 的實現原理就是通過不同的驅動來連接不同類型節點,來實現docker machine管理不同平台上的docker環境;   docker machine 安裝   1、下載二進製程序文件到本地 [root@node1 ~]# base=https://github.com/docker/machine/releases/download/v0.16.0 && > curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine && > sudo mv /tmp/docker-machine /usr/local/bin/docker-machine && > chmod +x /usr/local/bin/docker-machine % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 638 100 638 0 0 590 0 0:00:01 0:00:01 --:--:-- 590 100 26.8M 100 26.8M 0 0 11911 0 0:39:24 0:39:24 --:--:-- 16907 [root@node1 ~]# ll /usr/local/bin/docker-machine -rwxr-xr-x 1 root root 28164576 Ju...

容器技術之Docker-machine

  前文我們聊了下docker容器的資源限制,回顧請參考https://www.cnblogs.com/qiuhom-1874/p/13138725.html;今天我們來聊一聊docker machine;docker machine是docker 官方提供的工具,這個工具可以在不同主機/不同系統上快速安裝、管理docker環境;docker machine 的實現原理就是通過不同的驅動來連接不同類型節點,來實現docker machine管理不同平台上的docker環境;   docker machine 安裝   1、下載二進製程序文件到本地 [root@node1 ~]# base=https://github.com/docker/machine/releases/download/v0.16.0 && > curl -L $base/docker-machine-$(uname -s)-$(uname -m) >/tmp/docker-machine && > sudo mv /tmp/docker-machine /usr/local/bin/docker-machine && > chmod +x /usr/local/bin/docker-machine % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 638 100 638 0 0 590 0 0:00:01 0:00:01 --:--:-- 590 100 26.8M 100 26.8M 0 0 11911 0 0:39:24 0:39:24 --:--:-- 16907 [root@node1 ~]# ll /usr/local/bin/docker-machine -rwxr-xr-x 1 root root 28164576 Ju...

MOJITO 發布一周,爬一波彈幕分析下

MOJITO 最近一直啥都沒寫,追個熱點都趕不上熱乎的,鄙視自己一下。 周董的新歌 「MOJITO」 發售(6 月 12 日的零點)至今大致過去了一周,翻開 B 站 MV 一看,播放量妥妥破千萬,彈幕破十萬,這人氣還真是杠杠的。 說實話, 「MOJITO」 這個名字對我來講有點超綱了,第一次見到完全不知道啥意思。 不過問題不大,沒有什麼是百度解決不了的,如果有,那就再加一個知乎。 MOJITO 的中文名是莫吉托,百度百科上是這麼介紹莫吉托的: 莫吉托(Mojito)是最有名的朗姆調酒之一。起源於古巴。傳統上,莫吉托是一種由五種材料製成的雞尾酒:淡朗姆酒、糖(傳統上是用甘蔗汁)、萊姆(青檸)汁、蘇打水和薄荷。最原始的古巴配方是使用留蘭香或古巴島上常見的檸檬薄荷。萊姆(青檸)與薄荷的清爽口味是為了與朗姆酒的烈性相互補,同時也使得這種透明無色的調酒成為夏日的熱門飲料之一。這種調酒有着相對低的酒精含量(大約10%)。 酒精度數在 10% 左右的話,姑且可以認為一種飲料吧。 當然,如果要開車的話就不能把 MOJITO 當成飲料了,酒精含量再低那也是酒精。 整個 MV 我翻來覆去的看了好幾遍, 「MOJITO」 這個東西除了在歌詞和名字中有出現,在 MV 當中一次都沒出現,毫無存在感。 爬取 B 站彈幕 彈幕數據的爬取比較簡單,我就不一步一步的抓請求給各位演示了,注意下面這幾個請求連接: 彈幕請求地址: https://api.bilibili.com/x/v1/dm/list.so?oid=XXX https://comment.bilibili.com/XXX.xml 第一個地址由於 B 站的網頁做了更換,現在在 Chrome 工具的 network 裏面已經找不到了,不過還可以用,這個是我之前找到的。 第二個地址來源於百度,我也不知道各路大神是從哪找出來這個地址的,供參考吧。 上面這兩個彈幕地址實際上都需要一個叫 oid 的東西,這個 oid 獲取方式如下: 首先可以找到一個目錄頁接口: https://api.bilibili.com/x/player/pagelist?bvid=XXX&jsonp=jsonp 這個接口也是來源於 Chrome 的 ...

MOJITO 發布一周,爬一波彈幕分析下

MOJITO 最近一直啥都沒寫,追個熱點都趕不上熱乎的,鄙視自己一下。 周董的新歌 「MOJITO」 發售(6 月 12 日的零點)至今大致過去了一周,翻開 B 站 MV 一看,播放量妥妥破千萬,彈幕破十萬,這人氣還真是杠杠的。 說實話, 「MOJITO」 這個名字對我來講有點超綱了,第一次見到完全不知道啥意思。 不過問題不大,沒有什麼是百度解決不了的,如果有,那就再加一個知乎。 MOJITO 的中文名是莫吉托,百度百科上是這麼介紹莫吉托的: 莫吉托(Mojito)是最有名的朗姆調酒之一。起源於古巴。傳統上,莫吉托是一種由五種材料製成的雞尾酒:淡朗姆酒、糖(傳統上是用甘蔗汁)、萊姆(青檸)汁、蘇打水和薄荷。最原始的古巴配方是使用留蘭香或古巴島上常見的檸檬薄荷。萊姆(青檸)與薄荷的清爽口味是為了與朗姆酒的烈性相互補,同時也使得這種透明無色的調酒成為夏日的熱門飲料之一。這種調酒有着相對低的酒精含量(大約10%)。 酒精度數在 10% 左右的話,姑且可以認為一種飲料吧。 當然,如果要開車的話就不能把 MOJITO 當成飲料了,酒精含量再低那也是酒精。 整個 MV 我翻來覆去的看了好幾遍, 「MOJITO」 這個東西除了在歌詞和名字中有出現,在 MV 當中一次都沒出現,毫無存在感。 爬取 B 站彈幕 彈幕數據的爬取比較簡單,我就不一步一步的抓請求給各位演示了,注意下面這幾個請求連接: 彈幕請求地址: https://api.bilibili.com/x/v1/dm/list.so?oid=XXX https://comment.bilibili.com/XXX.xml 第一個地址由於 B 站的網頁做了更換,現在在 Chrome 工具的 network 裏面已經找不到了,不過還可以用,這個是我之前找到的。 第二個地址來源於百度,我也不知道各路大神是從哪找出來這個地址的,供參考吧。 上面這兩個彈幕地址實際上都需要一個叫 oid 的東西,這個 oid 獲取方式如下: 首先可以找到一個目錄頁接口: https://api.bilibili.com/x/player/pagelist?bvid=XXX&jsonp=jsonp 這個接口也是來源於 Chrome 的 ...

博弈論——兩人取子遊戲與威佐夫博弈,隱藏在背後的黃金分割

本文始發於個人公眾號: TechFlow ,原創不易,求個關注 今天是 算法和數據結構專題 第25篇文章,我們繼續博弈論專題。 在上一篇文章當中我們了解了最簡單的巴什博奕,今天我們來看看另一個經典的博弈模型—— 威佐夫博弈 。博弈論和機器學習有些類似,數學家們針對場景進行建模,設計出了幾個經典模型。然後我們在面臨具體問題的時候,對問題進行深入分析,尋找最合適的模型應用來解決它。 石子問題 我們來看一道經典的例題,有兩堆石子,有兩個 絕頂聰明 的人在玩一個遊戲。每次每個人可以從其中一堆石子當中取走任意數量的石子,或者是從兩堆當中同時取走相同數量的石子。無法取石子的人落敗,請問,在告知兩堆石子數量的情況下,這兩個人當中哪一方會獲勝? 我們簡單分析一下,會發現 一些局面是先手必敗的 。比如說(0, 0),再比如(1, 2)。我們簡單分析一下(1, 2),先手有4種策略,首先他可以取走第一堆,那麼後手可以取完第二堆,顯然後手獲勝。他也可以在第二堆當中取1個,這時剩下(1, 1),後手會同時取完,同樣是後手獲勝。第三種是他取走第二堆,後手可以取完第一堆,後手獲勝。第四種是他在第一堆和第二堆當中同時取走一個,這時第二堆剩下一個,後手勝。 那麼,這些 必敗的狀態之間有什麼規律呢 ?我們怎麼找到這個規律,並且找到解呢? 分析 我們可以枚舉幾個必敗的狀態:(0, 0), (1, 2), (3, 5), (4, 7)... 我們觀察一下這些狀態,可以找到兩條規律。我們假設從小到大排的第k個必敗狀態是(x, y),並且x < y。我們可以發現y = x + k。也就是說 必敗狀態兩個數的差值是遞增的 ,這也說明了每一個必敗狀態的差值都各不相同。 其實這是很容易證明的,我們用反證法,假設(a, a+k), (b, b+k)都是必敗狀態,並且a < b。那麼先手在面臨(b, b+k)的時候,只需要在兩堆當中同時取走b-a個石子,那麼給後手的局面就是(a, a+k)。對於後手來說,這是一個必敗的局面,這就和(b, b+k)先手必敗矛盾,所以 不存在兩個必敗局面的差值相等 。 我們也可以作圖分析,我們 把兩堆石子的數量看成是坐標軸上的一個點 。所以遊戲就變成了:棋盤上有一個點,每次每個人可以將它向下、向左或者向左下移動若...

股價飆升有理,大摩指Tesla潛在市場大

  美國電動車廠特斯拉(Tesla),股價一度飆破300美元,並超越福特汽車,躍居美國第二大車廠。到底特斯拉值不值得此一高價?特斯拉多頭出面力挺,指出特斯拉不只是電動車業者,也是運輸和基礎建設公司,潛在市場極大,300美元合情合理。 MarketWatch、巴倫(Barron's)報導,4日特斯拉股價首次突破300美元大關,漲勢之快讓大多頭也吃驚。摩根士丹利(大摩)分析師Adam Jonas等人報告稱,他們訝異於特斯拉近來漲勢,在短短時間內就站上300美元,認為技術因素戰勝基本面。 儘管如此,大摩認為,特斯拉並非配不上此一價碼。報告稱,他們和投資人交談後發現,大家比預期更快了解特斯拉的潛在市場。大摩說,特斯拉潛在市場包括10兆美元的輕型車移動市場、1兆美元的物流市場、2~3兆美元的能源市場。另外,消費者待在車上時間高達6,000億小時,特斯拉能從數兆美元的影音內容傳輸等服務獲利。 大摩指出,上次特斯拉飆高時,是在2014年9月,當時少有投資人以此種角度看待特斯拉,多認為大摩報告衝太快,那個時候特斯拉被視為純電動車廠,有機會觸及電池/能源儲存系統。但是這2.5年來情況已大幅轉變。特斯拉佔據三大重要趨勢的中心位置:電動車、自駕系統、車輛共享。 大摩說,特斯拉的「Tesla Mobility」將在2018年問世,此一隨選服務提供自動化運輸功能,預期特斯拉將在共享移動(shared mobility)革命中,扮演領導角色。 需要強調的是,Benzinga報導,Jonas向來看來極為看好特斯拉,2015年年中曾預測特斯股價將站上465美元,被外界稱為「特斯拉啦啦隊」。 特斯拉5日股價拉回,下跌2.86%收在295美元。 特斯拉第1季交車量意外跳高,帶動股價一飛衝天,如今已超越福特(Ford Motor Co.),成為全美市值第二大的汽車製造商。 特斯拉4日終場勁揚1.74%、收303.70美元,創歷史收盤新高。MarketWatch報導,根據計算,特斯拉的市值已達495億美元,一口氣超車福特的444億美元。在汽車類股中,特斯拉的市值如今僅次於通用汽車(General Motors Co.)的513億美元。 特斯拉甫於週日(4月2日)宣布,第1季的Model S、Model X交貨量...