導航:首頁 > 程序命令 > 程序員犯過什麼錯誤

程序員犯過什麼錯誤

發布時間:2023-02-28 23:35:11

A. C++ 編程過程中,有哪些常犯的壞習慣,哪怕對於多年經驗的程序員也會出現

大家都知道,編程是一個非常用腦並要求非常細心的一項工作,在編程過程中,哪怕一個非常不起眼的小細節,比如一個標點符號,都會讓整個程序崩潰。

先說在編程時,盡管經驗老道的程序員也會犯一些常見的小問題。

說好聽的叫拒絕改變,說不聽的叫不思進取。而這個也是許多經驗豐富的程序員常犯的壞習慣。當然,還有很多,在這里我就不一一說明了。。。

B. java程序員在寫SQL時常犯的錯誤!

Java程序員編程時需要混合面向對象思維和一般命令式編程的方法,能否完美的將兩者結合起來完全得依靠編程人員的水準:

技能(任何人都能容易學會命令式編程)模式(有些人用「模式-模式」,舉個例子,模式可以應用到任何地方,而且都可以歸為某一類模式)心境(首先,要寫個好的面向對象程序是比命令式程序難的多,你得花費一些功夫)

但當Java程序員寫SQL語句時,一切都不一樣了。SQL是說明性語言而非面向對象或是命令式編程語言。在SQL中要寫個查詢語句是很簡單的。但在Java里類似的語句卻不容易,因為程序員不僅要反復考慮編程範式,而且也要考慮演算法的問題。

下面是Java程序員在寫SQL時常犯的10個錯誤(沒有特定的順序)。

1、忘掉NULL

Java程序員寫SQL時對NULL的誤解可能是最大的錯誤。也許是因為(並非唯一理由)NULL也稱作UNKNOWN。如果被稱作 UNKNOWN,這還好理解些。另一個原因是,當你從資料庫拿東西或是綁定變數時,JDBC將SQL NULL 和Java中的null對應了起來。這樣導致了NULL = NULL(SQL)和null=null(Java)的誤解。

對於NULL最大的誤解是當NULL被用作行值表達式完整性約束條件時。另一個誤解出現在對於NULL 在 NOT IN anti-joins的應用中。

解決方法:

好好的訓練你自己。當你寫SQL時要不停得想到NULL的用法:這個NULL完整性約束條件是正確的?NULL是否影響到結果?

2、在Java內存中處理數據

很少有Java開發者能將SQL理解的很好。偶爾使用的JOIN,還有古怪的UNION,好吧,但是對於窗口函數呢?還有對集合進行分組呢?許多 的Java開發者將SQL數據載入到內存中,將這些數據轉換成某些相近的集合類型,然後再那些集合上面使用邊界循環控制結構(至少在Java8的集合升級 以前)執行令人生厭的數學運算。

但是一些SQL資料庫支持先進的(而且是SQL標准支持的)OLAP特性,這一特性表現更好而且寫起來也更加方便。一個(並不怎麼標準的)例子就 是Oracle超棒的MODEL分句。只讓資料庫來做處理然後只把結果帶到Java內存中吧。因為畢竟所有非常聰明的傢伙已經對這些昂貴的產品進行了優 化。因此實際上,通過將OLAP移到資料庫,你將獲得一下兩項好處:

便利性。這比在Java中編寫正確的SQL可能更加的容易。性能表現。資料庫應該比你的演算法處理起來更加快.而且更加重要的是,你不必再去傳遞數百萬條記錄了。

解決方法:

每次你使用Java實現一個以數據為中心的演算法時,問問自己:有沒有一種方法可以讓資料庫代替為我做這種麻煩事。

3、使用UNION代替UNION ALL

和UNION相比UNION ALL還需要額外的關鍵字。如果SQL標准已經規定了支持,那麼可能會更好點。

UNION(允許重復)UNION DISTINCT (去除了重復)

移除重復行不僅很少需要(有時甚至是錯的),而且對於帶很多行的大數據集合會相當慢,因為兩個子select需要排序,而且每個元組也需要和它的子序列元組比較。

注意即使SQL標准規定了INTERSECT ALL和EXCEPT ALL,很少資料庫會實現這些沒用的集合操作符。

解決方法:

每次寫UNION語句時,考慮實際上是否需要UNION ALL語句。

4、通過JDBC分頁技術給大量的結果進行分頁操作

大部分的資料庫都會支持一些分頁命令實現分頁效果,譬如LIMIT..OFFSET,TOP..START AT,OFFSET..FETCH語句等。即使沒有支持這些語句的資料庫,仍有可能對ROWNUM(Oracle)或者是ROW NUMBER()、OVER()過濾(DB2、SQL Server2008等),這些比在內存中實現分頁更快速。在處理大量數據中,效果尤其明顯。

解決方法:

僅僅使用這些語句,那麼一個工具(例如JOOQ)就可以模擬這些語句的操作。

5、在Java內存中加入數據

從SQL的初期開始,當在SQL中使用JOIN語句時,一些開發者仍舊有不安的感覺。這是源自對加入JOIN後會變慢的固有恐懼。假如基於成本的 優化選擇去實現嵌套循環,在創建一張連接表源前,可能載入所有的表在資料庫內存中,這可能是真的。但是這事發生的概率太低了。通過合適的預測,約束和索 引,合並連接和哈希連接的操作都是相當的快。這完全是是關於正確元數據(在這里我不能夠引用Tom Kyte的太多)。而且,可能仍然有不少的Java開發人員載入兩張表通過分開查詢到一個映射中,並且在某種程度上把他們加到了內存當中。

解決方法:

假如你在各個步驟中有從各種表的查詢操作,好好想想是否可以表達你的查詢操作在單條語句中。

6、在一個臨時的笛卡爾積集合中使用 DISTINCT 或 UNION 消除重復項

通過復雜的連接,人們可能會對SQL語句中扮演關鍵角色的所有關系失去概念。特別的,如果這涉及到多列外鍵關系的話,很有可能會忘記在JOIN .. ON子句中增加相關的判斷。這會導致重復的記錄,但或許只是在特殊的情況下。有些開發者因此可能選擇DISTINCT來消除這些重復記錄。從三個方面來說 這是錯誤的:

它(也許)解決了表面症狀但並沒有解決問題。它也有可能無法解決極端情況下的症狀。對具有很多列的龐大的結果集合來說它很慢。DISTINCT要執行ORDER BY操作來消除重復。對龐大的笛卡爾積集合來說它很慢,還是需要載入很多的數據到內存中。

解決方法:

根據經驗,如果你獲得了不需要的重復記錄,還是檢查你的JOIN判斷吧。可能在某個地方有一個很難覺察的笛卡爾積集合。

7、不使用MERGE語句

這並不是一個過失,但是可能是缺少知識或者對於強悍的MERGE語句信心不足。一些資料庫理解其它形式的更新插入(UPSERT)語句, 如 MYSQL的重復主鍵更新語句,但是MERGE在資料庫中確是很強大,很重要,以至於大肆擴展SQL標准,例如SQL SERVER。

解決方法:

如果你使用像聯合INSERT和UPDATE或者聯合SELECT .. FOR UPDATE然後在INSERT或UPDATE等更新插入時,請三思。你完全可以使用一個更簡單的MERGE語句來遠離冒險競爭條件。

8、使用聚合函數代替窗口函數(window functions)

在介紹窗口函數之前,在SQL中聚合數據意味著使用GROUP BY語句與聚合函數相映射。在很多情形下都工作得很好,如聚合數據需要濃縮常規數據,那麼就在join子查詢中使用group查詢。

但是在SQL2003中定義了窗口函數,這個在很多主流資料庫都實現了它。窗口函數能夠在結果集上聚合數據,但是卻沒有分組。事實上,每個窗口函數都有自己的、獨立的PARTITION BY語句,這個工具對於顯示報告太好了。

使用窗口函數:

使SQL更易讀(但在子查詢中沒有GROUP BY語句專業)提升性能,像關系資料庫管理系統能夠更容易優化窗口函數

解決方法:

當你在子查詢中使用GROUP BY語句時,請再三考慮是否可以使用窗口函數完成。

9、使用內存間接排序

SQL的ORDER BY語句支持很多類型的表達式,包括CASE語句,對於間接排序十分有用。你可能重來不會在Java內存中排序數據,因為你會想:

SQL排序很慢SQL排序辦不到

解決方法:

如果你在內存中排序任何SQL數據,請再三考慮,是否不能在資料庫中排序。這對於資料庫分頁數據十分有用。

10、一條一條地插入大量記錄

JDBC「懂」批處理(batch),你應該不會忘了它。不要使用INSERT語句來一條一條的出入成千上萬的記錄,(因為)每次都會創建一個新 的PreparedStatement對象。如果你的所有記錄都插入到同一個表時,那麼就創建一個帶有一條SQL語句以及附帶很多值集合的插入批處理語 句。你可能需要在達到一定量的插入記錄後才提交來保證UNDO日誌瘦小,這依賴於你的資料庫和資料庫設置。

解決方法:

總是使用批處理插入大量數據。

來自:OSChina

譯者:oschina.net/translate/10-common-mistakes-java-developers-make-when-writing-sql

C. 杭州一程序員被辭退後寫代碼給自己轉賬,此舉涉及到了哪些罪名

這名程序員的行為已經涉及了盜竊罪,再加上拒不配合警方調查,又涉及到了妨害公務罪,最終兩罪並罰。等待他的將是幾年的牢獄時光,希望在這段時間內他能夠反省自己所犯的錯誤,在裡面好好地接受改造。這次事件告訴我們不管做什麼工作,都要遵守職業道德,這是我們工作的道德底線。天網恢恢疏而不漏,只要你做了違法犯罪的事情,就一定會受到法律的審判和制裁。

請大家牢記一句話,法律在保護我們的同時也在監視我們,只要你做出違法犯罪的行為,就一定會逃過法律的懲罰。

D. Java程序員開發存在哪些錯誤

什麼是Java程序員呢?Java程序員是這幾年出現的,他們的著裝經常被吐槽,沒有人能夠get到他的笑點,總是讓人感覺到莫名其妙,這就是很多人眼中的程序員。程序員在進行軟體開發的時候,會存在一些錯誤的問題,學會避免是非常關鍵的。下面電腦培訓為大家介紹一下。


1、改一行代碼,不會影響其他功能

做任何事情誠意是非常關鍵的,在不認真的情況下任何事情都是做不好的。如果隨意改動代碼,在連接資料庫的時候會出現很多問題。想要成為一名合格的程序員,對代碼的嚴謹性是非常關鍵的。

2、不考慮自身問題

在進行軟體開發的過程中,存在問題是不可避免的,如何面對和處理問題才是最關鍵的。如果在遇到問題的時候一直認為是電腦的問題,這樣想法想要成為合格的程序員是不可能的。IT培訓認為硬體問題是比較少的,不能很好的解決自己的問題想要成功是不可能的。

3、使用臨時的方法

臨時方法並不是解決問題的最好方法,在進行編程的過程中,由於可能出現的問題比較多,如果使用臨時辦法,最終可能會演變為永久的辦法,這對於程序員來說,北大青鳥認為是非常避諱的解決方法。

4、以後在給代碼添加註釋

習慣是需要在生活中不斷養成的,好的習慣是成功的墊腳石。在進行代碼書寫的時候也應該有一個好的習慣,如果只會一味地推脫,很難讓自己前進。

5、測試過,沒有BUG

有的程序員永遠不承認自己存在問題,代碼存在BUG是很正常的,就算進行測試之後也會出現同樣的問題。在程序出現問題的時候不要一味的認為是使用而導致的,北大青鳥雲南計算機學院認為,作為程序員,應該解決所有存在的問題。


E. 程序員/技術人員犯了什麼樣的錯誤會被立馬開除

您好:
基本上是出現了重大的運維失誤或者代碼bug。
比如不小心刪除了資料庫。弄崩潰了伺服器。
讓資料庫內數據大量錯誤而未及時發現。
在項目中留後門,嚴重違反員工守則等。。。

F. 程序員犯罪問題有哪些

技術本質上是無罪的,所以犯罪只是個人的問題。程序員其實可以利用自身的技術為社會和自己創造更美好的未來,但是利用不當的話就會出現犯罪的風險。
希望可以幫到你,謝謝。

G. Java編程中 常見的異常有哪幾種

相信作為程序員的我們在對程序進行編譯過程中經常會遇到錯誤,或者在運行過程中出現錯誤,在這里主要跟大家談談經常遇到的一些異常與錯誤,以及解決辦法。

異常是指程序在編譯或運行過程出現的錯誤。

在java.lang包中Throwable包含了所有的異常。

Error (錯誤) 和Exception(異常)

(1)Error(錯誤)

一旦發生無法修復,但可以避免發生。

常見錯誤類:

IOError:I/O錯誤,當發生嚴重的I/O錯誤時,拋出此錯誤。
VirtualMachineError:虛擬機錯誤,當 Java 虛擬機崩潰或用盡了它繼續操作所需的資源時,拋出該錯誤。

StackOverflowError:棧內存滿了,當應用程序遞歸太深而發生堆棧溢出時,拋出該錯誤。

OutofMemoryError:堆內存滿了,因為內存溢出或沒有可用的內存提供給垃圾回收器時,Java 虛擬機無法分配一個對象,這時拋出該異常。

以上是一些常見的錯誤,在Error類中還有一些別的錯誤(參照文件Java.lang.Throwable.Error).

(2)Exception(異常)

一旦發生,可以捕獲並處理,不會導致程序終止,有時可以避免有時無法避免。

異常的分類:

1.編譯時異常(需要強制處理) 2.運行時異常(不需要強制處理)

常見的異常有:

IOException:輸入輸出流異常
FileNotFoundException:文件找不到的異常
ClassNotFoundException:類找不到的異常
DataFormatException:數據格式化異常
NoSuchFieldException:沒有匹配的屬性異常
NoSuchMethodException:沒有匹配的方法異常

SQLException:資料庫操作異常
TimeoutException:執行超時異常

常見的運行時異常:

RuntimeException:運行時異常
NullPointerException:空指針異常

:數組越界異

ClassCastException:類型轉換異常
IllegalArgumentException:非法的參數異常
InputMismatchException:輸入不匹配

以上是常見的一些異常,另外還有別的異常,參見文件:Java.lang.Throwable.Exception

既然我們常常會遇到一些異常,那我們如何來處理這些異常就是一個急需解決的事情。

(1) 如何處理編譯時異常?

方法一:將需要處理的代碼塊放在一個try...catch...中
try{
//需要處理異常的代碼
}catch(XXXException ef){
ef.printStackTrace();
}

我們方法一就是要將我們不確定的代碼放入try......catch中,先進行try一下,如果沒有異常,則不會觸發catch,沒有輸出,一旦出現異常,那麼catch就會工作,在catch中捕獲異常信息,根據異常信息進行補救措施。

如以下代碼:

從結果可以看出,我們在輸入數據的時候出現錯誤,這樣通過自定義異常能夠讓我們更直接快速的找到運行或編譯時的異常。

在上述中我們分別提到了三種throw,分別是Throwable,Throws以及throw,那麼到底三者有什麼區別?

Throwable:是指在在Java.lang包中的一個類,其包含了所有的異常和錯誤,其中類Error和Exception 是它

的子類。

Thows:是指在解決編譯時異常,將方法中異常拋給上一級,在方法後面要加Throw Exception來進行拋。

throw:是指在自定義異常時,如果方法出現異常,那麼將作為引用方法的對象拋出。即拋出異常。

希望對您有所幫助!~

H. 新手程序員易犯的六個錯誤

新手零基礎學習編程,每天不可避免的都會遇到各種問題,難免會感覺很迷茫。昆明北大青鳥http://www.kmbdqn.cn/整理了新手程序員易犯的五個錯誤及解決措施,希望能讓大家少入坑。

不使用版本控制系統

一旦你開始對代碼有點熟悉的時候,學習如何使用VCS就應該成為你的首要任務。

這個系統有很多的高級功能,這對我們來說很重要。但一開始,通常會專注於settinguprepository以及committing,這有助於新手跟蹤開發的進度。然後,學習fetching/pulling和pushing的概念也是很重要的,這樣就可以擁有一個在線備份存儲庫。

2.不去閱讀比你優秀的程序員的代碼

北大青鳥校區老師相信這是學習的一個重要部分。新手學員常常疑惑,我為什麼還要花時間去讀別人的代碼,在一個較大的開源社區里,學習者會有機會向優秀的程序員學習。在這里,新手可以找到一些使用你熟悉的代碼編寫的項目,並對它們進行深入挖掘和理解。當然不必理解所有的內容,只需要分析其中一小部分代碼,這些都會讓你受益匪淺。

3.快速切換語言或技術

的確,能學到一點東西的感覺會很好,在語言和技術之間切換也是有趣的。但如果新手學習者在學習過程中經常這樣做,就會適得其反,也會給造成很大的損失。相反,如果對一項技術有很深入的了解,想要切換其他技術語言就會變得很容易。

4.沒有完成主要項目

這是北大青鳥校區老師在觀察學員自我學習過程中易犯的一個問題。一大部分新來的學員對軟體體系結構有著很大的興趣,喜歡嘗試不同的模式,框架和方法來學習一些特定需求很好的編程實踐。但通常,部分在編寫了代碼的核心部分以形成一個很小的工作演示後,就傾向於「置之不理」,然後轉移到別的項目上。

5.不關心代碼質量vs過於關心代碼質量

沒有質量問題的醜陋代碼比有質量問題的漂亮代碼更好。一開始可以不關心代碼質量,只要你對這個問題有意識,並且願意在編程結束時進行清理和解決問題。代碼質量是很重要的,但如果沒有找到平衡,就可能會過度框架住新手的應用程序。

6、不對代碼進行單元測試

單元測試可能會讓你覺得在莫名其妙地重復著工作。但是,將測試加入到學習的工作流程中,這從很多方面看都是有益的。


閱讀全文

與程序員犯過什麼錯誤相關的資料

熱點內容
穿越古代獵艷 瀏覽:804
python語言參考手冊 瀏覽:824
買葯上門app哪個靠譜 瀏覽:901
電影鬼片大全免費觀看 瀏覽:259
三個外國妹子上山碰到三個鬼電影 瀏覽:139
鐵雨3迅雷下載 在線播放 瀏覽:68
python庫文件下載 瀏覽:131
兔老大電影 瀏覽:210
單片機實驗鍵盤和數碼 瀏覽:546
免費投屏電影網 瀏覽:880
甘肅酒泉發票伺服器地址 瀏覽:357
程序員專用詩集 瀏覽:209
微信租車系統源碼 瀏覽:984
中國抗日狙擊手電筒影 瀏覽:420
千王之王2000百度網盤資源 瀏覽:515
phpsocketepoll 瀏覽:726
小孩和熊的電影 瀏覽:241
python寫網頁界面的框架 瀏覽:6
當通過ssh遠程連接彈性雲伺服器時 瀏覽:655