python3
>>> import re
>>> def ptn(s):
l = []
t = set()
for c in s:
if c not in t:
l.append(r'(?P<%s>\w)' % c)
t.add(c)
else:
l.append(r'(?P=%s)' % c)
return '(?=(%s))' % ''.join(l)
>>> def 模式匹配(字符串, 模式):
return [x[0] for x in re.compile(ptn(模式)).findall(字符串)]
>>> 模式匹配('ababcb', 'xyx')
['aba', 'bab', 'bcb']
>>> 模式匹配('abcc', 'xyaa')
['abcc']
>>> 你這邊直接運(yùn)行pyc,它的默認(rèn)搜索路徑和預(yù)加載模塊中都沒有AAA,所以不可能識(shí)別出來。正常的流程是運(yùn)行一個(gè)頂層腳本,它的同級(jí)目錄中有多個(gè)依賴的package
因?yàn)?code>jdbcTemplate最終還是會(huì)通過jdbc的預(yù)編譯語句 ps.setObject(name,value)來賦值, 其中name是屬性名,所以Map的key是String類型即可, 但由于不知道value的類型, 所以Map的value類型是Object.
在你的數(shù)據(jù)源配置文件的上面加入一個(gè)bean:
<!-- 引入配置文件 -->
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location" value="classpath:jdbc.properties" />
</bean>你這是少依賴包了吧,SpringServletContainerInitializer是spring-web包下的類。不過你能在獨(dú)立Tomcat下運(yùn)行,不太應(yīng)該少包,建議你把pom.xml和web.xml貼出來一下。
不同語言前臺(tái)可后臺(tái)獲取到的date格式不同,直接給前端不見得能解析成功,然而時(shí)間戳都是一樣的。
JS 原生庫里面沒有priority queue, 這個(gè)得自己實(shí)現(xiàn)。說著找library。
你可以看下這個(gè)庫jsqrcode,可以轉(zhuǎn)二維碼,也可以轉(zhuǎn)url
form標(biāo)簽添加enctype="multipart/form-data"
層級(jí)節(jié)點(diǎn),做code,看一下我天朝的行政區(qū)劃代碼,
| 第一層 | 第二層 | 第三層 |
|---|---|---|
100 |
100100 |
100100100 |
200 |
200100 |
200100100 |
300 |
300100 |
300100100 |
查詢某個(gè)節(jié)點(diǎn)的子集(子子集等),like '100%';
id與pid保留,兩種模式。
解決方式:子路由全部加上/hello,應(yīng)該是刷新時(shí)找不到對(duì)應(yīng)的模塊,但是報(bào)405,http的get請(qǐng)求錯(cuò)誤還是想不通
你只能確定你需要的是哪個(gè)包的REXP,然后將另一個(gè)import刪掉了.
我不信你一個(gè)類里兩個(gè)REXP都需要用,真用的話建議將代碼分割為兩個(gè)類.
通過index映射到某個(gè)方法,返回一個(gè)ModelAndView,Model是查詢出的數(shù)據(jù),View為跳轉(zhuǎn)的頁面,jsp可以獲取Model里面的數(shù)據(jù)。
@RequestMapping("/index")
public ModelAndView index(){
ModelAndView mav = new ModelAndView();
//查詢數(shù)據(jù)
//mav.setView();
return mav;
}js如果有DES/CBC的話,Padding可以自己實(shí)現(xiàn)哈。
如果是使用 spring-boot-starter-thymeleaf,可以添加下列配置在application.properties
spring.thymeleaf.check-template-location=true
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html
spring.thymeleaf.mode=html
spring.thymeleaf.encoding=UTF-8
spring.thymeleaf.content-type=text/html
spring.thymeleaf.cache=false問題已解決,重啟IDE
a.filter(item => item['省會(huì)'] === '杭州123')[0]['金額'] = 55;說下自己的理解,供參考。假設(shè)題主了解網(wǎng)絡(luò)編程和計(jì)算機(jī)系統(tǒng)的一些基本概念。
簡單概括來說,事件驅(qū)動(dòng)是實(shí)現(xiàn)并發(fā)處理的一種方式。
我們就以HTTP請(qǐng)求的處理過程為例,為簡化說明,僅考慮網(wǎng)絡(luò)IO,不考慮文件IO和數(shù)據(jù)庫等其他過程,也不考慮多核系統(tǒng)。
考慮采用如下最簡模型來處理HTTP請(qǐng)求:
main_loop:
accept()
recv()
parse()
send()
close()
來一個(gè)連接,讀取數(shù)據(jù)(請(qǐng)求),解析請(qǐng)求內(nèi)容,返回?cái)?shù)據(jù)(應(yīng)答)。
同一時(shí)間只為一個(gè)客戶端服務(wù)。在為A客戶端服務(wù)的過程中,B客戶端必須等待。
這種方式非常簡單直接,容易理解,但其無法滿足現(xiàn)實(shí)場景的需要——不支持并發(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ì)空閑下來——但這種模型下即使CPU空閑了也無法處理其他客戶端的請(qǐng)求,浪費(fèi)了CPU。
我們采用如下多線程模型,可以解決上述問題:
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í)行其他需要干活兒的線程。
似乎完美了解決了我們的問題?
然而并沒有。
因?yàn)椴僮飨到y(tǒng)創(chuàng)建線程的開銷是比較大的,能夠支持的線程數(shù)量是有限的,通常是幾萬的級(jí)別,如果線程太多,就會(huì)有很多的CPU浪費(fèi)在了線程的創(chuàng)建、銷毀、調(diào)度等管理操作上。
所以為了充分發(fā)揮CPU的能力,支持更多的并發(fā)數(shù)量,,在Linux上有另外一種處理并發(fā)的方式:
內(nèi)核提供了監(jiān)聽大量網(wǎng)絡(luò)連接(句柄)可讀、可寫等事件的機(jī)制和接口。
應(yīng)用把需要監(jiān)聽對(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è)問題,有可能一個(gè)客戶端剛讀取了一部分?jǐn)?shù)據(jù),就沒了,剩下的還在網(wǎng)絡(luò)中沒過來,需要繼續(xù)等待。
這就需要把當(dāng)前的讀取內(nèi)容和請(qǐng)求處理狀態(tài)(也即上下文)保存起來,繼續(xù)處理其他客戶端的事件。
然后下次這個(gè)客戶端再有事件到來時(shí)再找回上下文繼續(xù)處理。
這其實(shí)需要應(yīng)用自己做一些任務(wù)調(diào)度相關(guān)的上下文保存和切換工作。
當(dāng)使用多線程處理并發(fā)時(shí),操作系統(tǒng)幫我們做了這些工作,我們無需關(guān)心任務(wù)切換。
因?yàn)橐粋€(gè)線程就只處理一個(gè)客戶端,反復(fù)調(diào)用recv把一個(gè)請(qǐng)求的數(shù)據(jù)讀完然后解析處理就可以了,也不用擔(dān)心沒數(shù)據(jù)到來時(shí),recv阻塞了其他客戶端的處理。
所以多線程編寫并發(fā)代碼非常簡單直接。
如上,事件驅(qū)動(dòng)機(jī)制是Linux上解決并發(fā)問題的一種高效編程模型。
應(yīng)用反復(fù)探測(cè)事件,對(duì)接收到的事件進(jìn)行逐個(gè)處理的過程就是事件循環(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)沒有數(shù)據(jù)可讀時(shí),就把這個(gè)客戶端繼續(xù)放到監(jiān)聽隊(duì)列中監(jiān)聽,也是一種異步。
如果我們考慮文件IO,把IO請(qǐng)求丟給另外一個(gè)或一組線程(線程池)處理,處理完后通知主線程,也是一種異步。
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國一站式人才培養(yǎng)平臺(tái)、一站式人才輸送平臺(tái)。2014年4月3日在美國成功上市,融資1
北大課工場是北京大學(xué)校辦產(chǎn)業(yè)為響應(yīng)國家深化產(chǎn)教融合/校企合作的政策,積極推進(jìn)“中國制造2025”,實(shí)現(xiàn)中華民族偉大復(fù)興的升級(jí)產(chǎn)業(yè)鏈。利用北京大學(xué)優(yōu)質(zhì)教育資源及背
博為峰,中國職業(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庫,具有快速界面開發(fā)的能力,對(duì)瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。