node.js 初體驗

node.js 初體驗

2011-10-31 22:56 by 聶微東,?174545?閱讀,?118?評論,?收藏,?編輯

PS: ~ 此篇文章的進階內容在為《Nodejs初階之express》

  ~ 2014/09/24 更新《Express 4.X 啟航指南》

  歡迎閱讀和評論:)

?

  最近寫的文章收到許多朋友的反饋,感謝大家的支持和建議,讓我對堅持寫博客充滿熱情,一個月一篇文章確實有點少,所以以后盡力多做分享,做好的分享,希望能對朋友們有用。

  到新公司的這段時間學到了很多新東西,有好多東西需要去總結去探索,不過事情得一件一件來,今天咱們先從Node開始。注:以后出現的Node即node.js。

先搞點前戲熱熱場 - 為什么寫這篇文章:

  1.前段時間單位有新項目啟動,服務端要做的工作不多也不算麻煩,就是處理一些中間層的服務,而且我們團隊里面個個都會JavaScript,領導就決定試試服務器端的JavaScript,結果本人有幸被派去研究了幾天Node,懷著雞凍的心情開始了node.js的篇章,這篇文章也就是為這幾天研究的總結。

  2.一個JavaScript工程師如果沒聽過node.js那么我想你是不是錯過了什么,每個優秀的前端工程師都有必要去了解后臺處理流程,那么如果又能從JavaScript出發,豈不是一件很美妙的事么。

  3.互聯網的火熱使得JavaScript風光無限,且服務端的JavaScript也并不是什么新技術了,相關的框架也有不少,只是node.js的成功讓他爆發式的出現在我們的視線中,讓很多前端工程師看到了從前端寫到后端的另一種實現希望。注:node.js 是一個允許開發人員使用 JavaScript 語言編寫服務器端代碼的框架。

  4.今年8月曾在某大公司最后一輪(第五輪)的面試被問到Node.js的問題,相對應的回答那是相當之糟糕,結果怎樣你們懂的,感覺這個問題是導致沒有通過的關鍵點之一...那家公司是我在讀大學的時候就無比向往的公司,現在回想起那次經歷和過程,談不上惋惜,畢竟我真的盡力了 -?其實這篇文章更多的也是為了完成自己一個小小的心結...好吧,又扯遠了。

  5.歡迎各種轉載,不過請注明出處,謝謝。

?

Node是個啥?

  寫個東西還是盡量面面俱到吧,所以有關基本概念的東西我也從網上選擇性的拿了些下來,有些地方針對自己的理解有所改動,對這些概念性的東西有過了解的可選擇跳過這段。

  1.Node 是一個服務器端 JavaScript 解釋器,可是真的以為JavaScript不錯的同學學習Node就能輕松拿下,那么你就錯了,總結:水深不深我還不知道,不過確實不淺。

  2.Node?的目標是幫助程序員構建高度可伸縮的應用程序,編寫能夠處理數萬條同時連接到一個物理機的連接代碼。處理高并發和異步I/O是Node受到開發人員的關注的原因之一。

  3.Node 本身運行Google V8 JavaScript引擎,所以速度和性能非常好,看chrome就知道,而且Node對其封裝的同時還改進了其處理二進制數據的能力。因此,Node不僅僅簡單的使用了V8,還對其進行了優化,使其在各種環境下更加給力。(什么是V8 JavaScript 引擎?請“百度知道”)

  4.第三方的擴展和模塊在Node的使用中起到重要的作用。下面也會介紹下載npm,npm就是模塊的管理工具,用它安裝各種 Node 的軟件包(如express,redis等)并發布自己為Node寫的軟件包?。

?

安裝Node

  在這簡單說說在window7和linux兩種環境下安裝Node。安裝的時候一定要注意Python的版本,多次因為Python版本的問題安裝失敗,建議2.6+的版本,低版本會出現Node安裝錯誤,查詢Python版本可在終端中輸入:pyhton -v?

  1.先介紹linux下的安裝吧,Node在Linux環境下的安裝和使用都非常方便,建議在Linux下運行Node,^_^...我使用的是Ubuntu11.04

   a.安裝依賴包:50-100kb/s大概每個包一分鐘就能下載安裝完成

  sudo apt-get install g++ curl libssl-dev apache2-utils 
  sudo apt-get install git-core

   b.在終端一步步運行一下命令:

  git clone git://github.com/joyent/node.git   
  cd node
  ./configure
  make
  sudo make install

  安裝順利的話到這一步Node就算安裝成功了,2M的網絡用了共計12分鐘。

  注:如果不用git下載也可以直接下載源碼,不過這樣下載安裝需要注意Node版本問題。使用git下載安裝是最方便的,所以推薦之。

?

  2.在Windows下使用Cygwin安裝Node,這個方式不太推薦,因為真的需要較長時間和較好的人品。我的系統是 win7旗艦版

  Cygwin是一個在windows平臺上運行的unix模擬環境,下載地址:http://cygwin.com/setup.exe。

  下載好Cygwin后開始安裝,步驟:

   a.選擇下載的來源 - Install from Internet

   b.選擇下載安裝的根目錄

   c.選擇下載文件所存放的目錄

   d.選擇連接的方式

   e.選擇下載的網站?-?http://mirrors.163.com/cygwin

   f.麻煩就麻煩在這步,考驗人品的時候到了。需要的下載安裝時間不確定,反正需要比較長的時間(超過20分鐘),偶爾會出現安裝失敗的情況。單擊一下各個程序包前面的旋轉箭頭圖標選擇你想要的版本,選中時會出現了"x"號表示已經選中了該程序包。選擇需要下載的程序包:

復制代碼
  Devel包:
    gcc-g++: C++ compiler
    gcc-mingw-g++: Mingw32 support headers and libraries for GCC C++
    gcc4-g++: G++ subpackage
    git: Fast Version Control System – core files
    make: The GNU version of the ‘make’ utility
    openssl-devel: The OpenSSL development environment
    pkg-config: A utility used to retrieve information about installed libraries
    zlib-devel: The zlib compression/decompression library (development)
  Editor包:vim: Vi IMproved – enhanced vi editor
  Python包:把Default切換成install狀態即可
  Web包:
    wget: Utility to retrieve files from the WWW via HTTP and FTP
    curl: Multi-protocol file transfer command-line tool
復制代碼

  上個截圖,以下載zlib-devel為例:

    cygwin例子

  其上幾步走完才算把環境搭建完成,可是現在還沒有到安裝Node,還需要在Cywgin的ASH模式下執行rebaseall,步驟如下:

   a. cmd命令行

   b. 進入cygwin安裝目錄下的bin子目錄

   c. 運行ash進入shell模式

   d.?./rebaseall -v

   e.?沒有錯誤就關閉命令行窗口
  好了,現在到下載安裝Node了,啟動Cygwin.exe后輸入:

復制代碼
  $ wget http://nodejs.org/dist/node-v0.4.12.tar.gz
  $ tar xf node-v0.4.12.tar.gz
  $ cd node-v0.4.12
  $ ./configure
  $ make
  $ make install
復制代碼

?

  3.直接下載node.exe文件

  nodejs.org下載較慢所以我在網盤上傳了一個,下載地址:http://www.everbox.com/f/VhyL6EiGF5Lm3ZSRx85caFDIA5

  聽說有不太穩定的問題,不過你假如只是想先在windows下了解Node,個人感覺這個方法比你裝個Cygwin好很多。

?

  注:原本不太想寫安裝Node這段,可是為了這篇文章的全面性還是寫了,沒想到一寫就是那么長一段了...茶幾了

?

“Hello World” - 為什么每次見到這句心情都會小激動,不解...

  首先,創建個hello.js的文件,在文件中copy如下代碼:

復制代碼
  var http = require('http');
  http.createServer(function (req, res) {
   res.writeHead(200, {'Content-Type': 'text/plain'});
   res.end('Hello World\n');
  }).listen(1337, "127.0.0.1");
  console.log('Server running at http://127.0.0.1:1337/');
復制代碼

  代碼邏輯:

   a. 全局方法require()是用來導入模塊的,一般直接把 require() 方法的返回值賦值給一個變量,在 JavaScript 代碼中直接使用此變量即可?。require("http") 就是加載系統預置的 http 模塊

   b.?http.createServer 是模塊的方法,目的就是創建并返回一個新的web server對象,并且給服務綁定一個回調,用以處理請求。

   c. 通過 http.listen() 方法就可以讓該 HTTP 服務器在特定端口監聽。

   d. console.log就不用多說了,了解firebug的都應該知道,Node實現了這個方法。

    注:?想了解具體細節請查看文檔?cnodejs.org/cman/all.html#http.createServer

  接著運行Node服務器,執行hello.js代碼,成功啟動會看見console.log()中的文本。有圖有真相:

  

  

?

npm的下載和使用

  除Node本身提供的API外,現在有不少第三方模塊可極大的提高開發效率,npm就是Node的軟件包管理器,可以用它安裝所需軟件包并發布自己為nodejs寫的軟件包。官網地址:npmjs.org

  安裝只需要在終端寫入一行代碼:    

  curl http://npmjs.org/install.sh | sh

  npm安裝node擴展包同樣是一行代碼:  

  npm install <包名>    //例:npm install express

  注:如果安裝模塊的過程中報域名錯誤的話,請清空緩存 >npm cache clean 或重啟計算機即可。

  

理解Node的模塊概念

  在Node中,不同的功能組件被劃分成不同的模塊。應用可以根據自己的需要來選擇使用合適的模塊。每個模塊都會暴露一些公共的方法或屬性。模塊的使用者直接使用這些方法或屬性即可,對于內部的實現細節就可以不用了解。除了Node本身提供的API外,開發人員也可以利用這個機制來將應用拆分成多個模塊,以提高代碼的可復用性。

  1.如何使用模塊?

  在Node中使用模塊是非常方便的,在 JavaScript 代碼中可以直接使用全局函數 require() 來加載一個模塊。

  在剛剛”Hello World"的例子中,require("http") 可以加載系統預置的 http 模塊;模塊名稱以 "./" 開始的,如 require("./myModule.js") 用來加載與當前 JavaScript 文件同一目錄下的 myModule.js 模塊。

  2.自己如何開發模塊?

  剛剛介紹使用require()導入模塊的時候,模塊名稱以 "./" 開始的這種,就是自己開發的模塊文件。需要注意的就是JS文件的系統路徑。

  代碼中封裝了模塊的內部處理邏輯,一個模塊一般都會暴露一些公開的方法或屬性給其他的人使用。模塊的內部代碼需要把這些方法或屬性給暴露出來。

  3.來一套簡單的例子。先創建一個模塊文件如myModule.js,就一行代碼

  console.log('Hi Darren.')

  然后創建一個test.js文件,導入這個JS文件,執行node看到結果

  現在Node社區中已有不少第三方的模塊,希望能有更多人通過學習Node,加入到這個大家庭中,為Node社區來添磚加瓦。先謝謝之,咱們繼續。  

  4.來一個深點的例子。這個例子中將會針對 私有和共有 進行介紹。先創建一個myModule.js,代碼如下:

  var name = "Darren";
  this.location = "Beijing";
  this.showLog = function(){
   console.log('Hi Darren.')
  };

  代碼中出現了三種類型,分別是: 私用屬性,共有屬性和共有方法,再創建一個test.js,執行Node

  結果高亮的地方很清楚的告訴我們,私有方法我們在模塊以外是取不到的,所以是undefined。共有屬性和共有方法的聲明需要在前面加上 this 關鍵字。

?

Node能做什么和它的優勢

  Node核心思想:  1.非阻塞;  2.單線程;  3.事件驅動

  在目前的web應用中,客戶端和服務器端之間有些交互可以認為是基于事件的,那么AJAX就是頁面及時響應的關鍵。每次發送一個請求時(不管請求的數據多么小),都會在網絡里走一個來回。服務器必須針對這個請求作出響應,通常是開辟一個新的進程。那么越多用戶訪問這個頁面,所發起的請求個數就會越來越多,就會出現內存溢出、邏輯交錯帶來的沖突、網絡癱瘓、系統崩潰這些問題。

  Node的目標是提供一種構建可伸縮的網絡應用的方案,在hello world例子中,服務器可以同時處理很多客戶端連接。

  Node和操作系統有一種約定,如果創建了新的鏈接,操作系統就將通知Node,然后進入休眠。如果有人創建了新的鏈接,那么它(Node)執行一個回調,每一個鏈接只占用了非常小的(內存)堆棧開銷。   ?

  舉一個簡單的異步調用的例子,把test.js和myMydule.js準備好了,^_^。把以下代碼拷貝到test.js中并執行:

復制代碼
  var fs = require('fs');
  fs.readFile('./myModule.js', function (err, data) {
    if (err) throw err;
    console.log('successfully');
  });
  console.log('async');
復制代碼

  所謂的異步,大家應該都能想得到運行時會先打先顯示"async",再顯示"successfully"。

  Node是無阻塞的,新請求到達服務器時,不需要為這個請求單獨作什么事情。Node僅僅是在那里等待請求的發生,有請求就處理請求。

  Node更擅長處理體積小的請求以及基于事件的I/O。

  Node不僅僅是做一個Web服務的框架,它可以做更多,比如它可以做Socket服務,可以做比方說基于文件的,然后基于像一些比方說可以有子進程,然后內部的,它是一個很完整的事件機制,包括一些異步非注射的解決方案,而不僅僅局限在網絡一層。同時它可能,即使作為一個Web服務來說,它也提供了更多可以深入這個服務內核、核心的一些功能,比方說Node使用的Http Agent,這塊就是它可以更深入這個服務內核來去做一些功能。

?

Node事件流概念

  因為Node 采用的是事件驅動的模式,其中的很多模塊都會產生各種不同的事件,可由模塊來添加事件處理方法,所有能夠產生事件的對象都是事件模塊中的 EventEmitter 類的實例。代碼是全世界通用的語言,所以我們還是用代碼說話:

復制代碼
  var events = require("events"); 
  var emitter = new events.EventEmitter();
  emitter.on("myEvent", function(msg) {
    console.log(msg);
  });
  emitter.emit("myEvent", "Hello World.");
復制代碼

  簡單的分析這段:

   1. 使用require()方法添加了events模塊并把返回值賦給了一個變量

   2.?new events.EventEmitter()這句創建了一個事件觸發器,也就是所謂的事件模塊中的 EventEmitter 類的實例

   3.?on(event, listener)用來為某個事件 event 添加事件處理方法監聽器

   4.?emit(event, [arg1], [arg2], [...]) 方法用來產生事件。以提供的參數作為監聽器函數的參數,順序執行監聽器列表中的每個監聽器函數。

?

  EventEmitter 類中的方法都與事件的產生和處理相關:

   1.?addListener(event, listener) 和 on(event, listener) 這兩個方法都是將一個監聽器添加到指定事件的監聽器數組的末尾

   2.?once(event, listener) 這個方法為事件為添加一次性的監聽器。該監聽器在事件第一次觸發時執行,過后將被移除

   3.?removeListener(event, listener) 該方法用來將監聽器從指定事件的監聽器數組中移除出去

   4.?emit(event, [arg1], [arg2], [...]) 剛剛提到過了。

  在Node中,存在各式各樣不同的數據流,Stream(流)是一個由不同對象實現的抽象接口。例如請求HTTP服務器的request是一個流,類似于stdout(標準輸出);包括文件系統、HTTP 請求和響應、以及 TCP/UDP 連接等。流可以是可讀的,可寫的,或者既可讀又可寫。所有流都是EventEmitter的實例,因此可以產生各種不同的事件。

  可讀流主要會產生以下事件:

  • data ? 當讀取到流中的數據時,此事件被觸發
  • end ? 當流中沒有數據可讀時,此事件被觸發
  • error ? 當讀取數據出現錯誤時,此事件被觸發
  • close ? 當流被關閉時,,此事件被觸發,可是并不是所有流都會觸發這個事件。(例如,一個連接進入的HTTP request流就不會觸發'close'事件。)

  還有一種比較特殊的?fd 事件,當在流中接收到一個文件描述符時觸發此事件。只有UNIX流支持這個功能,其他類型的流均不會觸發此事件。

  相關詳細文檔:http://cnodejs.org/cman/all.html#events_

?

強大的File System 文件系統模塊

  Node?中的 fs 模塊用來對本地文件系統進行操作。文件的I/O是由標準POSIX函數封裝而成。需要使用require('fs')訪問這個模塊。所有的方法都提供了異步和同步兩種方式。

  fs 模塊中提供的方法可以用來執行基本的文件操作,包括讀、寫、重命名、創建和刪除目錄以及獲取文件元數據等。每個操作文件的方法都有同步和異步兩個版本。

  異步操作的版本都會使用一個回調方法作為最后一個參數。當操作完成的時候,該回調方法會被調用。而回調方法的第一個參數總是保留為操作時可能出現的異常。如果操作正確成功,則第一個參數的值是 null 或 undefined 。

  同步操作的版本的方法名稱則是在對應的異步方法之后加上一個 Sync 作為后綴。比如異步的 rename() 方法的同步版本是 renameSync() 。下面列出來了 fs 模塊中的一些常用方法,都只介紹異步操作的版本。

  test.js和myModule.js文件準備好了木?把下面這段代碼copy到test.js中執行一次

  var fs = require('fs');
  fs.unlink('./myModule.js', function (err) {
    if (err) throw err;
    console.log('successfully deleted myModule.js');
  });

  如果沒有報error,那么myModule.js就被刪除了,就是這么簡單

  

  這只是一個簡單的例子,感興趣的話自己去多多嘗試,實踐出真理。由于篇幅原因就不多舉例了。^_^

?

學習Node的總結:

  1.對于一個linux的命令和shell知識幾乎為零的我來說,這段時間又學到了不少關于linux知識;vim真是一個強大的編輯器,不用鼠標的感覺真的很好;而且有一點對我來說很重要,在linux下編程很cool,尤其是在團隊中都是使用windows的,裝裝更健康^_^。

  2.理解了服務端JavaScript的一個成功框架-Node,以及它的一些優勢和使用的方式,這篇文章就是最好的總結,當然,這只會是一個開始

  3.對于沒有進入那么夢想的公司其實是有那么點遺憾,不過生活就應該要這樣,有波折有起伏,這正是我需要并且期待的...那么新的生活還是要繼續,做自己的舵手,把握好自己的方向,過去的就讓它過去吧。

?

一些想對大伙說的話:

  1. 在這我得打擊一部分人的積極性。假如你對后臺技術不夠了解或者沒接觸過服務端語言,不知道I/O這些知識,沒有后臺處理流程這種概念,那么......Node并不是一門適合入門的服務端技術。為什么這么說:

   a.重點就是中文實例少,文章少,想系統的學習會比較麻煩,所以在使用過程中總有一種不成熟的感覺,當然主要還是因為我對它不熟悉所造成的。國內使用Node的公司確實不多,當然國外還是有不少了,從cnodejs.org截了一個圖:

    

   b.對沒有經驗的朋友來說node其實并不好上手,從最簡單“Hello world”就可以看出來(各種運行環境和安裝細節的了解都得費點功夫),不要以jQuery庫為比較,所處理的事物不同,學習的成本也不同 - 所以不太建議作為新手入門的服務端技術,如果想學習一門服務端語言PHP和Python都是不錯的選擇,因為:書多 例子多?框架多 上手簡單 容易理解 搭建方便...

   c.以上都是我個人善意的建議,由于水平有限,請大家多多指教,希望嘴下留情。

  2. 關于Node的書寫規范和具體技巧本人就不獻丑了,自己寫Node的代碼也不多,不過面向對象的編程思想在哪都是好使的。

  3.?希望這篇文章能對大家學習Node有用,如果覺得這文章也算用心,請勞駕點右下角的推薦。

?

?推薦幾個學習Node的網址:
  http://nodejs.org/?  

  http://cnodejs.org/?  由淘寶人建立的社區,內有Node中文文檔

  http://www.oschina.net/p/nodejs/

  http://www.ibm.com/developerworks/cn/opensource/os-nodejs/index.html

  注:最終領導決定放棄Node而使用Python,可是這不會影響我對Node的喜愛。我說過,這篇文章只會是一個開始。

轉載于:https://www.cnblogs.com/u0mo5/p/4574527.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/375877.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/375877.shtml
英文地址,請注明出處:http://en.pswp.cn/news/375877.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Qt之模型/視圖(實時更新數據)

上兩節簡單介紹了Qt中對于模型/視圖的編程&#xff0c;大部分助手里說的很清楚了&#xff0c;現在就開始實戰部分吧&#xff01; 在實際應用中&#xff0c;視圖展示的數據往往并非一成不變的&#xff0c;那么如何實時更新成了一個很重要的問題&#xff01;功能&#xff1a;&am…

android 動態生成fragment,Android動態加載fragment(fragment復用)

【實例簡介】Android動態加載fragment(fragment復用)【實例截圖】【核心代碼】fm_reuse└── fm_reuse├── AndroidManifest.xml├── bin│ ├── AndroidManifest.xml│ ├── classes│ │ └── com│ │ └── example│ │ └── fm_reuse│ …

Linux內核3.0移植并基于Initramfs根文件系統啟動

Linux內核移植與啟動 Target borad&#xff1a;FL2440 Bootloader&#xff1a;U-boot-2010.09 交叉編譯器&#xff1a;buildroot-2012.08 1.linux內核基礎知識 首先&#xff0c;磨刀不誤砍柴工。在動手進行linux內核移植之前&#xff0c;我們有必要對linux內核進行一定的了解。…

操作系統上機作業--實現shell(2)(多進程)

sh2.c: 實現shell程序&#xff0c;要求在第1版的基礎上&#xff0c;添加如下功能 ? 實現文件重定向 ? $ echo hello >log ? $ cat log ? Hello 實現思路&#xff1a; 和sh1.c相比&#xff0c;主要是修改了cmd函數的實現過程。通過循環找出重定向符號"&g…

當泛型方法推斷,擴展方法遇到泛型類型in/out時。。。

說到泛型方法&#xff0c;這個是.net 2.0的時候引入的一個重要功能&#xff0c;c#2.0也對此作了非常好的支持&#xff0c;可以不需要顯試的聲明泛型類型&#xff0c;讓編譯器自動推斷&#xff0c;例如&#xff1a; 1 void F<T>(T value){} 2 //... 3 int i 0; 4 F(i); 此…

AOP相關

實現AOP的技術&#xff0c;主要分為兩大類&#xff1a;一是采用動態代理技術&#xff0c;利用截取消息的方式&#xff0c;對該消息進行裝飾&#xff0c;以取代原有對象行為的執行&#xff1b;二是采用靜態織入的方式&#xff0c;引入特定的語法創建“方面”&#xff0c;從而使得…

操作系統上機作業--根據萊布尼茲級數計算PI(1)(多線程)

pi1.c: 使用2個線程根據萊布尼茲級數計算PI ? 萊布尼茲級數公式: 1 - 1/3 1/5 - 1/7 1/9 - ... PI/4 ? 主線程創建1個輔助線程 ? 主線程計算級數的前半部分 ? 輔助線程計算級數的后半部分 ? 主線程等待輔助線程運行結束后,將前半部分和后半部分相加實現思路&#xff1…

四種途徑將HTML5 web應用變成android應用

作為下一代的網頁語言&#xff0c;HTML5擁有很多讓人期待已久的新特性。HTML5的優勢之一在于能夠實現跨平臺游戲編碼移植&#xff0c;現在已經有很多公司在移動設備上使用HTML5技術。隨著HTML5跨平臺支持的不斷增強和智能手機的迅速普&#xff0c;HTML5技術有著非常好的發展前景…

操作系統上機作業--根據萊布尼茲級數計算PI(2)(多線程)

pi2.c: 使用N個線程根據萊布尼茲級數計算PI ? 與上一題類似&#xff0c;但本題更加通用化&#xff0c;能適應N個核心&#xff0c;需要使用線程參數來實現 ? 主線程創建N個輔助線程 ? 每個輔助線程計算一部分任務&#xff0c;并將結果返回 ? 主線程等待N個輔助線程…

html 16進制 轉換成字符串,js 字符串和16進制的互相轉換

字符串轉16進制function strToHexCharCode(str) {if(str "")return "";var hexCharCode [];hexCharCode.push("0x");for(var i 0; i < str.length; i) {hexCharCode.push((str.charCodeAt(i)).toString(16));}return hexCharCode.join(&qu…

數組以及冒泡排序

數組 1、概念&#xff1a;可以幫我一次聲明多個同類型的變量&#xff0c;這些變量再內存中是連續存儲的。 2、聲明語法&#xff1a;數據類型[] 數組名 new 數據類型[數組長度] 數組長度&#xff1a;一次要聲明的同類型的變量個數。是在定義這個數組的時候就確定了&#xf…

jQuery觸發a標簽的點擊事件無效

1 <a id"workFrame" href"pages/work.html" target"FrameBox">首頁</a> 2 3 $("#workFrame").tigger("click"); 上述的代碼&#xff0c;其實挺正常的&#xff0c;但是怎么也觸發不了a標簽的cli…

操作系統上機作業--多線程排序

sort.c: 多線程排序 ? 主線程創建一個輔助線程 ? 主線程使用選擇排序算法對數組的前半部分排序 ? 輔助線程使用選擇排序算法對數組的后半部分排序 ? 主線程等待輔助線程運行結束后,使用歸并排序算法歸并數組的前半部分和后半部分 實現思路&#xff1a; ARRAY_CO…

jdk5下載鏈接

查看jdk版本 java -versionJDK下載 最新版本http://www.oracle.com/technetwork/java/javase/downloads/index.htmlJDK下載 版本1.5.22http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-javase5-419410.html#jdk-1.5.0_22-oth-JPR JDK…

html的細節優化,網站頁面優化細節詳解

原標題&#xff1a;網站頁面優化細節詳解SEO頁面優化是繼SEO結構優化之后&#xff0c;另一個重要優化地方;頁面標題在每個頁面中的關鍵位置&#xff0c;出現目標關鍵詞&#xff0c;這是我們做頁面優化的基礎思路&#xff0c;關鍵詞位置&#xff0c;都有哪些呢?第一個是關鍵位置…

突擊優化算法!

Matlab語言可以與C/C語言轉換或調用。 Matlab語句&#xff1a;load name 把name中文件的所有變量載入到工作空間中。save name 保存工作空間的變量到name.mat中。 cholesky分解把一個正定矩陣分為一個下三角矩陣和它轉置矩陣的乘積。 兩種創立符號函數的方法&#xff1a;sym函數…

操作系統上機作業--使用條件變量解決生產者、計算者、消費者問題(多線程)

pc1.c: 使用條件變量解決生產者、計算者、消費者問題 /* ? 系統中有3個線程&#xff1a;生產者、計算者、消費者 ? 系統中有2個容量為4的緩沖區&#xff1a;buffer1、buffer2 ? 生產者生產a、b、c、‘d、e、f、g、h八個字符&#xff0c;放入到buffer1 ? 計算者從b…

淘寶代碼和html區別,taobao.html

taobao主題市場女裝 /男裝 /內衣 >鞋靴 /箱包 /配件 >童裝玩具 /孕產 /用品 >家電 /數碼 /手機 >女裝 /男裝 /內衣 >鞋靴 /箱包 /配件 >童裝玩具 /孕產 /用品 >家電 /數碼 /手機 >女裝 /男裝 /內衣 >鞋靴 /箱包 /配件 >童裝玩具 /孕產 /用品 >…

程序各個段text,data,bss,stack,heap

網上找了一堆資料學習一下,了解這些, 有助于規化程序結構,優化代碼; 使用gcc編譯出來的程序,用size可以查看程序結構和大小, 如 1: #size hello 2: Text data bss dec hex filename 3: 778 200 4 982 3D6 hello 所以一個可執行的程序文件,結構分三部分: .text 代碼段,用來存…

讓 keil MDK 支持C99

打開options fot target-> C/C 在 Misc Controls 中添加 --c99. 轉載于:https://www.cnblogs.com/svchao/p/4585034.html