阿里云遷移過了,用新版的阿里云demo就行了
spring boot并不需要顯示指定@ComponentScan
@RunWith(SpringRunner.class)
@SpringBootTest
public class ApplicationTests {
@Test
public void contextLoads() {
}
}
可以參考spring boot示例代碼
有問題再反饋吧
1.手機(jī)短信驗(yàn)證碼存放到 redis里,設(shè)置失效時(shí)間,一般5分鐘比較合適
2.通過設(shè)置圖片驗(yàn)證碼來達(dá)到防轟炸的效果,比如同一用戶獲取驗(yàn)證碼次數(shù)超過三次,彈出圖形驗(yàn)證碼。
RandomAccessFile
服務(wù)提供者。
微服務(wù)架構(gòu)中會(huì)涉及到多個(gè)服務(wù)間的調(diào)用。一個(gè)服務(wù)的不可用可能會(huì)引起整個(gè)系統(tǒng)的級(jí)聯(lián)故障。熔斷器就是放在各個(gè)服務(wù)間的一個(gè)保護(hù)者,用來保護(hù)服務(wù)高可用的。
?表示前面的內(nèi)容匹配0或者1次,在(https?|ftp|file):后面添加?,表示前面的內(nèi)容出現(xiàn)0次或者1次都可以,也就是說url中可以有協(xié)議,也可以沒有協(xié)議:
(?:(https?|ftp|file):)?//[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]
不知道你是不是在js里面使用,如果是在js中,這兩個(gè)//是需要轉(zhuǎn)義的:
let reg = /(?:(https?|ftp|file):)?\/\/[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]/代碼中有很多問題,基本上思路就是錯(cuò)的。1,讀文件有問題,txt2String中System.lineSeparator()應(yīng)該加s后面。2,分割字符串有問題,count函數(shù)str.split("b");未考慮其它分隔符的情況,正確的做法是用正則表達(dá)式str.split("\s");。3,初始化后,list.size()=0,當(dāng)然不會(huì)進(jìn)入循環(huán)。
如果只想要代碼的話看這里,java 字符串詞頻統(tǒng)計(jì)實(shí)例代碼
下面代碼是連接中的內(nèi)容
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class WordsStatistics {
class Obj {
int count ;
Obj(int count){
this.count = count;
}
}
public List<WordCount> statistics(String word) {
List<WordCount> rs = new ArrayList<WordCount>();
Map <String,Obj> map = new HashMap<String,Obj>();
if(word == null ) {
return null;
}
word = word.toLowerCase();
word = word.replaceAll("'s", "");
word = word.replaceAll(",", "");
word = word.replaceAll("-", "");
word = word.replaceAll("\\.", "");
word = word.replaceAll("'", "");
word = word.replaceAll(":", "");
word = word.replaceAll("!", "");
word = word.replaceAll("\n", "");
String [] wordArray = word.split(" ");
for(String simpleWord : wordArray) {
simpleWord = simpleWord.trim();
if (simpleWord != null && !simpleWord.equalsIgnoreCase("")) {
Obj cnt = map.get(simpleWord);
if ( cnt!= null ) {
cnt.count++;
}else {
map.put(simpleWord, new Obj(1));
}
}
}
for(String key : map.keySet()) {
WordCount wd = new WordCount(key,map.get(key).count);
rs.add(wd);
}
Collections.sort(rs, new java.util.Comparator<WordCount>(){
@Override
public int compare(WordCount o1, WordCount o2) {
int result = 0 ;
if (o1.getCount() > o2.getCount() ) {
result = -1;
}else if (o1.getCount() < o2.getCount()) {
result = 1;
}else {
int strRs = o1.getWord().compareToIgnoreCase(o2.getWord());
if ( strRs > 0 ) {
result = 1;
}else {
result = -1 ;
}
}
return result;
}
});
return rs;
}
public static void main(String args[]) {
String word = "Pinterest is might be aa ab aa ab marketer's dream - ths site is largely used to curate products " ;
WordsStatistics s = new WordsStatistics();
List<WordCount> rs = s.statistics(word);
for(WordCount word1 : rs) {
System.out.println(word1.getWord()+"*"+word1.getCount());
}
}
}
不傳比較嚴(yán)謹(jǐn),這個(gè)JS也容易控制的,
let url = ''
const id_data = `id=${id}`
const name_data = name_data = `name=${name}`;
const age_data = age_data = `age=${age}`;
Boolean(name_data) && Boolean(age_data) && url = `biz?${id_data}?${name_data}?${age_data}`;
Boolean(name_data) && Boolean(!age_data) && url = `biz?${id_data}?${name_data}`;
Boolean(!name_data) && Boolean(age_data) && url = `biz?${id_data}?${age_data}`;
問題描述不清楚
[[1,2,3],['a','b','c'],['A','B','C']]
[[1,2,3],['a','b','c'],['A','B']]
[[1,2],['a','b','c'],['A','B','C']]
[[1,2,3],['a',['x','y'],'c'],['A','B','C']]
數(shù)組下標(biāo)越位,去到提示的行數(shù)找找原因
只要在一個(gè)事務(wù)里哪怕是不同庫里的操作,都是一起成功或一起失敗。
為什么不自己試試呢?
set autocommit = 0;
update db1.t1 set c1='test' where id = 1 ;
select sleep(3);
update db2.t1 set c1='test' where id = 1;/*db2.t1表故意不要?jiǎng)?chuàng)建c1列制造錯(cuò)誤*/
select sleep(3);
commit;參數(shù)里已經(jīng)制定了參數(shù)的類型,肯定是反射而成啊。
這是一個(gè)坑
xml模板不能有空格,清除掉就可以了
微信官方文檔給的模板有空,但沒有做提示。
這是一個(gè)閉包的問題,這樣解決
...
def wrapper(i):
def add_fun(self):
return self.num + i
return add_fun
setattr(..., wrapper(i), ...)
...$(".PanelBody").delegate(".personId","click",function(){
console.log("123")
});
這是thymeleaf 2的bug ,升級(jí)到thymeleaf 3可以解決此bug;
thymeleaf2的時(shí)候是自己處理的json;
thymeleaf3使用的jackson,jackson可以通過使用@JsonIgnoreProperties和@JsonIgnore注解解決 兩個(gè)類互相引用的問題
你好,以上的問題在并發(fā)下出現(xiàn)了共享變量不可見的問題,synchronized和volatile都是為了保護(hù)多線程的安全,synchronized具有原子性和可見性,而volatile只有可見性,上面出現(xiàn)接受循環(huán)是因?yàn)槌霈F(xiàn)了線程交叉,volatile不能保證原子性,多線程間共享變量的可見性是其安全的保障。如下圖
1、把工作內(nèi)存A中更新過的共享變量刷新到主內(nèi)存中
2、將主內(nèi)存中最新的共享變量的值更新到工作內(nèi)存B中
而在期間不允許其他線程去更新最新的共享變量,但我們的代碼去發(fā)生了,第一個(gè)線程的判斷執(zhí)行過程中,第二線程對(duì)共享變量(普通變量)進(jìn)行了賦值修改,當(dāng)我使用synchronized重新運(yùn)行以上方法時(shí)(synchronized互斥加鎖解鎖),如下代碼
private static int num = 0;
private static int volatileNum = 0;
public static void main(String[] args) {
new Thread(){
public synchronized void run(){
System.out.println("開始循環(huán)");
while(num==0&&volatileNum ==0){
//System.err.println("--");
}
System.out.println("結(jié)束循環(huán)");
System.exit(0);
}
}.start();
new Thread(){
public synchronized void run(){
try {
Thread.sleep(1500);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("開始賦值");
num = 1;
}
}.start();
}
其運(yùn)行結(jié)果就依然是無限循環(huán),因?yàn)閟ynchronized保證了單線程中的num與volatileNum其獲取時(shí)是主內(nèi)存的最新值,并在運(yùn)行沒有結(jié)束時(shí)不會(huì)推送更新到主存儲(chǔ)中,線程二更新后對(duì)于第一次獲取到值的判斷線程而言還沒有獲取到num的最新值,不過我發(fā)現(xiàn)一個(gè)有趣的問題,在while中寫入System.out.println(num);后,即使是synchronized下,程序也結(jié)束了循環(huán),但是如果while中沒有任何執(zhí)行代碼則會(huì)一直循環(huán)下去。
這讓我有一個(gè)奇怪的想法:我修改了一下代碼
while (true){
if(num==0&&volatileNum ==0){
System.err.println("繼續(xù)循環(huán)");
}else if(num==1&&volatileNum ==0){
System.out.println("結(jié)束循環(huán)");
System.exit(0);
}
}
其結(jié)果是在賦值時(shí),結(jié)束了循環(huán),即賦值線程更新num變量后,推送到主內(nèi)存中,而判斷線程也獲取到了最新的num變量。且這時(shí)取出synchronized對(duì)其也沒有過多影響。將volatileNum重新加volatile后的結(jié)果也是一樣的。
多線程真的很有趣,我發(fā)現(xiàn)我還要去在了解一下,如果你有新的看法也可以告訴我。我不認(rèn)為我回答的就是正確的。
你可以看看我最近寫的兩個(gè)文章,我想聽聽你的意見。
【Java貓說】Java多線程之內(nèi)存可見性(上篇)
【Java貓說】Java多線程之內(nèi)存可見性(下篇)
在mian.js添加以下代碼
Vue.prototype.print = (obj,type) => {
type = type || "log";
const log = JSON.parse(JSON.stringify(obj));
console[type](log)
}
以后打印變量使用
this.print(obj)不需要對(duì)下載鏈接進(jìn)行斷言,你也可以在點(diǎn)擊按鈕之后,過一段時(shí)間檢測文件是否保存到本地磁盤
北大青鳥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)師。