<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    qileilove

    blog已經(jīng)轉(zhuǎn)移至github,大家請?jiān)L問 http://qaseven.github.io/

    IOS平臺開發(fā)測試人員面試題系列

     隨著iOS平臺開發(fā)的職位的增加,筆試、面試也越來越有“套路”,這里我總結(jié)了一些面試題,多數(shù)是Objective-C的基礎(chǔ)知識,適合于面試新人,答案是我自己答的,不準(zhǔn)確的地方,歡迎指出。
      1. Object-c的類可以多重繼承么?可以實(shí)現(xiàn)多個(gè)接口么?Category是什么?重寫一個(gè)類的方式用繼承好還是分類好?為什么?
      Object-c的類不可以多重繼承;可以實(shí)現(xiàn)多個(gè)接口,通過實(shí)現(xiàn)多個(gè)接口可以完成C++的多重繼承;Category是類別,一般情況用分類好,用Category去重寫類的方法,僅對本Category有效,不會影響到其他類與原有類的關(guān)系。
      2.#import 跟#include 又什么區(qū)別,@class呢, #import<> 跟 #import”"又什么區(qū)別?
      #import 是Objective-C導(dǎo)入頭文件的關(guān)鍵字,#include是C/C++導(dǎo)入頭文件的關(guān)鍵字,使用#import頭文件會自動只導(dǎo)入一次,不會重復(fù)導(dǎo) 入,相當(dāng)于#include和#pragma once;@class告訴編譯器某個(gè)類的聲明,當(dāng)執(zhí)行時(shí),才去查看類的實(shí)現(xiàn)文件,可以解決頭文件的相互包含;#import<>用來包含系 統(tǒng)的頭文件,#import””用來包含用戶頭文件。
      3. 屬性readwrite,readonly,assign,retain,copy,nonatomic 各是什么作用,在那種情況下用?
      readwrite 是可讀可寫特性;需要生成getter方法和setter方法時(shí)
      readonly 是只讀特性  只會生成getter方法 不會生成setter方法 ;不希望屬性在類外改變
      assign 是賦值特性,setter方法將傳入?yún)?shù)賦值給實(shí)例變量;僅設(shè)置變量時(shí);
      retain 表示持有特性,setter方法將傳入?yún)?shù)先保留,再賦值,傳入?yún)?shù)的retaincount會+1;
      copy 表示賦值特性,setter方法將傳入對象復(fù)制一份;需要完全一份新的變量時(shí)。
      nonatomic 非原子操作,決定編譯器生成的setter getter是否是原子操作,atomic表示多線程安全,一般使用nonatomic
      4.寫一個(gè)setter方法用于完成@property (nonatomic,retain)NSString *name,寫一個(gè)setter方法用于完成@property(nonatomic,copy)NSString *name
    - (void) setName:(NSString*) str
    {
    [str retain];
    [name release];
    name = str;
    }
    - (void)setName:(NSString *)str
    {
    id t = [str copy];
    [name release];
    name = t;
    }
      5.對于語句NSString*obj = [[NSData alloc] init]; obj在編譯時(shí)和運(yùn)行時(shí)分別時(shí)什么類型的對象?
      編譯時(shí)是NSString的類型;運(yùn)行時(shí)是NSData類型的對象
      6.常見的object-c的數(shù)據(jù)類型有那些, 和C的基本數(shù)據(jù)類型有什么區(qū)別?如:NSInteger和int
      object-c的數(shù)據(jù)類型有NSString,NSNumber,NSArray,NSMutableArray,NSData等等,這些都是class,創(chuàng)建后便是對象,而C語言的基本數(shù)據(jù)類型int,只是一定字節(jié)的內(nèi)存空間,用于存放數(shù)值;NSInteger是基本數(shù)據(jù)類型,并不是NSNumber的子類,當(dāng)然也不是NSObject的子類。NSInteger是基本數(shù)據(jù)類型Int或者Long的別名(NSInteger的定義typedef long NSInteger),它的區(qū)別在于,NSInteger會根據(jù)系統(tǒng)是32位還是64位來決定是本身是int還是Long。
      7.id 聲明的對象有什么特性?
      Id 聲明的對象具有運(yùn)行時(shí)的特性,即可以指向任意類型的objcetive-c的對象;
      8.Objective-C如何對內(nèi)存管理的,說說你的看法和解決方法?
      Objective-C的內(nèi)存管理主要有三種方式ARC(自動內(nèi)存計(jì)數(shù))、手動內(nèi)存計(jì)數(shù)、內(nèi)存池。
     9.內(nèi)存管理的幾條原則時(shí)什么?按照默認(rèn)法則.那些關(guān)鍵字生成的對象
      需要手動釋放?在和property結(jié)合的時(shí)候怎樣有效的避免內(nèi)存泄露?
      誰申請,誰釋放
      遵循Cocoa Touch的使用原則;
      內(nèi)存管理主要要避免“過早釋放”和“內(nèi)存泄漏”,對于“過早釋放”需要注意@property設(shè)置特性時(shí),一定要用對特性關(guān)鍵字,對于“內(nèi)存泄漏”,一定要申請了要負(fù)責(zé)釋放,要細(xì)心。
      關(guān)鍵字alloc 或new 生成的對象需要手動釋放;
      設(shè)置正確的property屬性,對于retain需要在合適的地方釋放,
      10.如何對iOS設(shè)備進(jìn)行性能測試?
      Profile-> Instruments ->Time Profiler
      11.看下面的程序,第一個(gè)NSLog會輸出什么?這時(shí)str的retainCount是多少?第二個(gè)和第三個(gè)呢? 為什么?
    =======================================================
    NSMutableArray* ary = [[NSMutableArray array] retain];
    NSString *str = [NSString stringWithFormat:@"test"];
    [strretain];
    [aryaddObject:str];
    NSLog(@"%@%d",str,[str retainCount]);
    [strretain];
    [strrelease];
    [strrelease];
    NSLog(@"%@%d",str,[str retainCount]);
    [aryremoveAllObjects];
    NSLog(@"%@%d",str,[str retainCount]);
    =======================================================

    posted @ 2014-08-05 09:34 順其自然EVO 閱讀(241) | 評論 (0)編輯 收藏

    Web測試之我見

     從今年過完春節(jié)過來后,公司的產(chǎn)品步驟從C/S轉(zhuǎn)變?yōu)锽/S,之前B/S的測試經(jīng)驗(yàn)較少,而且產(chǎn)品調(diào)整比較快,一下子沒有反應(yīng)過來測試上應(yīng)該做的調(diào)整。
      根據(jù)項(xiàng)目的推進(jìn),對web測試上可測試點(diǎn)進(jìn)行匯總,老生常談的問題,但是還是想自己總結(jié)下:
      1.功能測試:毋庸置疑,這是測試的根本。
      2.瀏覽器兼容測試:可根據(jù)產(chǎn)品使用者的習(xí)慣以及目前市場上瀏覽器的排行榜進(jìn)行瀏覽器種類測試的選擇。
      3.網(wǎng)址測試:對此項(xiàng)測試印象很深刻,但是我發(fā)現(xiàn)好多人根據(jù)不在乎此測試,或者是根據(jù)覺得不應(yīng)該測試,如果有這種觀點(diǎn)的應(yīng)該及時(shí)改正,哈哈。網(wǎng)址也是咱們開發(fā)出來的嘛!
      4.UI界面友好性測試:俗話說第一印象很重要,如果沒有漂亮的界面,好多用戶是懶的看的,好的界面既要符合公司的發(fā)展,也要符合用戶的眼光,很是佩服UI設(shè)計(jì)人員。
      5.數(shù)據(jù)庫測試:聲明,這里說的不是對數(shù)據(jù)庫進(jìn)行的壓力測試,而是數(shù)據(jù)連接測試,如果數(shù)據(jù)存儲出問題了,那可不是小事兒。其實(shí)之前做c/s的時(shí)候沒有什么感覺,也是這次的項(xiàng)目給我很深刻的印象。
      6.連接測試:產(chǎn)品中含有死鏈、壞鏈等無效的鏈接地址,是要給頁面的響應(yīng)速度增加負(fù)擔(dān)的,這方面其實(shí)還是要注意下。xenu目前用的是這個(gè)小工具。
      7.單個(gè)頁面響應(yīng)速度:明確了單個(gè)的頁面響應(yīng)速度也同樣能知道那種元素對頁面的影響最大。目前使用工具為httpWatch。發(fā)現(xiàn)此工具的作用還是蠻多的,應(yīng)該好好研究下。
      8.自動化測試:穩(wěn)定的產(chǎn)品比較適用,對測試人員的技術(shù)要求也比較高,目前的工具也比較多開源的破解的嘿嘿。正在學(xué)習(xí)中;但是有一點(diǎn)很重要不是所有的功能都適用于自動化,所以設(shè)計(jì)上還是要思考清楚。
      9.性能測試:壓力測試、負(fù)載測試、效率測試等等
      以上是接觸B/S后的感受,再次記錄一下,時(shí)間長些后會有些補(bǔ)充,沒有什么邏輯,隨筆而已,其實(shí)什么也不是那么容易可以搞定的,安靜下來,多用用心,多用用腦,我相信我可以。

    posted @ 2014-08-05 09:31 順其自然EVO 閱讀(175) | 評論 (0)編輯 收藏

    不要為數(shù)據(jù)持久層編寫單元測試

    為增強(qiáng)自信心而寫代碼
      關(guān)于單元測試,其作用我認(rèn)為更多的是增強(qiáng)開發(fā)者的信心,以及作為代碼的執(zhí)行文檔(額外的效果)。也就是說,編寫單元測試首先是開發(fā)者的責(zé)任,其次單元測試的粒度由程序員的自信心決定。
      "老板為我的代碼付報(bào)酬,而不是測試,所以,我對此的價(jià)值觀是——測試越少越好,少到你對你的代碼質(zhì)量達(dá)到了某種自信(我覺得這種的自信標(biāo)準(zhǔn)應(yīng)該要高于業(yè)內(nèi)的標(biāo)準(zhǔn),當(dāng)然,這種自信也可能是種自大)。如果我的編碼生涯中不會犯這種典型的錯誤(如:在構(gòu)造函數(shù)中設(shè)了個(gè)錯誤的值),那我就不會測試它。我傾向于去對那些有意義的錯誤做測試,所以,我對一些比較復(fù)雜的條件邏輯會異常地小心。當(dāng)在一個(gè)團(tuán)隊(duì)中,我會非常小心的測試那些會讓團(tuán)隊(duì)容易出錯的代碼。"
      --XP和TDD的創(chuàng)造者Kent Beck如是說。
      由過去的經(jīng)驗(yàn),我認(rèn)同上述的觀點(diǎn),并且認(rèn)為不應(yīng)該將單元測試作為銀彈。甚至項(xiàng)目經(jīng)理應(yīng)該忘記有單元測試這回事,干脆把那當(dāng)做程序員的樂趣就好了,然后該有的測試流程和規(guī)范必須要求到。
      不要違反原則
      單元測試需遵守的關(guān)鍵原則是:
      1、單元測試應(yīng)該是可重復(fù)的
      2、單元測試應(yīng)該是獨(dú)立的
      3、單元測試是快速執(zhí)行的
      以下為一個(gè)壞的例子。
      部門的技術(shù)主管一直希望找到一種方法可以普遍提高開發(fā)人員的代碼水平,以及減少bug和改善設(shè)計(jì),這恰恰是單元測試所擅長的。所以我們配合持續(xù)集成的實(shí)踐,在后來的項(xiàng)目中嚴(yán)格要求單元測試。
      不得不說,在經(jīng)過一段時(shí)間的抵觸后,大家還是非常喜歡的。因?yàn)槲覀兊漠a(chǎn)品清單上有專門的單元測試時(shí)間,并且大家也開始嘗到甜頭--容易犯的小錯少了。
      但是在我們還來不及歡呼的時(shí)候,問題出現(xiàn)了,而且很棘手。
      我們的項(xiàng)目大都是關(guān)于數(shù)據(jù)存儲的,比如簡單的新增、復(fù)雜的查詢、顯示報(bào)表等等。而我們的單元測試其實(shí)就是冒煙測試,并且還是不合格的單元測試。原因是我們使用數(shù)據(jù)庫的數(shù)據(jù)作為輸入,眾所周知,這些數(shù)據(jù)很容易被修改,故我們的單元測試是不可能具有可重復(fù)性。另外,我們的單元測試也不是獨(dú)立的,因?yàn)槲覀兎浅R蕾嚁?shù)據(jù)存儲層。
      從以上的描述,你可能猜到,沒錯,我們的開發(fā)人員大多都很初級,經(jīng)常犯得錯誤就是關(guān)于sql的編寫,ibatis的使用語法之類的錯誤。也就是說他們最不自信的地方就是語法或者工具的使用。
      讓單元測試變成可重復(fù)的相對簡單,使用dbunit之類的工具可以輕松的達(dá)到,即使這個(gè)工具有時(shí)也會出錯,比如oracle的Large Objec類型就會報(bào)錯。但是對數(shù)據(jù)存儲層的依賴就不能避免了,因?yàn)檫@恰恰是我們要測試的。而相比時(shí)間而言,前兩個(gè)因素又顯得不那么重要了。
      在項(xiàng)目中,我們對每個(gè)dao層的方法都寫了單元測試,有的單元測試花費(fèi)的時(shí)間甚至比寫代碼的時(shí)間要多。結(jié)果是我們的代碼確實(shí)是可用的,但是時(shí)間卻比想象的多得多。比如由A來編寫接口,然后由另外一個(gè)人B來編寫頁面,然后由B調(diào)用A的接口。花費(fèi)的時(shí)間=編寫接口+編寫頁面+2*調(diào)用接口時(shí)間(這個(gè)名稱不怎么好,但是在海沒有發(fā)現(xiàn)合適的名稱時(shí),還是讓我們暫時(shí)使用它吧)。調(diào)用接口時(shí)間是指兩個(gè)人座到一起,A告訴B如何調(diào)用他的接口的時(shí)間,加上剛好出了問題,A為了方便直接在B的電腦上修改花費(fèi)的時(shí)間。這里的時(shí)間都是兩份的。
      而我們的項(xiàng)目執(zhí)行一次單元測試至少要10分鐘左右,而且還會報(bào)錯,因?yàn)椴豢芍貜?fù)性,有時(shí)它可以執(zhí)行成功,有時(shí)它并不能。現(xiàn)在我們要花費(fèi)的時(shí)間變成編寫接口+編寫頁面+2*調(diào)用接口的時(shí)間+n*10分鐘。
      之前說了,我們要求單元測試時(shí)為了保證接口是可用的,單元測試并不是唯一的方式。假設(shè)我們啟動項(xiàng)目(5分鐘),點(diǎn)擊頁面進(jìn)入頁面(每次0.5分鐘),然后出錯查看信息,解決問題(M分鐘)。相比之下,使用單元測試則是啟動10分鐘,出錯,設(shè)置打印信息,然后啟動(10分鐘),再設(shè)置打印信息。直至發(fā)飆。。。
      現(xiàn)在,你應(yīng)該知道我們的痛苦了。

    posted @ 2014-08-05 09:29 順其自然EVO 閱讀(225) | 評論 (0)編輯 收藏

    Web測試之我見

      從今年過完春節(jié)過來后,公司的產(chǎn)品步驟從C/S轉(zhuǎn)變?yōu)锽/S,之前B/S的測試經(jīng)驗(yàn)較少,而且產(chǎn)品調(diào)整比較快,一下子沒有反應(yīng)過來測試上應(yīng)該做的調(diào)整。
      根據(jù)項(xiàng)目的推進(jìn),對web測試上可測試點(diǎn)進(jìn)行匯總,老生常談的問題,但是還是想自己總結(jié)下:
      1.功能測試:毋庸置疑,這是測試的根本。
      2.瀏覽器兼容測試:可根據(jù)產(chǎn)品使用者的習(xí)慣以及目前市場上瀏覽器的排行榜進(jìn)行瀏覽器種類測試的選擇。
      3.網(wǎng)址測試:對此項(xiàng)測試印象很深刻,但是我發(fā)現(xiàn)好多人根據(jù)不在乎此測試,或者是根據(jù)覺得不應(yīng)該測試,如果有這種觀點(diǎn)的應(yīng)該及時(shí)改正,哈哈。網(wǎng)址也是咱們開發(fā)出來的嘛!
      4.UI界面友好性測試:俗話說第一印象很重要,如果沒有漂亮的界面,好多用戶是懶的看的,好的界面既要符合公司的發(fā)展,也要符合用戶的眼光,很是佩服UI設(shè)計(jì)人員。
      5.數(shù)據(jù)庫測試:聲明,這里說的不是對數(shù)據(jù)庫進(jìn)行的壓力測試,而是數(shù)據(jù)連接測試,如果數(shù)據(jù)存儲出問題了,那可不是小事兒。其實(shí)之前做c/s的時(shí)候沒有什么感覺,也是這次的項(xiàng)目給我很深刻的印象。
      6.連接測試:產(chǎn)品中含有死鏈、壞鏈等無效的鏈接地址,是要給頁面的響應(yīng)速度增加負(fù)擔(dān)的,這方面其實(shí)還是要注意下。xenu目前用的是這個(gè)小工具。
      7.單個(gè)頁面響應(yīng)速度:明確了單個(gè)的頁面響應(yīng)速度也同樣能知道那種元素對頁面的影響最大。目前使用工具為httpWatch。發(fā)現(xiàn)此工具的作用還是蠻多的,應(yīng)該好好研究下。
      8.自動化測試:穩(wěn)定的產(chǎn)品比較適用,對測試人員的技術(shù)要求也比較高,目前的工具也比較多開源的破解的嘿嘿。正在學(xué)習(xí)中;但是有一點(diǎn)很重要不是所有的功能都適用于自動化,所以設(shè)計(jì)上還是要思考清楚。
      9.性能測試:壓力測試、負(fù)載測試、效率測試等等
      以上是接觸B/S后的感受,再次記錄一下,時(shí)間長些后會有些補(bǔ)充,沒有什么邏輯,隨筆而已,其實(shí)什么也不是那么容易可以搞定的,安靜下來,多用用心,多用用腦,我相信我可以。

    posted @ 2014-08-05 09:29 順其自然EVO 閱讀(165) | 評論 (0)編輯 收藏

    云中軟件測試的風(fēng)險(xiǎn)與安全問題

     最近幾年,云計(jì)算非常受歡迎,而在這種環(huán)境的影響下,軟件開發(fā)項(xiàng)目也變得非常流行。該技術(shù)未必適合每一個(gè)企業(yè),但是,云計(jì)算并不是一時(shí)的流行而已。云計(jì)算的軟件測試功能為項(xiàng)目開發(fā)帶了新的機(jī)遇,同時(shí)也帶來了新的挑戰(zhàn)。
      云中軟件測試的風(fēng)險(xiǎn)與安全問題
      如下列舉了一些在軟件測試過程中應(yīng)用云工具最常問到的幾個(gè)問題。
      云中測試和運(yùn)行企業(yè)軟件會帶來哪些利益?
      運(yùn)用云工具,開發(fā)人員和測試人員可以擁有一些主動權(quán)。在內(nèi)部測試以及其他環(huán)節(jié)上,他們擁有相同的基本功能。關(guān)鍵優(yōu)勢是云中測試可以提供更好地可擴(kuò)展性。
      與傳統(tǒng)的云計(jì)算相比,擴(kuò)展性可以讓不同類型的公司都可以處理大型項(xiàng)目,對于中小型企業(yè)來說,更能凸顯這種優(yōu)勢。當(dāng)接到一個(gè)額外的而又不得不處理的測試任務(wù)時(shí),開發(fā)團(tuán)隊(duì)可以運(yùn)用現(xiàn)有的基礎(chǔ)框架應(yīng)對這種額外的測試服務(wù)。這樣做可以為企業(yè)節(jié)省時(shí)間和節(jié)約資金,并將其投入到設(shè)備上,以及分配給短期的特殊項(xiàng)目。
      除了可擴(kuò)展性外,云基礎(chǔ)設(shè)施可以讓生產(chǎn)環(huán)境的測試和監(jiān)控變得更加容易。應(yīng)用程序可以檢測出實(shí)際用戶的數(shù)目。對于全球化應(yīng)用程序來說,也應(yīng)該進(jìn)行充分的測試。當(dāng)用戶正在使用一個(gè)應(yīng)用程序時(shí),國際化和本地化方法可以幫助企業(yè)探測出用戶的地理位置,并相應(yīng)地調(diào)整用戶體驗(yàn)。此外,實(shí)際生產(chǎn)環(huán)境中會出現(xiàn)一些潛在的問題和急需修正的情況,此時(shí),云功能測試可以向開發(fā)團(tuán)隊(duì)提供豐富的知識以應(yīng)對如上情況。
      有了云工具,測試團(tuán)隊(duì)再也不必等著IT才能開工。Rob Barry在一篇文章中提到,用戶反映有了虛擬的實(shí)驗(yàn)室后,解決問題的速度變得更快了。當(dāng)質(zhì)量保證專家們不再處理機(jī)器或者界面出現(xiàn)的IT問題時(shí),他們也會放松放松。另外,IT可以節(jié)省更多的時(shí)間來處理一些潛在的卻更加重要的問題。
      有哪些風(fēng)險(xiǎn)或者缺點(diǎn)?
      云測試環(huán)境中在責(zé)任和能力方面會出現(xiàn)風(fēng)險(xiǎn)。當(dāng)不再使用本地工具時(shí),可能會出現(xiàn)一些失控的情況。擁有一種外部媒介可以減少開發(fā)中IT人員的工作時(shí)間,但是,只有當(dāng)供應(yīng)商能夠迅速地解決出現(xiàn)的所有問題時(shí),才會顯現(xiàn)出其有利的一面。如果所出現(xiàn)的問題得不到解決,IT人員也不會去援助,因?yàn)椋麄兪诌厸]有可以使用的工具。
      可擴(kuò)展性除了是云基礎(chǔ)設(shè)施的一大優(yōu)勢外,它還展示了一些未知之事。我們也許不知道一個(gè)指定項(xiàng)目的規(guī)模比重,這樣的話,云計(jì)算會引起高額的費(fèi)用。沒有正式的審批程序而建立了新的虛擬機(jī)器可能會引起意想不到的費(fèi)用,特別是如果自動化方法沒有縮減到應(yīng)有的費(fèi)用標(biāo)準(zhǔn)時(shí),費(fèi)用會更高。為了避免這些問題,測試團(tuán)隊(duì)可以而且應(yīng)該使用云服務(wù),研究云供應(yīng)商的政策中出現(xiàn)爭議的賬單。
      另外,云計(jì)算還會面臨功能測試、數(shù)據(jù)管理、安全、個(gè)人隱私和可利用性等方面的挑戰(zhàn)。企業(yè)必須判斷出他們會面臨哪些風(fēng)險(xiǎn)。對于一些企業(yè)來說,云測試的財(cái)務(wù)成本可能過高。面對如上所有的風(fēng)險(xiǎn)時(shí),最重要的是,企業(yè)要非常好地掌握云功能,并知道如何最優(yōu)化使用云功能。
      有哪些安全問題?
      企業(yè)應(yīng)用程序必須具備安全性,但是,由于處于這種特殊環(huán)境下,這些應(yīng)用程序就必須經(jīng)過測試環(huán)境,而且要依托于云計(jì)算。我們要了解云計(jì)算的缺陷以及如何應(yīng)對這些缺陷。
      決策者應(yīng)該考慮云計(jì)算中哪些數(shù)據(jù)能夠被采用,特別是,當(dāng)這些數(shù)據(jù)中包含用戶信息時(shí)就更要謹(jǐn)慎。無論公司針對于安全性采取了什么措施,安裝防火墻或者其他什么工具,我們都要解決安全隱患。

    posted @ 2014-08-05 09:27 順其自然EVO 閱讀(174) | 評論 (0)編輯 收藏

    java初始化

    最近在研究java代碼的生命周期。這其中遇到一個(gè)java代碼初始化的問題。
      代碼如下:
    public class JvmTest {
    private static int count1;
    private static int count2 = 0;
    private static JvmTest JvmTest =new JvmTest();
    public JvmTest() {
    System.out.println("JvmTest");
    count1++;
    count2++;
    }
    public static JvmTest getInstance() {
    return JvmTest;
    }
    public static void main(String[] args) {
    System.err.println("count1=" + JvmTest.count1);
    System.err.println("count2=" + JvmTest.count2);
    }
    }
      這段代碼運(yùn)行之后的結(jié)果是什么呢?
      如果你已經(jīng)有答案了,請看下面這段代碼:
    public class JvmTest {
    private static JvmTest JvmTest =new JvmTest();
    private static int count1;
    private static int count2 = 0;
    public JvmTest() {
    System.out.println("JvmTest");
    count1++;
    count2++;
    }
    public static JvmTest getInstance() {
    return JvmTest;
    }
    public static void main(String[] args) {
    System.err.println("count1=" + JvmTest.count1);
    System.err.println("count2=" + JvmTest.count2);
    }
    }
      這段運(yùn)行結(jié)果又是什么呢?
      我開始對運(yùn)行結(jié)果也比較疑惑,然后仔細(xì)分析了一下,問題就出在java代碼的初始化上。因?yàn)檫@個(gè)測試類是帶有main函數(shù)的,它會在程序運(yùn)行時(shí)即執(zhí)行。所以這屬于主動引用,這種情況會促使類的初始化。初始化過程中,在調(diào)用成員方法之前,它首先會按順序?qū)o態(tài)成員變量進(jìn)行賦值,如果無值可賦就給一個(gè)默認(rèn)值。說到這里我想上面兩段代碼的結(jié)果也就好解釋了。
      第一段首先count1和count2值都是0,一個(gè)是類加載過程中默認(rèn)的0,一個(gè)是賦值為0,然后執(zhí)行了new操作,對count1和count2進(jìn)行自加,所以到這里,count1和count2的值都是1.而第二段則是先new操作對count1和count2都自加,變成1,然后再對count2進(jìn)行賦值操作,所以count2的值又從1改成了0.

    posted @ 2014-08-04 09:58 順其自然EVO 閱讀(156) | 評論 (0)編輯 收藏

    Oracle中IP地址和掩碼轉(zhuǎn)換成CIDR格式

      遇到的問題如下:數(shù)據(jù)庫中存儲了IP地址,以及IP地址掩碼,需要將他們轉(zhuǎn)化成CIDR格式的,并且不僅僅是將掩碼轉(zhuǎn)化成CIDR對應(yīng)的數(shù)字的問題,需要將原有的IP地址轉(zhuǎn)化成對應(yīng)的網(wǎng)絡(luò)地址,例如IP地址是58.247.221.238,掩碼是255.255.255.252,需要將其轉(zhuǎn)化為58.247.221.236/30。
      解決方案:我們知道,將IP地址和掩碼通過位與函數(shù)就能得到對應(yīng)的網(wǎng)絡(luò)地址.Google一下,找到了將IPv4地址轉(zhuǎn)成數(shù)字以及轉(zhuǎn)化回來的函數(shù)。有了這兩個(gè)函數(shù),再利用Oracle 自帶的bitand函數(shù),問題就解決了。可以先將IP地址和掩碼通過字符串轉(zhuǎn)IP的函數(shù)轉(zhuǎn)成數(shù)字,然后通過位與運(yùn)算就能得到相應(yīng)的網(wǎng)絡(luò)地址對應(yīng)的數(shù)字,再通過數(shù)字轉(zhuǎn)字符串的功能,即得到對應(yīng)的網(wǎng)絡(luò)地址。至于/后面CIDR的數(shù)字,可以通過導(dǎo)入一張掩碼和CIDR數(shù)字的對應(yīng)表得到,不在詳述.
      實(shí)際例子如下: 返回58.247.221.236
      Sql代碼
      select inttoip(BITAND(dottedQuadToNumber('58.247.221.238'),
      ottedQuadToNumber('255.255.255.252'))) from dual
      附: 將字符串轉(zhuǎn)成數(shù)字的函數(shù):
      Sql代碼
    CREATE OR REPLACE function dottedQuadToNumber ( dottedQuad IN VARCHAR2) return number is
    Result NUMBER;
    begin
    Result:= (substr(dottedQuad ,
    1,
    (instr(dottedQuad , '.', 1, 1 ) - 1))
    * 256 * 256 * 256
    ) +
    (substr(dottedQuad ,
    instr(dottedQuad , '.', 1, 1 ) + 1,
    instr(dottedQuad , '.', 1, 2 ) -
    instr(dottedQuad , '.', 1, 1 ) - 1) * 256 * 256
    ) +
    (substr(dottedQuad ,
    instr(dottedQuad , '.', 1, 2 ) + 1,
    instr(dottedQuad , '.', 1, 3 ) -
    instr(dottedQuad , '.', 1, 2 ) - 1) * 256
    ) +
    (substr(dottedQuad ,
    instr(dottedQuad , '.', 1, 3 ) + 1)
    ) ;
    return(Result );
    end dottedQuadToNumber ;
      數(shù)字轉(zhuǎn)成ip地址的函數(shù):
      Sql代碼
    CREATE OR REPLACE function inttoip(ip_address integer) return varchar2
    deterministic
    is
    begin
    return to_char(mod(trunc(ip_address /256/ 256/256 ),256))
    || '.'|| to_char(mod(trunc(ip_address/ 256/256 ),256))
    || '.'|| to_char(mod(trunc(ip_address/ 256),256 ))
    || '.'|| to_char(mod(ip_address, 256));
    end;

    posted @ 2014-08-04 09:58 順其自然EVO 閱讀(263) | 評論 (0)編輯 收藏

    IOS 開發(fā)調(diào)用打電話,發(fā)短信

     1、調(diào)用 自帶mail
      [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"mailto://admin@hzlzh.com"]];
      2、調(diào)用 電話phone
      [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://8008808888"]];
      iOS應(yīng)用內(nèi)撥打電話結(jié)束后返回應(yīng)用
      一般在應(yīng)用中撥打電話的方式是:
      [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"tel://123456789"]];
      使用這種方式撥打電話時(shí),當(dāng)用戶結(jié)束通話后,iphone界面會停留在電話界面。
      用如下方式,可以使得用戶結(jié)束通話后自動返回到應(yīng)用:
      UIWebView*callWebview =[[UIWebView alloc] init];
      NSURL *telURL =[NSURL URLWithString:@"tel:10086"];// 貌似tel:// 或者 tel: 都行
      [callWebview loadRequest:[NSURLRequest requestWithURL:telURL]];
      //記得添加到view上
      [self.view addSubview:callWebview];
      還有一種私有方法:(可能不能通過審核)
      [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"telprompt://10086"]];
      3、調(diào)用 SMS
      [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"sms://800888"]];
      4、調(diào)用自帶 瀏覽器 safari
      [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"http://www.hzlzh.com"]];
      調(diào)用phone可以傳遞號碼,調(diào)用SMS 只能設(shè)定號碼,不能初始化SMS內(nèi)容。
      若需要傳遞內(nèi)容可以做如下操作:
      加入:MessageUI.framework
      #import <MessageUI/MFMessageComposeViewController.h>
      實(shí)現(xiàn)代理:MFMessageComposeViewControllerDelegate
      調(diào)用sendSMS函數(shù)
    //內(nèi)容,收件人列表
    - (void)sendSMS:(NSString *)bodyOfMessage recipientList:(NSArray *)recipients
    {
    MFMessageComposeViewController *controller = [[[MFMessageComposeViewController alloc] init] autorelease];
    if([MFMessageComposeViewController canSendText])
    {
    controller.body = bodyOfMessage;
    controller.recipients = recipients;
    controller.messageComposeDelegate = self;
    [self presentModalViewController:controller animated:YES];
    }
    }
    // 處理發(fā)送完的響應(yīng)結(jié)果
    - (void)messageComposeViewController:(MFMessageComposeViewController *)controller didFinishWithResult:(MessageComposeResult)result
    {
    [self dismissModalViewControllerAnimated:YES];
    if (result == MessageComposeResultCancelled)
    NSLog(@"Message cancelled")
    else if (result == MessageComposeResultSent)
    NSLog(@"Message sent")
    else
    NSLog(@"Message failed")
    }
      默認(rèn)發(fā)送短信的界面為英文的,解決辦法為:
      在.xib 中的Localization添加一組chinese就ok了

    posted @ 2014-08-04 09:58 順其自然EVO 閱讀(1336) | 評論 (0)編輯 收藏

    IOS-內(nèi)存檢測以及優(yōu)化

      PS:開始寫這個(gè)系列的筆記:主要是對過去自己比較模糊的一些概念進(jìn)行測試,明確結(jié)果,提高自己
      IOS 應(yīng)用如果占用系統(tǒng)的內(nèi)容過大(8GB),就會造成應(yīng)用直接被系統(tǒng)以崩潰的形式關(guān)閉,一次控制應(yīng)用占用的內(nèi)存大小是非常重要的事情。
      現(xiàn)在我們來看看,一個(gè)空的應(yīng)用占據(jù)的內(nèi)容的大小:
      測試環(huán)境:xCode 5.0/IOS 5
      啟動一個(gè)空應(yīng)用,占用的內(nèi)存為 2.6MB,占據(jù)應(yīng)用崩潰的閥值為 0.03%
      1:關(guān)于導(dǎo)航條的 Push和popup的測試結(jié)果
      [self.navigationController pushViewController:m_navanimated:YES];
      [self.navigationController popViewControllerAnimated:YES];
      對于
      pushViewController ,會將對應(yīng)的ViewController對象的引用計(jì)數(shù)器+1
      popViewControllerAnimated   會將對應(yīng)的ViewController對象的引用計(jì)數(shù)器-1
      但是有一點(diǎn)需要明確的是,對于函數(shù)
      -(void)dealloc
      {
      //Objects release here
      [super deallco];
      }
      只有在該引用計(jì)數(shù)器的值==0的時(shí)候才會調(diào)用,這個(gè)是必須牢記的。
      在執(zhí)行函數(shù)[self.navigationController popViewControllerAnimated:YES];的時(shí)候,如果彈出的ViewController對應(yīng)的引用計(jì)數(shù)器為0,那么也會執(zhí)行dealloc 函數(shù)。
      所以再使用
      [self.navigationController pushViewController:m_navanimated:YES];
      [self.navigationController popViewControllerAnimated:YES];
      棧函數(shù)對的時(shí)候,為了釋放內(nèi)存,我們可以這么使用
      Nav_1 *m_nav = [[[Nav_1  alloc] initWithNibName:nil bundle:nil] autorelease];
      [self.navigationController  pushViewController:m_nav  animated:YES];
      這樣就最大限度的節(jié)省了寶貴的內(nèi)存空間

    posted @ 2014-08-04 09:56 順其自然EVO 閱讀(419) | 評論 (1)編輯 收藏

    iOS項(xiàng)目開發(fā)之Socket編程

     有一段時(shí)間沒有認(rèn)真總結(jié)和寫博客了
      前段時(shí)間找工作、進(jìn)入工作階段。比較少靜下來認(rèn)真總結(jié),現(xiàn)在靜下心來總結(jié)一下最近的一些心得
      前言
      AsyncSocket介紹
      AsyncSocket詳解
      AsyncSocket示例
      一、前言
      公司的項(xiàng)目用到了Socket編程,之前在學(xué)習(xí)的過程當(dāng)中,用到的更多的還是http請求的方式。但是既然用到了就必須學(xué)習(xí)一下,所以就在網(wǎng)上找一些例子,然后想自己寫一個(gè)demo。可是發(fā)現(xiàn)很多寫iOS Socket的博客并沒有很詳細(xì)的說明,也可能是大神們覺得其他東西都淺顯易懂。
      自己專研了一下,將自己的一些理解總結(jié)出來,一方面整理自己的學(xué)習(xí)思路,另一方面,為一些和我有同樣困惑的小伙伴們,稍做指引。
      二、AsyncSocket介紹
      1)iOS中Socket編程的方式有哪些?
      -BSD Socket
      BSD Socket 是UNIX系統(tǒng)中通用的網(wǎng)絡(luò)接口,它不僅支持各種不同的網(wǎng)絡(luò)類型,而且也是一種內(nèi)部進(jìn)程之間的通信機(jī)制。而iOS系統(tǒng)其實(shí)本質(zhì)就是UNIX,所以可以用,但是比較復(fù)雜。
      -CFSocket
      CFSocket是蘋果提供給我們的使用Socket的方式,但是用起來還是會不太順手。當(dāng)然想使用的話,可以細(xì)細(xì)研究一下。
      -AsyncSocket
      這次博客的主講內(nèi)容,也是我們在開發(fā)項(xiàng)目中經(jīng)常會用到的。
      2)為什么選擇AsyncSocket?
      iphone的CFNetwork編程比較艱深。使用AsyncSocket開源庫來開發(fā)相對較簡單,幫助我們封裝了很多東西。
      三、AsyncSocket詳解
      1??說明
      在我們開發(fā)當(dāng)中,我們主要的任務(wù)是開發(fā)客戶端。所以詳解里主要將客戶端的整個(gè)連接建立過程,以及在說明時(shí)候回調(diào)哪些函數(shù)。在后面的示例代碼中,也會給出服務(wù)器端的簡單開發(fā)。
      2??過程詳解
      1.建立連接
      - (int)connectServer:(NSString *)hostIP port:(int)hostPort
      2.連接成功后,會回調(diào)的函數(shù)
      - (void)onSocket:(AsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port
      3.發(fā)送數(shù)據(jù)
      - (void)writeData:(NSData *)data withTimeout:(NSTimeInterval)timeout tag:(long)tag;
      4.接受數(shù)據(jù)
      -(void)onSocket:(AsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag
      5.斷開連接
      - (void)onSocket:(AsyncSocket *)sock willDisconnectWithError:(NSError *)err
      - (void)onSocketDidDisconnect:(AsyncSocket *)sock
      主要就是上述的幾個(gè)方法,只是說在真正開發(fā)當(dāng)中,很可能我們在收發(fā)數(shù)據(jù)的時(shí)候,我們收發(fā)的數(shù)據(jù)并不僅僅是一個(gè)字符串包裝成NSData即可,我們很可能會發(fā)送結(jié)構(gòu)體等類型,這個(gè)時(shí)候我們就需要和服務(wù)器端的人員協(xié)作來開發(fā):定義怎樣的結(jié)構(gòu)體。

    posted @ 2014-08-04 09:55 順其自然EVO 閱讀(3773) | 評論 (0)編輯 收藏

    僅列出標(biāo)題
    共394頁: First 上一頁 72 73 74 75 76 77 78 79 80 下一頁 Last 
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    導(dǎo)航

    統(tǒng)計(jì)

    常用鏈接

    留言簿(55)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: a毛片久久免费观看| 国产自偷亚洲精品页65页| 亚洲精品福利在线观看| 一级毛片全部免费播放| 亚洲AV午夜成人片| 国产自国产自愉自愉免费24区| 亚洲国产成人AV在线播放| 成人毛片18女人毛片免费| 亚洲欧美中文日韩视频| 国产不卡免费视频| 日韩a毛片免费观看| 亚洲裸男gv网站| 久久这里只精品国产免费10| 亚洲午夜一区二区电影院| 成人性生交大片免费看午夜a| 桃子视频在线观看高清免费视频| 国产精品无码免费专区午夜| 亚洲av女电影网| 在线精品免费视频| 国产一级高青免费| 亚洲日本国产综合高清| 国产偷国产偷亚洲高清日韩| 久久国产精品免费看| 国产在线精品一区免费香蕉 | 免费国产叼嘿视频大全网站| 亚洲天堂一区二区三区| 国产精品自在自线免费观看| 国产日韩AV免费无码一区二区| 免费人成大片在线观看播放电影 | 午夜dj在线观看免费视频| 久99久无码精品视频免费播放| 亚洲日韩乱码久久久久久| 亚洲精品免费观看| 亚洲&#228;v永久无码精品天堂久久 | 色五月五月丁香亚洲综合网| 亚洲AV无码久久精品蜜桃| 久久精品国产96精品亚洲 | 7m凹凸精品分类大全免费| 猫咪免费人成在线网站| 亚洲人成电影在线观看青青| va天堂va亚洲va影视中文字幕|