• “面板+半導體+智能穿戴” 華興源創迎重要發展機遇期

    經過數十年的發展,全球顯示面板產業經歷了從美國到日本再到韓國的中心轉移,到如今中國面板遞四方香港的不斷崛起,2018年超過韓國成為了全球最大的LCD生產大國。面板產業高速發展的過程中,面板顯示檢測行業因與面板顯示產業高度的聯動性,也使得面板檢測需求高漲。 A股科創板上市公司華興源創(688001)主要從事平板顯示及集成電路的檢測設備研發、生產和銷售,公司主要產品應用於 LCD 與 OLED 平板顯示、集成電路、汽車電子等行業,可謂是面板檢測領域的“隱形冠軍”,國內領先的檢測設備與整線檢測系統解決方案提供商。 檢測設備需求高漲 面板產業進入“中國時代” 全球平板顯示檢測行業發展與全球平板顯示產業具有較強的聯動性,通常會受下游平板顯示產業新增產線以及產線升級投資所驅動。近年來,受各 國消費電子產業持續增長的影響,全球面板顯示檢測產業保持穩定增長。隨着平板顯示產業升級的持續加快,OLED 被認為是下一代顯示技術,近年面板出貨量中,LCD 出貨量稍有下降,但AMOLED 穩步增長。隨着智能手機、平板電腦市場需求的持續擴大,對高分辨率、低功耗的新型顯示產品的需求不斷增長,OLED 從而成為合適選擇,但受工藝成熟度較差、良品率較低、設備購置成本較高等因素影響,目前新建 OLED 生產線投資成本高於新建同世代TFT-LCD生產線,預計未來隨着 OLED 面板良品率的逐步提升,OLED 的出貨量佔比將不斷提高。 而在面板產業高速發展,檢測設備需求高漲的背景下,中國面板產業逐漸強勢崛起,面板製造商數量增長最快。2018年已有18家,2019年1季度,中國大陸面板廠的面板出貨面積首次超過全球市場份額的一半50.1%,面板產業向中國轉移趨勢凸顯。並且由於產能充足,在以中國主導的價格戰壓力下,越來越多的面板企業處於虧損狀態,不得不出售或停產來減少損失。近年隨着液晶面板價格下滑,日韓部分大廠已陸續宣佈退出面板行業,如三星、Panasonic、三菱電機、LG等等。 除此之外,由於檢測行業進入壁壘高,能夠提供檢測設備的企業較少,尤其是能夠提供 Array 和 Cell 等前端製程檢測設備的企業更少,因此前端檢測設備主要被外資所佔據。而Module的檢測設備數量彈性很大,離線式可以脱離進口平台,綁定性不強,因而模組段檢測設備國產化程度較高。基於此,據韓國半導體顯示器學會的預測,到 2023 年,在全球面板市場上,中國企業的市場佔有率將達 58%;隨着面板行業國產化替代趨勢加強,檢測設備成為國產化突破口,組裝和封裝設備有望放量,LCD面板市場將進入“中國時代”。 而實際上國內有上市企業早已對此做足了準備,比如華興源創,其憑藉在激光、檢測設備和組裝設備領域的技術優勢,已逐步實現對進口設備的國產替代,牢牢站在行業風口。 硬核技術創新鞏固龍頭地位 半導體檢測獲重大突破 根據資料,華興源創是國內面板測試領域的龍頭企業,面板檢測業務是公司營收的重要來源,主要為手機、智能穿戴設備等中小型屏幕提供檢測設備,深耕精密測試裝置設計,在精度上已實現微米級的對位與壓接。公司自主研發的柔性OLED Mura補償技術填補了國產空白,並且已經幫助國內某知名平板顯示器生產商順利量產,使其成為國內第一家柔性OLED面板量產遞四方香港。目前公司OLED檢測設備的終端客户主要為蘋果、華為等手機遞四方香港,並已與三星,蘋果,LG,京東方等國內外知名公司建立良好合作關係。受益於iPhone 12等多款5G新品的推出,平板顯示檢測設備業務在手訂單充足,支撐該業務板塊業績全年高增長。 半年報顯示,作為一家專注於全球化專業檢測領域的高科技企業,公司堅持在技術研發、產品質量、技術服務上為客户提供具有競爭力的產品以及快速優質的完整解決方案,在各類數字及模擬信號高速檢測板卡、基於平板顯示檢測的機器視覺圖像算法,以及配套各類高精度自動化與精密連接組件的設計製造能力等方面,具備較強的競爭優勢和自主創新能力,在信號和圖像算法領域具有多項自主研發的核心技術成果。尤其是在半導體檢測技術上持續突破,初步形成了多項專利技術。2020 年上半年度公司新取得了 39 項專利(包括3項發明專利、34項實用新型專利、2項外觀設計專利)及17項軟件著作權。 值得一提的是,在半導體檢測領域,公司打破了美國及日本等遞四方香港對於用於超大規模SOC芯片及存儲類芯片測試的測試機的壟斷,在定製化半導體檢測設備上實現突破,是國內為數不多的可以自主研發SOC芯片測試設備的企業,自主研發的E06系列測試系統在核心性能指標上具有較強的市場競爭力並具備較高的性價比優勢。公司也因此實現了電池芯片檢測設備產品(BMS芯片檢測設備)超億元的營業收入,豐富了公司的產品線,也使公司營業收入實現較大幅度增長。 未來,隨着產業升級和生產轉移,國內半導體測試設備將有輝煌前景。華西證券曾在研報中表示,測試裝備半導體在半導體裝備中佔比為8%,僅次於晶圓製造裝備。國內半導體自給率和需求都逐步遞增,未來市場廣闊。隨着技術水平的提高和國內大力新建及擴建產能,國內半導體設備投資將穩步增加,預計2020年將達到118億美元,相應檢測設備亦將隨之增長,預計2020年將達到9.79億美元。 公司也表示將繼續加大對於定製化半導體測試設備產品需求的特殊客户的市場拓展力度和研發投入,強化公司在產品線的絕對優勢,同時通過目前新設立的子公司,加強資源整合,在標準化SOC芯片測試設備和標準化平移式芯片分選機儘快實現突破,使公司半導體設備產品線更加的豐富。 佈局智能穿戴打造新增長點 激勵落地彰顯發展信心 華興源創不僅持續推進原有業務板塊的發展,對於新領域也一直深入佈局。今年,公司完成了對歐立通100%股權的收購,這一次的收購不僅讓公司快速介入到智能可穿戴領域,在消費電子領域的檢測設備產品將進一步完善;而且形成了公司的第三大業務板塊,通過拓展產品種類,打開新的市場空間,獲得新的利潤增長點,完善上市公司在檢測領域的戰略佈局。 根據資料,本次併購對象歐立通為消費電子行業智能組裝測試設備製造企業,與上市公司的平板顯示檢測設備、集成電路測試設備產品線不同的是,歐立通主要為客户提供各類自動化智能組裝、檢測設備,其產品廣泛適用於以可穿戴產品(如智能手錶、無線耳機等)為代表的消費電子行業,用於智能手錶等消費電子終端的組裝和測試環節。憑藉優異的研發能力、定製化的設計開發及快速響應能力,已成為業界獨具特色和優勢的消費電子智能組裝檢測設備供應商,成功進入蘋果公司遞四方香港供應鏈體系,取得了主要客户的合格供應商資格認證,並與客户形成了長期穩定的合作關係。目前,歐立通客户包括廣達、仁寶、立訊精密等大型電子廠,供應商資格具有穩定性。在此前的機構調研中公司表示,即便是在疫情期間,歐立通的接單能力絲毫沒有受到影響。天風國際預計2021年AirPods供貨商出貨量將強勁增長。 通過本次收購,華興源創借道歐立通進一步拓展產品種類、獲得新的利潤增長點,同時歐立通能夠藉助上市公司平台,提升市場認可度,通過集約採購、交叉營銷等方式降低生產成本,提高運營效率,並藉助華興源創資本平台拓寬融資渠道,進入發展快車道。通過本次收購,上市公司可以進一步增加對於上游供應商的定價權,降低營業成本,加速產品的更新換代,打開市場空間,完善上市公司在檢測領域的戰略佈局,上市公司距離檢測領域的“隱形冠軍”的目標也更近一步。 券商預計,並表後2020-2022年歐立通每年將實現歸母淨利約1.1億元左右,屆時公司淨利潤將達到2.8/3.8/4.3億元,對應PE分別為58/43/38X,將低於同行平均PE水平,或將對公司股價提升提供助力,從而更好的回饋廣大投資者,吸引更多優質資金入駐。 值得一提的是,華興源創在通過大力發展各大業務板塊,提升公司競爭力的同時,對員工的激勵也是公司關注的重點之一。近期,公司發佈了2020年限制性股票激勵計劃,將員工自身的利益和公司未來的發展進行了深度綁定。此舉有利於公司吸引更多優質人才加入,極大的調動了員工工作的積極性,同時,此舉也表明了公司對未來發展的長期看好,幫助公司行久致遠,並穩定了市場投資者預期。 來源:OFweek維科號 挖貝網 免責聲明:本文內容由21ic獲得授權後發佈,版權歸原作者所有,本平台僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平台立場,如有問題,請聯繫我們,謝謝!

    時間:2020-11-26 關鍵詞: LED 顯示面板

  • 華為入股潤華全芯微電子,投資17家芯片企業

    半導體可以説是華為卡脖子的關鍵領域,這兩年來華為已經加大了對半導體產業鏈的投資,日前華為又入股了寧波潤華全芯微電子,這是華為一年來投資的第17家半導體公司。 據企查查信息,11月23日,寧波潤華全芯微電子設備有限公司發生工商變更,新增股東哈勃科技投資有限公司,不過具體金額沒有披露。 寧波潤華全芯微電子設備有限公司成立於2016年,法定代表人為汪鋼,註冊資本3391.2萬元人民幣,經營範圍包含:半導體芯片生產設備、測試設備、機械配件及耗材的研發、設計、製造、加工、批發、零售等。 根據官網資料,該公司主要從事化合物半導體、LED、SAW、 OLED、光通訊、MEMS、先進封裝等新型電子器件製造領域,配備了快速響應的銷售和技術服務團隊,目標是成為一傢俱有國際影響力的半導體裝備及工藝解決方案提供商。 代表華為投資的則是哈勃科技投資有限公司,成立於2019年,法定代表人為白熠,註冊資本為270000萬元人民幣,一般經營項目是創業投資業務。企查查信息顯示,哈勃科技所屬集團為華為,由華為投資控股有限公司100%持股。 根據企查查上的信息,從2019年8月份入股 山東天嶽開始,一年多來華為已經投資了17家半導體公司,涉及的領域多為半導體材料、裝備等關鍵市場,也是國內半導體行業需要補課的地方。 8月7日,在中國信息化百人會2020年峯會上,華為消費者業務CEO餘承東表示,在半導體方面,華為將全方位紮根,突破物理學材料學的基礎研究和精密製造。 在終端器件方面,比如顯示模組、攝像頭模組、5G器件等方面,華為正大力加大材料與核心技術的投入,實現新材料+新工藝緊密聯動,突破制約創新的瓶頸。 來源:OFweek維科號 快科技 作者:憲瑞 免責聲明:本文內容由21ic獲得授權後發佈,版權歸原作者所有,本平台僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平台立場,如有問題,請聯繫我們,謝謝!

    時間:2020-11-26 關鍵詞: 華為 半導體

  • 免費丨15萬字的《射頻與微波技術實用手冊》,下載看這裏

    你是否在射頻領域有所疑惑卻無人解答? 沒關係, 《射頻與微波技術實用手冊》來啦! 射頻(RF)是RadioFrequency的縮寫,表示可以輻射到空間的電磁頻率,頻率範圍從300kHz~300GHz之間。目前射頻技術的應用已經遍及通信、測試與測量儀器儀表、工業以及航空航天等等諸多場景。ADI公司在射頻與微波領域深耕多年,具有業界最廣泛的能力以及深厚的系統設計專業知識。 這本《射頻與微波技術實用手冊》,蒐集了ADI官方網站的相關資料,按ADI信號鏈產品進行分類整理,共48篇技術文章,旨在梳理射頻與微波電路設計中的常見問題及其解決方案,為廣大從事該專業的工程師以及電子工程相關學子提供參考指南。 掃碼立即下載哦 左右滑動查看目錄>>> 黃金屋裏都有啥 0 1 鎖相環常見問題解答(15問) 什麼是PLL頻率合成器? 利用頻率合成器,設計人員可以產生單一參考頻率的各種不同倍數的輸出頻率。其主要應用是為RF信號的上變頻和下變頻產生本振(LO)信號。頻率合成器在鎖相環(PLL)中工作,其中鑑頻鑑相器(PFD)將反饋頻率與基準頻率的某一分頻形式相比較(圖1)。PFD的輸出電流脈衝經過濾波和積分,產生一個電壓。此電壓驅動一個外部電壓控制振盪器(VCO)提高或降低輸出頻率,從而驅動PFD的平均輸出接近零。 掃碼立即下載 《射頻與微波技術實用手冊》 查看15個PLL相關問題解答 02 使用多個時鐘時,如何改善系統性能? 在使用同一時鐘源產生多個時鐘時,一個常見的問題是噪聲,通常表現為存在於噪底之上的雜散,這是因為單一時鐘源被倍頻或分頻為多個時鐘。偏移各時鐘的相鄰沿可以降低噪聲雜散,或者完全消除雜散,這具體取決於系統的時序裕量。這一現象是一個時間變量系統,其中時鐘信號的破壞與時域中的干擾位置相關。干擾位置是固定的,因此時鐘的破壞程度與干擾的幅度成比例,就像在線性系統中一樣。 掃碼立即下載 《射頻與微波技術實用手冊》 查看時鐘發生器實例講解 03 確定雜散來源是DDS/DAC還是其他器件 直接數據頻率合成器(DDS)因能產生頻率捷變且殘留相位噪聲性能卓越而著稱。另外,多數用户都很清楚DDS輸出頻譜中存在的雜散噪聲,比如相位截斷雜散以及與相位-幅度轉換過程相關的雜散等。此類雜散是實際DDS設計中的有限相位和幅度分辨率造成的結果。其他雜散源與集成DAC相關——DAC的採樣輸出產生基波和相關諧波的鏡像頻率。另外,因DAC非理想的開關屬性可能導致低階諧波的功率水平升高。最後一種雜散源是在系統時鐘頻率的基波與任何內部分諧波時鐘(例如,ADI直接數字頻率合成器提供的SYNC_CLK)之間產生的混頻產物。 如果通過改變DDS頻率調諧字使雜散與DDS/DAC相關,則並不難確定雜散源。這是因為改變調諧字時,上述所有雜散噪聲的頻率偏移均隨基波變化。 圖1所示為DDS的500MHz參考時鐘,由一個100KHz音實現10%的AM調製。該參考時鐘源是一款Rohde andSchwartz具有調製功能的SMA信號發生器。圖1中的灰色線為無調製條件下的參考時鐘。圖2中,同一100KHz音以完全相同的頻率偏移傳輸到DDS/DAC輸出,不受調諧字頻率影響。圖2中的頻率調諧字表現出四個相互疊加的不同DDS載波。注意,在全部四個載波改變時,參考時鐘雜散的頻率偏移保持不變;但該雜散的幅度以20log(x)為單位發生變化,其中,x為參考時鐘頻率與DDS載波頻率之比。 掃碼立即下載 《射頻與微波技術實用手冊》 尋找雜散來源 04 超範圍事件中,ADC的輸出數據會是什麼樣 偶爾會有人問,常常是年齡較大的工程師問:在超範圍情況發生時,轉換器的輸出數據是什麼?第一次聽到這個問題(許多年前)時,我覺得有點可笑。但是,一位更有經驗的同事解釋説,早期集成ADC通常會表現出一種稱為“翻轉”的行為。 多數現代高速ADC都有一個超範圍(OR)標誌。該輸出位通常與轉換器的輸出數據同步,表示模擬輸入樣本超過了轉換器的滿量程輸入範圍。考慮一個使用偏移二進制編碼的ADC。如果輸入信號超過轉換器的正滿量程範圍,ADC將鉗位,輸出數據將為全1(12位ADC是111111111111)。如果輸入超過其負滿量程範圍,輸出將為全0(12位ADC是000000000000)。兩種情況下,OR位都會置1,表示在該採樣期間輸入超出範圍。 相比之下,對於具有翻轉行為的舊式12位轉換器,如果其輸入為正滿量程+1LSB,則其輸出可能是000000000001,而不是全1。用户可從OR輸出得知ADC已超範圍,該數據應當被忽略。對於一款具有兩倍輸入範圍的13位轉換器,這些位原本是正確的低12位,但對於一款12位轉換器,該輸出表示輸入比負滿量程高1LSB。可以想象,這在任何系統中都可能引起問題。 但是,使用ADI公司的高速轉換器時請放心,您不必擔心此類問題。我從1980年代開始就與這些產品打交道,所有這些年來,我們從未發佈一款包含這個問題的產品。很可能是早先時候,有幾位工程師被這個問題坑過,所以認真仔細地予以解決,確保它不再坑人。 掃碼立即下載 《射頻與微波技術實用手冊》 《射頻與微波技術實用手冊》中一共包含了射頻與微波領域相關的48個技術問題解答,合計15萬字、400+頁的乾貨資料,快來看看吧!掃碼就可以免費下載哦! 免責聲明:本文內容由21ic獲得授權後發佈,版權歸原作者所有,本平台僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平台立場,如有問題,請聯繫我們,謝謝!

    時間:2020-11-25 關鍵詞: 射頻 微波

  • 5分鐘掌握Python中常見的配置文件

    為什麼要寫配置文件 在開發過程中,我們常常會用到一些固定參數或者是常量。對於這些較為固定且常用到的部分,往往會將其寫到一個固定文件中,避免在不同的模塊代碼中重複出現從而保持核心代碼整潔。 這個固定文件我們可以直接寫成一個  .py  文件,例如  settings.py  或  config.py ,這樣的好處就是能夠在同一工程下直接通過  import  來導入當中的部分;但如果我們需要在其他非 Python 的平台進行配置文件共享時,寫成單個  .py  就不是一個很好的選擇。這時我們就應該選擇通用的配置文件類型來作為存儲這些固定的部分。目前常用且流行的配置文件格式類型主要有  ini 、 json 、 toml 、 yaml 、 xml  等,這些類型的配置文件我們都可以通過標準庫或第三方庫來進行解析。 ini ini  即 Initialize 初始化之意,早期是在 Windows 上配置文件的存儲格式。 ini  文件的寫法通俗易懂,往往比較簡單,通常由節(Section)、鍵(key)和值(value)組成,就像以下形式: [localdb]host = 127.0.0.1user = rootpassword = 123456port = 3306database = mysql Python 本身內置的  configparser  標準庫,我們直接就可以用來對  ini  文件進行解析。如我們將上述內容保存在一個名為  db.ini  的文件中,然後使用  read()  方法來進行解析和讀取,最後通過  items()  方法來獲取指定節點下的所有鍵值對。 >>> from configparser import ConfigParser>>> cfg = ConfigParser()>>> cfg.read("/Users/Bobot/db.ini")['/Users/Bobot/db.ini']>>> cfg.items("localdb")[('host', '127.0.0.1'), ('user', 'root'), ('password', '123456'), ('port', '3306'), ('database', 'mysql')] 需要注意的是, configparser  默認將值以字符串的形式呈現,所以這也就是為什麼我們在  db.ini  文件中沒有加引號而是直接將字面量寫在上面的原因。 獲取到鍵值對後,我其實直接就將其轉換成字典,然後通過解包的方式進行穿參,保持代碼簡潔: #!pip install pymysqlimport pymysqlfrom configparser import ConfigParsercfg = ConfigParser()cfg.read("/Users/Bobot/db.ini")db_cfg = dict(cfg.items("localdb"))con = pymysql.connect(**db_cfg) json json  格式可以説是我們常見的一種文件形式了,也是目前在互聯網較為流行的一種數據交換格式。除此之外, json  有時也是配置文件的一種。 比如  npm (JavaScript 包管理工具類似 Python 的  pip )、以及微軟出品的目前被廣泛使用的 VSCode 編輯器,都使用  json  編寫配置參數。 和  configparser  一樣,Python 也內置了  json  標準庫,可以通過  load()  和  loads()  方法來導入文件式和字符串的  json  內容。 {    "localdb":{        "host": "127.0.0.1",        "user": "root",        "password": "123456",        "port": 3306,        "database": "mysql"    }} 我們將上述內容保存為  db.json  後進行讀取和解析, json  庫讀取 json 文件相對簡單容易,而且很容易解析成 Python 的字典對象。 >>> import json>>> from pprint import pprint>>> >>> with open('/Users/Bobot/db.json') as j:...     cfg = json.load(j)['localdb']... >>> pprint(cfg){'database': 'mysql', 'host': '127.0.0.1', 'password': '123456', 'port': 3306, 'user': 'root'} 使用  json  文件配置的缺點就是語法標準嚴格限制,為人所詬病之一的就是無法在當中寫註釋,除非採取  json  類型的其他超集作為替代方案(VSCode 中能寫註釋的  json  參數配置文件便是代替方案的一種);同時存在嵌套過深的問題,容易導致出錯,不宜用來寫過長或複雜的參數配置信息。 toml toml  格式(或  tml  格式)是 Github 聯合創始人 Tom Preston-Werner 所提出的一種配置文件格式。根據維基百科的資料, toml  最開始提出時是在 2013年7月份,距今已有七年時間;它在某些方面也與後面要談到的  yaml  文件有些類似,但如果當你知道 yaml 的規範有幾十頁(沒有錯,真的就是幾十頁……)的時候,可能你真的就不太願意去寫那麼複雜的配置文件, toml  格式則倒是個不錯的選擇。 toml  格式大致如下: 01-toml樣式 從這裏可以看出 toml 有點類似於前面所講的 ini 文件。但是它比 ini 擴展了更多的內容。 在樣例圖片中我們可以看到,除了基本的字符串以外,例如時間戳、布爾值、數組等都進一步支持,而且樣式和 Python 的原生寫法十分類似。 當然這裏不會過多介紹 toml 格式的一些規範説明,有人已經對官方的規範文檔進行了翻譯,有興趣的朋友可以直接查閲。 這麼契合 Python 方式的配置文件類型已經有開發者造出了相應的「輪子」,目前在 Github 上 Stars 數最多的是則 uiri/toml 的版本,不過該版本僅通過了 v0.5 版本 toml 規範,但在使用上還是蠻簡潔的,我們可以通過 pip 命令進行安裝 pip install toml 該庫的解析方式很簡單,也有點類似於  json  庫的解析用法,即通過 load()  或  loads()  來進行解析;同理轉換並導出也是同樣類似的用法。 比如我們現在將以下內容寫入到  config.toml  中: [mysql]host = "127.0.0.1"user = "root"port = 3306database = "test" [mysql.parameters] pool_size = 5 charset = "utf8" [mysql.fields] pandas_cols = [ "id", "name", "age", "date"] 緊接着我們就可以通過 toml 庫中的 load() 方法來進行讀取: >>> import toml>>> import os>>> from pprint import pprint>>> cfg = toml.load(os.path.expanduser("~/Desktop/config.toml"))>>> pprint(cfg){'mysql': {'database': 'test',           'fields': {'pandas_cols': ['id', 'name', 'age', 'date']},           'host': '127.0.0.1',           'parameters': {'charset': 'utf8', 'pool_size': 5},           'port': 3306,           'user': 'root'}} 可以看到  toml  文件被間接地轉化成了字典類型,當然這也就是  json  版的寫法(將單引號替換成雙引號即可),方便我們後續調用或者傳參。 yaml yaml  格式(或  yml  格式)是目前較為流行的一種配置文件,它早在 2001 由一個名為 Clark Evans 的人提出;同時它也是目前被廣泛使用的配置文件類型,典型的就是 Docker 容器裏的 docker-compose.yml  配置文件,如果經常使用 Docker 進行部署的人對此不會陌生。 yaml  文件的設計從 Python、XML 等地方獲取靈感,所以在使用時能很清楚地看到這些部分的影子。 在上一節  toml  內容裏我曾提到, yaml  的規範內容可以説是冗長和複雜,足足有80頁之多(鬥尊強者,恐怖如斯……)。 02-yaml規範頁數 所以感興趣的朋友可以再自行了解相關用法。 YAML 官方早已經提供了相應的 Python 庫進行支持,即 PyYAML;當然也同樣需要我們事先進行安裝: pip install pyyaml 同  json  庫和  toml  庫一樣,通過  load()  方法來進行加載。 需要注意的是,使用  load()  方法會存在一定的安全隱患,從思科 Talos 的這份報告中我們可以看到,如果加載了未知或不信任的  yaml  文件,那麼有可能會存在被攻擊的風險和網絡安全隱患,因為它能夠直接調用相應的 Python 函數來執行為攻擊者所需要的命令,比如説在  yaml  文件中寫入這麼一段: # 使用Linux和macOS的朋友不要輕易嘗試!!python/object/apply:os.system ["rm -rf /"] 因此最好是使用 safe_load() 來代替 load() 方法。 這和 Python 內置的 string 標準庫中 Template 類的 substitute() 模板方法一樣存在着同樣的安全隱患,所以使用 safe_substitute() 來替代是一樣的道理。 如我們現在將之前的一些配置信息寫入 config.yaml 文件中: mysql:  host: "127.0.0.1"  port: 3306  user: "root"  password: "123456"  database: "test"  parameter:    pool_size: 5    charset: "utf8"  fields:    pandas_cols:       - id      - name      - age      - date 然後我們通過 safe_load() 方法進行解析: >>> import os>>> from pprint import pprint>>> >>> with open(os.path.expanduser("~/config.yaml"), "r") as config:...     cfg = yaml.safe_load(config)... >>> pprint(cfg){'mysql': {'database': 'test',           'fields': {'pandas_cols': ['id', 'name', 'age', 'date']},           'host': '127.0.0.1',           'parameter': {'charset': 'utf8', 'pool_size': 5},           'password': '123456',           'port': 3306,           'user': 'root'}} 可以看到最後結果和前面的 toml 庫的解析結果基本一致。 結尾 本文列舉了一些主流且常見的配置文件類型及其 Python 的讀取方法,可能有的讀者會發現當中沒有  xml  格式類型的內容。對於  xml  配置文件可能與 Java 系語言打交道的朋友遇見得會多一些,但  xml  文件的可讀性實在是讓人望而生畏;對  xml  文件不瞭解的朋友可以使用 Chrome 瀏覽器隨便進入一個網站然後按下 F12 進入開發者後查看那密密麻麻的 html 元素便是  .xml  的縮影。 除了這些主流的配置文件類型之外,像一些  .cfg 、 .properties  等都可以作為配置文件,甚至和開頭提到的那樣,你單獨用一個  .py  文件來書寫各類配置信息作為配置文件進行導入都是沒問題,只是在跨語言共享時可能會有些障礙。因此本文就不過多介紹,感興趣的朋友可以進一步自行了解。 在本文裏列舉的配置文件類型其複雜性由上到下依次增加: ini < json ≈ toml < yaml ,它們之間各有優劣,可以根據自己實際的需求和團隊協作要求來具體選擇。 來源:Python中文社區 免責聲明:本文內容由21ic獲得授權後發佈,版權歸原作者所有,本平台僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平台立場,如有問題,請聯繫我們,謝謝!

    時間:2020-11-25 關鍵詞: 計算機 Python

  • 電路板採用網格覆銅,還是實心覆銅?

    1 什麼是覆銅 所謂覆銅,就是將電路板上閒置的空間作為基準面,然後用固體銅填充,這些銅區又稱為灌銅。覆銅的意義在於:減小地線阻抗,提高抗干擾能力;降低壓降,提高電源效率;與地線相連,還可以減小環路面積。也出於讓PCB焊接時儘可能不變形的目的,大部分PCB 生產廠家也會要求PCB 設計者在PCB 的空曠區域填充銅皮或者網格狀的地線,覆銅如果處理的不當,那將得不償失,究竟覆銅是“利大於弊”還是“弊大於利”? 大家都知道在高頻情況下,印刷電路板上的佈線的分佈電容會起作用,當長度大於噪聲頻率相應波長的1/20 時,就會產生天線效應,噪聲就會通過佈線向外發射,如果在PCB中存在不良接地的覆銅話,覆銅就成了傳播噪音的工具。因此,在高頻電路中,千萬不要認為,把地線的某個地方接了地,這就是“地線”,一定要以小於λ/20 的間距,在佈線上打過孔,與多層板的地平面“良好接地”。如果把覆銅處理恰當了,覆銅不僅具有加大電流,還起了屏蔽干擾的雙重作用。 2 覆銅的兩種形式 覆銅一般有兩種基本的方式,就是大面積的覆銅和網格銅,經常也有人問到,大面積覆銅好還是網格覆銅好,不好一概而論。為什麼呢?大面積覆銅,具備了加大電流和屏蔽雙重作用,但是大面積覆銅,如果過波峯焊時,板子就可能會翹起來,甚至會起泡。因此大面積覆銅,一般也會開幾個槽,緩解銅箔起泡。如下圖: 單純的網格覆銅主要還是屏蔽作用,加大電流的作用被降低了,從散熱的角度説,網格有好處(它降低了銅的受熱面)又起到了一定的電磁屏蔽的作用。特別是對於在觸摸等電路當中,如下圖: 需要指出的是,網格是使由交錯方向的走線組成的,我們知道對於電路來説,走線的寬度對於電路板的工作頻率是有其相應的“電長度“的(實際尺寸除以工作頻率對應的數字頻率可得,具體可見相關書籍)。當工作頻率不是很高的時候,或許網格線的作用不是很明顯,一旦電長度和工作頻率匹配時,就非常糟糕了,你會發現電路根本就不能正常工作,到處都在發射干擾系統工作的信號。建議是根據設計的電路板工作情況選擇,不要死抱着一種東西不放。因此高頻電路對抗干擾要求高的多用網格,低頻電路有大電流的電路等常用完整的鋪銅。 免責聲明:本文系網絡轉載,版權歸原作者所有。如有問題,請聯繫我們,謝謝! 免責聲明:本文內容由21ic獲得授權後發佈,版權歸原作者所有,本平台僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平台立場,如有問題,請聯繫我們,謝謝!

    時間:2020-11-25 關鍵詞: 電路板 PCB

  • 學一招!如何判斷電容好壞?

    怎樣測量小容量電容的好壞? 1、檢測10pF以下的小電容,因10pF以下的固定電容器容量太小,如果用指針式用萬用表進行測量,只能定性的檢查其是否有漏電,內部短路或擊穿現象。 測量時,可選用萬用表R×10k擋,用兩電錶金屬測棒分別任意接電容的兩個接腳,阻值應為無窮大。若測出阻值(指標向右擺動)為零,則説明電容漏電損壞或內部擊穿。 2、對於0.01μF以上的固定電容,可用指針式萬用表的R×10k擋直接測試電容器有無充電過程以及有無內部短路或漏電,並可根據指針向右擺動的幅度大小估計出電容器的容量。 如何檢測電解電容器好壞? 1、因為電解電容的容量較一般固定電容大得多,所以,測量時,應針對不同容量選用合適的量程。根據經驗,一般情況下,1~47μF間的電容,可用R×1k擋測量,大於47μF的電容可用R×100擋測量。 2、將萬用表紅電錶金屬測棒接負極,黑電錶金屬測棒接正極,在剛接觸的瞬間,萬用表指針即向右偏轉較大偏度(對於同一電阻擋,容量越大,擺幅越大),接着逐漸向左迴轉,直到停在某一位置。 此時的阻值便是電解電容的正向漏電阻,此值略大於反向漏電阻。實際使用經驗表明,電解電容的漏電阻一般應在幾百kΩ以上,否則,將不能正常工作。 在測試中,若正向、反向均無充電的現象,即錶針不動,則説明容量消失或內部斷路;如果所測阻值很小或為零,説明電容漏電大或已擊穿損壞,不能再使用。 3、對於正、負極標誌不明的電解電容器,可利用上述測量漏電阻的方法加以判別。即先任意測一下漏電阻,記住其大小,然後交換電錶金屬測棒再測出一個阻值。 兩次測量中阻值大的那一次便是正向接法,即黑電錶金屬測棒接的是正極,紅電錶金屬測棒接的是負極。 4、使用萬用表電阻擋,採用給電解電容進行正、反向充電的方法,根據指針向右擺動幅度的大小,可估測出電解電容的容量。 5、測電容放電的速度 用一個數字萬用表搭在電容兩端先充電然後開路量測電壓掉下來的速度因為電容是開路的唯一會耗電的就是漏電流了如果你量測出電壓跟時間的曲線就可以反推出漏電流了記得用好一點的數字萬用表,因為萬用表本身的輸入阻抗再大也是有限的,如果是質量較好的電容漏電流本來就不大,那麼輸入阻抗稍小的數字萬用表就不準了。 6、注意!測量較大容量電容時如需要正負來回測量,要將電容短路放電,以免打壞表頭。 根據經驗,在高頻電路,開關電源電路有很多小電容是普通萬用表無法正確判斷出好壞的,有的電容量還有可能出現增加的可能。強烈建議用專用數字電容表測量。 ------------ END ------------ 來源:電子電路 免責聲明:本文內容由21ic獲得授權後發佈,版權歸原作者所有,本平台僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平台立場,如有問題,請聯繫我們,謝謝!

    時間:2020-11-25 關鍵詞: 元器件 電容

  • 拆解FPGA芯片,帶你深入瞭解其原理

    現場可編程門陣列(FPGA)可以實現任意數字邏輯,從微處理器到視頻生成器或加密礦機,一應俱全。FPGA由許多邏輯模塊組成,每個邏輯模塊通常由觸發器和邏輯功能以及連接邏輯模塊的路由網絡組成。FPGA的特殊之處在於它是可編程的硬件:您可以重新定義每個邏輯塊及其之間的連接,用來構建複雜的數字電路,而無需物理上連接各個門和觸發器,也不必花費設計專用集成電路的費用。 內部裸片顯微照片  FPGA是由Ross Freeman發明的,他在1984年共同創立了Xilinx,並推出了第一款FPGA——XC2064。這種FPGA比現代FPGA簡單得多,它只包含64個邏輯塊。而現代FPGA中的邏輯塊有幾千個或數百萬個,但它導致了目前價值數十億美元的FPGA產業。由於其重要性,XC2064被列入芯片名人堂。在這篇文章中,我們對Xilinx的XC2064進行了逆向工程,解釋了它的內部電路(上圖)以及 "比特流 "是如何對它進行編程的。 第一款FPGA芯片-Xilinx XC2064 如今,FPGA是採用Verilog或VHDL之類的硬件描述語言編程的,但當時Xilinx提供了他們自己的開發軟件XACT,運行在MS-DOS操作系統之下,價格高達12,000美元。XACT自然無法與現在的FPGA開發工具相比,XACT通過用户定義了每個邏輯塊的功能(如下面的屏截圖所示)以及邏輯塊之間的連接,對連接進行佈線連接,並生成可加載到FPGA中的比特流文件。 XACT的屏幕截圖 兩個查找表F和G在屏幕底部實現邏輯運算,上面部分顯示該邏輯的卡諾圖 通過位流(具有專有格式的位序列)配置FPGA。如果您查看XC2064的比特流(如下所示),那是令人費解的混合模式,這些模式不規則地重複,並散佈在比特流中。XACT中的功能定義與位流中的數據之間沒有明確的聯繫。但是,研究FPGA的物理電路可以揭示比特流數據的結構,並且可以理解。 通過位流(具有專有格式的位序列)配置FPGA。如果您查看XC2064的比特流(如下所示),那是令人費解的混合模式,這些模式不規則地重複,並散佈在比特流中。XACT中的函數定義與位流中的數據之間沒有明確的聯繫。但是,研究FPGA的物理電路可以揭示比特流數據的結構,並且可以理解。 XC2064的比特流 FPGA如何工作 下圖來自原始FPGA專利,顯示了FPGA的基本結構。在此簡化的FPGA中,有9個邏輯塊(藍色)和12個I/O引腳。互連網絡將組件連接在一起。通過設置互連上的開關(對角線),邏輯塊相互連接並連接到I/O引腳。每個邏輯元素都可以使用所需的邏輯功能進行編程。其結果是一個高度可編程的芯片,可以實現任何適合可用的電路。 FPGA專利顯示通過互連連接的邏輯塊(LE) CLB:可配置邏輯塊 雖然上圖顯示了九個可配置邏輯塊(CLB),但XC2064有64個CLB。下圖顯示了每個CLB的結構。每個CLB有四個輸入(A、B、C、D)和兩個輸出(X和Y)。兩者之間是組合邏輯,可以使用任何所需的邏輯功能進行編程。CLB還包含一個觸發器,允許FPGA實現計數器、移位寄存器、狀態機和其他有狀態電路。梯形是多路複用器,可以編程通過其任何輸入。多路複用器允許為特定任務配置CLB,為觸發器控件和輸出選擇所需的信號。 XC2064中的可配置邏輯塊 那麼,組合邏輯如何實現任意邏輯功能?它會採用與門、或門、異或門等邏輯嗎? 不,它使用一種稱為查找表(LUT)的巧妙技巧,實際上它包含的是邏輯功能的真值表。例如,三個變量的功能由其真值表中的8行定義。LUT由8位內存以及多路複用電路組成,以選擇正確的值。通過將值存儲在這8位內存中,可以實現任何3輸入邏輯功能。  互 連 FPGA的第二個關鍵部分是互連,可以對其進行編程以不同方式連接CLB。互連相當複雜,但是粗略的描述是每個CLB之間有幾個水平和垂直線段。CLB互連點允許在水平線和垂直線之間建立連接,從而可以創建任意路徑。 更復雜的連接通過“交換矩陣”(switchmatrices)完成。每個開關矩陣都有8個引腳,可以(幾乎)任意方式將它們連接在一起。下圖顯示了XC2064的互連結構,提供了到邏輯塊(青色)和I / O引腳(黃色)的連接。該圖顯示了路由功能的特寫。綠色框是8針開關矩陣,而小方塊是可編程的互連點。 XC2064 FPGA具有一個8x8的CLB網格 每個CLB都有從AA到HH的字母名稱。互連可以將例如塊DC的輸出連接到塊DE的輸入,如下所示。紅線表示路由路徑,紅色小方塊表示已激活的路由點。離開模塊DC後,信號由第一個路由點定向到8針開關(綠色),該信號將其引導到另外兩個路由點和另一個8針開關。(未顯示未使用的垂直和水平路徑。)請注意,佈線相當複雜;即使是這條短路徑,也使用了四個路由點和兩個開關。 從塊DC的輸出路由到塊DE的信號示例 下面的屏幕截圖顯示了 XACT 程序中的路由外觀。黃線指示邏輯塊之間的路由。隨着信號的加入,挑戰在於如何有效地路由而不使路徑發生衝突。XACT 軟件包執行自動路由,但也可以手動編輯路由。 XACT程序的屏幕截圖 此MS-DOS程序通過鍵盤和鼠標進行控制 Implementation 本文的其餘部分討論了XC2064的內部電路,從裸片照片中的反向工程。  下圖顯示了XC2064芯片的佈局。FPGA的主要部分是8×8的網格。每個圖塊包含一個邏輯塊和相鄰的路由電路。儘管圖片顯示將邏輯塊(CLB)顯示為與圍繞它們的路由不同的實體,但這並不是  FPGA的實現方式。取而代之的是,每個邏輯塊和相鄰路由都實現為單個實體,即圖塊。(具體來説,圖塊包括每個CLB上方和左側的路由。) XC2064芯片的佈局 I/O模塊圍繞集成電路的邊緣提供與外界的通信。它們連接到小的綠色方形焊盤,該焊盤連接到芯片的外部引腳。裸片被緩衝區(綠色)劃分:兩個垂直和兩個水平。這些緩衝器可放大在電路中傳播很長距離的信號,從而減少延遲。垂直移位寄存器(粉紅色)和水平列選擇電路(藍色)用於將比特流加載到芯片中,如下所述。 Tile的內部結構 下圖顯示了XC2064中單個Tile的佈局;如上圖所示,該芯片包含64個這樣的Tile擠在一起。每個Tile約有40%的面積被保存配置位的內存單元(綠色)所佔據。頂部三分之一處通過兩個交換矩陣和許多單獨的路由交換處理互連路由,下面是邏輯塊。邏輯塊的關鍵部分是輸入的多路複用器、觸發器和查找表(LUT)。每個塊通過垂直和水平佈線連接到相鄰的塊,以實現互連,電源和接地。配置數據位被水平地饋送到存儲單元,而垂直信號選擇要加載的存儲單元的特定列。 XC2064中單個Tile的佈局 晶體管 FPGA由CMOS邏輯實現,該邏輯由NMOS和PMOS晶體管構建。晶體管在FPGA中具有兩個主要作用。首先,可以將它們組合以形成邏輯門。其次,晶體管被用作信號通過的開關,例如以控制路由。在此作用下,該晶體管稱為傳輸晶體管。 MOSFET的結構 下面的裸片照片特寫顯示了在顯微鏡下晶體管的外觀。多晶硅柵極是兩個摻雜硅區域之間的蛇形線。 FPGA中的MOSFET 比特流和配置存儲 XC2064 中的配置信息存儲在配置內存單元中。FPGA 的內存不是使用 RAM 塊進行存儲,而是分佈在 160×71 網格中的芯片上,確保每個位都位於它控制電路旁邊。下圖顯示了配置比特流如何加載到 FPGA 中。比特流被送入從芯片中心(粉紅色)向下運行的移位寄存器中。將 71 位加載到移位寄存器中後,列選擇電路(藍色)將選擇特定的內存列,並並行加載到此列中。然後,將接下來的 71 位加載到移位寄存器中,左側的下一列將成為所選列。此過程將重複 FPGA 的所有 160 列,將整個比特流加載到芯片中。使用移位寄存器可避免大量內存尋址電路。 比特流如何加載到FPGA中 重要的是,比特流的分佈與文件中的分佈完全相同:比特流文件中的比特佈局與芯片上的物理佈局匹配。如下所示,每個位都存儲在FPGA控制電路的旁邊。因此,比特流文件格式直接由硬件電路的佈局確定。例如,當由於緩衝電路而在FPGA切片之間存在間隙時,相同的間隙會出現在位流中。比特流的內容不是圍繞字段,數據表或配置塊之類的軟件概念來設計的。瞭解比特流取決於從硬件角度而非軟件角度進行思考。 如下所示實現配置存儲器的每一位。每個存儲單元均包含兩個以環路連接的反相器。該電路具有兩個穩定狀態,因此可以存儲一個位:頂部反相器為1,底部反相器為0,反之亦然。為了寫入該單元,左側的傳輸晶體管被激活,使數據信號通過。數據線上的信號只會使逆變器過載,從而寫入所需的位。(您也可以使用相同的路徑從FPGA中讀取配置數據。)Q和反相Q輸出控制FPGA中所需的功能,例如關閉路由連接,為查找表提供位,或控制鎖存器電路。(在大多數情況下,僅使用Q輸出。) 從數據表中顯示一個位配置內存的示意圖 上方的Q是輸出,下方的Q是倒置輸出 下圖顯示了存儲單元的物理佈局。左圖顯示了八個存儲單元,其中一個單元高亮顯示。每條水平數據線饋入該行中的所有存儲單元。每列選擇行選擇該列中的所有存儲單元以進行寫入。中間照片放大了一個存儲單元的硅和多晶硅晶體管。 存儲單元的物理佈局 查找表多路複用器 如前所述,FPGA通過使用查找表來實現任意邏輯功能。下圖顯示瞭如何在XC2064中實現查找表。左側的八個值存儲在八個存儲單元中。四個多路複用器根據A 輸入值選擇每對值中的一個  。如果  A 為0,則選擇最高值;如果  A 為1,則選擇最低值。接下來,較大的多路複用器根據B 和  選擇四個值之一  C。在這種情況下,結果是所需的值  A XOR B XOR C。通過在查找表中放置不同的值,可以根據需要更改邏輯功能。 使用查找表實現XOR 每個多路複用器都是通過晶體管來實現的。根據控制信號,其中一個傳遞晶體管被激活,將該輸入傳遞到輸出。下圖顯示了LUT電路的一部分,多路複用了其中的兩個比特。右邊是兩個存儲器單元。每一個比特都要經過一個反相器進行放大,然後經過中間的多路複用器的傳遞晶體管,選擇其中的一個比特。 LUT實現中的電路特寫 鎖存器 每個CLB包含一個觸發器,允許FPGA實現鎖存器,狀態機和其他有狀態電路。下圖顯示了觸發器的實現。它使用主/輔助設計。當時鍾為低電平時,第一個多路複用器讓數據進入主鎖存器。當時鍾變高時,多路複用器關閉第一個鎖存器的環路,並保持該值。(該位通過“或”門,“與非”門和反相器兩次反轉,因此保持不變。)同時,當時鍾變高時,輔助鎖存器的多路複用器從第一個鎖存器接收該位(請注意,時鐘已反轉)。該值成為觸發器的輸出。當時鍾變低時,次級的多路複用器關閉環路,從而鎖存該位。因此,觸發器是邊緣敏感的,在時鐘的上升沿鎖存該值。置位和復位線強制觸發器為高電平或低電平。 觸發器的實現,箭頭指出了第一個多路複用器和兩個OP-NAND門 8-pin交換矩陣 交換矩陣是一個重要的路由元件。每個開關有八個"引腳"(每側兩個),幾乎可以連接任意引腳組合在一起。這允許信號比單個路由節點更靈活地轉動、拆分或交叉。下圖顯示了四個 CLB (cyan)之間的路由網絡的一部分。交換矩陣(綠色)可與右側連接的任意組合連接。請注意,每個引腳可以連接到其他 7 個引腳中的 5 個。例如,引腳 1 可以連接到引腳 3,但無法連接到引腳 2 或 4。這使得矩陣幾乎是一個橫欄,有20個潛在的連接,而不是28個。 基於Xilinx可編程門陣列數據手冊 開關矩陣由一排傳輸晶體管實現,該傳輸晶體管由上方和下方的存儲單元控制。晶體管的兩側是可以通過該晶體管連接的兩個開關矩陣引腳。因此,每個開關矩陣具有20個相關聯的控制位。 每個圖塊兩個矩陣,即每個圖塊產生40個控制位。下圖顯示了其中一個存儲單元,該存儲單元連接到下面的傳輸晶體管的長彎曲柵極。該晶體管控制引腳5和引腳1之間的連接。 其中一個存儲單元 因此,與該存儲單元相對應的位流中的位控制引腳5和引腳1之間的開關連接。同樣,其他存儲單元及其相關晶體管控制其他開關連接。請注意,這些連接的順序不遵循特定的模式。因此,位流位和開關引腳之間的映射是隨機的。 輸入路由 CLB的輸入在位流中使用不同的編碼方案,這由硬件實現方式解釋。在下圖中,八個圓圈的節點是CLB框DD的潛在輸入。 CLB的輸入在位流中使用的編碼方案示意圖 最多隻能將一個節點配置為輸入,因為將兩個信號連接到同一輸入將使它們短路。使用多路複用器選擇所需的輸入。一個簡單的解決方案是使用8路多路複用器,其中3個控制位選擇8個信號之一。另一個簡單的解決方案是使用8個通過晶體管,每個晶體管都有自己的控制信號,其中一個選擇所需的信號。但是,FPGA使用一種混合方法,該方法避免了第一種方法的解碼硬件,但使用了5個控制信號,而不是第二種方法所需的8個控制信號。 FPGA使用多路複用器選擇八個輸入之一 上面的示意圖顯示了FPGA中使用的兩級多路複用器方法。在第一階段,控制信號之一被激活。第二階段從頂部或底部選擇信號作為輸出。例如,假設控制信號  B/F 發送到第一級,“ ABCD”發送到第二級;輸入B是唯一將傳遞到輸出的B。因此,選擇八個輸入之一需要在比特流中使用5位,並使用5個存儲單元。 結 論 XC2064使用各種高度優化的電路來實現其邏輯塊和路由。該電路需要緊湊的佈局,以適合芯片。即使這樣,XC2064還是一個非常大的芯片,比當時的微處理器還大,因此一開始很難製造,而且要花費數百美元。與現代FPGA相比,XC2064的單元數量非常少,但是即使如此,它也引發了革命性的新產品線。 瞭解XC2064比特流的關鍵是兩個概念。首先,FPGA由64個塊組成,這些塊是將邏輯塊和路由結合在一起的重複塊。儘管FPGA被描述為具有被路由包圍的邏輯塊,但這並不是實現它們的方式。 第二個概念是,比特流中沒有抽象。它直接映射到FPGA的二維佈局中。因此,只有考慮FPGA的物理佈局,比特流才有意義。 免責聲明:本文系網絡轉載,版權歸原作者所有。如有問題,請聯繫我們,謝謝! 免責聲明:本文內容由21ic獲得授權後發佈,版權歸原作者所有,本平台僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平台立場,如有問題,請聯繫我們,謝謝!

    時間:2020-11-25 關鍵詞: FPGA 可編程芯片

  • 2020國際電子電路(深圳)展覽會12月2-4日舉辦,呈獻最新的市場發展趨勢和創新技術

    2020國際電子電路(深圳)展覽會12月2-4日舉辦,呈獻最新的市場發展趨勢和創新技術

    (中國香港,2020年11月25日)由香港線路板協會(HKPCA) 及中國電子電路行業協會(CPCA) 聯合主辦的2020國際電子電路(深圳)展覽會將於2020年12月2日至4日在深圳會展中心(福田)的1、2及4號館盛大舉辦。 作為線路板及電子行業每年年底的行業盛會,今年展會將匯聚近450家展商, 展覽面積達52,500平方米,展位數近2,850個。現場設有七大展區,包括線路板製造商、電子組裝專區、環保潔淨專區、智能自動化專區、設備供應商、原物料供應商及日韓專區,展示覆蓋PCB行業整個供應鏈的設備和技術。今年更全新推出 “線上展會”,為業界打造“線上+ 線下”全方位的體驗,幫助業內人士創造更多合作機會。 5G技術的發展改變了整個行業,連接設備的激增將需要更新、更復雜的線路板技術,為此推動線路板製造商在各個領域的技術水平不斷提高,也為線路板及電子組裝行業帶來了機遇。本屆展會除了全面展示5G驅動下領先的PCB生產解決方案及技術,同期也將舉辦 第15屆世界電子電路大會、國際技術會議等活動,邀請行業專家分享5G等行業熱點話題的真知灼見,幫助業界人士瞭解行業最新的發展動態、激發靈感及學習應對行業面臨的日益複雜的挑戰的解決方案,將業務轉型到一個新的水平。 第十五屆世界電子電路大會(ECWC15) 全球精英齊聚,探討行業熱門議題 第十五屆世界電子電路大會(ECWC15) 會議現正接受登記。會議匯聚世界各國來自線路板及電子行業的專業學者、技術人員參與及分享,為期三天於2020年11月30日至12月2日以線上形式舉行,第三天的研討會將移師深圳會展中心(福田),與國際電子電路(深圳)展覽會同步進行。 此次會議聚集世界各國行業專家、學者、技術人員參與,反應熱烈。演講內容涵蓋現今熱門的議題,包括5G的線路板材料選擇、測試優化方案、製造技術、組裝解決方案、高頻高速信號應用、設備的新技術;提高質量的解決方案,還有最新全球的市場動態、行業標準、工業4.0、智慧生產、優質的企業管理方案、可穿戴電子產品應用、電動汽車技術,以及大家都關注的環保節能減排方案。會議包括口頭髮表、海報發表、主題演講、問答環節,以及小組討論。 想一同探討電子電路領域熱門議題、最新技術發展和趨勢,萬勿錯過,請立刻登記參加這個行業盛事! 2020年11月30日至2020年12月1日: 線上舉行 2020年12月2日: 線上、線下同步舉行,實體會議於深圳會展中心(福田)的2020 國際電子電路 (深圳) 展覽會4號館內舉行 國際技術會議 共話當下行業熱點話題及分享最新行業動態 2020 國際技術會議匯聚多位行業專家及業內知名企業代表,分享最新的市場趨勢、技術應用及前瞻觀點。今年特別邀請到了中興通訊總工程師劉哲先生為與會者帶來關於5G發展趨勢的主題演講。 其他演講嘉賓分別來自於多家公司的高管及技術專家,包括深圳市貝加電子材料有限公司、環球電路板設備有限公司、美瑞安科技(香港)有限公司、馬赫內托特殊陽極(蘇州)有限公司 、AGC. Inc、超淦科技(香港)有限公司等,分享當前最新的市場趨勢、研究和創新產品。部分精彩議題包括: · PCB生產革新技術 – “防焊油墨噴印機”執行長嚴駿瑩) · PCB製造導通孔黑影工藝應用介紹 · Therminol導熱油介紹及其在PCB/CCL行業的應用 · 鈦陽極在PCB鍍銅製程中的應用 · AGC-TACONIC 高性能77GHz汽車雷達用PCB材料介紹 · 高温430℃的熱油泵 · 數碼打印阻焊工藝介紹 · AI人工智能在PCB行業的應用 全新推出“線上展會” 12月2日與“線下展會”同步展出 “線上展會”是今年展會的一大創新,為業界打造“線上+線下”的全新展會體驗。觀眾即使無法親身蒞臨展會現場,也可透過線上展參與其中,線上瀏覽近450家遞四方香港的產品及技術,與心儀的展商線上溝通交流,開拓合作關係。透過“線上+線下”的模式,拓寬觀眾範圍,帶來無限商機。 線上展會將設有“電腦版”及“微信版”,觀眾可通過展會官網或微信公眾號進入平台。 觀眾預登記將於本週五(11月27日)截止 請抓緊時間趕快登記 根據新冠疫情常態化防控工作的要求,今年國際電子電路(深圳)展覽會將實行實名制登記入場。因此呼籲觀眾於展前進行預登記,現場可節省領證輪候時間。成功預登記觀眾,更能享受一系列禮遇。 個人登記: · 享受自助入場服務,省去現場登記需錄入信息做實名登記的排隊輪候時間; · 參與觀眾抽獎活動,贏取華為P40 5G手機、華為GT2 智能手錶等豐厚的電子禮品; · 展會現場免費獲得深圳地鐵/公交券; 團隊登記: · 4人或以上的團隊登記,團長可獲得精美禮品一份; · 廣東省內企業組團達到30人或以上,享受免費大巴車接送;

    時間:2020-11-25 關鍵詞: 5G CPCA ECWC15

  • 小船説翻就翻:硬件工程師VS軟件工程師

    關於軟件工程師和硬件工程師總有太多的話題。 常態往往是這樣滴: 板子出問題了,硬件工程師:肯定是軟件的原因!軟件工程師:絕對是硬件的問題! 以下內容摘自知乎匿名用户一位美國在校學生所寫,雖然或有失偏頗,但還是很能説明問題的: 1. 我個人理解的就業與行業前景 因為我個人對美國這方面瞭解更多,就先從美國説一説。我相信硬件工程師和軟件工程師的就業前景應該是提這個問題的人最想知道的方面。 就我所瞭解的,在現在以及可預見的未來,這個行業對軟件工程師的需求絕對是碾壓硬件工程師的。也就是説,招軟件工程師的職位比硬件工程師的職位要多的多,而且軟件工程師找工作上來説會比硬件工程師更容易 先從企業的角度來講講。我個人認為造成這個差異的原因,第一個是基本上所有的公司,從初創公司到全球百強,都有對軟件工程師的需求。現在哪個公司不需要幾個碼農來開發app,或者做個web。但是做硬件這種工作並不是所有公司會去做的。舉個簡單的例子,摩根大通銀行在我們學校的招聘會上有明確招軟件工程師,expedia在我們學校招聘會上也明確招聘軟件工程師,如果這個兩個公司突然説要招電子工程師,這不是逗我嗎。。而且哪怕是硬件公司,也需要大量的軟件工程師來支持硬件前端工作。 第二點我覺得要歸功於現在的創業潮。不管在美國在中國互聯網創業都是趨勢,但是可以説絕大部分的初創互聯網公司做的都是軟件方向。有個點子,有點技術,找幾個合夥人抱着電腦就能開幹了。但是初創公司要專注做硬件開發就比較難了,因為成立設計硬件公司的門檻和起步開銷比較大。所以這也導致大部分初創公司以互聯網為主,能做的了硬件設計的公司基本上都是處於壟斷地位的大企業。 第三個很重要的原因就是硬件設計在現在來看已經是相對成熟的技術,我甚至有ee的同學跟我説大部分硬件的東西已經步入夕陽產業的範疇,因為很多東西已經成了規範,也因為很多東西被自動化所取代。前一陣子全球大牌的硬件公司才裁了不少人,intel更是裁掉了接近20%的硬件工程師。但是互聯網熱從90年代開始到現在熱頭還沒過,而且未來諸多產業如人工智能,機器學習,圖像識別,大數據都才剛起步,所以還有一定的上升空間。 還記得當初我們學校的初創公司招聘會上幾十家公司只有一家招硬件工程師,而且還是偏軟件的硬件工程師,剩下的公司裏98%都在找會碼代碼的人;大企業的招聘會上才能見到nvidia, arm, intel, TI 的身影,但是哪怕是這樣基本上所有的公司招牌上都會有大寫加粗的招computer science的字樣。。 再從個人的角度來講。想成為一名軟件工程師找到工作的門檻遠比成為一名合格的硬件工程師低很多。要想以軟件工程師的身份混到個飯碗,能學兩門語言學好常用的數據結構刷點題就基本上能找到薪水小几千的崗位。我甚至知道國內有專門的軟件工程師培訓機構,那種專門教java和算法,兩個月速成班,而且所聲稱的學生就業率還挺高的。但是要想成為一名合格的硬件工程師,不是科班出身的不好好學幾門模電數電信號邏輯設計的課,沒有在學校實驗室裏自己焊點電路做實踐,連簡歷都發不出去。而且現在要想學個什麼語言框架,網上搜一搜“”xxx語言入門教程“”就有非常豐富的資源,但是要是在網上搜“如何學好超大規模集成電路設計”,要想找到可以受用的資源幾乎是不可能的。而且就我所參加的招聘會來説,如果有招硬件工程師基本都要求有研究生的學位,但是對軟件工程師的要求基本上就是熟悉算法數據結構,會web編程有相關經歷就夠了。軟件工程師很多時候吃的是體力,硬件工程師大部分時候是吃經驗,所以硬件工程師一般得有一定的經歷積澱才能脱穎而出。尤其像模電這種上手程度很高的方向,沒個十年八年的相關經驗根本不算學成出師。所以説本身對從業者的資質要求更高,也是硬件工程師不好找工作的原因之一。 上面是我所認為的短時間內軟件工程師就找工作方面來説會比硬件工程師更容易的原因。但是這並不意味着會編程就肯定找得到工作,也不意味着硬件產業就會低迷下去。軟件工程師的職位多,但是每年從事這個職業的人也更多,雖然我認為現在軟件工程師短期內還沒有出現飽和的趨勢(畢竟那麼高的工資還擺在那),但是總有一天這個行業也會像金融產業一樣降温(人才供過於求)。硬件產業雖然大部分已經有步入夕陽產業的趨勢,但是曾經一度被宣稱沒啥好搞的供電網絡最近也被smart grid搞得神乎其神,美國top5的高校都還設立了相關實驗室。此外,現在物聯網,車聯網,智能家居的概念被炒得火熱,我相信等相關成熟的支持技術(能量採集,低功耗通信)以及統一的開發平台一旦出現,硬件工程師的需求只會更多,雖然這些產品依舊只有那些有背景的大公司才做得動(不過因為歐美國家電子產業上的封鎖,國家也在硬件設計上砸了很多銀子,初創企業也會慢慢增加,相信國內的相關機遇也會更多)。而且畢竟軟件產業畢竟還是依靠硬件,如何設計低功耗,高穩定性,能夠承載大吞吐量計算量的硬件也是這個產業的挑戰,畢竟人工智能,機器學習,視覺處理等領域是很吃硬件計算量的。沒有強大的硬件支持,阿狗要想打敗李世乭還是痴心妄想吧。 2. 工作常態  現在在一家設計為設計硬件的公司所設計軟件的百強軟件公司實習,做的工作大部分還是偏軟件,所以本身對工作常態也並沒有非常深入的自己的感受。但是就我觀察身邊的同事以及跟別人的交流來看,不管是做軟件硬件,都是要:對。着。電。腦。。。 軟件工程師平時就是上班啊調試程序,比較低級的碼農只能給高級軟件工程師大大下手,幫他們做測試,實現他們設計好的東西。當然了做到高級工程師了才有能力開發設計自己公司的產品。如果在初創公司工作節奏更緊張,如果趕上產品要上線可能需要加班調試。遇到程序爆炸了可能還需要on call(就是你負責的東西突然出問題了,你的manager直接打個電話給你你得馬上去公司修bug),至少我知道amazon是有這個機制。 我現在還沒有在純做硬件的公司實習過,但是從我知道的事實來看,硬件工程師不會比軟件工程師輕鬆。硬件工程師也需要調試電路啊調試腳本啊反正也有跟軟件工程師交叉的工作。工作環境的話取決於細分的工作類別。開發fpga的估計跟碼農一樣坐辦公室,搞mems的嵌入式的就長期入駐實驗室了。因為大部分硬件公司都是相對成熟的大企業,所以工作節奏普遍不會像在初創公司那麼緊張,不過像在華為這樣的企業就另説了。。。 當然了不管是在軟件工程師還是硬件工程師,工作強度應該都是高於其他industry的職業的。畢竟這個行業競爭會越來越激烈,這也是聰明人聚集的地方。 至於工資的話,就平均來講,美國這裏的軟件工程師年薪會略高於硬件工程師(從glassdoor以及其他門户的數據來看),但是軟件工程師一樣也有收入低的,硬件工程師的收入也有碾壓軟件工程師的。只要你技術過硬,薪水都不是事兒。 3. 個人感受  我個人的感覺是不管怎樣,這兩個行業在未來都會有非常非常多的機遇與挑戰(詳細原因見第一點)。不管是軟件設計還是硬件設計底下都有更多細小的分支(比如説你硬件設計是想做vlsi,dsp,處理器設計,通信,fpga開發還是嵌入式,軟件設計你想做web開發,app開發,軟件開發,嵌入式軟件工程師,操作系統還是distributed system)。 我個人是對兩個大方向都很有興趣,但是我決定自己最終的方向還是嵌入式設計和處理器設計,這兩個行業都應該算是夾在了純硬件設計和純軟件設計的中間。尤其是產業對嵌入式工程師的要求更高,能夠自己設計mixed signal pcb,自己調試應用代碼寫kernel code,能調試無線通信,基本意味着一個合格的嵌入式工程師要對硬件和軟件相關方面有足夠的知識。我自己是比較討厭做web開發app純開發軟件的工作,因為這些工作的門檻太低,不是科班出身的人可能都能混的比你好得多,體現不出來自己的價值。而且我比較喜歡把電路板和各種元件握在手裏的感覺,而且我發現自己能夠設計一個可以用的硬件的時候那種成就感會高於debug之後的成就感。當你發現自己在經受了大學的磨練真正擁有了學習知識的能力以後,豐富的網上資源以及自身的積累都會讓你學習這些網頁app知識非常輕鬆,所以我個人更喜歡硬件底層,以及和硬件底層打交道的軟件領域。軟件硬件的課程都不會簡單,而且兩個學科的工作量不是其他學科能比的(學工科的天天做project呆lab,學統計的上完課就回家看電影。。)所以要想學好,還是需要花一定精力,尤其美國的大學工科院系workload相對國內高校來説有增無減。確定這是你想要的,再給予考慮。以上內容是不是説出了做軟件與做硬件的不同體會?不過,據説,老工程師對此的回答是:工作久了就會發現其實需求才是根本,軟件硬件只是實現需求的途徑..... 【遞四方香港】八個經驗搞定開關電源PCBLayout 【遞四方香港】程序員又翻車了!腦袋短路時他們是怎麼想的? 【遞四方香港】電源防反接電路的幾種實現方案 【遞四方香港】知道了電容的這些作用,就可以玩轉電容 免責聲明:本文內容由21ic獲得授權後發佈,版權歸原作者所有,本平台僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平台立場,如有問題,請聯繫我們,謝謝!

    時間:2020-11-25 關鍵詞: 嵌入式 程序員

  • 甲醛檢測儀開源項目:產品級開發(一)

    前陣子開源了一個基於TencentOS tiny物聯網操作系統的危險氣體探測儀項目,這次,我們再來開源一個新的項目-甲醛檢測儀,但是做項目之前,有必要了解下接下來要做的一些模塊以及如何來進行集成。 1、簡介 WZ-S型甲醛檢測模組是英國達特公司開發的,是用於將環境中甲醛的含量轉換成濃度值,標準化數字輸出,便於系統集成。 2、特點 3、典型應用場景 4、硬件引腳及技術指標 5、傳感器通訊協議 該傳感器採用的是串行通訊方式,也就是我們常用的串口,串口配置參數如下: 波特率:9600 數據位:8位 停止位:1位 校驗位:無 傳感器在出廠後默認為主動上報,每隔1s上報一次濃度值,命令行格式如下: 一般情況下我們直接拿來用即可。 6、軟件編程(以STM32為例) 以下開發板為TOS_EVB_GO開發板,也就是前陣子TencentOS公眾號發表的一篇文章的那個,鏈接如下: 基於TencentOS Tiny接入騰訊連連微信小程序,打造您自己的智能家居產品 TOS_EVB_G0 開發板是由騰訊TencentOS-tiny團隊設計的一款物聯網開發板,板載資源如下: 主控芯片採用STM32G070RB,Flash空間僅有128KB、RAM空間僅有20KB; 板載騰訊雲定製固件版ESP8266 WIFI模組; 板載E53傳感器標準接口,方便連接各種E53傳感器; 板載0.91'OLED顯示屏幕; 板載8MB SPI Flash,可用於固件升級; 板載CH340 轉串口連接,可以使用一根USB線連接至電腦,查看串口日誌; 基於該開發板編寫的達特傳感器驅動例程位於: //gitee.com/morixinguan/bear-pi.git 以上拓展模塊是騰訊基於E53接口設計的一個傳感器模塊,所以小熊派也是支持的,如下: 由於在小熊派上使用比較順手,所以現在我已經對它愛不釋手了,無論是工作做實驗還是平時練習,以下配置、編程基於小熊派開發板。 6.1、STM32CubeMX關於傳感器的配置 配置DMA接收,個人習慣DMA+空閒中斷的方式。 6.2、其它配置 6.2.1 時鐘 6.2.2 SWD調試口 6.2.3 調試串口 6.2.4 SPI OLED配置 其餘的部分直接複用之前文章的一些接口即可,然後生成工程: 6.3 程序編寫 在程序編寫之前先來了解一些基本的概念,有助於我們後面產品的實現。 (1)ppm、ppb、ppt是什麼? 表達溶液的濃度時,1ppm=1ug/mL;表達固體中成分含量時,1ppm即為1ug/g或1g/t。 所以1ppb=1ppm的千分之一,ppm即百萬分之一,ppb即1億分之一,ppt即千億分之一。 所以ppm是10的-6次方,ppb是10的-9次方,ppt是10的-12次方 (2)濃度及濃度單位換算 1ppm = 1000ppb 1ppb  = 1000ppt ppm 即:mg/L(毫克/升) ppm 即:mg/L(毫克/升) ppm 即:mg/L(毫克/升) 6.3.1 達特傳感器通訊協議解析 由於達特甲醛傳感器出廠時固定是發9個字節,所以我們可以直接用下面這個結構體來表示: /*甲醛傳感器協議*/typedef struct{ /*起始位*/ uint8_t start_bit ; /*氣體名稱*/ uint8_t gas_name  ; /*單位*/ uint8_t unit ; /*小數位數*/ uint8_t decimal_places ; /*氣體濃度高位*/ uint8_t gas_density_high ; /*氣體濃度低位*/ uint8_t gas_density_low ; /*滿量程高位*/ uint8_t full_range_high ; /*滿量程低位*/ uint8_t full_range_low ; /*校驗值*/ uint8_t checksum_value ;}Dart_Sensor_Procol_TypeDef ; 針對以上結構體我們很容易根據官方手冊説明寫出如下解析函數: Dart_Sensor_Procol_TypeDef Dart_Sensor_Data_Parse(uint8_t *Data){ uint16_t temp = 0 ; uint16_t check_sum = 0 ; uint16_t check_sum_negate = 0 ; Dart_Sensor_Procol_TypeDef dart_sensor ;  /*將接收到的協議數據直接轉到結構體裏進行存儲*/ memcpy(&dart_sensor,Data,sizeof(Dart_Sensor_Procol_TypeDef));  /*計算校驗值*/ check_sum = dart_sensor.gas_name + dart_sensor.unit +      \ dart_sensor.gas_density_low + dart_sensor.gas_density_high +   \ dart_sensor.full_range_high + dart_sensor.full_range_low + dart_sensor.decimal_places ; check_sum_negate = ~check_sum ; temp = check_sum_negate + 1 ; if((temp & 0xff) != dart_sensor.checksum_value)  {  memset(&dart_sensor,0,sizeof(Dart_Sensor_Procol_TypeDef));  return dart_sensor ; } return dart_sensor ;} 關於這個Data是怎麼直接轉結構體的,可以參考我的一位朋友鄧工最近發表的一篇文章,裏面圖文並茂的説明了這種騷操作,文章鏈接如下,點擊即可跳轉: 【遞四方香港】"結構體嵌入共聯體"在協議解析中的神操作! 在用户層次,用户不需要關心協議是怎麼解析的,所以我們只需要給用户提供一個獲取數據的結構體和函數即可,然後通過頭文件dart_sensor.h提供給用户,而協議解析部分直接放在dart_sensor.c文件裏就可以了,如下: #ifndef __DART_SENSOR_H#define __DART_SENSOR_H#include #include /*1ppm = 1000ppb1ppb = 1000pptppm = mg/L(毫克/升)ppb = ug/L(微克/升)ppt = ng/L(納克/升)*/typedef struct{ /*氣體濃度*/ float gas_density ; //ppm /*滿量程*/ float full_range ;  }Dart_Sensor ;Dart_Sensor Get_Dart_Sensor_Density(uint8_t *Data);#endif //__DART_SENSOR_H 獲取濃度Get_Dart_Sensor_Density函數的實現: 我看過的大多數濃度單位標識都是ppm,也就是xxx/mg/L的這種表示方法,所以這個接口就設計成下面這樣。 /* 獲取氣體濃度 Data:  傳感器數據 return: xxx ppm*/Dart_Sensor Get_Dart_Sensor_Density(uint8_t *Data){  Dart_Sensor sensor ;  Dart_Sensor_Procol_TypeDef dart_sensor ;  dart_sensor = Dart_Sensor_Data_Parse(Data);  /*計算濃度,單位為ppm*/  sensor.gas_density = ((dart_sensor.gas_density_high 

    時間:2020-11-25 關鍵詞: 嵌入式 甲醛檢測儀

  • 上週我面了個三年Javaer,這幾個問題都沒答出來

    身為  Java Web 開發我發現很多人一些 Web 基礎問題都答不上來。 上週我面試了一個三年經驗的小夥子,一開始我問他 HTTP/1、HTTP/2相關的他到是能答點東西出來。 後來我問他:你知道 HTTP 的本質是什麼嗎? 他支支吾吾答不出來。 我接着問那你知道什麼是 HTTP 和 RPC 的關係嗎? 為什麼要有 RPC? 他眼睛盯着桌上的水,額了半天。 最後我跟他説回家等通知吧(當然還有很多都答不上來哈,多方位我都問了)。 面完試之後我回去問了同事相同的問題,我發現答的也不夠好,有些地方有點混淆。 所以今兒我就整理一波來説説這類問題,相信看完文章之後你會有進一步的認識。 HTTP 的本質 首先你要明確 HTTP 是一個協議,是一個超文本傳輸協議。 它基於 TCP/IP 來傳輸文本、圖片、視頻、音頻等。 重點來了。 HTTP 不提供數據包的傳輸功能,也就是數據包從瀏覽器到服務端再來回的傳輸和它沒關係。 這是 TCP/IP 乾的。 那 HTTP 有啥用?我們來分析一波。 我們上網要麼就是獲取一些信息來看,要麼就是修改一些信息。 比如你用瀏覽器刷微博就是獲取信息,發微博就是修改信息。 所以説瀏覽器需要告知服務器它需要什麼,這次的請求是要獲取哪些信息?發怎麼樣的微博。 這就涉及到瀏覽器和服務器之間的通信交互。 而交互就需要一種格式。 像你我之間的談話就用中文,你要突然換成俄語我聽不懂那不就 GG 了。 所以説 HTTP 它規定了一種格式,一種通信格式,大家都用這個格式來交談。 這樣不論你是什麼服務器、什麼瀏覽器都能順利的交流,減少交互的成本。 就像全世界如果都講中文,那我們不就不需要學英文了,那不就較少交互的成本了。 不像現在我們還得學英文,不然就看不懂文檔等等。 萬一之後俄語又起來了,咱還得對接俄文,這交互成本是不是就上來了。 而網絡世界還好,咱們現在的 Web 交互基本上就是 HTTP 了。 其實 HTTP 協議的格式很像我們信封,有個固定的格式。 左上角寫郵編,右上角貼郵票,然後地址姓名啥的依次來。 因為計算機是很死板的,不像我們人一樣有一種立體掃描感,所以要規定先寫頭、再寫尾。 你要是先寫尾,再寫頭計算機就認不出來了。 所以 HTTP 就規定了請求先搞請求行、再搞請求報頭、再搞請求體。 響應就狀態行、響應報頭、響應體。 所以 HTTP 的本質是什麼? 就是客户端和服務端約定好的一種通信格式。 對 HTTP 想有多的認識可以看我之前的文章 從 1950 年開始説起,帶你看 HTTP 的演進之路 HTTP 和 RPC 的關係 HTTP 和 RPC 其實是兩個維度的東西, HTTP 指的是通信協議。 而 RPC 則是遠程調用,其對應的是本地調用。 RPC 的通信可以用 HTTP 協議,也可以自定義協議,是不做約束的。 像之前的單體時代,我們的 service 調用就是自己實現的方法,是本地進程內的調用。     public User getUserById(Long id) {       return userDao.getUserById(id); // 這叫本地調用    } 現在都是微服務了,根據業務模塊做了不同的拆分,像用户的服務不用我這個小組負責,我這小組只要寫訂單服務就行了。 但是我們服務需要用到用户的信息,於是我們需要調用用户小組的服務,於是代碼變成了以下這種     public User getUserById(Long id) {       return userConsumer.getUserById(id); // 這是遠程調用,邏輯是用户小組的服務實現的。    } 可能還有些小夥伴不太清楚,再來看個圖。 把之前的用户實現拆分出來弄了一個用户服務,訂單相關的也拆成了訂單服務,都單獨部署。 這樣訂單相關的服務要獲取用户的信息就需要遠程調用了。 可以看到 RPC 就是通過網絡進行遠程調用,訂單服務其實就是客户端,而用户服務是服務端。 這又涉及到交互了,所以也需要約定一個格式,至於要不要用 HTTP 這個格式,就是大家自己看着辦。 至此相信你對 HTTP 是啥也清楚了。 RPC 和 HTTP 的之間的關係也清楚了。 下次再也不怕被面試官問這個了。 那為什麼要有 RPC? 可能你常聽到什麼什麼之間是 RPC 調用的,那你有沒有想過為什麼要 RPC, 我們直接 WebClient HTTP 調用不行麼? 其實 RPC 調用是因為服務的拆分,或者本身公司內部的多個服務之間的通信。 服務的拆分獨立部署,那服務間的調用就必然需要網絡通信,用 WebClient 調用當然可行,但是比較麻煩。 我們想即使服務被拆分了但是使用起來還是和之前本地調用一樣方便。 所以就出現了 RPC 框架,來屏蔽這些底層調用細節,使得我們編碼上還是和之前本地調用相差不多。 並且 HTTP 協議比較的冗餘,RPC 都是內部調用所以不需要太考慮通用性,只要公司內部保持格式統一即可。 所以可以做各種定製化的協議來使得通信更高效。 比如規定 yes 代表 yes的練級攻略,你看是不是更高效了,少傳輸的 5 個字。 就像特殊行動的暗號,高效簡潔! 所以公司內部服務的調用一般都用 RPC,而 HTTP 的優勢在於通用,大家都認可這個協議。 所以三方平台提供的接口都是通過 HTTP 協議調用的。 所以現在知道為什麼我們調用第三方都是 HTTP ,公司內部用 RPC 了吧? 對了。 上面這段話看起來彷彿 HTTP 和 RPC 是對等關係,不過相信大家看了之前的解析心裏應該都有數了。 最後 最近幾次面試下來我發現挺多同學基礎還是挺薄弱的。 地基要牢啊,八股文得背沒錯,但是這種基本概念性的東西還是有必要清晰。 看起來好像對平時的編碼沒什麼用,但是這可以認為是一個“世界觀”。 這對於一些事物的判斷和認知有很重要的意義。 你站的高才能看的遠。 對了,理解了 HTTP 的本質相信你對 RESTful 風格也應該會有更深一層的理解。 HTTP 它是協議,不是運輸通道。 特別推薦一個分享架構+算法的優質內容,還沒關注的小夥伴,可以長按關注一下: 長按訂閲更多精彩▼如有收穫,點個在看,誠摯感謝 免責聲明:本文內容由21ic獲得授權後發佈,版權歸原作者所有,本平台僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平台立場,如有問題,請聯繫我們,謝謝!

    時間:2020-11-25 關鍵詞: 嵌入式 java

  • 15000字的SQL語句大全

    鏈接:cnblogs.com/liuqifeng/p/9148831.html 一、基礎 1、説明:創建數據庫 CREATE DATABASE database-name 2、説明:刪除數據庫 drop database dbname 3、説明:備份sql server --- 創建 備份數據的 deviceUSE masterEXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'--- 開始 備份BACKUP DATABASE pubs TO testBack  4、説明:創建新表 create table tabname(col1 type1 [not null] [primary key],col2 type2 [not null],..) 根據已有的表創建新表:  A:create table tab_new like tab_old (使用舊錶創建新表)B:create table tab_new as select col1,col2… from tab_old definition only 5、説明:刪除新表 drop table tabname  6、説明:增加一個列 Alter table tabname add column col type 注:列增加後將不能刪除。DB2中列加上後數據類型也不能改變,唯一能改變的是增加varchar類型的長度。 7、説明:添加主鍵:Alter table tabname add primary key(col) 説明:刪除主鍵:Alter table tabname drop primary key(col)  8、説明:創建索引:create [unique] index idxname on tabname(col….)  刪除索引:drop index idxname 注:索引是不可更改的,想更改必須刪除重新建。 9、説明:創建視圖:create view viewname as select statement 刪除視圖:drop view viewname 10、説明:幾個簡單的基本的sql語句 選擇:select * from table1 where 範圍插入:insert into table1(field1,field2) values(value1,value2)刪除:delete from table1 where 範圍更新:update table1 set field1=value1 where 範圍查找:select * from table1 where field1 like ’%value1%’ ---like的語法很精妙,查資料!排序:select * from table1 order by field1,field2 [desc]總數:select count as totalcount from table1求和:select sum(field1) as sumvalue from table1平均:select avg(field1) as avgvalue from table1最大:select max(field1) as maxvalue from table1最小:select min(field1) as minvalue from table1 11、説明:幾個高級查詢運算詞 A:UNION 運算符  UNION 運算符通過組合其他兩個結果表(例如 TABLE1 和 TABLE2)並消去表中任何重複行而派生出一個結果表。當 ALL 隨 UNION 一起使用時(即 UNION ALL),不消除重複行。兩種情況下,派生表的每一行不是來自 TABLE1 就是來自 TABLE2。  B:EXCEPT 運算符  EXCEPT運算符通過包括所有在 TABLE1 中但不在 TABLE2 中的行並消除所有重複行而派生出一個結果表。當 ALL 隨 EXCEPT 一起使用時 (EXCEPT ALL),不消除重複行。 C:INTERSECT 運算符 INTERSECT運算符通過只包括 TABLE1 和 TABLE2 中都有的行並消除所有重複行而派生出一個結果表。當 ALL隨 INTERSECT 一起使用時 (INTERSECT ALL),不消除重複行。 注:使用運算詞的幾個查詢結果行必須是一致的。  12、説明:使用外連接  A、left (outer) join:  左外連接(左連接):結果集幾包括連接表的匹配行,也包括左連接表的所有行。  SQL: select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c B:right (outer) join:  右外連接(右連接):結果集既包括連接表的匹配連接行,也包括右連接表的所有行。  C:full/cross (outer) join:  全外連接:不僅包括符號連接表的匹配行,還包括兩個連接表中的所有記錄。 12、分組:Group by: 一張表,一旦分組 完成後,查詢後只能得到組相關的信息。 組相關的信息:(統計信息) count,sum,max,min,avg  分組的標準) 在SQLServer中分組時:不能以text,ntext,image類型的字段作為分組依據 在selecte統計函數中的字段,不能和普通的字段放在一起;   13、對數據庫進行操作: 分離數據庫: sp_detach_db; 附加數據庫:sp_attach_db 後接表明,附加需要完整的路徑名 14.如何修改數據庫的名稱: sp_renamedb 'old_name', 'new_name' 對了,我把 MySQL 相關的文章整理成了 PDF,有需要的關注微信公眾號 Java後端,回覆 666 下載。   二、提升   1、説明:複製表(只複製結構,源表名:a 新表名:b) (Access可用) 法一:select * into b from a where 11(僅用於SQlServer) 法二:select top 0 * into b from a 2、説明:拷貝表(拷貝數據,源表名:a 目標表名:b) (Access可用) insert into b(a, b, c) select d,e,f from b;   3、説明:跨數據庫之間表的拷貝(具體數據使用絕對路徑) (Access可用) insert into b(a, b, c) select d,e,f from b in ‘具體數據庫’ where 條件例子:..from b in '"&Server.MapPath(".")&"\data.mdb" &"' where..   4、説明:子查詢(表名1:a 表名2:b) select a,b,c from a where a IN (select d from b ) 或者: select a,b,c from a where a IN (1,2,3)   5、説明:顯示文章、提交人和最後回覆時間 select a.title,a.username,b.adddate from table a,(select max(adddate) adddate from table where table.title=a.title) b   6、説明:外連接查詢(表名1:a 表名2:b) select a.a, a.b, a.c, b.c, b.d, b.f from a LEFT OUT JOIN b ON a.a = b.c   7、説明:在線視圖查詢(表名1:a )select * from (SELECT a,b,c FROM a) T where t.a > 1;   8、説明:between的用法,between限制查詢數據範圍時包括了邊界值,not between不包括 select * from table1 where time between time1 and time2select a,b,c, from table1 where a not between 數值1 and 數值2   9、説明:in 的使用方法 select * from table1 where a [not] in (‘值1’,’值2’,’值4’,’值6’)   10、説明:兩張關聯表,刪除主表中已經在副表中沒有的信息  delete from table1 where not exists ( select * from table2 where table1.field1=table2.field1 )   11、説明:四表聯查問題: select * from a left inner join b on a.a=b.b right inner join c on a.a=c.c inner join d on a.a=d.d where .....   12、説明:日程安排提前五分鐘提醒  SQL: select * from 日程安排 where datediff('minute',f開始時間,getdate())>5   13、説明:一條sql 語句搞定數據庫分頁 select top 10 b.* from (select top 20 主鍵字段,排序字段 from 表名 order by 排序字段 desc) a,表名 b where b.主鍵字段 = a.主鍵字段 order by a.排序字段 具體實現:關於數據庫分頁: declare @start int,@end int  @sql  nvarchar(600)  set @sql=’select top’+str(@end-@start+1)+’+from T where rid not in(select top’+str(@str-1)+’Rid from T where Rid>-1)’  exec sp_executesql @sql   注意:在top後不能直接跟一個變量,所以在實際應用中只有這樣的進行特殊的處理。Rid為一個標識列,如果top後還有具體的字段,這樣做是非常有好處的。因為這樣可以避免 top的字段如果是邏輯索引的,查詢的結果後實際表中的不一致(邏輯索引中的數據有可能和數據表中的不一致,而查詢時如果處在索引則首先查詢索引)   14、説明:前10條記錄 select top 10 * form table1 where 範圍   15、説明:選擇在每一組b值相同的數據中對應的a最大的記錄的所有信息(類似這樣的用法可以用於論壇每月排行榜,每月熱銷產品分析,按科目成績排名,等等.) select a,b,c from tablename ta where a=(select max(a) from tablename tb where tb.b=ta.b)   16、説明:包括所有在 TableA中但不在 TableB和TableC中的行並消除所有重複行而派生出一個結果表 (select a from tableA ) except (select a from tableB) except (select a from tableC)   17、説明:隨機取出10條數據 select top 10 * from tablename order by newid()   18、説明:隨機選擇記錄 select newid()   19、説明:刪除重複記錄 1) delete from tablename where id not in (select max(id) from tablename group by col1,col2,...) 2) select distinct * into temp from tablename  delete from tablename  insert into tablename select * from temp 評價:這種操作牽連大量的數據的移動,這種做法不適合大容量但數據操作3),例如:在一個外部表中導入數據,由於某些原因第一次只導入了一部分,但很難判斷具體位置,這樣只有在下一次全部導入,這樣也就產生好多重複的字段,怎樣刪除重複字段   alter table tablename--添加一個自增列add  column_b int identity(1,1) delete from tablename where column_b not in(select max(column_b) from tablename group by column1,column2,...)alter table tablename drop column column_b   20、説明:列出數據庫裏所有的表名 select name from sysobjects where type='U' // U代表用户   21、説明:列出表裏的所有的列名 select name from syscolumns where id=object_id('TableName')   22、説明:列示type、vender、pcs字段,以type字段排列,case可以方便地實現多重選擇,類似select 中的case。 select type,sum(case vender when 'A' then pcs else 0 end),sum(case vender when 'C' then pcs else 0 end),sum(case vender when 'B' then pcs else 0 end) FROM tablename group by type 顯示結果:type vender pcs電腦 A 1電腦 A 1光盤 B 2光盤 A 2手機 B 3手機 C 3   23、説明:初始化表table1   TRUNCATE TABLE table1   24、説明:選擇從10到15的記錄 select top 5 * from (select top 15 * from table order by id asc) table_別名 order by id desc   三、技巧   1、1=1,1=2的使用,在SQL語句組合時用的較多   “where 1=1” 是表示選擇全部    “where 1=2”全部不選,如: if @strWhere !='' beginset @strSQL = 'select count(*) as Total from [' + @tblName + '] where ' + @strWhereendelse beginset @strSQL = 'select count(*) as Total from [' + @tblName + ']' end   我們可以直接寫成   set @strSQL = 'select count(*) as Total from [' + @tblName + '] where 1=1 安定 '+ @strWhere  2、收縮數據庫 --重建索引DBCC REINDEXDBCC INDEXDEFRAG--收縮數據和日誌DBCC SHRINKDBDBCC SHRINKFILE   3、壓縮數據庫 dbcc shrinkdatabase(dbname)   4、轉移數據庫給新用户以已存在用户權限 exec sp_change_users_login 'update_one','newname','oldname'go   5、檢查備份集RESTORE VERIFYONLY from disk='E:\dvbbs.bak'   6、修復數據庫 ALTER DATABASE [dvbbs] SET SINGLE_USERGODBCC CHECKDB('dvbbs',repair_allow_data_loss) WITH TABLOCKGOALTER DATABASE [dvbbs] SET MULTI_USERGO   7、日誌清除 SET NOCOUNT ONDECLARE @LogicalFileName sysname, @MaxMinutes INT, @NewSize INT   USE tablename -- 要操作的數據庫名SELECT  @LogicalFileName = 'tablename_log', -- 日誌文件名@MaxMinutes = 10, -- Limit on time allowed to wrap log. @NewSize = 1  -- 你想設定的日誌文件的大小(M)   Setup / initializeDECLARE @OriginalSize intSELECT @OriginalSize = size  FROM sysfiles WHERE name = @LogicalFileNameSELECT 'Original Size of ' + db_name() + ' LOG is ' +  CONVERT(VARCHAR(30),@OriginalSize) + ' 8K pages or ' +  CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) + 'MB' FROM sysfiles WHERE name = @LogicalFileNameCREATE TABLE DummyTrans (DummyColumn char (8000) not null)   DECLARE @Counter    INT, @StartTime DATETIME, @TruncLog   VARCHAR(255)SELECT @StartTime = GETDATE(), @TruncLog = 'BACKUP LOG ' + db_name() + ' WITH TRUNCATE_ONLY'   DBCC SHRINKFILE (@LogicalFileName, @NewSize)EXEC (@TruncLog)-- Wrap the log if necessary.WHILE @MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE()) -- time has not expired AND @OriginalSize = (SELECT size FROM sysfiles WHERE name = @LogicalFileName)   AND (@OriginalSize * 8 /1024) > @NewSize   BEGIN -- Outer loop.SELECT @Counter = 0 WHILE   ((@Counter < @OriginalSize / 16) AND (@Counter < 50000)) BEGIN -- update INSERT DummyTrans VALUES ('Fill Log') DELETE DummyTrans SELECT @Counter = @Counter + 1 END EXEC (@TruncLog)   ENDSELECT 'Final Size of ' + db_name() + ' LOG is ' + CONVERT(VARCHAR(30),size) + ' 8K pages or ' +  CONVERT(VARCHAR(30),(size*8/1024)) + 'MB' FROM sysfiles  WHERE name = @LogicalFileNameDROP TABLE DummyTransSET NOCOUNT OFF   8、説明:更改某個表 exec sp_changeobjectowner 'tablename','dbo'   9、存儲更改全部表   CREATE PROCEDURE dbo.User_ChangeObjectOwnerBatch@OldOwner as NVARCHAR(128),@NewOwner as NVARCHAR(128)AS   DECLARE @Name    as NVARCHAR(128)DECLARE @Owner   as NVARCHAR(128)DECLARE @OwnerName   as NVARCHAR(128)   DECLARE curObject CURSOR FOR select 'Name'    = name,   'Owner'    = user_name(uid)from sysobjectswhere user_name(uid)=@OldOwnerorder by name   OPEN   curObjectFETCH NEXT FROM curObject INTO @Name, @OwnerWHILE(@@FETCH_STATUS=0)BEGIN     if @Owner=@OldOwner begin   set @OwnerName = @OldOwner + '.' + rtrim(@Name)   exec sp_changeobjectowner @OwnerName, @NewOwnerend-- select @name,@NewOwner,@OldOwner   FETCH NEXT FROM curObject INTO @Name, @OwnerEND   close curObjectdeallocate curObjectGO   10、SQL SERVER中直接循環寫入數據 declare @i intset @i=1while @i=0   10:獲取某一個表的所有字段 select name from syscolumns where id=object_id('表名')   select name from syscolumns where id in (select id from sysobjects where type = 'u' and name = '表名')   兩種方式的效果相同   11:查看與某一個表相關的視圖、存儲過程、函數 select a.* from sysobjects a, syscomments b where a.id = b.id and b.text like '%表名%'   12:查看當前數據庫中所有存儲過程 select name as 存儲過程名稱 from sysobjects where xtype='P'   13:查詢用户創建的所有數據庫 select * from master..sysdatabases D where sid not in(select sid from master..syslogins where name='sa')或者select dbid, name AS DB_NAME from master..sysdatabases where sid 0x01   14:查詢某一個表的字段和數據類型 select column_name,data_type from information_schema.columnswhere table_name = '表名'   15:不同服務器數據庫之間的數據操作 --創建鏈接服務器exec sp_addlinkedserver 'ITSV ', ' ', 'SQLOLEDB ', '遠程服務器名或ip地址 'exec sp_addlinkedsrvlogin 'ITSV ', 'false ',null, '用户名 ', '密碼 '--查詢示例select * from ITSV.數據庫名.dbo.表名--導入示例select * into 表 from ITSV.數據庫名.dbo.表名--以後不再使用時刪除鏈接服務器exec sp_dropserver 'ITSV ', 'droplogins '--連接遠程/局域網數據(openrowset/openquery/opendatasource)--1、openrowset --查詢示例select * from openrowset( 'SQLOLEDB ', 'sql服務器名 '; '用户名 '; '密碼 ',數據庫名.dbo.表名)--生成本地表select * into 表 from openrowset( 'SQLOLEDB ', 'sql服務器名 '; '用户名 '; '密碼 ',數據庫名.dbo.表名)--把本地表導入遠程表insert openrowset( 'SQLOLEDB ', 'sql服務器名 '; '用户名 '; '密碼 ',數據庫名.dbo.表名)select *from 本地表--更新本地表update bset b.列A=a.列A from openrowset( 'SQLOLEDB ', 'sql服務器名 '; '用户名 '; '密碼 ',數據庫名.dbo.表名)as a inner join 本地表 bon a.column1=b.column1 --openquery用法需要創建一個連接--首先創建一個連接創建鏈接服務器 exec sp_addlinkedserver 'ITSV ', ' ', 'SQLOLEDB ', '遠程服務器名或ip地址 '--查詢select * FROM openquery(ITSV, 'SELECT * FROM 數據庫.dbo.表名 ')--把本地表導入遠程表insert openquery(ITSV, 'SELECT * FROM 數據庫.dbo.表名 ')select * from 本地表--更新本地表update b set b.列B=a.列B FROM openquery(ITSV, 'SELECT * FROM 數據庫.dbo.表名 ') as a inner join 本地表 b on a.列A=b.列A --3、opendatasource/openrowsetSELECT   * FROM   opendatasource( 'SQLOLEDB ', 'Data Source=ip/ServerName;User ID=登陸名;Password=密碼 ' ).test.dbo.roy_ta--把本地表導入遠程表insert opendatasource( 'SQLOLEDB ', 'Data Source=ip/ServerName;User ID=登陸名;Password=密碼 ').數據庫.dbo.表名select * from 本地表   SQL Server基本函數   SQL Server基本函數   1.字符串函數 長度與分析用 1,datalength(Char_expr) 返回字符串包含字符數,但不包含後面的空格 2,substring(expression,start,length) 取子串,字符串的下標是從“1”,start為起始位置,length為字符串長度,實際應用中以len(expression)取得其長度 3,right(char_expr,int_expr) 返回字符串右邊第int_expr個字符,還用left於之相反 4,isnull( check_expression , replacement_value )如果check_expression為空,則返回replacement_value的值,不為空,就返回check_expression字符操作類 5,Sp_addtype自定義數據類型例如:EXEC sp_addtype birthday, datetime, 'NULL' 6,set nocount {on|off} 使返回的結果中不包含有關受 Transact-SQL 語句影響的行數的信息。如果存儲過程中包含的一些語句並不返回許多實際的數據,則該設置由於大量減少了網絡流量,因此可顯著提高性能。SET NOCOUNT 設置是在執行或運行時設置,而不是在分析時設置。 SET NOCOUNT 為 ON 時,不返回計數(表示受 Transact-SQL 語句影響的行數)。SET NOCOUNT 為 OFF 時,返回計數 常識   在SQL查詢中:from後最多可以跟多少張表或視圖:256 在SQL語句中出現 Order by,查詢時,先排序,後取 在SQL中,一個字段的最大容量是8000,而對於nvarchar(4000),由於nvarchar是Unicode碼。          SQLServer2000同步複製技術實現步驟 一、 預備工作 1.發佈服務器,訂閲服務器都創建一個同名的windows用户,並設置相同的密碼,做為發佈快照文件夾的有效訪問用户 --管理工具 --計算機管理 --用户和組 --右鍵用户 --新建用户 --建立一個隸屬於administrator組的登陸windows的用户(SynUser) 2.在發佈服務器上,新建一個共享目錄,做為發佈的快照文件的存放目錄,操作: 我的電腦--D:\ 新建一個目錄,名為: PUB --右鍵這個新建的目錄 --屬性--共享 --選擇"共享該文件夾" --通過"權限"按紐來設置具體的用户權限,保證第一步中創建的用户(SynUser) 具有對該文件夾的所有權限 --確定 3.設置SQL代理(SQLSERVERAGENT)服務的啓動用户(發佈/訂閲服務器均做此設置) 開始--程序--管理工具--服務 --右鍵SQLSERVERAGENT --屬性--登陸--選擇"此賬户" --輸入或者選擇第一步中創建的windows登錄用户名(SynUser) --"密碼"中輸入該用户的密碼 4.設置SQL Server身份驗證模式,解決連接時的權限問題(發佈/訂閲服務器均做此設置) 企業管理器 --右鍵SQL實例--屬性 --安全性--身份驗證 --選擇"SQL Server 和 Windows" --確定 5.在發佈服務器和訂閲服務器上互相註冊 企業管理器 --右鍵SQL Server組 --新建SQL Server註冊... --下一步--可用的服務器中,輸入你要註冊的遠程服務器名 --添加 --下一步--連接使用,選擇第二個"SQL Server身份驗證" --下一步--輸入用户名和密碼(SynUser) --下一步--選擇SQL Server組,也可以創建一個新組 --下一步--完成 6.對於只能用IP,不能用計算機名的,為其註冊服務器別名(此步在實施中沒用到) (在連接端配置,比如,在訂閲服務器上配置的話,服務器名稱中輸入的是發佈服務器的IP) 開始--程序--Microsoft SQL Server--客户端網絡實用工具 --別名--添加 --網絡庫選擇"tcp/ip"--服務器別名輸入SQL服務器名 --連接參數--服務器名稱中輸入SQL服務器ip地址 --如果你修改了SQL的端口,取消選擇"動態決定端口",並輸入對應的端口號 二、 正式配置 1、配置發佈服務器 打開企業管理器,在發佈服務器(B、C、D)上執行以下步驟: (1) 從[工具]下拉菜單的[複製]子菜單中選擇[配置發佈、訂閲服務器和分發]出現配置發佈和分發嚮導 (2) [下一步] 選擇分發服務器 可以選擇把發佈服務器自己作為分發服務器或者其他sql的服務器(選擇自己) (3) [下一步] 設置快照文件夾 採用默認\\servername\Pub (4) [下一步] 自定義配置 可以選擇:是,讓我設置分發數據庫屬性啓用發佈服務器或設置發佈設置 否,使用下列默認設置(推薦) (5) [下一步] 設置分發數據庫名稱和位置 採用默認值 (6) [下一步] 啓用發佈服務器 選擇作為發佈的服務器 (7) [下一步] 選擇需要發佈的數據庫和發佈類型 (8) [下一步] 選擇註冊訂閲服務器 (9) [下一步] 完成配置 2、創建出版物 發佈服務器B、C、D上 (1)從[工具]菜單的[複製]子菜單中選擇[創建和管理髮布]命令 (2)選擇要創建出版物的數據庫,然後單擊[創建發佈] (3)在[創建發佈嚮導]的提示對話框中單擊[下一步]系統就會彈出一個對話框。對話框上的內容是複製的三個類型。我們現在選第一個也就是默認的快照發布(其他兩個大家可以去看看幫助) (4)單擊[下一步]系統要求指定可以訂閲該發佈的數據庫服務器類型, SQLSERVER允許在不同的數據庫如 orACLE或ACCESS之間進行數據複製。 但是在這裏我們選擇運行"SQL SERVER 2000"的數據庫服務器 (5)單擊[下一步]系統就彈出一個定義文章的對話框也就是選擇要出版的表 注意: 如果前面選擇了事務發佈 則再這一步中只能選擇帶有主鍵的表 (6)選擇發佈名稱和描述 (7)自定義發佈屬性 嚮導提供的選擇: 是 我將自定義數據篩選,啓用匿名訂閲和或其他自定義屬性 否 根據指定方式創建發佈 (建議採用自定義的方式) (8)[下一步] 選擇篩選發佈的方式 (9)[下一步] 可以選擇是否允許匿名訂閲 1)如果選擇署名訂閲,則需要在發佈服務器上添加訂閲服務器 方法: [工具]->[複製]->[配置發佈、訂閲服務器和分發的屬性]->[訂閲服務器] 中添加 否則在訂閲服務器上請求訂閲時會出現的提示:改發佈不允許匿名訂閲 如果仍然需要匿名訂閲則用以下解決辦法 [企業管理器]->[複製]->[發佈內容]->[屬性]->[訂閲選項] 選擇允許匿名請求訂閲 2)如果選擇匿名訂閲,則配置訂閲服務器時不會出現以上提示 (10)[下一步] 設置快照 代理程序調度 (11)[下一步] 完成配置 當完成出版物的創建後創建出版物的數據庫也就變成了一個共享數據庫 有數據 srv1.庫名..author有字段:id,name,phone, srv2.庫名..author有字段:id,name,telphone,adress   要求: srv1.庫名..author增加記錄則srv1.庫名..author記錄增加 srv1.庫名..author的phone字段更新,則srv1.庫名..author對應字段telphone更新 --*/   --大致的處理步驟 --1.在 srv1 上創建連接服務器,以便在 srv1 中操作 srv2,實現同步 exec sp_addlinkedserver 'srv2','','SQLOLEDB','srv2的sql實例名或ip' exec sp_addlinkedsrvlogin 'srv2','false',null,'用户名','密碼' go --2.在 srv1 和 srv2 這兩台電腦中,啓動 msdtc(分佈式事務處理服務),並且設置為自動啓動 。我的電腦--控制面板--管理工具--服務--右鍵 Distributed Transaction Coordinator--屬性--啓動--並將啓動類型設置為自動啓動 go    --然後創建一個作業定時調用上面的同步處理存儲過程就行了   企業管理器 --管理 --SQL Server代理 --右鍵作業 --新建作業 --"常規"項中輸入作業名稱 --"步驟"項 --新建 --"步驟名"中輸入步驟名 --"類型"中選擇"Transact-SQL 腳本(TSQL)" --"數據庫"選擇執行命令的數據庫 --"命令"中輸入要執行的語句: exec p_process --確定 --"調度"項 --新建調度 --"名稱"中輸入調度名稱 --"調度類型"中選擇你的作業執行安排 --如果選擇"反覆出現" --點"更改"來設置你的時間安排   然後將SQL Agent服務啓動,並設置為自動啓動,否則你的作業不會被執行   設置方法: 我的電腦--控制面板--管理工具--服務--右鍵 SQLSERVERAGENT--屬性--啓動類型--選擇"自動啓動"--確定.  --3.實現同步處理的方法2,定時同步 -- 在srv1中創建如下的同步處理存儲過程 create proc p_process as--更新修改過的數據update b set name=i.name,telphone=i.telphonefrom srv2.庫名.dbo.author b,author iwhere b.id=i.id and(b.name i.name or b.telphone i.telphone)--插入新增的數據insert srv2.庫名.dbo.author(id,name,telphone)select id,name,telphone from author iwhere not exists(select * from srv2.庫名.dbo.author where id=i.id)--刪除已經刪除的數據(如果需要的話)delete bfrom srv2.庫名.dbo.author bwhere not exists(select * from author where id=b.id)go -END- 特別推薦一個分享架構+算法的優質內容,還沒關注的小夥伴,可以長按關注一下: 長按訂閲更多精彩▼如有收穫,點個在看,誠摯感謝 免責聲明:本文內容由21ic獲得授權後發佈,版權歸原作者所有,本平台僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平台立場,如有問題,請聯繫我們,謝謝!

    時間:2020-11-25 關鍵詞: 嵌入式 計算機

  • 36張圖梳理Intellij IDEA常用設置

    作者:請叫我小思 來源:blog.csdn.net/zeal9s/article/details/83544074 顯示工具條 (1)效果圖 (2)設置方法 標註1:View–>Toolbar 標註2:View–>Tool Buttons 設置鼠標懸浮提示 (1)效果圖 (2)設置方法File–>settings–>Editor–>General–>勾選Show quick documentation… 顯示方法分隔符 (1)效果圖 (2)設置方法 File–>settings–>Editor–>Appearance–>勾選 PS:公眾號發表過近百篇 IDEA 相關的文章,關注微信公眾號 Java後端,後台回覆 666 下載這本 Java技術棧手冊。 忽略大小寫提示 (1)效果圖備註:idea的默認設置是嚴格區分大小寫提示的,例如輸入string不會提示String,不方便編碼 (2)設置方法File–>settings–>Editor–>General -->Code Completion --> 主題設置 (1)效果圖備註:有黑白兩種風格 (2)設置方法File–>settings–>Appearance & Behavior–>Appearance–> 護眼主題設置 (1)效果圖 (2)設置方法如果想將編輯頁面變換主題,可以去設置裏面調節背景顏色 如果需要很好看的編碼風格,這裏有很多主題 //color-themes.com/?view=index&layout=Generic&order=popular&search=&page=1 點擊相應主題,往下滑點擊按鈕 下載下來有很多Jar包 在上面的位置選擇導入jar包,然後重啓idea生效,重啓之後去設置 # 自動導入包 (1)效果圖備註:默認情況是需要手動導入包的,比如我們需要導入Map類,那麼需要手動導入,如果不需要使用了,刪除了Map的實例,導入的包也需要手動刪除,設置了這個功能這個就不需要手動了,自動幫你實現自動導入包和去包,不方便截圖,效果請親測~ (2)設置方法File–>settings–>Editor–>general–>Auto Import–> 單行顯示多個Tabs (1)效果圖默認是顯示單排的Tabs: 單行顯示多個Tabs: (2)設置方法File–>settings–>Editor–>General -->Editor Tabs–>去掉√ # 設置字體 (1)效果圖備註:默認安裝啓動Idea字體很小,看着不習慣,需要調整字體大小與字體(有需要可以調整) (2)設置方法File–>settings–>Editor–>Font–> 配置類文檔註釋信息和方法註釋模版 (1)效果圖備註:團隊開發時方便追究責任與管理查看 (2)設置方法 //blog.csdn.net/zeal9s/article/details/83514565 水平或者垂直顯示代碼 (1)效果圖備註:Eclipse如果需要對比代碼,只需要拖動Tabs即可,但是idea要設置 (2)設置方法鼠標右擊Tabs 更換快捷鍵 (1)效果圖備註:從Eclipse移植到idea編碼,好多快捷鍵不一致,導致編寫效率降低,現在我們來更換一下快捷鍵 (2)設置方法 方法一:File–>Setting–> 例如設置成Eclipse的,設置好了之後可以ctrl+d刪除單行代碼(idea是ctrl+y) 方法二:設置模板 File–>Setting–> 方法三: 以ctrl+o重寫方法為例 註釋去掉斜體 (1)效果圖 (2)設置方法 File–>settings–>Editor–> 代碼檢測警告提示等級設置 強烈建議,不要給關掉,不要嫌棄麻煩,他的提示都是對你好,幫助你提高你的代碼質量,很有幫助的。 項目目錄相關–摺疊空包 窗口復位 這個就是當你把窗口忽然間搞得亂七八糟的時候,還可以挽回,就是直接restore一下,就好啦。 查看本地代碼歷史 快速補全分號 CTRL + SHIFT + ENTER 在當前行任何地方可以快速在末尾生成分號 快速找到Controller方法 如果你的項目裏有非常多的controller,裏面有非常多的http或者resful方法。如何快速找到這些方法呢?這個時候,ctrl+alt+shift+n就可以派上用場了。 比如説,你依稀記得入賬單相關的接口,都有個bill的url路徑,那麼使用ctrl+alt+shift+n後,直接輸入/bill即可。 當你在成千上萬的Controller裏尋找方法時,這一招就可以大大提高效率。 大括號匹配 這個也非常有用,因為代碼太長,某個for循環,可能已經撐滿整個屏幕了。這個時候,找到某個大括號對應的另外一邊就很費勁。你可以將光標定位在某個大括號一邊,然後使用ctrl+]或者ctrl+[來回定位即可。補充:以上的配置信息都保存在系統盤的 默認會有這兩個文件 config:在初始化安裝IntelliJ IDEA時有詢問你是否導入以存在的配置信息,這個config就是你的配置信息,方便更換電腦和換系統的時候重新安裝,前提是要保存好此文件夾。 system:此文件夾是IntelliJ IDEA發生什麼不可預知性的錯誤時,比如藍屏突然斷電導致項目不能啓動,可以嘗試刪除此文件,讓系統重新生成一個system的文件。 - END - 特別推薦一個分享架構+算法的優質內容,還沒關注的小夥伴,可以長按關注一下: 長按訂閲更多精彩▼如有收穫,點個在看,誠摯感謝 免責聲明:本文內容由21ic獲得授權後發佈,版權歸原作者所有,本平台僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平台立場,如有問題,請聯繫我們,謝謝!

    時間:2020-11-25 關鍵詞: 嵌入式 java

  • 中國35位“大國工匠”榜單出爐!西工大、西電合計佔半壁江山!清華僅1人!

    近日網上流傳的一份《大學校友之“大國工匠”》引來無數網友圍觀,熱議。有35位「大國之匠」上榜,均為國家頂級項目總設計師級別科學家,比如,遼寧艦總設計師朱英富、C919總設計師吳光輝、殲20總設計師楊偉。 令人意外的是,清華大學被譽為“中國最好工科院校”,卻只有1位校友上榜“大國之匠”。 從35位「大國之匠」名單來看,陝西省高校表現最為突出,上榜了18位科學家,佔據了這份榜單的半壁江山!其中,西北工業大學最強,上榜12位科學家;西安電子科技大學,上榜5位科學家;西安交通大學,上榜1位科學家! 不過也有網友表示這份名單上以軍工航天居多,西工大在這個方面上是全國頂尖級別的,自然如此啦。 在“華東五校”中,最亮眼的當屬中國科學技術大學,有5位校友上榜“大國之匠”! 此外工科名校哈爾濱工業大學、上海交通大學、同濟大學、東南大學,均有校友上榜。 南京航空航天大學,雖然只是“211工程”大學,卻有2位校友上榜“大國之匠”。 最令人意想不到的是南華大學,一個被很多人誤認為“野雞大學”,蹭東華大學熱點的大學,竟然也有1位校友登上“大國之匠”名單。 分析人士認為,西北工業大學、哈爾濱工業大學等都是我國老牌的軍工院校,但是其它高等院校還是應該向這些上榜院校學習。高校培養的人才,對於國家的發展非常重要,這些人才都是國家的棟樑,是我國實現偉大復興的中流砥柱。 -END- 來源 | EETOP | 整理文章為傳播相關技術,版權歸原作者所有 | | 如有侵權,請聯繫刪除 | 【遞四方香港】STM32如何配置外部中斷? 【遞四方香港】STM32單片機:獨立看門狗、窗口看門狗的配置 【遞四方香港】使用KeilMDK以及標準外設庫創建STM32工程的詳細過程 【遞四方香港】編碼器是什麼?STM32編碼器接口及應用編程 【遞四方香港】STM32學了很久,為什麼還是不會做項目? 免責聲明:本文內容由21ic獲得授權後發佈,版權歸原作者所有,本平台僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平台立場,如有問題,請聯繫我們,謝謝!

    時間:2020-11-25 關鍵詞: 電子技術 航天科技

  • NTC熱敏電阻測温原理,電路設計以及程序設計

    近日一位朋友在後台發消息説,剛畢業入職一家小家電公司,正參與設計電磁爐控制電路,其中需要用到測温元器件,想了解所用的温度傳感器有沒有正負極、測温原理等內容。以前正好做過這一塊內容,和大家學習一下。 電磁爐測温用的温度傳感器其實是一個負温度係數的熱敏電阻NTC,不僅如此,NTC在家電產品的測温中應用廣泛,例如熱水壺、咖啡機、消毒櫃等用的都是NTC測温。既然NTC是一顆電阻,那麼就不存在正負極的問題。 NTC熱敏電阻測温的工作原理 所謂熱敏電阻,就是指對温度比較敏感的電阻,隨着温度的變化NTC的電阻值也會隨之變化,環境温度和電阻值之間存在一定的關係曲線,通過測量阻值的變化情況就可以確定當前的温度值。這就是NTC測温的工作原理,其阻值和温度之間的關係曲線如下圖所示。 NTC測温電路 在低成本的測温應用中,NTC一般和一個精密的定值電阻串聯通過採集電阻兩端的電壓變化來確定環境温度。常用的測温電路如下圖所示。 如上圖的左側電路。NTC和定值電阻R串聯,當環境温度發生變化後,NTC的電阻值發生變化,導致NTC兩端的電壓發生變化,單片機通過採集NTC兩端的電壓就可以反推出當前的温度值。這是一種低成本常用的測温電路。 推薦杜洋老師《愛上單片機》手把手動手學習單片機: NTC測温程序設計 NTC的電阻值和温度是呈現一定的比例關係的,該比例關係和B值相關,各個廠家的Datasheet都會寫明該公式,公式如下: NTC阻值和温度公式:Rt = Rn *EXP(B*(1/T-1/Tn)) 對上面的公式解釋如下: 1.       Rt是熱敏電阻的當前阻值; 2.       R是熱敏電阻在Tn常温下的標稱阻值; 3.       B值是熱敏電阻的温度係數; 4.       EXP是e的n次方; 5.       這裏T和Tn指的是K度即開爾文温度,K度=273.15(絕對温度)+攝氏度; 6.       T為當前温度;Tn為常温25℃; 比如 B值為3950的10K阻值的NTC,10K就是25℃時的阻值,B值為3950。通過以上公示就可以確立阻值和温度的關係。 部分程序代碼如下: #define B 3950.0 //温度係數#define TN 298.15 //額定温度(絕對温度加常温:273.15+25)#define RN 10 // 額定阻值(絕對温度時的電阻值10k)#define BaseVol 5.04 //ADC基準電壓float Get_Tempture(u16 adc){ float RV,RT,Tmp; RV=BaseVol/1024.0*(float)adc;//ADC為10位ADC,求出NTC電壓:RV=ADCValu/1024*BaseVoltag RT=RV*10/(BaseVol-RV);//求出當前温度阻值 (BaseVoltage-RV)/R16=RV/RT;  Tmp=1/(1/TN+(log(RT/RN)/B))-273.15; //RT = RN exp*B(1/T-1/TN) return Tmp;} PT100測温原理 這裏專指電阻測温,除了NTC之外,還有PT100正温度係數的熱敏電阻、熱電偶等。PT100相比較於NTC,更為精準主要用在工業產品的測温中,一般通過惠斯通電橋來檢測電壓的變化進而反推出温度值。如下圖就是惠斯通電橋電路。 -END- 來源 | 玩轉嵌入式 作者 | 劉小舒 | 整理文章為傳播相關技術,版權歸原作者所有 | | 如有侵權,請聯繫刪除 | 【遞四方香港】STM32如何配置外部中斷? 【遞四方香港】STM32單片機:獨立看門狗、窗口看門狗的配置 【遞四方香港】使用KeilMDK以及標準外設庫創建STM32工程的詳細過程 【遞四方香港】編碼器是什麼?STM32編碼器接口及應用編程 【遞四方香港】STM32學了很久,為什麼還是不會做項目? 免責聲明:本文內容由21ic獲得授權後發佈,版權歸原作者所有,本平台僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平台立場,如有問題,請聯繫我們,謝謝!

    時間:2020-11-25 關鍵詞: 熱敏電阻 測温

首頁  上一頁  1 2 3 4 5 6 7 8 9 10 下一頁 尾頁
發佈文章