先後端的劃分,能夠簡單地理解爲凡是運行在用戶設備上的技術均可以稱爲前端技術( 好比 HTML / CSS / JS,甚至移動設備的 Obj-C / Swift );然後端的做用就是負責將這些東西封裝在 HTTP 的數據包中而後經過網絡傳送到前端。固然除了這些前端文件,後端還有一個更重要的職能,即保存和提供用戶數據,好比移動端常見的 JSON 就是目前最流行的在後端和前端之間傳輸的一個文件格式。javascript
前端用於給用戶展現信息,而且提交一些查詢的信息,前端經過網絡將須要查詢信息發送給後端,後端進行編程邏輯處理,去數據庫查詢咱們須要的信息,後端查詢到須要的信息,又經過網絡返回給前端,前端經過編程邏輯展現在咱們面前。這就是一個完整的迴路。php
以 Web 端爲例,在瀏覽器輸入一個網址後,瀏覽器向服務器發送了一個 HTTP 請求;服務器經過一個 HTTP 響應,把顯示這個網頁所須要的資源傳回給了瀏覽器。而須要在瀏覽器中執行的技術,HTML / CSS / Javascript 等就叫作前端;須要在服務器端執行的、一般咱們看不到技術就叫作後端。靜態的網站的內容都是些簡單的靜態網頁直接存儲在服務器上,能夠很是容易地達到很是驚人的訪問量。可是動態網站由於是動態的,也就是說每次用戶訪問一個頁面,服務器要執行數據庫查詢,啓動模板,執行業務邏輯到最終生成一個你所看到的網頁,這一切都是動態即時生成的。前端
後端服務器java
後端的任務實際上就是向前端提供須要顯示網頁和 APP 內容的數據,多是 HTML,也多是JSON 數據,也能夠是音視頻或者 PDF 文件。簡單的來劃分,一個服務器包含3個部分:
一、 HTTP 服務器
二、 應用服務器
三、 數據庫
HTTP 服務器的惟一任務就是把須要返回給客戶端的資源文件封裝在 HTTP 數據包裏,這個資源有多是它後面的應用服務器動態生成的,也有多是保存在硬盤上的靜態文件。這是全部後端程序都必須有的,也是直接和咱們的瀏覽器通訊,返回給咱們數據的程序。它的做用就是把它後面的編程語言生成的各類 HTML/CSS/Javascript,打包成一個 HTTP 請求,而後再封裝到一個 TCP/IP 的數據包裏發回給咱們。而最經常使用的兩個 HTTP 服務器叫作 Apach 和 Nginx。
應用服務器就是一般意義上所說的碼農負責的部分。他們的職責就是生成前端須要的HTML/CSS/JS 交給瀏覽器。node
前端語言python
網頁前端的編程語言,和須要掌握的相關知識:linux
HTML/CSS ----->負責網頁的頁面樣式和現實的內容程序員
JavaScript -----> 和上面的HTML/CSS一塊兒使用,負責網頁的點擊交互等相應和邏輯運算chrome
CSS3 ----->是上面CSS的完善和升級,增長了不少好用的屬性,好比動畫等。數據庫
HTML5 ----->上面HTML的完善和升級,增長了新的標籤,統一了標準。
jQuery ----->JavaScript最經常使用的開發框架,讓JavaScript開發簡單容易。
AngularJS ----->google收購的一款優秀的前端JS框架,
Node.js ----->Node.js是一個基於Chrome JavaScript運行時創建的平臺,它是對Google V8引擎進行了封裝,使得V8在非瀏覽器環境下運行得更好。
Bootstrap-----> 是基於 HTML、CSS、JavaScript 的來自 前端開發框架,他來自Twitter,也是目前很受歡迎的的Web 開發框架。
WebApp -----> 基於Web的系統和應用,簡單理解,就是開發了一個像應用程序同樣的網頁,只須要在瀏覽器中打開頁面,就會等於打開了一個app,如今很典型的WebApp於微信公衆平臺綁定,在關注的公衆號頁面裏,打開這個公衆號的網站,能夠充值訂餐等等,就是一款WebApp
移動端編程
Android 主要編程語言Java,如今不少App會結合WebApp開發一款手機應用。
iOS 主要編程語言:Objective-C,和蘋果官方行推出的Swift編程語言。
後端
後端涉及的編程語言和知識點:
PHP-----> 是一種通用開源腳本語言,主要適用於Web開發。主要實現服務器的邏輯,以及實現數據庫的增刪改查。
JAVA -----> 一種能夠撰寫跨平臺應用程序的面向對象的程序設計語言,能夠看出,兩大特色,跨平臺,面向對象。引用很普遍,能夠最爲後端服務器開發語言,也是Android開發語言。
Linux ----->一套無償使用和自由傳播的類Unix操做系統,如今不少公司服務器,都使用的是linux操做系統,Linux一塊兒良好的性能,豐富的免費軟件資源,以及良好的穩定性,在服務器操做系統上,有不可撼動的地位。
Python ----->是一種面向對象、解釋型計算機程序設計語言,Python是表明簡單主義思想的語言。閱讀一個良好的Python程序就感受像是在讀英語同樣。它使你可以專一於解決問題而不是去搞明白語言自己。和php同樣,大部分將其做爲Web服務器開發。
C ----->一種能以簡易的方式編譯、處理低級存儲器、產生少許的機器碼以及不須要任何運行環境支持便能運行的編程語言。很古老,很經典,很實用的語言。計算機專業和理工專業不可或缺的一門編程課程。優勢是編譯文件小,消耗小,執行速度極快。
C++ ----->是在C語言的基礎上開發的一種面向對象編程語言。
Go ----->谷歌2009發佈的第二款開源編程語言,Go編譯的程序能夠媲美C或C++代碼的速度;因此是一個比較年輕的語言,能夠被用於網絡服務器、存儲系統和數據庫中。谷歌對該語言寄予厚望。
C# ----->是微軟公司發佈的一種面向對象的、運行於.NET Framework之上的高級程序設計語言,C#看起來與Java有着驚人的類似,它是微軟公司.NET windows網絡框架的主角。
後端語言比較
一、 .net/java
龐大,複雜。但 Java 的優勢就是適合處理特別大的數據量,若是你的項目會很快實現大爆發,須要處理海量的請求,那麼 Java 是一個不錯的選擇。
二、 PHP
能夠快速上手,相比其餘語言,能夠更快的爲應用添加各類新功能。固然,可維護性就另當別論了。
三、 Ruby
很是接近天然語言,基本上即便不懂編程,也能看明白 70% 或 80%。04 年出現了一個用 Ruby 編寫的 Web 開發框架 Ruby on Rails,當時的效果是很是震撼的,之前須要一個團隊才能搞定的事情,使用 Ruby on Rails 後 1 我的就能夠勝任了,因此 Ruby on Rails 在極短的時間內就成爲了 Ruby 的代名詞,也成爲了新手學習 Web 開發的不二選擇,可是 Ruby 語言也並不是十全十美,快的同時,他的最大短板就是性能。Twitter 最先就是使用 Ruby on Rails 開發的,可是隨着用戶數的逐步增加,Twitter 的宕機開始變得很是頻繁,後來他們無可奈何將整個系統從 Ruby 遷移到到了一個從 Java 派生出來的語言 Scala。
四、 node.js
簡單來講,能夠把 node.js 理解爲跑在服務器上的 javascript,再直白一點,就是一個跑在服務器上的瀏覽器,由於 node.js 最先就是從 chrome 瀏覽器的Javascript 引擎 V8 中剝離出來的。相比 Ruby,Node.js 程序能夠得到更高的併發性能,這在一些高併發的場景下(好比羣聊,多人協做等)會頗有優點。
五、 其它(python,closure 等)
六、無後端(leancloud)
無後端編程是最近的一個新趨勢,但她並不是說是真的沒有後端,而只是把後端交給一些第三方的雲平臺,好比 Leancloud,Firebase 等。若是你開發一個手機 App,這樣的好處就是你能夠在早期沒有後端程序員的狀況下快速開工,像Leancloud 這樣的雲平臺已經能夠勝任大部分的應用場景,若是後期業務邏輯複雜以後再尋找合適的後端工程師遷移也不遲。
七、最強編程語言 Lisp
若是要評選一個最強的編程語言,該是哪一個呢?答案就是Lisp。爲何是 Lisp?Lisp 的做者在很早之前就從數學的層面總結了一個完美的編程語言應該具有的 9 種能力,而 Lisp 就是爲了配合他的這個理論而產生出來的語言。Hacker News 是由 YC 的創始人 Paul Graham 開發的,而 Paul Graham 自己就是一個 Lisp 程序員,他爲了開發 Hacker News,專門發明了一種新語言叫作 Arc,但由於它是基於 Lisp 的,因此也被歸爲了 Lisp 的方言之一。
數據庫
後端是須要去數據庫查詢須要的數據的,那麼咱們的任何引用,或者一個平臺,都不可或缺的要去查詢數據庫的數據。好比,咱們日常訪問的大部分網站都是須要登陸操做的,登陸以後咱們看到的就是隻和本身相關的那部份內容。這些用戶信息是保存在什麼地方的呢?這就須要用到數據庫。關於數據庫,表明性的有兩個:
一、MySQL
二、MongoDB
MySQL 是最經常使用的結構化數據庫,也是大多數創業公司的選擇。爲何是結構化的?就是說它的表的結構是固定的,好比咱們常見的 User 表在 MySQL 中就是這樣的:
id name email password
1 一元 y@modao.io $2a$10$ZxNhLyDTdagtUc...
2 產品集小妹 xiaomei@36kr.com $2a$10$zK7TnBXYYFz...
若是咱們須要取得一條用戶記錄來檢查他輸入的密碼是否正確,這時咱們就須要使用 SQL,SQL 就是結構化查詢語言。
簡單來講,SQL 數據庫保存的是結構化數據,NOSQL 數據庫則能夠保存非結構化數據。舉個例子,還拿上面的用戶表來舉例,若是咱們如今想要給產品集小妹增長一些額外的屬性,好比她給某個產品點贊能夠效果 x2,那麼若是是 SQL 數據庫,咱們就須要給數據庫增長一個新的字段來保存這個屬性:
id name email x2
1 一元 y@modao.io false
2 產品集小妹 xiaomei@36kr.com true
可是若是是 MongoDB 這樣的 NOSQL 數據庫,咱們就不須要給全部用戶都增長一個x2的屬性,只須要給產品集小妹單獨增長就能夠了,NOSQL 中保存到數據是以下這個樣子的:
{id: ‘1’, name: ‘一元’, email: 'y@modao.io’, password: ‘…’}
{id: ‘1’, name: ‘產品集小妹’, email: 'xiaomei@36kr.com’, password: ‘…’, x2: true}
Cookie 和 Session
服務器要處理成千上萬用戶的請求,那麼他是如何區分每一個用戶,並返回給每一個用戶他所須要的內容的 ?這就要涉及到 Cookie 和 Session。咱們能夠將 Cookie 理解爲是服務器給每一個用戶分配的惟一 ID,這個 ID 由用戶瀏覽器保存,而 Session 則是服務器爲了維護這個會話在服務器端保存的與 cookie 對應的用戶數據。
移動開發
移動端和瀏覽器的區別就在於,大部分 App,咱們打開的一瞬間,就已經看到了它的界面,而不用再去向服務器來拿顯示界面的 HTML 等文件。因此移動端,開發原生應用所運用到的技術(好比 Objective C,swift)就至關於前端的 HTML,只不過它是直接保存在應用本地的。這樣就產生了一個問題:如何來獲取應用數據?若是是網頁應用,咱們能夠直接將數據包含在HTML 中一併反饋給瀏覽器;可是對於移動應用就須要有一個專門的協議來傳送應用須要的數據,這就是 JSON。
移動應用的前端技術,目前來講主要有如下三種:
一、原生
二、混合式
三、 HTML5
HTML5 必經要通過瀏覽器這個中間層,因此在性能上多少會有些損失,因此若是你的應用對性能特別敏感,原生就會是比較好的選擇;對於普通的性能要求沒那麼嚴格的應用來講,HTML5是徹底能夠知足的。而若是已經有了一個移動端的網站,這種狀況下混合式就會是一個比較好的選擇,它能夠最大程度的利用已有的資源。若是說你是從頭開發一個移動應用,而且這個應用對用戶體驗的要求也不是特別嚴格,那麼 HTML5 就會是一個很好的選擇,HTML5 移動應用比較顯著的應用就是 Dailycost 。
若是說開發一個原生應用須要 4-6 周,那麼一樣功能的應用若是咱們把其中的一部分用 HTML來實現,那麼可能就只須要 3-4 周的時間,可是若是咱們所有使用 HTML ,可能就只須要1-2 周。
引用:http://www.jianshu.com/p/b69d2da9ffb5
https://www.douban.com/group/topic/74387970/