
發布
注冊
/
登錄程序員的案例
程序員如何自我學習?
非雞湯:音樂是不錯的,好像有針對程序員編碼的音樂,個人不是發燒友,但是還是推薦一下。
適當的硬件支持
進辦公室看一下同事的電腦,你就大概能區分一些職業。用13寸的MacBook Pro或者Air,絕對不是Java程序員。如果是Golang或者C++程序員,一定不會用JetBrains的IDE工具,基本都是Editor類等。對硬件建議僅僅適合Java類的程序員,硬件好點是讓你速度更快。蘋果最新的MacBook Pro 2018確實非常不錯,終于有32G內存,大家可以考慮入手。
總結
如果沒有圖片、視頻,只是純粹的文字,讀起來會比較枯燥。大家在學習的過程中可能有不少自己的心得,如好用的知識整理方法、做筆記的方法、時間管理法等。如果大家有好的方法和技巧,歡迎在留言區交流,我們共同進步。
轉載聲明:本文轉載自「阿里技術」,搜索「ali_tech」即可關注。
展開 (轉)Java程序員應該了解的10個面向對象設計原則
面向對象設計原則是OOPS(Object-Oriented Programming System,面向對象的程序設計系統)編程的核心,但大多數Java程序員追逐像Singleton、Decorator、Observer這樣的設計模式,而不重視面向對象的分析和設計。甚至還有經驗豐富的Java程序員沒有聽說過OOPS和SOLID設計原則,他們根本不知道設計原則的好處,也不知道如何依照這些原則來進行編程。
眾所周知,Java編程最基本的原則就是要追求高內聚和低耦合的解決方案和代碼模塊設計。查看Apache和Sun的開放源代碼能幫助你發現其他Java設計原則在這些代碼中的實際運用。Java Development Kit則遵循以下模式:BorderFactory類中的工廠模式、Runtime類中的單件模式。你可以通過Joshua Bloch的《Effective Java》一書來了解更多信息。我個人偏向的另一種面向對象的設計模式是Kathy Sierra的Head First Design Pattern以及Head First Object Oriented Analysis and Design。
雖然實際案例是學習設計原則或模式的最佳途徑,但通過本文的介紹,沒有接觸過這些原則或還在學習階段的Java程序員也能夠了解這10個面向對象的設計原則。其實每條原則都需要大量的篇幅才能講清楚,但我會盡力做到言簡意賅。
原則1:DRY(Don't repeat yourself)
即不要寫重復的代碼,而是用“abstraction”類來抽象公有的東西。如果你需要多次用到一個硬編碼值,那么可以設為公共常量;如果你要在兩個以上的地方使用一個代碼塊,那么可以將它設為一個獨立的方法。
展開 國產瀏覽器被指造假背后:一位號稱創造404頁面的80后莆田程序員
△ 截圖來自微博用戶@水獸登革熱
80后莆田程序員和他的一顆紅芯
在之前的采訪報道中,這位80后被描繪為“來自莆田的程序員學霸”。根據此前《中華兒女》的采訪,可以還原陳本峰的經歷。
1998年,陳本峰以福建莆田全市高考理科第三名的成績,考入中國科技大學。
2000年,由于編程能力出眾,本科導師帶陳本峰涉足訊飛的項目。陳本峰說:“自從加入訊飛,我的生活費就全靠自己了,沒有再向家里要錢。如今科大訊飛已經成功上市,市值最高達300億元?!保拼笥嶏w2008年上市)
本科畢業后,陳本峰赴香港科技大學計算機系攻讀碩士學位。
2006年,研究生畢業的陳本峰加入微軟,“擔任IE瀏覽器核心研發工程師,參與開發了IE8、IE9、IE10瀏覽器”。
據千人計劃網的報道,陳本峰“編寫的IE 404頁面,從IE8一直沿用至今”。在更多的報道中,陳本峰被形容為404的締造者,“為微軟省了2.97億”。
我上網時間短,不知道這里說的404是哪種404,反正紅芯的官網這次用了一次。
2012年,陳本峰離開微軟,前往香港創立云適配公司。當時正是互聯網向移動互聯網轉型的時期,云適配要解決的問題是:“用一行代碼解決跨屏網站的網頁跨平臺、跨屏適配問題,實現企業的跨平臺和跨屏適配”。
2017年12月,紅芯與中科院計算機網絡信息中心共同成立了移動應用與紅芯云安全聯合實驗室,“結合人工智能和大數據分析技術,著力于瀏覽器內核安全性方面的技術和理論研究,致力于打造新一代瀏覽器核心技術”。
后來,云適配連公司名也改了。
微博用戶 @老編輯不上班 說:“中興是416被宣布制裁的,云適配是五一放假后就宣布改名紅芯的。從這一點來說,還是要為創業公司的執行力點贊的”。
此番融資后,紅芯聯合創始人兼COO高婧表示,現在“既有政治紅利又有技術紅利”。
展開 又一程序員倒下,內心感到悲涼。。
昨天和朋友一起喝咖啡聊日常工作的事情,得知他公司有個程序員因加班導致暈倒不省人事,
真是讓人唏噓不已,年僅24歲剛剛畢業的大學生,人生充滿了機遇和前途,卻就這么倒在了路
上。
視頻地址
在網上看到這個視頻有點感觸,有時候會問自己:年輕那么拼命為了什么?
來深圳3年了。
每天下班回到已經是累趴的狀態。
感覺那一點底薪養不活自己。想要逃避自己,逃避現實。
為了房租低一點,唯有在關外租房,誰知道最近幾個月,萬科收購城中村搞什么高級公寓,這
是要淘汰一些人的節奏啊,月入不到一萬,感覺在深圳活不下去。。。關外房租高漲 、可是
苦了我們這一群常年在外漂泊的屌絲們~~現在都是在給房東打工啊!漂在大城市,本來是沒
有家的,但一個地方住久了,哪怕是租來的,也會漸漸有了家的感覺。早上一邊吃早餐一邊擠
地鐵還好,可以接受,出地鐵站排隊五分鐘可以接受,去公司等電梯三分鐘都可以接受,經常加班加點也可以勉強接受。。。。其實
現在都不知道,未來的生活會怎樣。。。。迷茫。。。。恐懼。。。。
累的是什么?????空虛感????
深知,這只是一個短暫停留的城市??赡苓^不了多久,因為不喜歡就會離開。。。,就當我年
輕喜歡折騰吧。。。。。
唉,年輕雖然是資本,但這個資本不懂得愛護,用命拼,到最后無福享受,那活著還有什么意
義?有錢又怎樣?沒了健康?
什么都是浮云。
展開 
每個程序員都必須知道的8種通用數據結構
幾乎所有已開發的程序或軟件系統都使用數據結構。此外,數據結構屬于計算機科學和軟件工程的基礎。當涉及軟件工程面試問題時,這是一個關鍵主題。因此,作為開發人員,我們必須對數據結構有充分的了解。
在本文中,將簡要解釋每個程序員必須知道的8種常用數據結構。
1
數組
數組是固定大小的結構,可以容納相同數據類型的項目。它可以是整數數組,浮點數數組,字符串數組或甚至是數組數組(例如二維數組)。數組已建立索引,這意味著可以進行隨機訪問。
Fig 1. Visualization of basic Terminology of Arrays
數組運算
· 遍歷:遍歷所有元素并進行打印。
· 插入:將一個或多個元素插入數組。
· 刪除:從數組中刪除元素
· 搜索:在數組中搜索元素。您可以按元素的值或索引搜索元素
· 更新:在給定索引處更新現有元素的值
數組的應用
· 用作構建其他數據結構的基礎,例如數組列表,堆,哈希表,向量和矩陣。
· 用于不同的排序算法,例如插入排序,快速排序,冒泡排序和合并排序。
2
鏈表
鏈表是一種順序結構,由相互鏈接的線性順序項目序列組成。
展開 專屬程序員的兼職~~~
在規定時間內,時間自行安排 要求時間內完成即可
node.js、C/python網絡編程、數據可視化、軟件工程、機器學習、數據庫、安卓、編譯原理、
人工智能、操作系統、計算機組成原理、匯編、前端、后端、數據結構、算法分析、計算機網絡、圖像識別、PHP、并行
計算、分布式、單片機、嵌入式、人機交互、信息安全、大數據、云計算、軟件設計、項目管理、數據挖掘、計算機視覺、
unity、UML、神經網絡、信息安全、爬蟲...等等
編程語言:Java,C、C++、Python、Linux、MATLAB、Haskell,LISP、scala、C#...等等
要求:
1.國內本科院校在讀(大三.大四)或畢業,或者國外前300的院校
2.專業方向:計算機類、軟件工程類、信息與通信工程類、自動化類、航天類等相關領域專業背景
3.技能和經驗:
工作說明:我們每天都有在線發布任務,待遇優厚、時間自由、地點自由,線上辦公 ,不耽誤您個人事宜。薪酬從幾百幾千不等,多勞多得,同時積累項目經驗。添加備注來源,
以便我們后續安排
符合以上信息并且感興趣的朋友可以發送郵件到: 19283933696@163.com網易郵箱
招聘信息長期有效,歡迎咨詢
展開 專屬程序員的 兼職 來啦!??! 長期有效
在規定時間內,時間自行安排 要求時間內完成即可
node.js、C/python網絡編程
、數據可視化、軟件工程、機器學習、數據庫、安卓、編譯原理、
人工智能、操作系統、計算機組成原理、匯編、前端、后端、數據結構、算法分析、計算機網絡、圖像識別、PHP、并行
計算、分布式、單片機、嵌入式、人機交互、信息安全、大數據、云計算、軟件設計、項目管理、數據挖掘、計算機視覺、
unity、UML、神經網絡、信息安全、爬蟲...等等
編程語言:Java,C、C++、Python、Linux、MATLAB、Haskell,LISP、scala、C#...等等
要求:
1.國內本科院校在讀(大三.大四)或畢業,或者國外前300的院校
2.專業方向:計算機類、軟件工程類、信息與通信工程類、自動化類、航天類等相關領域專業背景
3.技能和經驗:
工作說明:我們每天都有在線發布任務,待遇優厚、時間自由、地點自由,線上辦公 ,不耽誤您個人事宜。薪酬從幾百幾千不等,多勞多得,同時積累項目經驗。添加備注來源,
以便我們后續安排
符合以上信息并且感興趣的朋友可以發送郵件到: 19283933696@163.com網易郵箱
招聘信息長期有效,歡迎咨詢
展開 如何查看版本之間代碼的不同?代碼比較工具推薦
程序員多數都用過版本管理工具SVN,該軟件具有代碼的比較功能,既能很好的管理不同版本的代碼,又能比較版本的更改,是一個很好用的軟件工具。除此之外,還有哪些代碼比較工具呢?和大家分享一下。
俗話說:三句不離本行,對于程序員這個可愛的群體來說也是一樣,即使面對無休無止的編程工作,程序員們依舊任勞任怨的埋頭苦干,夢想著用自己碼下的代碼改變世界。工欲善其事,必先利其器,每一位程序員都有自己私藏的編程必備工具,接下來就給大家推薦5款程序員最佳的代碼比較工具。
01
Beyond Compare
Beyond Compare可以很方便地對比出兩份源代碼文件之間的不同之處,相差的每一個字節用顏色加以表示,查看方便,支持多種規則對比。
Beyond Compare選擇最好的方法來突出不同之處,文本文件可以用語法高亮和設置比較規則的方法進行查看和編輯,適用于用于文檔、源代碼和HTML。
02
Diffuse
Diffuse在命令行中的速度是相當快的,支持像 C++、Python、Java、XML 等語言的語法高亮顯示。
展開 如何學好C語言(轉)
能給像遇到這樣煩惱的程序員一點建議嘛?謝謝!
我相信,這可能是很多朋友的問題,我以前也有這樣的感覺,編程編到一定的時候,發現能力到了瓶頸,既不深,也不扎實,半吊子。比如:你長期地使用Java和.NET ,這些有虛擬機的語言對于開發便利是便利,但是對于程序員來說可能并不太好,原因有兩個:
虛擬機屏蔽了操作系統的系統調用,以及很多底層機制。
大量的封裝好的類庫也屏蔽了很多實現細節。
一段時間后,你會發現你知其然,不知所以然。。我以前在CSDN上寫過一篇《Java NIO類庫Selector機制解析(上,下,續)》,在那篇文章中我說提到過(有譏諷的語氣)Java的程序員不懂底層實現,所以很難把技術學得更扎實。此時,一部分程序員會不自然地想學學底層的技術,很自然的,C語言就被提了上來。
下面是我給這位朋友的一些建議:
鼓勵并為你叫好。我鼓勵你想要去學C語言的想法和精神,很多人都覺得C語言好學,其實并不然。(你可以看看《C語言的迷題》)現在的這個社會更多地去關注那些時髦的技術,而忽略了這個流行了40+年的C語言。一門技術如果能夠流行40多年,這才是你需要去關注和學習的技術,而不是那些剛出來的技術(過度炒作的技術,Windows編程史)。這才是踏踏實實的精神。
不要找借口。這一條路走下來并不容易,不要給自己找借口。我最不喜歡聽到的就是“很忙,沒有時間”這樣的借口。我以前在銀行做項目,早9點到晚10點,周一到周六,我一樣可以每天抽1個小時來看書和專研,一年下來也能精讀5、6本書。我現在的工作項目和招聘任務很緊張,剛生的小孩只有自己和老婆兩人帶,還需要準備講課,但是我還是能夠找到時間看文章寫文章維護酷殼。所以,我可以告訴你,“時間就像乳溝,只要你肯擠,就一定會有”。
學好C語言和系統編程。
展開 Python介紹,什么是Python?
面向對象:Python語言具備所有的面向對象特性和功能,支持基于類的程序開發。
動態語言:在運行時可以改變其結構。例如新的函數、對象、甚至代碼可以被引進,已有的函數可以被刪除 或是其他結構上的變化。動態語言非常具有活力。
3. “內置電池”,大量的標準庫和第三方庫
Python為我們提供了非常完善的基礎庫,覆蓋了系統、網絡、文件、GUI、數據庫、文本處理等方方面面,這些 是隨同解釋器被默認安裝的,各平臺通用,你無需安裝第三方支持就可以完成大多數工作,這一特點被形象地稱 作“內置電池(batteries included)”。
在程序員界,有一句話叫做“不要重復造輪子”。什么意思呢?就是說不要做重復的開發工作,如果對某個問題 已經有開源的解決方案或者說第三方庫,就不要自己去開發,直接用別人的就好。不要過分迷信自己的代碼能 力,要知道,能作為標準庫被Python內置,必然在可靠性和算法效率上達到了目前最高水平,能被廣泛使用的第 三方庫,必然也是經受了大量的應用考驗。除非公司要求,不要自己去開發,請使用現成的庫。那些造輪子的事 情,就交給世界最頂尖的那一波程序員去干吧,沒有極致的思維和數學能力,想創造好用的輪子是很難的。
4. 社區活躍,貢獻者多,互幫互助
技術社區的存在就相當于程序員手中的指南針,沒有指南針,很多時候,碰到了問題,就像無頭的蒼蠅只能到處 亂飛,最終在茫茫的海洋中轉暈致死。技術社區可以給我們對語言的學習和使用提供巨大的幫助,無論是前期的 學習,還是日后的工作,只要有問題,技術社區的大牛都可以幫我們解決,有這些助力,可以幫我們更好地了 解、學習和使用一門語言。技術社區同時還推動Python語言的發展方向,功能需求,促使公司企業更多的使用 Python語言,招聘Python程序員。
然而、然而,上面說的是國外。
展開 (轉載)分布計算 | 大數據機器學習系統研究進展
然而,現有的大數據處理技術和系統平臺都存在很大的易用性問題,難以為普通的程序員掌握和使用,尤其是面向復雜的大規模機器學習和數據分析時,這個問題更為突出。
大數據機器學習和數據分析的并行化程序設計,比傳統的串行化算法設計復雜很多、對程序員的技術要求更高。對于普通的數據分析程序員或機器學習研究者來說,在特定的大數據編程模型和平臺下進行并行化機器學習和數據分析算法設計,需要掌握很多分布式系統背景知識和并行程序設計技巧,這對他們來說難度較大,經常要把實際工作的大部分時間花費在底層復雜的并行化和分布式編程和調試上,給上層數據分析和算法設計工作帶來很大的不便和困難,導致普通程序員與現有的各種大數據處理平臺之間存在一個難以逾越的鴻溝[8,9,13~15]。
另一方面,即使對于諸如Google、百度等具有強大技術力量的互聯網企業程序員來說,隨著多種大數據處理與編程平臺的出現以及各種分析應用問題需求的不同,他們也常常需要針對不同平臺,重復編寫和測試各種并行化機器學習和數據分析算法,這種在多個大數據平臺上重復編寫和嘗試數以百計的機器學習算法的工作負擔也很重。正如阿里巴巴集團副總裁、高級研究員章文嵩博士在中國計算機學會第一屆大數據學術會議上所指出的,“淘寶內部需要使用的并行化機器學習算法很多,隨著新型的并行化計算框架的逐步出現,需要將其逐個實現到MPI、MapReduce、Spark等并行計算框架上;如果后面出現更先進的框架,又面臨著將這些算法重新實現一遍的負擔”。
針對大數據的機器學習和數據分析,現有的大數據處理技術和平臺存在很大的可編程性和易用性問題,導致普通程序員和常規的程序設計方法與現有的大數據分析處理編程技術之間存在著一個很大的鴻溝。
展開 
詳解堆和棧的區別
01
預備知識 程序的內存分配
一個由C/C++編譯的程序占用的內存分為以下幾個部分:
棧區(stack):由編譯器自動分配釋放,存放函數的參數值,局部變量的值等。其操作方式類似于數據結構中的棧。
堆區(heap):一般由程序員分配釋放,若程序員不釋放,程序結束時可能由OS回收。注意它與數據結構中的堆是兩回事,分配方式倒是類似于鏈表。
全局區(靜態區)(static):全局變量和靜態變量的存儲是放在一塊的,初始化的全局變量和靜態變量在一塊區域,未初始化的全局變量和未初始化的靜態變量在相鄰的另一塊區域。- 程序結束后由系統釋放。
文字常量區:常量字符串就是放在這里的。程序結束后由系統釋放。
程序代碼區:存放函數體的二進制代碼。
例子程序:
02
堆和棧的理論知識
申請方式
stack:
由系統自動分配。
展開 Python相比其他計算機語言真的更有優勢嗎?
面向對象:Python語言具備所有的面向對象特性和功能,支持基于類的程序開發。
⑥動態語言:在運行時可以改變其結構。例如新的函數、對象、甚至代碼可以被引進,已有的函數可以被刪除 或是其他結構上的變化。動態語言非常具有活力。
三、“內置電池”大量的標準庫和第三方庫
Python為我們提供了非常完善的基礎庫,覆蓋了系統、網絡、文件、GUI、數據庫、文本處理等方方面面,這些是隨同解釋器被默認安裝的,各平臺通用,你無需安裝第三方支持就可以完成大多數工作,這一特點被形象地稱 作“內置電池(batteries included)”。 在程序員界,有一句話叫做“不要重復造輪子”。什么意思呢?就是說不要做重復的開發工作,如果對某個問題 已經有開源的解決方案或者說第三方庫,就不要自己去開發,直接用別人的就好。不要過分迷信自己的代碼能 力,要知道,能作為標準庫被Python內置,必然在可靠性和算法效率上達到了目前最高水平,能被廣泛使用的第 三方庫,必然也是經受了大量的應用考驗。除非公司要求,不要自己去開發,請使用現成的庫。那些造輪子的事 情,就交給世界最頂尖的那一波程序員去干吧,沒有極致的思維和數學能力,想創造好用的輪子是很難的。
四、社區活躍,貢獻者多,互幫互助
技術社區的存在就相當于程序員手中的指南針,沒有指南針,很多時候,碰到了問題,就像無頭的蒼蠅只能到處 亂飛,最終在茫茫的海洋中轉暈致死。
技術社區可以給我們對語言的學習和使用提供巨大的幫助,無論是前期的學習,還是日后的工作,只要有問題,技術社區的大牛都可以幫我們解決,有這些助力,可以幫我們更好地了 解、學習和使用一門語言。
技術社區同時還推動Python語言的發展方向,功能需求,促使公司企業更多的使用 Python語言,招聘Python程序員。
展開 轉行學設計?新手必讀的五大誤區+三大秘籍(轉載)
如你所見,這里的秘籍都是邏輯化的思考方式,作為程序員、聰明如你,這不都正是你擅長的么?所以,我一直挺認同那句話:程序員學好設計,相比反之設計學好程序,要容易的多。下面逐個重點展開說下:
理論先行 —— 審美速成
這個話題主要關于審美,最基礎、最重要。
審美不是天生的,沒有人天生就有出類拔萃的審美能力。當然在這樣一個平均審美偏低的國度,你很可能受環境影響大,導致系統默認值差一點,但這也不代表你一輩子就這樣了。
這里推薦一個視頻,Smartisan 設計師羅子雄在TEDx 上的演講:如何成為一名優秀的設計師
其實這個視頻就如何成為一名優秀設計師這個點上,已經講的足夠好,大多觀點我都很認同。但其實也都還是比較基本的、常識性的,缺少針對特殊群體的「黑科技」。
為何如此強調審美,相信你已有感受:對于設計來說,審美就是你的模擬器或測試環境,是評價標準,沒有它,設計也無從談起。
提高審美,光看是不夠的
理論是基礎。
前面的視頻里,羅子雄特別強調了審美要通過多看優秀作品來提升。沒錯,但其實,我認為光看是不夠的,特別對于程序員來說,這沒有發揮出你思考的能力。
那該先做點什么呢?
答案是,看書…學習設計理論。
可能這看上去有點像書呆子的答案。但回想下你學習任何一門新開發語言的經歷,先刷一遍書,肯定是很有必要的,設計也是一樣。
就像程序設計的面向對象、MVC 的設計模式,幾乎通用于流行的框架,無論是后端的 Rails 還是前端的 Angular,或客戶端的 Cocoa Touch;當下大火的 ReactJS 竟然和 3D 游戲動畫引擎的設計理念相通。在代碼的世界,相同的理念支撐了不同領域的框架和實現。
其實在設計方面也是一樣,有限的設計理論,同樣支撐了無限種類的設計作品。并不是「一群審美牛逼的人,就做出了牛逼的設計」這樣子。
展開 互聯網產品研發流程
程序員接到PRD方案后,需評估完成開發的大致時間,以及任務分解安排。
ID(Interaction Designer交互設計師)根據PRD定稿做出交互設計方案,真實再現用戶交互過程(工作室一般用強大的axure),并與PD、UI進行內部評審。視情況,PM參與,做完后要與需求方反復交流直到需求方滿意。
接下來VD(視覺設計師)根據axure做出的原型,進行設計頁面風格、布局、關鍵界面等。和用戶交流對頁面設計是否滿意。
WD(前端開發工程師)根據設計頁面切圖,編寫HTML,CSS,JS源代碼。
下面就進入了后臺開發階段,在編碼之前,程序員應視其系統需要,進行概要設計、數據庫設計,并進行內部討論和評審。程序員對文檔或原型有疑問或不理解,需與PD和ID進行溝通,了解其真實涵義,不得以任何理由私自更改已確定的PRD文檔方案。確有功能需做調整,程序員需與PD、需求方共同協商完成。改動應出具文檔,由需求方、技術經理、PM同意。每個人寫的代碼都不可能完全正確,這樣就需要邊開發邊測試。
α(alpha最初)測試。在開發小組內部進行,測試的方法也較多,黑盒、白盒、 壓力、應力等。此階段應完成80%以上的需求開發,測試以PRD和原型為準。測試完成后,收集反饋,修復BUG,優化流程。
β(beta第二次)測試:有選擇地請一些最終用戶實際使用,將發現的問題反饋,開發者對系統進行最后的修改,之后準備發布最終產品。β測試開發者不在場。產品估算開發時間,以完成β測試為準。
產品上線后可能還存在一些bug,這就需要后期的維護了。等產品穩定后就完成了這次開發
展開