❶ java的各種異常
Java Exception:
1、Error
2、Runtime Exception 運行時異常
3、Exception
4、throw 用戶自定義異常
異常類分兩大類型:Error類代表了編譯和系統的錯誤,不允許捕獲;Exception類代表了標准Java庫方法所激發的異常。Exception類還包含運行異常類Runtime_Exception和非運行異常類Non_RuntimeException這兩個直接的子類。
運行異常類對應於編譯錯誤,它是指Java程序在運行時產生的由解釋器引發的各種異常。運行異常可能出現在任何地方,且出現頻率很高,因此為了避免巨大的系統資源開銷,編譯器不對異常進行檢查。所以Java語言中的運行異常不一定被捕獲。出現運行錯誤往往表示代碼有錯誤,如:算數異常(如被0除)、下標異常(如數組越界)等。
非運行異常時Non_RuntimeException類及其子類的實例,又稱為可檢測異常。Java編譯器利用分析方法或構造方法中可能產生的結果來檢測Java程序中是否含有檢測異常的處理程序,對於每個可能的可檢測異常,方法或構造方法的throws子句必須列出該異常對應的類。在Java的標准包java.lang java.util 和 java.net 中定義的異常都是非運行異常。
算術異常類:ArithmeticExecption
空指針異常類:NullPointerException
類型強制轉換異常:ClassCastException
數組負下標異常:NegativeArrayException
數組下標越界異常:
違背安全原則異常:SecturityException
文件已結束異常:EOFException
文件未找到異常:FileNotFoundException
字元串轉換為數字異常:NumberFormatException
操作資料庫異常:SQLException
輸入輸出異常:IOException
方法未找到異常:NoSuchMethodException
java.lang.AbstractMethodError
抽象方法錯誤。當應用試圖調用抽象方法時拋出。
java.lang.AssertionError
斷言錯。用來指示一個斷言失敗的情況。
java.lang.ClassCircularityError
類循環依賴錯誤。在初始化一個類時,若檢測到類之間循環依賴則拋出該異常。
java.lang.ClassFormatError
類格式錯誤。當Java虛擬機試圖從一個文件中讀取Java類,而檢測到該文件的內容不符合類的有效格式時拋出。
java.lang.Error
錯誤。是所有錯誤的基類,用於標識嚴重的程序運行問題。這些問題通常描述一些不應被應用程序捕獲的反常情況。
java.lang.ExceptionInInitializerError
初始化程序錯誤。當執行一個類的靜態初始化程序的過程中,發生了異常時拋出。靜態初始化程序是指直接包含於類中的static語句段。
java.lang.IllegalAccessError
違法訪問錯誤。當一個應用試圖訪問、修改某個類的域(Field)或者調用其方法,但是又違反域或方法的可見性聲明,則拋出該異常。
java.lang.IncompatibleClassChangeError
不兼容的類變化錯誤。當正在執行的方法所依賴的類定義發生了不兼容的改變時,拋出該異常。一般在修改了應用中的某些類的聲明定義而沒有對整個應用重新編譯而直接運行的情況下,容易引發該錯誤。
java.lang.InstantiationError
實例化錯誤。當一個應用試圖通過Java的new操作符構造一個抽象類或者介面時拋出該異常.
java.lang.InternalError
內部錯誤。用於指示Java虛擬機發生了內部錯誤。
java.lang.LinkageError
鏈接錯誤。該錯誤及其所有子類指示某個類依賴於另外一些類,在該類編譯之後,被依賴的類改變了其類定義而沒有重新編譯所有的類,進而引發錯誤的情況。
java.lang.NoClassDefFoundError
未找到類定義錯誤。當Java虛擬機或者類裝載器試圖實例化某個類,而找不到該類的定義時拋出該錯誤。
java.lang.NoSuchFieldError
域不存在錯誤。當應用試圖訪問或者修改某類的某個域,而該類的定義中沒有該域的定義時拋出該錯誤。
java.lang.NoSuchMethodError
方法不存在錯誤。當應用試圖調用某類的某個方法,而該類的定義中沒有該方法的定義時拋出該錯誤。
java.lang.OutOfMemoryError
內存不足錯誤。當可用內存不足以讓Java虛擬機分配給一個對象時拋出該錯誤。
java.lang.StackOverflowError
堆棧溢出錯誤。當一個應用遞歸調用的層次太深而導致堆棧溢出時拋出該錯誤。
java.lang.ThreadDeath
線程結束。當調用Thread類的stop方法時拋出該錯誤,用於指示線程結束。
java.lang.UnknownError
未知錯誤。用於指示Java虛擬機發生了未知嚴重錯誤的情況。
java.lang.UnsatisfiedLinkError
未滿足的鏈接錯誤。當Java虛擬機未找到某個類的聲明為native方法的本機語言定義時拋出。
java.lang.UnsupportedClassVersionError
不支持的類版本錯誤。當Java虛擬機試圖從讀取某個類文件,但是發現該文件的主、次版本號不被當前Java虛擬機支持的時候,拋出該錯誤。
java.lang.VerifyError
驗證錯誤。當驗證器檢測到某個類文件中存在內部不兼容或者安全問題時拋出該錯誤。
java.lang.VirtualMachineError
虛擬機錯誤。用於指示虛擬機被破壞或者繼續執行操作所需的資源不足的情況。
java.lang.ArithmeticException
算術條件異常。譬如:整數除零等。
java.lang.
數組索引越界異常。當對數組的索引值為負數或大於等於數組大小時拋出。
java.lang.ArrayStoreException
數組存儲異常。當向數組中存放非數組聲明類型對象時拋出。
java.lang.ClassCastException
類造型異常。假設有類A和B(A不是B的父類或子類),O是A的實例,那麼當強制將O構造為類B的實例時拋出該異常。該異常經常被稱為強制類型轉換異常。
java.lang.ClassNotFoundException
找不到類異常。當應用試圖根據字元串形式的類名構造類,而在遍歷CLASSPAH之後找不到對應名稱的class文件時,拋出該異常。
java.lang.CloneNotSupportedException
不支持克隆異常。當沒有實現Cloneable介面或者不支持克隆方法時,調用其clone()方法則拋出該異常。
java.lang.
枚舉常量不存在異常。當應用試圖通過名稱和枚舉類型訪問一個枚舉對象,但該枚舉對象並不包含常量時,拋出該異常。
java.lang.Exception
根異常。用以描述應用程序希望捕獲的情況。
java.lang.IllegalAccessException
違法的訪問異常。當應用試圖通過反射方式創建某個類的實例、訪問該類屬性、調用該類方法,而當時又無法訪問類的、屬性的、方法的或構造方法的定義時拋出該異常。
java.lang.IllegalMonitorStateException
違法的監控狀態異常。當某個線程試圖等待一個自己並不擁有的對象(O)的監控器或者通知其他線程等待該對象(O)的監控器時,拋出該異常。
java.lang.IllegalStateException
違法的狀態異常。當在Java環境和應用尚未處於某個方法的合法調用狀態,而調用了該方法時,拋出該異常。
java.lang.IllegalThreadStateException
違法的線程狀態異常。當縣城尚未處於某個方法的合法調用狀態,而調用了該方法時,拋出異常。
java.lang.IndexOutOfBoundsException
索引越界異常。當訪問某個序列的索引值小於0或大於等於序列大小時,拋出該異常。
java.lang.InstantiationException
實例化異常。當試圖通過newInstance()方法創建某個類的實例,而該類是一個抽象類或介面時,拋出該異常。
java.lang.InterruptedException
被中止異常。當某個線程處於長時間的等待、休眠或其他暫停狀態,而此時其他的線程通過Thread的interrupt方法終止該線程時拋出該異常。
java.lang.NegativeArraySizeException
數組大小為負值異常。當使用負數大小值創建數組時拋出該異常。
java.lang.NoSuchFieldException
屬性不存在異常。當訪問某個類的不存在的屬性時拋出該異常。
java.lang.NoSuchMethodException
方法不存在異常。當訪問某個類的不存在的方法時拋出該異常。
java.lang.NullPointerException
空指針異常。當應用試圖在要求使用對象的地方使用了null時,拋出該異常。譬如:調用null對象的實例方法、訪問null對象的屬性、計算null對象的長度、使用throw語句拋出null等等。
java.lang.NumberFormatException
數字格式異常。當試圖將一個String轉換為指定的數字類型,而該字元串確不滿足數字類型要求的格式時,拋出該異常。
java.lang.RuntimeException
運行時異常。是所有Java虛擬機正常操作期間可以被拋出的異常的父類。
java.lang.SecurityException
安全異常。由安全管理器拋出,用於指示違反安全情況的異常。
java.lang.
字元串索引越界異常。當使用索引值訪問某個字元串中的字元,而該索引值小於0或大於等於序列大小時,拋出該異常。
java.lang.TypeNotPresentException
類型不存在異常。當應用試圖以某個類型名稱的字元串表達方式訪問該類型,但是根據給定的名稱又找不到該類型是拋出該異常。該異常與ClassNotFoundException的區別在於該異常是unchecked(不被檢查)異常,而ClassNotFoundException是checked(被檢查)異常。
java.lang.UnsupportedOperationException
不支持的方法異常。指明請求的方法不被支持情況的異常。
異常
javax.servlet.jsp.JspException: Cannot retrieve mapping for action /Login (/Login是你的action名字)
可能原因
action沒有再struts-config.xml 中定義,或沒有找到匹配的action,例如在JSP文件中使用 <html:form action="Login.do".將表單提交給Login.do處理,如果出現上述異常,請查看struts-config.xml中的定義部分,有時可能是打錯了字元或者是某些不符合規則,可以使用strutsconsole工具來檢查。
-----------------------------------------------------------------------------------------------------------------
異常
org.apache.jasper.JasperException: Cannot retrieve definition for form bean null
可能原因
這個異常是因為Struts根據struts-config.xml中的mapping沒有找到action期望的form bean。大部分的情況可能是因為在form-bean中設置的name屬性和action中設置的name屬性不匹配所致。換句話說,action和form都應該各自有一個name屬性,並且要精確匹配,包括大小寫。這個錯誤當沒有name屬性和action關聯時也會發生,如果沒有在action中指定name屬性,那麼就沒有name屬性和action相關聯。當然當action製作某些控制時,譬如根據參數值跳轉到相應的jsp頁面,而不是處理表單數據,這是就不用name屬性,這也是action的使用方法之一。
-----------------------------------------------------------------------------------------------------------------
異常
No action instance for path /xxxx could be created
可能原因
特別提示:因為有很多中情況會導致這個錯誤的發生,所以推薦大家調高你的web伺服器的日誌/調試級別,這樣可以從更多的信息中看到潛在的、在試圖創建action類時發生的錯誤,這個action類你已經在struts-config.xml中設置了關聯(即添加了<action>標簽)。
在struts-config.xml中通過action標簽的class屬性指定的action類不能被找到有很多種原因,例如:定位編譯後的.class文件失敗。Failure to place compiled .class file for the action in the classpath (在web開發中,class的的位置在r WEB-INF/classes,所以你的action class必須要在這個目錄下。例如你的action類位於WEB-INF/classes/action/Login.class,那麼在struts-config.xml中設置action的屬性type時就是action.Login).
拼寫錯誤,這個也時有發生,並且不易找到,特別注意第一個字母的大小寫和包的名稱。
-----------------------------------------------------------------------------------------------------------------
異常
javax.servlet.jsp.JspException: No getter method for property username of bean org.apache.struts.taglib.html.BEAN
可能原因
沒有位form bean中的某個變數定義getter 方法
這個錯誤主要發生在表單提交的FormBean中,用struts標記<html:text property=」username」>時,在FormBean中必須有一個getUsername()方法。注意字母「U」。
-----------------------------------------------------------------------------------------------------------------
異常
java.lang.NoClassDefFoundError: org/apache/struts/action/ActionForm
可能原因
這個錯誤主要發生在在classpath中找不到相應的Java .class文件。如果這個錯誤發生在web應用程序的運行時,主要是因為指定的class文件不在web server的classpath中(/WEB-INF/classes 和 /WEB-INF/lib)。在上面的錯誤中,原因是找不到ActionForm類。
-----------------------------------------------------------------------------------------------------------------
異常
javax.servlet.jsp.JspException: Exception creating bean of class org.apache.struts.action.ActionForm: {1}
可能原因
Instantiating Struts-provided ActionForm class directly instead of instantiating a class derived off ActionForm. This mightoccur implicitly if you specify that a form-bean is this Struts ActionForm class rather than specifying a child of this classfor the form-bean.
Not associating an ActionForm-descended class with an action can also lead to this error.
-----------------------------------------------------------------------------------------------------------------
異常
javax.servlet.jsp.JspException: Cannot find ActionMappings or ActionFormBeans collection
可能原因
不是標識Struts actionServlet的<servlet>標記就是映射.do擴展名的<sevlet-mapping>標記或者兩者都沒有在web.xml中聲明。
在struts-config.xml中的打字或者拼寫錯誤也可導致這個異常的發生。例如缺少一個標記的關閉符號/>。最好使用struts console工具檢查一下。
另外,load-on-startup必須在web.xml中聲明,這要麼是一個空標記,要麼指定一個數值,這個數值用來表servlet運行的優先順序,數值越大優先順序越低。
還有一個和使用load-on-startup有關的是使用Struts預編譯JSP文件時也可能導致這個異常。
-----------------------------------------------------------------------------------------------------------------
異常
java.lang.NullPointerException at org.apache.struts.util.RequestUtils.forwardURL(RequestUtils.java:1223)
可能原因
在struts-config.xml中的forward元素缺少path屬性。例如應該是如下形式:
<forward name="userhome" path="/user/userhome.jsp"/>
-----------------------------------------------------------------------------------------------------------------
異常
javax.servlet.jsp.JspException: Cannot find bean org.apache.struts.taglib.html.BEAN in any scope
Probable Causes
試圖在Struts的form標記外使用form的子元素。這常常發生在你在</html:form>後面使用Struts的html標記。另外要注意可能你不經意使用的無主體的標記,如<html:form … />,這樣web 伺服器解析時就當作一個無主體的標記,隨後使用的所有<html>標記都被認為是在這個標記之外的,如又使用了<html:text property=」id」>還有就是在使用taglib引入HTML標記庫時,你使用的prefix的值不是html。
-----------------------------------------------------------------------------------------------------------------
異常
javax.servlet.jsp.JspException: Missing message for key xx.xx.xx
Probable Causes
這個key的值對沒有在資源文件ApplicationResources.properties中定義。如果你使用eclipse時經常碰到這樣的情況,當項目重新編譯時,eclipse會自動將classes目錄下的資源文件刪除。
資源文件ApplicationResources.properties 不在classpath中應將資源文件放到 WEB-INF/classes 目錄下,當然要在struts-config.xml中定義)
-----------------------------------------------------------------------------------------------------------------
異常
Cannot find message resources under key org.apache.struts.action.MESSAGE
可能原因
很顯然,這個錯誤是發生在使用資源文件時,而Struts沒有找到資源文件。
Implicitly trying to use message resources that are not available (such as using empty html:options tag instead of specifyingthe options in its body -- this assumes options are specified in ApplicationResources.properties file)
XML parser issues -- too many, too few, incorrect/incompatible versions
-----------------------------------------------------------------------------------------------------------------
異常
Strange and seemingly random characters in HTML and on screen, but not in original JSP or servlet.
可能原因
混和使用Struts的html:form標記和標準的HTML標記不正確。
使用的編碼樣式在本頁中不支持。
-----------------------------------------------------------------------------------------------------------------
異常
"Document contained no data" in Netscape
No data rendered (completely empty) page in Microsoft Internet Explorer
可能原因
使用一個Action的派生類而沒有實現perform()方法或execute()方法。在Struts1.0中實現的是perform()方法,在Struts1.1中實現的是execute()方法,但Struts1.1向後兼容perform()方法。但你使用Struts1.1創建一個Action的派生類,並且實現了execute()方法,而你在Struts1.0中運行的話,就會得到"Document contained nodata" error message in Netscape or a completely empty (no HTML whatsoever) page rendered in Microsoft Internet Explorer.」的錯誤信息。
---------------------------------------------------------------------------------------------------------------------------
異常
ServletException: BeanUtils.populate
解決方案
在用Struts上傳文件時,遇到了javax.servlet.ServletException: BeanUtils.populate異常。
我的ActionServlet並沒有用到BeanUtils這些工具類。後來仔細檢查代碼發現是在jsp文件里的form忘了加enctype="multipart/form-data" 了。所以寫程序遇到錯誤或異常應該從多方面考慮問題存在的可能性,想到系統提示信息以外的東西。
----------------------------------------------------------------------------------------------------------------------------
1. 定義Action後, 如果指定了name, 那麼必須要定義一個與它同名的FormBean才能進行form映射.2. 如果定義Action後, 提交頁面時出現 "No input attribute for mapping path..." 錯誤, 則需要在其input屬性中定義轉向的頁面.3. 如果插入新的數據時出現 "Batch update row count wrong:..." 錯誤, 則說明XXX.hbm.xml中指定的key的類型為原始類型(int, long),因為這種類型會自動分配值, 而這個值往往會讓系統認為已經存在該記錄, 正確的方法是使用java.lang.Integer或java.lang.Long對象.4. 如果插入數據時出現 "argument type mismatch" 錯誤, 可能是你使用了Date等特殊對象, 因為struts不能自動從String型轉換成Date型,所以, 你需要在Action中手動把String型轉換成Date型.5. Hibernate中, Query的iterator()比list()方法快很多.6. 如果出現 "equal symbol expected" 錯誤, 說明你的strtus標簽中包含另一個標簽或者變數, 例如:
<html:select property="test" onchange="<%=test%>"/>
或者
<html:hidden property="test" value="<bean:write name="t" property="p"/>"/>
這樣的情況...
---------------------------------------------------------------------------------------------------------------------------
錯誤:Exception in thread "main" org.hibernate.exception.SQLGrammarException: Could not execute JDBC batch update原因與解決: 因為Hibernate Tools(或者Eclipse本身的Database Explorer)生成*.hbn.xml工具中包含有catalog="***"(*表示資料庫名稱)這樣的屬性,將該屬性刪除就可以了
---------------------------------------------------------------------------------------------------------------------------
錯誤:org.hibernate.ObjectDeletedException: deleted object would be re-saved by cascade (remove deleted object from associations)
原因與解決:
方法1 刪除Set方的cascade
方法2 解決關聯關系後,再刪除
方法3 在many-to-one方增加cascade 但值不能是none
最後一招:
檢查一下hashCode equals是否使用了id作為唯一標示的選項了;我用uuid.hex時是沒有問題的;但是用了native,就不行了,怎麼辦?刪除啊!
----------------------------------------------------------------------------------------------------------------------------
問題:今天用Tomcat 5.5.12,發現原來很好用的系統不能用了,反復測試發現頁面中不能包含 taglib,否則會出現以下提示:HTTP Status 500 -type Exception reportMessage description The server encountered an internal error () that prevented it from fulfilling this request.exceptionorg.apache.jasper.JasperException: /index.jsp(1,1) Unable to read TLD "META-INF/tlds/struts-bean.tld" from JAR file"file:*****/WEB-INF/lib/struts.jar":原因:更新了工程用的lib文件夾下的jar,發布時也發布了servlet.jar和jsp-api.jar。解決:把jsp-api.jar刪除就解決這個問題了。-----------------------------------------------------------------------------------------------------------------------------
錯誤: java.lang.NullPointerException
原因: 發現 實例、 manage 實例等需要注入的東西沒有被注入(俗稱空指針異常)解決:這個時候,你應該查看日誌文件;默認是應用伺服器的 log 文件,比如 Tomcat 就是 [Tomcat 安裝目錄 ]/logs ;你會發現提示你:可能是:org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sf' defined in ServletContextresource [/WEB-INF/applicationContext.xml]: Initialization of bean failed; nested exception isorg.hibernate.HibernateException: could not configure from URL: file:src/hibernate.cfg.xmlorg.hibernate.HibernateException: could not configure from URL: file:src/hibernate.cfg.xml……………………….Caused by: java.io.FileNotFoundException: src\hibernate.cfg.xml可能是:org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined inServletContext resource [/WEB-INF/applicationContext.xml]: Initialization of bean failed; nested exception isorg.hibernate.MappingException: Resource: com/mcc/coupon/model/UserRole.hbm.xml not foundorg.hibernate.MappingException: Resource: com/mcc/coupon/model/UserRole.hbm.xml not found然後你就知道原因是因為配置文件的解析出了錯誤,這個通過 Web 頁面是看不出來的。更多的是持久化影射文件出的錯誤;導致了沒有被解析;當然你需要的功能就無法使用了。
----------------------------------------------------------------------------------------------------------------------------
錯誤:StandardWrapperValve[action]: Servlet.service() for servlet action threw exception
javax.servlet.jsp.JspException: Cannot retrieve mapping for action /settlementTypeManage
或者: type Status report message Servlet action is not available description The requested resource (Servlet action is not available) is not available.
原因: 同 上
----------------------------------------------------------------------------------------------------------------------------
錯誤StandardWrapperValve[jsp]: Servlet.service() for servlet jsp threw exceptionjava.lang.ClassNotFoundException: org.apache.struts.taglib.bean.CookieTei界面錯誤具體描述:
org.apache.jasper.JasperException: Failed to load or instantiate TagExtraInfo class: org.apache.struts.taglib.bean.CookieTei
原因與解決: <方案一>你的「html:」開頭的標簽沒有放在一個<html:form>中 <方案二>重新啟動你的應用伺服器,自動就沒有這個問題
❷ 新手程序員易犯的六個錯誤
新手零基礎學習編程,每天不可避免的都會遇到各種問題,難免會感覺很迷茫。昆明北大青鳥http://www.kmbdqn.cn/整理了新手程序員易犯的五個錯誤及解決措施,希望能讓大家少入坑。
不使用版本控制系統
一旦你開始對代碼有點熟悉的時候,學習如何使用VCS就應該成為你的首要任務。
這個系統有很多的高級功能,這對我們來說很重要。但一開始,通常會專注於settinguprepository以及committing,這有助於新手跟蹤開發的進度。然後,學習fetching/pulling和pushing的概念也是很重要的,這樣就可以擁有一個在線備份存儲庫。
2.不去閱讀比你優秀的程序員的代碼
北大青鳥校區老師相信這是學習的一個重要部分。新手學員常常疑惑,我為什麼還要花時間去讀別人的代碼,在一個較大的開源社區里,學習者會有機會向優秀的程序員學習。在這里,新手可以找到一些使用你熟悉的代碼編寫的項目,並對它們進行深入挖掘和理解。當然不必理解所有的內容,只需要分析其中一小部分代碼,這些都會讓你受益匪淺。
3.快速切換語言或技術
的確,能學到一點東西的感覺會很好,在語言和技術之間切換也是有趣的。但如果新手學習者在學習過程中經常這樣做,就會適得其反,也會給造成很大的損失。相反,如果對一項技術有很深入的了解,想要切換其他技術語言就會變得很容易。
4.沒有完成主要項目
這是北大青鳥校區老師在觀察學員自我學習過程中易犯的一個問題。一大部分新來的學員對軟體體系結構有著很大的興趣,喜歡嘗試不同的模式,框架和方法來學習一些特定需求很好的編程實踐。但通常,部分在編寫了代碼的核心部分以形成一個很小的工作演示後,就傾向於「置之不理」,然後轉移到別的項目上。
5.不關心代碼質量vs過於關心代碼質量
沒有質量問題的醜陋代碼比有質量問題的漂亮代碼更好。一開始可以不關心代碼質量,只要你對這個問題有意識,並且願意在編程結束時進行清理和解決問題。代碼質量是很重要的,但如果沒有找到平衡,就可能會過度框架住新手的應用程序。
6、不對代碼進行單元測試
單元測試可能會讓你覺得在莫名其妙地重復著工作。但是,將測試加入到學習的工作流程中,這從很多方面看都是有益的。
❸ 編譯器不會強製程序員處理哪種異常
在java編譯器中,是不會強制要求程序員進行處理Runtime異常的。
RuntimeException類及其子類的實例被稱為運行時異常,即UnChecked Exception。
我們較為常見的NullPointerException(空指針異常)和 IndexOutOfBoundsException(數組越界異常),對於這些Runtime異常。
在java編譯器中是不會強制要求程序員進行處理或聲明的(有些IDE可能會給可能出現Runtime異常問題的提示,但不會報錯)。
常見的RunTime異常幾種如下:
NullPointerException - 空指針引用異常。
ClassCastException - 類型強制轉換異常。
IllegalArgumentException - 傳遞非法參數異常。
ArithmeticException - 算術運算異常。
ArrayStoreException - 向數組中存放與聲明類型不兼容對象異常。
IndexOutOfBoundsException - 下標越界異常。
NegativeArraySizeException - 創建一個大小為負數的數組錯誤異常。
NumberFormatException - 數字格式異常。
SecurityException - 安全異常。
UnsupportedOperationException - 不支持的操作異常。
❹ 程序員遇到百度不出來的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、性能使用程度上都非常友好,那麼它在別的地方也有可能相對表現比較好。這時候如果有個功能我們的實現需要很復雜才能完成,那麼就有可能是我們用錯了。相似推理不一定都能正確,但會提供一些幫助。
以上。
❺ 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:是指在自定義異常時,如果方法出現異常,那麼將作為引用方法的對象拋出。即拋出異常。
希望對您有所幫助!~
❻ 程序出現致命錯誤,程序員應該怎麼辦
軟體有bug 不兼容,或者安裝的應用程序軟體損壞,更換版本,或最新最新版試試
以及重新安裝系統,更換一個電腦安裝試試
解決方法:
1.檢查電腦系統損壞,文件受損,中了病毒木馬,惡意軟體等干擾。
2.系統文件損壞或丟失,盜版軟體或系統或,很容易出現該問題。建議:使用完整版或正版系統。
3.安裝的軟體與系統或其它軟體發生沖突,找到發生沖突的軟體,卸載它。如果更新下載補丁不是該軟體的錯誤補丁,也會引起軟體異常,解決辦法:卸載該軟體,重新下載重新安裝試試。順便檢查開機啟動項,把沒必要啟動的啟動項禁止開機啟動。
❼ 常見JAVA運行時異常有哪些
1,java.lang.NullPointerException
這個異常的解釋是 "程序遇上了空指針 ",簡單地說就是調用了未經初始化的對象或者是不存在的對象,這個錯誤經常出現在創建圖片,調用數組這些操作中,比如圖片未經初始化,或者圖片創建時的路徑錯誤等等。
2,java.lang.ClassNotFoundException
異常的解釋是"指定的類不存在",這里主要考慮一下類的名稱和路徑是否正確即可
3,java.lang.
這個異常的解釋是"數組下標越界",現在程序中大多都有對數組的操作,因此在調用數組的時候一定要認真檢查,看自己調用的下標是不是超出了數組的范圍,一般來說,顯示(即直接用常數當下標)調用不太容易出這樣的錯,但隱式(即用變數表示下標)調用就經常出錯了.
4,java.lang.NoSuchMethodError
方法不存在錯誤。當應用試圖調用某類的某個方法,而該類的定義中沒有該方法的定義時拋出該錯誤。
5,java.lang.IndexOutOfBoundsException
索引越界異常。當訪問某個序列的索引值小於0或大於等於序列大小時,拋出該異常。
6,java.lang.NumberFormatException
數字格式異常。當試圖將一個String轉換為指定的數字類型,而該字元串確不滿足數字類型要求的格式時,拋出該異常。
7,java.sql.SQLException
Sql語句執行異常
8,java.io.IOException
輸入輸出異常
9,java.lang.IllegalArgumentException
方法參數錯誤
10java.lang.IllegalAccessException
無訪問許可權異常
(7)程序員異常問題擴展閱讀:
Java技術應用領域:
1、Android應用
許多的 Android應用都是Java程序員開發者開發。雖然 Android運用了不同的JVM以及不同的封裝方式,但是代碼還是用Java語言所編寫。相當一部分的手機中都支持JAVA游戲,這就使很多非編程人員都認識了JAVA。
2、在金融業應用的伺服器程序
Java在金融服務業的應用非常廣泛,很多第三方交易系統、銀行、金融機構都選擇用Java開發,因為相對而言,Java較安全 。大型跨國投資銀行用Java來編寫前台和後台的電子交易系統,結算和確認系統,數據處理項目以及其他項目。
3、網站
Java 在電子商務領域以及網站開發領域占據了一定的席位。開發人員可以運用許多不同的框架來創建web項目,SpringMVC,Struts2.0以及frameworks。即使是簡單的 servlet,jsp和以struts為基礎的網站在政府項目中也經常被用到。例如醫療救護、保險、教育、國防以及其他的不同部門網站都是以Java為基礎來開發的。
4、嵌入式領域
Java在嵌入式領域發展空間很大。在這個平台上,只需130KB就能夠使用Java技術(在智能卡或者感測器上)。
5、大數據技術
Hadoop以及其他大數據處理技術很多都是用Java,例如Apache的基於Java的HBase和Accumulo以及 ElasticSearchas。
6、高頻交易的空間
Java平台提高了這個平台的特性和即使編譯,他同時也能夠像 C++ 一樣傳遞數據。正是由於這個原因,Java成為的程序員編寫交易平台的語言,因為雖然性能不比C++,但開發人員可以避開安全性,可移植性和可維護性等問題。
7、科學應用
Java在科學應用中是很好選擇,包括自然語言處理。最主要的原因是因為Java比C++或者其他語言相對其安全性、便攜性、可維護性以及其他高級語言的並發性更好。
❽ 程序員在職業生涯中易犯的7個錯誤
1.沒有明確的職業目標
沒有目標的人生,就像無根的浮萍,水流到哪裡就飄到哪裡,一生漂泊。
如果你想要在軟體開發領域獲得真正的成功,那麼就必須知道該何去何從。或許面對遙遠的未來,你已經有了一個粗略的目標了。但是除了這點還不夠,你應當堅實自己的目標——清楚的定義在實現過程中的每個重要時間點所需要達到的效果。
我認識許多程序員和其它方面的專業人士,數十年來他們都在相同的職位上反復地做著同樣的事情。是的,你沒有看錯,是數十年。接受職業現狀,不做任何改變,是造成這種悲劇的根源。對於未來,如果你沒有明確的職業規劃,這樣的悲劇就很可能會發生在你身上。
面對於此,你該怎麼做呢?
從現在開始,花一些時間來認真規劃一下職業並確定最近的目標。一旦你達到了這個目標,你就要選擇一個新的目標了。在職業生涯中,這樣的目標會一個接著一個。你可以把這些目標寫下來,放在一個每天都可以看見的地方,這樣就可以讓你隨時回想起當前需要做的工作。
2.不重視「軟技能」或非技術的東西
我認識許多擅長寫代碼的程序員,他們可以用所寫的演算法把我耍得團團轉,他們對復雜架構的理解力和思考能力令我自愧不如。
但是真實的狀況卻是:技術不如他們的我,軟體開發領域的職業發展卻全面超過了他們,除了職位,還包括薪水、生產力等諸多方面。
在這里我並不是為了吹噓自己多了不起,而是為了向那些只埋頭專研技術的程序員們說明「軟技能」對於職業發展有多重要。
作為一個軟體開發者,我相信你也清楚,編寫代碼並不是工作的全部。在通往成功的道路上,還需要學習很多其它技能。我們需要長期與他人打交道,所以必須學習為人處事;軟體開發面臨長期的趕工與不同的需求變化,所以需要學習對心態和注意力的調整;在不斷變化的環境里有許多事情需要處理,所以應當學習對事情劃分優先順序以做到效率的最大化。另外,我們對待身體健康應當和對待自己收入一樣敏感,這個才是革命的本錢。
我還可以繼續列舉出更多的東西,關於了解開發者應當掌握的「軟技能」你可以去閱讀我寫的《SoftSkills:TheSoftwareDeveloper』sManua》一書。
總的來說,在生活中無論從事什麼樣的工作,那些軟技能通常都比硬性的技術能力更為重要,所以請保持不斷地學習這些技能。
3.不融入社區生活
在程序員生涯中有一樣東西令我受益頗深,它就是社區的幫助。成為這個大群體的一部分,不僅讓我擁有了歸屬感不再孤獨,也幫助我改進了自身的技能,向著更高的平台發展。
如果你還沒有參與社區生活的話,我強烈建議你融入這個圈子裡來。它是一個比自我寬廣得多的平台,有助於你的發展。
如果你感覺自己的軟體開發工作停滯不前,費勁腦力也無法獲得更大突破的時候,最好的方式就是加入社區,與一群有志同道合的人共同探討所遇到的困難,獲得有助於解決問題的建議。另外,融入社區生活還能夠聚集人氣,培養人脈,這對於提升自身的職業發展也有很大幫助。
但是,如何才能融入到社區生活中呢?
這很簡單,世界各地都有很多開發者團體,你可以通過程序員網站找到並加入到他們當中去。你還可以參加開源夏令營,這是一個一年一度的免費地方性活動,眾多開發人員會聚在一起分享他們的工作,任何人都可登記參加自己感興趣的話題。
如果你不希望在現實生活中與過多的人接觸,也可以選擇加入虛擬社區。
那些大眾的程序員社區會是你的第一選擇。在社區中你會發現有一些非常厲害的程序員,他們會在自己的博客上寫一些精闢的文章並解答大家的問題。除此之外,還有另外一些不錯的在線社區,比如大牛們的博客網站、各種技術論壇、討論群等。
當你開始學會分享,把自己的所知與所想都寫出來的時候,你就真正的融入進了社區生活——而這個博客就是我為自己加入這個程序員社區所做的第一件事。:-)
4.沒有專長
如果你過去常訪問我的博客或者YouTube視頻,你會發現我很多時候都在談論這個話題。這個話題是如此重要,以至於我一有機會就會說到它。
俗話說,術業有專攻。你應當選擇一項想要專精的技術並努力磨煉它。但這並不意味著你就可以放棄對其它技術的基本理解而一味地去專研某項技術——我對那些會數種語言的人是非常欣賞的。這一點非常重要,尤其是在你職業生涯的早期培養一技之長的時候。
專長可以滿足更高級的需求,因此,在同等條件下,它會帶來更豐厚的報酬並更快的積累聲望——這些對於業界對你的認可是很有幫助的。
有專長的人好比是小池塘中的大魚,受人矚目。或許最終這條大魚會跳入更寬廣的池子,但是所累積的聲望和名氣同樣有助於在軟體開發行業的其它領域的發展。
凡事只要七分就好,對於專長技術的研究學習同樣如此。過度的投入會對程序員的時間與精力造成浪費,這是得不償失的。
5.無視個人品牌價值
生活中充滿著各種變數:搬家、結婚、換工作、一夜暴富、突然發福等等。無論如何,有一樣東西始終會伴隨著你一生,而這個東西就是——名字。
你的名字會貫穿於你的全部生活,難道它還不值得你去重視么?
你的名字或者也可以稱作是你的個人品牌是一件非常有投資價值的東西,可許多軟體開發人員對此卻一無所知。
對於獲得工作、取得晉升、客戶端的登陸以及工作的開展等,名字無疑都展現了其強大的作用。毫不誇張的說,假如你臭名昭著的話,會萬事難行,而如果你有良好的名譽的話,大多事情只需通過簡單的握手就能搞定。
我認識很多的軟體開發人員,他們從不擔心自己會失業,這是因為他們投資了時間和精力來打造堅實的個人品牌。他們知道,無論發生什麼事情,在他們失業後的幾個小時內就可以獲得一份新的工作,這是因為他們在業界有良好的聲譽。
對產品和服務進行的投資看起來很正常,但是你是否考慮過自我營銷的價值?要在軟體開發行業建立起自己的個人品牌,我的建議是從創建自己的博客開始,選擇將自己的專長或者有很深了解的領域作為提高自己影響力的跳板,學會把自己的名字一步步做成行業的金字招牌。如何快速的提高自己的影響力呢?最好的方法之一就是創建對別人有幫助的文章。
就拿這個博客為例吧。這個博客建立了我在互聯網上的個人品牌和聲譽,如果你認為我的文章或者網站是有價值的,你會選擇進行分享。甚至你有可能把它列入收藏或者進行訂閱,以方便以後繼續訪問。而這只是其中一種打造個人品牌的方式。同樣的,你還可以選擇視頻網站、播客等媒體,或者在書刊上發表文章,在會議上演講等方式。如果你對如何在軟體開發領域深度挖掘自身的品牌價值很感興趣,這個網站會告訴你如何去做。
6.荒廢業務時間
在工作之餘,你應當做一些項目來練練手。
做業余工作有許多你不知道的好處。首先,它可以有效的改進你的專業技能,特別是那些在平時的工作中很少用到的技術。相比起平時朝九晚五的工作,業余工作類型多變,對於專業技能的提高更有好處。其次,它有助於你對新的開發技術和技巧的學習。這對於日後你想從事新的工作是很有幫助的。我碰到過許多程序員,他們向我抱怨在當前工作中沒有機會去學習新技術,這讓他們今後無法在工作市場上立足。而我向他們建議工作之餘去做一些小項目,使用他們今後想要立足的新技術——這種方式對於提高相關技術是很有幫助的。
除此之外,我們不要忽視做業余工作所帶來的經濟利益。人們常認為業余時間做的那些小項目是掙不到什麼錢的,而事實上它卻是額外收入的重要來源。4年以前,我在業余時間里開發了一個在Android和iOS平台上使用的應用程序,而到現在,這個應用程序還能為我創造價值。
我還認識一些程序員,他們從業余工作做起,最後把這些工作發展為了全職工作。而事實上我就是這些程序員中的一位。這個博客本身以及SimpleProgrammer周圍的其它部分現在成為了我的全職工作。我喜歡稱自己為程序員的生活導師,但是也有很多人認為我是一個專職的博客寫手。
業余工作可以讓你充滿樂趣,它能夠把你從那些你不喜歡但又必須去做的工作中解脫出來。作為一種釋放工作壓力的好方法,它會每天帶給你新的希望。
7.沒有自我學習的計劃
在我面試軟體人員的時候,我首先會問到的一個問題就是關於他們的自我學習和持續完善的計劃——如何進行自我完善。程序員如何在這個快速變化的領域保持技術與觀念上的更新?我希望獲得的回答是他們能告訴我對於自我學習與成長他們有著一個實際可行的計劃。因為一個致力於不斷學習進步的人不僅能夠讓自己邁向成功還能影響到周圍的人,使他們一同邁向成功。
然而,有如此之多的程序員對於自我學習沒有任何計劃。假如你是這些人中的一員,你就應該立即行動起來做一個自我學習的計劃。
這兒有一個可供參考的個人簡單計劃:
堅持每月讀一本關於技術學習或者職業發展的書籍。
這意味著一年時間里你需要閱讀12本書。對於我來說,我會在每天用至少45分鍾時間來閱讀。當我在跑步機上運動的時候我會同時閱讀一些與我個人職業發展相關的文章。
積沙成塔,集腋成裘。每天只需花費30分鍾時間來閱讀書籍,一兩年時間之後你的人生境遇就會發生很大的改變。