iOS高級開發(fā)工程師-荔枝-筆試

iOS筆試&面試題

筆試公司: 廣州荔枝網(wǎng)絡有限公司
筆試崗位:高級iOS開發(fā)工程師

1.在采用MRR的內(nèi)存管理方式上,出現(xiàn)了如下圖的循環(huán)引用,那么在release B的時候出現(xiàn)內(nèi)存泄露,請?zhí)岢瞿愕慕鉀Q方案

image

在release B之前先進行 E release B操作;
在MRC 下E對B的代碼具體體現(xiàn)是@property(nonatomic, assign) Object *B;
在ARC 下E對B的代碼具體體現(xiàn)是@property(nonatomic, weak) Object *B;

平時用strong、retain、assign、weak這幾個關鍵字的時候,也沒有過多的在意,下邊就MRC、ARC模式下,每個關鍵字做一下總結。為了簡明期間,采用表格的形式進行展示。

MRC ARC
strong strong是在開始使用ARC內(nèi)存管理方式的時候引入的,如果硬是要在MRC模式下使用的話,經(jīng)過驗證,和在ARC模式下并沒有什么區(qū)別 ARC模式下,strong同MRC模式下的retain
retain MRC、ARC兩種內(nèi)存管理方式下相同 MRC、ARC兩種內(nèi)存管理方式下相同
assign 可以用來修飾對象類型,也可以用來修飾基本數(shù)據(jù)類型。修飾對象類型的時候,對象的引用計數(shù)不會隨著引用次數(shù)的增加而增加,也就是說被釋放之前,引用計數(shù)永遠是1 只能用來修飾基本數(shù)據(jù)類型,不能用來修飾對象類型。除此之外,還用來修飾代理對象
weak MRC模式下不能夠使用weak來修飾對象和基本數(shù)據(jù)類型 相當于MRC模式下的assign

2.以下代碼的作用是什么? 變量age被定義為NSInteger,它編譯時沒有問題【告警忽略】……但為什么會crash?

UILabel *mylabel=[UILabel new];
mylabel.text=age?[NSString stringWithFormat:@"%@",age]:@"";

最后程序會crash,并報EXC_BAD_ACCESS野指針異常
由于NSInteger age ;age 沒有賦值值, 系統(tǒng)會默認賦值4499059043
age 轉化為BOOL時候自然為YES,因此會執(zhí)行stringFormat,
由于%@ 會先調(diào)用 initWithFormat:locale:arguments: 再調(diào)用autorelease方法,所以會造成crash

3.題目:在一個整型數(shù)組中有一個元素的出現(xiàn)次數(shù)超過了數(shù)組長度的一半,試設計一個 在時間上盡可能高效的算法,找出這個元素。要求:
(1)給出算法的基本設計思想。
(2)根據(jù)設計思想,采用C或C++或Java語言描述算法,關鍵之處給出注釋。
(3)說明你所設計算法的時間復雜度和空間復雜度。

1)基本的設計思想

一個數(shù)字出現(xiàn)的次數(shù)超過了長度的一半, 那么我們可以這樣認為這個數(shù)字出現(xiàn)的個數(shù)一定大于其他全部數(shù)字出現(xiàn)的個數(shù)之和。算法的步驟如下:
①設數(shù)組為data[],數(shù)組長度為n,i=1。置currentAxis=data[0],currentNum=1。
②當data[i]==currentAxis時,currentNum++,轉向④;否則轉向③。
③currentNum--,當currentNum==0時,currentAxis=data[i]。
④當i==data.length時, 轉向⑤;否則,i++,轉向②;
⑤返回currentAxis。

2)具體代碼

#include<iostream>
using namespace std;

int funtion(int data[],int length)
{
    int currentAxis; //假設要求的元素的位置
    int currentNum = 0; //要求元素的個數(shù)變量
    for(int i =0;i<length;i++)
    {
        if(currentNum ==0){
        //如果要求的元素還沒出現(xiàn),設置要求的元素為現(xiàn)在要比較的元素
            currentAxis=data[i];
            currentNum=1;
        }
        else
        {
            if(currentAxis==data[i])
            //假設的結果與比較元素不同,假設結果個數(shù)增1,否則減1
                currentNum++;
            else
                currentNum--;
        }
    }
    return currentAxis; //返回最終結果的位置。
}
int main()
{
    int arr[]={1,2,3,2,5,6,2,2,3,2,2,4};
    cout<<"number="<<funtion(arr,12)<<endl;
    return 0;
}

3)時間復雜度為n,空間復雜度為1;

持續(xù)更新--請iOS的小伙伴關注! 喜歡的話給一個贊吧!

另外附上一份各個好友收集的各大廠面試題+答案 ! 需要的可加 iOS技術探討群:761407670 ,群文件直接獲取 !

點擊此處,與三千iOS開發(fā)大牛一起交流學習

作者:有度YouDo
原文鏈接:http://www.itdecent.cn/p/d2d8cf4e6ff6

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容