後端都要學習什麼?

想做後端,要學習什麼知識

PHP,還有別的嗎


後端處理的問題多而雜, 想要成為一個全面的後端, 你需要掌握以下領域的知識

1 後端開發語言

包括但不限於(php, python, java, scala, go, ruby) 之一。 能夠使用一門或者數門語言構造大型應用。

2 運維

了解 (ansible, salt, puppet)等自動化運維技術, 了解docker, 熟練掌握shell腳本處理線上問題

3 安全

知道各種安全攻擊方式(xss, csrf, sql注入) 代碼實現能夠規避常見的安全漏洞, 處理各種網路攻擊事件

4 資料庫

知道常見的資料庫的優化以及運維,能夠分析sql並且調優使之滿足性能

5 網路編程

了解linux的網路模型epoll, 熟練掌握http, tcp/ip協議,並且能夠通過抓包方式debug。 熟練掌握linux, 能夠在高兵法場景下通過優化內核解決問題。

6 大數據

了解 (hadoop/storn/spark)技術棧, 能夠使用大數據技術棧解決常見的大數據問題

7 演算法和數據結構

知道常規的演算法和數據結構,通過分析代碼能了解架構的計算複雜度和性能,並針對性做出優化

8 機器學習演算法

知道常見的機器學習演算法,能夠使用機器學習和深度學習解決一些人工智慧問題,比如聊天機器人, 反spam, 機器推薦等

9 搜索引擎

掌握elasticsearch solr等開源搜索引擎,能夠搭建搜索引擎實現各種搜索以及排序任務

綜上所述, 同學你未來的道路還很長 :)


謝邀。

1.Unix/Linux

後端必須掌握的操作系統。個人建議平時可以完全使用Ubuntu Desktop作為日常使用的操作系統。附帶的,需要對操作系統本身有足夠的認識和了解。

建議的書籍:《Linux編程》《Unix環境高級編程》

2.C/C++

雖然現在後端各種腳本語言盛行,但是C/C++作為基礎中的基礎,仍然是後端程序員需要掌握的技能之一。當然初入此坑可以暫時不用,但隨著技能樹日益增長,沒有這項技能將寸步難行。

建議書籍:《C/C++ Primer》《Effective C++》《Pointers on C》等等

3.網路編程

不廢話,必備技能,這都不懂還當什麼後端!

建議書籍:《Unix網路編程》《TCP/IP協議詳解》

有了上面三項做基礎,後面就可以開始進入選擇:

4.腳本語言

PHP、Python、Ruby之類的挑一到兩個,深入學習。

5.資料庫

這個不多說了,無論是關係型資料庫還是非關係型資料庫,都是必須要吃透牢牢掌握的東西

我一直認為後端編程都是以上面5個方面為核心擴展開的,無論做哪方面的後端開發,歸根到底都是這5個方向的延伸。


我不說別的。只分享一些我的經驗。

後端包括很多職業:DBA(資料庫維護優化專家),Developer(程序猿),Architect(構架師),Scrum master及類似(敏捷開發專家),Project Manager(產品狗),MaintenanceIT support(通訊和伺服器相關)

註:沒有任何排名,高低混雜,專業混雜。部分職業有跨界。比如領導一般兼任architect和scrum master。嚴格來講,PM可以不是後端,而是marketing或者business Development的人,餓不,狗。

按程序猿內功而言:

關係型資料庫,領域驅動設計(Domain-Driven Design),設計模式Design Pattern,演算法Algorithm,面向對象編程OOP(SOLID),線程安全,事件驅動,測試驅動開發,依賴注入框架,等等。

按技術棧劃分:

http://ASP.net,LAMP,MEAN,Ruby on Rails,Single Page Application一大堆。

熱點辭彙:NoSQL,大數據,雲計算。

通訊相關:ssl,SPDY,http,tcp,udp

資料庫相關:列式資料庫,關係型資料庫,bigtable,搜索引擎(Solr,elasticsearch),鍵值對資料庫……

按語言劃分:PHP,Ruby,Python,Java, Go, Erlang, Rust……太多了,開啟聖戰吧,騷年們。

按系統劃分:

Windows系列(非主流),CoreOS+Docker,RedHat/Fedora/CentOS, Debain/Ubuntu, Arch, BSD系列.....

按IDE劃分:類編輯器:Sublime Text,VisualStudio Code,Notepad++,IDE類: Visual Studio,JetBrain系列,Eclipse(老,丑,卡),NetBeans……極客范:Vim+Emacs

備份相關:rsync,replication,cluster,備份工具。

日至相關:傳統的:日誌的目的地,等級,文件拆分,網站監控,downtime 提醒。新潮的:ELK框架等

還有好多好多啊,什麼負載均衡啊,什麼合理分層啊……buzzword滿天飛。

把這些名詞都搞懂需要多久呢?精通又需要多久呢?

題外話:

前端後端都是坑,誰也別看不起誰。完全意義上的全棧是不可能的,別做夢了。

總有windows的開發者來Challenge我,說win平台如何如何。我簡單分享一下我說它非主流的基本想法,不然就成誹謗了。我本身目前也是做win開發的。

win平台與開源平台技術棧上有什麼本質區別么?我覺得並沒有。依賴包管理,你用npm,gem,我用Nuget,你有bash,我有PowerShell,啥啥不缺。那差別在哪裡?理念!微軟在老鮑手中喜歡用自己強大的技術實力去找尋最佳解決方案然後推送給所有人。Cool?牛逼,然而註定要失敗!

開源世界是一千個人有一千種實現方式,技術競市場擇,最好的技術永遠只適合最適用它的那種特殊用例。傳統資料庫沒法包打天下,所以才誕生了各種各樣的NoSQL以應對不同的使用場景。

以ORM為例:

ORM就有ActiveRecord, DataMapper等多種模式,無可計數的解決方案可供選擇。同時期微軟是SQL2linq, Entity Framework,對SQL2Linq不太了解,後面這個基本就是DataMapper,不同時期的用法差別很大,然而微軟永遠比市面上最潮流的技術落後一些。

在vs2012時期微軟又嘗試推廣過Repository Pattern+Unit of work,後來到MVC5的時候又不了了之。可見不是你開發人員多你說話就牛逼,同樣也是要經過市場檢驗的。Aurelia 的作者就覺得Angular2的設計太複雜了,跳出來單幹,也沒啥不好的。

當然當然,你說不是可以用Dapper么?不是也有NHibernate么?這些都可以讓微軟通過nuget來擁抱開源世界。這些都是微軟轉向開放的表現,值得肯定。話鋒一轉,有開源世界可以控制的也有開源世界不能控制的。比如一代Windows,一代VS,一代framework,一代IIS,一代文檔……舊微軟信奉安迪比爾定律,用軟體促進硬體市場,不想要 IE7 了?買 win7 啊!然而沒有人想每過幾年就被你折騰一次。我們希望的是滾動升級,Ever-Green!希望的是彼此解耦,靈活拆換!你的 Edge 再好,我也只用Chrome,謝謝!

你可以選擇做微軟羽翼下的小小開發者,不需要在技術的海洋里抉擇,只需一切跟隨微軟最新的指南就好。當然也可以做開源世界的弄潮兒,在CoreOS和Fedora之間來回切換,嘗試下Docker,操作下NoSQL,玩玩Python,試試Ruby。試試複雜而高效的vim,也可以選擇用http://atom.io的智能編輯器。放棄WinForm,選擇QT或electron開發最潮的跨平台桌面應用。可以用兩分鐘學會一套幾乎不會過時的命令行指令也可以在若干個不同的GUI版本的文檔間迷茫。可以選擇保守也可以選擇潮流,最新的技術和思想永遠發生在開源世界,因為每天全世界的開發者都在做著各種各樣的技術試驗。

Most importantly, It is up to you. "Free" is not only regarding the pricing.


謝邀,問題很寬泛,我只說自己的吧,後端語言我用C#,框架使用的是http://ASP.Net MVC,設計思想是採用領域驅動設計,資料庫用的是MongoDB。


說下我的經歷吧,

入職老牌互聯網,當時最核心的產品部門打扎,開發職位。

半年後進入小公司開始混(個人的高速成長期)

目前掌握的僅能:

1,研發(基本吧,產品總得有人來做)

2,調優(主要是Mysql調優,在符合業務需求的情況下儘可能提高TPS)

3,運維(小公司不會像大公司一樣還標配運維,通常後端兼任運維職能)

擴展下:

研發:php入行,選個好框架(推薦Yaf),然後研發過程中多注意下性能,多用php本身的函數來解決需求,php本身函數豐富,而且都是C擴展,性能非常可靠。

調優:這個我實在不知道該放到研發還是運維,所以就單獨拿出來說。因為其實對於伺服器性能的調優本身兩邊都需要進行,一是研發時注意,二是各個軟體(主要是DB)的配置項。我的調優很粗暴,用阿里雲的壓力測試(耗費了公司一些錢財,罪過罪過)每次壓一分到5分鐘,然後看看瓶頸在哪裡,把配置項全部列出來,肉眼+自行判斷調整哪個參數看看能不能提升性能(233),我也會在代碼中把每個核心部分的消耗時間打入日誌,來判斷到底該進行哪裡的優化。

運維:主要分三部分,

  • 快速部署:雖然是小公司,但是老闆有些資源,所以可以預計上線第一波的壓力不小,如果產品良好的情況下壓力只能會越來越大,所以要求如果感覺到系統有壓力後,需要快速進行橫向擴展系統,這裡我選用的Puppet,理由很簡單:老牌,使用廣泛,社區強大。
  • 監控報警:這是運維的眼睛,我選用的zabbix,理由跟上面一樣:老牌,使用廣泛,社區強大。
  • 日誌採集:因為是集群的原因,看日誌不方便,最開始是用nfs來收集,後來隨著日誌越來越分散,日誌越來越大,沒用多久就被我拋棄了,然後在朋友的推薦下使用ELK進行日誌採集和查看。理由只是因為沒有別的更好選擇(朋友強烈推薦這個,其他的都是沒有啥強大社區,這個看著更靠譜點)

作為一個入行不久就需要搭建出這麼多系統來說,我覺得穩定最重要,所以在軟體選擇上,我更傾向於有強大社區,出了各種各樣問題的情況下能通過Google找到答案。而且通常這樣的產品也早已被驗證過可用性和穩定性,不然早被淘汰了。

講真,還有個最重要的就是學習能力,你首先得熱愛解決問題,因為通常根據不同的產品,需要不同的東西來解決需求,這時候就需要去找解決辦法,學習,然後應用。


問題太籠統了,是web後端還是IC後端?


其實後端的那些技術去做你就會了,linux用來用去就那幾個命令,tcpip什麼的要是有框架你碰都碰不到,數據結構演算法要學好倒是真的,這是你以後提升的基礎


給排名第一的點了反對。。。

@李丹陽 你的意思是只有C++才叫後端咯?

——————————

1 需要學習任意一門後端語言(包括但不限於java php nodejs ruby python等)

2 學習http協議、計算機網路


是指伺服器開發方面的嗎?是的話我認為需要掌握(1)linux相關知識:這個可以看看鳥哥的教程和APUE(2)c/c++:看《C++ primer》和C++標準庫(3)數據結構與演算法:看演算法導論和《數據結構與演算法C語言描述》(4)計算機網路:看UNP(5)OS:看課本即可


題主提到了php,就以php為例吧。

1.掌握基本的數據結構和演算法。保證你寫的代碼不會效率太差拖垮整個伺服器

2.掌握資料庫相關的知識,寫sql的時候一定要謹慎,會分析複雜度,保證你的sql語句不會效率太差拖垮資料庫

3.會一些基本的設計模式,面向對象的思想是一定要有的,這樣代碼就不會太差以至於沒法維護

4.伺服器相關的也盡量了解一些,最起碼代碼跑不起來的時候,知道去哪裡看伺服器運行日誌

5.會寫文檔,注意編碼規範

6.這一點才是和php相關的,了解一點php底層知識,包括它的虛擬機,以及它的運行模式。知道它和java,c++的區別到底在哪裡。什麼是php能做的,什麼是它不能做或者不好做的。靈活組合,揚長避短


想必你剛接觸後端,並且想做 web 相關的東西,別學 PHP 啦,看看 Python 或 Ruby 吧。

開始做後端 web,可以隨便挑個簡單的框架學學啦,比如這個:Welcome | Flask (A Python Microframework)

PS: 後端知識面非常廣,以知乎為例,一個語言(基礎),一個框架(了解url機制,模板機制,視圖機制),資料庫,緩存,長連接,http協議,推薦,搜索,隊列,消息,性能調優,等等。

Good Luck!


全棧工程師:HTML5開發前端,Java,PHP,NodeJs等技術開發後端。

PHP技術依次學習: 前端的基礎知識(html div+css ),php基礎知識(面向過程)及mysql資料庫 ,javascript、jQuery的相關知識等,php高級部分(面向對象)及pdo數據處理,php特級部分(框架的應用)等。

投入時間和精力,以興趣來驅動學習。不管是在機構學習還是自學,在整個的學習過程中貫穿著代碼實戰。看的代碼是別人的,動手寫出來的是自己的。


我覺得要寫的話應當從後端的實現角度去考慮:

最基本的:

1。熟悉一門後台語言,高級語法,設計模式之類的。

2。熟悉linux系統;

3。熟悉資料庫,設計及優化;

4。網路編程 http, ip/tcp;

5。網路安全;

6。演算法是參雜在其中的;

最近運維也越來越和後台開始組合起來了;必要的時候你可能連前端的活也幹了;

新手的話一開始的話是大概了解一下語言,先簡單把基本的架構搭建起來;然後後面考慮不斷優化(資料庫方面,網路通訊方面,及安全性能方面);

其實很多培訓機構已經把後台要學些什麼列舉出來了;可以自個人去看看;


最重要的資料庫編程


首先學習計算機語言吧,英語能能力好點學的刺激,比較快點,先試試xuexijava 語言,然後試著學習c語言


有java .net python go ruby node


學後端,先學運維再說;


推薦閱讀:

「學得好卻總是考不好」是怎麼回事?
iphone 上英語學習 軟體的軟體?
想進入人工智慧領域,該學習哪些東西?
有什麼對高二學生決定學習口譯的建議?

TAG:學習 | 後端技術 | 編程 | 伺服器 | 後端工程師 |