鍍金池/ 問(wèn)答/ C++問(wèn)答
葬憶 回答

簡(jiǎn)單說(shuō)下吧,有時(shí)間再來(lái)補(bǔ)上。
以下結(jié)果基于gcc5.4

#include <stdio.h>

int main(void)
{
    float a,b;
    b = 2.0e20 + 1.0;
    a = b - 2.0e20;
    printf("%f\n", a);
}
---
4008175468544.000000

如果把1.0 換成1e2, 1e3...1e13,得到的結(jié)果都是一樣的。

精度問(wèn)題

float使用23位存尾數(shù)的,注意這23位存的是01串,是二進(jìn)制的尾數(shù)。
由于2^23 = 8388608(只是簡(jiǎn)單計(jì)算,去看IEEE754知道還隱含了一個(gè)1),所以存儲(chǔ)十進(jìn)制的小數(shù)小數(shù)點(diǎn)后精度也就6、7位。

計(jì)算

浮點(diǎn)數(shù)的計(jì)算,見(jiàn)維基百科這里
可知,浮點(diǎn)數(shù)計(jì)算需要把指數(shù)統(tǒng)一然后計(jì)算,那么問(wèn)題來(lái)了,無(wú)論是1.0統(tǒng)一到2.0e20還是2,0e20統(tǒng)一到1.0,尾數(shù)的精度都超過(guò)了上面的精度,所以就有了這種奇怪的結(jié)果。

這個(gè)奇怪結(jié)果的產(chǎn)生和類型也有關(guān)系,1.02.0e20都是double型,這意味著b = 2.0e20 + 1.0是先對(duì)兩個(gè)double型字面量計(jì)算,然后再賦給float型變量b,精度丟失。

題主有興趣的話,去看看IEEE754標(biāo)準(zhǔn),以及Google一下浮點(diǎn)數(shù)的計(jì)算

柚稚 回答

先看看update時(shí)有沒(méi)有deadlock異常,再看下事物,多少條commit一次,再用show processlist等操作看看數(shù)據(jù)庫(kù)執(zhí)行的sql狀況。

尤禮 回答

暫時(shí)有了一點(diǎn)小理解,不知道是否完全正確

畫了一個(gè)簡(jiǎn)單的圖,直接看圖吧。

ffplay中serial變量的理解

淚染裳 回答
我的理解是 : 當(dāng)給定的種子不是太好或者一個(gè)線性列表內(nèi)的種子分布不好的時(shí)候, 但又需要大量的隨機(jī)引擎或者大量熵的生成器的時(shí)候, 可以使用 seed_seq.
std::seed_seq is generally intended to be used if you don't trust the default implementation to properly initialize the state of the engine you're using.1
能否給出一些更詳細(xì)的解釋以及例子呢?
https://stackoverflow.com/a/2...

或許該看些密碼學(xué)的書? 窩這學(xué)期剛開(kāi)學(xué)時(shí)興致沖沖的拿著一本密碼學(xué)原版(從大數(shù)講起的, 有很多c實(shí)現(xiàn), 不過(guò)后來(lái)因?yàn)?del>太忙太懶了, 沒(méi)有看下去(慚愧不已). 里面第十二章就是講隨機(jī)數(shù)的, 雖然窩還沒(méi)有看到, 但是窩覺(jué)得這本書非常不錯(cuò), 非常偏向?qū)崙?zhàn), 理論也講的很不錯(cuò). 就是國(guó)內(nèi)沒(méi)什么知名度. 所以在這里想你推薦下, 你學(xué)random庫(kù)肯定發(fā)現(xiàn)需要很多數(shù)論的知識(shí)吧.

https://www.amazon.com/Crypto...

國(guó)內(nèi)有引進(jìn)的原版, 你可以自己搜下.


  1. https://stackoverflow.com/a/4... ?
失魂人 回答

你的npm倉(cāng)庫(kù)地址是不是被更改過(guò),可以改成淘寶的試試

npm config set registry http://registry.npm.taobao.org/

然后再初始化你的項(xiàng)目試試

心沉 回答

似乎是因?yàn)閘ock_guard本身的存在是與mutex強(qiáng)關(guān)聯(lián)的,也是說(shuō)lock_guard一旦存在,mutex就必須是locked的,而條件變量中是有過(guò)程要求釋放鎖的

源碼沒(méi)有問(wèn)題,你只需要按照文檔操作便可編譯成功。

以 Ubuntu 16.04 LTS 為例,主要參考文檔(均來(lái)自項(xiàng)目源碼)如下

  1. bitcoin-0.16.0rc1/doc/build-unix.md
  2. btcpool/docs/INSTALL-BTCPool.md

下面是一鍵安裝 btc-pool 腳本,主要參考上述文檔,已測(cè)

#!/bin/bash
# 一鍵安裝 btc-pool
#
# OS: Ubuntu 16.04 LTS
# @author 李毅
set -e

build_dir=/tmp

# 由 jarven 測(cè)試提供,https://segmentfault.com/q/1010000014060045?_ea=3538159
#   不需要兼容舊版 bitcoin,及不需要錢包功能的時(shí)候,可以使用系統(tǒng)默認(rèn)的 libdb-dev
#   及 libdb++-dev 庫(kù),請(qǐng)把下一行的 false 改成 true。
use_latest_libdb=false

cpus=`grep -Ee 'processor\s:' /proc/cpuinfo | wc -l`


# 禁止 root 用戶運(yùn)行此腳本
#=========================
if [ "$UID" -eq 0 ] ; then
    echo "禁止 root 用戶運(yùn)行此腳本"
    exit 1
fi


# 創(chuàng)建臨時(shí)目錄
#=============
[ -d $build_dir ] || mkdir -p $build_dir


# 安裝系統(tǒng)必要組件
#==================

# aptitude
if ! which aptitude >/dev/null 2>&1 ; then
    sudo apt-get update
    sudo apt-get install -y aptitude
fi

# 安裝 libboost-all-dev 需要人工干預(yù)
if ! aptitude show libboost-all-dev > /dev/null 2>&1 ; then
    echo ""
    echo "!!! 安裝 libboost-all-dev 需要人工干預(yù),以降級(jí)某些依賴項(xiàng)的版本 !!!"
    echo "<1> 第一次詢問(wèn)時(shí)按下 'n' 鍵"
    echo "<2> 第二次詢問(wèn)時(shí)按下 'y' 鍵"
    aptitude install libboost-all-dev
fi

#
sudo aptitude install -y \
    build-essential autotools-dev libtool autoconf automake pkg-config cmake \
    openssl libssl-dev libcurl4-openssl-dev libconfig++-dev \
    libgmp-dev libmysqlclient-dev libzookeeper-mt-dev \
    libzmq3-dev libgoogle-glog-dev libevent-dev


# 編譯安裝 librdkafka-v0.9.1
#===========================
if ! pkg-config --libs rdkafka ; then
    sudo aptitude install -y zlib1g zlib1g-dev python
    cd $build_dir
    if [ ! -f librdkafka-0.9.1.tar.gz ]; then
        wget -O librdkafka-0.9.1.tar.gz https://github.com/edenhill/librdkafka/archive/0.9.1.tar.gz
        tar zxvf librdkafka-0.9.1.tar.gz
    fi
    cd librdkafka-0.9.1
    make clean
    ./configure
    make
    sudo make install
fi


# 編譯 biticoin
#==============
sudo aptitude install -y \
    build-essential libtool autotools-dev automake pkg-config libssl-dev \
    libevent-dev bsdmainutils python3

if [ "$use_latest_libdb" = true ]; then
    sudo aptitude install -y libdb-dev libdb++-dev
else if ! aptitude show libdb4.8++-dev >/dev/null 2>&1 ; then
    # 安裝低版 libdb4.8
    sudo apt-get install -y software-properties-common
    sudo add-apt-repository -y ppa:bitcoin/bitcoin
    sudo apt-get update
    sudo apt-get install -y libdb4.8-dev libdb4.8++-dev
fi

cd $build_dir
if [ ! -f bitcoin-0.16.0rc1.tar.gz ]; then
    wget -O bitcoin-0.16.0rc1.tar.gz https://github.com/bitcoin/bitcoin/archive/v0.16.0rc1.tar.gz
    tar zxf bitcoin-0.16.0rc1.tar.gz
fi
cd $build_dir/bitcoin-0.16.0rc1
./autogen.sh

if [ "$use_latest_libdb" = true ]; then
    ./configure --with-incompatible-bdb --disable-wallet
else
    ./configure
fi
make -j $cpus


# 編譯 btcpool
#=============
cd $build_dir
if [ ! -d btcpool ]; then
    git clone https://github.com/btccom/btcpool.git
fi
cd $build_dir/btcpool
[ ! -d build ] && mkdir build
cd build

# Release build
cmake -DCHAIN_TYPE=BTC -DCHAIN_SRC_ROOT=$build_dir/bitcoin-0.16.0rc1 ..
make -j $cpus

若有問(wèn)題,請(qǐng)隨時(shí)留言。

文件操作模式介紹

clipboard.png

問(wèn)題中的錯(cuò)誤

modefread 不對(duì)應(yīng)。
(仔細(xì)閱讀 mode 說(shuō)明。)

正確使用方式,請(qǐng)自行參考:

荒城 回答

想到兩個(gè)方法:

方法一:
如果是比較新的內(nèi)核版本3.9以上,支持SO_REUSEPORT,那么你可以:

  1. 啟動(dòng)一個(gè)新的進(jìn)程,也監(jiān)聽(tīng)相同的端口。
  2. 新的進(jìn)程啟動(dòng)后給老的進(jìn)程發(fā)個(gè)信號(hào)。
  3. 老的進(jìn)程收到后停止接收新的連接請(qǐng)求(停止Accept,關(guān)閉Listen Socket),
    等所有已經(jīng)存在的連接處理完自動(dòng)退出。

如果不支持SO_REUSEPORT,不同進(jìn)程無(wú)法同時(shí)監(jiān)聽(tīng)同一個(gè)端口,則需要在老的進(jìn)程內(nèi)fork一個(gè)子進(jìn)程,并且把負(fù)責(zé)監(jiān)聽(tīng)的文件描述符傳給新進(jìn)程。
這個(gè)方法可以實(shí)現(xiàn)你的需求,但需要比較多的修改Golang封裝的net/http等系統(tǒng)庫(kù),技術(shù)復(fù)雜度比較高。
好處是不需要nginx參與,對(duì)它透明。

方法二:
可以同時(shí)運(yùn)行兩個(gè)或更多個(gè)http server,同時(shí)提供服務(wù),讓nginx做負(fù)載均衡,其中有一個(gè)需要升級(jí)重啟時(shí),就發(fā)個(gè)信號(hào),收到信號(hào)后停止接收新請(qǐng)求,已有請(qǐng)求處理完畢正常退出就可以了。這個(gè)過(guò)程不需要修改nginx配置,也不需要reload nginx。
這個(gè)方法也需要改Golang封裝的net/http,但修改量相比方法一會(huì)小很多。

不舍棄 回答
  1. 構(gòu)造函數(shù)里面的$username = ''$username的默認(rèn)參數(shù),可以使用new User()new User('abc')來(lái)給User類的$username屬性賦值
  2. 后面的$username = []是一種好的習(xí)慣,對(duì)$username進(jìn)行初始化,參見(jiàn)手冊(cè)PHP基礎(chǔ),初始化變量
<?php
function test($res){
    $ret = [];
    if($res){
        $ret = [1,2,3];
    }
    return $ret;
}

function test2($res){
    if($res){
        $ret = [1,2,3];
    }
    return $ret;
}
var_dump(test(false));
var_dump(test2(false));
終相守 回答

輸出結(jié)果相同是因?yàn)閜f指向同一個(gè)函數(shù),為"In devired"是因?yàn)閜f指向虛函數(shù)。

8.5.1.2.2 For a call to a non-static member function, the postfix expression shall be an implicit (12.2.2, 12.2.3) or explicit class member access (8.5.1.5) whose id-expression is a function member name, or a pointer-to-member expression (8.5.4) selecting a function member;

8.5.1.2.3 If a function or member function name is used, the appropriate function and the validity of the call are determined according to the rules in 16.3. If the selected function is non-virtual, or if the id-expression in the class member access expression is a qualified-id, that function is called. Otherwise, its final overrider (13.3) in the dynamic type of the object expression is called; such a call is referred to as a virtual function call.

取非靜態(tài)成員函數(shù)的地址必須加&。不是CLION的問(wèn)題。

8.5.2.1.4 A pointer to member is only formed when an explicit & is used and its operand is a qualified-id not enclosed in parentheses.

引自N4741, C++20 working draft. 這兩部分歷代標(biāo)準(zhǔn)應(yīng)該都一樣,不放心的話自己根據(jù)編譯器設(shè)置查閱相關(guān)文檔吧。

心癌 回答

vc生成的程序能在Windows7上運(yùn)行也只是因?yàn)閣indows上大多裝了msvc的庫(kù),
你在mingw的安裝目錄下找到這兩個(gè)DLL和可執(zhí)行文件一起拿到別的電腦上就可以用了。

不討喜 回答

1.兩個(gè)father變量都是引用類型,但是父組件的resetData直接改變了father的地址,子組件引用的仍然是舊的father

2.你只在構(gòu)造函數(shù)內(nèi)把props.father的值賦給了state.father,后面隨著props.father的改變,state.father并不會(huì)主動(dòng)響應(yīng),原因見(jiàn)上一點(diǎn)

3.解決方法有兩種:
1)全都用props.father
2)添加componentWillReceiveProps函數(shù):

componentWillReceiveProps = (nextProps) => {
  this.setState({
    father: nextProps.father
  })
}
氕氘氚 回答

已解決.
java對(duì)于帶報(bào)名的類的查找是需要路徑的,看修改就知道了.
mkdir com
mv MyTest.jar com/
tar cvf MyTest.jar com

兔囡囡 回答

答一:
靜態(tài)變量引用C++11 單例的一種寫法,這里常量的作用主要是為了避免更改 empty_string,empty_vector,empty_map。

答二:
是的,靜態(tài)變量引用C++11 單例的一種寫法。常量的意義見(jiàn)答一。

萌小萌 回答

obj的屬性沒(méi)有顯示的初始化導(dǎo)致的吧如果子組件的obj直接定義的、

data(){
    return{
        obj:{}
    }
}

你通過(guò)調(diào)用方法改變obj是不會(huì)將obj的屬性設(shè)置成響應(yīng)式的,vue檢測(cè)不到,你應(yīng)該預(yù)先給出需要?jiǎng)討B(tài)變化的屬性
data(){

    return{
        obj:{
            a:'',
            b:''
        }
    }
}