⑴ 遇到無法重現的缺陷,被開發打回來了,怎麼處理
測試中遇到不可重現的Bug處理辦法:
一、一定要提交。
1. 記得有這么個缺陷,以後再遇到的時候可能就會了解發生的原因。
2. 盡力去查找出錯的原因,比如有什麼特別的操作,或者一些操作環境等。
3. 程序員對程序比測試人員熟悉的多,也許你提交了,即使無法重新,程序員也會了解問題所在。
4. 無法重現的問題再次出現後,可以直接叫程序員來看看問題。
5. 對於測試人員來說,沒有操作錯誤這條.既然遇到,就是問題。即使真的操作錯了,也要推到程序員那裡,既然測試人員犯錯誤,用戶也可能會犯同樣的錯誤。錯誤發生的時候,Tester最大。
二、程序不是測試人員寫的,出問題也不是測試人員的原因。
至於無法重現,可能的原因很多,因為測試人員看到的只是程序的外部,無法深入程序內部,所以把責任推給測試人員是不對的。測試人員的任務只是盡力重現問題,而不是必須重現。
三、下次再遇到的時候,拉他們來看就可以了。
因為問題如果無論如何無法重現,程序員確實也沒有什麼好的解決方法。而且此類問題即使程序員說修改了,測試員也沒有好的方法去驗證是不是。
四、你可以告訴程序員,測試過程是沒有錯誤的。
測試人員只是檢查程序中可能存在的問題,雖然測試人員使用一定的手段方法努力去覆蓋所有的情況,但這些都是理論的推測。在實際中,可能因為人員、環境、配置等種種原因出現各種各樣的問題,在測試人員這里發現問題是公司內部的事情,程序發到外面可就是公司的形象問題了。
五、問題無法重現,也要提出,程序員那裡可以回復無法再現。問題放在那裡,等到再次出現的時候,就立刻叫程序員過來查看。實在沒有再次出現,最後可以寫到報告中,說出現了什麼現象,但無法再現(比較嚴重的問題才如此處理,小問題經理之間商量商量可能就算了)。
Bug英文單詞,本意是臭蟲、缺陷、損壞、犯貧、竊聽器、小蟲等意思。現在人們將在電腦系統或程序中,隱藏著的一些未被發現的缺陷或問題統稱為bug(漏洞)。 由於現在社會的發展,bug另有一種引申意義,用來形容某事物厲害的超乎想像,BUG可以使電腦系統崩潰、容易被施詐者攻擊,現有修復漏洞的工具。
⑵ 程序員經典面試題:並發,容易帶來哪些問題
編程對於很多人來說,還是比較好上手的。當你學會了一門語言,可以編寫一些程序了,很快就會遇到一道坎,並發編程,單線程下好好跑著的程序,怎麼就運行異常了?怎麼就得不到期望的結果。在面試中,並發編程也是經常出現,我們今天來討論一個問題, 並發編程,容易出哪些問題?
相信大家在學習並發編程的時候,都會遇到這樣一個經典問題,有一個函數,執行i=i+1,執行1000遍。在單線程的環境下,得到的結果都是預期的1000。如果是兩個線程同時運行,那麼,得到的結果可能是2000,也有可能小於2000。
這是因為i=i+1不是一個原子操作,我們會獲取i的值,然後執行一次加法運算,最後將結果賦值給i。當多個線程執行的時候,獲取到的i的值之後,在執行後面的動作之前,另外一個線程已經修改了i,造成最終的結果小於2000。
並發編程的時候,我們往往無法確定多個線程之間的執行順序,經常我們會出現這樣一個錯誤。我們在一個線程中使用的變數,會在另外一個線程中進行初始化或者賦值。最常見的,便是我們在主線程上創建一個子線程,然後再進行變數的初始化,子線程的執行可能早於父線程,造成程序錯誤。
為了解決並發問題,我們通常會引入鎖、信號、信號量等手段來保證臨界區只會被一個線程訪問,或者讓一個線程等待另外一個線程執行完成。但是,引入鎖之後,我們又可能會出現死鎖的問題,例如:線程1與線程2都需要搶佔AB兩把鎖,假設線程1先搶佔了A鎖,線程2搶佔了B鎖,這個時候,線程1在等待B鎖,線程2在等待A鎖,就這樣,等到海枯石爛,我們稱之為死鎖。
出現死鎖,需要同時滿足下面幾個條件:1.線程需要對需要的資源進行互斥訪問(例如一個線程搶到鎖)2.持有並等待(例如一個線程搶到了A鎖,然後在等待B鎖)3.非搶占(線程搶到了鎖之後,不能被其他線程搶到)4.循環等待,線程之前存在一個環路。
那麼,如何解決死鎖的問題呢?既然出現死鎖需要同時滿足上面的幾個條件,那麼,我們只要破壞其中一個條件,就能夠避免死鎖問題。
今天,我們了解到並發編程帶來的問題與解決方案,希望對你在平時的工作或者面試有所幫助。
⑶ 程序員遇到百度不出來的bug都是怎麼解決的
筆者不同意下面網友的回答。程序員如果解決bug的水平停留在網路,那麼本質上只是一個「面向搜索引擎的代碼搬運工」,是不合格的程序員。
程序員對面bug,正確的「打開方式」是像福爾摩斯和柯南那樣,尋找線索、運用邏輯推理來縮小問題可能的根因范圍,最終精準定位。
常用的方法有:
1. 壞境上下文變換法
2. 工具調試法
3. 版本回溯對比法
4. 代碼審計法
……
沒有編程問題是stack overflow和Google解決不了的,假設你在編程中遇到了問題,你自己解決不了、你周圍的的人都解決不了的時候,我覺得stack overflow、Google是你最好、也是最後的幫手。
作為一個程序員,我覺得Google、stack overflow是你必須要學會使用的兩個工具,這兩個工具本身並沒有使用門檻,只不過因為一些眾所周知的原因,很多人不能使用Google和stack overflow這兩款工具。
Google主要還是方便,而且很多編程問題都需要用到英文搜索,當然現在網路在專業能力上也提升明顯,不過跟Google也還是有比較大的差距,因此我還是強烈建議要學會使用Google,這會幫你在工作、學習上事半功倍。假設Google確實因為某些原因沒辦法很好的使用,我也建議你至少要會使用Bing搜索。
現在可以說stack overflow上沒有你找不到的問題了,從IDE環境安裝問題,到各類編程語言問題。演算法問題,數據結構問題,調試,重構等等,幾乎這里就沒有你找不到的答案,可以說在stack overflow上你可以找到任何解決方案,並且上面的回答者基本上都是非常有經驗,而且都是實際中遇到的問題分享出來的,這個工具一定要會使用。同理,除了stack overflow這個專業的垂直程序員問答社區,你也可以使用Quora這個綜合問答社區,這上面也能找到很多問題的答案。
一些比較優秀的文本編輯器: Emacs/Vim,Visual Studio Code,Sublime Text,Atom,Ultraedit,Hbuilder等。
一些比較非常出色的IDE集成開發環境: visual studio,IntelliJ IDEA,PhpStorm,Haskell for Mac ,eclipse,WebStorm,GoLand,CLion,Android Studio,Xcode,QT等。
macOS平台比較好的第三方包管理工具: Fink,Macports,Homebrew等。
一些比較好的終端工具: Zoc7,iTerm2,Cmder,terminus,hyper等。
一些比較好的筆記軟體、markdown工具、效率工具: Evernote,有道雲筆記,為知筆記,Ulysses,MWeb,FileZilla,Snipaste,Kantu等。
虛擬機軟體、容器軟體: Parallels Desktop,VMWare Fusion,Virtual Box,Docker等。
我是個程序員,職務是linux底層驅動工程師。平時的主要工作是調試驅動,但產品遇到諸如死機、重啟、不開機之類的問題時,也要參與查找原因。一部分問題,確實可以查看相關的log,然後網路這些log的關鍵字來解決;但更多的問題,牽扯的條件太多,並不是簡單的網路就能解決的。
觀察了周圍同事們的做法,我總結出以下幾種解決方法:
網路因為競價排名的原因,搜索出來的結果有很多廣告的成分,所以有時候要翻好幾頁才能看到一條相關的答案,有些甚至要翻幾十頁。
因為網路搜索使用的是SEO技術,即普通用戶可以通過優化網站內容來提升關鍵詞排名。
而這就會導致一個問題:你搜索關鍵詞後展現出來的結果是有人想要讓你看到的,並不是質量最好的。
也就是說,網路搜索結果被人為干預了。所以網路一直被網民所詬病。
但網路搜索不出結果,未必是網路的原因,也有可能是自己輸入的搜索詞不準確造成的。所以對於網路,我們要做到如下幾點:
除此之外,網路搜索還有點小技巧,粥左羅《萬字干貨,徹底講透搜索技巧,10倍提升你的搜索力(免費教程)》這篇文章寫得非常好,我整理幾點,僅供參考:
01 過濾目標內容
命令:「+」「-」
用法:通過「+」和「-」來對搜索結果進行過濾
比如在關鍵詞後加上「-推廣 -推廣鏈接」就可以排除搜索結果中包含相應字樣的鏈接。如果你發現廣告還沒有排除干凈,你也可以再加上「-廣告」通常就能徹底的消滅廣告。
02 搜索包含某關鍵詞的內容
命令:「intitle」
用法:通過「intitle」命令指定搜索結果中要包含的關鍵詞,注意「intitle」後邊連接的冒號是英文狀態下的。
03 搜索某一個格式的文件
命令:「filetype」
用法:通過「filetype」命令可以限制我們要搜索文件的類型,注意「filetype」後邊接的冒號也是英文狀態下的。
04 搜索特定時間范圍的內容
命令:「時間..時間」
用法:通過「時間..時間」命令可以限制我們要搜索的文件的時間,注意兩個時間的中間頓號沒有空格。
相對網路,谷歌、必應對於技術搜索,就相對准確許多,所以當你網路搜索不到時,嘗試下別的搜索引擎,說不定會有新發現。
現在程序員使用的機器語言,都是國外的,更准確的說,都是美國的。所以很多論壇、資料等,都是英文。如果你只會用中文來搜索,某些小眾的問題,當然搜不到啦。
所以,要學會使用英文關鍵字來搜索。
有時候甚至要去國外的一些論壇來搜索想要的答案,這就要求要有一定的英語閱讀能力,不能一看到英文帖就放棄。
有時候不管你如何搜索,都找不到自己想要的答案,該怎麼辦呢?這種情況下,就只能硬著頭皮嘗試自己解決了。
或者,尋求同事或朋友的幫助,尋求大腦風暴,說不定就會有思路。
如果有些問題是因為新器件帶來的,還可以找到器件供應商,讓他們安排技術支持幫忙查找原因。
除此之外,還可以把問題整理好,寫清發生的條件、復現步驟、測試方法、相關的LOG截圖等資料,去一些技術論壇發求助帖,尋找大牛的幫助。
做技術時間久了,發現有些問題確實無解,根本沒有辦法去解決它。
這時候,我一般會嘗試把它繞過,就是說,想辦法讓它無法復現,雖然問題還是存在,但是能把它掩蓋過去。
比如有些驅動在開機啟動時會載入不正常,那麼就讓它晚點啟動,或者手動載入。這也不失為一種解決問題的方法。
以上就是我的建立,希望對你有幫助。
首先作為一個程序員,一個優秀的程序員最最最重要的能力就是解決問題的能力。這里解決問題的能力當然就包含了解決 bug 能力了
畢竟,程序員這一生,可能會寫無數個 bug ,沒有說哪個程序員敢保證自己寫的程序沒有 bug 。 所以,寫了 bug ,遇到 bug 並不可怕,可怕的是你沒有解決 bug 的能力 。
作為一個程序員,解決 bug 的途徑有哪些呢?我們來一起聊一聊!
其實,每個程序員在學習編程的時候,都會使用編程工具,而現在的開發工具,其實功能都很強大。如果你自己合理利用編程工具,都了解和懂得開發工具的一些技巧,其實不僅僅能夠提高開發效率,而且還能夠幫助你解決很多編程中的實際問題。
debug 調試,大部分你常用的開發工具,都會有調試模式的,簡而言之,就是你編程的時候,遇到了不是自己所想的結果的時候,你可以使用 debug 模式,來一步一步的調試,在調試模式下一般每一步都會顯示所執行的結果,你可以看看在哪一步出錯了,執行的結果與你預想的結果不對,那麼你就能夠找到問題所在了。
還有就是,開發工具的控制台,都會提示出報錯信息的,現在的開發工具,都會直接告訴你哪一行,報了什麼錯。其實,很容易定位到錯誤的。你只需要在編程的過程中積累經驗,知道報什麼錯,用什麼方法來解決就行啦。
可是,提示的報錯信息,我不知道用什麼方法來解決的時候,該怎麼辦呢?這就是你需要積累的,也是問題中所描述的,就是通過搜索引擎來找答案。
不對,這里不應該是合理使用搜索引擎,應該是學會正確使用搜索引擎。比如:網路,你就不要用了,搜出一堆重復的信息,而且廣告也多。作為程序員,建議你使用谷歌搜索。
其實,你在編程中所遇到的幾乎所有的問題和 bug ,別人也同樣遇到過,因為不管是經驗豐富的老程序員,他技術再牛逼,也是初學者過來的,也都踩過你踩的坑。所以,互聯網是個好地方,裡麵包含了你想要的問題的答案。
你只要把報錯信息往搜索引擎上一放,回車一下,很多關於這個 bug 的答案就出來很多,你只需要找到跟你一樣的 bug ,就能找到答案了。
在這里必須提一下這個網站,所有的程序員有必要學會使用這個網站,其實,你編程中所遇到的問題,這個網站上幾乎都是由解答的。
Stack Overflow 可以說是最好的軟體程序類問答網站了,給軟體開發人員工作和學習提供了非常大的便利,以至於像小白,離了 Stack Overflow 簡直都不會寫程序了。
所以,建議大家一定要學會使用這個網站,對你編程肯定會有非常大的幫助的。
通過上面的方法,幾乎應該能夠解決到你所遇到的問題,但是,實在找不到答案的話,你可以問經驗比你豐富的老程序員,實在解決不了,那就換種方法吧!
網路,谷歌,debug,斷點調試,業務上的bug就需要問下同事或者產品。如果能知道大致范圍,哪一部分錯了,就換一種方法唄,一般都不會只有一種方法。
1.reload
2.restart
3.rewrite and then goto 2 or 4
4.reboot
5.rm -rf /
6.原諒我編不下去了[捂臉][捂臉][捂臉][捂臉][捂臉][捂臉][捂臉]
找bug跟醫生看病的思路是一樣的,要對症下葯。得先把問題的根源找到,找到根源以後問題就容易處理了。搜索引擎找不到的問題,說明這個問題不是一個常見的問題,具有獨特性,那麼從bug出現的路徑上一步一步去排查。必要時可以用排除法,盡可能的縮小排查范圍。另外,當軟體的業務邏輯比較繁多復雜的時候,一個結構清晰的架構能為你節省不少找bug的時間。還有,充分的單元測試能夠幫你減少出bug的機會。以上均為個人看法,歡迎討論!
一般程序員能碰到的bug無外乎其他上遊程序員寫庫時手抖留下些不匹配或者容易溢出的問題,搜一下差不多能解決問題。如果是自己寫的,那無非就是時序錯誤類型錯誤之類的,用break point一行行的調就好了。
再復雜點的bug就是程序員拿高薪的根本了,只可意會,不可言傳~
僅僅靠搜索引擎、其他網站那必然無法解決大量問題,因為很多問題是跟業務邏輯相關的,是沒有直接答案的。比如 游戲 開發有個界面一直無法顯示,這個問題就不是網路可以解決的。問題需要調試分析,這和破案非常像,但在開發過程中更有利的是問題有機會可以重現。破案是逆向工程,需要反推。解決代碼問題不僅僅可以反推,也可以通過閱讀代碼正向分析。下面說說如何debug一個業務邏輯問題。回到剛剛的例子,有個界面一直出不來,我們如何快速去定位:
1.思考這個問題發生的可能性。比如 游戲 內大量界面都是正常的,那麼可以對比正常界面代碼和異常界面代碼的區別,這是對比法。
2.假設創建正常界面和這個異常界面的邏輯代碼是一樣的,那麼問題就落到了這兩個界面內部,繼續在內部重復上面的對比法進行判斷,直到鎖定最終位置。
上面說的方法基本上可以杜絕卡在一個簡單問題上,這是擺脫新手的一個過程。選擇使用對比法或者其他方法的前提都是基於觀察和對項目的認識,所以,搜集「案發現場」是最關鍵的。
其他的問題,不屬於邏輯的,像其他網友說的那樣,有些通過到github、stackoverflow等地方解決的。這些問題也不是直接就去查找的,它通常也有個分析過程。比如你使用了一個庫,但是目前它不支持你的模塊。對於新手,就是直接網路或者google了。實際上這樣的問題也是有「案發現場」的。對於作者提供的api介面的統一性和便捷程度去推斷作者在相關支持模塊的位置以及命名以及拓展,再嘗試在文件夾中搜索。如果都找不到,再去Google上獲取更多的信息。重復推斷、分析,決定如何拓展或者繞過。
綜合上面的幾種問題,可以看到的是都離不開對現場的觀察和推理分析。這種能力也被稱為經驗。但是一般情況下你看不到它們這個分析過程,你能做的就是在實際環境中反復逼迫自己去思考,去訓練。這個推理的培養,不僅僅是對事情,也是對人。
我在入行 游戲 開發的前期,也是類似的情況。卡在不同種類的問題上,有些在簡單邏輯,有些在別人的代碼支持上。後面解決的問題多了,就會發現裡面共通的思維方式。常用的一些方法如下:
1.對比法,比較正常與異常代碼區別
2.二分查找法。分段注釋找問題,也會用在很多方面。比如最近版本突然出了一個奇怪bug,可以通過svn還原來定位。這個還原不是一個一個版本還原,而是用二分法去還原。
3.增加信息。在懷疑的位置或者過程添加日誌或者打斷點輔助自己更好的推理。
4.相似推理。比如一個引擎在api、性能使用程度上都非常友好,那麼它在別的地方也有可能相對表現比較好。這時候如果有個功能我們的實現需要很復雜才能完成,那麼就有可能是我們用錯了。相似推理不一定都能正確,但會提供一些幫助。
以上。
⑷ 程序員如何進階
程序員是一個沒有極限的職業,所以要成為一個成功的程序員,你就需要不斷的超越極限。在程序員職業生涯的開始階段,他們將面臨許多挑戰,面對困境,他們之中有一些人將會放棄,而只有少數人會堅持到底,並成為這個領域的領頭羊。
1.學習新技術
隨著新技術的不斷進步,我們學到和實施的技術會很快地過時。所以,作為一個程序員,你就需要了解與學習這些新技術,保持與時俱進。出現的這些所謂的新技術通常由一些進程和語法變化而構成,但邏輯是相通的,所以你可以很快地掌握,不要害怕去學習。
2.調試技巧
程序員不但需要創建代碼,當軟體未能按照預期方式工作時,程序員還必須能夠快速而有效地解決問題。
3.解決問題的技巧
當一名程序員獲得項目時,會直接寫代碼。但一名進階的程序員會試圖找出代碼出現問題的根源,並通知團隊領導或項目負責人。因為有時在文檔化項目需求並啟動項目後,甚至在完成項目後,我們才會在項目中遇到一些問題。所以最好在出現問題之前先找到問題。最好可以快速地找到解決問題的方法。
4.對工作的熱情
我們的工作時間大多為朝九晚五,但是當你對工作迸發激情時,那麼不要到了休息日就將工作束之高閣。一直工作直到完成它。當然,我的意思不是說如果你沒有解決方案,還得成天垂頭喪氣對著電腦,我的意思是如果你已經接近於完成的時候,那麼索性一鼓作氣搞定吧。
⑸ 央視網評45歲程序員求職難,此事反映出了哪些問題
職場“35歲現象”一直是熱議的話題,反映了職場常態是“結構性失業” ,很多企業從成本收益的角度考慮自身利益,認為年輕人的“性價比”更高,導致很多中年職場人失業難求一職。
⑹ 程序員遇到很難的技術問題是怎樣的感覺
昨天剛領一個線上P0級重大事故,持續時間1小時,影響范圍全站 !准確的時間點是下午17點開始,具體問題定位且聽我下文細細道來。
先說感覺,那感覺真是太刺激了,本來下午五點,昏昏沉沉的,瞬間一個激靈就清醒了(想像一下高中課堂,你在打瞌睡,突然老師走到你面前給你一下子的感覺),原本准備再過一小時吃晚飯了,吃完晚飯再摸魚到21點就可以下班了呀,別問我為啥到21點,問你就不是程序員!
帶著無比緊張且顫抖的心情開始定位問題,先來個錯誤日誌嘗嘗鮮:
1、下午五點開始有少量的慢sql報警,沒有人當回事,因為這種事情總發生,雖然大家都知道在實際開發中如何避免慢sql,但是整個團隊要想完全避免慢sql卻很難;
2、五點十分左右,開始零星有用戶反饋指定功能不可用,SLB開始報警,技術開始介入排查;
3、十五分左右,客服部門電話開始爆炸,用戶密集反饋指定功能不可用,技術部開始重視;
4、二十分左右,所有服務大面積出現介面無法響應,整體服務不可用;
5、我們一開始定位覺得是MySQL的問題,因為前面有mycat的慢SQL報警,後來定位並不是MySQL,因為MySQL的內存、連接數、流量這些指標都很平穩;
6、最終在五點三十分的時候我們定位到是ES出問題了,因為所有的java服務不可用最終都指向上面的錯誤日誌,bbo提供的服務線程池滿了,再有請求進來直接拒絕了,查看這個服務的代碼,最終查詢的是ES,此時的ES進程已經處於假死狀態。
那接下來大家說怎麼辦?如何快速的恢復線上服務?
重啟!
是的,只有重啟大法此時是最快的解決辦法,你不可能說保留ES事故現場,讓我用arthas之類的工具來現場分析jvm內存情況。
然而重啟之後服務依舊是不可用,介面還是無法響應, 大家知道這個時候是什麼原因嗎?為什麼重啟了ES服務還是不行?
後續繼續重啟報錯bbo日誌的相應服務,當這些服務全部重啟完畢後,我們的服務終於恢復訪問了,這個過程持續了十幾分鍾,確切的說,直到17點五十多分,我們的所有服務才恢復了訪問。
接下來就是事故總結、相關責任人、產生問題的原因、接下來的優化方案,全公司郵件通報!
你說這個難不難?本身並不難,難的是事情緊急且重要,這個時候你慌了啊,亂手亂腳的,大家你一言我一語的,如何冷靜提取有效信息然後盡可能快的解決生產的重大故障才是最難的!
最後,當一切都恢復平靜的時候,你會發現:「卧槽,好累啊!」。
虛脫的感覺!
最後祝大家程序員節日快樂,今年可是程序員的本命年哦
2020 = 1024 + 996 = 404 + 404 + 404 + 404
這種感覺能難受,很壓抑。
技術難題,對於程序員來說,是經常有的事,關鍵是如何面對吧。
說下我的事情,雖然也會寫點代碼,但並不是以此為正業,所以對於真正的程序員來說,可能說法會有點偏頗。
遇到難題時,一般都在網上搜索解決方法,一般來說,都有很優秀的程序員分享他的勞動成果,所以一般都能解決問題。但也真正碰到難的問題,一個就是循環的問題,無限極菜單問題,當時都是找了很久,看了很多遍才明白過來,當時自己是幾天都不太開心,也不太想說話,總是在測試著程序。挺煩也挺不開心的。只是最後做出來了,心情就好多了。
這是我的一些經歷,當然,如果全職程序員,可能壓力就更大了。
如何形容這種感覺呢?焦躁,緊張,失落,無助,亞歷山大...
再多詞可能都描述不清楚。本人在工作中經常遇到難題,有些問題一兩個月都搞不定。遇到這種問題,估計只有下面這張圖的表情能描述此時此刻的心態了。
程序員遇到的難題其實分為兩種,一種是沒有辦法定位清除的問題,另外一種是定位清除了,但是沒辦法,或者很難解決的問題。
難定位的問題所謂難定位的問題,其實就是你根本不知道這個問題是什麼。比如系統突然掛掉了,你從現有的信息根本不能確定問題在哪。這個時候你剩下的可能只有滿腦子的問號了。
如果系統只掛了一次,後面不再出問題,那就很難找出問題的根源了。不過這樣也有好處,那就是問題的影響的程度相對較輕,畢竟不容易出現。所以在軟體開發中通常不是什麼問題都解決的,因為不是所有問題都能搞清楚是什麼問題,談何解決呢!
難解決的問題難解決的問題是問題搞清楚了,但是基於現有架構很難,或者沒法搞定。遇到這種情況,通常先是很高興,興奮,然後就只剩下無奈了。
當然,從技術層面來說並不是完全解決不掉。只是如果要解決需要涉及架構調整或者其它方面的改動,修改調整的內容太多。這種情況下就要考慮利弊得失了。
如果改動太大,可能會引入很多新的問題,可能得不償失。因此,遇到此類問題可能會採取一些規避方案。
當然,在開發和運營當中遇到各種問題是很正常的,關鍵是遇到不同的問題採用不同的策略。首先保證的是業務的正常運行,然後是考慮是否需要徹底解決。這樣慢慢調整,心理壓力會小一些。
作為一個工作多年的老碼農,在工作也遇到過一些艱難的技術問題,就以切身體會談談對這個問題的看法。
首先需要明確一下,問題是否困難除了取決於問題本身之外,還在於解決問題的人的水平,也許對你很難的問題,在別人看來不過是小菜一碟。明白了這一點,那麼這些技術問題也就成了考察程序員水平的試金石,有些人可能會因此氣餒,甚至放棄;而有些人則通過解決問題學到了很多新的技術,也讓自己進一步成長。
記得多年前看工作中要用到一款開源庫,那時候剛學完C++不久,自以為對面向對象了解甚深,然而學習這個庫時卻是一頭霧水,最後在經過泡論壇,然後又認真的學習了面向對象設計模式,後來不但能使用那個庫,更重要的是對面向對象編程有了更深的認識!
後來還有很多類似的事情,剛開始時感覺無比困難,但是通過自己的努力,或求助他人、或查閱資料,當最終問題解決時,你會發現自己又牛逼了一些,然後再遇到一些新的問題,如此循環……
其實編程也是一個學習的過程,就如同爬山一樣,每一階段都會有一些山頭,只有當你爬上山頭才能欣賞美麗的風景,但是當你爬上一座山頭的時候,就會發現更高山峰!只有當你爬上最高峰,才能「一覽眾山小」,可是到那時,你可能會嚮往地球之外的天地!
很難解決一般就是遇到某些瓶頸了,不同瓶頸的感覺是不一樣的,但無非可以歸結為下面幾類。
成本原因
不讓馬兒吃草,還想讓馬跑。這個是有些不太理解互聯網的一些領導的錯誤觀念,他們會給你安排一個老舊台式機,想要讓你承載幾萬、幾十萬並發的秒殺系統,你當然很難解決。
外界的評論可能是,「這幫程序員是吃干飯的么?這系統也太垃圾了!」
老闆的評論是,「我這台式機也不少錢呢。」
程序員的評論是,「這摳門老闆不會是個傻子吧。哎,再優化優化吧。」
當然,有些情況也是能夠理解的,公司明白需要更好的設備,但是由於成本控制,不得不在某些方面節省。但換句話說,設備成本是占不了一個大頭的,可能有其他方面的成本更加需要收緊。
如果是因為成本原因,我們的心情可能是無奈,又有些不能施展拳腳的束縛感。
歷史 原因
舉個例子,系統用了5年了,迭代了N個版本,在面對新的需求的時候,就會出現需求限制於系統的情況,常常會有程序員說,這個實現不了,那個不符合現在系統規則。其中很大一部分是這些年的積累,欠下的技術債造成的。俗話說,大船難調頭。
這種情況更多的出現在剛創業之後的幾年,由於一開始的快速迭代,追求先把業務流程跑通,先生存再規范,會讓一開始的軟體開發流程並不那麼規范,如果在1-2年內沒有進行重構,那麼積攢的3-5年的技術債就會慢慢把你壓得喘不過氣來。
解決這種情況,一是需要時機,給出足夠的空間和時間讓技術團隊重構,二是需要魄力,你得有成功的把握,不能幹著干著說不行了,咱們還是回到原來吧。
如果是因為 歷史 原因,我們的心情可能是期待和渴望,又有些對現狀的無奈。
能力原因
雖然說專家很厲害,但說白了,大部分企業需要的研發人員,還到不了需要專家的級別。所以,一般而言,沒有什麼技術是攻克不了的。如果真的遇上了,那就說明你的公司已經到達了一個新的層次,從而需要那個層次的人員來解決,可以通過外聘或者顧問的方式,引進新的技術。
如果是因為能力原因,我們的心情雖然有些力不從心,但又為公司在新的台階而高興。
不管怎樣,程序員是一群追求美好的人,不管是外部限制還是內部限制,不能解決的難題對於技術人員來說總是很憋屈的。
不能著急,慢慢分析,找到問題點,沒有解決不了的問題
程序員的技術問題,排除架構師技術選型錯誤以外,都是程序員的功夫不到家所致。
1,面向網路的程序員會第一時間問度娘,各大社區求助大神。
2,面向源碼的程序員會第一時間查看源碼實現,查找api文檔,思考解決方案。
3,不管技術如何發展,架構如何延伸,不變的是基本功,再先進的組件都是由基礎語法書寫出來的 。
練武不練功,到老一場空,共勉!
首先說下這個很難的技術定義,個人認為在你知道之外的知識都是很難的,一旦你深入了解其使用方式,原理,甚至閱讀了他的源碼,你會覺得有的時候會恍然大悟。程序員是一個不斷要學習的崗位,就要面臨很多從未知到已知技術的時候,每當遇到這樣的情況時候,總有種不解決了這個問題,睡不著覺的感覺,心裡不踏實,總是想盡各種辦法去解決這個問題。甚至可以一直追查這個問題。也許這就是一種執拗吧
我老公最近就遇到一個大石頭需要敲碎,我作為一個旁觀者,都挺心疼他。
他還在讀博,最近遇到的問題是他一個項目上的問題,也跟他的畢業設計相關。他剛讀博的時候確定了一個方向,去年開題的時候他覺得這個方向沒有什麼前景,真的是考慮了好久要不要換,如果不換,就是安穩的畢業,換的話接下來的一年多時間他會很艱難,很多新的問題需要一一克服,最後他決定換了,他說他讀博就是為了提高自己,還是想挑戰一下。
年前,系統板設計好了,然後最近做好回來了,開始調試,說這個板子跟個石頭一樣,不工作。本來就是禮拜一到禮拜六待在學校不回來,周日是休息的。現在放假回來都是在啃變壓器的東西,早上起的很早,晚上又很晚。真的挺心疼的,他還安慰我說,他又要進步了。挺擔心他的身體的,我特別希望時間能快點過去,能順利畢業。他卻不希望,總覺得時間過的太快,沒有時間搞研究。
今年的生日願望,希望他科研順利,身體 健康 。
以我的從業經歷,說說遇到很難的技術問題是什麼感覺吧: 興奮、充滿挑戰性 。尤其是在開發中遇到了技術難題,很多情況下真有種可遇不可求的感覺。
我認為能遇到技術難題,至少證明這個工作是有價值的。 這種價值體現了兩個方面,一是你的工作在整個產品開發中占據重要地位,甚至是核心地位。二是你的認知和經驗,仍然有成長的空間。如果你的工作一直沒有遇到難題,輕而易舉地就解決了一切,那麼很可能是你沒有機會深入重要的核心部分,或者你的工作性質可替代性很高,簡單重復性很高。
分解法。 把技術難題拆分,盡量的單元化、模塊化,這樣有利於逐步攻破,逐步解決。主要是降低技術難度,尋找真正的難點所在。如果問題無法拆分,就是那麼一個點,那麼需要逆向思維,可以先把問題擴大,看看涉及面有哪些,然後再縮小范圍,鎖定關鍵之處。
刨根法。 把技術難題抽象化,理論化,從根本的源頭去解決。很多技術問題,從基礎理論的角度去看,其實真的不難,只要你能定位到相關的技術點,困難點,知識點,就很容易進行快速解決。解決的終極辦法就是從理論上徹底解決,做到知行統一。
討論法。 三人行,必有我師。很多情況下,所謂的技術難題,在別人的眼中,也許並不是難題。很多情況下,小組討論,交換意見,方案互補,就可以解決難題。有些情況下,還需要和供應商一起討論,主要是補充信息的錯漏。經常出現的晶元問題,很多情況下供應商都更加有經驗。因為供應商有更多的使用客戶,有很多解決問題的經驗。最主要的是,晶元是他們設計的,他們更加清楚緣由。
沒有絕對的技術難題,有的只是尚未解決的技術難題。
⑺ 開發人員不固定容易造成哪些問題
1.程序編寫不能有邏輯性,傳承性,導致程序前後沖突,臃腫,運行緩慢
2.不能形成BUG list歷史
3.缺少自測:開發人員缺少自測主要是太過於自信,對自己開發的軟體下不了手也是很多開發人員的通病,開發人員往往過於自信,認為自己開發出的功能應該沒有問題,導致測試力度不夠;
4.缺少溝通:有效的溝通可以避免很多問題的發生,也可以避免重復勞動,便於開發的順利進行;通過與開發經理之間的溝通,可以學到很多敏捷開發的方法,少走很多彎路;通過與開發人員之間的溝通,可以了解很多相互借鑒的地方,互相充補,並且還可以了解公用資源,避免工作冗餘;通過與設計人員之間的溝通,可以學到很多設計理念,有助於更深入的理解需求設計等;但溝通不能流於形式,要達到應有的目的,在我們開發過程中,經常會遇到需求分析人員編寫的需求文檔設計人員看不懂、設計人員編寫的設計文檔開發人員看不懂、開發人員編寫的軟體測試人員看不懂,這些都是無效溝通的結果;例如:開發過程中有時會發現,有些開發人員遇到不明白的問題,他不去問、不去跟其它同事交流,而是自己悶頭去想,等問題想明白了,代碼也寫完了,卻發現原來自己寫的功能或某個函數公用庫里已經有了,直接拿來調用就可以,這樣不僅浪費了時間還做了無用功。
5.只解決問題不思考問題:開發人員在處理問題時可以用「兵來將擋、水來土掩」來形容,能及時無誤的解決問題,還不能算是好的開發人員,好的開發人員還應該善於思考、總結,在解決完問題的情況下,分析問題出現的原因,在那個階段出現的,由什麼原因引起的,並總結出在以後的開發過程中如何避免的方法,保證在同一階段不會再犯類似的錯誤,這樣才能算一名合格的開發人員;例如:開發或維護過程中有時我們會遇到比較棘手的問題,跟蹤調試半天才會有結果,最終把問題解決掉,問題解決後,有些開發人員會去分析問題的原因及解決方法,而有些開發人員則認為萬事大吉,就怕再提起該問題,更別說再去分析了;在我們現實的開發或維護中,會發現很多不足,有時只顧著處理問題,而忽略了分析問題,治標不治本,雖然問題解決了,但對開發人員的成長意義不大,所以開發人員要多思考、多研究。
⑻ java程序員面試問題,你在項目中遇到什麼困難,你是怎麼解決的,說簡單了又不像,有哪些復雜的困難,解決
生 : 30歲,我的程序員夢想
作 者: redbridge (雪燃)
30歲,開始實現我的程序員夢,從一個編程愛好者,從一個業余的程序員,一個水平不高的程序員,一個半道出家的程序員......
我的經歷到這里就告一段落了,五年裡跳了五次槽,不知道和大家比算不算多J,沒有什麼太多起伏,但我想很多朋友可能會和我有類似的經歷,不知道能不能引起你們的共鳴。我想對我上面所說的話給一個總結:
1. 如果你覺得自己應該追求什麼,不管遇到什麼困難千萬不要放棄,一定要堅持下去。
2. 不要因為自己年輕就找理由揮霍時間,少玩一點SC、CS、魔獸3、傳奇、魔力或者…….,多看點書,多練練題。
3. 如果你還是在校的學生,英語很差,專業課也很差。沒關系,想怎麼學計算機就怎麼學計算機吧。其它地只要能混到畢業證就行了。除非你對自己的未來沒有信心。(當然,如果你的理想不僅僅是要做一個程序員,那你別丟掉英語。)
4. 如果你不是科班出身,想要轉行而不知該怎麼開始的話,建議你先看兩類書:(1)計算機原理;(2)數據結構和演算法。(看數據結構之前先看C語言)。
5. 什麼時候努力都不晚,關鍵是你明白要努力了,大器晚成總比一事無成要好的多。
6. Java、.net、C++、PB、VB、Delphi、匯編到底應該學哪個?我的經驗,哪個最簡單就先學哪個、公司用哪個你就學哪個、哪個和你有緣(比如剛好你認識一個願意幫助你的Delphi高手)你就學哪個,如果你都學,或者三天兩頭的換,我可以告訴你結果肯定是什麼都不會,不要心浮氣燥,他們都只是工具,學精一門其它的就相通了,重要的是掌握編程的思想。如果你問我面向對象(好像現在已經是面向需求了)、UML、WebLogic、WebService、軟體工程、XML…….應該怎麼學呀,對不起,這些我也確實不是都會,但請相信,你先實實在在的寫上十萬行以上的代碼以後,那些東西你自然就慢慢會了。
7. 不要以為程序員的工資都很高,程序員之間的水平差異也大。公司衡量一個人的待遇標準是他能給公司帶來多大的效益。如果你體現了自己的價值,公司會主動給你加薪的,當然你也可以自己主動提,但一定要在你表現出了自己的價值之後。
8. 輕易不要跳槽,如果非要跳,也要保持工作經驗上的延續,而不是從新開始,不然就會象我一樣走很多彎路。
9. 如果你以為程序員都是熬夜熬出來的,那麼你錯了,因為它的代價就是縮短你的青春!大家不要象我一樣,真的,熬夜一點也不好!記住老毛的話:如有恆,何須三更起,半夜眠;最怕莫,三天打魚兩天曬網,竹籃打水一場空!
10. 這一點是我覺得最精華的一點:「君子性非異也,善假於物也。」這句話的本意是一個水平很高的人本身並不一定很高明,關鍵是他善於利用別人的高明!我在這里做個借鑒,就是要充分利用自己身邊的資源,不放過任何一個可以提高自己的機會。大家不要誤會,這里的假於物可不是指抄襲別人的源代碼,而是指通過學習別人的源代碼把他的思想擴展到自己的思想里去。
註:上面的十大「精華」純屬我個人的「謬論」,您自己看著消化,有用的收下,沒用的請拖入「回收站」。如果你覺得這些總結不過是一些浮華之詞,那請你先問問自己:「是不是在行動上都真正做到了。」
這就是我,一個不算優秀,不算勤奮;玩能玩通宵,學也學能學通宵;對夢想的追求很執著;到了30才開始真正寫程序;一個很平凡但又不甘於平凡的人……我的經歷相信很多朋友都有過的,我現在也不能算是一個成功人士,但我相信我的經歷卻是值得大家借鑒的,因為我終究代表了一類人。
最後我還想說一點:現在很多朋友都抱怨中國的軟體業環境太差,前途渺茫。確實是這樣,我有同感。不過我想軟體業不過是千萬個行業中的一種,每一個行業總是會有起落的,中國的軟體業環境差有她的歷史原因,我們不要總是簡單地和印度相比。抱怨沒有意義,已經這樣了,抱怨不能使她變好,希望我們每一個人多貢獻一份自己的力量,總有一天她會變的比印度還好,甚至比美國還好。
最後:希望所有的程序員和擁有成為程序員夢想的朋友們在新的一年裡心想事成,萬事如意。請相信我:明天不一定更美好,但美好的一天一定會來!
⑼ 北大青鳥設計培訓:程序員想要全面發展需要注意哪些問題
一個人能力的成長不局限於技術能力的提高,而是全面發展,這就要求我們在工作中不斷總結和反思。
對於程序員來說,工作中的成長是必不可少的,如何才能更好的進行全面發展呢?下面石家莊java培訓為大家介紹程序員想要全面發展需要注意的問題。
程序開發是需要進行團隊合作的,一個優秀的軟體產品自始至終是無法由一個人做出的,所以石家莊UI設計認為想要成就一個完美的產品,一定不能小看團隊的力量。
溝通技巧是導致項目成功或失敗的關鍵性因素。
與技術相比,石家莊計算機學習認為溝通技術對一個項目的成功起著重要的作用。
如果我們召集了全世界的5名資料庫專家,但是他們按照自己的意願行動,並且也不互相進行溝通,那麼最終是無法達到目標的。
如果你想做好工作,不僅要了解這些業務,而且要積極參與其中。
即使你不屬於公司的C位,它也不會影響你,至少,你需要了解你在做什麼。
如果代碼審查使您感到壓力,那麼石家莊石家莊IT培訓會發現在打開時一定存在錯誤。
雖然我們不必這樣想,但很多人會感到急於發布自己的代碼,讓別人「觀看和評論「。