每個程式員都可以「懂」一點 Linux

来源:https://www.cnblogs.com/mfwtech/archive/2019/08/12/11338355.html
-Advertisement-
Play Games

提到 Linux,作為程式員來說一定都不陌生。但如果說到「懂」Linux,可能就沒有那麼多人有把握了。到底用 Linux 離懂 Linux 有多遠?如果決定學習 Linux,應該怎麼開始?要學到什麼程度?懂一點 Linux,對於程式員有什麼價值?通過馬蜂窩內容中心高級研發總監李鴻的這次內部分享,你會 ...


提到 Linux,作為程式員來說一定都不陌生。但如果說到「懂」Linux,可能就沒有那麼多人有把握了。到底用 Linux 離懂 Linux 有多遠?如果決定學習 Linux,應該怎麼開始?要學到什麼程度?懂一點 Linux,對於程式員有什麼價值?通過馬蜂窩內容中心高級研發總監李鴻的這次內部分享,你會得到一些答案。

 

(本文根據馬蜂窩技術研發團隊內部分享整理,搜索馬蜂窩技術公眾號,後臺回覆 「linux」獲取 PPT 全文。

大家好。我先簡單介紹一下自己,我是李鴻,目前負責馬蜂窩內容中心的技術研發和團隊管理。

接到今天這個任務的時候,我就在思考要分享什麼內容。在座的同學應該有一些工作的時間比較久,也有一些剛從學校畢業。所以今天所講的東西,如果能讓不同階段和技術背景的同學產生共鳴,讓大家改變了一些對技術的看法,甚至是產生了一點對職業規划上的影響,我認為這次分享才有意思。

出於這些考慮,我選擇了今天的主題——每個程式員都可以「懂」一點 Linux。

 

主講人:李鴻

馬蜂窩旅游網內容中心研發高級總監

(李鴻,現為馬蜂窩內容中心技術團隊負責人。擁有十餘年移動互聯網從業經驗,多年從事移動地圖 App、LBS 企業級服務和智慧交通相關產品研發。個人技術興趣聚焦在 Linux 生態,包括 Linux 內核等底層技術。)

 

Question 1  :為什麼講這個主題?

想到這個內容,也是基於我自己在技術成長上的一些感悟。

我比在座大多數同學年長幾歲,大概十幾年前大學畢業。今天我在跟很多面試候選人聊的時候,我會問他們「為什麼選擇電腦專業」,大部分人給我的答案都是碰巧選了電腦,或者聽說這個專業的就業前景不錯。

當然也會有同學和我一樣,是出於喜歡。我最早接觸到電腦還是讀初中的時候,當時電腦很貴,家裡也沒有。有一次在商店裡我看到了一臺「小霸王」學習機,有人通過在鍵盤上敲一敲,就能真的在屏幕上出現一點東西,我覺得簡直太有意思了,就在當時,我知道自己以後一定會學電腦。

大學之後,基本大一大二接觸的都是 Windows。一天偶然看到一些 Linux 代碼,從那之後我就開始自學 Linux,直到鑽研 Linux 的內核。十幾年後我再來看,還是會感嘆 Linux 世界的神奇,而且慶幸自己的選擇沒錯。

所以今天,我想分享下在學 Linux 這個過程中的一些思考:什麼才是真正的 Linux、它為什麼好、我們應該從哪裡入手開始學習,希望大家可以有所收穫。

 

Question 2 :你 「懂」Linux 嗎?

當問到是不是懂 Linux 的時候,包括我身邊的很多朋友都會說「還可以啊,我一直都在用」;也可能會說「懂一點,我聽說過 Linus 這個人」,等等。但至少我認為,如果你只是在說以下這些,真的不叫「懂」Linux:

 

 

 

那什麼才叫「懂」Linux ?如果把這件事講透,我認為核心要解決的就是三個「W」——What,Why,How 

What:一些同學在開始投入某個技術領域的時候,可能基礎比較薄弱,會很辛苦地學習。學了一段時間以後自己覺得學到了好多東西,但其實很多人並沒有學到這個方向的關鍵、核心和本質。比如我遇到過很多做大數據分析的人,說到 Hadoop、Spark,相關的單詞可以說不少,但問到「Spark 和 Hadoop 有什麼本質的區別」,「Spark 對數據的界定有什麼本質的不一樣」這些問題的時候,還是說不上來。

每個程式員的時間和精力是很寶貴的。在我們整個職業生涯中,可能用十年、二十年去學透一、兩個東西已經很不容易了。如果決定花時間去學習某個技術之前,一定要想清楚學的是什麼,千萬不要學偏了,甚至都沒走在自己規劃的職業方向上。

Why:為什麼學?是出於興趣愛好?是對實施架構很重要?是會影響你的職業規劃?是這項技術將來會有很好的市場收益?……不管你的答案是什麼,自己要比較清晰。

有一些同學技術學得很雜,問哪個都說比較熟。但問他哪個技術他比較有研究,是他比較資深的,好像又都沒有。這就是他沒想清楚「Why」,也就想不清楚自己的重心要放在哪裡。

How:前兩個問題解決完,就應該去思考「How」。到底應該怎麼學,才能學得越來越好。

今天我們是圍繞 Linux 在解決這三個 W,換成任何別的技術,其實都有相通之處。最近 7、8 年我面試過不下 500 個 Java 研發,幾乎每次我都會問「能不能用七八個概念說說你對 Java 的認識,或者你為什麼喜歡 Java」,很少有候選人人能真的把這個問題說清楚。

所以我建議各位同學,以後再投入一項技術的學習之前,都先從以上三個 W 去審視一下,看你是不是真的清楚要學的是什麼,為什麼學,怎麼才能學好。

(1)使用軟體

最裡面的圓代表的就是一個最小的視野,它對應的是用戶擁有的視野。因為作為軟體的使用人員,用戶是不會去關心背後的開發原理、邏輯實現的,用戶只關心這個軟體是不是好用。

(2)開發軟體

對於我們學電腦、做研發的人來說,去使用一個軟體其實是比較容易的。因為我們所在的是「開發軟體」這個圈子,相對於用戶來說,我們站在一個更外圍的視角,我們對使用軟體這件事看得更加透徹,角度更開闊。

聊一個生活中的例子,我有一次去參觀南京中山嶺的宋美齡宮,在去之前聽別人說,美齡宮像一顆寶石一樣,被許多由不同顏色樹葉構成的項鏈包裹在中間。聽起來就很美,也我非常好奇,於是去了之後我一直在找這條「項鏈」。結果當然是找不到。因為大家所說的「項鏈」是通過航拍看到的圖形,我是走在樹林中,那肯定看不到。

 

圖:宋美齡宮

(來源於網路)

 

你會發現,站的高度不一樣,你的視角就會不一樣。同樣的道理,研發同學之所以理解和使用軟體更快,就是因為與用戶相比站的角度更高,看的範圍更廣,我們知道軟體設計背後的原理,以及它的交互邏輯,就會很快上手。

(3)開發框架和庫

如果大家去聽一個前端的講座,為什麼當介紹到講師是某個框架的作者時,我們就會覺得這個分享很厲害?

絕大部分研發,可能 80%~90% 甚至 95% 的同學都是處在「開發軟體」這個層面的,我們使用各種現存的框架、開發庫去實現業務邏輯。

但是一定有少部分研發關註的是更外圍的事情,去做一些開發框架、開發庫的實現。這一層的研發需要的能力確實要更強,因為他要思考整個框架怎麼拆分模塊,怎麼樣去適應介面讓程式員用更好地用起來等等,所以要考慮得更深、更廣,挑戰也更多。

細心的同學可能註意到了我在「開發軟體」與「開發框架和庫」中間畫了一條紅線。我想表達什麼意思是,軟體研發同學會做出一些很棒的軟體,是因為你有這樣的能力,也是因為大家頭上是戴上了一頂那些開發框架和庫的同學給的安全帽的。比如 Java 開發會考慮記憶體的管理和回收,但這個機制其實是做 Java 開發環境的人幫你做了考慮,幫你提供了應對問題的策略,可以讓你更「安全」地做事情。

(4)操作系統

再往下看,所有的開發庫和開發框架,都是放在一個操作系統上的,與之對應的這一層的研發人員考慮的東西會更加複雜,因為他們要提供的是最基礎的環境,是上層實現的基石。

(5)硬體、規範、協議

大家看到再往下我畫了一個骷髏,也就是說這一層是真正厲害的人,他們做的是硬體、規範和協議,比如說指令系統,我們說的複雜指令系統和簡潔指令系統這兩個大的指令系統的陣營,在二三十年的時間里都一直在為自己的陣營 PK,目的是為了討論出更適合軟體發展的規範。再比如發明 TCP/IP 協議的人,他們最初在一片混沌的狀態下,居然能夠提出 TCP/IP 的概念,讓我們現在可以非常簡單地去做通訊。所以達到這一層的人,我們已經稱為天才了。

(6)數學

再往下就是數學。我認為電腦回到最後一定是數學,比如說在大學我們都要學習的離散數學、統計學、範式、邏輯學、圖靈機等等。數學是對整個電腦體系提升一個最基礎的支撐。

所以通過這個圖形我們還可以看到,研發同學如果要持續地成長,是絕對存在路徑的。我覺得有兩個角度是大家可以思考,一是你在專註的方向持續地積累,形成自己的競爭壁壘;同時你可以嘗試走入下一個更大的層面,看一看是不是會你的視野,對服務的一些思考,對解決問題的能力都帶來一些幫助。

2. 構建高效的工作和學習環境

學習 Linux 另外一個非常有用的地方就是「效率」的提升。研發同學每天都要和操作系統打交道,在上面做大量的工作和學習,不管是寫代碼、看文檔、自動跑一些任務、做一些搜索、寫一些東西等等。如果懂一點 Linux,懂它的設計哲學,你能更好掌握怎麼去用 Linux 更高效。

不誇張地說,如果你真的能夠成為一個 Linux 的 Hacker,我認為你的工作和學習效率提升十倍以上是沒問題的。我自己就會用 VIM 的話來解決幾乎所有問題。

 

 

搞技術做工程,如果思想越高、越巨集觀、越系統,能達到的能力就會越強。懂一點 Linux,首先就是為我們提供這樣一種提升視角的方法,幫我們站在一個更外圍的角度思考每天的工作和專攻的技術,它們背後是什麼樣的實現原理和設計思想,它處在怎樣的一個體系中,獲得了怎樣的支撐。 

電腦一個最本質的地方就是「自動化」,所以大家要真的能夠理解「自動化」這個詞的意義。我們寫軟體、做管理系統,都是為了要解決以前需要人工來做的事,更好地解放我們的大腦。

既然自動化是最本質的,我們就應該反思在自己的工作和學習中,是不是用到了自動化的思想,你是不是還可以忍受機械、繁瑣、低效地處理問題?現在的方式是不是應該改進?通過去學 Linux,可以幫助我們構建一個高效的學習和工作環境,去解決這些問題。

3. 借鑒優秀的學習樣板和實例

第三個就是對 Linux 的借鑒。其實所有的電腦工程問題,無非都是圍繞架構設計、技術選型、代碼質量、設計風格、工作流程,自動化程度等相關的問題。如果可以做到理解 Linux,你就會發現在這個操作系統上的很多組件,其實就為我們提供瞭如何解決電腦工程問題非常多有益的實例。

 

 

就如大家在關註一些優秀的開源項目的討論列表時,你也會覺得有一些人提出的建議並不好,但你可能說不清原因。這時有人做出了一些列舉,論證這個建議為什麼不好,你就會非常認同,並且吸取他思考問題和解決問題的方法。學習操作系統的過程也一樣,Linux 本身就是一個很好的樣板和實例,包括它的設計理念、代碼質量、文檔編寫、協同、軟體工程、演進以及它的文化,方方面面都會為我們提升非常好的借鑒。

這裡我想再展開說一下演進和文化。

演進是什麼?其實我們很多人在做項目的時候是很容易走偏的,因為電腦世界每增加一個維度,它可選擇的結果都會帶來級數級別的增長。而我們在一個軟體項目的推進實現中,要考慮的維度可能成百上千。要在這些紛繁複雜的選擇中真的找準方向去演進,需要非常清晰地思考。通過去看一個軟體的發展歷史,你可以去體會那些優秀的人是如何在一些關鍵的點上把握方向,來為你自己在做判斷的時候提供指導。

另外就是文化。我認為包括 Linux 在內的開源項目,核心的文化就是「就事論事,有技術情懷,追求極致,Open 的溝通」。這些理念對每個技術人員的成長都非常重要。比如當我們身處一個規模比較大的公司,成員之間難免會存在溝通上的障礙,可能就會導致誤解的產生和對對方的不認可。如果大家以一個統一的文化作為前提,就會用彼此認同的理念和方式去思考問題,也就更容易達成協作。

 

How——怎麼做到懂 Linux

最後我們看看用什麼方法去學習,才能夠越來越懂 Linux。

1. 理解設計哲學

我們只有對一件事有了深刻的認識,並且認同之後,才有可能去花時間學好。所以首先我認為要深刻認識到 Linux 背後的設計哲學是什麼。

關於 Linux 的設計哲學很多地方都有介紹,我這裡也特意沒有進行翻譯,希望大家對錶述中關鍵的英文單詞也建立起認知:

 

 

下麵我把每個點簡單地說一下。

Everything is a process; if it's not a process, it's a file

Linux 操作系統認為「任何事都是一個進程,或者說一個線程,是一個執行體;如果它不是一個線程,那麼它就是一個文件。」

大家不要認為這句話理所當然,其實很多操作系統都沒有這樣一個概念,但是在 Linux 的世界,大量的東西是以進程的概念存在的。如果你認為它不是一個可以運行的東西,那它極大可能就是個文件。你會發現很多新的技術都是在這樣的設計思想之上,比如說容器。

這種思想的好處是什麼呢?我們說解決電腦的問題有一個重要的技巧,就是當你能夠把各種複雜的事情都看成是一碼事兒,能夠從統一的視角去概括它,並且面對它、處理它,那解決起來就會容易很多。因為當電腦面對複雜的現實世界,它能做的就是一層一層的抽象,最後抽出一個非常簡單且統一的視角,可以直接地去處理。這是大家在寫代碼的時候可以去思考的。當你發現你做出的設計能夠把兩、三個不一樣的東西,從一個更高的視角進行統一,這時的你就會比很多人了不起。

One tool to do one task

第二點,一個工具解決一個問題。它的理念是說要把東西做好、做到極致,就要去做專。如果你做的不能比別人更好,你就不要去做,而是要去想如何通過一種方式讓用戶可以在你的應用上調用自己喜歡的東西,這就是 One tool to do one task。對我們在做程式的時候也有很多幫助,比如是不是能把現在的應用做得非常內聚,而不是去做更多的東西。

Three standards I/O channel

第三點是說每個進程都有三個標準的 I/O:標準輸入、標準輸出、標準錯誤,好處是你就會清楚地知道任何終端進程預設都有這三個數據交流的埠,可以自由的進行拼裝或者 I/O 重定向,進行功能組合,這其實也就是第四個哲學所說的——

Combine tools seamlessly

把工具無縫地拼接起來。

Plain text preferred

這一點也是我非常喜歡的,就是能用 Text 一定要用 Text。Text 是一種人可以讀,機器也可以處理的內容,可以解決好多問題。我們一般說 Plain Text 是指英文。比如說大家寫註釋要用英文寫,它帶來的好處是,我們可以通過腳本自動化分析各種 Comment,誰的 Comment 寫得多,誰的單詞拼錯了,誰的 Comment 中包含非常重要的信息,需要重點去跟蹤等等。

CLI, not GUI

提倡用命令行,不要用圖形化界面。因為命令行可以非常高效進行人機對話,圖形化界面對程式員來說是非常低效的。如果做一次更改,我們更希望通過敲鍵盤的方式來快速告訴電腦應該做什麼。

Provide the mechanism, not the policy

這點我建議大家背下來,就是如果你做一個好的大型框架,應該去提供機制,而不是提供策略。也就是要提供創造更多可能性的能力,不要把需要適應到特殊場景下的定製化的內容寫死在代碼里。所有的軟體在這種設計上這點是非常相通的,好的軟體一定是為大家提供更多的靈活性和適用場景。

2. 學習 Linux 的三個層次

以上的設計哲學都非常重要。那麼知道了這些,該怎麼學 Linux 呢?大家不要在一開始學的時候就一定要去學內核,或者想要全都懂,於是就認為 Linux 很難。關於「懂」Linux 的階段,我簡單分成了三個層次:

 

 

第一個層次就是 Code。這裡的 Code 不是指在後臺寫一個 Java 的業務程式,或者是前臺寫一個網頁,而是指系統編程(System Programm),通過編碼的方式和操作系統直接對話,而不再是點擊滑鼠去控制。

雖然系統編程跟大部分人的工作不會強相關。但是通過在應用層用語言(主要是 C 語言)去跟操作系統對話,你會看到在整個操作系統背後的一系列東西是怎麼構建起來的,去我們提高視野、提升效率,以及得到更多優秀的借鑒都有很多幫助。除了 Code,如果大家有時間和精力,我建議還可以去瞭解一下 C 語言。C 語言非常純粹,就是來告訴你記憶體長什麼樣,怎麼去控制記憶體、指令、堆棧,怎麼去進行參數傳遞的方法調用等,你會學到大量電腦架構相關的原理。

第三層是 Hack,它的檔到對應到 8-10, 這可能是每個希望做到極致的技術人最後的追求,去瞭解內核這一層。

第一階段:Use Linux

(1)終端、鍵盤、命令剛纔在講 Linux 的設計哲學時,我們提到過一條——「CLI, not GUI」。所以對於程式員來說,在學如何跟 Linux 操作系統對話的時候,一定是使用終端、鍵盤、命令。我想跟大家說,如果你現在還習慣用滑鼠,那你可能要反省,看看自己對自動化理解的程度是不是太低了。

(2)一個字元編輯器要去找一款自己喜歡的字元編輯器,並且用起來。

(3)SHELL第三,如果要用 Linux 理論去提高我們的視角,就一定要掌握一版 SHELL 腳本,並且去深刻理解。至於用哪個版本大家可以根據自己的喜好決定,目前我用的是 ZSH,感興趣的同學可以去瞭解下。

(4)文件系統、進程線程、IO 組合、用戶許可權、資源管理再往下我們可以嘗試通過編程的方式去調用文件系統、進程線程、IO、用戶許可權、資源管理等等,去更加系統的瞭解。這些都會了之後會發現慢慢,以後再寫一種高層的代碼也就沒那麼難了。

(5)解剖 Linux通過解剖 Linux 可以知道 Linux 是怎麼裝拼起來的,對它會有一個更直觀的認知。我大概在十年前開始接觸 LFS(Linux From Scratch LFS),現在它已經演化出了無數個版本,它會告訴你如何開始從零構建一個 Linux 系統,而且它好的地方在於是從源代碼的方式去講怎麼編譯,最後拼成一個操作系統。這個工作因為需要比較多的精力,所以建議大家三個月到半年的時間跑一次,會很有成就感。

(6)深刻理解背後的文化和哲學關於 Linux 背後的文化和哲學,可能總結起來就是那麼簡單幾句話,開始會比較難理解。但是大家如果把這幾句話當成一種「信仰」,每次在學和用的時候都能再深刻地體會一遍,可能過了半年,說不定某一天你會突然發現想通了。

(7)參與社區大家在參與社區的時候,一定要知道知識的價值是要通過 10 年、20 年的努力去沉澱、去積累的,要持續地參與到社區當中。

(8)最後一個就是持之以恆,去融入到你的工作、學習和生活當中。Linux 學習曲線的特點是一開始就很陡,不像 Windows,一開始很平滑。但一旦爬過這個陡坡,就會看到一個全新的世界,並且可以一直持續往上走。

第二階段:Code Linux

這個階段就是剛纔我們講到的,要用編程語言去和 Linux 對話,通過 Code 開始瞭解二進位 ELF。ELF 是在 Linux 世界的執行文件格式,通過瞭解 ELF 可以知道一個執行文件是怎麼拼寫的,它的記憶體是怎麼存在的,指令是怎麼跑的,數據是怎麼取的,動態庫是怎麼載入的……如果把這些都搞定,至少在 Linux 領域,就不會再有什麼是讓你覺得理解起來比較吃力的事情。

第三階段:Hack Linux

關於如何 Hack,這個問題非常龐大和複雜。如果大家有嘗試走到這一層的勇氣和願望,我非常願意和大家一起交流。

 

內容總結

總結一下今天我們講到的一些內容:

  • 知道為為什麼要學 Linux:視野、效率、借鑒

  • 知道要構建什麼樣的 Linux 知識架構,並對自己專攻的技術方向提供源源不斷的能源:三個 W(What, Why , How)

  • 知道學習 Linux 最優方法:確定層次 (Use, Code, Hack),實踐,持之以恆,融入每天的工作、學習和生活

  • 知道 Linux 背後的設計哲學、優點、歷史和文化

  • 喜歡上 Linux,愛上她

在分享最後,我想和大家聊聊最近經常思考的一個問題。現在我們總會聽到身邊一些人在抱怨,說電腦行業已經非常飽和,互聯網也已經發展到了一定階段,再過五年十年電腦就要被淘汰了,研發人員也會面臨失業。

我對這個觀點是非常不贊同的。

每個人都可以不用工作,每天很開心地享受生活,這應該是大多數人理想的狀態。但是人類總要養活自己,唯一能達到這種理想狀態的情況,就是由電腦、機器人、電腦幫我們人類完成大部分的工作,不管是做家務、交通出行、蓋房子等等。如果這個理想狀態的標準是 100 分,對比我們現在,可能僅僅處在 0.1 分的階段。所以怎麼可能會存在純粹的失業呢?

為什麼大家還要進行這樣一個討論?我只能認為有些程式員還沒有喜歡電腦,擔心自己學不好。學習這個過程的確不容易。就像我們看一本哲學書,開始想要讀懂非常困難,但隨著人生閱歷的增長,隨著我們在生活、學習和工作中不斷驗證書中的道理,你就會體會到其中的道理,提升自己看問題的視角和解決問題的能力。所以最後,我希望大家不要害怕學習,並且相信這個行業的前景,和程式員這份職業可以創造的價值。

以上就是我的分享,謝謝!

(馬蜂窩技術公眾號原創內容)


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 四.文件與文件系統的壓縮與打包 用途: 傳輸時減少帶寬 Linux系統常見的壓縮命令 Compass(舊版壓縮,並且在centOS中預設為不安裝) gzip, zcat bzip2, bzcat zip 打包命令tar Tar自身不存在壓縮功能 歸檔: 講多個文件放在一個文件中 C表示創建一個打包文 ...
  • 三.Linux磁碟與文件系統的管理 MBR扇區(512B) 磁碟的分區組成 Boot sector 扇區(用來裝引導程式) Super block 記錄inode與Block的信息 Inode block中存儲文件時,會產生文件屬性記錄(user,group,文件存儲在哪個block中),每個ino ...
  • 番茄工作法: 專註於某一段時間,減少打斷,提高時間的感知和掌控。 25min工作+5min休息 周期:4x(25+5)+20 VBS代碼實現如下: 為適應強迫症增加vds定時器調用如下: ...
  • 問題: nginx啟動或者reload的時候,會對proxy_pass後面的功能變數名稱進行DNS解析,如果解析失敗,啟動就會失敗或者reload失敗。 我們是to B的產品,客戶的環境可能是不通公網的,因此不能使用公網DNS服務,進而導致在ng啟動的時候,對proxy_pass後緊跟功能變數名稱的dns解析失敗, ...
  • Windows RDP 訪問 Fedor 遠程桌面需要使用 Xrdp 開源工具。 安裝完成後需要註銷掉當前用戶,否則登錄失敗。 ...
  • 環境 CentOS: 7.x 下載 下載地址 :http://www.clamav.net/downloads,使用目前最新版本為:clamav 0.101.3 使用 wget 下載 安裝 1. 解壓 2. 安裝依賴 3. 編譯安裝 4. 添加用戶 配置 1. 創建日誌目錄和病毒庫目錄 2. 創建日 ...
  • Ubuntu系統中會存在多個 Python 的可執行二進位文件。一般Ubuntu預設的Python版本都為2.x, 如何改變Python的預設版本呢?下麵來一起看看吧。 你可以按照以下方法使用 ls 命令來查看你的系統中都有那些 Python 的二進位文件可供使用。 像我的有2.7、3、3.5版本 ...
  • 在linux的命令模式下使用ctrl組合鍵能讓操作更便捷。 ctrl + k : 剪切游標及其後邊的內容; ctrl + u : 剪切游標之前的內容; ctrl + y : 在游標處粘貼上兩個命令,粘貼方式和被剪切方式相同; ctrl + c : 結束正在運行的程式或命令; ctrl + d : 結... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...