職業規劃——後臺開發

1、後臺開發&服務器端開發php

  • 開發範圍:服務器端開發> 後臺開發
  • 後臺開發:指的是運行在服務器的程序,好比java/php/.net等等,你只須要會寫Java/php等代碼就行。
  • 服務器端開發:多是其餘的高性能數據處理,分部式應用等等,這就須要有linux, c ,tcp/ip等知識才行。
 
2、關於騰訊校招的後臺開發說明

  去年實習生招聘的時候面試了騰訊的後臺開發。這裏的後臺開發指的就是Linux上的C++編程。首先澄清一點,不少大學生(好比我之前)對後臺開發的誤解,一般人們說前端後臺,後臺就立刻聯想到web後臺,java、php和各類web框架橫飛的既視感。因此當時我看到招聘後臺工程師,技能要求是C++也盡是狐疑。html

  其實web後臺屬於後臺,但後臺(姑且稱之爲大後臺)卻不僅有web後臺。二者是包含關係。從網絡協議的角度分析,web後臺聚焦的是HTTP,而通常C++後臺更多聚焦的是TCP。web後臺能夠看做是一個大後臺最靠前的東西,它解析了HTTP請求,而後可能層層轉發給了後面整個分佈式系統的許多組件,而後調用他們的服務。公司內部服務器主機之間絕大部分是經過TCP來通訊額。具體來講C++後臺關注的是socket,也就是網絡編程,還有併發的知識(固然了C++也能夠作web後臺的:CGI 逃)。前端

  由於大公司的server通常都是Linux,因此應聘C++後臺,必定要會Linux,這裏的會Linux操做大體分爲兩類:java

  • 一類是Linux基本操做,包括經常使用Linux命令和工具的使用、shell腳本的編寫,能經過腳本完成一些平常任務。
  • 另外一類纔是重點——Linux環境編程,你須要對Linux/Unix環境下各類環境編程的API要熟悉(POSIX那些函數,固然ANSI標準庫的函數也要熟)。常常考察的就是IO、各種IPC的操做方式、socket通訊的流程、select/poll/epoll 等IO多路複用模型。socket和IO多路複用是網絡編程的重點。

  題主還問操做系統通常問什麼,這些東西就是通常和操做系統雜糅到一塊兒的,學習Linux環境編程絕對不只僅是記憶幾個函數接口那麼簡單,由於大多數是系統調用,參與內核操做的,因此須要瞭解其中的原理,而其中的原理就是操做系統的概念了,好比上面我說的IPC,就能夠扯出fork函數,進而面試官就能夠問題進程的其餘東西,而後和線程作過比較之類的,線程又能夠牽扯出同步、互斥鎖等概念,怎麼樣是否是想起操做系統課本了。還沒完。linux

  其實面試制勝的關鍵並非面試官會問你什麼,而是你能主動給輸出什麼。面試不是作選擇題,判斷題。換句話說:要學會觸類旁通。好比他不問你Linux環境編程,他問了你一個malloc、new區別之類的東西,這個問題很好答,說完以後呢,你能夠主動輸出一些更深刻的東西,經過它們的區別來深刻談論操做系統的內存管理,好比邊界對齊,還有這塊內存的首部或尾部包含其餘信息等等。具體能夠閱讀CSAPP內存管理的章節,此外瞭解一下C++的placement new能夠幫助你對malloc和new的區別有更深的瞭解,從而更好的回答這類問題。C/C++語言的一大特色就是,語言不只僅是語言,你總能和操做系統扯上一腿。web

  另外不管是哪一種後臺,數據庫是必然逃不開的。你確定要對數據庫有了解。不只僅是SQL,還要懂一些優化,瞭解主鍵的原理(B樹/B+樹啊)。MySQL的話,瞭解一下引擎的知識吧。面試

  數據結構、算法等內容也是必考,不過那不僅針對C++後臺開發,這裏就不過多介紹了。redis

  若是你想知道C++怎麼寫web後臺的話,那麼瞭解一下CGI。HTTP協議的內容也是知道比不知道要好。起碼知道個get/post,cookie/session之類的。。算法

  以上針對應屆生,不是長期職業發展。由於我本人也是本科生,因此不肯定研究生的面試是否會更深刻。吐槽一下,在Java大法好的年代,我等C++碼農愈來愈少了,不過若是你碰上招聘C++的公司的話,經過幾率也較大哦,由於競爭也少。shell

 

3、問題&回答問題:

1. 後臺開發 和 服務器開發有什麼異同?騰訊的後臺開發描述的是linux C/C++ TCP/IP 網絡編程 ,服務器開發作哪方面的工做?

謝邀,沒在騰訊幹過,不瞭解騰訊的具體狀況,只能泛泛談下如今公司的一些狀況。

在公司裏,開發從應用來分,大體分爲WEB應用開發(Web/App Dev),與系統應用開發 (System/Infrastructure Dev)。

在WEB應用開發上,大體又分紅前臺開發(Front-End)與後臺開發(Back-End)。前臺開發是側重於與用戶交互(JSP,Java,JS,CSS,HTML etc.),含有少部分業務邏輯;後臺開發側重於業務邏輯,主要開發工具是Java。

而系統應用開發是側重於開發支撐整個系統的Foundation。好比搜索引擎(C++/Java);數據訪問層(DAL: Data Access Layer,C++);雲計算/IaaS/PaaS/SaaS(Java, Python)等等

在上面兩類中,web應用開發與系統自己關係不大,更多的與業務有關;而系統應用開發與系統關係至關密切。

因爲每一個公司的組織結構,工做範圍不可能徹底同樣(在我這裏,不一樣部門間都很難說真正相互瞭解),想要了解在騰訊要作哪方面工做,可能直接去問相關的招聘人員是更合適的方法。
 
2. C++ 後臺開發面試時通常考察什麼?請問諸位前輩,C++方向後臺開發通常考察什麼呢?linux會考察多深?操做系統通常問什麼?對於應屆生來講,謝謝!

前後在騰訊和百度用 C++作推薦系統、搜索引擎的後臺開發,說說我本身在面試應屆生時的關注點:

1. C++基本的認識,問得比較多的是指針、多態(虛函數表、內存 layout等)、做用域、內存的管理等等。(一般只有宣稱熟悉 C++或者簡歷中有不少 C++項目的人,我纔會把這個當作一個重要的方面考察;對語言細節研究不深刻,或者一直用其它語言好比 go/java 之類的,那也無妨,這塊能夠稍微放寬要求。)

2. 算法和數據結構,數據結構我比較關注哈希、優先級隊列等,算法則是字符串處理、簡單的 DFS、BFS、動態規劃都有

3. 系統的知識:進程、線程、協程、鎖的使用、消息隊列、共享內存、還有網絡協議、epoll、select等。順便會考察一些處理問題的基本思路,好比經過哈希來劃分、經過隊列來序列化操做等等。此外,每每不少同窗的項目經歷中,有不少點能夠結合系統的知識來考察,看看是否真的作過項目。好比我就碰到過本身寫過 web server 的,搞過 key-value 數據庫的,聲稱讀過 redis 源碼的,這些很適合配合系統知識考察,確認是否是真的作過這些項目,理解如何。

4. 和應聘者背景經歷有關的知識,好比學信息安全,恰好是個人專業,我會問一些簡單的安全知識,好比緩衝區溢出、SQL 注入、虛擬機、https、數字簽名原理等等。固然,後面從事了個性化推薦有關的工做,機器學習也稍微懂一點,偶爾能夠聊聊。這個主要是發現一些學習態度也特別好,可是又想作後臺的同窗。

=====================================================================
20151206 update

有人說我問的都是知道不知道的東西,這些只須要翻翻某些書就能夠了,而「編碼習慣」「思惟方式」纔是「核心素質」。

首先以我對題主這個題目的理解,我想題主關注的應該是以哪些具體的知識做爲「切入點」,以便未來成爲一名「C++後臺工程師」。若是我跟題主說,「改編思惟方式」「改善編碼習慣」纔是最重要的,那麼等於說了正確的廢話。

我認爲咱們說的不是一個層面的東西。具體的知識只是切入點而已,若是沒有知識儲備做爲切入點,說一我的有好的編碼習慣、思惟方式,那不是空談嗎?

我文中有表述到了我一般會根據面試者自己的背景和知識儲備切入的意思,並且我並無說我只問知道不知道概念,我先考察的是學習態度和知識儲備,我認爲這是篩選實際工做中可靠的工做夥伴的方式。

另外,編碼習慣和思惟方式,是須要具體的知識和問題來考察的,好比算法、系統設計,至於怎麼挖掘出來,是面試技巧和麪試官本人的能力問題了。

還有,並非翻翻APUE就好了,不少知識,不是每一個人都有能力理解和融會貫通。若是這麼說的話,我說的2中的算法和數據結構知識點,是否是翻翻算法導論就能夠了?

但願對你們有用。
相關文章
相關標籤/搜索