m,n,p,q未初始化
//testgo.h
#ifdef __cplusplus
extern "C"{
#endif
extern long getaddr();
extern int calladdr(long addr);
#ifdef __cplusplus
}
#endif
//testgo.cpp
#include <stdio.h>
#include "testgo.h"
typedef int(*pfun)();
int testfunc(){
return 123654;
}
long getaddr() {
return (long)testfunc;
}
int calladdr(long addr){
return ((pfun)addr)();
}
//test.go
package main
// #include "testgo.h"
// #cgo LDFLAGS: ${SRCDIR}/testgo.so -lstdc++
import "C"
import "fmt"
func main() {
addr := C.getaddr()
fmt.Println("addr is", addr)
fmt.Println("call ret:", C.calladdr(addr))
}
g++ -shared -fPIC testgo.cpp -o testgo.so
go run test.go
通過(guò)getaddr取得testfunc的函數(shù)地址,再通過(guò)calladdr調(diào)用地址對(duì)應(yīng)的函數(shù),你看看是不是你想要的
lala = [1,1,1,2,3,4,5,8,10,22,24,25,26,66]
res = []
tmp = [lala[0]]
for i in range(1, lala.__len__()):
if lala[i] - lala[i-1] == 1:
tmp.append(lala[i])
else:
if len(tmp) == 1:
res.append(tmp[0])
tmp = [lala[i]]
else:
res.append(tmp)
tmp = [lala[i]]
print(res)
32位為1行,這樣子排好對(duì)齊,長(zhǎng)度也一目了然
感覺(jué)這個(gè)就可以一定程度的優(yōu)化。
Js通過(guò)記憶優(yōu)化遞歸
https://www.cnblogs.com/yingp...
這個(gè)有個(gè)JAVA代碼,你可以參考下。我一開(kāi)始是用C寫(xiě)的,感覺(jué)太麻煩了,JAVA不太會(huì),但是看懂了一點(diǎn),希望可以幫到你
第一個(gè)問(wèn)題:你給出的代碼都是以字節(jié)而不是位來(lái)定義緩存大小的;
第二個(gè)問(wèn)題:通常操作系統(tǒng)都提供了帶緩存的IO操作(IO流接口),如果在實(shí)際使用中通過(guò)測(cè)試發(fā)現(xiàn)瓶頸在IO,再考慮實(shí)現(xiàn)自己的IO緩存,
不行的,因?yàn)槊恳唤M需要上一組的計(jì)算結(jié)果,鏈?zhǔn)降?/p>
你加個(gè)插件配置plugins,讓構(gòu)建好的js自動(dòng)給引入到頁(yè)面去
你需要看下post的數(shù)據(jù)是什么類型的,直接post字典不成功的話,把字典json.dumps()一下??纯词欠癯晒?/p>
kafka里面有單播和廣播的區(qū)別,對(duì)一條消息來(lái)說(shuō),同一個(gè)消費(fèi)組內(nèi)的消費(fèi)者有競(jìng)態(tài)關(guān)系,只有一個(gè)消費(fèi)者能消費(fèi),這個(gè)是單播;同樣,對(duì)一條消息,不同消費(fèi)組的消費(fèi)者都可以同時(shí)消費(fèi),這是多播。假如你想讓兩個(gè)消費(fèi)者都能同時(shí)消費(fèi)到消息,你可以將這兩個(gè)消費(fèi)者放在不同的消費(fèi)組,這個(gè)需要消費(fèi)端的groupId屬性來(lái)設(shè)置。
不要怕,webstorm會(huì)告訴你unreachable code
webstorm還會(huì)幫你把代碼優(yōu)化成這樣
String.prototype.endWith = function (str) {
if (str == null || str === "" || this.length === 0 || str.length > this.length) {
return false;
}
return !!this.substring(this.length - str.length);
};
說(shuō)下自己的理解,供參考。假設(shè)題主了解網(wǎng)絡(luò)編程和計(jì)算機(jī)系統(tǒng)的一些基本概念。
簡(jiǎn)單概括來(lái)說(shuō),事件驅(qū)動(dòng)是實(shí)現(xiàn)并發(fā)處理的一種方式。
我們就以HTTP請(qǐng)求的處理過(guò)程為例,為簡(jiǎn)化說(shuō)明,僅考慮網(wǎng)絡(luò)IO,不考慮文件IO和數(shù)據(jù)庫(kù)等其他過(guò)程,也不考慮多核系統(tǒng)。
考慮采用如下最簡(jiǎn)模型來(lái)處理HTTP請(qǐng)求:
main_loop:
accept()
recv()
parse()
send()
close()
來(lái)一個(gè)連接,讀取數(shù)據(jù)(請(qǐng)求),解析請(qǐng)求內(nèi)容,返回?cái)?shù)據(jù)(應(yīng)答)。
同一時(shí)間只為一個(gè)客戶端服務(wù)。在為A客戶端服務(wù)的過(guò)程中,B客戶端必須等待。
這種方式非常簡(jiǎn)單直接,容易理解,但其無(wú)法滿足現(xiàn)實(shí)場(chǎng)景的需要——不支持并發(fā)。
現(xiàn)實(shí)中,客戶端的請(qǐng)求是并發(fā)的:即當(dāng)一個(gè)客戶端的請(qǐng)求還在處理時(shí),另外一個(gè)客戶端的請(qǐng)求就會(huì)達(dá)到,甚至多個(gè)客戶端的請(qǐng)求同時(shí)達(dá)到。
而且,recv 和 send等涉及網(wǎng)絡(luò)操作的API由于網(wǎng)絡(luò)數(shù)據(jù)發(fā)送與到達(dá)的不確定性,可能需要等待,CPU會(huì)空閑下來(lái)——但這種模型下即使CPU空閑了也無(wú)法處理其他客戶端的請(qǐng)求,浪費(fèi)了CPU。
我們采用如下多線程模型,可以解決上述問(wèn)題:
main_loop:
accept()
start_thread(thread_loop)
thread_loop:
recv()
parse()
send()
close()
exit thread()
即每個(gè)客戶端在一個(gè)獨(dú)立的線程中處理。
當(dāng)一個(gè)客戶端的線程執(zhí)行網(wǎng)絡(luò)操作需要等待時(shí),會(huì)被操作系統(tǒng)調(diào)度出去,執(zhí)行其他需要干活兒的線程。
似乎完美了解決了我們的問(wèn)題?
然而并沒(méi)有。
因?yàn)椴僮飨到y(tǒng)創(chuàng)建線程的開(kāi)銷是比較大的,能夠支持的線程數(shù)量是有限的,通常是幾萬(wàn)的級(jí)別,如果線程太多,就會(huì)有很多的CPU浪費(fèi)在了線程的創(chuàng)建、銷毀、調(diào)度等管理操作上。
所以為了充分發(fā)揮CPU的能力,支持更多的并發(fā)數(shù)量,,在Linux上有另外一種處理并發(fā)的方式:
內(nèi)核提供了監(jiān)聽(tīng)大量網(wǎng)絡(luò)連接(句柄)可讀、可寫(xiě)等事件的機(jī)制和接口。
應(yīng)用把需要監(jiān)聽(tīng)對(duì)象以及關(guān)心的事件注冊(cè)給內(nèi)核,內(nèi)核在有事件達(dá)到時(shí)通知應(yīng)用處理。
基于這種機(jī)制處理并發(fā)就是事件驅(qū)動(dòng)。
事件驅(qū)動(dòng)機(jī)制的基本模型是:
create_listen_socket()
register_event_for_listen_socket()
main_loop:
wait_for_event()
check_events:
if listen_socket has event(new client coming) :
accept()
register_event_for_client_socket()
if client_socket has event(new data coming):
recv()
parse()
send()
但這里有一個(gè)問(wèn)題,有可能一個(gè)客戶端剛讀取了一部分?jǐn)?shù)據(jù),就沒(méi)了,剩下的還在網(wǎng)絡(luò)中沒(méi)過(guò)來(lái),需要繼續(xù)等待。
這就需要把當(dāng)前的讀取內(nèi)容和請(qǐng)求處理狀態(tài)(也即上下文)保存起來(lái),繼續(xù)處理其他客戶端的事件。
然后下次這個(gè)客戶端再有事件到來(lái)時(shí)再找回上下文繼續(xù)處理。
這其實(shí)需要應(yīng)用自己做一些任務(wù)調(diào)度相關(guān)的上下文保存和切換工作。
當(dāng)使用多線程處理并發(fā)時(shí),操作系統(tǒng)幫我們做了這些工作,我們無(wú)需關(guān)心任務(wù)切換。
因?yàn)橐粋€(gè)線程就只處理一個(gè)客戶端,反復(fù)調(diào)用recv把一個(gè)請(qǐng)求的數(shù)據(jù)讀完然后解析處理就可以了,也不用擔(dān)心沒(méi)數(shù)據(jù)到來(lái)時(shí),recv阻塞了其他客戶端的處理。
所以多線程編寫(xiě)并發(fā)代碼非常簡(jiǎn)單直接。
如上,事件驅(qū)動(dòng)機(jī)制是Linux上解決并發(fā)問(wèn)題的一種高效編程模型。
應(yīng)用反復(fù)探測(cè)事件,對(duì)接收到的事件進(jìn)行逐個(gè)處理的過(guò)程就是事件循環(huán)。
那么同步和異步概念體現(xiàn)在哪里呢?
所謂同步就是我們執(zhí)行一個(gè)任務(wù),一直等待任務(wù)執(zhí)行結(jié)束。
所謂異步就是我們執(zhí)行一個(gè)任務(wù),不等待任務(wù)執(zhí)行結(jié)束,繼續(xù)去干其他活兒,任務(wù)結(jié)果后有個(gè)通知,或者干脆不關(guān)心任務(wù)的執(zhí)行結(jié)果。
在多線程模型中,每接收到一個(gè)新的客戶端就創(chuàng)建一個(gè)線程處理,這就是一種異步處理。
在事件驅(qū)動(dòng)模型中,當(dāng)沒(méi)有數(shù)據(jù)可讀時(shí),就把這個(gè)客戶端繼續(xù)放到監(jiān)聽(tīng)隊(duì)列中監(jiān)聽(tīng),也是一種異步。
如果我們考慮文件IO,把IO請(qǐng)求丟給另外一個(gè)或一組線程(線程池)處理,處理完后通知主線程,也是一種異步。
標(biāo)準(zhǔn)約定std::thread構(gòu)造時(shí)向函數(shù)對(duì)象傳遞實(shí)際參數(shù)的拷貝(支持移動(dòng)語(yǔ)義),而不是轉(zhuǎn)發(fā)實(shí)際參數(shù)(你可以通過(guò)打印實(shí)際參數(shù)和形式參數(shù)的地址來(lái)檢測(cè)這一行為)。即fun的形式參數(shù)是被a的拷貝初始化的,所以形式參數(shù)a并不是main函數(shù)內(nèi)a的引用,在fun內(nèi)賦值自然不會(huì)改變main函數(shù)內(nèi)a的值。
如果你希望“以引用的方式傳參”,常用解決方案之一是使用std::ref,即std::thread(fun, std::ref(a));
。
#include <iostream>
#include <string>
const int Asize = 20;
int main()
{
using namespace std;
char line[Asize];
cout << "Type, and I shall repeat.\n";
int idx=0;
char temp{};
do{
cin.get(temp);
line[idx++] = temp;
if(idx==Asize-1){
idx=0;
}
}while(temp!='.');
cout<<string(line);
cout << "\nPlease excuse the slight confusion.\n";
return 0;
}
CURLOPT_SSL_VERIFYPEER 新版php中默認(rèn)是2
提供幾種思路:
(1)將包含 N 個(gè)數(shù)的數(shù)組打亂,然后選取前 10 個(gè)數(shù)。
(2)將每次得到的數(shù)放入 HashSet,下次取得一個(gè)數(shù)時(shí)先判斷是否存在于 Set 當(dāng)中,直到當(dāng) Set 的 size 為 10 時(shí)結(jié)束。
不同組件觸發(fā)事件的時(shí)候傳一個(gè)不同的參數(shù)就行了
北大青鳥(niǎo)APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國(guó)IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國(guó)家
北大青鳥(niǎo)中博軟件學(xué)院創(chuàng)立于2003年,作為華東區(qū)著名互聯(lián)網(wǎng)學(xué)院和江蘇省首批服務(wù)外包人才培訓(xùn)基地,中博成功培育了近30000名軟件工程師走向高薪崗位,合作企業(yè)超4
中公教育集團(tuán)創(chuàng)建于1999年,經(jīng)過(guò)二十年潛心發(fā)展,已由一家北大畢業(yè)生自主創(chuàng)業(yè)的信息技術(shù)與教育服務(wù)機(jī)構(gòu),發(fā)展為教育服務(wù)業(yè)的綜合性企業(yè)集團(tuán),成為集合面授教學(xué)培訓(xùn)、網(wǎng)
達(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
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺(tái)面向?qū)ο箝_(kāi)發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
曾工作于聯(lián)想擔(dān)任系統(tǒng)開(kāi)發(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é)及管理工作。
精通HTML5和CSS3;Javascript及主流js庫(kù),具有快速界面開(kāi)發(fā)的能力,對(duì)瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁(yè)制作和網(wǎng)頁(yè)游戲開(kāi)發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開(kāi)發(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)師。