kotlin不知道,但Java確實(shí)不允許修改靜態(tài)常量字段的值,非靜態(tài)的可以。
不好意思~ jwt是不支持主動(dòng)使用戶token過期的。
要知道用戶登錄身份的校驗(yàn),基本就兩種:
①客戶端存儲一個(gè)隨機(jī)串,發(fā)送請求時(shí)攜帶該串。服務(wù)器接收到之后拿著這個(gè)串去存儲中做比對,找到對應(yīng)的數(shù)據(jù)。
②將所有數(shù)據(jù)都存儲到客戶端。這樣就有會(huì)安全問題,因?yàn)榉?wù)器無法確定那些數(shù)據(jù)是有效的,那些數(shù)據(jù)是偽造的。所以就引入了簽名的概念。用算法的方式來保證數(shù)據(jù)的可信性。
早期的網(wǎng)站基本就一個(gè)主站,也沒有分布式的部署。所以多數(shù)都采用第一種方式。
但隨著訪問量的增加,開始做分布式,就涉及到了session共享的問題。比如①中的存儲,使用redis來達(dá)到共享數(shù)據(jù)的效果。但是這樣會(huì)在服務(wù)器中存儲大量的數(shù)據(jù)。
然后呢,就出來另外一種。不在服務(wù)器存儲數(shù)據(jù)。其中一個(gè)就是jwt。
jwt在生成時(shí),可以設(shè)置有效期。理論上 一個(gè)用戶可以產(chǎn)生無數(shù)個(gè)jwt,且jwt的有效期獨(dú)立。
如果你想將一個(gè)還在有效期內(nèi)的jwt置為無效,那就必須要在服務(wù)器存儲數(shù)據(jù),這就違背了他的設(shè)計(jì)原則~
其實(shí)。他的退出,就是客戶端主動(dòng)將jwt扔掉(假設(shè)不會(huì)被其他人撿到)~~~~~ 那么這個(gè)jwt不就不存在了嗎~ 這不就完成注銷功能了嗎~
多種可能,八,十六,三十二進(jìn)制等等,如下圖:
圖片描述
1、保存線程棧:jstack -l pid > jstack.log
2、保存heap:jmap -dump:format=b,file=heap.hprof pid
3、使用mat分析heap,看是否有內(nèi)存泄露
4、分析gc log(如果之前沒有開啟gc log,要開啟,然后復(fù)現(xiàn),再拿gc log來查看),看是否是gc參數(shù)配置的不恰當(dāng)
附開啟gclog的參數(shù)
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
-XX:+PrintGCTimeStamps
-XX:+PrintTenuringDistribution
-Xloggc:/some-path/gc-$(date +%Y%m%d-%H%M%S).log
-XX:+UseGCLogFileRotation
-XX:NumberOfGCLogFiles=5
-XX:GCLogFileSize=10M
-Xlog:gc*=info:file=/some-path/gc-%t-%p.log:timemillis,pid:filecount=5,filesize=10M@ResponseBody 接收的是前臺你用 JSON 傳遞過來的一個(gè)整體,所以你前臺需要將 String 和 List 封裝在一個(gè)對象里面。
var json = {};
json['content'] = content;
json['param'] = [{id: 1, name: "hello"}, {id: 2, name: "hello"}];
// ajax data
data:JSON.stringify(json)
后臺接收的話,建議是寫一個(gè)對象來接收比如,
public class SomeModel {
private String content;
private List<Tag> param;
// getter and setter
}
controller
@RequestMapping(value = "add", consumes = "application/json; charset=utf-8")
public String add(@RequestBody SomeModel someModel) {
String content = someModel.getContent();
List<Tag> param = someModel.getParam();
}
或者可以偷懶,用 Map 來接收。
webapps/下的所有文件都可以刪掉,沒事的。刪掉host-manager和manager只是少了web端的管理界面而已,反正平時(shí)我?guī)缀跏遣挥玫?,發(fā)布程序都是重啟tomcat,所以那倆web界面其實(shí)沒什么卵用。
Windows或者Linux下,我一般都是直接寫的絕對路徑
同時(shí)也建議寫成完整路徑,這些看起來更加清晰易懂
volumes:
- H:/code:/webser/www # H是盤符,H:/code是Windows共享目錄你理解的左連接是錯(cuò)誤的,左連接是會(huì)匹配所有滿足條件的數(shù)據(jù),如果 trd_goods 中有記錄在 trd_goods_tag_relation 匹配不到數(shù)據(jù)還是會(huì)產(chǎn)生一條記錄,只不過查詢中 trd_goods_tag_relation 中的字段是 null, 這就是以左邊的表為主。
| 代碼 | 說明 |
|---|---|
| . | 匹配除換行符(n, r)之外的任意 單個(gè) 字符。 |
| \w | 匹配大小寫字母、或數(shù)字、或下劃線。等價(jià)于[A-Za-z0-9_]。 |
| \W | 跟小寫的 w 正好相反。等價(jià)于1。 |
| \s | 匹配任意的空白字符,包括空格、制表符、換頁符等。等價(jià)于[fnrtv]。 |
| \S | 跟小寫的 s 正好相反。等價(jià)于2。 |
| \d | 匹配一個(gè)數(shù)字字符,等價(jià)于[0-9]。 |
| \D | 匹配一個(gè)非數(shù)字字符,等價(jià)于3。 |
| \b | 匹配一個(gè)單詞的邊界,也就是單詞和空格的位置。 例如, 'erb' 可匹配 'never' 中的 'er',但不匹配 'verb' 中的 'er'。 |
| ^ | 匹配輸入字符串開始位置。 |
| $ | 匹配輸入字符串的結(jié)束位置。 |
| [] | 匹配[]中列舉的字符。 |
| 代碼/語法 | 說明 |
|---|---|
| * | 重復(fù)匹配前面的子表達(dá)式零次或更多次 |
| + | 重復(fù)匹配前面的子表達(dá)式一次或更多次 |
| ? | 重復(fù)匹配前面的子表達(dá)式零次或一次 |
| {n} | 重復(fù)匹配前面的子表達(dá)式n次 |
| {n,} | 重復(fù)匹配前面的子表達(dá)式n次或更多次 |
| {n,m} | 重復(fù)匹配前面的子表達(dá)式n到m次 |
ret=re.search(r'\d+','hello999')
print(ret.group())
re.search 掃描整個(gè)字符串并返回 第一個(gè) 成功 的匹配。
從字符串最左邊開始匹配,只要匹配到第一個(gè),那就返回,不管其它。
ret=re.search(r'd*','hello999')
print(ret.group())
你用了一個(gè) r'd*', 在此表示字符串 d 出現(xiàn)零次或多次,記住出現(xiàn)零次這個(gè)概念,那就是一個(gè)空字符。你的正則就匹配了 hello 最左邊的一個(gè)空字符。
當(dāng)然,我明白題主的意思是為了匹配數(shù)字字符,但是很遺憾,只有 \d 才等價(jià)與 [0-9], d 僅僅是字符串 d 而已。
要想表達(dá)實(shí)現(xiàn)一次或多次,那么你得使用 + ,
所以最終的表達(dá)式應(yīng)該是 r'、d+'。
這幾個(gè)字段都很小, 如果查詢條件相對固定的話,可以把這幾個(gè)字自段連一塊,形成一個(gè)字個(gè)段, 或物化視圖,并對此字段建索引. 然后只需查一個(gè)字段即可.
還有就是userid!=xxx, 最好改成(userid>xxx and userid<xxx), 也許我的經(jīng)驗(yàn)過時(shí)了, 但至少值得一試.
是自動(dòng)加載還是手動(dòng)加載?看樣子應(yīng)該是自動(dòng)加載的同時(shí)渲染數(shù)據(jù)而卡掉吧,我覺得可以到第九張圖的時(shí)候,渲染新圖前,把 autoplay 改為 false,應(yīng)該就行了吧。
跟數(shù)據(jù)庫無關(guān),是在通過網(wǎng)絡(luò)請求分頁獲取 jkb 上的消息。
<link rel="stylesheet" type="text/css" media="all"
href="../../css/gtvg.css" th:href="@{/css/gtvg.css}" />
**在你頁面頭部加上這個(gè),立馬解決,官方文檔說這是他的運(yùn)行組件,必備得
https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html#using-thtext-and-externalizing-textctrl+click
設(shè)置環(huán)境變量NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
一個(gè)插入語句只能插入一張表。
哪有啟動(dòng)不報(bào)警告的,只要不報(bào)錯(cuò)就行了.兄弟
不是viewpager+fragment+tablayout的問題,是你其他代碼的問題
相對web項(xiàng)目來說,放到classes下,那是因?yàn)槟抢锸琼?xiàng)目的根目錄,那個(gè)相對路徑是 /
例如你的文件是jdbc.properties,那么就配的相對路徑就是“/jdbc.properties”,也可以是“jdbc.properties”
jQuery與原生的事件基本上是一一對應(yīng)的。寫法不一樣而已
偽代碼:
let $dom; //jQuery
let dom; //js
$dom.mouseenter(function(event){...});
dom.onmouseenter = function(event){...}北大青鳥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)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
北大課工場是北京大學(xué)校辦產(chǎn)業(yè)為響應(yīng)國家深化產(chǎn)教融合/校企合作的政策,積極推進(jìn)“中國制造2025”,實(shí)現(xiàn)中華民族偉大復(fù)興的升級產(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ù), 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(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)師。