git config --global user.name "Your_Username"
git config --global user.email username@xxx.com
準(zhǔn)確來說確實(shí)不是針對volatile,而是解決了volatile內(nèi)存可見性帶來的false sharing問題的。如果不是volatile這種問題應(yīng)該不會存在。
具體實(shí)踐中,也是一般針對基本數(shù)據(jù)類型的volatile比較合適,因?yàn)樾芯彌_中的cache line的大小一般也就只有64字節(jié)而已。
除了disruptor框架,你可以查看hystrix和java8中的Long adder
嗯。
簡單就是重啟docker: sudo service docker restart
復(fù)雜點(diǎn)使用命令: docker network disconnect -f {network} {endpoint-name}
這里{endpoint-name} 可以使用命令 docker network inspect {network} 獲取,然后docker-compose stop
默認(rèn)編譯 Java 8
查看編譯后的 class
文件
constant_pool_count
為 146,
其中只有
#005 (String): x12323
#013 (String): 運(yùn)行線程:
#020 (String): :lockObj(
#021 (String): hash code (
#024 (String): ),集合 s 為空嗎:
#026 (String): good
#030 - #052 (UTF-8)
#056 - #058 (UTF-8)
#060 - #061 (UTF-8)
#065 - #066 (UTF-8)
#070 (UTF-8): BootstrapMethods
#078 - #079 (UTF-8)
#087 - #088 (UTF-8)
#091 (String): ),集合 s 為空嗎:
#093 (String): good
#095 - #107 (UTF-8)
#110 - #133 (UTF-8)
#137 - #138 (UTF-8)
#140 - #142 (UTF-8)
#144 - #0145 (UTF-8)
再看字節(jié)碼部分:
037: aload_0
是從局部變量表里加載0號值041: ldc #5->x12323
是加載常量池6號值
所以說 classname
不是常量值入棧,個(gè)人猜測是因?yàn)?/p>
有泛型之后,Java
又選擇了泛型擦除,很多東西要等到運(yùn)行時(shí)才能確定,getClass
這個(gè)操作應(yīng)該就是帶有不確定性,所以它的結(jié)果不進(jìn)入常量池。
右擊變量區(qū),點(diǎn)擊 Customize Data Views...
選你要的,我是全部勾選了。
hasCode
一樣并不說明兩個(gè) String
實(shí)例是同一個(gè),String.hashCode
只是計(jì)算value
值,同樣內(nèi)容的情況下 hashCode
會一樣的。
在 String lockObj = s.getClass().toString() + id;
后邊加一句打印語句并下斷點(diǎn)。
第一次循環(huán)時(shí)創(chuàng)建的 lockObj
的內(nèi)存數(shù)據(jù)是這樣的
這是第二次的內(nèi)存數(shù)據(jù)。
可以看到,這里的兩個(gè) String
的值即使一樣,它們的 value
屬性卻不是同一個(gè)指向。
所以你鎖的對象其實(shí)本就不是同一個(gè),把 lockObj
的聲明放到循環(huán)外部后你鎖的才是同一個(gè)對象。
你的 lockObj
是一個(gè)依賴運(yùn)行時(shí)變量hashCode
而拼接的字符串,而且不是常量字符串的拼接,也就是說編譯器無法在編譯期優(yōu)化掉它,也就不會在字符串池里放這個(gè)。
也就是說,每次循環(huán)時(shí) JVM
會重新創(chuàng)建一個(gè) byte[]
,這就導(dǎo)致了每次 lockObj
實(shí)際上不是同一個(gè)實(shí)例。
為何非要這么啟動(dòng),用service manager管理不好嗎?操作系統(tǒng)自帶,絕對官方最佳實(shí)踐。
service vsftpd start
curl會用一個(gè)子線程去做DNS查詢,所以要用strace -f
才能看到。
大概看了一下curl的代碼,DNS解析有多種實(shí)現(xiàn),我用的版本是用線程實(shí)現(xiàn)的異步DNS,但最終執(zhí)行解析的都是curl_addrinfo.c
的Curl_getaddrinfo_ex
函數(shù),里面會調(diào)用getaddrinfo獲得IP列表。
容器中安裝不了,可以容器外安裝啊,容器外弄好后自己封裝鏡像,然后拉進(jìn)docker。
參考官方文檔
public static ExecutorService newFixedThreadPool(int nThreads)
創(chuàng)建一個(gè)線程池, 在重用共享無界隊(duì)列中運(yùn)行的固定線程數(shù)。在任何時(shí)候, nThreads 個(gè)線程都將是活動(dòng)的處理任務(wù)。如果在所有線程都處于活動(dòng)狀態(tài)時(shí)提交了其他任務(wù), 則它們將在隊(duì)列中等待, 直到線程可用為止。如果由于在關(guān)閉前執(zhí)行過程中出現(xiàn)故障而終止了任何線程, 則如果需要執(zhí)行后續(xù)任務(wù), 則新項(xiàng)將取代它。池中的線程將存在, 直到顯式關(guān)閉為止。
可以用下面的程序測試
import java.util.concurrent.Executors;
import java.util.concurrent.ExecutorService;
public class ThreadPoolTest1 {
static class MyTask implements Runnable {
private String name;
public MyTask(String name){
this.name = name;
}
@Override
public void run() {
for (int i = 0; i < 2; i++) {
// 做點(diǎn)事情
try {
Thread.sleep(100);
if(System.currentTimeMillis() % 3 == 0 ){
System.out.println("stop!");
throw new RuntimeException("break!"); //(1)注釋掉這一行將只有兩個(gè)Thread!
}
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(name + " said:" + i+" Thread="+Thread.currentThread().getName());
}
}
}
public static void main(String[] args) {
// 創(chuàng)建線程池
// ExecutorService threadPool = Executors.newSingleThreadExecutor();
ExecutorService threadPool = Executors.newFixedThreadPool(2);
// ExecutorService threadPool = Executors.newCachedThreadPool();
// 向線程池里面扔任務(wù)
for (int i = 0; i < 10; i++) {
threadPool.execute(new MyTask("Task" + i));
}
// 關(guān)閉線程池
threadPool.shutdown();
}
}
注釋掉(1)處的異常會得到正常結(jié)果
Task0 said:0 Thread=pool-1-thread-1
Task1 said:0 Thread=pool-1-thread-2
Task0 said:1 Thread=pool-1-thread-1
Task1 said:1 Thread=pool-1-thread-2
Task2 said:0 Thread=pool-1-thread-1
Task3 said:0 Thread=pool-1-thread-2
Task2 said:1 Thread=pool-1-thread-1
Task3 said:1 Thread=pool-1-thread-2
......
任務(wù)將在thread 1和2之間切換
拋出異常RuntimeException
會看到如下的情況:
.......
java.lang.RuntimeException: break!
at ThreadPoolTest1$MyTask.run(ThreadPoolTest1.java:22)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Task4 said:0 Thread=pool-1-thread-5
Task5 said:0 Thread=pool-1-thread-6
......
能看到線程池在不斷創(chuàng)建新的線程.
監(jiān)聽127.0.0.1就好了。ddos和這個(gè)沒關(guān)系,要看具體是ddos什么
找到原因了,F(xiàn)TP服務(wù)器是在Linux系統(tǒng)下搭建的,有 . 和 ..兩個(gè)文件,后續(xù)邏輯判斷導(dǎo)致異常,但是沒拋出異常,這個(gè)異常我自己處理了 哭笑~
和 redis 沒有任何關(guān)系,只要你把 session 的驅(qū)動(dòng)設(shè)置為 redis 就行了。
SessionManager 統(tǒng)一了使用方法。可以使用助手函數(shù) session(''); 就行了
說說我淺薄的認(rèn)識,請大神們指正。
你跑著的Nginx容器并不是使用的你宿主機(jī)(mac)的內(nèi)核,因?yàn)閐ocker所依賴的namespaces
、cgroups
的功能在你的宿主機(jī)上并沒有。你能在mac上跑docker容器,是因?yàn)橐粋€(gè)名叫Docker.app
的程序提供了一層抽象,它介于宿主機(jī)和docker之間,提供了容器所倚賴的Linux的namespaces
、cgroups
等功能。
在Linux上跑著的各個(gè)docker容器是真的共享了Linux內(nèi)核,但mac上跑著的各個(gè)docker容器并不是共享了mac的內(nèi)核。換個(gè)角度,從github上把docker的源代碼克隆下來并編譯,編譯得到的二進(jìn)制程序并不能直接跑在mac上。
ubuntu這類docker鏡像中并不包含Linux內(nèi)核,反過來想,要是包含了Linux內(nèi)核這個(gè)鏡像大小肯定不止這點(diǎn)。
那你都知道了還在問什么...
java 類的元數(shù)據(jù)在內(nèi)存只存在一份,放在 Permanent Generation space 中,反射出來的方法、字段也只有一份。
SVN的BUG多得是
建議換成GIT
其實(shí)這就是一個(gè)典型的粘包、拆包的問題。
導(dǎo)致的原因就是因?yàn)?TCP
是流式的,就像水流一樣沒法知道一段完整的報(bào)文到哪里是截止的。
報(bào)文越長就越可能出現(xiàn)這樣的問題。
文中提到的其實(shí)是按照字節(jié)長度來防止拆包,常見的還有通過分隔符,比如知道讀取到指定的分隔符才算做是獲取到了完整的報(bào)文。
這些其實(shí) Netty 都是有內(nèi)置的處理器。
訪問路由給對方,過來方法直接獲取$_POST即可啊
圖二 ,服務(wù)器端PHP版本過高,因?yàn)樵赑HP7中已經(jīng)完全移除了mysql_*
系列函數(shù),導(dǎo)致函數(shù)不存在錯(cuò)誤。
2個(gè)思路:讓線上服務(wù)器直接訪問倉庫的路徑;或者直接提交到服務(wù)器。
1,如果頁面數(shù)據(jù)沒事刷新的話,你可以引入ChangeDetectorRef 強(qiáng)制刷新,2,字符串首尾去空格str.trim()
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
北大青鳥中博軟件學(xué)院創(chuàng)立于2003年,作為華東區(qū)著名互聯(lián)網(wǎng)學(xué)院和江蘇省首批服務(wù)外包人才培訓(xùn)基地,中博成功培育了近30000名軟件工程師走向高薪崗位,合作企業(yè)超4
中公教育集團(tuán)創(chuàng)建于1999年,經(jīng)過二十年潛心發(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),是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
曾工作于聯(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)師。