後端技術:這35 個細節,提升你的 Java 代碼質量


1、儘量指定類、方法的final修飾符


帶有final修飾符的類是不可派生的。在Java核心API中,有許多應用final的例子,例如java.lang.String,整個類都是final的。


爲類指定final修飾符可以讓類不可以被繼承,爲方法指定final修飾符可以讓方法不可以被重寫。


如果指定了一個類爲final,則該類所有的方法都是final的。


Java編譯器會尋找機會內聯所有的final方法,內聯對於提升Java運行效率作用重大,具體參見Java運行期優化。 


此舉能夠使性能平均提高50% 。


2、儘量重用對象


特別是String對象的使用,出現字符串連接時應該使用StringBuilder/StringBuffer代替。


由於Java虛擬機不僅要花時間生成對象,以後可能還需要花時間對這些對象進行垃圾回收和處理,因此,生成過多的對象將會給程序的性能帶來很大的影響。


3、儘可能使用局部變量


調用方法時傳遞的參數以及在調用中創建的臨時變量都保存在棧中速度較快,其他變量,如靜態變量、實例變量等,都在堆中創建,速度較慢。


另外,棧中創建的變量,隨着方法的運行結束,這些內容就沒了,不需要額外的垃圾回收。


4、及時關閉流


Java編程過程中,進行數據庫連接、I/O流操作時務必小心,在使用完畢後,及時關閉以釋放資源。


因爲對這些大對象的操作會造成系統大的開銷,稍有不慎,將會導致嚴重的後果。


5、儘量減少對變量的重複計算


明確一個概念,對方法的調用,即使方法中只有一句語句,也是有消耗的,包括創建棧幀、調用方法時保護現場、調用方法完畢時恢復現場等。所以例如下面的操作:


for (int i = 0; i < list.size(); i++)
{...}


建議替換爲:


for (int i = 0int length = list.size(); i < length; i++)
{...}


這樣,在list.size()很大的時候,就減少了很多的消耗


6、儘量採用懶加載的策略,即在需要的時候才創建


例如:


String str = "aaa";if (i == 1)
{
list.add(str);
}


建議替換爲:


if (i == 1)
{
String str = "aaa";
list.add(str);
}


7、慎用異常


異常對性能不利。


拋出異常首先要創建一個新的對象,Throwable接口的構造函數調用名爲fillInStackTrace()的本地同步方法,fillInStackTrace()方法檢查堆棧,收集調用跟蹤信息。


只要有異常被拋出,Java虛擬機就必須調整調用堆棧,因爲在處理過程中創建了一個新的對象。異常只能用於錯誤處理,不應該用來控制程序流程。


8、不要在循環中使用try…catch…,應該把其放在最外層


除非不得已。


如果毫無理由地這麼寫了,只要你的領導資深一點、有強迫症一點,八成就要罵你爲什麼寫出這種垃圾代碼來了。


9、如果能估計到待添加的內容長度,爲底層以數組方式實現的集合、工具類指定初始長度


比如ArrayList、LinkedLlist、StringBuilder、StringBuffer、HashMap、HashSet等等,以StringBuilder爲例:


(1)StringBuilder() // 默認分配16個字符的空間


(2)StringBuilder(int size) // 默認分配size個字符的空間


(3)StringBuilder(String str) // 默認分配16個字符+str.length()個字符空間


可以通過類(這裏指的不僅僅是上面的StringBuilder)的來設定它的初始化容量,這樣可以明顯地提升性能。


比如StringBuilder吧,length表示當前的StringBuilder能保持的字符數量。


因爲當StringBuilder達到最大容量的時候,它會將自身容量增加到當前的2倍再加2,無論何時只要StringBuilder達到它的最大容量,它就不得不創建一個新的字符數組然後將舊的字符數組內容拷貝到新字符數組中—-這是十分耗費性能的一個操作。


試想,如果能預估到字符數組中大概要存放5000個字符而不指定長度,最接近5000的2次冪是4096,每次擴容加的2不管,那麼:


(1)在4096 的基礎上,再申請8194個大小的字符數組,加起來相當於一次申請了12290個大小的字符數組,如果一開始能指定5000個大小的字符數組,就節省了一倍以上的空間;


(2)把原來的4096個字符拷貝到新的的字符數組中去。


這樣,既浪費內存空間又降低代碼運行效率。所以,給底層以數組實現的集合、工具類設置一個合理的初始化容量是錯不了的,這會帶來立竿見影的效果。


但是,注意,像HashMap這種是以數組+鏈表實現的集合,別把初始大小和你估計的大小設置得一樣,因爲一個table上只連接一個對象的可能性幾乎爲0。


初始大小建議設置爲2的N次冪,如果能估計到有2000個元素,設置成new HashMap(128)、new HashMap(256)都可以。


10、當複製大量數據時,使用System.arraycopy()命令


11、乘法和除法使用移位操作


例如:


for (val = 0val < 100000val += 5)
{
a = val * 8;
b = val / 2;
}


用移位操作可以極大地提高性能,因爲在計算機底層,對位的操作是最方便、最快的,因此建議修改爲:


for (val = 0val < 100000val += 5)
{
a = val << 3;
b = val >> 1;
}


移位操作雖然快,但是可能會使代碼不太好理解,因此最好加上相應的註釋。


12、循環內不要不斷創建對象引用


例如:


for (int i = 1; i <= count; i++)
{Object obj = new Object();
}


這種做法會導致內存中有count份Object對象引用存在,count很大的話,就耗費內存了,建議爲改爲:


Object obj = null;
for (int i = 0; i <= count; i++) { obj = new Object(); }


這樣的話,內存中只有一份Object對象引用,每次new Object()的時候,Object對象引用指向不同的Object罷了,但是內存中只有一份,這樣就大大節省了內存空間了。


13、基於效率和類型檢查的考慮,應該儘可能使用array,無法確定數組大小時才使用ArrayList


14、儘量使用HashMap、ArrayList、StringBuilder,除非線程安全需要,否則不推薦使用Hashtable、Vector、StringBuffer,後三者由於使用同步機制而導致了性能開銷


15、不要將數組聲明爲public static final


因爲這毫無意義,這樣只是定義了引用爲static final,數組的內容還是可以隨意改變的,將數組聲明爲public更是一個安全漏洞,這意味着這個數組可以被外部類所改變。


16、儘量在合適的場合使用單例


使用單例可以減輕加載的負擔、縮短加載的時間、提高加載的效率,但並不是所有地方都適用於單例,簡單來說,單例主要適用於以下三個方面:


(1)控制資源的使用,通過線程同步來控制資源的併發訪問


(2)控制實例的產生,以達到節約資源的目的


(3)控制數據的共享,在不建立直接關聯的條件下,讓多個不相關的進程或線程之間實現通信


17、儘量避免隨意使用靜態變量


要知道,當某個對象被定義爲static的變量所引用,那麼gc通常是不會回收這個對象所佔有的堆內存的,如:


public class A
{
private static B b = new B();
}


此時靜態變量b的生命週期與A類相同,如果A類不被卸載,那麼引用B指向的B對象會常駐內存,直到程序終止


18、及時清除不再需要的會話


爲了清除不再活動的會話,許多應用服務器都有默認的會話超時時間,一般爲30分鐘。


當應用服務器需要保存更多的會話時,如果內存不足,那麼操作系統會把部分數據轉移到磁盤,應用服務器也可能根據MRU(最近最頻繁使用)算法把部分不活躍的會話轉儲到磁盤,甚至可能拋出內存不足的異常。


如果會話要被轉儲到磁盤,那麼必須要先被序列化,在大規模集羣中,對對象進行序列化的代價是很昂貴的。


因此,當會話不再需要時,應當及時調用HttpSession的invalidate()方法清除會話。


19、實現RandomAccess接口的集合比如ArrayList,應當使用最普通的for循環而不是foreach循環來遍歷


這是JDK推薦給用戶的。JDK API對於RandomAccess接口的解釋是:實現RandomAccess接口用來表明其支持快速隨機訪問,此接口的主要目的是允許一般的算法更改其行爲,從而將其應用到隨機或連續訪問列表時能提供良好的性能。


實際經驗表明,實現RandomAccess接口的類實例,假如是隨機訪問的,使用普通for循環效率將高於使用foreach循環;反過來,如果是順序訪問的,則使用Iterator會效率更高。


可以使用類似如下的代碼作判斷


if (list instanceof RandomAccess)
  for (int i = 0; i < list.size(); i++){}}else
    Iterator<?> iterator = list.iterable();
    while (iterator.hasNext()){iterator.next()}
}


foreach循環的底層實現原理就是迭代器Iterator,參見Java語法糖1:可變長度參數以及foreach循環原理。


所以後半句”反過來,如果是順序訪問的,則使用Iterator會效率更高”的意思就是順序訪問的那些類實例,使用foreach循環去遍歷。


20、使用同步代碼塊替代同步方法


這點在多線程模塊中的synchronized鎖方法塊一文中已經講得很清楚了,除非能確定一整個方法都是需要進行同步的,否則儘量使用同步代碼塊,避免對那些不需要進行同步的代碼也進行了同步,影響了代碼執行效率。


21、將常量聲明爲static final,並以大寫命名


這樣在編譯期間就可以把這些內容放入常量池中,避免運行期間計算生成常量的值。


另外,將常量的名字以大寫命名也可以方便區分出常量與變量


22、不要創建一些不使用的對象,不要導入一些不使用的類


這毫無意義,如果代碼中出現”The value of the local variable i is not used”、”The import java.util is never used”,那麼請刪除這些無用的內容


23、程序運行過程中避免使用反射


反射是Java提供給用戶一個很強大的功能,功能強大往往意味着效率不高。


不建議在程序運行過程中使用尤其是頻繁使用反射機制,特別是Method的invoke方法,如果確實有必要,一種建議性的做法是將那些需要通過反射加載的類在項目啓動的時候通過反射實例化出一個對象並放入內存—-用戶只關心和對端交互的時候獲取最快的響應速度,並不關心對端的項目啓動花多久時間。


24、使用數據庫連接池和線程池


這兩個池都是用於重用對象的,前者可以避免頻繁地打開和關閉連接,後者可以避免頻繁地創建和銷燬線程


25、使用帶緩衝的輸入輸出流進行IO操作


帶緩衝的輸入輸出流,即BufferedReader、BufferedWriter、BufferedInputStream、BufferedOutputStream,這可以極大地提升IO效率


26、順序插入和隨機訪問比較多的場景使用ArrayList,元素刪除和中間插入比較多的場景使用LinkedList這個,理解ArrayList和LinkedList的原理就知道了


27、不要讓public方法中有太多的形參


public方法即對外提供的方法,如果給這些方法太多形參的話主要有兩點壞處:


1、違反了面向對象的編程思想,Java講求一切都是對象,太多的形參,和麪向對象的編程思想並不契合


2、參數太多勢必導致方法調用的出錯概率增加


至於這個”太多”指的是多少個,3、4個吧。


比如我們用JDBC寫一個insertStudentInfo方法,有10個學生信息字段要插如Student表中,可以把這10個參數封裝在一個實體類中,作爲insert方法的形參。


28、字符串變量和字符串常量equals的時候將字符串常量寫在前面


這是一個比較常見的小技巧了,如果有以下代碼:


String str = "123";
if (str.equals("123")) {...}
建議修改爲:String str = "123";
if ("123".equals(str))
{
...
}


這麼做主要是可以避免空指針異常


29、請知道,在java中if (i == 1)和if (1 == i)是沒有區別的,但從閱讀習慣上講,建議使用前者


平時有人問,”if (i == 1)”和”if (1== i)”有沒有區別,這就要從C/C++講起。


在C/C++中,”if (i == 1)”判斷條件成立,是以0與非0爲基準的,0表示false,非0表示true,如果有這麼一段代碼:


int i = 2;
if (i == 1)
{
...
}else{
...
}


C/C++判斷”i==1″不成立,所以以0表示,即false。但是如果:


int i = 2;if (i = 1) { ... }else{ ... }


萬一程序員一個不小心,把”if (i == 1)”寫成”if (i = 1)”,這樣就有問題了。


在if之內將i賦值爲1,if判斷裏面的內容非0,返回的就是true了,但是明明i爲2,比較的值是1,應該返回的false。


這種情況在C/C++的開發中是很可能發生的並且會導致一些難以理解的錯誤產生,所以,爲了避免開發者在if語句中不正確的賦值操作,建議將if語句寫爲:


int i = 2;if (1 == i) { ... }else{ ... }


這樣,即使開發者不小心寫成了”1 = i”,C/C++編譯器也可以第一時間檢查出來,因爲我們可以對一個變量賦值i爲1,但是不能對一個常量賦值1爲i。


但是,在Java中,C/C++這種”if (i = 1)”的語法是不可能出現的,因爲一旦寫了這種語法,Java就會編譯報錯”Type mismatch: cannot convert from int to boolean”。


但是,儘管Java的”if (i == 1)”和”if (1 == i)”在語義上沒有任何區別,但是從閱讀習慣上講,建議使用前者會更好些。


30、不要對數組使用toString()方法


看一下對數組使用toString()打印出來的是什麼:


public static void main(String[] args)
int[] is = new int[]{123};
System.out.println(is.toString());
}


結果是:


[I@18a992f


本意是想打印出數組內容,卻有可能因爲數組引用is爲空而導致空指針異常。


不過雖然對數組toString()沒有意義,但是對集合toString()是可以打印出集合裏面的內容的,因爲集合的父類AbstractCollections重寫了Object的toString()方法。


31、不要對超出範圍的基本數據類型做向下強制轉型


這絕不會得到想要的結果:


public static void main(String[] args)
{
long l = 12345678901234L;
int i = (int)l;System.out.println(i);
}


我們可能期望得到其中的某幾位,但是結果卻是:


1942892530


解釋一下。Java中long是8個字節64位的,所以12345678901234在計算機中的表示應該是:


0000 0000 0000 0000 0000 1011 0011 1010 0111 0011 1100 1110 0010 1111 1111 0010


一個int型數據是4個字節32位的,從低位取出上面這串二進制數據的前32位是:


0111 0011 1100 1110 0010 1111 1111 0010


這串二進制表示爲十進制1942892530,所以就是我們上面的控制檯上輸出的內容。從這個例子上還能順便得到兩個結論


1、整型默認的數據類型是int,long l = 12345678901234L,這個數字已經超出了int的範圍了,所以最後有一個L,表示這是一個long型數。


順便,浮點型的默認類型是double,所以定義float的時候要寫成””float f = 3.5f”


2、接下來再寫一句”int ii = l + i;”會報錯,因爲long + int是一個long,不能賦值給int


32、公用的集合類中不使用的數據一定要及時remove掉


如果一個集合類是公用的(也就是說不是方法裏面的屬性),那麼這個集合裏面的元素是不會自動釋放的,因爲始終有引用指向它們。


所以,如果公用集合裏面的某些數據不使用而不去remove掉它們,那麼將會造成這個公用集合不斷增大,使得系統有內存泄露的隱患。


33、把一個基本數據類型轉爲字符串,基本數據類型.toString()是最快的方式、String.valueOf(數據)次之、數據+””最慢


把一個基本數據類型轉爲一般有三種方式,我有一個Integer型數據i,可以使用i.toString()、String.valueOf(i)、i+””三種方式,三種方式的效率如何,看一個測試:


public static void main(String[] args)
{
int loopTime = 50000;
Integer i = 0;

long startTime = System.currentTimeMillis();
for (int j = 0; j < loopTime; j++){String str = String.valueOf(i);
}
System.out.println("String.valueOf():" + (System.currentTimeMillis() - startTime) + "ms");
startTime = System.currentTimeMillis();for (int j = 0; j < loopTime; j++)
{
String str = i.toString();
}
System.out.println("Integer.toString():" + (System.currentTimeMillis() - startTime) + "ms");
startTime = System.currentTimeMillis();
for (int j = 0; j < loopTime; j++)
{
String str = i + "";
}
System.out.println("i + \"\":" + (System.currentTimeMillis() - startTime) + "ms");
}


運行結果爲:


String.valueOf():11ms Integer.toString():5ms i + ""25ms


所以以後遇到把一個基本數據類型轉爲String的時候,優先考慮使用toString()方法。至於爲什麼,很簡單:


1、String.valueOf()方法底層調用了Integer.toString()方法,但是會在調用前做空判斷


2、Integer.toString()方法就不說了,直接調用了


3、i + “”底層使用了StringBuilder實現,先用append方法拼接,再用toString()方法獲取字符串


三者對比下來,明顯是2最快、1次之、3最慢


34、使用最有效率的方式去遍歷Map


遍歷Map的方式有很多,通常場景下我們需要的是遍歷Map中的Key和Value,那麼推薦使用的、效率最高的方式是:


public static void main(String[] args)
{
HashMap<StringString> hm = new HashMap<StringString>();
hm.put("111""222");Set<Map.Entry<String, String>> entrySet = hm.entrySet();Iterator<Map.Entry<StringString>> iter = entrySet.iterator(); while (iter.hasNext()){
Map.Entry<StringString> entry = iter.next();
System.out.println(entry.getKey() + "\t" + entry.getValue());
}
}


如果你只是想遍歷一下這個Map的key值,那用”Set keySet = hm.keySet();”會比較合適一些


35、對資源的close()建議分開操作


意思是,比如我有這麼一段代碼:


try{
XXX.close();
YYY.close();
}catch (Exception e)
{...}


建議修改爲:


     
     
     
try{ XXX.close(); }catch (Exception e) { ... }try{ YYY.close(); }catch (Exception e) { ... }

雖然有些麻煩,卻能避免資源泄露。


我想,如果沒有修改過的代碼,萬一XXX.close()拋異常了,那麼就進入了cath塊中了,YYY.close()不會執行,YYY這塊資源就不會回收了,一直佔用着,這樣的代碼一多,是可能引起資源句柄泄露的。


而改爲上面的寫法之後,就保證了無論如何XXX和YYY都會被close掉。

收外國男騙中國妹子的炮?天朝竟有這樣一幫「女權組織」 2018-03-19 INSIGHT視界 From 酷玩實驗室 微信號:coollabs 其實我讀書的時候 也曾經想過做一個女權主義者 但是後來發生了一些事情 讓我選擇了放棄 簡單來說是這麼一個事情:我發現 女權對於一些中國人來說是信仰 但是對另一些中國人來說是生意 所謂的“僞女權”“女權癌” 大概就是這麼回事 儘管早就有這樣的思想準備 但讓我沒想到的是 這兩天,知乎上曝光了一件大事 還是讓我三觀震碎 我沒想到,這些“僞女權” 竟然已經形成了黑色產業鏈 讓人細思恐極—— 國內竟然有一羣人 打着“女權主義”的名號 從事着組織賣淫的事情 在中國女生不知情的情況下 把她們賣給外國男人!事情是這樣的:根據知乎用戶伊利丹·怒風的爆料 他在知乎和一個僞女權主義者 吵了起來 一開始,他可能以爲這只是一個 腦子比較軸的僞女權主義者 所以兩人就吵了一通 本來,他以爲就是撕個逼而已 沒想到的是 這個僞女權主義者 可不是什麼好惹的主 這個自稱爲“瑪麗女王”的人 竟然在半個月中 持續不斷地騷擾他 而最誇張的是 瑪麗女王聲稱 自己有能力 讓伊利丹的QQ號 在5天之內被封掉 到這裏爲止 伊利丹一直以爲 他不過是碰到了一個槓精 但是萬萬沒想到 5天之後 他的QQ號竟然真的被永久封禁了!說真的,這就有點嚇人了 這個不起眼的瑪麗女王 竟然還能操控別人的QQ賬號被封?難不成,她真的背後有人?伊利丹這才意識到 自己好像惹到了一個組織 他去扒了扒這個瑪麗女王的QQ空間 這才發現 自己簡直捅出一個馬蜂窩:這個人平時乾的 竟然是把中國女生 賣給外國男人的皮肉生意!真的,我本來以爲 我是一個見過不少套路的人 但沒想到 這一套操作 真的是驚爲天人 簡單來說是這樣的 首先,瑪麗女王自稱是“女權主義者” 但是實際上她的言論 宣傳的卻是 中國男人配不上中國女人 她甚至惡意辱罵中國男人 恨不得中國男人全部死光 連自己的爸爸都不放過 但是,這麼做對她有什麼好處呢?很簡單 罵完中國男人以後 接下來她就說—— 既然中國男人這麼差勁 那就找外國男人吧!於是,她就經常發佈外國男人的介紹 看起來是一個熱心的媒婆 還在各種QQ和微信羣裏 散播此類信息 但是看到這裏 我們不難發現有點問題 看看其中這些不堪入目的措辭 這並不是普通的介紹男友啊!這簡直是在拉皮條啊!果然,伊利丹發現 瑪麗女王真的在 拉皮條的過程中 收外國男人的錢!下面是聊天記錄實錘:而且,請注意—— 在這個過程中 她會收外國男人的錢 但是錢不給中國女生 卻落到了她自己的腰包 於是一個詭異的情況出現了:中國妹子 並不知道收錢這回事 還以爲是正常交友 而外國男人 卻都交了錢 很可能認爲自己是在買春!額,也就是說 在中國女孩不知情的情況下 她們被“賣”給了外國男人 而好處費 卻全都進了瑪麗女王的腰包... 我真的是沒見過這種操作 這說輕了是騙炮 說重了,已經可以算是賣淫了吧?我想請熟悉刑法的朋友們看看 這個瑪麗女王 至少應該算是個 介紹組織賣淫罪吧?而且,從伊利丹曝光的資料看來 這個組織規模不小 瑪麗女王甚至把外國男生的信息 建了一個完整的表格 有詳細的個人資料、照片 可以說 是一條非常完整的產業鏈 那如果按照這樣操作 外國男人都是來嫖的 中國女生卻不知道 還以爲是要跟他們談戀愛 那雙方難道不會穿幫嗎?恩,在這方面 瑪麗女王早有對策 根據知乎一位 從事過這個產業的匿名用戶提供的信息 針對這種情況 瑪麗女王們 還會手把手地教外國男人 怎麼快速擺脫女生的糾纏 怎麼調教中國女生 怎麼讓女生覺得自己很可愛 可以說 各種套路一應俱全 甚至還可以開發票!看到這裏 她們背後的產業就非常清楚了 這個瑪麗女王 她根本就不是什麼女權主義者 而是打着女權主義的口號 販賣中國女生的人販子 一方面 她們通過辱罵中國男人 吸引對外國男人感興趣的中國女生 另一方面 她們向外國男人收錢 然後把中國女生賣給他們!圖片來源:知乎@渭水徐工 而可憐的中國妹子們 還以爲自己是在 追求男女平權 其實,不過是淪爲了 這些老鴇的賺錢工具 伊利丹把這整個事情 寫出來以後 在知乎、微博引起了巨大的關注 關於其中提到的 伊利丹的QQ被永久封禁的問題 騰訊經過覈查 目前也有了結果:經調查,是瑪麗女王利用僞造證據 惡意舉報了伊利丹的QQ號 目前,騰訊已經將伊利丹的QQ解封 同時封禁了瑪麗女王等人的 兩個QQ賬號 警方也就此事立案偵查了 相信很快就會有結果 這個事情算是告一段落了 但是在我看來 卻有一件事讓我無法釋懷:爲什麼“女權主義”竟然會和 辱罵中國男性等同起來?爲什麼“和外國男人交友” 竟然還能演變成 一個免費的陪睡組織?我想,這個瑪麗女王 也許只是一個 發現了惡性賺錢模式的生意人 但是在這背後隱藏的 其實是一個很深的問題:爲什麼有不少中國女人 越來越看不上中國男人 甚至覺得嫁給外國男人 是一種時尚?這裏面的原因可能非常複雜 我這裏先提供一個思路 供大家討論:我發現 現在中國很多大型的女權組織 背後都有着西方勢力的影子 她們打着女權的名號 爲自己謀取暴利 爲西方國家從事破壞活動 而那些真正爲女性平權而奔走的人 卻得不到應有的幫助 我之所以這樣說 並不是信口開河 而是有充足的證據 有一個非常有名的民間女權組織 叫做“女權之聲” 它一再聲稱 自己只是一個自發的民間組織 致力於促進男女平等的 它所有的微博賬號、微信賬號 全部都是由一個 叫做婦女傳媒監測網絡的創辦的 而這個婦女傳媒監測網絡 有這麼多媒體產品 那它的錢都是哪裏來的呢?從她們介紹的合作組織裏 我們可以清楚地找到 她們的資助者—— 竟然有西方的福特基金會 有人也許會問 收了西方的錢怎麼了?中國的組織不能收西方的錢嗎?然而,她們不只是收了西方的錢而已 女權之聲組織裏 有一個人叫做鄭楚然 她除了女權運動之外 沒有任何其他工作 表面上,是一個全職的女權工作者 在2015年的時候 她還因爲尋釁滋事 被警察拘留過30多天 甚至在她被拘留的時候 希拉里還借題發揮 指責中國侵犯人權、壓制民主 一箇中國的小小民間組織的首領 在互聯網上的粉絲還沒有我多 竟然能得到希拉里這個級別的關注?我真的是驚掉了下巴 這樣看來 我離希拉里也不是很遠了??而不止是希拉里 這樣一個明明思想上毫無建樹的人 卻被西方媒體BBC評爲了 全球百大思想家 圖:鄭楚然在王寶強事件中發表的言論 除此以外 更讓人匪夷所思的 是她們平時就喜歡攻擊政府 甚至於,她們還會試圖分裂我們國家 比如,女權之聲這個組織裏 著名的女權鬥士洪理達 就曾經轉發著名的港獨媒體 Hong Kong Free Press的言論 甚至曾公開發表過 支持藏獨、港獨、臺獨的言論 她也經常和鄭楚然混在一起 我很想不通 如果她們真的只是單純的女權主義者 爲何要發表分裂國家的言論?爲何要支持藏獨、港獨、臺獨?我只能說,這大概就叫 拿人家的手短,喫人家的嘴軟吧 以前,我在接觸中國的女權組織時 我就覺得很奇怪 她們都喜歡聲稱 自己是不盈利的非政府組織 但是她們無論是宣傳 還是組織各類活動 都需要大量的錢 如果她們真的不盈利 那這些錢都是哪裏來的呢?而這些外國的金主 他們也更加不可能是什麼慈善組織 大發善心來給中國人投錢 每一分投出去的錢 一定都是要有回報的 那麼,他們的回報是什麼呢?他們給中國的“女權組織”投錢 能得到什麼利益呢?聯想到中國網絡上 如火如荼的對中國男人的討伐 我只能說,細思恐極 我絕不是危言聳聽 因爲我們就看不遠的鄰國日本 近些年來日本對於西方的崇拜 可謂深入骨髓 已經到了崇洋媚外的程度 而這其中 當然也包括對白人男性的崇拜 甚至在2016年一個瑞士白人 發了一個視頻,赤裸裸的說 “在東京,只要你是白人, 做什麼都可以” 視頻裏面他在日本便利店 隨意的親吻不認識的收銀員女孩 在酒吧把不認識的日本女孩 按向自己的褲襠 而日本女孩迴應的卻是諂媚的笑容 我想,並不會有那麼多中國人 真正被西方僞女權主義控制 但是,我們要警惕的是 別在你自己都沒有察覺的時候 被別有用心的人洗了腦 更有甚者 別在你自己都不知道的情況下 被別人賣給了外國男人 還去幫他數錢 本文系授權發佈,From 酷玩實驗室,微信號:coollabs,歡迎分享到朋友圈,未經許可不得轉載,INSIGHT視界 誠意推薦 Forwarded from Official Account 酷玩實驗室 酷玩實驗室 Learn More Scan QR Code via WeChat to follow Official Account 採集文章採集樣式近似文章查看封面


IT技術分享社區


個人博客網站:https://programmerblog.xyz


文章推薦 程序員效率:畫流程圖常用的工具 程序員效率:整理常用的在線筆記軟件 遠程辦公:常用的遠程協助軟件,你都知道嗎? 51單片機程序下載、ISP及串口基礎知識 硬件:斷路器、接觸器、繼電器基礎知識




本文分享自微信公衆號 - IT技術分享社區(gh_a27c0758eb03)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章