Windows平臺軟件結構與環(huán)境配置入門

對剛接觸某一領域的萌新來說,學習軟件使用、配置軟件環(huán)境經常是第一件頭疼事。從網上搜的教程看的半懂不懂,自己操作還容易出現(xiàn)很多別人很少遇到的問題,導致瀏覽器變成遞歸式學習的棧。本篇文章希望通過多個軟件配置的例子,從軟件設計的角度看待軟件配置,總結出一般經驗,提煉出一些常用的知識。也希望后來人少踩些過來人踩過的坑吧。

最近更新時間:2019-07-13


Part 1.關于軟件的目錄

首先我們通過幾個例子直觀地認識一下軟件目錄:

[圖片上傳中...(image-81672e-1571147945619-5)]

(JDK安裝目錄)

image

(Apache Tomcat安裝目錄)

image

(MySQL安裝目錄)

通過以上例子以及平時安裝軟件的經驗,不難發(fā)現(xiàn)很多軟件的目錄命名有一些相同點。這很好理解,如果你是軟件設計師,一定希望自己的軟件文件夾有意義明確且簡略的名字。正是基于這種思想,軟件文件夾的命名比較“約定俗成”。當然,不同軟件的各種文件夾名字可能不盡相同,但由于大型軟件設計的方式比較類似,所以文件夾的意義應該是差不多的,總結經驗時應該從文件夾的意義入手。下面對幾個常見的名稱進行分析:

  • bin文件夾:大多數(shù)的軟件都有這樣一個文件夾。bin也就是binary,二進制。我們知道計算機只能識別由0和1組成的(二進制的)機器語言,所以想要計算機執(zhí)行命令,必須把它們通過各種手段變成0和1的組合。因此,bin目錄一般用于存放可執(zhí)行(executable)文件,后綴名經常為 .exe , .bat等。打開軟件,常常就是執(zhí)行bin目錄下的一系列可執(zhí)行文件。
  • conf文件夾:即config,配置的意思。軟件的配置文件,就像是一個遙控器,通過它可以定義軟件的一些外觀和行為。為什么要使用配置文件這種形式來修改軟件呢?對于一個簡單的程序,在代碼中設置if,變量等足以修改程序的行為;但對于一個大型軟件,使用這種方式既不方便他人(程序員、用戶)修改,也將修改與程序邏輯雜糅在了一起(耦合性高),容易出錯。所以作為一種最佳實踐,配置文件應運而生。配置文件實際上就是一個“字典”(python中的字典,c和java中的map,json的設計思想),或者說“鍵值對”。程序通過“鍵”在配置文件中找“值”,把“值”賦給變量,完成從配置文件到程序的數(shù)據(jù)傳輸。
  • lib文件夾:即library,圖書館,引申為庫的意思。在計算機領域,庫是寫好的現(xiàn)有的,成熟的,可以復用的代碼。我們在屏幕上輸出文字,并非用匯編語言在屏幕緩沖區(qū)編輯數(shù)據(jù),而是直接調用printf函數(shù),就是因為函數(shù)封裝好了一系列復雜的行為。因此程序設計強調“子程序”,軟件工程強調“可復用性”。基于這種思想,軟件設計者將代碼需要用到的其他代碼放入“庫”中,想要使用的時候include一下或import一下就好了。從廣義上來講,可以被重用的“東西”就可以放入庫中,不一定是可執(zhí)行文件。
  • log文件夾:即存放了各種程序的日志。日志是對軟件完成了某些處理、經歷了某些操作或出現(xiàn)了某些錯誤的記錄。大多數(shù)日志是給人分析的,所以應該擁有良好的可讀性(當然前提是你對這個軟件的功能有一定的了解)。也有一些log使用其他格式編寫,打開可能是亂碼。log的名稱標示著它的作用,比如error.log,install.log 等。
  • temp文件夾:即temporary,暫存文件。緩存是一種典型的“空間換時間”策略,這也是環(huán)境變量Path的存在思想。比如我們有一張混亂的查找表,正常遍歷一遍需要O(n)的時間復雜度,但如果你要尋找的那個“鍵”之前找過了,被記錄了,那么下次我先尋找那個記錄,一下子就匹配上了。這也就是使用記錄的一點內存去換取遍歷的時間,這種思想在數(shù)據(jù)結構的設計和操作系統(tǒng)中非常常見。很多電腦衛(wèi)士、手機衛(wèi)士清理內存的方法就是刪除這些temp文件,從產生temp文件的意義的角度來看,這種行為可能不太合理。因此,這個文件夾一般不需要我們操作。有時我們對軟件進行了誤設置,(廣義上的)刪除temp文件也可能是一種解決方案。
  • resource(source、res、src)文件夾:存儲了程序的資源文件。資源是一個很寬泛的概念,圖片視頻是資源,排版布局的格式(XML、CSS),甚至字符串數(shù)字等等都屬于資源。軟件講究“資源與代碼分離”,提高軟件的可維護性,降低耦合性。舉個例子:如果想把植物大戰(zhàn)僵尸的豌豆改成子彈,并不需要修改游戲邏輯,只需要在資源文件夾中,用子彈的圖片替換相應的豌豆圖片就可以了。
  • plugin文件夾:存放一些程序的插件,即對程序現(xiàn)有功能的擴展。文件夾本身沒什么好說的,而“擴展”的實現(xiàn)則依賴于良好的設計模式了。軟件與生活中一般產品產品的最大區(qū)別就在于易于更改,使用軟件的用戶的需求也常常反復多變,這就要求軟件設計要有良好的可擴展性。如何制作高性能、用戶友好、易于擴展、易于服用、易于審查... 的優(yōu)質軟件,就是軟件工程師們所要研究的課題。

對文件夾的意義初步了解后,順便看看常見后綴名的文件都是做什么的:

  • .bat文件:批處理文件,就是一個腳本,用于簡化用戶操作。比如我打開軟件有一個固定的格式:【1.打開bin目錄的init。2.打開bin目錄的start。3.打開plugin目錄的ext】,就可把這些操作按照一定的格式寫入批處理文件,讓它幫我完成這些固定的操作。
  • .conf,.properties文件:上文提到的配置文件。
  • .dll,.lib文件:動態(tài)庫和靜態(tài)庫文件。dll全程Dynamic Link Library,與靜態(tài)庫的lib相對。將匯編生成的目標文件.o與引用到的庫一起鏈接打包到可執(zhí)行文件中,這種鏈接方式稱為靜態(tài)鏈接。但設想:如果我有10000個調用了printf函數(shù)的程序,它們每個都要打包一個靜態(tài)鏈接庫,是非常浪費空間的。動態(tài)鏈接機制就是為了解決這個問題而生:重復的代碼在計算機中只存在一份,程序運行時才進行動態(tài)地載入,而不是鏈接時一起打包。這樣處理既規(guī)避了空間浪費問題,也解決了靜態(tài)庫對程序的更新、部署和發(fā)布頁會帶來麻煩的問題。用戶只要按需更新動態(tài)庫即可,增量更新。

Part 2.環(huán)境變量那些事兒

如果你是一臺計算機,想要執(zhí)行一個確定的可執(zhí)行文件,你需要得到哪些信息?

  • 文件路徑
  • 文件名

也就是一個文件的確切位置。在Windows系統(tǒng)控制臺中,可以通過在文件所在目錄中,輸入文件名來執(zhí)行它。

image

有時我們要執(zhí)行的程序分散在各處,挨個尋找它們的路徑是非常麻煩的。而對于操作系統(tǒng)而言,“用戶”可不止人類一個:程序還會向操作系統(tǒng)發(fā)送各種指令。比如我點擊了Eclipse中的Run按鈕,Eclipse會去執(zhí)行javac ,java等命令,而Eclipse這個程序可不知道我們把Java安裝到了哪里。想要隨時隨地運行一些常用的程序,又不想讓操作系統(tǒng)遍歷整個文件系統(tǒng)去找(事實上操作系統(tǒng)根本不會去找,而是直接告訴你沒有發(fā)現(xiàn))就需要環(huán)境變量Path了。

環(huán)境變量的設置是一種典型的空間換時間的策略。當我們輸入一個執(zhí)行文件的命令時,系統(tǒng)會先從當前目錄尋找此文件,如果找不到就會從環(huán)境變量之中尋找。我們將一些常用的程序的目錄添加到環(huán)境變量之中,就可以(讓我們自己或者應用程序)隨時隨地執(zhí)行那些文件了。

image

為哪些目錄配置環(huán)境變量?這要看應用程序和個人的需求。

比如:通過對Tomcat的批處理文件分析發(fā)現(xiàn),它需要Tomcat的安裝目錄,并且用CATALINA_HOME去引用此目錄。

[圖片上傳中...(image-9b7d0e-1571147945618-0)]

所以我們應該在環(huán)境變量中添加鍵為CATALINA_HOME,值為你的tomcat安裝目錄的一項。這是環(huán)境變量設置的程序基礎,事實上,配置環(huán)境變量時,只要按照網上的教程一步一步來就可以了,不需要自己分析源碼。

環(huán)境變量的設置網上一抓一大把,這里就不多說了。(Java的配置:https://www.runoob.com/java/java-environment-setup.html

  • 未完待續(xù)*
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • ORA-00001: 違反唯一約束條件 (.) 錯誤說明:當在唯一索引所對應的列上鍵入重復值時,會觸發(fā)此異常。 O...
    我想起個好名字閱讀 5,979評論 0 9
  • 一、Python簡介和環(huán)境搭建以及pip的安裝 4課時實驗課主要內容 【Python簡介】: Python 是一個...
    _小老虎_閱讀 6,338評論 0 10
  • 一、溫故而知新 1. 內存不夠怎么辦 內存簡單分配策略的問題地址空間不隔離內存使用效率低程序運行的地址不確定 關于...
    SeanCST閱讀 8,133評論 0 27
  • 第一章 1.Linux是一套免費使用和自由傳播的類UNIX操作系統(tǒng),它可以基于Intel x86系列處理器以及Cy...
    yansicing閱讀 5,580評論 0 9
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,666評論 1 32

友情鏈接更多精彩內容