參考這篇文章,我來翻譯一下:
這是一個(gè)方法,它具有原子性:
public int getVector() {
int index = vector.size() - 1;
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return vector.get(index);
}
這也是一個(gè)方法,它也具有原子性:
public void deleteVector() {
int index = vector.size() - 1;
vector.remove(index);
}
所謂原子性,就是方法里的語句會(huì)順次執(zhí)行,不會(huì)被打斷。
但是你把它倆復(fù)合起來,它就不再是原子的了:
public static void main(String[] args) {
VectorTest vectorTest = new VectorTest();
new Thread(new Runnable() {
public void run() {
vectorTest.getVector();
}
}).start();
new Thread(new Runnable() {
public void run() {
vectorTest.deleteVector();
}
}).start();
}
在這里開了兩個(gè)線程,一個(gè)執(zhí)行第一個(gè)方法,另一個(gè)執(zhí)行第二個(gè)方法,第一個(gè)方法一上來先獲取了向量的尺寸,然后就開始休眠了,趁第一個(gè)方法不注意,第二個(gè)方法進(jìn)來刪除了向量里最后一個(gè)元素,等第一個(gè)方法醒過來,再想找最后一個(gè)元素找不著了,就拋出錯(cuò)誤了,所以復(fù)合操作不具有原子性,中間被插入打斷了。
解決的方法就是加個(gè)鎖:
public int getVector(){
synchronized (vector) {
int index = vector.size() - 1;
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return vector.get(index);
}
}
synchronized就是同步的意思,同步的意思是說這一步邁不完,下一步不能開始,所以這樣就保證了整個(gè)操作依然是原子級(jí)的,不存在被插入的可能。
你這vscode真智能。
是拷的別人的配置?找找看項(xiàng)目目錄下有沒有一份.editConfig這樣的文件
https://plugins.jetbrains.com...
這個(gè)插件 packagejars
國人出的應(yīng)該 很好用
到了三十歲之后,自然也就進(jìn)入了許多程序員的瓶頸期了,乘早做好職業(yè)規(guī)劃吧,如果想繼續(xù)做下去,就需要保持自身的學(xué)習(xí)熱情,畢竟那么多新技術(shù),不學(xué)學(xué)怎么辦呢,畢竟那個(gè)公司都不想花幾倍的價(jià)錢來請(qǐng)這些思想老化的老鳥吧。隨著你不斷的學(xué)習(xí),視野不斷的開闊了,不在會(huì)再有語言偏見,對(duì)新技術(shù)自覺不自覺的敏感。新技術(shù)框架層出不窮,你總能花很少的時(shí)間看到它后面的技術(shù)本質(zhì)。你已經(jīng)有些積累沉淀了,有自己的一套知識(shí)體系,自己的一套方法,開始去影響身邊的人,通過博客或其他方式分享于他人。持續(xù)學(xué)習(xí)持續(xù)學(xué)習(xí)。
直接定義切點(diǎn)excution 匹配方法啊 around里面切點(diǎn)pointcut(execution( 包路徑.方法(String,String)) and args(參數(shù)名,參數(shù)名)))
around方法里
Object[] args = pjp.getArgs();//
再繼承一個(gè),寫個(gè)空構(gòu)造函數(shù)
/**
* Returns the value of the named header field.
* <p>
* If called on a connection that sets the same header multiple times
* with possibly different values, only the last value is returned.
*
*
* @param name the name of a header field.
* @return the value of the named header field, or {@code null}
* if there is no such field in the header.
*/
public String getHeaderField(String name) {
return null;
}
事實(shí)上這個(gè)方法在常見實(shí)現(xiàn)類里都有被覆寫:
比如常見的 HttpURLConnection 中:
public String getHeaderField(String var1) {
try {
this.getInputStream();
} catch (IOException var3) {
;
}
return this.cachedHeaders != null
? this.filterHeaderField(var1, this.cachedHeaders.findValue(var1))
: this.filterHeaderField(var1, this.responses.findValue(var1));
}你可以把執(zhí)行的sql打印在控制臺(tái),觀察一下
這個(gè)好像是拼寫錯(cuò)誤的報(bào)錯(cuò),
具體你要把鼠標(biāo)移動(dòng)上去,看看提示是什么.
如果是系統(tǒng)自帶的語法檢查,會(huì)有提示按ctrl+F1查看詳情
ctrl+alt+s 打開設(shè)置面板Editor編輯器Inspections語法檢查不能重寫array的toString方法,對(duì)于數(shù)組的操作使用 Arrays類
Arrays.toString()Arrays.deepToString() 二維數(shù)組toString
130的二進(jìn)制是10000010
原碼變反碼:11111101
反碼變補(bǔ)碼:11111110(第一位為符號(hào)位)
所以11111110=-126
new Test().test.test.test.test.test.say() == new Test().say() == Test.say()
new Test().test.test.test.test.test == new Test().test == Test.test。不管你調(diào)用多少次.test都是指向一個(gè)堆地址。
axios請(qǐng)求頭是怎么設(shè)置的,代碼發(fā)出來看一下
那你禁用COOKIES,在地址欄在加上COOKIE,試一試看看行不行呢
var myDiagram = $(go.Diagram, "canvas", {
isReadOnly: true // 只讀
})
這樣所有節(jié)點(diǎn)都不可以拖拽了
單純的顏色轉(zhuǎn)換用canvas可以實(shí)現(xiàn)。
但是我覺得更難的地方在于如何判斷出需要轉(zhuǎn)換的顏色,也就是識(shí)別問題。
以你的圖為例,人一眼能看出來是把路由器的白色變成了其他顏色,可是在實(shí)際代碼中需要有一個(gè)明確的顏色值來決定是否轉(zhuǎn)換,這個(gè)值不可能是用戶提供的,只能靠自己去判斷,也就是自己去找出這個(gè)白色的顏色值。
可以靠面積,但是這可能跟背景沖突。
可以靠形狀,這樣難度就上升了幾個(gè)數(shù)量級(jí)。
實(shí)際情況中需要替換的顏色不一定是同一個(gè)值,有可能受光照、陰影等影響,會(huì)造成細(xì)微的顏色差別,這也是要考慮的。
完整地把這一套實(shí)現(xiàn)下來,可能就相當(dāng)于一個(gè)小型美顏算法了??雌饋磉@也是個(gè)邊角需求,可以去找找開源實(shí)現(xiàn),節(jié)省一些力氣。
對(duì)mybatis不熟,但是我覺得這個(gè)像是因?yàn)閟qlserver沒有varchar這個(gè)數(shù)據(jù)類型造成的吧
參考周志明《深入理解 Java 虛擬機(jī) 第二版》3.5.6 節(jié) “CMS 收集器”,“CMS 收集器無法處理浮動(dòng)垃圾” 小節(jié):JDK1.5 時(shí),CMSInitiatingOccupancyFraction 的默認(rèn)值是 68;JDK1.6 時(shí),默認(rèn)值調(diào)高為 92。
命令的話,可以在 JVM 啟動(dòng)的時(shí)候使用 -XX:+PrintFlagsFinal 來顯示所有可配置參數(shù)的信息,然后找到 CMSTriggerRatio 和 MinHeapFreeRatio,然后計(jì)算 CMSInitiatingOccupancyFraction 的公式為:
CMSInitiatingOccupancyFraction = (100 - MinHeapFreeRatio) + (CMSTriggerRatio * MinHeapFreeRatio / 100)北大青鳥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)師。