開發(fā)過(guò)程需要注意的問(wèn)題有下面這些:1. 服務(wù)器端必須提供輸入數(shù)據(jù)正確性的驗(yàn)證,客戶端的Javascript驗(yàn)證可以沒有。
這是基于安全性的考慮,因?yàn)镴avascript是很容易被繞過(guò)的,增加客戶端驗(yàn)證只是為了減少服務(wù)器壓力、界面更加容易使用。 2. 適度使用Session,盡量不要在Session里放很大的集合對(duì)象,以免內(nèi)存消耗過(guò)大,因?yàn)楹芏嘤脩粼L問(wèn)的時(shí)候會(huì)產(chǎn)生很多的Session。
參數(shù)傳遞應(yīng)該盡量通過(guò)Request。熟悉HTTP有助于更好的理解Session、Cookie、Request等的機(jī)制。
3. 在帶有分頁(yè)的查詢界面,盡量不要使用POST方法來(lái)傳遞參數(shù),POST傳遞的參數(shù)在地址欄里是看不到的,刷新后會(huì)有重新提交表單的提示。使用GET方法傳遞參數(shù)要注意URL的長(zhǎng)度不能超過(guò)1K。
4. 分層應(yīng)該清晰,一般目前我們分為View(Jsp或FreeMarker加上Action)、Bean(Service)、DAO這么三層,即顯示層、業(yè)務(wù)層、數(shù)據(jù)層。記錄集ResultSet這種只能出現(xiàn)在DAO層中的對(duì)象不能出現(xiàn)在Bean(Service)層中,同樣HttpServletRequest這種只能出現(xiàn)在View層的對(duì)象也不應(yīng)出現(xiàn)在Bean(Service)層中。
這并不是絕對(duì)的。 5. 盡量使用簡(jiǎn)單SQL,避免兩表以及多表聯(lián)查。
多表聯(lián)查會(huì)導(dǎo)致數(shù)據(jù)庫(kù)壓力大幅增加,而且不利于在內(nèi)存中對(duì)部分記錄進(jìn)行緩存,代碼的重用性也難以提高。 6. 避免在循環(huán)里執(zhí)行findXXById這樣的方法,不如執(zhí)行一個(gè)findXXByIds這樣的方法一次性把記錄取到Map里。
大部分有實(shí)際對(duì)象對(duì)應(yīng)的表應(yīng)該提供這樣一個(gè)方法。 7. 如果使用最原始的jdbc編程的話需要注意資源的正確釋放,在循環(huán)里new出來(lái)的Statement或者ResultSet就要在循環(huán)里關(guān)閉。
8. 在編寫SQL進(jìn)行查詢的時(shí)候,需要能夠判斷這個(gè)SQL是否已經(jīng)使用了索引,避免全表掃描,必要的時(shí)候增加索引。 9. 在寫一個(gè)方法前,首先查看有沒有相同功能或者很類似功能的方法已經(jīng)有了,尤其是工具類方法,往往已經(jīng)寫過(guò)了,避免重復(fù)代碼的產(chǎn)生,發(fā)現(xiàn)重復(fù)代碼及時(shí)進(jìn)行處理。
如果一段代碼被重復(fù)使用兩遍或以上,那么可以考慮專門寫個(gè)方法來(lái)放這段代碼,同樣多次使用的常量也應(yīng)該專門定義出來(lái)。 10. 在一個(gè)方法里并不一定只能有一個(gè)return,如果已經(jīng)有結(jié)果了盡早return,沒必要增加嵌套的層次,那樣會(huì)導(dǎo)致代碼可讀性不佳,但也不能return太多,代碼看起來(lái)比較舒服就可以了。
11. 不要滿足于能夠熟練的編寫DAO和Bean(Service)的代碼,相比較而言,后臺(tái)如果在成熟框架的支持下,編碼是沒有太大難度的,也不值得沾沾自喜,因?yàn)檫@是對(duì)Java研發(fā)工程師基本的要求。適當(dāng)?shù)呐囵B(yǎng)一下前臺(tái)的編碼能力,學(xué)會(huì)使用Dreamweaver。
不要輕視界面,也別認(rèn)為這是界面設(shè)計(jì)的事情,界面對(duì)用戶來(lái)說(shuō)就是軟件,學(xué)會(huì)編寫CSS和調(diào)整界面對(duì)你沒有壞處。 12. 非常明確Java和javascript作用的范圍,明確它們能做的事情。
13. 一般很奇怪的現(xiàn)象都是由一些低級(jí)錯(cuò)誤引起的,如果你查了一段時(shí)間也沒有結(jié)果,那么讓別人來(lái)查吧。 14. 不要用可能被修改的字段來(lái)做主鍵,那樣會(huì)讓相關(guān)記錄的更新成為一個(gè)大麻煩。
15. 如果被迫使用Hibernate和jdbc混合操作數(shù)據(jù)庫(kù)的話,不要用Hibernate來(lái)做復(fù)雜查詢和統(tǒng)計(jì)。Hibernate用的不好的話,帶來(lái)的便利是非常有限的。
16. 數(shù)據(jù)庫(kù)中經(jīng)常被讀取,但是很少修改的話,應(yīng)該把這樣的數(shù)據(jù)讀到內(nèi)存中用OSCache之類的緩存起來(lái),然后定期或者觸發(fā)的去更新,有助于減少讀數(shù)據(jù)庫(kù)次數(shù),提升性能。 17. 編碼的時(shí)候應(yīng)該注意部署環(huán)境帶來(lái)的影響,這種影響包括操作系統(tǒng)不同帶來(lái)路徑的差異;應(yīng)用服務(wù)器和數(shù)據(jù)庫(kù)服務(wù)器之間時(shí)間的差異;外網(wǎng)可能部署在多臺(tái)服務(wù)器上,放到Session里的對(duì)象因?yàn)樾枰獜?fù)制所以要實(shí)現(xiàn)java.io.Serializable接口等。
18. 盡量不要在jsp上編寫太多代碼,保持jsp的整潔很重要,用Dreamweaver打開不至于一塌糊涂,根本看不出來(lái)這是個(gè)什么界面。 19. 目前我們的項(xiàng)目一般都使用Spring來(lái)管理數(shù)據(jù)庫(kù)事務(wù),而且一般都配置在Bean(Service)即業(yè)務(wù)層這一層,應(yīng)該注意要保持事務(wù)的完整性,不要把一些應(yīng)該放在一起的操作分散在Action這一層。
相關(guān)的更新操作可以認(rèn)為是一個(gè)事務(wù),比如:增加一個(gè)家長(zhǎng),同時(shí)更新學(xué)生是否有家長(zhǎng)的字段。 20. 在Spring的配置中,對(duì)于有些需要保持獨(dú)立事務(wù)的方法操作,比如生成主鍵等,應(yīng)該聲明該方法為獨(dú)立事務(wù)ROPAGATION_REQUIRES_NEW。
Bean(Service)里如果拋出checked exception,事務(wù)默認(rèn)是不會(huì)回滾的,需要加以聲明,比如PROPAGATION_REQUIRED,-PassportException。 21. 在一個(gè)Bean(Service)中引用其他Bean(Service)的時(shí)候盡量引用Bean(Service),而不是DAO。
因?yàn)槠渌腂ean(Service)往往封裝DAO的操作后,又做了進(jìn)一步的完善,比如增加校驗(yàn)等,所以應(yīng)該重用這些方法,而不必要去引用DAO的方法來(lái)重寫這些操作。 22. 至少在Bean(Service)的接口定義上增加注釋,方便他人引用你寫的方法。
23. 好好利用集合框架里的Map、List、Set。尤其是HashMap、ArrayList、HashSet用的最多,這些類是多條數(shù)據(jù)操作的基礎(chǔ),它們都不是線程安全的。
24. 現(xiàn)在跑的快的頁(yè)面,隨著數(shù)據(jù)量的增加,可能會(huì)變的很慢,所以應(yīng)該意識(shí)到頁(yè)面可能變慢的原因。
自己和別人思路的差異。
2。初學(xué)者請(qǐng)不要看太多太多的書那會(huì)誤人子弟的,先找本系統(tǒng)的學(xué),很多人用了很久都是只對(duì)部分功能熟悉而已,不系統(tǒng)還是不夠的。
3??磶椭?,不要因?yàn)楹茈y而自己是初學(xué)者所以就不看;幫助永遠(yuǎn)是最好的參考手冊(cè),雖然幫助的文字有時(shí)候很難看懂,總覺得不夠直觀。
4。不要被對(duì)象、屬性、方法等詞匯所迷惑;最根本的是先了解最基礎(chǔ)知識(shí)。
5。不要放過(guò)任何一個(gè)看上去很簡(jiǎn)單的小問(wèn)題--他們往往并不那么簡(jiǎn)單,或者可以引伸出很多知識(shí)點(diǎn);不會(huì)舉一反三你就永遠(yuǎn)學(xué)不會(huì)。
6。知道一點(diǎn)東西,并不能說(shuō)明你會(huì)寫腳本,腳本是需要經(jīng)驗(yàn)積累的。
7。學(xué)腳本并不難,JSP、ASP、PHP等等也不過(guò)如此--難的是長(zhǎng)期堅(jiān)持實(shí)踐和不遺余力的博覽群書; 8。
看再多的書是學(xué)不全腳本的,要多實(shí)踐 9。把時(shí)髦的技術(shù)掛在嘴邊,還不如把過(guò)時(shí)的技術(shù)記在心里; 10。
學(xué)習(xí)腳本最好的方法之一就是多練習(xí); 11。 在任何時(shí)刻都不要認(rèn)為自己手中的書已經(jīng)足夠了; 12。
看得懂的書,請(qǐng)仔細(xì)看;看不懂的書,請(qǐng)硬著頭皮看; 13。別指望看第一遍書就能記住和掌握什么——請(qǐng)看第二遍、第三遍; 14。
請(qǐng)把書上的例子親手到電腦上實(shí)踐,即使配套光盤中有源文件; 15。 把在書中看到的有意義的例子擴(kuò)充;并將其切實(shí)的運(yùn)用到自己的工作中; 16。
不要漏掉書中任何一個(gè)練習(xí)——請(qǐng)全部做完并記錄下思路; 17。當(dāng)你用腳本到一半?yún)s發(fā)現(xiàn)自己用的方法很拙劣時(shí),請(qǐng)不要馬上停手;請(qǐng)盡快將余下的部分粗略的完成以保證這個(gè)代碼的完整性,然后分析自己的錯(cuò)誤并重新編寫和工作。
18。別心急,寫腳本確實(shí)不容易;水平是在不斷的實(shí)踐中完善和發(fā)展的; 19。
每學(xué)到一個(gè)腳本難點(diǎn)的時(shí)候,嘗試著對(duì)別人講解這個(gè)知識(shí)點(diǎn)并讓他理解----你能講清楚才說(shuō)明你真的理解了; 20。記錄下在和別人交流時(shí)發(fā)現(xiàn)的自己忽視或不理解的知識(shí)點(diǎn); 21。
保存好你做過(guò)的所有的源文件----那是你最好的積累之一; 22。對(duì)于網(wǎng)絡(luò),還是希望大家能多利用一下,很多問(wèn)題不是非要到論壇來(lái)問(wèn)的,首先你要學(xué)會(huì)自己找答案,比如google、百度都是很好的搜索引擎,你只要輸入關(guān)鍵字就能找到很多相關(guān)資料,別老是等待別人給你希望,看的出你平時(shí)一定也很懶! 23,到一個(gè)論壇,你學(xué)會(huì)去看以前的帖子,不要什么都不看就發(fā)帖子問(wèn),也許你的問(wèn)題早就有人問(wèn)過(guò)了,你再問(wèn),別人已經(jīng)不想再重復(fù)了,做為初學(xué)者,誰(shuí)也不希望自己的帖子沒人回的。
24,雖然不是打擊初學(xué)者,但是這句話還是要說(shuō):論壇論壇,就是大家討論的地方,如果你總期望有高手總無(wú)償指點(diǎn)你,除非他是你親戚!!討論者,起碼是水平相當(dāng)?shù)牟庞杏懻摰恼f(shuō)法,如果水平真差距太遠(yuǎn)了,連基本操作都需要?jiǎng)e人給解答,誰(shuí)還跟你討論呢。 浮躁的人容易問(wèn):我到底該學(xué)什么;----別問(wèn),學(xué)就對(duì)了; 浮躁的人容易問(wèn):Js有錢途嗎;----建議你去搶銀行; 浮躁的人容易說(shuō):我要中文版!我英文不行!----不行?學(xué)呀! 浮躁的人分兩種:只觀望而不學(xué)的人;只學(xué)而不堅(jiān)持的人; 浮躁的人永遠(yuǎn)不是一個(gè)高手。
一、J2ME中需要的Java基礎(chǔ)知識(shí) 現(xiàn)在有大部分人,都是從零開始學(xué)J2ME的,學(xué)習(xí)J2ME的時(shí)候,總是從Java基礎(chǔ)開始學(xué)習(xí),而且現(xiàn)在講Java基礎(chǔ)的書籍中都是以J2SE來(lái)講基礎(chǔ),這就給學(xué)習(xí)造成了一些不必要的麻煩,下面將J2ME中用到的和不需要的Java基礎(chǔ)知識(shí)做一個(gè)簡(jiǎn)單的說(shuō)明。
J2ME中使用到的Java基礎(chǔ)知識(shí): 1、Java語(yǔ)法基礎(chǔ):包括基本數(shù)據(jù)類型、關(guān)鍵字、運(yùn)算符等等 2、面向?qū)ο蟮乃枷耄侯惡蛯?duì)象的概念,繼承和多態(tài)等等。 3、異常處理 4、多線程 J2ME中沒有用到的Java基礎(chǔ)知識(shí): 1、JDK中javac和java命令的使用 2、Java基礎(chǔ)中的很多類在J2ME中沒有,或者類中的方法做了大量的精簡(jiǎn)。
所以建議在J2ME中熟悉類庫(kù)。 3、Applet、AWT、Swing這些知識(shí)在J2ME中根本使用不到。
簡(jiǎn)單說(shuō)這么多,希望學(xué)J2ME的朋友們能少走一些彎路,不足之處希望大家積極指正和補(bǔ)充。 二、J2ME中暫時(shí)無(wú)法完成的功能 列一些J2ME中暫時(shí)無(wú)法完成的功能,希望大家能積極補(bǔ)充: 1、在手機(jī)中不更改代碼實(shí)現(xiàn)移植,主要指游戲。
2、動(dòng)態(tài)修改按鈕文字。 3、在Canvas上接受中文輸入。
4、操作本地資源、例如地址本、已收短信息等。 5、制作破壞性的手機(jī)病毒。
6、其他等待大家來(lái)補(bǔ)充。
Java的線程編程非常簡(jiǎn)單。
但有時(shí)會(huì)看到一些關(guān)于線程的錯(cuò)誤用法。下面列出一些應(yīng)該注意的問(wèn)題。
1.同步對(duì)象的恒定性 All java objects are references。 對(duì)于局部變量和參數(shù)來(lái)說(shuō),java里面的int, float, double, boolean等基本數(shù)據(jù)類型,都在棧上。
這些基本類型是無(wú)法同步的;java里面的對(duì)象(根對(duì)象是Object),全都在堆里,指向?qū)ο蟮膔eference在棧上。 java中的同步對(duì)象,實(shí)際上是對(duì)于reference所指的“對(duì)象地址”進(jìn)行同步。
需要注意的問(wèn)題是,千萬(wàn)不要對(duì)同步對(duì)象重新賦值。 舉個(gè)例子。
class A implements Runnable { Object lock = new Object(); void run() { for(。
) { synchronized(lock) { // do something 。
lock = new Object(); } } } } run函數(shù)里面的這段同步代碼實(shí)際上是毫無(wú)意義的。因?yàn)槊恳淮蝜ock都給重新分配了新的對(duì)象的reference,每個(gè)線程都在新的reference同步。
大家可能覺得奇怪,怎么會(huì)舉這么一個(gè)例子。 因?yàn)槲乙娺^(guò)這樣的代碼,同步對(duì)象在其它的函數(shù)里被重新賦了新值。
這種問(wèn)題很難查出來(lái)。所以,一般應(yīng)該把同步對(duì)象聲明為final。
final Object lock = new Object(); 使用Singleton Pattern 設(shè)計(jì)模式來(lái)獲取同步對(duì)象,也是一種很好的選擇。 2.如何放置共享數(shù)據(jù) 實(shí)現(xiàn)線程,有兩種方法,一種是繼承Thread類,一種是實(shí)現(xiàn)Runnable接口。
上面舉的例子,采用實(shí)現(xiàn)Runnable接口的方法。本文推薦這種方法。
首先,把需要共享的數(shù)據(jù)放在一個(gè)實(shí)現(xiàn)Runnable接口的類里面,然后,把這個(gè)類的實(shí)例傳給多個(gè)Thread的構(gòu)造方法。 這樣,新創(chuàng)建的多個(gè)Thread,都共同擁有一個(gè)Runnable實(shí)例,共享同一份數(shù)據(jù)。
如果采用繼承Thread類的方法,就只好使用static靜態(tài)成員了。如果共享的數(shù)據(jù)比較多,就需要大量的static靜態(tài)成員,令程序數(shù)據(jù)結(jié)構(gòu)混亂,難以擴(kuò)展。
這種情況應(yīng)該盡量避免。 編寫一段多線程代碼,處理一個(gè)稍微復(fù)雜點(diǎn)的問(wèn)題。
兩種方法的優(yōu)劣,一試便知。 3.同步的粒度 線程同步的粒度越小越好,即,線程同步的代碼塊越小越好。
盡量避免用synchronized修飾符來(lái)聲明方法。盡量使用synchronized(anObject)的方式,如果不想引入新的同步對(duì)象,使用synchronized(this)的方式。
而且,synchronized代碼塊越小越好。 4.線程之間的通知 這里使用“通知”這個(gè)詞,而不用“通信”這個(gè)詞,是為了避免詞義的擴(kuò)大化。
線程之間的通知,通過(guò)Object對(duì)象的wait()和notify() 或notifyAll() 方法實(shí)現(xiàn)。 下面用一個(gè)例子,來(lái)說(shuō)明其工作原理: 假設(shè)有兩個(gè)線程,A和B。
共同擁有一個(gè)同步對(duì)象,lock。 1.首先,線程A通過(guò)synchronized(lock) 獲得lock同步對(duì)象,然后調(diào)用lock。
wait()函數(shù),放棄lock同步對(duì)象,線程A停止運(yùn)行,進(jìn)入等待隊(duì)列。 2.線程B通過(guò)synchronized(lock) 獲得線程A放棄的lock同步對(duì)象,做完一定的處理,然后調(diào)用 lock。
notify() 或者lock。notifyAll() 通知等待隊(duì)列里面的線程A。
3.線程A從等待隊(duì)列里面出來(lái),進(jìn)入ready隊(duì)列,等待調(diào)度。 4.線程B繼續(xù)處理,出了synchronized(lock)塊之后,放棄lock同步對(duì)象。
5.線程A獲得lock同步對(duì)象,繼續(xù)運(yùn)行。
1、不要排斥新技術(shù)和新工具。
Android Studio 1.0 之后的版本,基本已經(jīng)穩(wěn)定到可以支持正常的工作開發(fā)的程度了。單純就書寫效率而言,Android Studio 帶來(lái)的好處絕對(duì)大于它和Gradle的學(xué)習(xí)成本。
JetBrains的IDE,用過(guò)都說(shuō)好。還有就是適當(dāng)?shù)奶嵘齮argetSdkVer… 顯示全部 1、不要排斥新技術(shù)和新工具。
Android Studio 1.0 之后的版本,基本已經(jīng)穩(wěn)定到可以支持正常的工作開發(fā)的程度了。單純就書寫效率而言,Android Studio 帶來(lái)的好處絕對(duì)大于它和Gradle的學(xué)習(xí)成本。
JetBrains的IDE,用過(guò)都說(shuō)好。 還有就是適當(dāng)?shù)奶嵘齮argetSdkVersion到新版本。
2、代碼設(shè)計(jì)方面的問(wèn)題,大部分都能在Android系統(tǒng)源碼里找到解決方案。 當(dāng)你想設(shè)計(jì)一個(gè)新模塊,或者實(shí)現(xiàn)一個(gè)新ui組件的時(shí)候,應(yīng)該采用哪些設(shè)計(jì)模式、應(yīng)該以哪種形式給外界提供接口之類的問(wèn)題,大部分都可以參考Android系統(tǒng)的源碼,找到實(shí)現(xiàn)方式。
Google為安卓程序員提供了一座現(xiàn)成的寶庫(kù)。 3、理解Android和Java內(nèi)存管理方式,至少要理解垃圾回收和Java的引用。
就好比學(xué)OC就要先理解黃金法則一樣,而java的內(nèi)存管理,其實(shí)比OC要好理解多了。 這可能會(huì)幫助你大大減少程序異步操作產(chǎn)生的空指針崩潰。
也會(huì)幫助你理解為什么濫用單例模式會(huì)導(dǎo)致內(nèi)存的臃腫。還會(huì)幫助你養(yǎng)成不用“+”去連接超大字符串的好習(xí)慣。
4、ContentProvider并不是只有在跨進(jìn)程共享數(shù)據(jù)的才有用,把數(shù)據(jù)庫(kù)表映射到一個(gè)獨(dú)立的uri是Google鼓勵(lì)的實(shí)現(xiàn)方式。 從設(shè)計(jì)上講,用uri(統(tǒng)一資源標(biāo)識(shí)符)去描述數(shù)據(jù),肯定比sql語(yǔ)句要理想。
從效果上講,用CursorLoader讀取數(shù)據(jù)是讓iOS程序員都羨慕不已的事情,作為android程序員,何苦不用呢。 5、理解Activity任務(wù)棧。
非Activity的Context對(duì)象如果直接啟動(dòng)Activity會(huì)報(bào)錯(cuò),這只是一個(gè)表面現(xiàn)象,真正起作用的其實(shí)是Activity任務(wù)棧機(jī)制。 理解Activity任務(wù)棧機(jī)制以及Activity的各種啟動(dòng)方式,會(huì)幫助解決大部分頁(yè)面關(guān)系錯(cuò)亂問(wèn)題,以及應(yīng)用互相掉起、任務(wù)欄進(jìn)入應(yīng)用、后臺(tái)彈窗引起的各種問(wèn)題。
6、對(duì)于一些奇葩的第三方ROM,調(diào)用其非主流api的時(shí)候,可以使用反射。 在適配一些第三方ROM的的時(shí)候,調(diào)用一些在開發(fā)環(huán)境中沒有,但在運(yùn)行環(huán)境中有的方法時(shí),可以使用反射。
比方說(shuō),華為雙卡手機(jī)可能會(huì)提供獲取第二塊SIM卡信息的api,如果直接調(diào)用,在開發(fā)環(huán)境可能無(wú)法通過(guò)正常編譯,用反射就沒問(wèn)題。這屬于不得已而用反射的一種情況。
7、SQLite的鎖,是數(shù)據(jù)庫(kù)級(jí)別的鎖,也就是說(shuō)同一個(gè)數(shù)據(jù)庫(kù)的寫操作無(wú)法并發(fā)執(zhí)行。 所以,在數(shù)據(jù)庫(kù)設(shè)計(jì)的時(shí)候,如果表太多,盡量將沒有關(guān)聯(lián)的表拆到多個(gè)數(shù)據(jù)庫(kù)文件中。
8、Bitmap的內(nèi)存占用問(wèn)題。 這是一個(gè)困擾2.X時(shí)代android程序員的問(wèn)題。
2.X時(shí)代Bitmap對(duì)象雖然存儲(chǔ)在堆內(nèi)存中,但是用了一個(gè)byte數(shù)組存儲(chǔ)其像素信息。通過(guò)計(jì)數(shù)器來(lái)記錄該像素信息被引用的個(gè)數(shù)。
有人認(rèn)為這個(gè)byte數(shù)組在native堆中,但事實(shí)上它也在堆中。 只有在使用者調(diào)用recycle()后,Bitmap對(duì)象才會(huì)釋放像素信息,才會(huì)在失去引用后,被垃圾回收機(jī)制銷毀。
再加上DVM的heap size有嚴(yán)格的閥值,所以在使用大量圖片資源的時(shí)候,及其容易發(fā)生OOM。 解決辦法一般都是,用一個(gè)哈希表存儲(chǔ)Bitmap對(duì)象的軟引用,作為內(nèi)存緩存,并在適當(dāng)時(shí)機(jī)掉用其recycle()。
3.0以上版本Bitmap對(duì)象可以通過(guò)垃圾回收機(jī)制完全銷毀,理論上不用再調(diào)用recycle()。
用java進(jìn)行移動(dòng)端后臺(tái)開發(fā)方法:
第一種:可以選擇用Java EE的編程結(jié)構(gòu)去編寫,需要把HTML的界面轉(zhuǎn)換成其他的數(shù)據(jù),例如json、xml,二者選擇其中一個(gè)即可。
第二種:通過(guò)tomact的網(wǎng)絡(luò)服務(wù)器使用httpurlconnection,客戶端與后臺(tái)建立通訊,直接用socket進(jìn)行連接。
第三種:全能型的編程人員可以用前端經(jīng)常使用的HTML5、css、JavaScript相結(jié)合進(jìn)行開發(fā)。
注意點(diǎn):
Java web后臺(tái)開發(fā)跟手機(jī)app后臺(tái)開發(fā)原理相同,主要不同點(diǎn)在于app的后臺(tái)開發(fā)和web的傳輸數(shù)據(jù)格式有差異。
安裝后需要配置好環(huán)境變量~安裝MyEclipse的話,自帶的有JDK。
這里我說(shuō)說(shuō)怎么自己配置環(huán)境吧,步驟如下(舉例你把JDK安裝在D:/jdk1.6里面):右擊我的電腦,選擇“屬性”;選擇“高級(jí)”選項(xiàng)卡,點(diǎn)擊“環(huán)境變量”;在系統(tǒng)變量里面添加“JAVA_HOME”這個(gè)變量,變量值為JDK安裝路徑,此路徑下包括lib,bin,jre等文件夾,如“D:/jdk1.6”;添加Path這個(gè)變量,使得系統(tǒng)可以在任何路徑下識(shí)別java命令,變量值設(shè)為:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin添加CLASSPATH這個(gè)變量,這個(gè)變量為java加載類(classorlib)路徑,只有類在classpath中,java命令才能識(shí)別,變量值設(shè)為:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar(注意前面要加“.”,表示當(dāng)前路徑)。
1. 為Activity聲明系統(tǒng)配置變更事件系統(tǒng)配置變更事件是指轉(zhuǎn)屏,區(qū)域語(yǔ)言發(fā)生變化,屏幕尺寸發(fā)生變化等等,如果Activity沒有聲明處理這些事件,發(fā)生事件時(shí),系統(tǒng)會(huì)把Activity殺掉然后重啟,并嘗試恢復(fù)狀態(tài),Activity有機(jī)會(huì)通過(guò)onSaveInstanceState()保存一些基本數(shù)據(jù)到Bundle中,然后此Bundle會(huì)在Activity的onCreate()中傳遞過(guò)去。
雖然這貌似正常,但是這會(huì)引發(fā)問(wèn)題,因?yàn)楹芏嗥渌臇|西比如Dialog等是要依賴于具體Activity實(shí)例的。所以這種系統(tǒng)默認(rèn)行為通常都不是我們想要的。
為了避免這些系統(tǒng)默認(rèn)行為,就需要為Activity聲明這些配置,如下二個(gè)是每個(gè)Activity必須聲明的:幾乎所有的Activity都要聲明如上,為什么Android不把它們變成Default的呢?2. 盡量使用Android的API這好像是廢話,在Android上面開發(fā)不用Android API用什么?因?yàn)锳ndroid幾乎支持Java SE所有的API,所以有很多地方Android API與Java SE的API會(huì)有重復(fù)的地方,比如說(shuō)對(duì)于文件的操作最好使用Android里面Context封裝的API,而不要直接使用File對(duì)象:Context.openFileOutput(String); // no File file = new File(String)原因就是API里面會(huì)考慮到Android平臺(tái)本身的特性;再如,少用Thread,而多使用AsyncTask等。3. 要考慮到Activity和進(jìn)程被殺掉的情況如了通常情況退出Activity外,還有Activity因其他原因被殺的情況,比如系統(tǒng)內(nèi)存過(guò)低,系統(tǒng)配置變更,有異常等等,要考慮和測(cè)試這種情況,特別是Activity處理重要的數(shù)據(jù)時(shí),做好的數(shù)據(jù)的保存。
4. 小心多語(yǔ)言有些語(yǔ)言真的很啰嗦,中文或英文很簡(jiǎn)短就能表達(dá)的事情到了其他語(yǔ)言就變的死長(zhǎng)死長(zhǎng)的,所以如果是wrap_content就可能把其他控制擠出可視范圍; 如果是指定長(zhǎng)度就可能顯示不全。也要注意特殊語(yǔ)言比如那些從右向左讀的語(yǔ)言。
5. 不要用四大組件去實(shí)現(xiàn)接口一是組件的對(duì)象都比較大,實(shí)現(xiàn)接口比較浪費(fèi),而且讓代碼更不易讀和理解; 另外更重要的是導(dǎo)致多方引用,可能會(huì)引發(fā)內(nèi)存泄露。6. 用getApplication()來(lái)取Context當(dāng)參數(shù)對(duì)于需要使用Context對(duì)象作為參數(shù)的函數(shù),要使用getApplication()獲取Context對(duì)象當(dāng)參數(shù),而不要使用this,除非你需要特定的組件實(shí)例!getApplication()返回的Context是屬于Application的,它會(huì)在整個(gè)應(yīng)用的生命周期內(nèi)存在,遠(yuǎn)大于某個(gè)組件的生命周期,所以即使某個(gè)引用長(zhǎng)期持有Context對(duì)象也不會(huì)引發(fā)內(nèi)存泄露。
7. 主線程只做UI控制和Frameworks回調(diào)相關(guān)的事。附屬線程只做費(fèi)時(shí)的后臺(tái)操作。
交互只通過(guò)Handler。這樣就可以避免大量的線程問(wèn)題。
8. Frameworks的回調(diào)不要做太多事情僅做必要的初始化,其他不是很重要的事情可以放到其他線程中去做,或者用Handler Schedule到稍后再做。9. 要考慮多分辨率至少為hdpi, mdpi, ldpi準(zhǔn)備圖片和布局。
元素的單位也盡可能的使用dip而不要用px。10. 利用Android手機(jī)的硬鍵幾乎所有的Android手機(jī)都有BACK和MENU,它們的作用是返回和彈出菜單,所以就不要再在UI中設(shè)計(jì)返回按扭和菜單按扭。
很多優(yōu)秀的應(yīng)用如隨手記和微信都有返回鍵,他們之所以有是因?yàn)樗麄兌际菑膇OS上移植過(guò)來(lái)的,為了保存體驗(yàn)的一致,所以也有了返回和菜單。但這不夠Android化,一個(gè)純正的Android是沒有必須重復(fù)硬鍵的功能的。
首先否認(rèn)你上述的這幾點(diǎn):
1.打字速度:
每分鐘寫多少字母。 不代表開發(fā)效率呢。 開發(fā)工作是需要結(jié)合需求的、不是一通亂寫、寫代碼不像打字員、基礎(chǔ)包都是有聯(lián)想功能的.. 比如String 只需要st。 后面的就給你聯(lián)想出來(lái)了,等。
2、不會(huì)所謂的數(shù)據(jù)結(jié)構(gòu)和算法能立足嗎?
既然是JAVA小白、基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)還是要清楚的、比如(string,int,object。)深層次無(wú)需知道了、這種級(jí)別也接觸不到。算法。 對(duì)邏輯實(shí)現(xiàn)還是很有幫助的。常用簡(jiǎn)單的比如排序算法。 不過(guò)簡(jiǎn)單點(diǎn)的,數(shù)組都提供了排序的方法。其它看實(shí)際情況分析了。
總結(jié)下:新入職的java小白需要注意的點(diǎn)(開發(fā)層面的)
1、代碼整潔
2、注釋清晰
3、按照java開發(fā)規(guī)范進(jìn)行開發(fā)(比如命名規(guī)范。 如果公司有明確規(guī)定就安裝公司規(guī)定執(zhí)行,如果沒有就按照行業(yè)規(guī)范)
4、理解OOP面向?qū)ο缶幊谈拍?、圍繞OOP思想開發(fā)。(其實(shí)框架都給你搭建好了、只是補(bǔ)邏輯代碼也不需要注意太多)
聲明:本網(wǎng)站尊重并保護(hù)知識(shí)產(chǎn)權(quán),根據(jù)《信息網(wǎng)絡(luò)傳播權(quán)保護(hù)條例》,如果我們轉(zhuǎn)載的作品侵犯了您的權(quán)利,請(qǐng)?jiān)谝粋€(gè)月內(nèi)通知我們,我們會(huì)及時(shí)刪除。
蜀ICP備2020033479號(hào)-4 Copyright ? 2016 學(xué)習(xí)鳥. 頁(yè)面生成時(shí)間:4.107秒