天天看點

零碎知識一 開發二 資料庫三 系統四 網路五 其他六 前端

目錄

  • 一 開發
    • 1.1 字元串連接配接(java)
    • 1.2 servlet container與server
    • 1.3 控制反轉和依賴注入
    • 1.4 類加載器和classpath
    • 1.5 裝箱和拆箱
    • 1.6 子類方法的異常抛出
    • 1.7 tomcat的預設web應用
    • 1.8 override覆寫、overload重載、hide隐藏和修飾符
    • 1.9 maven配置阿裡倉庫
    • 1.10 eclipse開發問題的一些解決方案
    • 1.11 JDK相關的環境變量
    • 1.12 eclipse尋找jvm
    • 1.13 Spring多容器應用
    • 1.14 Logical Vs. Arithmetic Shift
    • 1.15 jackson
    • 1.16 HashMap vs. HashTable
    • 1.17 string、stringBuffer、StringBuild
    • 1.18 Session技術
  • 二 資料庫
    • 2.1 隔離級别
    • 2.2 事務送出
    • 2.3 (内、外)連接配接
  • 三 系統
    • 3.1 cpu架構
    • 3.2 開機引導過程
    • 3.3 intel cpu
    • 3.4 Desktop Environment
    • 3.5 linux中檔案字尾名
    • 3.6 vps和vm的差別
    • 3.7 門外漢之PowerShell
    • 3.8 Linux 線程、程序、程序組和會話
    • 3.9 MBR與GPT
    • 3.10 CPU部分知識
    • 3.11 電腦硬體部分知識
    • 3.12 linux中運作windows軟體
    • 3.13 安裝win10
    • 3.14 軟體管理
      • 常用指令
      • 軟體源
    • 3.15 顯示卡之大黃蜂
  • 四 網路
    • 4.1 URL、URN和URI
    • 4.2 url解析
    • 4.3 共享IP和獨立IP的差別
    • 4.4 FTTH、FTTB
    • 4.5 ipv4私有位址
    • 4.6 md5、SHA-1
    • 4.7 X11 vs. VNC
    • 4.8 VPN原理
    • 4.9 socks5,shadowsocks
    • 4.10 GFW工作原理
    • 4.11 AAA
    • 4.12 127.0.0.1 and 0.0.0.0
  • 五 其他
    • 5.1 大端小端
    • 5.2 CRLF(回車換行)
    • 5.3 ctrl+F和wrap-around
    • 5.4 度量機關
    • 5.5 UTC和GMT
    • 5.6 單位元組編碼
    • 5.7 閏年
    • 5.8 chrome app vs. extension
    • 5.9 原、反、補碼
    • 5.10 N/A
    • 5.11 備案
    • 5.12 safe write
    • 5.13 遠端連接配接
    • 5.14 架構模式(MVVM、MVC)
    • 5.15 對項目的了解
  • 六 前端
    • 6.1 判斷頁面是否處于微信環境
    • 6.2 關閉浏覽器緩存
    • 6.3 代碼設定斷點
    • 6.4 CommonJS vs. AMD
    • 6.5 Gulp vs. Grunt vs. Webpack
    • 6.6 Vue、React、Angular
    • 6.7 Bootstrap、element ui、vant

一 開發

1.1 字元串連接配接(java)

運作時字元串之間的連接配接操作(+)等同于:

1.2 servlet container與server

如今很多servlet容器經常會内置web伺服器(web server),是以很少有人區分java servelt容器和java web伺服器了。

1.3 控制反轉和依賴注入

DI is a subset of IoC

  • IoC means that objects do not create other objects on which they rely to do their work. Instead, they get the objects that they need from an outside service (for example, xml file or single app service). 2 implementations of IoC, I use, are DI and ServiceLocator.
  • DI - Dependency Injection is concrete term, in which we provide dependencies of the object at run time by using different injection techniques viz. Setter Injection, Constructor Injection or by Interface Injection.
已發表博文:控制反轉 vs 依賴注入

1.4 類加載器和classpath

每個類加載器都可以定義一個屬于自己的classpath路徑

1.5 裝箱和拆箱

基本類型自動包裝時調用了包裝類的valueOf方法,自動拆箱時調用了包裝類的intValue方法。

1.6 子類方法的異常抛出

子類覆寫父類的方法可以不用抛出異常,即使父類方法有異常抛出清單;但父類引用子類對象且父類方法有異常抛出時,需要try來處理異常。

參考:https://stackoverflow.com/questions/9036016/inheritance-method-signature-method-overriding-and-throws-clause

1.7 tomcat的預設web應用

tomcat中webapps下的ROOT目錄代表的應用為預設應用。估計host下的該目錄都為預設應用。

1.8 override覆寫、overload重載、hide隐藏和修飾符

  • override(覆寫):子類方法覆寫父類方法,子類或父類引用都是調用子類方法。
  • overload(重載):類的所有方法(包括繼承的方法),隻要方法原型參數不同,就是重載。不同參數調用不同方法。
  • hide(隐藏):子類繼承但沒有覆寫方法,隻是子類作用域中隐藏了該方法,稱為隐藏。如父類字段、靜态方法被子類隐藏了,通過父類引用跳出子類作用域,然後調用這些方法、字段。
  • 修飾符:子類方法覆寫後通路修飾符可以修改成通路範圍更廣的,比如protect換成public。如果父類方法是private,那麼子類同名方法不叫覆寫,而是隐藏。

1.9 maven配置阿裡倉庫

下載下傳速度會加快。在配置檔案的mirrors元素中添加mirror元素:

<mirror>
 
    <id>nexus-aliyun</id>
 
    <mirrorOf>*</mirrorOf>
 
    <name>Nexus aliyun</name>
 
    <url>http://maven.aliyun.com/nexus/content/groups/public</url>
 
</mirror>
           

1.10 eclipse開發問題的一些解決方案

要是maven下載下傳的包毀壞,則在maven的repository中删除它,然後在項目中使用maven->update project…

如果編寫程式過程中,eclipse出現了莫名其妙的問題,可以點選project->clean…清除項目嘗試一下。如果導入項目後出現了莫名其妙的問題,很有可能是因為項目與電腦環境沖突,比如jdk版本太高,很多jar包不支援,又如資料庫的驅動包不支援現有資料庫的包。

如果eclipse中tomcat出了問題,可以将裡面的應用删除,clean整個server的,clear jsp生成的servlet。

1.11 JDK相關的環境變量

安裝JDK後,最多需要設定三個環境變量:PATH,JAVA_HOME和CLASSPATH。

  • PATH:主要為了讓可執行檔案java.exe(windows下)或java(linux下)能夠在指令行下執行
  • JAVA_HOME:約定俗稱的一個環境變量,指向jdk安裝目錄。可選的,但此變量存在的理由有二。
    • 其一,有些java程式(如tomcat)在運作時可以通過該變量獲得運作時資源,比如tomcat。
    • 其二(不确定對不對),當存在多個版本的jdk時,無論運作哪個jdk版本的jvm(即設定path),最終使用的運作環境還是JAVA_HOME指向的jdk。
  • CLASSPATH:用于告訴應用類或資源的路徑。可選的,預設目前工作目錄。如果設定,最好也将“.”加入到變量中。在指令行,通過選項-cp能夠覆寫該設定。

參考:

what is the reason for the existence of the JAVA_HOME environment variable?

https://docs.oracle.com/javase/tutorial/essential/environment/paths.html

https://blog.csdn.net/u011416247/article/details/79249470?utm_source=blogxgwz5

1.12 eclipse尋找jvm

  1. eclipse先從

    eclipse/jre

    目錄下尋找jvm
  2. 如果沒有,則咨詢

    eclipse.ini

    檔案
  3. 最後在

    PATH

    路徑下查找

1.13 Spring多容器應用

一個容器可以有父容器,比如springMVC中就有兩個容器,一個web應用對應一個

ApplicationContext

容器,為父容器,每個

DispatcherServlet

對應一個

WebApplicationContext

容器,為子容器。父容器中定義的

Bean

都可以被子容器通路到,也可被子容器覆寫。在

ApplicationContext

中可以定義和業務邏輯、資料通路有關的

Bean

,而

WebApplicationContext

中可以定義和控制器與視圖解析器有關的

Bean

參考:

https://stackoverflow.com/questions/43452644/what-is-the-difference-between-spring-parent-context-and-child-context

https://stackoverflow.com/questions/18578143/about-multiple-containers-in-spring-framework

1.14 Logical Vs. Arithmetic Shift

邏輯移位和算術移位都是按位運算,但是邏輯移位用于無符号移位,算術移位用于有符号移位。

  • 邏輯左移
    零碎知識一 開發二 資料庫三 系統四 網路五 其他六 前端
    在大多語言中對應

    <<

  • 邏輯右移
    零碎知識一 開發二 資料庫三 系統四 網路五 其他六 前端
    在大多語言中對應

    >>

  • 算術左移
    零碎知識一 開發二 資料庫三 系統四 網路五 其他六 前端
    在大多語言中對應

    <<

    與邏輯左移一緻
  • 算術右移
    零碎知識一 開發二 資料庫三 系統四 網路五 其他六 前端
    在大多語言中對應

    >>>

參考:

https://open4tech.com/logical-vs-arithmetic-shift/

https://en.wikipedia.org/wiki/Arithmetic_shift

https://en.wikipedia.org/wiki/Logical_shift

1.15 jackson

教程:

github 版

tutorialspoint 版

已發表部落格:Jackson入門

1.16 HashMap vs. HashTable

差別:

  • HashMap

    is non synchronized. It is not-thread safe and can’t be shared between many threads without proper synchronization code whereas

    HashTable

    is synchronized. It is thread-safe and can be shared with many threads.
  • HashMap

    allows one null key and multiple null values whereas

    HashTable

    doesn’t allow any null key or value.
  • HashMap

    is generally preferred over

    HashTable

    if thread synchronization is not needed

為何HashMap允許鍵值為null?

To successfully store and retrieve objects from a HashTable, the objects used as keys must implement the hashCode method and the equals method. Since null is not an object, it can’t implement these methods. HashMap is an advanced version and improvement on the Hashtable. HashMap was created later.

1.17 string、stringBuffer、StringBuild

  • String is immutable whereas StringBuffer and StringBuider are mutable classes.
  • StringBuffer is thread safe and synchronized whereas StringBuilder is not, thats why StringBuilder is more faster than StringBuffer.
  • String concat + operator internally uses StringBuffer or StringBuilder class.
  • For String manipulations in non-multi threaded environment, we should use StringBuilder else use StringBuffer class.
參考:string-vs-stringbuffer-vs-stringbuilder

1.18 Session技術

Session是一種會話的抽象概念, 在很多協定中都存在, 如PPPoE. 這裡讨論的是HTTP的會話.

HTTP是無狀态的,為了能夠在HTTP協定之上保持住狀态,比如使用者是否登陸、購物車等等就需要一種方法來把使用者的一個個無狀态HTTP請求關聯起來。

這種技術就叫Session。

Session的功能是把一個個分離的HTTP請求關聯起來,隻要能實作這個功能,基本上都能叫Session的一種實作。

  • 在Cookie裡放個JSESSIONID,在伺服器中存上狀态,使用者請求來了,根據JSESSIONID去伺服器裡查狀态,這是Tomcat的實作方法。
  • 把所有狀态都存在Cookie裡,伺服器給個簽名防止僞造,每次請求來了,直接從Cookie裡提取狀态,這是JWT的實作方法。
  • 在Cookie裡放個token,狀态不存在中間件裡,而是存在Redis裡,這也是一種Session實作方法。

正确的說法是,把Session存儲在Web中間件中(比如存儲在Tomcat中),這種做法正在被淘汰,因為這種方案對負載均衡不友好,也不利于快速伸縮。

把Session存在Redis和前端的方案正在慢慢崛起,尤其是現在微服務架構大行其道的情況下。

隻要HTTP還是無狀态的,隻要儲存狀态還是剛需,Session就不會消失,變化的隻是它的實作方式。

舉個例子,隻要人們還要出行,交通工具就不可能消失,隻是實作的方法從走路變成了馬車,在變成火車、汽車、飛機,未來可能還有火箭啥的。

轉載至:session正在被淘汰嗎? - 李明陽的回答 - 知乎

二 資料庫

2.1 隔離級别

  • read_uncommited:加寫鎖,直到事務結束釋放,解決丢失修改問題。
  • read_commited:在上一級别基礎上加讀鎖(可能為樂觀鎖),讀完立即釋放,解決髒讀。
  • repeatable_read:在read_uncommited基礎上加讀鎖(可能為樂觀鎖),直到事務結束釋放,解決不可重複讀問題。
  • serializable:在上一級别基礎上加間隙鎖等等等等,是以解決了幻讀。

mysql的預設隔離級别:repeatable_read。

詳細參考:JDBC 8.1小節

2.2 事務送出

在原始jdbc中,Connection預設自動送出,也就是沒執行一句sql語句就當做一個事務送出。在mybatis中,預設不自動送出,在進行插入、修改等操作後需要手動送出。并不是事務中送出後才執行sql語句,而是每條都執行,隻是callback利用日記可以復原到初始狀态罷了。

2019/2/13更新

一般Connection預設自動送出,但是涉及事務處理的Connection會被配置成非自動送出。

2.3 (内、外)連接配接

  • 内連接配接(inner join或join):兩表隻有成功比對的記錄會被顯示出來
  • 左外連接配接(left join或left outer join):查詢結果集包含左表所有行,和右表比對的記錄,如果無比對則全null。
  • 右外連接配接:與左外連接配接類似。
  • 全連接配接:不支援,但是可以通過左外連接配接和右外連接配接的并集獲得。

除了使用連接配接,還可以在使用如下方式進行多表連接配接:

select A.*,B.*
from A,B
where A.id=B.aId
           

三 系統

3.1 cpu架構

cpu有很多架構,這三種很常見:ARM 、x86(IA-32、i386)、 x86_64(x64、AMD64、intel64)

架構是一個很抽象的概念,不同cpu産商可以生産同一架構的cpu。作業系統通常有對應不同cpu架構的版本。

x86包括i386、i686等處理器,支援32位位址空間。x64支援64位位址空間。

arm采用精簡集指令,x86_64和x86采用複雜集指令。

樹莓派是arm架構的。arm架構有很多版本,ARMv3道ARMv7支援32位位址空間,ARMv8-A架構支援64位。

參考:

https://en.wikipedia.org/wiki/ARM_architecture https://en.wikipedia.org/wiki/X86 https://en.wikipedia.org/wiki/X86_64

https://serverfault.com/questions/610308/x86-i386-i686-amd64-i5-i7-archtecture-processor-confusion

https://stackoverflow.com/questions/14794460/how-does-the-arm-architecture-differ-from-x86

https://askubuntu.com/questions/54296/difference-between-the-i386-download-and-the-amd64

3.2 開機引導過程

上電,主機闆自動讀取主機闆上固件(rom)中的BIOS或UEFI(一段小程式),該程式執行開機自檢,可以通路硬碟和主存。

UEFI更智能, 相當于一個小作業系統

自檢後查找磁盤的第一個扇區是否存在引導程式并加載。BIOS中一個磁盤最多存在一個啟動項; 而在UEFI中, 會去磁盤中尋找ESP分區, 裡面可能存在多個

.efi

格式的引導程式, 是以此時一個磁盤可以存在多個啟動項.

磁盤有MBR和GPT兩種分區方式, BIOS或UEFI需支援(了解)該分區格式才能讀取引導程式. BIOS能了解MBR分區格式, UEFI能了解GPT分區格式和MBR(為了相容BOIS).

一個扇區通常不能裝下整個引導程式,僅引導程式的坐标, 指出真正引導程式的位置并加載。注意,加載真正的引導程式後,此時引導程式可以做很多事情了。可以直接加載系統核心,也可以加載其他分區的引導程式來啟動其他系統,是以引導程式可能會給出多個引導項供你選擇。

如果裝了雙系統(win+linux)的話, 你通常會看到引導程式grub2提供的多個引導項, 可以選擇啟動linux, 也可以啟動windows.

引導程式加載了核心後, 交由核心運作使用者空間的軟體(分為系統軟體和使用者軟體),比如加載到多使用者圖形化的環境供使用者使用 (系統軟體) , 然後使用者運作自己的程式 (使用者軟體) .

參考:https://en.wikipedia.org/wiki/Booting

3.3 intel cpu

intel的酷睿i3、i5、i7的差異主要展現在核心數、是否有Turbo Boost技術、緩存大小、超線程上。一般i7比i5好,i5比i3好。但是不是必定成立,因為每個系列都有不同年代的産品,比如i5 4200H 不一定比i3 8100好。最主要的還是要看上面的參數,當然主頻也是非常非常重要的參數。

參考:https://www.pcworld.idg.com.au/article/386100/what_difference_between_an_intel_core_i3_i5_i7_/

3.4 Desktop Environment

零碎知識一 開發二 資料庫三 系統四 網路五 其他六 前端
參考:https://en.wikipedia.org/wiki/Desktop_environment

3.5 linux中檔案字尾名

linux中檔案字尾名不是必要的,僅僅隻是用來描述檔案如何被“執行”。下面是一些linux字尾名和它的意義:

Linux extension Windows Equivalent Short description
.so, .o .dll Object that can be loaded at runtime (Similar to DLL)
.a .lib Static library
[none], .elf(rare).bin(rare) .exe, .com(rare) Linux executables
.sh .bat Shell script
.exe .exe Mono application, Wine application
.deb .msi Installer package for Debian/Ubuntu releases (Though .deb is much more powerful with native support for dependencies and repos). Note that .deb is actually a .ar archive with a special control file, a special file order, and a different extension.
.rpm .msi Installer package for RedHat/CentOS releases.
.tar.gz, .tar, .gz .zip Compressed files that can contain a program or any other data, like images, documents, etc
.ko .sys Drivers and kernel modules are loaded into the Linux kernel and have more hardware access than other programs.
.sh, .php, .py, etc .bat Linux is capable of running any file that it has an interpreter for. A line at the top of the file called the shebang specifies what interpreter to run the file with. Windows only really runs .bat files in this way.
參考:https://www.quora.com/What-is-the-extension-of-a-executable-file-in-Ubuntu

3.6 vps和vm的差別

VPS(Virtual Private Server,虛拟專用伺服器),是通過硬體虛拟化技術,在實體伺服器之上模拟出來的虛拟伺服器。類似于通過VMware或VirtualBox在電腦上運作一個獨立的作業系統。每個VPS有獨立的記憶體、硬碟和作業系統。您可以像使用獨立伺服器一樣使用VPS,依據自己的需要配置軟體環境。

虛拟主機實質上則是一種軟體服務,隻能支援特定種類的程式如PHP編寫的程式。

要運作一些虛拟主機不支援的程式,如Java程式、可執行程式、NodeJS腳本等,您需要考慮VPS。如果網站通路量非常多,虛拟主機提供的資源不足,您需要考慮VPS。選擇合理的VPS套餐非常重要,VPS并不總是比虛拟主機更好。由于VPS需要運作獨立的作業系統,兩者的資源消耗因素并不完全相同,網站在低配置VPS上的表現可能遜于在虛拟主機上的表現。

虛拟主機使用的一般是共享ip,而vpn有獨立ip。

參考:

https://www.sugarhosts.com/zh-cn/vps/ssd-vps-hosting

https://host.zzidc.com/xnkj/1570.html

3.7 門外漢之PowerShell

win10中有兩種shell:powershell和cmd,對于我這種門外漢來說,都很是陌生。但總之,cmd功能有限,我也隻會部分指令;而powershell竟然有很多指令與linux bash指令相似,對于我這linux初學者來說,用着也很是爽。。這裡暫時記記常用的,會在使用中逐漸更新:

  • ls

    :顯示目錄或檔案
  • pwd

    :顯示目前目錄
  • explorer .

    :于目前目錄打開檔案浏覽器
  • cd

    :改變工作目錄
  • cd ~

    :回到使用者目錄
  • man

    help

    指令或

    -h

    --help

    /?

    選項:檢視指令幫助檔案。(其實沒啥子用)
  • cat:輸出檔案内容
  • notepad filename

    :用記事本打開文本
  • 支援重定向,可用于ssh中傳輸檔案,暫不熟
  • clear

    :清空螢幕
  • echo $Env:PATH

    :列印PATH變量内容。(與cmd不同,cmd中通過

    %PATH%

    可以擷取值)
  • ls env

    :列印全部環境變量

上面的指令基本夠本小白使用了,畢竟有GUI的存在,不用會太多指令。

其餘指令可參考:

Table of Basic PowerShell Commands

3.8 Linux 線程、程序、程序組和會話

一個會話可以含有多個程序組,一個程序組可以含有多個程序,一個程序可以含有多個線程。每種對象都有自己的ID,如線程号,程序号,程序組号和會話号。

一個程序一般隻含有一個線程,且程序号和線程号一緻。

每個程序都屬于一個唯一的程序組。當程序被建立時,它會稱為父程序的程序組的成員。程序組的ID等于程序組的第一個成員,該程序也叫程序組leader。

程序組分為:前台程序組、背景程序組和孤兒程序組(Orphaned process groups)。。一個會話最多隻有一個前台程序組。不屬于前台的程序組就是背景程序組。背景程序組不能從終端(terminal)讀,否則會得到停止信号。孤兒程序組可以屬于前台或背景程序組,如果程序組leader,提前結束,那麼該程序組就是孤兒程序組。程序組leader結束後,所有程序會被發送結束信号,接着發繼續信号,即程序捕獲或忽視結束信号,會收到繼續運作信号。會話leader的程序組總是孤兒程序組。

會話程序組中最多隻能有一個前台程序組,會話程序組是孤兒程序組。會話程序組的iD為會話leader的ID。每個會話都會有一個控制終端(controlling tty),每個程序被建立時會繼承父程序的控制終端,是以會話中所有程序都有屬性指向該控制終端。在會話被建立時,系統會賦于它控制終端。程序中的三種标準流一般都連接配接到控制終端的。當會話leader結束後,結束信号會發往所有前台程序組的程序。背景呢?不知道。是以,程序想要成為守護程序,一緻常駐記憶體,需要解除程序與控制終端的綁定。

其實我了解的不夠,上面的解釋我自己都是懵懵的,很有可能有錯誤。但結合實踐來說,我想說明的是這幾點:

  • jobs應該是對應着這裡的程序組,在shell上可以執行一個jobs,也就是程序組,比如通過重定向連接配接多個程式形成程序組。單個程序也算程序組吧。
  • 每個ssh連接配接就是一個會話,關閉ssh,在ssh上運作的程式基本會停止。
  • 想要常駐記憶體,稱為守護程序,需要解除控制終端。
  • 每個會話都會連接配接一個控制終端,但控制終端對應的具體裝置檔案名或許不知道,但是

    /dev/tty

    永遠指着目前會話的控制終端,對它操作就是了。

    /dev/tty

    是指向目前會話的終端,即使你開多個會話,兩個會話的目前控制終端也是不同的,即tty是動态生成資料的。

參考:https://www.win.tue.nl/~aeb/linux/lk/lk-10.html

https://www.gnu.org/software/libc/manual/html_node/Controlling-Terminal.html

https://unix.stackexchange.com/questions/404555/what-is-the-purpose-of-the-controlling-terminal

3.9 MBR與GPT

零碎知識一 開發二 資料庫三 系統四 網路五 其他六 前端

前446個位元組用于存放開機引導程式,後面是四個分區表的空間。

零碎知識一 開發二 資料庫三 系統四 網路五 其他六 前端

與MBR類似,LBA0前446位元組用于存放開機引導程式,原本的分區表記憶體放特殊标志,标志為GPT分區格式。另外磁盤末還備份了分區資訊。

參考:

Master boot record

GUID Partition Table

3.10 CPU部分知識

cpu中有一對寄存器,一個指向程序的PCB,一個指向含有作業系統指令的表。是以中斷到來時,cpu可以找到核心,然後讓核心知道目前程序,友善作業系統進行程序管理。

cpu中也有寄存器指向頁表,而程序使用的是虛拟位址,當程序通路一個虛拟位址時,由cpu找到頁表然後轉化為實際實體位址。但是頁表需要由作業系統維護,上下文切換時也要維護頁表,指向不同程序的頁表。

參考

http://faculty.salina.k-state.edu/tim/ossg/Introduction/OSworking.html#cpu-response-to-interrupts

how linux works,Brian Ward,1.3.2 Memory Management

3.11 電腦硬體部分知識

  • 一個超線程的核相當于兩個核,但是性能肯定比不上兩個核。
  • 主頻=外頻*倍頻
  • FSB前端總線不等于外頻
  • intel cpu系列:i3、i5、i7、E5。其中,型号後有k的表示可以超頻
  • 主頻:正常工作頻率
  • 睿頻:根據工作情況可自動上漲的頻率
  • 超頻:人為提升的頻率,對cpu傷害大,很多cpu不支援超頻
參考:https://www.zhihu.com/question/31362682

3.12 linux中運作windows軟體

文中給出了三種方法:

  1. Wine

    Wine is a way to run Windows software on Linux, but with no Windows required. Wine is an open-source “Windows compatibility layer” that can run Windows programs directly on your Linux desktop. … Once it’s installed, you can then download .exe files for Windows applications and double-click them to run them with Wine.相容性和性能可能不太好。

  2. 虛拟機:如 VirtualBox, VMware, or Linux’s built-in KVM。甚至還提供将一個應用預設模拟成linux應用的功能。性能開銷比較大,适合運作office、photoshop之類的軟體。
  3. 雙系統:運作大型遊戲的最終解決方案。
參考:https://www.pcworld.com/article/2900497/how-to-run-windows-software-in-linux-everything-you-need-to-know.html

3.13 安裝win10

How to Migrate Windows介紹了兩種方法:遷移整個分區和安裝新系統

3.14 軟體管理

常用指令

* 常用指令及關系

* 

dpkg

: 最底層的指令, 用于安裝,建構,删除和管理Debian包(字尾

.deb

)

* 

apt-get

: 基于

dpkg

指令, 提供更上層的指令. 相當于使用者接口的前端

* 

apt

: 基于

apt-get

,

apt-cache

, 簡單的封裝了下接口, 簡化使用. 用于管理包, 能夠處理包之間的依賴關系然後自動下載下傳.

  • 通常使用

    apt

    , 需要更底層功能時使用

    apt-get

詳細見deepin 程式管理

軟體源

這些指令安裝的軟體來源于軟體源.

在以下兩處可配置軟體源

  • /etc/apt/sources.list

  • /etc/apt/sources.list.d/

    用于添加源到一個單獨的地方, 檔案名一般以

    .list

    結尾

一般配置檔案中一行為一條軟體源, 軟體版本沖突時, 先找到的優先級高. 軟體源可以通過指令添加, 或直接編輯檔案.

這裡添加wine源到deepin中

## Generated by deepin-installer
deb [by-hash=force] http://packages.deepin.com/deepin lion main contrib non-free
#deb-src http://packages.deepin.com/deepin lion main contrib non-free

# set by sidian
deb https://dl.winehq.org/wine-builds/ubuntu/ cosmic main
           

然後重新整理配置到應用中

sudo apt-get update
           

3.15 顯示卡之大黃蜂

見部落格顯示卡之大黃蜂

随着筆記本的使用逐漸增多, 消費者開始嘗試權衡續航和性能之間的問題. 一般筆記本都是雙顯示卡, 即核顯和獨顯. Intel CPU的內建顯示卡能很好的續航, 但不能實作獨立顯示卡的很好的性能. NVIDIA公司于是開發了switchable graphics技術, 允許使用者選擇使用哪種顯示卡(擴充卡), 但隻有1%的使用者才會切換顯示卡. NVIDIA又開發了Optimus技術, 允許自動切換顯示卡的使用, 權衡了續航和性能之間的問題.

打開windows任務管理器, 你會看到筆記本一般情況下使用核顯, 但你玩遊戲時會使用獨顯, 這就是Optimus技術的展現.

但是Optimus技術隻适用于window7及以上版本. 為了在Linux下支援Optimus技術, 出現了大黃蜂方案, 一個模拟Optimus技術的方案.

即NVIDIA不給一個linux版的Optimus技術實作, 開源社群自己寫一個!

據ArchWiki介紹, 在大黃蜂方案中, 獨立顯示卡是按需渲染的, 并傳輸給核顯顯示, 不需要時則關閉獨顯, 由核顯渲染與顯示. 當筆記本通過電池供電時, 則自動關閉獨顯, 以提供續航.

當然, 這樣性能還是比直接隻使用獨顯要低點, 畢竟增加了一層邏輯.
參考
  • The Bumblebee Project Wiki
  • History of the project
  • Bumblebee (簡體中文) archwiki

四 網路

4.1 URL、URN和URI

URL和URN是URI的一種,URN通常指向一個資源但沒有給出他的具體位置和通路方式,而URL通常給出了資源的通路機制和網絡位址。

A URN may be compared to a person’s name, while a URL may be compared to their street address. In other words, a URN identifies an item and a URL provides a method for finding it.

關于這些名詞,經常被混用和用錯,是以在看到這些名詞時需要從上下文辨析他的具體含義。

參考:https://en.wikipedia.org/wiki/Uniform_Resource_Identifier#URLs_and_URNs

4.2 url解析

浏覽器中看似有中文,其實是浏覽器正确解析的結果,如果解析不了,會使用%來表示。

可參考:url編碼

4.3 共享IP和獨立IP的差別

連接配接到網際網路的每台計算機都配置設定了一個唯一的IP位址,以用來互相通信。IP位址是一個32位數字位址,通常是由4個數值從0到255的數字組成,中間有分隔點,例如192.168.0.123。盡管IP位址有數十億之多,但這一數目仍然是有限的。

在虛拟主機行業有兩種類型的IP位址:

  • 獨立IP位址是指一個網站擁有自己單獨的IP位址。擁有獨立IP的網站,無論您輸入其網址或其IP位址,都可以通路該網站。
  • 共享IP位址是指多個網站共享同一IP位址。伺服器可以根據使用者輸入的網址來判斷使用者所請求的網站。在此情況下,直接輸入IP位址将進入一個通用頁面,而不是您所請求的網站。

由于域名注冊量的迅速增長和IP位址的有限性,主機提供商不得不盡量使用共享IP。事實上,數以百計的網站往往共用相同的IP位址。靜态IP主機已不再是業界規範,而且通常花費更多。

參考:https://www.sugarhosts.com/zh-cn/hosting/dedicated-ip

4.4 FTTH、FTTB

光纖入戶(FTTH)使用者需要光纖連接配接光貓裝置才可以使用。

光纖寬帶是在營運商機房通過裝置把電信号調制成光信号,通過光纖傳輸到使用者處。使用者要通過光纖上網,需要使用營運商機房端裝置相配套的光貓裝置,把光信号轉換為使用者電腦等裝置可以使用的電信号,通過網線連接配接使用者裝置上網使用。光纖兩端光口光波長等參數要和營運商機房端裝置對應起來才可以使用。是以,光貓裝置應該選擇營運商提供的。

小區寬帶或樓宇寬帶,光纖到小區或到樓宇(FTTB)。光纖連接配接PON裝置,通過PON裝置分出網線接到使用者家。這種情況,使用者家不需要光貓,電腦直接接到網線,通過撥号上網即可上網。

參考:

https://zhidao.baidu.com/question/511373417.html

4.5 ipv4私有位址

  • A類位址

    10.0.0.0-10.255.255.255

  • B類位址

    172.16.0.0—172.31.255.255

  • C類位址

    192.168.0.0-192.168.255.255

私有位址也是保留位址,還有其他保留位址,用以特殊用途。比如電信給我的寬帶位址就不是公網位址,而是保留位址。。

保留位址:https://en.wikipedia.org/wiki/Reserved_IP_addresses

4.6 md5、SHA-1

md5(message-digest algorithm)資訊摘要算法,是一個計算出128位哈希值的函數。作為加密哈希函數,一個最基本的要求是,兩個不同的資訊,不可能計算出相同的哈希值。然後md5沒有達到要求,但md5仍然被廣泛用于驗證資料的完整性,除非資料被故意修改(哈希值仍不變)。linux中可以使用指令

md5sum

得到資料的md5值。

SHA-1也是類似的加密算法,用于驗證資料完整性。

參考:https://en.wikipedia.org/wiki/MD5

https://www.gohacking.com/what-is-md5-hash/

4.7 X11 vs. VNC

VNC 是抓取圖像傳輸,X11 是抓取繪制圖像的指令傳輸,相同環境下X11得到的畫面是無損的,并可以節約大量帶寬,一種改進的壓縮 X11 轉發方式稱為 NoMachine NX,是 Linux 下最好用的連接配接方式,類似的技術在 Windows 上就是 RDP。

X11 的劣勢似乎是遠端使用者和本地使用者不能共享同一個 sessions,即 X11 登入會啟動一個新的 session,而不是接管目前使用者正在用的那個,是以不能同時操作,甚至看不到對方的操作;RDP 登入使用的是同一個 session,盡管看不到對方的操作;VNC 使用的是同一個,并且遠端和本地可以同時操作。

來源:http://www.ruanyifeng.com/blog/2011/12/ssh_port_forwarding.html 下的評論

4.8 VPN原理

vpn(Virtual Private Network)在公共網絡上,建立一個相距甚遠的虛拟區域網路。原理是,vpn用戶端虛拟一個網卡,vpn服務端虛拟一個NAT裝置(相當于路由器),vpn用戶端與vpn服務端協商,獲得私有ip位址,vpn用戶端的請求通過虛拟網卡發送,經由vpn服務端到達目的地,響應再從vpn服務端傳回給vpn用戶端。

vpn用戶端和服務端之間會加密防止資料被竊取,比如在公共wifi中,即使資料被抓包,由于加密過,資訊也不會被擷取。

vpn服務端相當于虛拟了一個路由器,是以連接配接同一個vpn服務端的所有vpn用戶端處于同一個虛拟區域網路中。

vpn服務端這裡指的是伺服器中的服務,它的虛拟NAT連接配接在伺服器的網卡上,是以,vpn相當于在伺服器上建立了一個虛拟網絡,可以通路服務的私有網絡,但是伺服器的私有網絡不能通路vpn的私有網絡。

參考:

vpn工作原理和搭建方法

4.9 socks5,shadowsocks

Socket Secure(SOCKS)是一個用代理伺服器在用戶端和服務端交換資料的網絡協定。socks5版本額外提供了授權功能。socks5代理原理簡單的說,就是一個socks代理作為你的裝置和網絡的一個橋梁。你發給其他伺服器(如web)的請求,會被socks代理(位于本地)轉發給代理伺服器,由代理伺服器代替使用者向其他伺服器送出請求。比如chrome浏覽器(支援socks5協定)就可以設定代理,設定後,會将請求交由代理處理。

但是本地發往代理伺服器的資料包并不會被加密,是以安全性并不高,但是速度較快。

shadowsocks是一個基于socks5開源項目,在将流量傳給shadowsocks伺服器時會加密流量,但是由于shadowsocks的主要目的為了繞行大陸的流量審查,是以加密主要是為了混淆流量達到繞行大陸封鎖手段的目的。

vpn也可以用于翻牆,但是由于它的實作機制,會将你所有的流量傳給vpn伺服器,而shadowsocks可以有選擇性的代理流量,如國内流量不走代理,國外流量走代理。但是vpn有更安全的加密方式,使你的資料不會被竊取,保證了你的隐私。

shadowsocks是一個代理,需要軟體支援socks5和設定代理。windows上,很多軟體,如基于chrome核心的浏覽器會自動使用系統代理(即IE浏覽器的代理設定),是以ss用戶端隻要設定好系統代理,那麼就可以為很多軟體代理流量;而在android環境中,ss會依靠vpn來為所有應用代理流量。如果應用不自動使用系統代理,但提供設定功能,可以選擇手動設定代理。如果應用不支援設定仍要代理,可以參考方案:如何用Shadowsocks®代理非浏覽器軟體、遊戲

參考:

What Is Socks5 Proxy?

Shadowsocks vs. VPNs — Everything You Need to Know

SOCKS wiki

shadowsocks實作原理

4.10 GFW工作原理

Great Firewall(GFW),即長城防火牆,通過很多技術來監控和過濾網際網路内容,主要是在國内與國外的出口網關出進行一系列封鎖手段。如下所示:

  1. 關鍵字過濾:如http是明文傳播的,可以輕易擷取關鍵資訊,然後過濾請求。
    如果是https呢?還有其他手段。
  2. DNS劫持和污染:國内營運商的DNS解析域名伺服器會劫持非法DNS解析,傳回錯誤ip或幹脆不解析,更可惡的是通過DNS劫持來插入自己的廣告。國内僅存的F、I兩個根域名DNS鏡像,由于DNS污染嚴重,已被與國外斷開連接配接。而我們上網時通過DCHP自動配置的就是運作商的DNS解析伺服器,可以手動設定DNS為公共DNS達到繞過DNS劫持、污染的目的。
    通過公共DNS和https能夠通路google、youtube嗎?不能,還有手段。
  3. IP位址封鎖:直接将已知的google、youtube等網站對應的ip位址封鎖。這樣即使你能夠DNS解析到對應ip也不能通路。
  4. 特定端口封鎖:封鎖ip的缺點很大,因為ipv4緊張,大多都是通過NAT共用一個ip位址,是以采用更“溫柔”的手段封鎖端口。
    試想,在香港或日本租用一個vps,而很多vps共用一個ipv4位址。因為一個人搭建了梯子,導緻ip被封,那麼其他vps搭建的網站就不能被通路了,很不合理。題外話,,我在國外的伺服器經常被封端口。。原因你曉得。。
  5. SSL連接配接阻斷:SSL協定,位于OSI七層網絡模型中的展示層,用于加密傳輸。目前的翻牆手段都使用加密協定繞過防火牆,交由境外伺服器代理轉發,達到通路國外手段的目的。但是由于建立加密通道的流量特征太過明顯,GFW可以識别到它,然後阻斷。目前OpenVPN就被阻斷了導緻無法使用,而shadowsocks通過固定秘鑰的方式放棄複雜的身份認證機制,來僞裝普通的tcp流量,達到混淆、繞過GFW的目的。據說GFW正在更新二代,使用人工智能識别shadowsocks流量特征??!!
  6. 随機丢包:萬能的方案,,對于任何流量,一視同仁,随機丢棄,導緻國外通路變慢。
    對于搭建梯子而言,可以使用一些加速方案,改進底層協定(如tcp)。如BBR,BBR改進了擁塞控制算法,大大提高了發包速度,加速了梯子,但也間接的加大了整個網絡的丢包率,造成整個網絡的抖動性加劇。

參考:

GFW

https://blog.csdn.net/eerstar/article/details/47866703

4.11 AAA

authentication(認證), authorization(授權), and accounting(會計)(AAA)指的是控制對資源通路、實施政策、審計和提供收費服務所需的資訊的過程。

  • authentication(認證):用于識别使用者,通常使用姓名和密碼認證。
  • authorization(授權):是一個實施政策的過程,即何種活動、資源或服務的類型或品質被允許。通常授權發生在認證的過程中,即一旦被認證,就确認了他的權力。
  • accounting(會計):統計會話資料和使用資訊,用于授權控制、付費、資料分析、資源利用和容量規劃活動。

參考:

authentication, authorization, and accounting (AAA)

4.12 127.0.0.1 and 0.0.0.0

127.0.0.0/24

是loopback address,通過該位址與本地主機建立連接配接。這些位址功能都一樣,但最常用的是

127.0.0.1

,即localhost。可把環路位址看做另一塊網卡的ip,外部主機沒有辦法通路該網卡,是以監聽環路位址的服務隻能内部通路。

0.0.0.0 是一個不可路由的元位址,用于指定無效的、未知的或不适用的目标。在路由器的環境中,隻預設路由;在伺服器的環境中,指伺服器的所有位址。比如主機有兩個ip位址,監聽0.0.0.0就相當于同時監聽了這兩個位址。

參考:What is the Difference Between 127.0.0.1 and 0.0.0.0?

五 其他

5.1 大端小端

  • Big-Endian:具體是指最高位位元組在位址最低位、最低位位元組在位址最高位的順序來存儲資料
  • Little-Endian:使用相反的順序來儲存資料。

5.2 CRLF(回車換行)

術語CRLF指Carriage Return (ASCII 13, \r)和Line Feed (ASCII 10, \n)。

例子:

  • 在Windows中同時支援CRLF和LF形式的換行符;
  • 在Linux/UNIX中僅支援LF形式的換行符;
  • http協定中,使用CRLF作為換行符;

注意點:

  • 目前,很多編輯器都能很好的處理這兩種換行方式,除了bash script。。
  • git在commit時,最好設定自動轉化為LF形式的換行符
  • 其他情況下可以放心用。
參考:https://github.com/Microsoft/WSL/issues/2318#issuecomment-444531035

5.3 ctrl+F和wrap-around

在使用ctrl+F搜尋時會出現wrap-around或wrap-search供選擇,它的意思是從光标處開始搜尋,直到文檔底部,如何還繼續尋找,則從文檔開始出尋找,直到原先光标的地方,也就是全文檔查找。如果不啟用,則查到底部則結束。

Wrap-around means the program will search for the text you specify beginning at the place in the document where you are currently positioned, and will continue past the end, to the beginning of the document back to your current position. In other words, wrap-around search will search the entire document irrespective of where you may be positioned within it.

If you only want to search to the end of the document, turn off wrap-around search.

5.4 度量機關

1

s

=103

ms

(毫秒)=106

μs

(微秒)=109

ns

(納秒)

5.5 UTC和GMT

UTC和GMT差别不大,但是還是有點小差別的:

Some computer standards are defined in terms of Greenwich mean time (GMT), which is equivalent to universal time (UT). GMT is the “civil” name for the standard; UT is the “scientific” name for the same standard. The distinction between UTC and UT is that UTC is based on an atomic clock and UT is based on astronomical observations, which for all practical purposes is an invisibly fine hair to split. Because the earth’s rotation is not uniform (it slows down and speeds up in complicated ways), UT does not always flow uniformly. Leap seconds are introduced as needed into UTC so as to keep UTC within 0.9 seconds of UT1, which is a version of UT with certain corrections applied. There are other time and date systems as well; for example, the time scale used by the satellite-based global positioning system (GPS) is synchronized to UTC but is not adjusted for leap seconds
參考:https://docs.oracle.com/javase/8/docs/api/java/util/Date.html

5.6 單位元組編碼

ANSI>ISO-8859-1>ASCII

編碼方式和編碼集是不同概念。

已發表部落格,參考:字元編碼

5.7 閏年

閏年2月有29天,否則28天。能夠被4整除不被400整除的年份為閏年。

5.8 chrome app vs. extension

  • app:It basically says that there are two kinds of apps: hosted and packaged. Hosted apps are glorified bookmarks. But packaged apps provide you with a somewhat best of both worlds features- of both extensions and apps.
  • Extensions: of course extend the core browser functionality providing little or no additional UI apart from what is already provided by chrome.

相關資料:Difference between Chrome Apps and Extensions

chrome app vs extension

5.9 原、反、補碼

負數的補碼:從原碼右邊開始,找到第一個不為1的0,開始全部取反(包括0)。

5.10 N/A

N/A或n/a是英語“不适用”(Not applicable)等類似單詞的縮寫,常可在各種表格中看到。

N/A比較多用在填寫表格的時候,表示“本欄目(對我)不适用”。在沒有東西可填寫,但空格也不允許此項留白的時候,可以寫N/A。在英語國家,也會用n/a或者n.a.來表達,都是同一個意思。

參考:N/A wiki

5.11 備案

域名備案其實就是對網站備案。沒有備案的域名照樣可以解析,畢竟阿裡、騰訊隻是域名注冊商,但要進行實名認證(ICANN規定的)。那麼國家為了防止非法網站,都做了什麼?

  • 雲伺服器上,會不定期掃描80端口上的流量,由于http是明文傳輸,是以可以獲得域名。如果發現域名沒有備案,會阻止流量的通過。
  • 在家庭寬帶上,電信、移動等通信營運商會封鎖80,443端口,即使你進行端口映射,也不能被通路。

如果想非法建站,沒有備案下我們可以做什麼?

  • 在雲伺服器上,我們可以在非80端口建站;或使用https(443)協定,因為該協定是加密傳輸的;或使用ip通路,而不是域名。
  • 在家庭寬帶上,我們可以使用内網穿透工具,如ngrok,來繞過80、443端口。ngrok本質上起着流量轉發的作用。
  • 使用國外的雲主機,域名無所謂國内外,除了cn。

然而這些手段還是不要用,終究是不正規的,并且域名備案真的簡單。那個人域名(網站)備案需要注意的什麼?過程如何?

  1. 準備身份證、家鄉的電話卡
  2. 在營運商上的待備案系統上進行備案,填寫對應資訊
  3. 電話、位址填家鄉的電話卡和位址,否則你需要去公安準備暫住證。
  4. 網站名稱最好反應網站内容,并且限制很多,請百度。(阿裡從業人員電話核查時幫我改正了)
  5. 填寫後讓阿裡郵寄幕布,接收後拍照上傳。
  6. 等待阿裡的電話核查
  7. 等待管理局的稽核,可能有電話核查。
  8. 備案成功,然後在網站首頁按照要求寫上備案号。

大緻應該這些,大緻要花上一個星期。

5.12 safe write

一些編輯器中(如vim),會使用safe write來更新檔案。過程:與簡單的更新檔案相反,safe write會寫入一個臨時檔案,然後删除源檔案,将臨時檔案名改成源檔案名。

這樣會對監聽檔案修改的程式造成問題。

參考:What is the advantage of “safe write” in JetBrains IntelliJ?

5.13 遠端連接配接

win10自帶了遠端連接配接工具,比qq遠端好用多了。按

win

,然後輸入

快速助手

,或者

quick assist

5.14 架構模式(MVVM、MVC)

架構模式的最終目标都是将不同的邏輯分離出來,即邏輯分層,降低項目的複雜性。如業務邏輯與展示層邏輯的分離,某個層邏輯的變動不會造成其他層的變動。

比如後端的MVC(Model-View-Controller)架構中:

  • 資料邏輯(Model):dao、service層處理資料并轉化為View可用的Model;
  • 互動邏輯(Controller):controller層處理前端的請求
  • 渲染邏輯(View):将Model渲染成使用者可見的視圖(html),但前後端分離後,可見View的使用者成了前端程式員,是以通常是将Model渲染成Json。
    渲染邏輯基本不用自己寫邏輯,都有現成的庫了,如spring mvc會幫你處理好。

又比如前端的MVVM(Model-View-ViewModel)架構:

  • 資料邏輯(Model):資料擷取、處理
  • 互動邏輯(ViewModel):處理使用者與View的互動。
  • 渲染邏輯(View):将model渲染到View中。。

為啥MVC和MVVM的目标一樣,卻又不用的名稱呢?可能是大家覺得互動邏輯處理方式不一樣,如資料綁定,是以就以名字來區分吧。。

比如說,前端架構Vue基本實作了MVVM,它的ViewModel提供了資料綁定的功能,Model改變時,View則自動改變,無需手動修改View的内容。這樣使得程式員更多的專注于元件邏輯的編寫,程式的複雜性大大降低。

5.15 對項目的了解

建立項目後會産生一個含有配置檔案的目錄,如(idea中的

.idea

)。該檔案含有檔案編碼、編譯器、運作配置等等。

建立檔案時會選擇項目類型,其實就是選擇項目模闆,為你生成一些必要的項目檔案(或目錄結構來着)。類似于vue的腳手架。

配置運作時配置時,需要選擇運作模闆,其實就是根據你配置的參數運作配置好的指令罷了。如果運作模闆與你的項目類型不對應,則跑步起來,即特定運作模闆才能識别你的項目類型。

配置好後,這些配置都會存在于項目的配置檔案中。在一些前端項目中,幾乎可以不需要idea這樣的內建開發環境,比如Vue,是以vue項目的産生、編譯、運作都很簡單。

vue想與idea內建,也很簡單,項目生産、編譯、運作都可靠指令,隻需要idea裝上插件,能夠識别vue檔案并給出提示即可。

六 前端

6.1 判斷頁面是否處于微信環境

//判斷是否是微信浏覽器的函數
function isWeiXin(){
  //window.navigator.userAgent屬性包含了浏覽器類型、版本、作業系統類型、浏覽器引擎類型等資訊,這個屬性可以用來判斷浏覽器類型
  var ua = window.navigator.userAgent.toLowerCase();
  //通過正規表達式比對ua中是否含有MicroMessenger字元串
  if(ua.match(/MicroMessenger/i) == 'micromessenger'){
  return true;
  }else{
  return false;
  }
}
           

6.2 關閉浏覽器緩存

針對像chrome一樣内置DevTools的浏覽器,打開網絡,勾選便是,如下圖所示:

零碎知識一 開發二 資料庫三 系統四 網路五 其他六 前端

注意!要一直儲存棄用緩存的效果,需要一直開着DevTools。

6.3 代碼設定斷點

在需要中斷的地方加上

debugger

6.4 CommonJS vs. AMD

CommonJS和AMD都是關于如果定義子產品和它們依賴的規格(specification)。

  • 由于CommonJS是同步加載的,是以實作适合用在服務端,如Node.js實作了它。
  • AMD支援異步子產品加載,适合用在浏覽器端JS開發,RequireJS實作它。

但不是說AMD不能用在服務端,CommonJS不能用在浏覽器端,詳細見參考。

小白見解:盡管ECMAScript是解析式語言,當項目增大時,分子產品開發是是否有必要的,無論是服務端(Node.js)還是浏覽器端(JavaScript)。在服務端可用CommonJS(Node.js以實作并提供了),浏覽器端可用RequireJS。
小白見解2:未出現子產品架構時,常使用匿名函數分隔作用域,來模拟子產品;現在ES6提供了子產品的功能(import、export關鍵字),感覺可以遠離架構了。。
參考:
  • Relation between CommonJS, AMD and RequireJS?
  • CommonJS vs AMD vs RequireJS vs ES6 Modules

6.5 Gulp vs. Grunt vs. Webpack

這裡直接引入stackoverflow的答案,題目:Difference between build tools and task runners

The main difference is, just as the name suggests:

A task-runner like gulp or grunt is used to define different tasks, define how they are called, in which order they are executed and what dependencies they have. You can configure virtually anything as a task, as long as - in this case - the Node API allows it.

A build tool or bundler like webpack or rollup basically executes a single task: building/bundling. You can use plugins to tell them how to do their job, but you have little control over the order of execution nor can you run specific subsets of the process (like: only transpile the code but don’t bundle) in the way a task-runner allows.

Do task-runners and build systems/bundlers fit together? Yes, they do! There are plugins that connect those systems, like gulp-webpack. Eitherway, you can always use the Node API from inside your tasks to do whatever you like.

小白見解:這個工具運作在Node.js的環境下,盡管Node.js是服務端腳本,但常用做開發環境,開發前端項目
參考:
  • Difference between build tools and task runners
  • GULP VS GRUNT VS WEBPACK: COMPARISON OF BUILD TOOLS / TASK RUNNERS
深度閱讀:
  • Webpack是答案嗎

6.6 Vue、React、Angular

以前都是使用JQuery開發元件,由JQuery主要是用于操控DOM的,并不是為元件而誕生。于是出現了Vue、React、Angular,能夠更好的進行元件開發。

6.7 Bootstrap、element ui、vant

都是前端UI解決方案,使用它可以快速搭建網站。element ui和vant都是基于vue編寫的,适合于vue一起使用。element ui适合于桌面端ui,vant适合移動端ui。