




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Java開發(fā)手(一)命名規(guī)【強(qiáng)制】代碼中 反例:_name/ name/$Object/name_/name$/Object$【強(qiáng)制】代碼中 名嚴(yán)禁使用拼音與英文混合的方式,更不允許直接使用中文的方式。拼以易。純方式也要免用。反例:DaZhePromotion[打折]/ fenByName()[評(píng)分]/int某變量=正例:alibaba /youku/hangzhou等國(guó)際通用的名稱,可視同英文的相關(guān)命名)DO/BO/DTO/VO等。正例:MarcoPoloUserDOXmlServiceTcpUdpDeal反例:macroPoloUserDoXMLServiceTCPUDPDeal正例:localValuegetHttpMessage()正例:MAX_STOCK_COUNT反例: 命名以它要測(cè)試的類的名稱開始,以Test結(jié)尾?!緩?qiáng)制】中括號(hào)是數(shù)組類型的一部分,數(shù)組定義如下:String反例:使用Stringargs[]的方式來定義【強(qiáng)制】POJO類中布爾類型的變量,都不要加is,否則部分框架解析會(huì)引起序列化錯(cuò)誤。spring的框架結(jié)構(gòu)) 正例:publicclassOrderFactory;publicclassLoginProxy;publicclassResourceObserver;【推薦】接口類中的方法和屬性不要加任何修飾符號(hào)(public也不要加),保持代碼的簡(jiǎn)潔性,并加上有效的Javadoc注釋。盡量不要在接口里定義變量,如果一定要定義變量,肯定是正例:接口方法簽名:void接口基礎(chǔ)常量表示:StringCOMPANY反例:接口方法定義 void接 【強(qiáng)制】對(duì)于Service和DAO類,基于SOA的理念, 的實(shí)現(xiàn)類用Impl的后綴與接口區(qū)別。 Translator實(shí)現(xiàn)Translatable?!緟⒖肌棵杜e類名建議帶上Enum后綴,枚舉成員名稱需要全大寫,單詞間用下劃線隔開。正例:枚舉名字:DealStatusEnum,成員名稱:SUCCESSUNKOWN_REASONService/DAO的方法用save(推薦)或insert做前綴。6)修改的方法用update做前綴。POJO是DO/DTO/BO/VO的統(tǒng)稱 命名成xxxPOJO(二)常量定 反例:Stringkey="Id# cache.put(key, ,造成誤說明:Longa2l21Long 相關(guān)的常量放在類:CacheConsts下;系統(tǒng)配置相關(guān)的常量放在類:ConfigConsts下。 跨應(yīng)用共享常量:放置在二方庫(kù)中,通常是client.jar中的 下 A中:publicstaticfinalStringYES類B中:publicstaticfinalStringYES="y"; 類內(nèi)共享常量:直接在類privatestaticfinal定義使用Enum類,下面正例中的數(shù)字就是延伸信息,表示星期幾。SATURDAY(6),SUNDAY(7);}(三)格式規(guī);格。詳見第5條下方正例提【強(qiáng)制】 等保留字與左右括號(hào)之間都必須加空格說明:運(yùn)算符包括賦值運(yùn)算符=、邏輯運(yùn)算符&&、加減乘除符號(hào)、三目運(yùn)行符等。【強(qiáng)制】縮進(jìn)采用4個(gè)空格 使用tab字符Usetabcharactereclipseinsertspacesfortabs。(1-5點(diǎn)Stringsay= intflag=if(flag=={}if(flag=={}else}}StringBuffersb=new//超過120個(gè)字符的情況下,換行縮進(jìn)4個(gè)空格,并且方法StringBuffersb=new//超過120個(gè)字符的情況下,不要在括號(hào)前換//參數(shù)很多的方法調(diào)用可能超過120個(gè)字符,不要在逗號(hào)前換,【強(qiáng)制】IDEtextfileencodingUTF-8IDEUnix格式,不要使用windows格式。inta=3;longb=4L;floatc=StringBuffersb=new(四OOP本,直接用類名來即可。反例:getObject()與get0bject()的問題。一個(gè)是字母的O,一個(gè)是數(shù)字的0,加@Override【強(qiáng)制】相同參數(shù)類型,相同業(yè)務(wù)含義,才可以使用Java的可變參數(shù),避免使用Object。說明:可變參數(shù)必須放置在參數(shù)列表的最后。(提倡盡量不用可變參數(shù)編程)正例:publicUsergetUsers(StringtypeInteger【強(qiáng)制】對(duì)外的接口簽名,原則上不允許修改方法簽名,避免對(duì)接口調(diào)用方產(chǎn)生影響。接口過時(shí)必須加@Deprecated注解,并清晰地說明采用的新接口或者新服務(wù)是什么。該使參數(shù)decode(StringsourceStringencode)。接口提供方既然明確是過時(shí)接口,正例:反例:【強(qiáng)制】所有的相同類型的包裝類對(duì)象之間值的比較,全部使用equals方法比較。說Integervar=?在-128127之間的賦值,Integer對(duì)象是在IntegerCache.cache產(chǎn)生,會(huì)復(fù)用已有對(duì)象,這個(gè)區(qū)間內(nèi)的Integer值可以直接使用==進(jìn)行使用equals方法進(jìn)行判斷。nullNPE風(fēng)險(xiǎn)。數(shù)據(jù)類型的null值,能夠表示額外的信息,如:調(diào)用失敗,異常退出。【強(qiáng)制】定義DO/DTO/VO等POJO類時(shí),不要設(shè)定任何屬性默認(rèn)值反例:POJO類的gmtCreate默認(rèn)值為newDate();但是這個(gè)屬性在數(shù)據(jù)提取時(shí)并沒有置入具果完全不兼容升級(jí),避免反序列化,那么請(qǐng)修改serialVersionUID值。init【強(qiáng)制】POJO類必須寫toString方法。使用IDE的中工具:source>generate時(shí),如果繼承了另一個(gè)POJO類,注 面加一下super.toString 內(nèi)容的檢查,否則會(huì)有拋IndexOutOfBoundsException的風(fēng)險(xiǎn)。Stringstr=String[]ary=//預(yù)期大于3,結(jié)果是3黑盒實(shí)現(xiàn);因?yàn)榉椒ㄐ畔r(jià)值較低,所有ServiceDAOgetter/setter方法放在類體最【推薦】setter方法中,參數(shù)名稱與類成員變量名稱一致,this.成員名=參數(shù)名getter/setter方法中,盡量不要增加業(yè)務(wù)邏輯,增加排查問題的難度。publicIntegergetData(){if(true){returndata+}elsereturndata-}}Stringstr="start";for(inti=0;i<100;i++){str=str+ } 5)static成員變量如果僅在本類使用,必須是private。6)若是static成員變量,必須考慮是否為final。 如果是一個(gè)private的方法,想刪除就刪除,可是一個(gè)public的Service方法,或者一個(gè)public的成員變量,刪除一下,不得手心冒點(diǎn)汗嗎?變量像自己的小孩,盡量在自己的視線 (五)集合處正例:String重寫了hashCodeequalsString對(duì)象作為key來使用。異常:java.util.RandomAccessSubListcannotbecasttojava.util.ArrayList;說明:subList返回的是ArrayList的 類SubList,并不是ArrayList,而是ArrayList的一個(gè)視圖,對(duì)于SubList子列表的所有操作最終會(huì)反映到原列表上。加、刪除均產(chǎn)生ConcurrentModificationException異常。一樣的數(shù)組,大小就是list.size()。類型數(shù)組將出現(xiàn)ClassCastException錯(cuò)誤。List<String>list=newArrayList<String>(2);String[]array=newString[list.size()];array=list.toArray(array);toArray帶參方法,入?yún)⒎峙涞臄?shù)組空間不夠大時(shí),toArray方法將重新分配null,其它數(shù)組元素保持原值,因此最好將方法入?yún)?shù)組大小定義與集合元素法,它的add/remove/clear方拋出UnsupportedOperationException異常。String[]str=newString[]{"a","b"};Listlist=Arrays.asList(str);第一種情況 運(yùn)行時(shí)異常";【強(qiáng)制】泛型通配符extendsT>add方說明:蘋果裝箱后返回一個(gè)extendsFruits>對(duì)象,此對(duì)象就不能往里加任何水果,包括【強(qiáng)制】不要在foreach循環(huán)里進(jìn)行元remove/add操作。remove元素請(qǐng)使用List<String>a=newArrayList<String>();for(Stringtemp:}}Iterator<String>it=a.iterator();Stringtempit.next();}}Collections.sort會(huì)報(bào)IllegalArgumentException異常。傳遞性:x>y,y>z,則x>z對(duì)稱性:x=y,x,z比較結(jié)y,znewComparator<Student>(){returno1.getId()>o2.getId()?1:-}}說明:keySet其實(shí)是遍歷了2次,一次是轉(zhuǎn)為Iterator對(duì)象,另一次是從hashMap中取出key所對(duì)應(yīng)的value。而entrySet只是遍歷了一次就把key和value都放到了entry中,效率更高。如果是JDK8,使用Map.foreach方法。Set集合對(duì)象;entrySet()K-V11MapSet集合對(duì)象;entrySet()K-V11Map類集合K/V能不null值的情況,如下表 (六)并發(fā)處說不允許為不允許為線程安不允許為不允許為分段鎖技不允許為允許為線程不安允許為允許為線程不安{publicTimerTaskThread(){super.setName("TimerTaskThread");...}【強(qiáng)制】線程池不允許使用Executors去創(chuàng)建,而是通過ThreadPoolExecutor的方式,這樣允許的請(qǐng)求隊(duì)列長(zhǎng)度為Integer.MAX_VALUE,可能會(huì)堆積大量的請(qǐng)求,從而導(dǎo)致OOM允許的創(chuàng)建線程數(shù)量為Integer.MAX_VALUE,可能會(huì)創(chuàng)建大量的線程,從而導(dǎo)致OOMprotectedDateFormatinitialValue()returnnewSimpleDateFormat("yyyy-MM-}說明:如果JDK8的應(yīng)用,可以使InstantDaocalDateTimeCalendar,DateTimeFormatter代替Simpledateformattersimplebeautifulstrongimmutablethread-safe。也必須是A、B、C,否則可能出現(xiàn)死鎖。數(shù)據(jù)庫(kù)層使用樂觀鎖,使用version作為更新依據(jù)。數(shù)不得小于3次?!緩?qiáng)制】多線程并行處理定時(shí)任務(wù)時(shí),TimerTimeTask時(shí),只要其中之一沒有捕獲【推薦】使用CountDownLatch進(jìn)行異步轉(zhuǎn)同步操作,每個(gè)線程退出前必須調(diào)用countDown方法,線程執(zhí)行代碼注意catch異常,確保countDown方法可以執(zhí)行,避免主線程無法執(zhí)行至countDown方法,直到超時(shí)才返回結(jié)果。說明:注意,子線程拋出異常堆棧,不能在主線程try-catchseed【推薦】通過雙重檢查鎖(double-checkedlocking)(在并發(fā)場(chǎng)景)實(shí)現(xiàn)延遲初始化的優(yōu)化問題隱患(可參考The"Double-CheckedLockingisBroken"Declaration),推薦問題解決方案中較為簡(jiǎn)單一種(適用于JDK5及以上版本),將目標(biāo)屬性 為volatile型。classFooprivateHelperhelper=null;publicHelpergetHelper(){if(helper==null){if(helper==null)helper=new}return}//otherfunctionsand}但是如果多寫,同樣無法解決線程安全問題。如果是count++操作,使用如下類實(shí)現(xiàn):AtomicIntegercountnewAtomicIntegercount.addAndGet(1JDK8,推薦使用LongAdder對(duì)象,比AtomicLong性能更好(減少樂觀鎖的重試次數(shù))?!緟⒖肌縏hreadLocal無法解決共享對(duì)象的更新問題,ThreadLocalstatic(七)控制語【強(qiáng)制】在一switch塊內(nèi),每個(gè)case要么通過break/return等來終止,要么注釋說明程下面的形式:if(condition)statements;return}說明:如果非得使用if()...elseif()...else...方式表達(dá)邏輯,【強(qiáng)制】 超過3層,booleanexisted=(file.open(fileName,"w")!=null)&&(...)||(...);if(existed){}if((file.open(fileName,"w")!=null)&&(...)||(...))}對(duì)外提供的開放接口,不管是RPC/API/HTTP接口誤不太可能到底層才會(huì)問題。一般DAOService層都在同一個(gè)應(yīng)用中,部署在同一臺(tái)服務(wù)器中,所以DAO的參數(shù)校驗(yàn),可以省略。被private只會(huì)被自己代碼所調(diào)用的方法,如果能夠確定調(diào)用方法的代碼傳入?yún)?八)注釋規(guī)【強(qiáng)制】類、類屬性、類方法的注釋必須使用Javadoc規(guī)范,使用/**內(nèi)容*/格式,不得//xxx方式說明:在IDE編輯窗口中,Javadoc方式會(huì)提示相關(guān)注釋,生成Javadoc可以正確輸出相應(yīng)注釋;在IDE中,工程調(diào)用方法時(shí),不進(jìn)入方法即可懸浮提示方法、參數(shù)、返回值的意義,提高閱異常說明外,還必須該方法做什么事情,實(shí)現(xiàn)什么功能。 使用/**/注釋,注意與代碼對(duì)齊。反例 連接超時(shí)”解釋成“傳輸控制協(xié)議連接超時(shí)”,理解反而費(fèi)腦筋說說的,使其能夠快速自己的工作?!緟⒖肌亢妹⒋a結(jié)構(gòu)是自解釋的,注釋力求精簡(jiǎn)準(zhǔn)確、表達(dá)到位。避免出現(xiàn)注釋的一個(gè):過多過濫的注釋,代碼的邏輯一旦修改,修改注釋是相當(dāng)大的負(fù)擔(dān)。//pu ephantintofridge ephant,fridge);1)待辦事宜(TODO):(標(biāo)記人,標(biāo)記時(shí)間,[預(yù)計(jì)處理時(shí)間表示需要實(shí)現(xiàn)但目前還未實(shí)現(xiàn)的功能這實(shí)際上是一個(gè)Javadoc的 目前的Javadoc還沒有實(shí)現(xiàn)但已經(jīng)被廣泛使用只能應(yīng)用于類接口和方法(因?yàn)樗且粋€(gè)Javadoc (九說明:不要在方法體內(nèi)定義:Patternpattern= 【強(qiáng)制】velocity調(diào)用POJO類的屬性時(shí),建議直接使用屬性名取值即可,模板引擎會(huì)自動(dòng)按規(guī)范調(diào)用POJO的getXxx(),如果是boolean基本數(shù)據(jù)類型變量(boolean命名不需要加is前綴),會(huì)自動(dòng)調(diào)用isXxx()方法。【強(qiáng)制】輸送給頁面的變量必須加$!{var}——中間的感嘆號(hào)說明:如果var=null或者不存在,那么${var}會(huì)直接顯示在頁面上取到零值,注意除零異常),如果想獲取整數(shù)類型的隨機(jī)數(shù),不要將x放大10的若干倍然后取整,直接使用RandomnextIntnextLong方法。System.currentTimeMillis而不是newDate().getTime();說明:如果想獲取更加精確的納秒級(jí)時(shí)間值,用System.nanoTime()。在JDK8中,針對(duì)統(tǒng)計(jì)時(shí)間等場(chǎng)景,推薦使用Instant類?!就扑]】盡量不要在vm中加入變量、邏輯運(yùn)算符,更不要在vm模板中加入任何復(fù)雜的邏 (一)異常處IndexOutOfBoundsExceptionNullPointerException,這類異常由程序員預(yù)檢查正例:if(objnull)反例:tryobj.methodcatch(NullPointerException【強(qiáng)制】有try塊放到了事務(wù)代碼中,catch異常后,如果需要回滾事務(wù),一定要注意手動(dòng)回滾說明:如果JDK7,可以使用try-with-resources方式?!緩?qiáng)制】不能finally塊中使用return,finally塊中的return返回后方法結(jié)束執(zhí)行,不會(huì)再執(zhí)行try塊中的return語句。說明什么情況下會(huì)返回null值。調(diào)用方需要進(jìn)行nullNPE問題。反例:publicintf()returnInteger對(duì)象nullNPE級(jí)聯(lián)調(diào)用obj.getA().getB().getC();一連串調(diào)用,易產(chǎn)生NPE使用“錯(cuò)誤碼”;而應(yīng)用推薦異常拋出;跨應(yīng)用間RPC調(diào)用優(yōu)先考慮使用Result方式,封裝isSuccess、“錯(cuò)誤碼”、“錯(cuò)誤簡(jiǎn)息”?!就扑]】定義時(shí)區(qū)分uncheckedchecked異常,避免直接使用RuntimeException拋出,更不允許拋出Exception或者Throwable過的自定義異常,如:DAOException/ServiceException等。【參考】避免出現(xiàn)重復(fù)的代碼(Don’tRepeatYourself)DRY說明:隨意和粘貼代碼,必然會(huì)導(dǎo)致代碼的重復(fù),在以后需要修改時(shí),需要修改所有的副privatebooleancheckParam(DTO(二)日志規(guī)【強(qiáng)制】應(yīng)用中不可直接使用日志系統(tǒng)(Log4j、Logback)中的API,而應(yīng)依賴使用日志框架SLF4J中的API,使用門面模式的日志框架,有利于和各個(gè)類的日志處理方式統(tǒng)一。importorg.slf4j.Logger;【強(qiáng)制】日志文件推薦至少保存15天,因?yàn)橛行┊惓>邆湟浴爸堋? 說明:logger.debug("Processingtradewithididsymbolsymbol);如果日志級(jí)別是warn會(huì)打但是會(huì)執(zhí)行字符串拼symbol是對(duì)象,會(huì)執(zhí)行toString()方法,浪費(fèi)了系統(tǒng)資源,執(zhí)行了上述操作,最終日志卻沒有打印。正例:(條件if(logger.isDebugEnabled())logger.debug("Processingtradewithid:"+id+"symbol:"+}正例:(占位符【強(qiáng)制】避免重復(fù)打印日志,浪費(fèi)磁盤空間,務(wù)必在log4j.xml中設(shè)置additivity=false。正例:<loggername="com..dubbo.config"additivity="false">正例:logger.error(toString_"e.getMessagewarn日志級(jí)別來記錄用戶輸入?yún)?shù)錯(cuò)誤的情況,避免用戶時(shí),無所適要,請(qǐng)不要在此場(chǎng)景打出error級(jí)別?!就扑]】謹(jǐn)慎地記錄日志。生產(chǎn)環(huán)境輸出debug日志;info日志;如果使(一)建表規(guī)【強(qiáng)is_xxx的方式命名,數(shù)據(jù)類型是unsigned(1表示是,0表示否)odps建表。說明:任何字段如果為非負(fù)數(shù),必須是unsigned。 【強(qiáng)制】禁用保留字,如desc、range、match、delayed等,請(qǐng)參考 保留字說明:uk_即uniquekey;idx_index的簡(jiǎn)稱。 說明:float和double在 的數(shù)據(jù)范圍超過decimal的范圍,建議將數(shù)據(jù)拆成整數(shù)和小數(shù)分開 【強(qiáng)制】varchar是可變長(zhǎng)字符串,不預(yù)先分配空間,長(zhǎng)度不要超過5000,如果長(zhǎng)text,獨(dú)立出來一張表,用主鍵來對(duì)應(yīng),避免影響其它字段索【強(qiáng)制】表必備三字段:idgmt_creategmt_modifiedgmt_modified的類型均為date_time正例:tiger_task/tiger_reader/mpp_config【推薦】單表行數(shù)超過500萬行或者單表容量超過2GB【參考】合適的字符長(zhǎng)度,不但節(jié)約數(shù)據(jù)庫(kù)表空間、節(jié)約索引,更重要的是提升檢正例:人的用unsignedtinyint(0-255,人的不會(huì)超過255歲);海龜smallint,但如果是的,就必須是int;如果是所有恒星的都加起來,那么就必須使用bigint。(二)索引規(guī)insert速度,這個(gè)速度損耗可以忽略,但提高查找速度是明【強(qiáng)制】超過三個(gè)表 【強(qiáng)制】在varchar字段上建立索引時(shí),必須指定索引長(zhǎng)度,沒必要對(duì)全字段建立索引,根據(jù)實(shí)說明:索引的長(zhǎng)度與區(qū)分度是一對(duì)20的索引,區(qū)分orderby的場(chǎng)景,請(qǐng)注意利用索引的有序性。orderby最后的字段是組合索引的一部分,并且放在索引組合順序的最后,避免出現(xiàn)file_sort的情況,影響查詢性能。正例:wherea=?andb=?orderbyc;索引:a_b_c反例:索引中有范圍查找,那么索引有序性無法利用,如:WHEREa>10ORDERBYba_b無法排1111章對(duì)應(yīng)的那一頁嗎?瀏覽一下就好,這個(gè)就是起到覆蓋索引的作用。效果,用explain的結(jié)果,extra列會(huì)出現(xiàn):usingindex。說明:MySQL并不是offset行,而是取offset+N行,然后返回放棄前offset行,返回N行,那當(dāng)offset特別大的時(shí)候,效率就非常的低下,要么控制返回的總頁數(shù),要么對(duì)超過特定閾值的頁數(shù)進(jìn)行SQL改寫。SELECTa.*FROM1a,selectidfrom1whereLIMIT100000,20bwhere ref指的是使用普通的索引(normalindex)range別比較range還低,與全表掃描是小巫見大巫。andb=?那么即使a的區(qū)分度更高,也必須把b放在索引的最前列。 誤解誤認(rèn)為唯一索引一律需要在應(yīng)用層通過“先查后插”方式解(三SQL的標(biāo)準(zhǔn)統(tǒng)計(jì)行數(shù)的語法,跟數(shù)據(jù)庫(kù)無關(guān),跟NULL和非NULL無關(guān)。說明:count(*)會(huì)統(tǒng)計(jì)值為NULL的行,而count(列名)不會(huì)統(tǒng)計(jì)此列為NULL值的col1,col2)如果其中一列全為NULL,那么即使另一列有不同的值,也返回為0。NULL,因此使用sum()時(shí)需注意NPE問題。FROMtable;【強(qiáng)制】在代碼中寫分頁查詢邏輯時(shí),若count為0應(yīng)直接返說明:(概念解釋)學(xué)生表中的student_id是主鍵,那么成績(jī)表中的student_id則為外鍵。如果更新學(xué)生表中的student_id,同時(shí)觸發(fā)成績(jī)表中的student_id更新,則為級(jí)聯(lián)更新。外庫(kù)更新風(fēng)暴的風(fēng)險(xiǎn);外鍵影響數(shù)據(jù)庫(kù)的速度?!緩?qiáng)制】使用過程,制在1000個(gè)之內(nèi)。SELECTLENGTH("輕松工作")SELECTCHARACTER_LENGTH("輕松工作")如果要使用表情,那么使用utfmb4來進(jìn)行,注意它與utf-8編碼的區(qū)別說明:TRUNCATETABLE在功能上與不帶WHERE子句的DELETE語句相同。(四ORM說明:1)增加查詢分析器解析成本。2)增減字段容易與resultMap配置不一致。 說明:參見定義POJO類以及數(shù)據(jù)庫(kù)字段定義規(guī)定,在sql.xml增 ,是必須的 取start,size的子集合,線上因?yàn)檫@個(gè)原因曾經(jīng)出現(xiàn)過OOM。sqlmap.xml中引入#start#,#size#Map<String,Object>mapnewHashMap<StringObject>();map.put("start",start);map.put("size",【強(qiáng)制】更新數(shù)據(jù)表記錄時(shí),必須同時(shí)更新記錄對(duì)應(yīng) gmt_modified字段值為當(dāng)前時(shí)間updatetablesetc1=value1,c2=value2,c3=value3SQL時(shí),盡量不要更新無改動(dòng)的字段,一是易出錯(cuò);二是效率低;三是binlog增加?!緟⒖肌?lt;isEqual>中的compareValue是與屬性值對(duì)比的常量,一般是數(shù)字,表示相等時(shí)帶(一)應(yīng)用分開放接口層:可直接封裝Service接 Web層:主要是 對(duì) 平臺(tái)封裝的層,預(yù)處理返回結(jié)果及轉(zhuǎn)化異常信息 外部接口或 (分層異常處理規(guī)DAO層,產(chǎn)生的異常類型有很多,無法用細(xì)粒度異常進(jìn)行catch,使用catch(Exceptione)方式,并thrownewDAOException(e),不需要打印日志,信息,相當(dāng)于保護(hù)案發(fā)現(xiàn)場(chǎng)。如果Manager層與Service同機(jī)部署,日志方式與DAO層處理DTO(DataTransferObject):
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 中國(guó)屠宰后鮮肉項(xiàng)目創(chuàng)業(yè)計(jì)劃書
- 中國(guó)急救輸液泵項(xiàng)目創(chuàng)業(yè)計(jì)劃書
- 中國(guó)傘花木屬項(xiàng)目創(chuàng)業(yè)計(jì)劃書
- 中國(guó)克氏原螯蝦項(xiàng)目創(chuàng)業(yè)計(jì)劃書
- 中國(guó)觀光農(nóng)業(yè)園項(xiàng)目創(chuàng)業(yè)計(jì)劃書
- 2025餐廳轉(zhuǎn)讓合同標(biāo)準(zhǔn)版范本
- 2025個(gè)人貸款合同范本
- 中國(guó)尿石癥管理裝置項(xiàng)目創(chuàng)業(yè)計(jì)劃書
- 中國(guó)電阻網(wǎng)絡(luò)項(xiàng)目創(chuàng)業(yè)計(jì)劃書
- 中國(guó)多媒體移動(dòng)通信系統(tǒng)項(xiàng)目創(chuàng)業(yè)計(jì)劃書
- 初三英文補(bǔ)考試卷及答案
- 預(yù)防糧庫(kù)糧堆坍塌埋人事故
- 醫(yī)院生物安全管理制度
- 行政前臺(tái)面試試題及答案
- 輸血制度和流程
- 2024年江蘇連云港中考滿分作文《天吶原來這么有意思》2
- 法學(xué)與社會(huì)發(fā)展畢業(yè)論文范文
- 會(huì)展服務(wù)合同范文6篇
- 文旅知識(shí)培訓(xùn)課件
- 2025年行政執(zhí)法人員行政執(zhí)法資格證考試必考題庫(kù)及答案(共340題)
- 南大版一年級(jí)下冊(cè)心理健康第15課《走進(jìn)大自然》教案
評(píng)論
0/150
提交評(píng)論