原因:浮點(diǎn)數(shù)的精度問(wèn)題。
注意:
向下取整,即:12910.9 會(huì)被轉(zhuǎn)換為 12910
<?php
var_dump(intval(12910.9));
// 輸出
// int(12910)
浮點(diǎn)數(shù)精度
看如下執(zhí)行結(jié)果:
我們知道:$receive_money 值小于 12911
總結(jié):所以,最后 $receive_money 轉(zhuǎn)換為整型時(shí),向下取整,結(jié)果為:12910
參考:
這是由于浮點(diǎn)數(shù)的二進(jìn)制表示形式?jīng)Q定的。
看如下示例:
我們看到第 9 行代碼 float(12911) 擴(kuò)展整數(shù)位之后,轉(zhuǎn)換成整型表示:int(129109999)。
然后,我們對(duì)比了 float(12911) 跟 int(12911) 在二進(jìn)制上的差別。
是不是發(fā)現(xiàn)了什么?(二進(jìn)制的最后一位)這是 PHP-bug 么?當(dāng)然不是。
而且我們同樣也注意到了第 8 行代碼輸出結(jié)果為:float(129110000),這又是為什么呢?
為什么不是 float(129109999)呢?
我們看一下 PHP 源碼中浮點(diǎn)數(shù)是什么:
如圖:php-float 等于 c-double
我想如下幾個(gè)問(wèn)題可以解決上述的疑問(wèn):雙精度浮點(diǎn)數(shù) 的二進(jìn)制形式是如何表示的呢? 請(qǐng)參考:wikipedia-雙精度浮點(diǎn)數(shù)
浮點(diǎn)數(shù)是如何處理乘法運(yùn)算的呢? 請(qǐng)參考:wikipedia-浮點(diǎn)數(shù)的乘法和除法
如果上邊兩個(gè)問(wèn)題不愿深究,可以直接參考鳥哥的一篇博客:PHP浮點(diǎn)數(shù)的一個(gè)常見(jiàn)問(wèn)題的解答
以上為個(gè)人理解,如果錯(cuò)誤之處,請(qǐng)指出。
如果評(píng)論里的邏輯是對(duì)的。應(yīng)該做有改無(wú)增的操作,而id不同的時(shí)候你并沒(méi)有push。
// 簡(jiǎn)化版本
var miniCartListArr = []
var miniId = {}
function dataHandler (opt) {
if (miniId[opt.skuId] !== undefined) {
// 有改
miniCartListArr[miniId[opt.skuId]] = opt
} else {
// 無(wú)增
// 存 id:索引,方便下次有改
miniId[opt.skuId] = miniCartListArr.length
miniCartListArr.push(opt)
}
}
arr2 = [...arr1]
這么寫并不是個(gè)真的深拷貝。
var arr1 = [{name:1}]
arr2 = [...arr1]
arr2[0].name = 2
arr1[0].name // 1
arr1 === arr2 //false
arr1[0] === arr2[0] //true去看看是不是開啟了vhosts,/etc/httpd/conf.d/httpd-vhosts.conf
稍優(yōu)化了一點(diǎn),按你的算法,有n個(gè)元素的數(shù)組,要循環(huán)
n * n * in_array里的次數(shù),in_array內(nèi)部也是循環(huán)
var arr = [1, 2, 5, 6, 7];//如果這個(gè)數(shù)組不是有序數(shù)組,哪還要先加排序
var len =arr.length
let result=[]
let count=0
for(let a=0;a<len;a++){
let max = arr.pop()
let newlen = arr.length
for(let i=0;i<newlen-1;i++){
if(arr[i]+arr[i+1]> max){
break;
}
for(let j=i;j<newlen-1;j++){
let plus = arr[i]+arr[j+1]
count++
if(plus>max){
break;
}
if(plus==max){
result.push([max,arr[i],arr[j+1]])
}
}
}
}
console.log(result)//輸出結(jié)果
console.log(count)//輸出總循環(huán)次數(shù),
回復(fù)里說(shuō)的好,我沒(méi)有考慮負(fù)數(shù)的情況,如果要考慮負(fù)數(shù),哪把最大數(shù)pop出來(lái),就不行了,只能重新維護(hù)一條新數(shù)組,用來(lái)枚舉所有值,修改如下
var arr = [-8, -1, 1, 2, 5, 6, 7];//如果這個(gè)數(shù)組不是有序數(shù)組,哪還要先加排序
var len =arr.length
var arr1 = [...arr] //復(fù)制一條新數(shù)組
let result=[]
let count=0
for(let a=0;a<len;a++){
let max = arr1.pop()// 從新數(shù)組中枚舉各個(gè)值。
let newlen = arr.length
for(let i=0;i<newlen-1;i++){
if(arr[i]+arr[i+1]> max){
break;
}
for(let j=i;j<newlen-1;j++){
let plus = arr[i]+arr[j+1]
count++
if(plus>max){
break;
}
if(plus==max){
result.push([max,arr[i],arr[j+1]])
}
}
}
}
console.log(result)//輸出結(jié)果
console.log(count)//輸出總循環(huán)次數(shù),
輸出
[[7, 1, 6], [7, 2, 5], [6, -1, 7], [6, 1, 5], [5, -1, 6], [1, -1, 2], [-1, -8, 7]]參考這篇文章,我來(lái)翻譯一下:
這是一個(gè)方法,它具有原子性:
public int getVector() {
int index = vector.size() - 1;
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return vector.get(index);
}
這也是一個(gè)方法,它也具有原子性:
public void deleteVector() {
int index = vector.size() - 1;
vector.remove(index);
}
所謂原子性,就是方法里的語(yǔ)句會(huì)順次執(zhí)行,不會(huì)被打斷。
但是你把它倆復(fù)合起來(lái),它就不再是原子的了:
public static void main(String[] args) {
VectorTest vectorTest = new VectorTest();
new Thread(new Runnable() {
public void run() {
vectorTest.getVector();
}
}).start();
new Thread(new Runnable() {
public void run() {
vectorTest.deleteVector();
}
}).start();
}
在這里開了兩個(gè)線程,一個(gè)執(zhí)行第一個(gè)方法,另一個(gè)執(zhí)行第二個(gè)方法,第一個(gè)方法一上來(lái)先獲取了向量的尺寸,然后就開始休眠了,趁第一個(gè)方法不注意,第二個(gè)方法進(jìn)來(lái)刪除了向量里最后一個(gè)元素,等第一個(gè)方法醒過(guò)來(lái),再想找最后一個(gè)元素找不著了,就拋出錯(cuò)誤了,所以復(fù)合操作不具有原子性,中間被插入打斷了。
解決的方法就是加個(gè)鎖:
public int getVector(){
synchronized (vector) {
int index = vector.size() - 1;
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return vector.get(index);
}
}
synchronized就是同步的意思,同步的意思是說(shuō)這一步邁不完,下一步不能開始,所以這樣就保證了整個(gè)操作依然是原子級(jí)的,不存在被插入的可能。
通過(guò)閱讀Javac編譯器的源碼, 我們知道編譯器在把Java程序源碼編譯為字節(jié)碼的時(shí)候,會(huì)對(duì)Java程序源碼做各方面的檢查校驗(yàn)。這些校驗(yàn)主要以程序“寫得對(duì)不對(duì)” 為出發(fā)點(diǎn), 雖然也有各種WARNING的信息, 但總體來(lái)講還是較少去校驗(yàn)程序“寫得好不好” 。 有鑒于此, 業(yè)界出現(xiàn)了許多針對(duì)程序“寫得好不好” 的輔助校驗(yàn)工具, 如CheckStyle、 FindBug、 Klocwork等。 這些代碼校驗(yàn)工具有一些是基于Java的源碼進(jìn)行校驗(yàn), 還有一些是通過(guò)掃描字節(jié)碼來(lái)完成。
出自深入理解Java虛擬機(jī):JVM高級(jí)特性與最佳實(shí)踐(第2版)——10.4.1節(jié)
public class test {
public static List> source;
public static void main(String[] args) {
source = new ArrayList<>();
List<String> a = new ArrayList<String>();
a.add("黑色");
a.add("白色");
List<String> b = new ArrayList<String>();
b.add("64G");
b.add("128G");
List<String> c = new ArrayList<String>();
c.add("中國(guó)聯(lián)通");
c.add("中國(guó)移動(dòng)");
source.add(a);
source.add(b);
source.add(c);
ArrayList<String> result = new ArrayList<>();
recursion(result, source.get(0), 0, "");
System.out.println(result);
}
public static void recursion(List<String> result, List<String> para, int num, String choose) {
for (int i = 0; i < para.size(); i++) {
if (source.size() == num + 1) {
result.add(choose + "/" + para.get(i));
} else {
recursion(result, source.get(num + 1), num + 1, choose + "/" + para.get(i));
}
}
}
}
[\s\S]*
Aop+AbstractRoutingDataSource動(dòng)態(tài)切換數(shù)據(jù)源。
你里面的數(shù)據(jù)是后面加上去的吧
基本上都只統(tǒng)計(jì)qps與tps。
其實(shí)工具和語(yǔ)言沒(méi)關(guān)系。
像大眾點(diǎn)評(píng)的cat,韓國(guó)的pinpoint都是可以做到的。
還有其他,像nginx accesslog或者通過(guò)打日志,收集到es也能做到。
或者有一些框架自帶,不過(guò)局限性比較大,只能看單服務(wù)的,不能匯總到一個(gè)地方查看,就不建議使用了。
下面的這篇文章應(yīng)該能幫到您
web服務(wù)器都有正常停止功能,你kill -9是幾個(gè)意思?
你關(guān)電腦都是直接拔電源嗎?
這個(gè)沒(méi)有使用過(guò)第三方平臺(tái),我覺(jué)得這樣看你的第三方平臺(tái)是什么樣的,比如你的金額花的比較大,第三方有可能幫助你上線,不然我覺(jué)得需要審核上線的
p到底是Promise,還是是函數(shù)?如果p是Promise,會(huì)有不好的影響,否則不會(huì)。
當(dāng)前V8的Promise的實(shí)現(xiàn),會(huì)在滿足以下條件的時(shí)候回收掉所有.then鏈的上下文:
所以以下代碼完全沒(méi)有問(wèn)題,所有東西都會(huì)被正確回收
let collectable = (async () => {
const buf = new Uint8Array(1024 * 1024 * 1024);
for (let i = 0; i < buf.length; i++) buf[i] = i;
await new Promise(() => { });
return buf;
})();
if (typeof gc == 'function') gc();
上面的代碼中,1和2滿足,因?yàn)闆](méi)有變量存著那個(gè)空Promise,所以3也滿足,所以async內(nèi)的所有上下文都被釋放,collectable只剩下了空殼Monad,薛定諤的貓?jiān)缗艿袅恕?/p>
而這段代碼會(huì)造成內(nèi)存泄漏
let deadPromise = new Promise(() => { });
let uncollectable = (async () => {
const buf = new Uint8Array(1024 * 1024 * 1024);
for (let i = 0; i < buf.length; i++) buf[i] = i;
await deadPromise;
return buf;
})();
if (typeof gc == 'function') gc();
上面的代碼會(huì)造成內(nèi)存泄漏,只有deadPromise = null之后才能回收。
一點(diǎn)后話,我猜題主也是在想,如果我們沒(méi)有AbortablePromise,那我們至少能明確標(biāo)示出一個(gè)Promise可以被垃圾回收吧?幸運(yùn)的是,我們可以,但是要用到上面這樣的hack。
不過(guò),現(xiàn)在我們有AbortController了,說(shuō)明社區(qū)已經(jīng)基本上對(duì)AbortablePromise怎么實(shí)現(xiàn)有了共識(shí):應(yīng)該throw出去。這樣的話,我們就不應(yīng)該用這樣的hack了,而應(yīng)該與fetch它們保持一致。
這個(gè)要說(shuō)起來(lái)就多了,網(wǎng)上有很多很多寫得很詳細(xì)的教程,隨便一搜就有的:https://wenku.baidu.com/view/...
這種情況下不報(bào)異常就是成功
jmap、jps、jinfo、jstat、jmx等
第二次請(qǐng)求戴上第一次請(qǐng)求返回的Cookie
個(gè)人理解,接口的返回結(jié)果是會(huì)寫到業(yè)務(wù)系統(tǒng)中的,后期不應(yīng)該根據(jù)日志的返回結(jié)果進(jìn)行大量的查詢。
mysql 5.7之后支持json類型,可以研究一下能否滿足你說(shuō)的查詢統(tǒng)計(jì)的需求。
mongodb不太熟悉,但我記得建議同一個(gè)collection中的schema是一致的。如果建多個(gè)collection,和mysql建多張表就沒(méi)區(qū)別了。
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國(guó)IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國(guó)家
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國(guó)一站式人才培養(yǎng)平臺(tái)、一站式人才輸送平臺(tái)。2014年4月3日在美國(guó)成功上市,融資1
北大課工場(chǎng)是北京大學(xué)校辦產(chǎn)業(yè)為響應(yīng)國(guó)家深化產(chǎn)教融合/校企合作的政策,積極推進(jìn)“中國(guó)制造2025”,實(shí)現(xiàn)中華民族偉大復(fù)興的升級(jí)產(chǎn)業(yè)鏈。利用北京大學(xué)優(yōu)質(zhì)教育資源及背
博為峰,中國(guó)職業(yè)人才培訓(xùn)領(lǐng)域的先行者
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項(xiàng)目經(jīng)理從事移動(dòng)互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺(tái)面向?qū)ο箝_發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫(kù),具有快速界面開發(fā)的能力,對(duì)瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁(yè)制作和網(wǎng)頁(yè)游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國(guó)Software AG 技術(shù)顧問(wèn),美國(guó)Dachieve 系統(tǒng)架構(gòu)師,美國(guó)AngelEngineers Inc. 系統(tǒng)架構(gòu)師。