後端所謂複雜的問題是什麼?

看了如何面試Python後端工程師? - 面試 最佳答案以後有感而發。

目前題主除了密碼部分沒有涉獵,其他的基本都用過或者在看。資料庫方面,做過些簡單的執行計劃調優,所以對索引還是比較熟悉。python做過nlp的工作,所以對panda和scipy還是比較眼熟的,還做過過node,平時玩玩ruby以及golang的hoppy dev。然後題主是前端攻城獅

最後問題來了。。之前去某公司面試前(quan)端(zhan),前端部分我順利通過了,然後後端的大大給了我一個評價:你沒做過什麼複雜的東西。這讓我對我的後端產生了極大的懷疑。。我想問問大家複雜的東西倒底是什麼?

目前個人認為應該看看c去了。開頭列了這些難免有裝X之嫌,但這是為了表示題主還是做過點後端的,還請見諒。由於題主工作時間不算長,真心希望能從大家的回答中找到學習的方向,也讓自己靜下心來。


複雜不代表難,我覺得主要是兩方面:

1 涵蓋的面比較廣,綜合技術多,或許單個技術來說你都很熟,但實際項目需要將其結合起來

2 有些問題在內存做很簡單,到硬碟就麻煩了;在單機很簡單,到集群就麻煩了。比如分散式鎖等問題,基本是業內很難解決的,如果用戶一定要你實現這種需求,可能需要一個完全不同的思路或者需要對場景做權衡,有所取捨

架構師更多地會考慮這類問題的解決方案


瀉藥。

web開發前端後端都沒有什麼複雜的東西。如果說有什麼複雜的東西。我覺得資料庫對象的抽象建模可能複雜點——如何處理大量的數據對象之間的關係,保持良好的可用性和性能——可能需要花點心思去考慮。特別是賬單和支付系統。這需要點會計知識,可能會麻煩點。


常年跟 Research scientist做後端模型,說一些常用的技術你感受一下。

Xpress, 解LP MIP

Hadoop MapReduce,Spark 做海量數據批處

Storm/trident,做實時分散式消息處理

Akka,做高並發actor model

HBase,做scan more, get less 存儲

BDB,本機小型DB,簡單實用

Dynamo/Cassandra, 做get more,scan less存儲

S3, 做海量數據文件存儲

Redshift,做海量數據queriable存儲

memcache/redis 內存資料庫,做高速響應queriable存儲(其實是cache)

Kafka/Kinesis,分散式隊列,分散式數據收集

Flume, 海量數據收集with high availability

SQS,對性能無太大要求時,做簡單隊列, availability超好

Zookeeper,做機群協調

Hive/SparkSQL,做大數據在線分析

Spark-MLlib, 解各種machine learning問題, 如random forecast,SVM,Neural Networks

RESTful/SOAP,做webservice

thrift/json/Avro/Protocol Buffer/Kryo 做序列/反序列化

Spring/guice 做DI

JMock/EasyMock, 做UT中 mock dependency

還有一些大大小小的思想,理論…

DDD/TDD/BDD/microservice/SOA/CQRS/DCI/Lambda Architecture/CAP/Functional Programming

mysql,oracle,hibernate,這些前幾年用用,現在已經進入淘汰模式(可惜了我精研oracle和SQL調優那麼多年…)

複雜么?其實不複雜,或者說 學會並使用以上工具不複雜。

有理有據的說服大家不使用複雜工具,簡化系統,搭建可拓展framework讓任何 SDE I,哪怕SDE Intern都能輕鬆愉快的在這個項目上工作並獲得成就感,才是Sr SDE所面對的複雜問題。


我做了快十年的後端開發了,還真沒有碰到什麼非常複雜的。要說複雜無非就是耗時長一點,提前準備的東西多一點。我也從來沒有說過因為項目複雜而導致項目做不出來的,只有沒有準備充分,沒有做足夠的前期調研和需求分析導致項目開發完成之後和客戶的需求有多出入的,傳統性中小企業和應用領域不存在什麼複雜的東西。無非是耗時多耗時少的問題。

真正的複雜應該是在應用與科研相結合的領域吧。設計到具體的一個點,一個面。相對的問題就不是普通程序員,普通架構師能夠解決了,當然那又是另外一回事了。


作為後端小菜鳥,曾經聽著redis感覺好牛逼,好厲害。然後工作用過後,感覺就那樣。但是我又買了本redis相關的書,看看書裡面的用法,感覺自己弱爆了。是否複雜得考慮下深度。

比如zookeeper,什麼都不給你說,只告訴你它的api你能想到做啥?


1. C10K;

2. 線性增加機器數量時能讓性能線性提升。


我想面試大大說的「複雜的東西」應該是指比較大的項目開發經驗。後端的技術是一個整體解決方案,而不是單指哪一項技術的複雜,包括框架、資料庫、緩存、分散式、甚至部署方式等等,還有代碼的組織能力(面向對象之類),因為後端業務有時很複雜,好的代碼組識方式有利於維護、升級,如果參加過比較大的項目,這些東西都會接觸到。。。


推薦閱讀:

面試前端工作7年以上的人,總感覺他們水平一般般?
入門程序員如何選擇方向前端?後端?還是JAVA(安卓)?
Teambition 與 蘑菇街 這兩家公司對於前端應屆生該如何選擇?
為什麼國外的網站很多設置不是在新選項卡中打開?
用"/(.*?)d/"正則表達式匹配"abcd"為什麼得到的是"abcd"而不是"d"?

TAG:Web開發 | 前端開發 | Python | 後端技術 |