public function msgId($spid, $sqid)
{
$timeStr = time();
//echo bindec(sprintf("%04s%05s%05s%06s%06s%022s%016s",decbin(date('m', $timeStr)),decbin(date('d', $timeStr)),decbin(date('H', $timeStr)),decbin(date('i', $timeStr)),decbin(date('s', $timeStr)),decbin($spid), decbin($sqid)));
return bindec(sprintf("%04s%05s%05s%06s%06s%022s%016s",decbin(date('m', $timeStr)),decbin(date('d', $timeStr)),decbin(date('H', $timeStr)),decbin(date('i', $timeStr)),decbin(date('s', $timeStr)),decbin($spid), decbin($sqid)));
}
$this->msgId('600010','2');
在這里面給你糾正一下思路
第一: 64位
里面只能存0-1之間的數(shù)值,也就是說都是2進制數(shù)據(jù)
所以拼接一下2進制數(shù)據(jù)就好了
月份(1-12)(【0001-1100】區(qū)間 4位)decbin(date('m', $timeStr))
日(1-31)(【00001-11111】區(qū)間 5位)decbin(date('d', $timeStr))
時(1-24)(【00001-11000】區(qū)間 5位)decbin(date('H', $timeStr))
分(1-59)(【000001-111011】區(qū)間 6位)decbin(date('i', $timeStr))
秒(1-59)(【000001-111011】區(qū)間 6位)decbin(date('s', $timeStr))
網(wǎng)關代碼(【0~0 - 1~1】22位)decbin($spid1)
// (如果這個網(wǎng)關代碼是22位0和1組成就不用decbin,本身就是2進制了,如果不是的話,就變成二進制)
序列號(區(qū)間 16位)decbin($spid2)
網(wǎng)關代碼多少位我沒洗數(shù),序列號,什么的位數(shù)你自己調(diào)就行了%04d%06d%05d%06d%06d【%021d%016d】<-這里
如果沒算錯的話是4+5+5+6+6+22+16應該是64位了,那么這64位是一個2進制的字符串,用bindec()轉(zhuǎn)換成十進制的數(shù)值,存進數(shù)據(jù)庫里面,那么數(shù)據(jù)庫存貯的2進制數(shù)據(jù)就是符合你要的規(guī)定了,而且10進制數(shù)據(jù),8位,64字節(jié),完美
變量名用點心$spid, $sqid
我以為是一個
下面這種方法也是簡單,邏輯上不好理解,但是還是挺簡單的,學習了
$messageId = 0;
$messageId |= $m << 60;
$messageId |= $d << 55;
$messageId |= $h << 50;
$messageId |= $i << 44;
$messageId |= $s << 38;
$messageId |= $spid << 16;
$messageId |= $sqid & 0xff;
echo $messageId
err的翻譯是
The API configuration file does not exist
API配置文件不存在
我建議你直接找后端小伙伴解決這個問題
剛發(fā)完此貼,就看到了另一個帖子:
https://segmentfault.com/q/10...
發(fā)現(xiàn)原來官方的php:7.x-fpm
鏡像是基于ubantu構(gòu)建的,當然沒有yum
了
所以還是采用剛開始的思路,采用apt-get
來安裝相關的包,解決PHP擴展的問題就OK了
php就用array_diff就可以
a少的:
array_diff($b, $a);
反過來,就是a多的:
array_diff($a, $b);
返回一個數(shù)組.
在使用
npm install
前先手動建立一個 node_modules
目錄,如果此時目錄顯示為 黃色圖標 就不用管了 已經(jīng)忽略索引了。
如果沒有 就右鍵一下目錄 選擇 Mark Directory as 選擇 exclusion
然后重啟,如果還說會索引 就點擊 左上角 「File」>「invalid Caches/Restart...」 重置索引 重啟PHP Storm
php和js數(shù)據(jù)傳輸一般是將array轉(zhuǎn)成json格式字符串輸出,js使用ajax得到jsondata之后
var arr = eval('('+jsondata+')');//得到數(shù)組arr[1] arr['name']這樣調(diào)用
你應該是在同一個控制器寫了一個新的方法 原有的資源控制器覆蓋了你新寫的路由
url帶參數(shù)不應該是這樣的嗎:http://www.url.com/page.php?k...
$fractionRegularPattern = "/^\d+\.\d+/$";//第一個:正實數(shù)小數(shù)
$currencyRegularPattern = "/^((\d{1,3})|(\d{1,3},)?((\d{3},)*\d{3}))\.\d+$/";//第二個,貨幣
好久沒看到想答的問題了,來一波
a. 這個問題和redis毫無關系
b. 上代碼
<?php
//splat.php
function gen() {
global $argv;
$max = $argv[1];
while($max--) {
yield(str_repeat('x', 10000));
}
}
function noop() {
}
function getargs() {
$arg = func_get_args();
}
function splat(...$arg) {
}
function printmemory($msg) {
printf("%s: %d/%d\n", $msg, memory_get_usage(), memory_get_peak_usage());
}
printmemory(__LINE__);
$gen = gen();
printmemory(__LINE__);
foreach(gen() as $r) {
crc32($r);
}
printmemory(__LINE__);
$argv[2](...$gen);
printmemory(__LINE__);
~/Desktop $ php splat.php 10000 getargs
27: 357896/394272
29: 358504/394272
33: 370816/394272
35: 382912/123779064
~/Desktop $ php splat.php 10000 noop
27: 357896/394272
29: 358504/394272
33: 370816/394272
35: 382912/123250912
~/Desktop $ php splat.php 10000 splat
27: 357896/394272
29: 358504/394272
33: 370816/394272
35: 382912/123779064
~/Desktop $ php splat.php 1000 splat
27: 357896/394272
29: 358504/394272
33: 370816/394272
35: 382912/12695544
~/Desktop $ php splat.php 100 splat
27: 357896/394272
29: 358504/394272
33: 370816/394272
35: 382912/1607672
c. 解釋
27-29-33之間,幾乎沒有內(nèi)存占用,這是所謂的"生成器節(jié)省內(nèi)存”的現(xiàn)象,也就是各種相關文章里都會解釋的,在30行迭代生成器的時候,每次循環(huán)都會進到生成器內(nèi)部去yield一次,產(chǎn)生一個大字符串,下次循環(huán)的時候循環(huán)變量又重新被賦值,之前的字符串自然會被GC回收,所以無論循環(huán)多大多少次,占用的內(nèi)存是穩(wěn)定的(包括上面的$gen=gen()
也是幾乎不占內(nèi)存的)
33-35,無論被調(diào)用的函數(shù)如何,甚至noop函數(shù),都一樣會占用大量內(nèi)存,占用內(nèi)存的量明顯和次數(shù)成正比,也就是說生成器的內(nèi)容被合并到一起而占用了一整塊內(nèi)存。這其實很容易解釋,幾乎的所有語言“調(diào)用函數(shù)”的過程都是類似的
(當然省略了超級多的細節(jié),比如實參形參的映射/copy啊,內(nèi)存管理啊等等什么的,和本題無關)
...$args
這個操作符其實影響的就是第一個階段,計算參數(shù)的時候,看到...操作符,就需要展開其中的參數(shù)來形成參數(shù)列表,那么用生成器的場合,這個階段內(nèi)存就從原有生成器的少量占用變成了完整的占用了,所以即使是空的noop
函數(shù)也會占用幾乎一樣多的內(nèi)存,你的理解是正確的
回到原題的那個redis問題的話,因為重復調(diào)用redis方法一定會占用大量的額外網(wǎng)絡開銷,而一次性批量插入又鐵定逃不開內(nèi)存占用(其實你想redis擴展要發(fā)送這個批量的指令給redis,那么這塊內(nèi)存肯定是要的),比較好的方式就是分組了,每1000個或者10000個合并成一次$redis調(diào)用,mysql也好其他場景也是類似的
由于微信方面出于安全考慮,給出的數(shù)據(jù)都是大概的距離,只能估計。方法如下,前提這個人靜止,本人拿手機通過查看附近的人,記下與該人的距離,然后在其他兩個地方,再次查看附近的人,記下距離。以每次本人點為圓心,距離為半徑畫圓,三者的交點就是那個人的位置。精度應該是一個描述這差異范圍的值。
不會,PHP 的一個腳本就是一個進程,除非在里面用調(diào)用系統(tǒng)函數(shù)顯式的 fork
進程出來。
1.MVC了解一下!邏輯控制寫在控制器,數(shù)據(jù)處理寫在model里。
2.控制器調(diào)用model中的方法,model的方法執(zhí)行成功或者失敗返回布爾值,然后控制器根據(jù)布爾值來判斷執(zhí)行的結(jié)果。
3.答案1
聲明全局變量
<script>
var quanjubianliang = "abc"
function f() {
quanjubianliang = "edf"
}
function f2() {
console.log(quanjubianliang)
}
</script>
const data = [
{ym: 123},
{ym: 345},
{ym: 123},
{ym: 345},
]
let result = []
let subArr = [] // 用于去重(避免同一組ym出現(xiàn)在多個數(shù)組中)
data.forEach(item1 => {
const ym = item1.ym
if(!subArr.includes(ym)){
subArr.push(ym)
result.push(data.filter(item2 => ym === item2.ym))
}
})
limit n,m
,表示起始值為n,然后取出m個記錄。如果batch size為25,那么可以:limit 25
,limit 25,25
,limit50,25
... 依次下去,默認按照表的主鍵id升序排列,每次記錄最大的已處理記錄的主鍵id(這里基于了一個假設,此表是自增主鍵)
如果此表沒有新增記錄,以上方法肯定沒問題,但是如果此表有多個事務并發(fā)寫入,可能會導致大id記錄先于小id記錄(兩個事務)被處理,導致這部分小id記錄永遠也不會被處理到。
問題中使用post_date
其實也會有這個問題,無法保證post_date
小的數(shù)據(jù)記錄一定先于post_date
大的記錄先入庫。insert時間早,id小的記錄并不一定早于id大的記錄插入至數(shù)據(jù)庫。此完全取決于事務的提交時間。
1、時間檢索結(jié)果集小的話就一個start_time單列索引就夠了,force一下索引,因為group by會引導mysql走group by字段的索引或者直接全掃。
2、看表名,你這應該是一個分表,如果時間范圍直接覆蓋了大部分表數(shù)據(jù)的話什么索引都不用了,全表掃吧,什么三個字段兩個字段加索引并沒有什么用,時間范圍加group by字段的復合索引也只用到了時間字段,只有group by字段的索引就是掃了全表,除非用索引覆蓋
北大青鳥APTECH成立于1999年。依托北京大學優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
北大青鳥中博軟件學院創(chuàng)立于2003年,作為華東區(qū)著名互聯(lián)網(wǎng)學院和江蘇省首批服務外包人才培訓基地,中博成功培育了近30000名軟件工程師走向高薪崗位,合作企業(yè)超4
中公教育集團創(chuàng)建于1999年,經(jīng)過二十年潛心發(fā)展,已由一家北大畢業(yè)生自主創(chuàng)業(yè)的信息技術與教育服務機構(gòu),發(fā)展為教育服務業(yè)的綜合性企業(yè)集團,成為集合面授教學培訓、網(wǎng)
達內(nèi)教育集團成立于2002年,是一家由留學海歸創(chuàng)辦的高端職業(yè)教育培訓機構(gòu),是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
浪潮集團項目經(jīng)理。精通Java與.NET 技術, 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗,技術功底深厚。 授課風格 授課風格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
曾工作于聯(lián)想擔任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔任項目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍懿科技有限責任公司從事總經(jīng)理職務負責iOS教學及管理工作。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應用開發(fā)經(jīng)驗。曾經(jīng)歷任德國Software AG 技術顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。