⑴ 如何辨別一個程序員水平的高低
1.自己介紹項目,看對項目的提煉總結能力(也是抽象能力);
2.自己印象最深的bug,可以知道大概技術深度;
3.設計模式提問,看有沒有學習方法;
4.語法基礎問題,多線,分布,安全等問題,看知識面廣度;
5.智力問題,看反應能力,分析問題思路等
上述五步基本可知是否是一個好程序猿
計科專業從事軟體開發十幾年了,主要在瀏覽器內核領域研究的比較多,最近在研究伺服器後台方向,辨別程序員水平高低主要看做出了什麼產品,如同現在的程序員主要是項目經驗,簡歷上寫的一堆項目經驗都是面試的時候主要提及的問題。經常在面試中會問兩個關鍵點:一個是做過什麼項目;一個是在項目組中承擔什麼職務,畢竟參與過和做的多少程度是不一樣的,這些都是可以通過一些具體的細節檢測出來,問題越具體越是容易看出水準,具體的東西不是能夠編造出來的。
有很多技術公司直接不通過筆試,僅僅通過簡單的面試就確定工資水準了,最簡單的測試程序員水平的直接用筆試的方式,筆試可以把一些細節量化,盡量的細節化也是能測試出程序員基本功的,但這種基本用來測試初級程序員的,很多高級的程序員看到有筆試直接就抬腿走人了,因為有些程序員在一個方向做的時間太長了,很多基本功都忘得差不多了,所以筆試可能不過關,現實中很多程序員筆試不過關,面試還可以,也一樣可以做項目說的就是這類人,起碼這算是非常優秀的程序員。
有很多公司採用谷歌的方式,直接採用上機寫代碼的方式檢驗程序員水平,這種方式比較直接,但在現實中可能消耗的時間以及面試官的精力,目前只有極少數的公司用這種方式,國外的公司用這種方式比較多,這種看基本功非常有效。通過代碼可以看到編碼習慣以及演算法的設計上,都能直接看的出來。
普通的程序員直接看項目的經驗,高級的直接看做過的產品,特別是產品主要設計人員,這就是程序員內心的自豪感,畢竟作為一個程序員起碼要有自己設計開發的產品,也算是不白做一個程序員,在程序員的職業經歷中如果能經歷過一個產品從開始設計的初稿到最後推向市場,如果是完整的經歷,將是一種巨大的財富,只要經歷過一次都會對產品設計有一個比較層次的認識,這種能力需要靠直接的面試語言表達來展示出來,談下對產品的認識以及產品穩定性性能等方面的總結,能到這個層面起碼是高級軟體工程師的級別。
當然有些程序員內在的東西不是靠語言或者寫代碼看出來的,因為一個優秀的程序員不僅僅是代碼能力以及框架能力,還有幾個非常重要的能力
程序員的能力表面是可以直接展示出來,但很多內在需要是需要時間的磨合才能了解,人就才能見人心,而且很多優秀的程序員是培養出來的,能夠長時間在一起的隊友都是時間長了磨練出來的。
希望能夠幫到你。
自認為不是一個好的面試官,因為我認為在這么短的時間內,准確地衡量出來程序員水平的高低是有比較大的難度的,並且我有多次看走眼的時候,面試的時候覺得能力還不錯,但是入職工作了一段時間之後,編程能力不忍直視。
工作之後接觸一段時間,我會從這么幾個方面觀察他們,以判斷技術能力的高低和發展潛力。
能不能出活兒、能不能debug
能不能把開發任務按時按質量地完成,當然是最主要的衡量標准了:
解決問題的方法
在開發過程中,難免會遇到沒有見過的問題,有些程序員遇到問題無從下手,而優秀的程序員,自有一套解決問題的方法。
分析問題、流程設計的思路
有人會認為,程序員的主要工作就是敲代碼,上班大部分時候都是在敲代碼,其實並不是這樣:
總結問題和改進問題的能力
好的程序員,相同的問題不會犯第二次,差的程序員,總會在一個問題上栽跟頭:
我將持續分享Java開發、架構設計、程序員職業發展等方面的見解,希望能得到你的關注。
不請自來,一介碼農路過,留下些看法。
程序員主要是有四種綜合能力,也就是debug 能力、 performance分析、 保護性編程和 投入產出比。
僅僅獨立完成日後必然成高手?在這里不能說一棒子打死,至少對於很多人來說,能獨立完成是沒什麼問題的,有的是因為對業務熟悉,有的是真的基礎扎實。但怎麼說呢,程序員和瀏覽器打交道是最多的,現在這個互聯網時代,遇到的大部分問題網路都是可以解決的,也就是普通程序員 + 網路 = 超級程序員。 但很多人也沒明白具體的原理,甚至都是這個項目抄抄那個項目抄抄的,久而久之雖然解決了平時的業務,但進步的空間卻很少,甚至止步不前,寫出來的代碼也可能存在很多坑,所以,僅僅能獨立完成任務的話,離高手還有比較遠的一段距離。
如何辨別高手程序員?也就是結合我們一開始列舉的那四個能力進行判斷。不同級別的程序員,在那綜合能力面前,強弱也是不同的。例如在奔潰的或者其他性能調優問題上,即使是面對大量復雜的代碼,在信息不全的時候也會一步步的分析,抽絲剝繭縮小范圍,最終定位根本原因
,並且最終給出一個好的方案。
如何成為高手程序員?
當然還有看他摘了帽子是否禿頂這樣的笑話,就再不贅述了。
第一階段(黃金):會用編程語言實現需求,比如現在的業務系統,都會找一些會搬代碼的人來拼工作量,也就是能自己獨立基於搭好的框架實現crud常規操作。
第二階段(鉑金):除了crud,還會有一些自己踩過坑的經驗,知道如何處理一些常見問題,或者可以基於搜索引擎快速解決一些異常情況。
第三階段(鑽石):能解決一些疑難雜症和會通過debug部分源碼類庫查看到這些疑難雜症是如何引發的,並通過編碼解決這些問題,還能進行一些局部的性能優化,類似某個系統介面緩慢可以單獨去優化。
第四階段(星耀):會基於整個系統進行設計和規劃,根據業務特性選擇合適的框架,從源頭控制開發遇到問題的頻率,可以自主的搭建框架並完善機制,了解各個組件工作原理。
第五階段(王者):小說裡面總是說練武功的永遠比不過創造武功的,同樣的道理,用框架的也往往不如寫框架的,所以寫框架的這類人單獨分層。
第六階段(榮耀):其實這個階段不應該列入進來,因為這類人往往不編碼的,只是給出思想;像Hadoop這種框架就是基於人家發表的一些論文(bigdata)進行編碼實現的,這類人注重的是思想和演算法,區塊鏈,大數據,雲計算等等概念的創造和理論的支撐是這類人提出來的,這些人才是真正影響行業走向的人。
程序員的水平高低,不是靠語言或外在表現就能看出來的,不是看他會多少技術、參加過多少項目、寫了多少博客,而是看他在實際業務場景中解決問題的能力,尤其是面對一些特別復雜的問題,或在高強度、高壓工作狀態下解決問題的能力與態度。
技術可以通過學習掌握,但是解決問題、定位問題的能力卻不是一蹴而就。大家可能會說,「解決問題的能力」這個太寬泛了吧,可以更具象化嗎,有具體的測量方法嗎?簡單整理了以下幾點供參考。
會寫出滿足需求的代碼,早就不是評判程序員水平的標准了。代碼編寫既要滿足業務需求,同時還要考慮後續的軟體維護,說得通俗些,既要自己爽,也要別人爽。一個優秀的程序員,會致力於寫出更簡單、更效率、可讀性強、擴展性強的程序代碼。
程序員在日常工作中,需要理解各式各樣的業務需求,所以這就需要程序員具備一定的邏輯思維能力。可以說,邏輯思維是程序員的靈魂,因為每一行代碼都是程序員邏輯的體現。
項目著急上線,發布時出現問題?
業務高峰時段,系統宕機了?
業務催、運營催、用戶催、老闆催!
各種形態的bug,各種著急的心情,背後無數支眼睛盯得內心慌慌......
這些都是一位合格程序員所需要面對的日常。不同的程序員,在解決問題的方法、效率、質量等方面,都各有千秋。一個經驗豐富的程序員,能夠扛住各方壓力,在復雜條件下找到核心問題,通過抽絲剝繭的分析來找到產生問題的原因,並快速進行應對處理,事後及時復盤總結,減少同類問題出現的概率。
隨之互聯網的發展,越來越多的人湧入程序員這個賽道,競爭日益激烈,加之新技術層出不窮,更新迭代快,程序員所使用的語言、框架、模式都會發生天翻地覆的變化。如果不主動學習,你很快就會被落伍淘汰。
這種其實在面試過程中能體現出來,溝通主要是技術溝通,以及和客戶之間的溝通,所有技術都不是閉門造車就能搞定的,溝通能讓事情推進起來更加順暢,包括和產品經理之間的流暢的溝通也顯得非常重要。程序員的能力表面是可以直接展示出來,但很多內在需要是需要時間的磨合才能了解,人就才能見人心,而且很多優秀的程序員是培養出來的,能夠長時間在一起的隊友都是時間長了磨練出來的。
線上出bug了,第一時間響應、處理;
團隊項目進度緊張、人手緊缺,主動補位;
又或者,在項目推進過程中如果只是關心自己模塊內容,對於整個項目置之不理,只守著自己的一畝三分地。
隨著時間軸的拉長,你會發現,有此f技術能力不是最好的,甚至不如你的小夥伴,最後做到了技術主管或經理、甚至更高職位,這裡面除了技術實力,還有一個叫「責任心」的東西。
結束語
判斷一個程序員的水平高低,核心是其解決問題的能力,而解決問題的能力養成,需要扎實的底層基礎來支撐,要綜合其代碼質量、項目經驗、框架能力、邏輯思維等等多方面,不能單看某一方面。
而對於1-6歲的程序員來說,想要成為一個高級程序員,變得越來越優秀,唯有持之以恆去學習、積累、實踐、修煉。
----end----
一:50歲的時候,頭發還是黑色的濃密的。
二:賺到的錢能保證家人快樂的生活。
三:當公司不要你的時候能成功轉型。
其他的例如編程經驗、寫代碼厲害啊什麼的根本不值一提。
這就是程序員的面試嘛 :-)
(1)是否能熟練使用所用編程語言的主要功能;
(2)是否知道用合適的數據結構解決問題;
(3)是否知道基本的演算法,並且用這些演算法解決問題;
(4)只看少量代碼的話,從變數命名和程序結構一般能夠判斷是否是新手;
(5)給出具體問題,能夠用程序解決,能考慮到所有的邊界條件;
(6)考慮程序的可擴展性,可維護性;
再往高一點走,就需要
(7)面對模糊的問題能夠分析並且找到細節和具體的需求;
(8)知道利用已有的庫,架構和工具等來解決新的問題,而不是什麼都自己實現;
(9)能發現並改進已有程序中的瓶頸;
(10)對整個大項目的程序架構有很清晰的了解,知道相互之間的依賴,以及知道為什麼採用這樣就架構;
(11)給一個大的項目,能夠對整個項目的程序架構和組件進行合理的設計,考慮並行性,低延遲,大數據量等各種需求和應對方式。
帶領團隊已多年,項目數十個,對判別程序員水平的高低,我有自己的看法,歡迎大家一起交流。
1.代碼質量。
優質的代碼,首先是經得起考驗。靜態分析工具過一遍,無錯誤,無警告。當然警告部分需要人工重審,因為靜態分析工具不一定完全正確。過了這一關,重要的還須過測試關,少Bug或無Bug的代碼,才是好代碼。優質的代碼帶有技術氣質和藝術氣質。閱讀起來,有一種賞心悅目的快感,即工整美觀,干凈利落,又蘊含著理論常識,運用技巧,精準到位。
2.表達能力。
3.文檔能力。
文檔形式包括但不限於PPT,文字,圖表,音視頻。文檔內容包括但不限於API說明,工具手冊,項目事項,技術論述,陷阱總結,方案展示,指導手冊。文檔要求必須是滿足公司或部門的規范和格式,否則五花八門的,不利於交流和傳承。
以上3點,是我量化判斷程序員水平的標准,僅供參考。相比水平,其實我更看重程序員的態度,執行力,時間觀念,自學力等等,也是很重要的團隊作戰能力,也可以說是程序員水平的考量吧。
謝謝大家。
⑵ 只會寫業務代碼的碼農,如何拿阿里的開發offer
最近公司需要招聘幾個java開發工程師,2個周面試了有20多人,有個很強烈的感覺:很多有天賦的開發者,技術面試表現差強人意,問原因比較統一歸結為——長期跟著公司只寫業務代碼,而自己沒有時間擴展提高,更不知道如何提高自己。
就此說說我的看法:如何提高自己?當然你再怎麼提高也不一定能拿到阿里的offer,不過至少能接近一點是一點嘛!哈哈
首先做個定性結論:要提高自己,首先要能寫好業務代碼!如果連業務代碼都寫不好,那麼你別讀下去了,轉行,出門右轉娛樂版!
寫好業務代碼的不一定很牛,但是連業務代碼都寫不好的一定好不了!
直接總結點干貨吧。
1,盡可能多熟悉業務
無論是不是你的業務盡可能的都弄明白,成為專家。你懂的越多,對團隊作用做大,別人越依賴你,你可以做到進可攻退可守。這是你的護城河
業務越熟悉,作出更加完美設計方案的可能性越大!
2,做端到端的專家
一個小問題:在PC瀏覽器里輸入 toutiao.com 點回車以後,從本地瀏覽器到伺服器再到瀏覽器中間發生了哪些處理?親們,有幾個人都把這個問題回答完美?我面試的時候問過很多人,有人連DNS是啥都不知道。。。。這是一個端到端的典型例子,但是細思恐極,DNS、瀏覽器緩存、本地host、路由、nginx反向代理、tomcat、集群、redis cache、mysql、代理、dfs、cdn。。。。,哇塞,好爽!我們做技術一定把知識做成體系化,很多人只知道springmvc的xml裡面配置映射,這是遠遠不夠的。
體系化,系統性,宏觀全局性,這些是能力提高的必備!說起來也不難,用心整理即可!
3,怎樣自學
如果你在一個成熟團隊,恭喜你,只要你用心,通讀現有架構多向別人請教,然後自己回家搞一套出來多練練就行了。
如果你有機會從頭開始搭建一套,那麼更加恭喜你,雖然很累很辛苦,但是只要你扛下來以後就是康莊大道。
JVM調優是啥?nginx、redis、mongoDB、neo4j、atlas、elasticsearch這些玩意是幹嘛的?好吧,如果你不知道,那麼恭喜你,我給你打開了一扇窗,自學去!但是我不可能天天來給你開窗,怎麼辦?簡單啊,開源中國多逛逛啊,infoQ,ITeye這些網站收藏起來,順便刪掉你的1024嘛!時間總會有的,你也總會牛起來的。
前天有人私信我問怎麼學redis?要買什麼書看?我說不要買書,去qq上找找相關的群加進去,再去網路找個最簡單的例子,在自己電腦上把redis裝上,然後敲命令,一個新手的知識就從網路上找+群里請教就足夠了,敲差不多了再結合自己的語言比如java,從網路上找例子能夠通過java執行命令,剩下就是進階,再群里多向大佬請教一下最好有業務能夠結合使用一下。怎麼結合spring,怎樣使用高級屬性,怎樣做到數據一致性等等。。。。。
當然,這個例子是完全自己學,其實這是很辛苦的,更快一點的辦法是借力,找懂的人幫你最快的開一個頭,入了門再開始自己研究,這就是我個人一直覺得在線學習網站app是非常好工具的原因!不要在乎那點錢,先開個頭再說!
4,學習——>實踐——>教別人
上面的第3條適合小白,非小白呢?以JVM調優為例子,我覺得三步走:
學習,了解基本知識,該網路的網路,該頭條的頭條,該花錢去上在線教育網站學習的也別在乎那幾百塊錢,學好了能幾百倍的賺回來,比投資股市和房地產都合算
實踐,就是動手嘛,公司項目能有機會練習更好,沒有的話自己動手吧。當然具體到JVM調優,一般看不出來效果的,你配啥參數都能跑起來,用jstat,jmap之類的也看不出來啥,那好,我們想辦法跑死它!執行無限循環、做超級大對象,讓它stop the world!你進行跟蹤!好玩的很呢。設計各種場景,多方位多角度的跟它折騰
你以為的「學會了」,跟真正的「學會了」是有差距的,差在哪裡?如果你有嘗試過去教會別人,或者自己准備寫個說明文章你就明白了,差距真大,目測好記層樓那麼高的差距。這幾天寫頭條,我深有體會,大家有興趣可以翻一下我前面的文章,我覺得我會的不少,但是寫的時候頭發都快被我自己薅沒了,真心難,不過寫的過程中不斷的否定自己、確認自己這一圈下來收獲也確實很大!好了,你懂該怎麼做了吧,有興趣一起來頭條寫文章吧,挺好玩!
本文不適合大牛!實在沒有那個能力去指導大牛。所以有覺得文章不妥的大牛們還請善意的回復指正和討論,上來就想罵街的還請您看在我敲了30分鍾字挺不容易的份上,饒我一命!代表全家老小在雙11這么偉大的日子給您想說一聲「謝謝」。
有緣的朋友,歡迎回帖探討。謝謝
⑶ 大專畢業去當程序員,每天都努力工作和學習,有機會去到阿里嗎
大專畢業去當程序員,每天都努力工作和學習,是有機會去到阿里的,入職阿里需要哪些條件呢:
1.阿里的前端開發需要做到在某個領域有深入研究,需要有創新性的技術沉澱。而小型企業的前端開發,則只需要了解和熟悉前端的相關技術,二者橫向對比,阿里的職業要求會更高,對職員的能力鍛煉得也會更好。
4.與一些獵頭或者意向部門員工保持長期聯系,其實阿里現在很多時候並不是你都面過了,就一定能拿offer的,hc的審批不僅僅是跟崗位競爭者PK,有時候部門內部也會統籌的。如果競爭力不強的話,盡量多選擇一些發展比較好的新業務部門,這種相對在發展期hc會足一些。
⑷ 阿里巴巴的面試流程是什麼樣子的
在阿里巴巴面試通常會有3輪面試:
1、第一輪面試:
第一輪面試通常是電話面,面試官會提前打電話約定面試時間,在接到面試官電話時,不要緊張,如果自己尚未准備好面試,或者時間不方便,可以將時間約靠後一點,留下足夠的時間緩沖。
面試的時候不用太緊張,面試你的工程師通常就是你所應聘崗位所在團隊的成員,他是在為自己的團隊挑選隊友,因此,沒有理由為難你。
2、第二輪面試:
如果你順利通過第一輪面試,那麼,大約一周後,將進行第二輪面試。第二輪面試的面試官通常是團隊主管(不一定是你所應聘崗位所在的團隊,因為存在「交叉面「防作弊)。
第二輪面試如果是程序員會考察程序員的能力水平,通過筆試和問答做出最後的判斷。
3、第三輪面試:
在通過第二輪面試後,通常就進入到了技術「終面」,本輪通常由部門總監、HRD來面試。主要面試個人的心理素質,職業素養以及為人待物的能力。
如果面試者可以順利通過3論面試就可以收到來自阿里巴巴的offer了。
1、基礎知識的掌握
阿里的技術面試通常是一個由淺入深的過程。起初,面試官會根據崗位要求問一些技術相關的基礎問題。當然「基礎」二字的含義並不是簡單,如果沒有充分的准備和足夠的積累,也容易被拒絕。
根據面試經驗,超過一半的應聘者在這個環節被拒絕,因此,建議應聘者切勿「裸考」,否則留下一個「基礎不扎實」的面試記錄,短期內再應聘阿里的成功率就很低了。
2、應變能力
阿裡面試官會通過設計類問題來考查應聘者的「應變能力」。
例如,給一個具體的問題,要求應聘者給出設計方案,比如設計一個交通信號燈系統,一個中國象棋系統,一個問答系統,一個在線購物網站等等。要求畫出模塊圖,給出關鍵的API的定義或者類和類之間的關系。
⑸ 程序員阿里三次面試已過卻無理由掛了,網友:阿里HR有一票否決
進入互聯網大廠一般都是「過五關斬六將」,難度堪比西天取經,但當你真正面對這些大廠的面試時,有時候又會被其中的神操作弄的很是蒙圈。
近日,某位程序員發帖稱,自己去阿裡面試,三面都過了,卻被無理由掛了,阿里某部門HR還問他為何不考慮阿里。當時這位程序員內心裡恐怕默默說了句「你為什麼不上清華,是因為不喜歡嗎?」故而發帖向廣大網友吐槽。
原貼如下:
樓主表示,自己發這個帖子只是想吐槽一下:這次給我打電話的阿里同學,之前面阿里的時候,也遇到過很nice的同學,那個內部幫我查我三面面試結果另一個阿里的同學其實就很好,全程跟蹤,語氣平和,雖然最後我還是沒去他們部門面試吧。所以感覺公司大了,真的會遇到各種人吧。祝大家面試都能遇到好的面試官。
不少人向樓主一樣感慨,太真實了,現實工作中,還真就有能一直重復一個已經被回答的問題(其實就是硬逼著你承認他心中的答案)
還有網友也跟大家吐槽自己在面試中遇到的這種情況:和我一樣啊,最後給我的理由是項目的經歷不符合要求
也有網友吐槽「暗諷」:太他媽飄;每次接阿里的電話都帶著敬仰;這tm可是大名鼎鼎的阿里,是你的爺,是你職業生涯巔峰,你竟然不考慮???爸爸問你話呢;難怪阿里的電話被標記為了騷擾電話不無道理
還有人給樓主支招:反問他為什麼要考慮;你應該直接掛電話的;阿里給我打電話,我直接回復對阿里沒興趣;建議以後我司的面試官都先測完智商,再給候選人打電話;
也有人給樓主分析三面過了還被掛的原因,而樓主也猜測有可能在刷KPI。
阿里以及其他的互聯網大廠技術類社招,一般分為四個輪次,第一、第二輪都是技術面,然後是主管面和HR面。
技術面除了必須要會的編程題目,個人的溝通表達能力、學習能力同樣也很重要;相對於技術面,主管面則會更加註重考察求職者的其他維度是否與團隊相匹配,比如:邏輯思維和溝通能力;最後的HR面相對常規一些。HR面試完之後,後續可能還有一輪leader面。
大廠雖苦難熬,但有能力的同學進入大廠工作利大於弊,因為能和這個行業國內最優秀的人一起共事,收獲的眼界和方法等等都是不可比擬的。
你覺得呢?
⑹ 普通公司員工的編程水平與阿里巴巴有多大差距
作為一個編程十幾年的老程序員,雖然沒有進過阿里巴巴,中間換工作時候也拒絕過網路和騰訊的offer,選擇了一個更適合自己的互聯網公司,編程水平主要決定因素還是和本人基本功有著極大的環境,前幾天回答了一個大公者斗司和小公司編碼水平誰高誰低的問題,有外在因素影響但主要還是自身,自己沒有決心提升自己的編碼水平,外界環境再好也沒多大意義。
像阿里巴巴這種大公司由於職位安排的比較輪臘飽滿,正常來講代碼的提交都需要leader的審核通過,在一定程度上能極大的提高代碼的質量,在審核機制上會更加嚴格,並且在測試把關上也會更加嚴格,普通的小公司在人員配置上可能稍微少一些,會在把關上差一點,嚴格規范的制度在一定程度上能促進程序員更深層的改進,但本質上還是自身想不想讓自己變得更加優秀,願意不願意讓自己提升的更加快速。
其實提到阿里巴巴這種大公司主要還是人心態問題,覺得大公司一定要比小公司規范,換做經歷過大公司的人,還想著在裡面自己只是一個螺絲釘,還想著去小型公司讓自己發揮的更加徹底,小公司的人又嚮往著大公司的待遇以及規范。如同沒有結婚的人,總想著走進圍城,進入的人又羨慕沒有結婚的多自由,其實來來回回也就那回事。
曾經也是為了進入大公司舍棄了一個中型公司部門技術經理的職位,現在想像其實很不值當,進入一個成熟的大公司,自己做出的貢獻只是滄海一粟,想要向上走特別難,而真正的機會還是在創業公司或者中小型公司,當然這些東西需要親身體驗才能感受到,在年輕氣盛階段很難體味到,就是覺得自己所做的選擇是對的,實踐辨真知。
希望能幫到你。
以我自身的經歷來回答吧!我是做java開發的,在沒進阿里之前,我在外面其他公司幹了四年。頭兩年乾的最多的事情就是直接把業務翻譯成代碼,做的最多的事情就是curd。工程化以及結構化設計根本不存在的,什麼性能、可擴展性、易用性、可維護性通通不考慮。把功能實現了就可以了,活脫脫的把面向對象的語言使用成了面向過程編程。(因為大家都這樣干)主要還是因為剛畢業在這家公司做erp系統,功能可以用就不管了。接下來的兩年換了一家電商公司,這也是一個天坑,代碼跟 山差不多,我進去做庫存的,第一件事情就是熟悉了業務然後進行了重構。前面做這一塊的人都差不多走光了,模型抽象,領域分層,模塊分層一頓操作下來自我感覺良好。但是疊加了兩年的業務以後,媽的差不多也是 山了,為了業務快速迭代犧牲一些也是能理解的。然後我走了[捂臉]。
進入了阿里,我是做中台開發的。這里最喜歡乾的就是重復造輪子,幹啥都要講究高可用、可復用、可擴展、可維護、可讀性……寫代碼大抵是這樣的一個介面進去寫介面一般先上熔斷降級開關、分布式鎖,然後就是加緩存,接著業務就用領域模型+泛化抽象模型+工廠設計模式+策略模式 這一頓操作下來後,為了支持擴展性還得定製spi擴展點提供擴展。一個業務功能的代碼完全是割裂的狀態。不過項目跟代碼的質量跟之前的公司比確實上升不少。只能說環境的影響很大吧
雖然沒有去過大廠,但還是想強答一下,畢竟有不少認識的朋友在BAT工作或工作過。
我的看法是:BAT的牛人多,普通人也多,雖然他們不是每個人都能達到令人仰望的技術水平,但畢竟平台高,所以眼光會變得寬闊;代碼要求更為嚴格,所以普通的程序員也會被逼變得更優秀;身邊的牛人多,普通的程序員也會受到影響,提升的更快。
正好今天看到一篇文章,是講去阿里的面試經歷,也分享給大家,看看自己離著【臘嫌滑進】阿里還有多大的差距。
Java多線程
線程池的原理,為什麼要創建線程池?
線程的生命周期,什麼時候會出現僵死進程;
什麼實現線程安全,如何實現線程安全;
創建線程池有哪幾個核心參數? 如何合理配置線程池的大小?
synchronized、volatile區別、synchronized鎖粒度、模擬死鎖場景、原子性與可見性;
JVM相關
JVM內存模型,GC機制和原理;GC分哪兩種;什麼時候會觸發Full GC?
JVM里的有幾種classloader,為什麼會有多種?
什麼是雙親委派機制?介紹一些運作過程,雙親委派模型的好處;(這個我真的不會...)
什麼情況下我們需要破壞雙親委派模型;
常見的JVM調優方法有哪些?可以具體到調整哪個參數,調成什麼值?
JVM虛擬機內存劃分、類載入器、垃圾收集演算法、垃圾收集器、class文件結構是如何解析的;
Java擴展
紅黑樹的實現原理和應用場景;
NIO是什麼?適用於何種場景?
Java9比Java8改進了什麼;
HashMap內部的數據結構是什麼?底層是怎麼實現的?
說說反射的用途及實現,反射是不是很慢,我們在項目中是否要避免使用反射;
說說自定義註解的場景及實現;
List和Map區別,Arraylist與LinkedList區別,ArrayList與Vector 區別;
Spring
Spring AOP的實現原理和場景;(應用場景很重要)
Spring bean的作用域和生命周期;
Spring Boot比Spring做了哪些改進? Spring 5比Spring4做了哪些改進;(慚愧呀,我們還在用Spring4,高版本的沒關心過)
Spring IOC是什麼?優點是什麼?
SpringMVC、動態代理、反射、AOP原理、事務隔離級別;
中間件
Dubbo完整的一次調用鏈路介紹;
Dubbo支持幾種負載均衡策略?
Dubbo Provider服務提供者要控制執行並發請求上限,具體怎麼做?
Dubbo啟動的時候支持幾種配置方式?
了解幾種消息中間件產品?各產品的優缺點介紹;
消息中間件如何保證消息的一致性和如何進行消息的重試機制?
Spring Cloud熔斷機制介紹;
Spring Cloud對比下Dubbo,什麼場景下該使用Spring Cloud?
資料庫篇
鎖機制介紹:行鎖、表鎖、排他鎖、共享鎖;
樂觀鎖的業務場景及實現方式;
事務介紹,分布式事物的理解,常見的解決方案有哪些,什麼事兩階段提交、三階段提交;
MySQL記錄binlog的方式主要包括三種模式?每種模式的優缺點是什麼?
MySQL鎖,悲觀鎖、樂觀鎖、排它鎖、共享鎖、表級鎖、行級鎖;
分布式事務的原理2階段提交,同步非同步阻塞非阻塞;
資料庫事務隔離級別,MySQL默認的隔離級別、Spring如何實現事務、
JDBC如何實現事務、嵌套事務實現、分布式事務實現;
SQL的整個解析、執行過程原理、SQL行轉列;
Redis
Redis為什麼這么快?redis採用多線程會有哪些問題?
Redis支持哪幾種數據結構;
Redis跳躍表的問題;
Redis單進程單線程的Redis如何能夠高並發?
Redis如何使用Redis實現分布式鎖?
Redis分布式鎖操作的原子性,Redis內部是如何實現的?
看完了有什麼感想,自己和BAT的要求有差距么?
反正我覺得自己想要面試通過是有些困難,很多框架新版本的特性都沒有了解過,看來年前還得抽時間學些一下了。
大公司如bat大部分普通程序員,由於做的太專一了,基本上在某一方面做得不錯,整體能力差很遠,但是自己覺得啥都行。
這么比喻吧,如果說把程序員比作廚師。
普通公司的程序員基本上是各個飯店的大廚,啥菜都會做。
bat是御膳房,程序員什麼大菜都見過,但基本上一個大菜也做不了。很多人就是御膳房後勤部切蔥花大隊的切蔥花手
普通公司員工的編程水平與阿里巴巴有多大差距?要說阿里巴巴每個程序員都牛逼得不行那也是扯淡,普通公司牛逼的程序員也不少,這本身就沒有一定的定論。
在阿里巴巴這樣公司的程序員來說,應該比較幸運的是能夠遇到大型互聯網軟體的開發,比如像架構設計、場景設計等,這對於很多程序員來說應該可以開眼界,參與其中也能鍛煉自己。同樣的,很多大型軟體公司雖然沒有阿里這樣的場景,但同樣也有自己特殊的應用設計、場景在阿里也見不到。
而對於單個程序員的編碼水平來說,普通公司與阿里的程序員可能根本就沒啥區別。普通公司里也有嚴格按規范、嚴格按流程、嚴格測試等來做軟體,進入裡面同樣可以遇到大牛帶領項目、大牛的傳幫帶等,耳聞目染再加努力實踐,這些程序員的水平並不能說就比阿里的程序員差。當然,阿里這樣的名氣不外乎就是進入時經過了嚴格的挑選,這些程序員的基礎都是不錯的,但真正要有水平,那還得除了環境也得要靠自己努力。
但大公司程序員與小公司的程序員還是有一些差異的。小公司人員可能接觸的項目基本不大,而像萬金油那樣啥都接觸到一些能搞一些,但深度卻不夠。比如小公司的程序員今天搞Java編碼,可能下個項目就去搞PHP,再下個項目又去搞python等,今天是程序,每隔兩個月可能又是下個項目的設計者、Leader等有可能。但恰恰在某一項編碼上卻又不像某些大公司的程序員那樣一個蘿卜一個坑兒,又專又精。
另外小公司的開發流程及規范都不夠,有些甚至是只要搞出來能運行就可以,所以章法上不像大公司一樣規范。甚至有些都沒有嚴格的測試就到客戶那裡去上線,讓客戶去當小白鼠,做一個敗一個。
所以作為程序員最好是能開始到大公司去學習鍛煉規范的軟體開發那是很有益的。至於是不是阿里倒不一定,能進入阿里當然好。而說到編碼水平,絕大部分還是要靠自己的努力,特別是培養思維能力、基礎知識、見多識廣、多加實踐與交流,對自己編碼能力提升是必不可少的。天賦程序員確實有,但絕大部分程序員要說天賦都談不上,大部分也就是上面幾項用了更多的時間吧。
能力上,bat的程序員遠超小公司程序員;不要相信那些什麼小公司的程序員什麼都要做所以咋樣咋樣,大公司就只是一顆小螺絲釘,自欺欺人而已;大公司的程序員天賦就強於小公司的程序員,技術靠的是天賦+努力,天賦遠遠重要於努力,你不信那就是你傻
在阿里三年的老人說一下。主要是能夠獲取和見識到小公司不能給你的經驗,場景和挑戰
說到電腦的編程,對於學計算機的人來說真的是一件非常頭疼的事情,每天的編程工作都要面對各種各樣的字母,各種各樣的特殊符號,一般人看見也就只能一懵一懵的。每個程序員之間也都是有技術好技術低的,並且程序員在選擇公司的時候也面臨很大的困難。
現在 社會 上找工作的人都有一個普遍的現象,在小公司工作的人都想去大公司,在大公司工作的人想去中小企業工作。每個程序員都想得到一個展現自己的機會,讓自己所學的知識有所用武之地。能力較強的程序員就去了大公司,能力有點差異的就去了中小企業,但是這兩者在各自公司的發展並不一樣。
在中小企業工作程序員有可能會在公司有更大的發展空間,在大企業裡面有著許多優秀的程序員,就像是阿里巴巴,有可能在這個團隊裡面自己的能力不能跟好的發揮。有一點要清楚,技術高的人在一起會越來越優秀,他們各自有各自的特點,都會互相學習互相進步,前進的動力也大。普通公司的程序員自我提升的空間較小,沒有像阿里巴巴這樣的公司程序員水平高。
大企業對程序員的要求也很高,這些程序員所要面對的困難也非常大,逼迫著自己去提升自身的能力,如果兩個技術相匹配的程序員一個去普通企業,一個去阿里巴巴這樣的大公司,在工作一段時間後,在阿里巴巴工作的程序員要遠遠超過普通公司的程序員。雖然大公司的程序員想去中小公司,但是對他們更是一種較大的損失。
更多優質內容,請持續關注鎂客網~~
大公司的程序員,在代碼專精度方面確實超過小公司程序員。他們往往在技術的某一方面鑽研頗深,在代碼實踐上做得細膩完美無可挑剔。小公司程序員在專精度上不如bat程序員,因為大環境使然,無法讓一個程序員只負責某一模塊的代碼,他們往往一個人當兩三個人用,常常遇到的復雜業務用現有框架和技術無法解決,需要自己結合多個技術框架和知識點才能解決復雜的業務。
所以都是程序員,環境和平台造就了程序員代碼風格和側重點不同,但就工作態度和對技術的專注程度來說,大公司的程序員無疑是有更優異的條件來養成這些良好習慣的。作為程序員,一生還是應該去大廠體驗不同的企業文化和更高素質的從業人員,自身的見識和深度也會有所不同。
單純從技術上來說,大公司是小公司沒法比的,
大公司系統要更加復雜,研究的東西更加深入。
比如高並發,大數據,
小公司沒有那麼大流量和數據量根本沒辦法研究,
大公司一個系統N台機器,
為了節省資源就要研究怎麼使機器能力最大化,優化代碼,優化邏輯。
小公司可能一兩台機器就能支撐一個系統,只要沒bug就能正常運行。
非技術層面的就看公司的業務能力了。
個人看法,
⑺ 阿里巴巴java程序員p7級別需要哪些技能和條件,怎麼才能成功進入阿里p7級別
首先P7一般都不是隨便給的,都需要你有很深的資歷才能拿到。
一般進去的本科生和研究生給到P3,P4
優秀的給到P5
從P5到P7至少要干10年,要麼是學術能力強,要麼是工程能力強
⑻ 作為一個應屆生程序員,我是怎麼通過阿里的三輪面試的
首先,自我介紹。
我:「我做過兩個項目。寫過幾篇論文和專利。還參加過阿里巴巴大數據競賽。同時,出於個人興趣,我還閱讀了一下HDFS的少部分源碼,理解了一下HDFS的核心思想,實現了一個功能非常簡單,並且還不完善的HDFS。」
面試官1:「說一說你寫的論文中的某一篇的創新點?」
我:「我寫的文章或者專利,主要遵循一個原則:將已有的理論或者模型應用到新的場景中。所以,都是偏向應用的。重點說說這篇論文吧。首先,從奇異值分解說起吧……」
大概講了幾分鍾後,面試官1打斷我:「你做的這些東西都偏向數據挖掘方向,為什麼沒有投數據挖掘呢?」
我:「因為,按照我的理解,數據挖掘這個崗位需要對機器學習演算法有深入研究,然而,我做的偏向於對數據挖掘演算法的應用。所以,我想投研發,偏向數據挖掘和分布式方向,從基礎做起。」
面試官1:「其實,你的優勢是做過數據挖掘。這樣吧,我先找一個數據研發的面試官對你進行一下面試。等會兒,你再來我這。」
雖然自己也系統地學習過機器學習演算法,但是接觸時間太短(幾個月),研究不夠深入,只在比賽中用過少數幾種演算法:LR、RF和GBRT。自己的優勢在於對數據的理解和特徵的提取,以及演算法的應用。
而演算法推導過程並不清楚,只是理解了其思想。我怕被問得太細致,所以不是很情願。不過,在面試官1的堅持下,最終還是同意了。
看到第二個面試官的牌子上寫著「數據研發」,我稍微舒了口氣;幸好不是「數據挖掘」。
今年,「數據研發」崗位招人挺多的,很多都是去小微金服。面試完之後,我覺得「數據研發」的崗位要求是這樣子的:
熟練掌握基本的SQL語句;因為有一道筆試題目。我覺得阿里應該用自己的ODPS-SQL(類似於Hive)進行數據研發,雖然這個平台挺復雜的,但是面試的時候的要求並不高。只要掌握基本的內建函數和SQL語句就行了:select, group by…
我在比賽過程中,寫過幾萬行SQL代碼(去重之後幾千行),沒有用到過索引和視圖;經常用到內建函數,偶爾使用UDF(用戶自定義函數)。但是,寫的代碼不包含索引、視圖和UDF。也沒有考優化(其實我也不懂)。
有數據研發方面的相關經歷,面試官似乎很注重這一項。我參加過阿里巴巴大數據競賽。
對數據研發有一些自己的看法。這個很關鍵,一定要思路清晰。我主要在講比賽中的模型:數據的預處理->訓練集、預測集->特徵提取->進一步處理->正負樣本比例->訓練->預測。
當然會用寫MapRece的話就過更好了。阿里的平台提供了MapRece,估計工作中會用到。
然後,跟第二個技術面試官開始交流。
面試官2:「自我介紹一下吧。」
我:「剛才介紹過其他經歷了。那我主要介紹下與數據研發相關的經歷吧。」然後,簡單說了下自己參加的阿里巴巴大數據競賽。
面試官2:「行。先做一道題目吧。」
面試官給了我一道SQL的題目:給定一個表,共四列:user_id, brand_id, time, cnt(花的錢數)。從這個表裡面選出用戶B對每個品牌brand購買的總額度。
一看到,有點竊喜,這跟我競賽做的東西太相似了。
跟面試官進行簡單溝通後,很快寫出來了。不過還是怕做錯,檢查了很久才拿給面試官2。順便提了一下,如果需要處理字元串的話,我會用ODPS-SQL裡面的UDF。面試官看了下程序,沒說什麼,就放到了一邊。
後面,我們主要在討論阿里巴巴大數據競賽:我做了什麼,用什麼模型、演算法做的,准確率是多少。(這塊討論時間最多)
還好,我主要討論的是對業務和數據的理解,沒有深入討論數據挖掘演算法。
討論很順利。結束之後,面試官2把我帶回面試官1。
回來後,繼續與面試官1主要討論我寫的論文。由於之前對自己寫的論文進行過總結,思路很清晰。並談論了寫論文的體會和收獲。
總之,第一面的面試官很和藹,交談也很開心。
再次稍微提一下:個人覺得面試官主要有兩類,一類是用技術把你問死,從而判斷你對技術的掌握深度。
另一類是,簡單的技術問題之後,讓你去表現,引導你來講,從而看你這個人的思想、表達能力、個人觀點等綜合素質。
當然,一個面試官如果看到你不善於表達,就只能一直問你問題了。很榮幸,我碰到的是第二種面試官。面試跟聊天一樣輕松。
最終,順利通過。
應該是這個樣子的吧 哈哈【ITjob]
⑼ 程序員在阿里巴巴總部工作是怎麼樣的
你好,程序員在阿里工作從以下三個方面來說,在互聯網公司總體是不錯的。
1、阿里工程師崗位職級
阿里巴巴集團採用雙序列職業發展體系:
一套體系是專家路線【P序列=技術崗】,程序員、工程師,某一個專業領域的人才,一共分為14級,從P1到P14,目前校招最低從P4開始。
一套體系是M路線,即管理者路線【M序列=管理崗】,從M1到M10。
考核因素是上一年的績效分數+直屬領導的打分+晉升委員會打分,這里的委員會一般由直屬領導+合作方的高管+懂業務的HRG組成。HRG:HR多面手,base在業務下面,在阿里話語權比別的互聯網HR高。
晉升標准:績效滿足3.75、主管提名、技術答辯通過。
P8架構師作為阿里「IT架構靈魂人物」的角色,他們不僅做著架構師的本職工作,還同時做程序開發,寫核心代碼的工作。另外,架構師依舊是技術高手,編程能力依然是一流的。
但根據當前的市場需求,互聯網大廠們對於普通Java開發人才需求逐年銳減,而對互聯網架構師人才的需求招聘量已經上升到50%,因此薪資更是不可同日而語。
對於想學習互聯網架構師的同學來說,北大青鳥、課工場等優秀品牌都是不錯的選擇。課程根據招聘需求制定,包含全部分布式微服務技術,對標阿里P8級別架構師。
希望我的回答對你有所幫助!
⑽ 如何看出來阿里是不是外包公司
目前在大眾的觀念中,幾乎傳統的所有產品、項目、服務類型的軟體公司都屬於外包公司。
事實上中國外包業務的發展經歷了長期的衍變。
以前做產品的現在也做外包業務、做項目的也做外包、做運維的也做外包、做互聯網的也做外包,故而全中國的軟體公司都是外包公司也說得過去。
01
很多公司不能全部歸為外包公司,實際上還是有很大區別的。主要看其外包業務收入佔主營業務收入的比例是否超過50%。
比如我們說起來業內比較知名大型軟體類外包公司包括:文思海羨賀輝、中軟國際、東軟集團、軟通動力、法本信息、博朗、博彥、中科軟等。這些大型軟體外包公司一般有幾萬人規模,有對日的、對歐美的、還有更多的是面向中國國企、外企和大型互聯網企業的。
還有很多大型的傳統產品或項目型軟體公司也做各類外包業務,比如寶信軟體、東方國信,浪潮、用友、亞信等。
可以說中國知名的軟體公司少有不做外包的。
這些公司大多是上市公司,主要在國內,有些在國外。
這些公司真的都能叫外包公司么?如果按照有外包業務就叫外包公司看,那麼阿里、華為都是外包公司了!現在企業級市場也多了batj等傳統互聯網企業,特別是阿里,最近幾年積極進軍企業級市場,投標政府還有各大型行業客戶外包訂單。
根據財政部網站2021年4月26日的《麗澤金融商務區構築全球新興金融高地》文章顯示,「麗澤將全力支持中華聯合保險集團股份有限公司與阿里雲計算有限公司就保險行業數字化轉型及保險科技開展項目,建立新一代全分布式保險核心系統。」
還有華為,就更不用說了。
華為2021年年報業務佔比
華為一半以上收入來自於消費者業務和運營商業務,其中有大量的服務項目,都是需要駐場或者出差的,企業業務只佔2.1%,華為還和中軟有合資的外包公司,那麼華為算外包公司么?
02
當市場上大量的軟體公司被打上外包公司時,他們的心情會是怎樣的呢?
大家認為的外包公司其實很多以前真的專注於產品、服務,比如用友就是做財務軟體的,比如亞信就是做計費軟體的。
2002年的時候亞信就是中國移動的主要供應商,很多程序員就要駐場二次開發和項目實施部署,也沒人認為自己是在一家外包公司,還是很為公司自豪的。
有些程序員本能地反感所有的外包公司,實際上是大量的不規范公司的不規范操作或者說是近幾年的市場決定的。
2012年後,中國大型國企實力越來越強,同外企和上市公司一樣,對於人效比的要求和考核越來越高,業務需要不斷增長,但是公司的資源卻燃納滿足不了所有的編制人員,使用外包人員可以很大程度的降本增效,於是大量的業務被外包出去。
越來越多的小型外包公司出現,也有越來越多的傳統軟體公司開始介入外包業務。
大家要明白一點,全中國不知道有多少程序員,能自己單獨做產品的佔多少比例?大部分還是做項目,項目都是誰派發出來?主要是政府、國企、外企和海外。
所以其實很多軟體公司也是沒辦法,誰不想自己的員工就在自己公司,好管控、離職率也低,但甲方不同意,從代碼安全性、便於管理等角度出發一般都要求駐場。
也是從那時候開始,大量的被外包的程序員逐漸積累了越來越多的怨氣,演變成現在在知乎上兄段派是只要是外包公司就不投簡歷。
如果全中國的程序員都不考慮外包公司,那麼實際上能夠供大家選擇的崗位是非常少的。
最終大部分程序員會無處可去,相對應的外包公司也會隨之倒閉。
所以大家不用那麼排斥,存在即合理,只要擦亮眼睛,挑選好正規的外包公司就可以規避這個問題,大中型軟體公司做外包業務是基於市場現狀決定的,因為國企也好、外企也好、上市公司也好都缺乏正式編制,指標年年上浮,團隊KPI不斷提升,業務量上去了只能找外部公司,比如阿里接了個單,阿里就變成外包公司了?不至於。
正因為有需求,才會有市場。