俄羅斯的 it 危機:存儲快用完了。。。:在西方國家的云存儲服務紛紛在俄羅斯切斷業(yè)務關系之后,所有俄羅斯公司都因受到制裁而被迫轉向國內云存儲服務提供商。
由于俄羅斯境內沒有足夠的數(shù)據中心來滿足地方運營商的需求,這造成了一個無法克服的實際問題。因此,俄羅斯需要一種全國性的解決辦法來應對這場存儲危機。
另一個有望釋放存儲空間的舉措是,要求isp們擯棄消耗寶貴資源的流媒體服務及其他在線娛樂平臺。 第三條路子是,可以選擇從國內數(shù)據處理中心購買所有的可用存儲空間。
然而,這可能會給需要額外存儲空間以添加服務和內容的娛樂提供商帶來進一步的問題。 俄羅斯還在考慮要不要沒收已撤出俄羅斯的那些公司留下的it服務器和存儲資源,并將它們整合到公共基礎設施中。
據當?shù)孛襟w報道,數(shù)字發(fā)展部目前正在分析:如果政府頒布這類政策,有望提供多少的可用資源。如果一套加快進程的程序足以支持關鍵政府部門的運作,相關部門就會制定。
本地服務網格怎么搭建?服務網格有哪些重要性?:服務網格的重要性,現(xiàn)在已經被很多人所知道了,越是大型的應用系統(tǒng)當中越是要使用到服務網格,所以很多的應用系統(tǒng)的一個重要內容,就是建設好的api網關系統(tǒng)以及好的服務網格系統(tǒng),這些服務架構都是可以應用在微服務架構之中的有效工具
現(xiàn)在帶大家了解一下本地服務網格怎么搭建。本地服務網格怎么搭建?本地服務網格怎么搭建?是一個比較專業(yè)的問題。
企業(yè)的it技術人員在給應用系統(tǒng)進行本地服務網格搭建的時候,首先應該選擇一款好用的服務網格軟件,這些軟件大部分都是開源軟件,可以幫助技術人員在二次開發(fā)上面擴展一些全新的功能。
了解了本地服務網格怎么搭建之后,再來了解一下服務網格有哪些重要性?服務網格的重要性和系統(tǒng)安全需求是相輔相成的。
而服務網格可以有效的對所有的流量進行安全認證和監(jiān)控。以上就是本地服務網格怎么搭建的相關內容。了解了更多的本地服務網格搭建知識,才能夠在系統(tǒng)的安全性以及流暢性上面提供更多的保障。
機遇與挑戰(zhàn)并存 看政務大數(shù)據如何提升民生服務水平:記者 | 郭敏官網 | www.datayuan.cn微信公眾號id | datayuancn數(shù)據大爆炸時代,各個政府部門也在積極尋求智能化管理轉型升級的有效路徑,但過程中依然面臨著如政務信息共享難、數(shù)據資源整合難
首先,soda理事會理事、蘇打數(shù)據ceo高豐分享了政府數(shù)據開放創(chuàng)新生態(tài)的探索和經驗,他表示,生態(tài)建設需要數(shù)據的流通和協(xié)同,流通起來的數(shù)據可以幫助供需雙方更好地去解讀社會問題和城市問題,解讀了之后,才能有針對去做創(chuàng)新
他說:“大數(shù)據企業(yè)要不斷創(chuàng)新應用,找到更多更合適的應用場景,政府、企業(yè)乃至每個人才能享受到社會信用體系帶來的便利?!?藍燈數(shù)據董事長 周強隨著人類的生產生活方式及社會管理方式向著“智慧”的方向發(fā)展,城市管理及公安機關的警務管理也正朝著一種新的形態(tài)演變。
夢創(chuàng)雙楊大數(shù)據負責人 杜國寧最后,夢創(chuàng)雙楊大數(shù)據負責人杜國寧以《產融大數(shù)據助力”雙創(chuàng)”快速發(fā)展》為主題,分享了精彩的內容。
亞馬遜ring:已解雇四名濫用權利訪問用戶視頻數(shù)據的員工:大數(shù)據產業(yè)創(chuàng)新服務媒體——聚焦數(shù)據 · 改變商業(yè) 據外媒報道,在一封致信國會議員有關其安全做法的信中,亞馬遜旗下的監(jiān)控攝像頭品牌ring承認,在過去四年中,該公司已解雇了四名因濫用權利訪問用戶視頻數(shù)據的員工
在每種情況下,一旦得知這些行為,ring便立即調查該事件,并在確定該個人違反公司政策后將其解雇。
ring提到的事件可能與the information和ring 的攔截有關的報告有關,該報告使總部位于烏克蘭的研發(fā)團隊能夠無限制地訪問每一個創(chuàng)建的ring視頻到amazon web服務器。?
ring還聲稱,“它不知道有任何違反客戶個人識別信息的情況,需要向政府機構報告。”但該公司表示,正在看到來自其他站點的盜竊登錄憑據被用于訪問ring設備。
ring的數(shù)據安全實踐受到了持續(xù)的審查,特別是與執(zhí)法部門共享的數(shù)據。例如,在8月,vice報道說,警察部門已要求ring共享通過補貼計劃購買ring攝像頭的人的個人信息。
天等縣政務oa:湟中縣政府政務OA系統(tǒng)中java開發(fā)手冊黃山版_碼出高效java開發(fā)手冊pdf且效益有限,所以購買
政務OA系統(tǒng)時肯定要有一定的預算,預算金額也不會很高。這是因為小型企業(yè)的局限性所影響的,所以,購買
政務OA系統(tǒng)首先會考慮價格因素,價格適中,功能優(yōu)秀是企業(yè)選擇
政務OA系統(tǒng)的主要因素。 二、以提高效率為出發(fā)點在選型之前,要明確企業(yè)企業(yè)所需要解決的眾多問題,需要通過
政務OA系統(tǒng)如何提高工作效率,避免買到花拳繡腿的
政務OA系統(tǒng)軟件。 三、以長遠發(fā)展為方向對于小企業(yè)來說,業(yè)務與規(guī)模都在不斷變化中,不同時期會有新的任務增加,所以企業(yè)購買軟件不僅僅要將關注點放到是否能實現(xiàn)解決目前的企業(yè)問題,還需要實現(xiàn)未來可能會發(fā)生的問題。 綜上所述,小企業(yè)選型需要追逐性價比高的、核心功能扎實細致的,并且
政務OA系統(tǒng)具有開放性和二次開發(fā)能力的。大家好,又見面了,我是你們的朋友全棧君。
一、 編程規(guī)約 (一) 命名風格
6. 【強制】抽象類命名使用abstract或base開頭;異常類命名使用exception 結尾;測試類 命名以它要測試的類的名稱開始,以test結尾。
【強制】pojo類中布爾類型變量都不要加is前綴,否則部分框架解析會引起序列化錯誤。 說明:在本文 mysql 規(guī)約中的建表約定第一條,表達是與否的值采用 is_xxx 的命名方式,所以,需要在
設置從 is_xxx到 xxx的映射關系。 反例:定義為基本數(shù)據類型 boolean isdeleted 的屬性,它的方法也是 isdeleted(),rpc框架在反向解 析的時候,“誤以為”對應的屬性名稱是 deleted,導致屬性獲取不到,進而拋出異常。
【參考】各層命名規(guī)約: a) service/dao 層方法命名規(guī)約 1) 獲取單個對象的方法用 get 做前綴。 2) 獲取多個對象的方法用 list 做前綴,復數(shù)形式結尾如:listobjects。 3) 獲取統(tǒng)計值的方法用 count 做前綴。 4) 插入的方法用save/insert 做前綴。 5) 刪除的方法用remove/delete 做前綴。 6) 修改的方法用update 做前綴。 b) 領域模型命名規(guī)約 1) 數(shù)據對象:xxxdo,xxx 即為數(shù)據表名。 2) 數(shù)據傳輸對象:xxxdto,xxx為業(yè)務領域相關的名稱。 3) 展示對象:xxxvo,xxx一般為網頁名稱。 4) pojo是 do/dto/bo/vo的統(tǒng)稱,禁止命名成 xxxpojo。
(三) 代碼格式
5. 【強制】采用4個空格縮進,禁止使用tab字符。 說明:如果使用 tab 縮進,必須設置1 個tab 為4 個空格。idea 設置 tab 為4 個空格時,請勿勾選 use tab character;而在 eclipse 中,必須勾選 insert spaces for tabs。 正例: (涉及1-5 點)
public static void main(string[] args) { // 縮進4個空格 string say = “hello”; // 運算符的左右必須有一個空格 int flag = 0; // 關鍵詞if與括號之間必須有一個空格,括號內的f與左括號,0與右括號不需要空格 if (flag == 0) { system.out.println(say); } // 左大括號前加空格且不換行;左大括號后換行 if (flag == 1) { system.out.println(“world”); // 右大括號前換行,右大括號后有else,不用換行 } else { system.out.println(“ok”); // 在右大括號后直接結束,則必須換行 } }
(四) oop規(guī)約
【強制】避免通過一個類的對象引用訪問此類的靜態(tài)變量或靜態(tài)方法,無謂增加編譯器解析 成本,直接用類名來訪問即可。
【強制】浮點數(shù)之間的等值判斷,基本數(shù)據類型不能用==來比較,包裝數(shù)據類型不能用 equals來判斷。 說明:浮點數(shù)采用“尾數(shù)+階碼”的編碼方式,類似于科學計數(shù)法的“有效數(shù)字+指數(shù)”的表示方式。二進制無法精確表示大部分的十進制小數(shù)
【強制】為了防止精度損失,禁止使用構造方法 bigdecimal(double)的方式把double值轉 化為 bigdecimal對象。
關于基本數(shù)據類型與包裝數(shù)據類型的使用標準如下: 1) 【強制】所有的 pojo類屬性必須使用包裝數(shù)據類型。 2) 【強制】rpc 方法的返回值和參數(shù)必須使用包裝數(shù)據類型。 3) 【推薦】所有的局部變量使用基本數(shù)據類型。 說明:pojo類屬性沒有初值是提醒使用者在需要使用時,必須自己顯式地進行賦值,任何 npe問題,或 者入庫檢查,都由使用者來保證。 正例:數(shù)據庫的查詢結果可能是 null,因為自動拆箱,用基本數(shù)據類型接收有 npe 風險。 反例:比如顯示成交總額漲跌情況,即正負 x%,x為基本數(shù)據類型,調用的 rpc 服務,調用不成功時, 返回的是默認值,頁面顯示為 0%,這是不合理的,應該顯示成中劃線。所以包裝數(shù)據類型的 null值,能 夠表示額外的信息,如:遠程調用失敗,異常退出。
【強制】pojo類必須寫tostring方法。使用ide中的工具:source> generate tostring 時,如果繼承了另一個pojo類,注意在前面加一下super.tostring。 說明:在方法執(zhí)行拋出異常時,可以直接調用 pojo的 tostring()方法打印其屬性值,便于排查問題。
【強制】禁止在pojo類中,同時存在對應屬性xxx的isxxx()和getxxx()方法。 說明:框架在調用屬性 xxx的提取方法時,并不能確定哪個方法一定是被優(yōu)先調用到。
【推薦】使用索引訪問用string的split方法得到的數(shù)組時,需做最后一個分隔符后有無內 容的檢查,否則會有拋indexoutofboundsexception 的風險。 說明: string str = “a,b,c,,”; string[] ary = str.split(“,”); // 預期大于3,結果是3 system.out.println(ary.length);
【推薦】循環(huán)體內,字符串的連接方式,使用stringbuilder的append方法進行擴展。 說明:下例中,反編譯出的字節(jié)碼文件顯示每次循環(huán)都會 new出一個 stringbuilder 對象,然后進行 append 操作,最后通過 tostring 方法返回 string 對象,造成內存資源浪費。 反例: string str = “start”; for (int i = 0; i < 100; i++) { str = str + “hello”; }
【推薦】final可以聲明類、成員變量、方法、以及本地變量,下列情況使用 final關鍵字: 1) 不允許被繼承的類,如:string 類。 2) 不允許修改引用的域對象。 3) 不允許被覆寫的方法,如:pojo類的 setter 方法。 4) 不允許運行過程中重新賦值的局部變量。 5) 避免上下文重復使用一個變量,使用 final可以強制重新定義一個變量,方便更好地進行重構。
【推薦】慎用 object的 clone方法來拷貝對象。 說明:對象clone 方法默認是淺拷貝,若想實現(xiàn)深拷貝需覆寫clone 方法實現(xiàn)域對象的深度遍歷式拷貝。
【推薦】類成員與方法訪問控制從嚴: 1) 如果不允許外部直接通過 new來創(chuàng)建對象,那么構造方法必須是 private。 2) 工具類不允許有 public或default 構造方法。 3) 類非static 成員變量并且與子類共享,必須是 protected。 4) 類非static 成員變量并且僅在本類使用,必須是private。 5) 類static 成員變量如果僅在本類使用,必須是 private。 6) 若是static 成員變量,考慮是否為final。 7) 類成員方法只供類內部調用,必須是 private。 8) 類成員方法只對繼承類公開,那么限制為 protected。
(五) 集合處理
【強制】關于hashcode和equals的處理,遵循如下規(guī)則: 1) 只要覆寫equals,就必須覆寫hashcode。 2) 因為set 存儲的是不重復的對象,依據 hashcode和equals進行判斷,所以 set 存儲的對象必須覆 寫這兩個方法。 3) 如果自定義對象作為map 的鍵,那么必須覆寫hashcode 和equals。 說明:string 已覆寫hashcode 和equals方法,所以我們可以愉快地使用 string 對象作為key來使用。
【強制】使用map 的方法 keyset()/values()/entryset()返回集合對象時,不可以對其進行添 加元素操作,否則會拋出unsupportedoperationexception 異常。
說明:entryset()中有key和value,所以直接加入元素或者刪除元素的方法都是無效的。keyset()中有key,可以對key進行操作,所以能使用remove()和equals(),所以返回true。
values()中只有value值,沒有key,value值是沒什么用的,所以values()方法也僅僅是獲取所有value值方便。
【強制】collections 類返回的對象,如:emptylist()/singletonlist()等都是immutable list,不可對其進行添加或者刪除元素的操作。 反例:如果查詢無結果,返回 collections.emptylist()空集合對象,調用方一旦進行了添加元素的操作,就 會觸發(fā) unsupportedoperationexception 異常。
【強制】在sublist場景中,高度注意對原集合元素的增加或刪除,均會導致子列表的遍 歷、增加、刪除產生concurrentmodificationexception 異常。
正例:string[] sids = slist.toarray(new string[slist.size()]);
list
list = new arraylist<>(2); list.add(“guan”); list.add(“bao”); string[] array = list.toarray(new string[0]);
說明:使用 toarray 帶參方法,數(shù)組空間大小的 length: 1) 等于 0,動態(tài)創(chuàng)建與 size 相同的數(shù)組,性能最好。 2) 大于 0 但小于size,重新創(chuàng)建大小等于 size 的數(shù)組,增加 gc負擔。
java 開發(fā)手冊
12/44
3) 等于 size,在高并發(fā)情況下,數(shù)組創(chuàng)建完成之后,size 正在變大的情況下,負面影響與上相同。 4) 大于 size,空間浪費,且在size 處插入 null 值,存在 npe隱患。
反例:string[] array= (string[]) list.toarray();運行,報錯
【強制】使用工具類arrays.aslist()把數(shù)組轉換成集合時,不能使用其修改集合相關的方 法,它的add/remove/clear方法會拋出unsupportedoperationexception 異常。 說明:aslist 的返回對象是一個 arrays內部類,并沒有實現(xiàn)集合的修改方法。arrays.aslist 體現(xiàn)的是適 配器模式,只是轉換接口,后臺的數(shù)據仍是數(shù)組。 string[] str = new string[] { “yang”, “hao” }; list list = arrays.aslist(str); 第一種情況:list.add(“yangguanbao”); 運行時異常。 第二種情況:str[0] = “changed”; 也會隨之修改,反之亦然。
【強制】泛型通配符<? extends t>來接收返回的數(shù)據,此寫法的泛型集合不能使用 add方 法,而<? super t>不能使用 get方法,作為接口調用賦值時易出錯。
說明:
extends 可用于返回類型限定,不能用于參數(shù)類型限定(換句話說:? extends xxx 只能用于方法返回類型限定,jdk能夠確定此類的最小繼承邊界為xxx,只要是這個類的父類都能接收,但是傳入參數(shù)無法確定具體類型,只能接受null的傳入)。
super 可用于參數(shù)類型限定,不能用于返回類型限定(換句話說:? supper xxx 只能用于方法傳參,因為jdk能夠確定傳入為xxx的子類,返回只能用object類接收)。
? 既不能用于方法參數(shù)傳入,也不能用于方法返回。
【強制】不要在foreach循環(huán)里進行元素的remove/add操作。remove元素請使用 iterator方式,如果并發(fā)操作,需要對iterator對象加鎖。
正例:
list
list = new arraylist<>();
list.add(“1”);
list.add(“2”);
iterator
iterator = list.iterator();
while (iterator.hasnext()) {
string item = iterator.next();
if (刪除元素的條件) {
iterator.remove();
}
}
調用iterator的刪除方法:
1.首先檢查集合
2.刪除元素
3.下一個元素的索引位置cursor重新賦值
4.檢查集合參數(shù)重新賦值
反例:
for (string item : list) {
if (“1”.equals(item)) {
list.remove(item);
}
}
總結:如果我們我們用foreach刪除的元素剛好是最后一個,刪除完成前下一個元素的索引位置cursor剛好等于集合長度size的大小。但是,刪除完成后size的數(shù)量減1,但是cursor并沒有變化。導致下一次循環(huán)不相等繼續(xù)向下執(zhí)行,導致檢查數(shù)組不通過,拋出java.util.concurrentmodificationexception
【強制】在 jdk7版本及以上,comparator實現(xiàn)類要滿足如下三個條件,不然 arrays.sort, collections.sort會拋 illegalargumentexception異常。 說明:三個條件如下 1) x,y的比較結果和 y,x的比較結果相反。 2) x>y,y>z,則x>z。 3) x=y,則x,z 比較結果和 y,z 比較結果相同。
反例:下例中沒有處理相等的情況,交換兩個對象判斷結果并不互反,不符合第一個條件,在實際使用中
可能會出現(xiàn)異常。
new comparator
() {
@override
public int compare(student o1, student o2) {
return o1.getid() > o2.getid() ? 1 : -1;
}
};
代碼語言:javascript
復制
15. 【推薦】使用 entryset遍歷 map類集合 kv,而不是 keyset方式進行遍歷。 說明:keyset 其實是遍歷了2 次,一次是轉為 iterator 對象,另一次是從 hashmap 中取出key所對應 的 value。而entryset 只是遍歷了一次就把 key和value 都放到了 entry中,效率更高。如果是 jdk8, 使用 map.foreach 方法。
正例:values()返回的是 v值集合,是一個 list 集合對象;keyset()返回的是k 值集合,是一個 set 集合 對象;entryset()返回的是k-v值組合集合。
【參考】合理利用好集合的有序性(sort)和穩(wěn)定性(order),避免集合的無序性(unsort)和不穩(wěn) 定性(unorder)帶來的負面影響。 說明:有序性是指遍歷的結果是按某種比較規(guī)則依次排列的。穩(wěn)定性指集合每次遍歷的元素次序是一定 的。如:arraylist 是order/unsort;hashmap 是unorder/unsort;treeset是 order/sort。
【參考】利用set元素唯一的特性,可以快速對一個集合進行去重操作,避免使用list的 contains方法進行遍歷、對比、去重操作。
(六) 并發(fā)處理
3. 【強制】線程資源必須通過線程池提供,不允許在應用中自行顯式創(chuàng)建線程。 說明:線程池的好處是減少在創(chuàng)建和銷毀線程上所消耗的時間以及系統(tǒng)資源的開銷,解決資源不足的問 題。如果不使用線程池,有可能造成系統(tǒng)創(chuàng)建大量同類線程而導致消耗完內存或者“過度切換”的問題。
【強制】線程池不允許使用executors去創(chuàng)建,而是通過threadpoolexecutor的方式,這 樣的處理方式讓寫的同學更加明確線程池的運行規(guī)則,規(guī)避資源耗盡的風險。 說明:executors返回的線程池對象的弊端如下: 1) fixedthreadpool和singlethreadpool: 允許的請求隊列長度為 integer.max_value,可能會堆積大量的請求,從而導致 oom。 2) cachedthreadpool: 允許的創(chuàng)建線程數(shù)量為 integer.max_value,可能會創(chuàng)建大量的線程,從而導致 oom。
【強制】simpledateformat 是線程不安全的類,一般不要定義為 static變量,如果定義為 static,必須加鎖,或者使用 dateutils工具類。 正例:注意線程安全,使用 dateutils。亦推薦如下處理: private static final threadlocal
df = new threadlocal
() { @override protected dateformat initialvalue() { return new simpledateformat(“yyyy-mm-dd”); } }; 說明:如果是jdk8 的應用,可以使用 instant 代替 date,localdatetime 代替 calendar, datetimeformatter 代替simpledateformat,官方給出的解釋:simple beautiful strong immutable thread-safe。
【強制】必須回收自定義的threadlocal變量,尤其在線程池場景下,線程經常會被復用, 如果不清理自定義的 threadlocal變量,可能會影響后續(xù)業(yè)務邏輯和造成內存泄露等問題。 盡量在代理中使用try-finally塊進行回收。 正例: objectthreadlocal.set(userinfo); try { // … } finally { objectthreadlocal.remove(); }
【強制】高并發(fā)時,同步調用應該去考量鎖的性能損耗。能用無鎖數(shù)據結構,就不要用鎖; 能鎖區(qū)塊,就不要鎖整個方法體;能用對象鎖,就不要用類鎖。 說明:盡可能使加鎖的代碼塊工作量盡可能的小,避免在鎖代碼塊中調用 rpc方法
【強制】在使用阻塞等待獲取鎖的方式中,必須在try 代碼塊之外,并且在加鎖方法與try 代 碼塊之間沒有任何可能拋出異常的方法調用,避免加鎖成功后,在 finally 中無法解鎖。 說明一:如果在 lock 方法與 try代碼塊之間的方法調用拋出異常,那么無法解鎖,造成其它線程無法成功 獲取鎖。 說明二:如果lock 方法在try代碼塊之內,可能由于其它方法拋出異常,導致在 finally代碼塊中, unlock 對未加鎖的對象解鎖,它會調用aqs的tryrelease 方法(取決于具體實現(xiàn)類),拋出 illegalmonitorstateexception 異常。 說明三:在lock 對象的lock 方法實現(xiàn)中可能拋出 unchecked 異常,產生的后果與說明二相同
【強制】在使用嘗試機制來獲取鎖的方式中,進入業(yè)務代碼塊之前,必須先判斷當前線程是 否持有鎖。鎖的釋放規(guī)則與鎖的阻塞等待方式相同。 說明:lock 對象的 unlock 方法在執(zhí)行時,它會調用 aqs的 tryrelease 方法(取決于具體實現(xiàn)類),如果 當前線程不持有鎖,則拋出 illegalmonitorstateexception 異常。
【強制】并發(fā)修改同一記錄時,避免更新丟失,需要加鎖。要么在應用層加鎖,要么在緩存 加鎖,要么在數(shù)據庫層使用樂觀鎖,使用 version作為更新依據。 說明:如果每次訪問沖突概率小于 20%,推薦使用樂觀鎖,否則使用悲觀鎖。樂觀鎖的重試次數(shù)不得小于 3 次。
【強制】多線程并行處理定時任務時,timer運行多個 timetask時,只要其中之一沒有捕獲 拋出的異常,其它任務便會自動終止運行,如果在處理定時任務時使用 scheduledexecutorservice 則沒有這個問題。
【推薦】使用 countdownlatch進行異步轉同步操作,每個線程退出前必須調用 countdown 方法,線程執(zhí)行代碼注意 catch異常,確保 countdown方法被執(zhí)行到,避免主線程無法執(zhí)行 至 await方法,直到超時才返回結果。 說明:注意,子線程拋出異常堆棧,不能在主線程 try-catch 到。
【推薦】避免 random實例被多線程使用,雖然共享該實例是線程安全的,但會因競爭同一 seed 導致的性能下降。 說明:random實例包括java.util.random 的實例或者 math.random()的方式。 正例:在jdk7 之后,可以直接使用 api threadlocalrandom,而在 jdk7 之前,需要編碼保證每個線 程持有一個實例。
【推薦】在并發(fā)場景下,通過雙重檢查鎖(double-checked locking)實現(xiàn)延遲初始化的優(yōu)化 問題隱患(可參考 the “double
【參考】volatile解決多線程內存不可見問題。對于一寫多讀,是可以解決變量同步問題,但 是如果多寫,同樣無法解決線程安全問題。 說明:如果是count++操作,使用如下類實現(xiàn):atomicinteger count = new atomicinteger(); count.addandget(1); 如果是jdk8,推薦使用longadder 對象,比 atomiclong 性能更好(減少樂觀 鎖的重試次數(shù))。
【參考】hashmap 在容量不夠進行resize時由于高并發(fā)可能出現(xiàn)死鏈,導致cpu飆升,在 開發(fā)過程中可以使用其它數(shù)據結構或加鎖來規(guī)避此風險。
【參考】threadlocal對象使用static修飾,threadlocal 無法解決共享對象的更新問題。 說明:這個變量是針對一個線程內所有操作共享的,所以設置為靜態(tài)變量,所有此類實例共享此靜態(tài)變 量,也就是說在類第一次被使用時裝載,只分配一塊存儲空間,所有此類的對象(只要是這個線程內定義 的)都可以操控這個變量。
(七) 控制語句
2. 【強制】當switch 括號內的變量類型為string并且此變量為外部參數(shù)時,必須先進行null 判斷。
【強制】在高并發(fā)場景中,避免使用”等于”判斷作為中斷或退出的條件。 說明:如果并發(fā)控制沒有處理好,容易產生等值判斷被“擊穿”的情況,使用大于或小于的區(qū)間判斷條件 來代替。 反例:判斷剩余獎品數(shù)量等于 0 時,終止發(fā)放獎品,但因為并發(fā)處理錯誤導致獎品數(shù)量瞬間變成了負數(shù), 這樣的話,活動無法終止。
(八) 注釋規(guī)約
11. 【參考】特殊注釋標記,請注明標記人與標記時間。注意及時處理這些標記,通過標記掃 描,經常清理此類標記。線上故障有時候就是來源于這些標記處的代碼。 1) 待辦事宜(todo):(標記人,標記時間,[預計處理時間]) 表示需要實現(xiàn),但目前還未實現(xiàn)的功能。這實際上是一個 javadoc 的標簽,目前的 javadoc 還沒 有實現(xiàn),但已經被廣泛使用。只能應用于類,接口和方法(因為它是一個 javadoc 標簽)。 2) 錯誤,不能工作(fixme):(標記人,標記時間,[預計處理時間]) 在注釋中用fixme標記某代碼是錯誤的,而且不能工作,需要及時糾正的情況。
(九) 其它
4. 【強制】注意 math.random() 這個方法返回是 double類型,注意取值的范圍 0≤x<1(能夠 取到零值,注意除零異常),如果想獲取整數(shù)類型的隨機數(shù),不要將 x放大10的若干倍然后 取整,直接使用 random對象的 nextint或者 nextlong方法。
二、異常日志
(一) 異常處理
5. 【強制】有try塊放到了事務代碼中,catch異常后,如果需要回滾事務,一定要注意手動回 滾事務。
【強制】finally塊必須對資源對象、流對象進行關閉,有異常也要做try-catch。 說明:如果jdk7 及以上,可以使用 try-with-resources方式。
【強制】不要在finally塊中使用return。 說明:try塊中的 return 語句執(zhí)行成功后,并不馬上返回,而是繼續(xù)執(zhí)行 finally塊中的語句,如果此處存 在 return 語句,則在此直接返回,無情丟棄掉try塊中的返回點。
【推薦】防止 npe,是程序員的基本修養(yǎng),注意 npe產生的場景: 1) 返回類型為基本數(shù)據類型,return 包裝數(shù)據類型的對象時,自動拆箱有可能產生 npe。 反例:public int f() { return integer 對象}, 如果為 null,自動解箱拋 npe。 2) 數(shù)據庫的查詢結果可能為 null。 3) 集合里的元素即使 isnotempty,取出的數(shù)據元素也可能為 null。 4) 遠程調用返回對象時,一律要求進行空指針判斷,防止 npe。 5) 對于session 中獲取的數(shù)據,建議進行 npe檢查,避免空指針。 6) 級聯(lián)調用 obj.geta().getb().getc();一連串調用,易產生 npe。 正例:使用 jdk8的optional 類來防止 npe問題。
(二) 日志規(guī)約
6. 【強制】避免重復打印日志,浪費磁盤空間,務必在 log4j.xml中設置 additivity=false。 正例:
【推薦】謹慎地記錄日志。生產環(huán)境禁止輸出 debug日志;有選擇地輸出 info日志;如果使 用 warn來記錄剛上線時的業(yè)務行為信息,一定要注意日志輸出量的問題,避免把服務器磁盤 撐爆,并記得及時刪除這些觀察日志。 說明:大量地輸出無效日志,不利于系統(tǒng)性能提升,也不利于快速定位錯誤點。記錄日志時請思考:這些 日志真的有人看嗎?看到這條日志你能做什么?能不能給問題排查帶來好處?
【推薦】可以使用warn日志級別來記錄用戶輸入參數(shù)錯誤的情況,避免用戶投訴時,無所 適從。如非必要,請不要在此場景打出error級別,避免頻繁報警。 說明:注意日志輸出的級別,error 級別只記錄系統(tǒng)邏輯出錯、異常或者重要的錯誤信息。
【推薦】盡量用英文來描述日志錯誤信息,如果日志中的錯誤信息用英文描述不清楚的話使 用中文描述即可,否則容易產生歧義。
三、單元測試
【強制】好的單元測試必須遵守 air原則。 說明:單元測試在線上運行時,感覺像空氣(air)一樣并不存在,但在測試質量的保障上,卻是非常關 鍵的。好的單元測試宏觀上來說,具有自動化、獨立性、可重復執(zhí)行的特點。
? a:automatic(自動化)
? i:independent(獨立性)
? r:repeatable(可重復)
【推薦】編寫單元測試代碼遵守 bcde原則,以保證被測試模塊的交付質量。
? b:border,邊界值測試,包括循環(huán)邊界、特殊取值、特殊時間點、數(shù)據順序等。
? c:correct,正確的輸入,并得到預期的結果。
? d:design,與設計文檔相結合,來編寫單元測試。
? e:error,強制錯誤信息輸入(如:非法數(shù)據、異常流程、業(yè)務允許外等),并得到預期的結果。
【參考】為了更方便地進行單元測試,業(yè)務代碼應避免以下情況:
? 構造方法中做的事情過多。
? 存在過多的全局變量和靜態(tài)方法。
? 存在過多的外部依賴。
? 存在過多的條件語句。 說明:多層條件語句建議使用衛(wèi)語句、策略模式、狀態(tài)模式等方式重構。
四、安全規(guī)約
【強制】隸屬于用戶個人的頁面或者功能必須進行權限控制校驗。 說明:防止沒有做水平權限校驗就可隨意訪問、修改、刪除別人的數(shù)據,比如查看他人的私信內容、修改 他人的訂單。
【強制】用戶敏感數(shù)據禁止直接展示,必須對展示數(shù)據進行脫敏。 說明:中國大陸個人手機號碼顯示為:137****0969,隱藏中間 4 位,防止隱私泄露。
【強制】用戶輸入的 sql參數(shù)嚴格使用參數(shù)綁定或者 metadata字段值限定,防止 sql注 入,禁止字符串拼接 sql訪問數(shù)據庫。
【強制】用戶請求傳入的任何參數(shù)必須做有效性驗證。
說明:忽略參數(shù)校驗可能導致: ?
page size 過大導致內存溢出 ? 惡意order by導致數(shù)據庫慢查詢 ? 任意重定向 ? sql 注入 ? 反序列化注入 ? 正則輸入源串拒絕服務 redos
說明:java代碼用正則來驗證客戶端的輸入,有些正則寫法驗證普通用戶輸入沒有問題,但是如果攻 擊人員使用的是特殊構造的字符串來驗證,有可能導致死循環(huán)的結果。
【強制】在使用平臺資源,譬如短信、郵件、電話、下單、支付,必須實現(xiàn)正確的防重放的 機制,如數(shù)量限制、疲勞度控制、驗證碼校驗,避免被濫刷而導致資損。 說明:如注冊時發(fā)送驗證碼到手機,如果沒有限制次數(shù)和頻率,那么可以利用此功能騷擾到其它用戶,并 造成短信平臺資源浪費。
五、mysql數(shù)據庫
(一) 建表規(guī)約
【強制】表達是與否概念的字段,必須使用is_xxx的方式命名,數(shù)據類型是unsigned tinyint(1表示是,0表示否)。 說明:任何字段如果為非負數(shù),必須是 unsigned。 注意:pojo類中的任何布爾類型的變量,都不要加 is前綴,所以,需要在
設置從 is_xxx 到 xxx的映射關系。數(shù)據庫表示是與否的值,使用 tinyint 類型,堅持 is_xxx的命名方式是為了明確其取 值含義與取值范圍。 正例:表達邏輯刪除的字段名 is_deleted,1 表示刪除,0 表示未刪除。
【強制】小數(shù)類型為 decimal,禁止使用 float和double。
【強制】varchar是可變長字符串,不預先分配存儲空間,長度不要超過5000,如果存儲長 度大于此值,定義字段類型為 text,獨立出來一張表,用主鍵來對應,避免影響其它字段索 引效率。
【強制】表必備三字段:id, create_time, update_time。
(二) 索引規(guī)約
【強制】業(yè)務上具有唯一特性的字段,即使是多個字段的組合,也必須建成唯一索引。 說明:不要以為唯一索引影響了 insert 速度,這個速度損耗可以忽略,但提高查找速度是明顯的;另外, 即使在應用層做了非常完善的校驗控制,只要沒有唯一索引,根據墨菲定律,必然有臟數(shù)據產生。
【強制】超過三個表禁止 join。需要 join的字段,數(shù)據類型必須絕對一致;多表關聯(lián)查詢 時,保證被關聯(lián)的字段需要有索引。 說明:即使雙表 join 也要注意表索引、sql 性能。
【強制】在 varchar字段上建立索引時,必須指定索引長度,沒必要對全字段建立索引,根據 實際文本區(qū)分度決定索引長度即可。
說明:索引的長度與區(qū)分度是一對矛盾體,一般對字符串類型數(shù)據,長度為 20 的索引,區(qū)分度會高達 90%以上,可以使用 count(distinct left(列名, 索引長度))/count(*)的區(qū)分度來確定。
【強制】頁面搜索嚴禁左模糊或者全模糊,如果需要請走搜索引擎來解決。 說明:索引文件具有 b-tree 的最左前綴匹配特性,如果左邊的值未確定,那么無法使用此索引。
【推薦】如果有order by的場景,請注意利用索引的有序性。order by 最后的字段是組合 索引的一部分,并且放在索引組合順序的最后,避免出現(xiàn)file_sort的情況,影響查詢性能。 正例:where a=? and b=? order by c; 索引:a_b_c 反例:索引如果存在范圍查詢,那么索引有序性無法利用,如:where a>10 order by b; 索引a_b 無 法排序。
【推薦】利用覆蓋索引來進行查詢操作,避免回表。 說明:如果一本書需要知道第 11 章是什么標題,會翻開第 11 章對應的那一頁嗎?目錄瀏覽一下就好,這 個目錄就是起到覆蓋索引的作用。 正例:能夠建立索引的種類分為主鍵索引、唯一索引、普通索引三種,而覆蓋索引只是一種查詢的一種效 果,用 explain 的結果,extra列會出現(xiàn):using index。
【推薦】利用延遲關聯(lián)或者子查詢優(yōu)化超多分頁場景。
說明:mysql 并不是跳過 offset 行,而是取 offset+n 行,然后返回放棄前 offset 行,返回 n行,那當 offset 特別大的時候,效率就非常的低下,要么控制返回的總頁數(shù),要么對超過特定閾值的頁數(shù)進行 sql 改寫。 正例:先快速定位需要獲取的 id 段,然后再關聯(lián): select a.* from 表1 a, (select id from 表1 where 條件 limit 100000,20 ) b where a.id=b.id
(三) sql語句
【強制】不要使用count(列名)或count(常量)來替代count(),count()是sql92定義的 標準統(tǒng)計行數(shù)的語法,跟數(shù)據庫無關,跟null和非null無關。 說明:count(*)會統(tǒng)計值為null 的行,而 count(列名)不會統(tǒng)計此列為 null 值的行。
【強制】count(distinct col) 計算該列除null之外的不重復行數(shù),注意 count(distinct col1, col2) 如果其中一列全為null,那么即使另一列有不同的值,也返回為0。
【強制】當某一列的值全是null時,count(col)的返回結果為0,但sum(col)的返回結果 為null,因此使用sum()時需注意npe問題。 正例:使用如下方式來避免 sum的npe問題:select ifnull(sum(column), 0) from table;
【強制】使用 isnull()來判斷是否為 null值。 說明:null 與任何值的直接比較都為 null。 1) null<>null 的返回結果是 null,而不是 false。 2) null=null 的返回結果是 null,而不是true。 3) null<>1 的返回結果是 null,而不是 true。
【強制】代碼中寫分頁查詢邏輯時,若 count為0應直接返回,避免執(zhí)行后面的分頁語句。
【強制】不得使用外鍵與級聯(lián),一切外鍵概念必須在應用層解決。 說明:以學生和成績的關系為例,學生表中的 student_id 是主鍵,那么成績表中的 student_id 則為外 鍵。如果更新學生表中的 student_id,同時觸發(fā)成績表中的 student_id 更新,即為級聯(lián)更新。外鍵與級 聯(lián)更新適用于單機低并發(fā),不適合分布式、高并發(fā)集群;級聯(lián)更新是強阻塞,存在數(shù)據庫更新風暴的風 險;外鍵影響數(shù)據庫的插入速度。
【強制】禁止使用存儲過程,存儲過程難以調試和擴展,更沒有移植性。
【強制】數(shù)據訂正(特別是刪除、修改記錄操作)時,要先 select,避免出現(xiàn)誤刪除,確認無 誤才能執(zhí)行更新語句。
【推薦】in操作能避免則避免,若實在避免不了,需要仔細評估 in后邊的集合元素數(shù)量,控 制在1000個之內
(四) orm映射
3. 【強制】不要用resultclass當返回參數(shù),即使所有類屬性名與數(shù)據庫字段一一對應,也需要 定義;反過來,每一個表也必然有一個pojo類與之對應。 說明:配置映射關系,使字段與 do類解耦,方便維護。
【強制】sql.xml配置參數(shù)使用:#{},#param# 不要使用${} 此種方式容易出現(xiàn) sql注入。
【強制】不允許直接拿 hashmap與 hashtable作為查詢結果集的輸出。 說明:resultclass=”hashtable”,會置入字段名和屬性值,但是值的類型不可控。
發(fā)布者:全棧程序員棧長,轉載請注明出處:https://javaforall.cn/168267.html原文鏈接:https://javaforall.cn
google最新vr產品引虛擬旅行熱潮;被2.8億刀收購的時光網要用科技改變命運 | 大數(shù)據周周看:來源:數(shù)據猿 作者:abby 熱 點 微軟簽署最大規(guī)模能源購買協(xié)議,全面提高數(shù)據中心能源使用率目前,隨著云服務、大數(shù)據等技術的普及,企業(yè)以及政府紛紛投入到了數(shù)據中心的建設工作中,但是隨之而來的能耗問題卻已成為數(shù)據中心的發(fā)展瓶頸
達觀數(shù)據與磨鐵在內多家小說網站合作,網絡文學進入“科技春天”近兩年來,網絡文學進入空前繁盛的階段,縱觀目前熱播的影視作品,有近80%皆改編自網絡文學,其中《甄嬛傳》、《瑯琊榜》等更是成為現(xiàn)象級作品。
近日,達觀數(shù)據宣布與瀟湘書院、磨鐵中文網在內的多家小說網站達成合作,并為其提供基于人工智能、機器學習等技術的用戶行為挖掘與預測系統(tǒng),通過對文本數(shù)據的挖掘尋找其隱藏規(guī)律,并提供智能搜索推薦服務,從而提升小說網站的運營效率
微信小程序引領的開發(fā)熱,阿拉丁社區(qū)發(fā)布相關數(shù)據統(tǒng)計分析工具前不久,隨著微信小程序的公測,一連串與之相關的第三方工具應運而生,例如火速移動、小云社區(qū)等等。
,致力于大型計算機信息系統(tǒng)網絡安全和數(shù)據系統(tǒng)安全建設與服務,主要經營范圍包括云服務中心、數(shù)據中心、大數(shù)據平臺、數(shù)據共享服務等。
【ai世界杯15強決戰(zhàn)】中美英日德法印等15國戰(zhàn)略大曝光:具體說,“三年行動計劃”推進四項主要任務:(1)專注于開發(fā)智能和網絡化產品,如車輛、服務機器人和識別系統(tǒng);(2)強調開發(fā)支持ai的系統(tǒng),包括智能傳感器和神經網絡芯片;(3)鼓勵智能制造的發(fā)展;(4)構建行業(yè)訓練資源庫
政府還宣布了進一步開放政府數(shù)據、試驗監(jiān)管沙箱、加強網絡安全的舉措。歐盟委員會:強調內部合作,成立歐洲ai聯(lián)盟2018年4月,歐盟委員會通過了一份20頁的有關人工智能的文件,列出了歐盟對人工智能的方法。
雖然不是正式的人工智能戰(zhàn)略,但德國已經制定了一系列政策和舉措,這些政策和舉措相當于事實上的戰(zhàn)略。政府主要與學術界和工業(yè)界參與者合作,致力于將人工智能技術融入德國的出口行業(yè)。
報告還建議在每個core和ictai建立一個道德委員會聯(lián)盟,制定關于隱私、安全和道德的行業(yè)指南,建立國家ai市場以增加市場發(fā)現(xiàn)并減少收集數(shù)據的時間和成本,以及一些幫助整體勞動力獲得技能的舉措。
該戰(zhàn)略最重要的是工業(yè)化路線圖,將ai作為一項服務,并將人工智能的發(fā)展分為三個階段:(1)各個領域的數(shù)據驅動的ai的利用;(2)各個領域ai的公共使用和數(shù)據開發(fā),以及(3)創(chuàng)建各個領域連接的生態(tài)系統(tǒng)。
美國最嚴技術出口管制,中國芯片大軍轉向歐羅巴:不過,隨著歐洲監(jiān)管政策收緊,這扇窗口隨時可能關閉。風頭轉向歐羅巴。
但憂心的事情也即將到來:隨著歐洲各國政府與美國政府一道對此類交易采取更強硬的立場,這種趨勢可能不會持續(xù)下去,中國半導體在歐洲的交易更像是“末日狂歡”。中國芯片的全球并購投資該走向何方?
芯片不再是創(chuàng)業(yè)公司的機會,中國的技術巨頭們:如阿里巴巴、百度和華為都在集中自己的力量做芯片。此外,隨著人工智能的興起,讓中國在處理器領域實現(xiàn)彎道超車獲得了絕佳的機遇。
有跡象顯示,隨著歐洲各國政府加大對海外交易的投資審查力度,投資者轉向歐洲的趨勢可能是短暫的。例如,就在本周,德國政府收緊了對非歐洲企業(yè)收購德國企業(yè)的規(guī)定。
目前,他認為從中國投資者那里籌集資金沒有任何問題?!爱斘覀冋務撏顿Y時,唯一的風險就是歐洲外國投資委員會的變動。到目前為止,我們還沒有看到這種風險,但監(jiān)管政策可能在一夜之間改變?!?br>
英研究人員利用ai監(jiān)測預防城市洪水:首先,研究人員從高分辨率城市洪水計算機模型開始,著手開發(fā)早期洪水探測系統(tǒng)。模型結果需經數(shù)據驗證,從而保證其可靠性,但經過三個月的數(shù)據采集,研究人員卻空手而歸。
其次,研究人員計劃用基于物理學的洪泛模型來更新他們的模型,來預測洪水發(fā)展。衛(wèi)星遙感價格昂貴,且在城市地區(qū)經常受到技術問題的影響,而地面?zhèn)鞲衅骶W絡的安裝和維護成本很高。
即使是最常見的方法,政府工作人員的目擊調查也不在預算之內。于是,研究人員將推特和眾包應用程序mycoast作為替代方案,用來收集侵蝕和潮汐等海岸條件的數(shù)據。
利用這一替代方案進行數(shù)據收集的步驟如下:(1)掃描推特上的“洪水”、“水壩”和“堤壩”等關鍵詞,識別洪水相關事件。
有了這些工具,他們希望能在潛在的洪水問題上發(fā)揮積極的作用。這項研究近期已在《計算機與地球科學》雜志上發(fā)刊。(實習編譯:蔡萬爽 審稿:李宗澤)
轉載請注明出處,本站網址:
http://www.nds518.com/news_2017.html