91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

簡(jiǎn)述那些JDK中坑你沒(méi)商量的方法

電子工程師 ? 來(lái)源:博客園 ? 作者:Yrion ? 2021-06-12 17:36 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

前言

JDK 作為我們每天必備的調(diào)用類庫(kù),里面大量提供了基礎(chǔ)類供我們使用??梢哉f(shuō)離開(kāi) JDK ,我們的 Java代碼寸步難行。

JDK 帶給我們的便利可謂是不勝枚舉,但同時(shí)這些方法在使用起來(lái)也存在一些坑,如果不注意就很容易掉入到陷阱里面,導(dǎo)致程序拋出錯(cuò)誤。

JDK 中的很多方法都不會(huì)做非 null 判斷,可能設(shè)計(jì) JDK 的作者默認(rèn)開(kāi)發(fā)者已經(jīng)處理好 null 值了。不過(guò)這個(gè)設(shè)計(jì)可能會(huì)造成很嚴(yán)重的后果,實(shí)在是暗藏殺機(jī)。比如,今天早上我們查了一筆訂單沒(méi)有退款,查了一早上最終才發(fā)現(xiàn)是同事寫(xiě)的代碼的 BigDecimal 的 subtract 方法的值沒(méi)有做非 null 判斷處理導(dǎo)致程序拋出了空指針異常。

看似簡(jiǎn)單的異常卻直接無(wú)法讓很多訂單退款,實(shí)在是小問(wèn)題造成大事故。而要修補(bǔ)退款這個(gè)問(wèn)題,要耗費(fèi)很多時(shí)間去修補(bǔ),出錯(cuò)的成本太高。

本文就來(lái)看看 JDK 中那些坑你沒(méi)商量的方法,這些方法很常見(jiàn),相信你一定遇到過(guò)。

1 String.valueOf() 方法的陷阱

案發(fā)現(xiàn)場(chǎng)

某個(gè)鳥(niǎo)語(yǔ)花香的早上,我們?cè)陂_(kāi)心的敲著代碼,突然客戶群有人投訴反映:我們發(fā)給用戶的短信有部分是尊敬的 “null” 你好,等等。

開(kāi)發(fā)第一時(shí)間看了代碼,覺(jué)得沒(méi)有問(wèn)題啊。為什么短信內(nèi)容會(huì)出現(xiàn)用戶名為 null 呢?不是經(jīng)過(guò)了非空判斷的嗎?String.valueOf() 是 String 提供的一個(gè)類型轉(zhuǎn)換的方法,我們來(lái)看一下(代碼經(jīng)過(guò)了簡(jiǎn)化):

// 調(diào)用用戶服務(wù)根據(jù)用戶id獲取用戶信息Map《String, Object》 userInfo = userService.getUserInfoById(userId);Object userNameObject = userInfo.get(“name”);String userName = String.valueOf(userNameObject);// 判空if(userName!=null && userName.length()》0) { String message = getMessage(userName); smsService.send(message);}

這段代碼是簡(jiǎn)化過(guò)的,主要作用就是通過(guò)用戶服務(wù)根據(jù) id 獲取用戶信息發(fā)送短信。

后來(lái)經(jīng)過(guò)定位發(fā)現(xiàn)了問(wèn)題所在:首先,用戶的名字里有特殊的 emoji 符號(hào)。數(shù)據(jù)庫(kù)寫(xiě)入的時(shí)候有部分寫(xiě)入失敗。因?yàn)楫?dāng)時(shí)的數(shù)據(jù)庫(kù)字符格式并無(wú)法兼容 emoji,而獲取的時(shí)候因?yàn)檫@個(gè)問(wèn)題值為 null 了。

接下來(lái)是重點(diǎn):

public static String valueOf(Object obj) { return (obj == null) ? “null” : obj.toString();}

這里是重點(diǎn),也是最大的坑。

注意:這里返回了一個(gè) “null” 的字符串,而不是 null。這兩個(gè)是有很大區(qū)別的。當(dāng)進(jìn)行非空判斷的時(shí)候,返回的是 true。也就是這個(gè) “null” 字符串是符合判空條件的!

正確的姿勢(shì)是在 String.valueOf 方法前必須判空:

if (userNameObject != null) { String userName = userNameObject.toString();}

2 Integer.parseInt() 方法很矯情

事故現(xiàn)場(chǎng)

業(yè)務(wù)場(chǎng)景為拉取訂單,打出訂單列表記錄。財(cái)務(wù)人員需要拉出對(duì)賬,結(jié)果總是發(fā)現(xiàn)很奇怪的一個(gè)現(xiàn)象:每次拉取少很多數(shù)據(jù)。還好財(cái)務(wù)發(fā)現(xiàn)了,要不然和第三方財(cái)務(wù)對(duì)賬就會(huì)虧很多錢。

最終發(fā)現(xiàn),是訂單的一個(gè)字段值轉(zhuǎn) Integer 出錯(cuò)了。那個(gè)訂單下的字段值是 120.0,通過(guò) Integer.parseInt() 直接報(bào)錯(cuò)了。恰好開(kāi)發(fā)人員認(rèn)為這段開(kāi)發(fā)肯定沒(méi)問(wèn)題,因此就沒(méi)有 catch 異常。最后找了很久才發(fā)現(xiàn),因?yàn)樯婕暗降谌?,還讓別人查了半天……

知道真相的我們都有點(diǎn)汗顏:這么丁點(diǎn)的錯(cuò)誤排查了很久,實(shí)在是不應(yīng)該啊。

Integer.parseInt() 方法用于將字符串轉(zhuǎn)化為 Integer 類型的方法。此方法的適用性就顯得比較窄,因?yàn)槭?String 類型的參數(shù)沒(méi)有任何限定,當(dāng)在傳入一些比如 50.0、20L、30d、40f 這類數(shù)據(jù)的情況下會(huì)拋出異常。

我們來(lái)看一個(gè)例子:

String input = “50.0”;int out = Integer.parseInt(input);

會(huì)拋出異常 NumberFormatException:

740e2dd4-c7a3-11eb-9e57-12bb97331649.png

事實(shí)上對(duì)于這樣的數(shù)據(jù),比如小數(shù)、float、double、long 類型數(shù)據(jù)都可以自動(dòng)轉(zhuǎn)換,而不是給我們拋出煩人的報(bào)錯(cuò)信息。如果預(yù)先知道是整數(shù)或者小數(shù),可以用 BigDecimal 轉(zhuǎn)換。

注意:此方法不適用于 double、float、Long 類型的數(shù)據(jù),比如10d、20L。

String input = “50.0”;int out2 = new BigDecimal(input).intValue();System.out.println(out2);

對(duì)于 float、long 類型的數(shù)據(jù)可以用以下方法來(lái)處理:

推薦使用 hutool 的 NumberUtil.parseInt() 方法。充分考慮到了 float、double、long、小數(shù)等類型數(shù)據(jù)可能帶來(lái)的解析異常的問(wèn)題。hutool 是一個(gè)國(guó)人開(kāi)源的工具類庫(kù),這里強(qiáng)烈推薦,容錯(cuò)性和處理異常能力很強(qiáng)。

3 BigDecimal 的除法坑你沒(méi)商量

眾所周知,BigDecimal 是處理金額最有效的數(shù)據(jù)類型。一般進(jìn)行財(cái)務(wù)報(bào)表計(jì)算的時(shí)候?yàn)榱朔乐菇痤~出現(xiàn)錯(cuò)誤,一般情況下都會(huì)采用 BigDecimal。而 double、float 都會(huì)存在些許的誤差。你開(kāi)開(kāi)心心地用 BigDecimal 進(jìn)行了計(jì)算,而最終的結(jié)果返回卻有問(wèn)題。我們來(lái)看一個(gè)例子:

BigDecimal ten = new BigDecimal(10);BigDecimal two= new BigDecimal(2);BigDecimal result = ten.divide(two);System.out.println(result.toString());

常見(jiàn)的除法用起來(lái)沒(méi)有任何絲毫的問(wèn)題,妥妥的沒(méi)毛病。但是一旦程序中的數(shù)據(jù)出現(xiàn)以下情況,如果用 BigDecimal 來(lái)接受前端的參數(shù)。而前端的參數(shù)是用戶輸入不確定的,一旦出現(xiàn)如下的數(shù)據(jù),我們來(lái)看看結(jié)果:

BigDecimal ten = new BigDecimal(10);BigDecimal three= new BigDecimal(3);BigDecimal result = ten.divide(three);System.out.println(result.toString());

執(zhí)行結(jié)果一看,居然報(bào)錯(cuò)了:

74596fc4-c7a3-11eb-9e57-12bb97331649.png

這就是 BigDecimal 的坑:一旦返回的結(jié)果是無(wú)限循環(huán)小數(shù),就會(huì)拋出 ArithmeticException。因此在進(jìn)行 BigDecimal 除法的時(shí)候,需要進(jìn)行保留小數(shù)的處理。

正確的處理姿勢(shì):

BigDecimal ten = new BigDecimal(10);BigDecimal three= new BigDecimal(3);BigDecimal result = ten.divide(three, 2, BigDecimal.ROUND_HALF_UP);System.out.println(result.toString());

4 Collections.emptyList() 此 List 非彼 List

我們先來(lái)看一個(gè)例子:

public List《String》 getUserNameList(String userId) { List《String》 resultList = Collections.emptyList(); try { resultList = userDao.getUserName(userId); } catch (Exception ex) { logger.info(ex); } return resultList; }

這樣會(huì)拋出錯(cuò)誤。主要問(wèn)題在于 Collections.emptyList() 并非我們平時(shí)看到的 List。此List 不支持 add、remove 方法,否則會(huì)拋出 operationNotSupportException。

List《String》 resultList = Collections.emptyList();resultList.add(“test”);

結(jié)果拋出異常:

74631236-c7a3-11eb-9e57-12bb97331649.png

原因是 Collections.emptyList 返回的并不是我們平時(shí)認(rèn)識(shí)的那個(gè) List,它是一個(gè)內(nèi)部常量類:

public static final List EMPTY_LIST = new EmptyList《》();

這個(gè) List 并不具有 add、remove 元素的能力。我猜想是因?yàn)?JDK 設(shè)計(jì)之初的想法是將這個(gè) List 作為一種只讀的 List ,并不提供數(shù)據(jù)的寫(xiě)入能力。因此它僅可作為一種空值返回,無(wú)法進(jìn)行刪除、添加操作。

5 List 可以一邊刪除一邊遍歷嗎?

答案是肯定可以的。要不然的話 List 怎么刪除數(shù)據(jù)呢?不過(guò)要注意遍歷的姿勢(shì),我們?cè)賮?lái)看一個(gè)簡(jiǎn)單的例子:

public static void main(String[] args) { List《Integer》 resultList = new ArrayList《》(); resultList.add(1); resultList.add(2); resultList.add(3); for (Integer num : resultList) { if (num == 1) { resultList.remove(num); } }}

很不幸,又雙叒叕報(bào)錯(cuò)了:

746f0c62-c7a3-11eb-9e57-12bb97331649.png

仔細(xì)翻閱源碼會(huì)發(fā)現(xiàn),每次 remove 之前會(huì)檢查元素的條數(shù)。如果發(fā)現(xiàn)預(yù)期的 modCount 和當(dāng)前的 modCount 不一致就會(huì)拋出這個(gè)異常。modCount 是 List 中用來(lái)記錄修改次數(shù)的一個(gè)屬性,當(dāng)對(duì)元素進(jìn)行統(tǒng)計(jì)的時(shí)候就會(huì)對(duì)該元素加 1。而當(dāng)對(duì) List 邊遍歷邊刪除的話,就會(huì)造成 excepted 與 modCount 不一致,從而拋出異常。

final void checkForModification() { if (modCount != expectedModCount) { throw new ConcurrentModificationException(); }}

正確的刪除姿勢(shì)就是使用 Iterator.remove 進(jìn)行遍歷刪除,可以規(guī)避這個(gè)問(wèn)題。

List《Integer》 list = new ArrayList《》();list.add(1);list.add(2);list.add(3);list.add(4);Iterator《Integer》 iterator = list.iterator();while (iterator.hasNext()) { Integer integer = iterator.next(); if (integer == 2) { iterator.remove(); }}

6 總結(jié)

JDK 的設(shè)計(jì)者有兩個(gè)很大的特點(diǎn):

大多不會(huì)做非 null 判斷;

出現(xiàn)錯(cuò)誤直接 throw new Exception,容錯(cuò)性很差。

在實(shí)際開(kāi)發(fā)中,面對(duì) JDK 一定要謹(jǐn)慎使用。JDK 提供了便利的同時(shí),也有一些我們使用上的盲區(qū)。應(yīng)該養(yǎng)成多看源碼,多注意錯(cuò)誤性處理,防止在小問(wèn)題上栽大跟頭。

回到最開(kāi)始說(shuō)的那個(gè) subtract 方法的問(wèn)題,因?yàn)檫@個(gè)問(wèn)題等需要我處理完之后用戶才能收到退款,這直接造成了用戶體驗(yàn)直線下降,而部分用戶還直接打電話投訴。同事一個(gè)小小的不謹(jǐn)慎和馬虎就給公司造成了很多負(fù)面影響,技術(shù)問(wèn)題雖然不大但是帶來(lái)的業(yè)務(wù)影響范圍很嚴(yán)重。

所以我們必須防微杜漸,小小的問(wèn)題都得細(xì)細(xì)的打磨,才能避免很多問(wèn)題的產(chǎn)生。

7 持續(xù)更新

7.1 BigDecimal 在比較的時(shí)候最好使用 compareTo 方法,不要使用 equals 方法

如下案例。雖然 BigDecimal 重寫(xiě)了 equals 方法,但是使用會(huì)存在問(wèn)題:

public static void main(String[] args) { System.out.println(new BigDecimal(“1”).equals(new BigDecimal(“1.0”)));}

D:jdkbinjava.exe 。。.false

1 和 1.0 在比較的時(shí)候返回了 false。這是因?yàn)樵?equals 的源碼中進(jìn)行了數(shù)據(jù)的 scale(也就是精度)的比較。如果不一致就會(huì)返回 false。如果使用 compareTo 方法就不存在這個(gè)問(wèn)題。

7.2 MySQL 減法計(jì)算,如果有 null 值結(jié)果就為 null

select 5-null 結(jié)果會(huì)返回 null。所以在進(jìn)行 MySQL 計(jì)算的時(shí)候,對(duì)于有可能出現(xiàn) null 值的列一定要進(jìn)行 ifnull(field, 0) 的轉(zhuǎn)換,將 null 值轉(zhuǎn)化為 0。否則就會(huì)出現(xiàn)一些意想不到的數(shù)據(jù)錯(cuò)誤和空指針問(wèn)題。

7.3 String 的 split 方法在進(jìn)行 || 分割的時(shí)候需要進(jìn)行轉(zhuǎn)義,否則結(jié)果會(huì)有問(wèn)題

String str = “77||88”;final String[] split1 = str.split(“||”);final String[] split2 = str.split(“\|\|”);

System.out.print(“錯(cuò)誤的分割方式:”);for (String s : split1) { System.out.print(s + “ ”);}System.out.print(“

”);

System.out.print(“正確的分割方式:”);for (String s : split2) { System.out.print(s + “ ”);}

錯(cuò)誤的分割方式:7 7 | | 8 8 |正確的分割方式:77 88

轉(zhuǎn)自:Yrion,

鏈接:cnblogs.com/wyq178/p/13520745.html

編輯:jq

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • JAVA
    +關(guān)注

    關(guān)注

    20

    文章

    3001

    瀏覽量

    116422
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4967

    瀏覽量

    73960
  • JDK
    JDK
    +關(guān)注

    關(guān)注

    0

    文章

    83

    瀏覽量

    17146

原文標(biāo)題:那些JDK中坑你沒(méi)商量的方法

文章出處:【微信號(hào):AndroidPush,微信公眾號(hào):Android編程精選】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    頻率源/信號(hào)源模塊設(shè)備怎么選?避指南

    工程師常常陷入頻率源模塊選型困境:到底看哪些指標(biāo)?哪些千萬(wàn)不能踩?本文將結(jié)合安鉑克科技、盛鉑科技等主流廠商的產(chǎn)品特點(diǎn),為您梳理一份實(shí)用的選型避指南。
    的頭像 發(fā)表于 02-27 16:49 ?347次閱讀
    頻率源/信號(hào)源模塊設(shè)備怎么選?避<b class='flag-5'>坑</b>指南

    從踩到高效落地:淘寶天貓商品詳情 API 的實(shí)操心得

    在電商數(shù)據(jù)開(kāi)發(fā)、競(jìng)品分析等場(chǎng)景,淘寶天貓商品詳情API是獲取商品數(shù)據(jù)的核心入口。從初期頻繁報(bào)錯(cuò)、調(diào)用低效,到如今穩(wěn)定支撐業(yè)務(wù),我沉淀了一套實(shí)操邏輯,本文拆解全流程點(diǎn)與落地技巧,幫助開(kāi)發(fā)者少走彎路
    的頭像 發(fā)表于 02-26 16:51 ?1216次閱讀

    由商湯科技商量AI講解大腦系統(tǒng)驅(qū)動(dòng)的智能機(jī)器人亮相

    對(duì)陣雙方實(shí)力懸殊卻又勢(shì)均力敵:一方,是以邏輯縝密、反應(yīng)迅捷著稱的前武漢大學(xué)辯論隊(duì)隊(duì)長(zhǎng);另一方,則是首次以辯手身份亮相、由商湯科技“商量AI 講解大腦”系統(tǒng)驅(qū)動(dòng)的智能機(jī)器人。
    的頭像 發(fā)表于 02-09 15:02 ?429次閱讀

    RK3326音頻調(diào)試避指南:從“錄不了”到“全功能跑通”的實(shí)戰(zhàn)歷程

    ,錄 WAV 就翻車,硬件飛線后還采不到回采數(shù)據(jù)。今天結(jié)合實(shí)際硬件圖紙、DTS 配置和調(diào)試日志,跟大家拆解 RK3326 上 PDM 麥克風(fēng) + 音頻回采的完整調(diào)試流程,幫你避開(kāi)那些 “一看就會(huì),一調(diào)就廢” 的
    的頭像 發(fā)表于 02-03 16:06 ?1882次閱讀
    RK3326音頻調(diào)試避<b class='flag-5'>坑</b>指南:從“錄不了”到“全功能跑通”的實(shí)戰(zhàn)歷程

    新手必看!華潤(rùn)微7388全系統(tǒng)改裝零失敗復(fù)盤(pán),這些我替踩過(guò)了

    標(biāo)簽:#華潤(rùn)微7388 #新手改裝實(shí)戰(zhàn) #車載音響DIY #改裝避手冊(cè) #功放芯片實(shí)操
    的頭像 發(fā)表于 12-19 10:49 ?707次閱讀

    1. 車載功放芯片選型閉指南:別讓 “參數(shù)黨” 毀了的音頻方案

    魔咒的 “場(chǎng)景適配型” 芯片,作為華潤(rùn)微授權(quán)代理商,深智微科技帶你 3 分鐘避開(kāi)選型陷阱。 閉 1:功率越大≠音質(zhì)越好,負(fù)載匹配才是底層邏輯 經(jīng)典 :用 CD7388 推 4Ω 原廠喇叭,以為 “大馬拉小車” 音質(zhì)會(huì)更好,結(jié)果靜態(tài)功耗飆升,電瓶 3 天就虧電,小
    的頭像 發(fā)表于 12-11 09:34 ?414次閱讀

    那些年我用OpenCV+Qt趟過(guò)哪些?寫(xiě)給視覺(jué)應(yīng)用開(kāi)發(fā)者的避指南

    從一個(gè)寫(xiě)腳本的算法愛(ài)好者,到能獨(dú)立設(shè)計(jì)交付跨平臺(tái)視覺(jué)檢測(cè)系統(tǒng),中間踩了無(wú)數(shù)的,也總結(jié)出一套還算行之有效的方法。今天,際賽威劉老師不談高深理論,就想把這套從基礎(chǔ)搭建、核心架構(gòu)到項(xiàng)目實(shí)戰(zhàn)的完整
    發(fā)表于 12-02 09:43

    STM32 5 個(gè)容易踩的外設(shè)使用技巧

    STM32是嵌入式開(kāi)發(fā)領(lǐng)域的熱門MCU,功能豐富到幾乎可以完成所有常見(jiàn)控制任務(wù):GPIO、ADC、UART、定時(shí)器、DMA……應(yīng)有盡有。但是,正因?yàn)楣δ軓?qiáng)大,開(kāi)發(fā)的機(jī)會(huì)也隨之增多。很多初學(xué)者
    的頭像 發(fā)表于 11-24 19:04 ?822次閱讀
    STM32 5 個(gè)容易踩<b class='flag-5'>坑</b>的外設(shè)使用技巧

    聊聊怎么把 SAW 濾波器量“準(zhǔn)”:VNA、S 參數(shù)和群時(shí)延那些

    是否較低。 PCB 上輸入/輸出走線短而直,下方有整塊地平面,附近多打 GND via。 如果有 FCom 提供的推薦版圖,對(duì)照一下自己板子的走線/焊盤(pán),能提前避掉不少。 3. 看 S 參數(shù)
    發(fā)表于 11-19 17:38

    選擇身份核驗(yàn)終端硬件設(shè)備,需要避開(kāi)那些

    是天波小編為準(zhǔn)備的一份避指南。辦公樓使用天波人臉識(shí)別身份核驗(yàn)終端閘機(jī)首先,我們?cè)谶x擇身份核驗(yàn)終端時(shí),要先看它的處理器性能,和是否支持國(guó)產(chǎn)操作系統(tǒng)。一般來(lái)說(shuō),足夠的
    的頭像 發(fā)表于 09-02 10:23 ?673次閱讀
    選擇身份核驗(yàn)終端硬件設(shè)備,<b class='flag-5'>你</b>需要避開(kāi)<b class='flag-5'>那些</b><b class='flag-5'>坑</b>?

    舵機(jī)原理簡(jiǎn)述!

    舵機(jī)原理簡(jiǎn)述 舵機(jī)是一種高精度的位置伺服執(zhí)行機(jī)構(gòu),廣泛應(yīng)用于機(jī)器人關(guān)節(jié)、無(wú)人機(jī)舵面控制、航模操控等場(chǎng)景,其核心功能是通過(guò)接收控制信號(hào),精確驅(qū)動(dòng)輸出軸旋轉(zhuǎn)到指定角度并保持穩(wěn)定。以下從結(jié)構(gòu)組成、控制
    的頭像 發(fā)表于 08-22 10:57 ?1869次閱讀

    UWB自動(dòng)跟隨技術(shù)原理、算法融合優(yōu)化和踩實(shí)錄

    UWB為什么是最靠譜的自動(dòng)跟隨技術(shù)?原理是什么?需要做什么算法融合、優(yōu)化?我們?cè)陂_(kāi)發(fā)過(guò)程踩過(guò)的。
    的頭像 發(fā)表于 08-14 17:45 ?1542次閱讀
    UWB自動(dòng)跟隨技術(shù)原理、算法融合優(yōu)化和踩<b class='flag-5'>坑</b>實(shí)錄

    Modbus TCP通信的那些!遇到過(guò)幾個(gè)?

    凌晨三點(diǎn),產(chǎn)線驟停!觸摸屏瘋狂報(bào)通訊超時(shí),老板奪命連環(huán)Call轟炸,而你盯著PLC的Error燈狂閃、儀表數(shù)據(jù)集體躺平——Modbus TCP的,誰(shuí)踩誰(shuí)懂! 別慌!這篇Modbus TCP常見(jiàn)問(wèn)題
    的頭像 發(fā)表于 04-16 17:17 ?1463次閱讀
    Modbus TCP通信的<b class='flag-5'>那些</b><b class='flag-5'>坑</b>!<b class='flag-5'>你</b>遇到過(guò)幾個(gè)?

    公路路面病害(如裂縫、槽等)檢測(cè)

    公路路面病害(如裂縫、槽等)檢測(cè)
    的頭像 發(fā)表于 04-10 11:43 ?841次閱讀
    公路路面病害(如裂縫、<b class='flag-5'>坑</b>槽等)檢測(cè)

    SMT貼片加工那些關(guān)鍵要素,了解嗎?

    一站式PCBA智造廠家今天為大家講講SMT貼片加工流程的關(guān)鍵要素有哪些?SMT貼片加工流程的關(guān)鍵要素。隨著電子產(chǎn)品日益小型化、輕量化的發(fā)展趨勢(shì),SMT貼片加工作為電子制造的關(guān)鍵技術(shù),已經(jīng)成為
    的頭像 發(fā)表于 04-01 09:46 ?932次閱讀