9月19面试记录

某团#

  1. static定义在头文件的危害,回来做了下测试直接上代码
#import <Foundation/Foundation.h>
#include <objc/runtime.h>
#include "staticccccc.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        NSLog(@"%p",&a);
        static int a = 1000;
        NSLog(@"%p",&a);
        staticccccc *s = [[staticccccc alloc] init];
        s.prinstA;
        
    }
    return 0;
}

/*
2016-09-19 21:15:54.600 内存[2105:104521] main : 0x1000011a8
2016-09-19 21:15:54.601 内存[2105:104521] main : 0x1000011ac
2016-09-19 21:15:54.601 内存[2105:104521] staticccccc : 0x1000011b0
Program ended with exit code: 0
*/

在staticccccc类中声明了一个静态变量,prinstA方法可以打出来。
3个静态变量的地址都是不一样的,全局静态变量的作用域只在当前文件里面,如果头文件被其他引用,那么头文件里面的静态变量会再次定义一次。危害就是如果头文件被引用了多次,那么这个静态变量就会被定义多次,虽然在不同的作用域,但是名字相同

2,线程崩溃了这个进程一定会崩溃?一般崩溃肯定伴随栈溢出、读取或者访问了非法地址。 如果线程以非法的形式结束的话,必然进程会崩溃啊。

3,NSMutableArray的线程安全问题。self.mArr = [NSMutableArray new]有没有问题?
我不大明白面试官的意思, [NSMutableArray new]创建这个东西我觉得应该是没有线程问题的,如果觉得执行这个操作需要时间,在这段时间内其他线程又访问这个NSMutableArray的话,那么我一般就会

NSMutableArray *marr = [NSMutableArray new];
self.mArr = marr;

或者从另外一方面来讲直接给实例变量赋值而不走set方法貌似是一个不错的解决方案

_mArr  = [NSMutableArray new];

赋值操作应该是原子的。即使self.mArr 是空使用插入操作也不会出错,因为OC是可以给空对象发消息的。如果真要制造一个崩溃的场景。可是谁会这样做呢?

    dispatch_async(dispatch_get_global_queue(0, 0), ^{
        NSMutableArray *marr = [NSMutableArray new];
        self.mArr = marr;
    });
    
    for (int i = 0; i < 10;  i++) {
        
        [_mArr insertObject:[NSNumber numberWithInt:1] atIndex:i];
        
    }

通常对于NSMutableArray多线程操作,加上互斥锁就可以避免大部分崩溃情况了.加上@synchronized (self)

    dispatch_async(dispatch_get_global_queue(0, 0), ^{
        @synchronized (self) {
            NSMutableArray *marr = [NSMutableArray new];
            _mArr = marr;
        }
    });
    @synchronized (self) {
    for (int i = 0; i < 10;  i++) {
        [_mArr insertObject:[NSNumber numberWithInt:1] atIndex:i];
      }
    }

或者直接加锁和用GCD也行。

4,NULL、Nil、nil、NSNull 有何区别?一脸蒙蔽

nil对象被设计来跟NULL空指针关联的。他们的区别就是nil是一个对象,而NULL只是一个值...而且我们对于nil调用方法,不会产生crash或者抛出异常....

The NSNull class defines a singleton object used to represent null values in collection objects (which don’t allow nil values).
一般在集合中不允许使用nil值,但是可以使用NSNULL。

Nil Defines the id of a null class 。 nil是空对象的定义 , Nil是空类的定义。
ifndef Nil
if __has_feature(cxx_nullptr)
define Nil nullptr
else
define Nil __DARWIN_NULL
endif
endif

5,数据库索引
完全忘记概念了,聚簇索引 是按照数据存放的物理位置为顺序的,而非聚簇索引就不一样了;聚簇索引能提高多行检索的速度,而非聚簇索引对于单行的检索很快。
我唯一的印象就是非聚类索引会增加数据库内存,开辟一段空间来建立数据结构,通常是一颗查找数,建立索引到数据地址的映射。
聚簇索引 是按照数据存放的物理位置为顺序的,而非聚簇索引就不一样了;聚簇索引能提高多行检索的速度,而非聚簇索引对于单行的检索很快。这句话说得蛮好的。

6,KVO说多了都是泪,本来以为需要大书特书一番的,结果其实几句话就可以解决了。
1,被监听对象设置addOserbver方法,存储需要那个对象监听。
2,set方法重写,如果发现本属性被监听,那么发消息给监听对象。
3,监听对象需要一个实现一个接受方法,来接收被监听对象发过来的消息。

7,算法--找出数组中出现次数超过一半的数,
貌似是编程之美上的,以前见过全忘了,以后面试的时候不要一来就想最复杂度最小的方法,想到啥说啥,这种题,哈希,排序都可以解的,但是的确不是最优的,但是应该还是要向面试官表明自己能做这道题。虽然并不是最优的,总比一味的想最优的方法卡在那特别尴尬。复杂度为N的方法.回来写2分钟搞定 欲哭无泪。

int main(int argc, const char * argv[]) {
    
    int n = 10;
    int a[10] = {1,2,1,1,4,5,3,1,1,1};
    int tmp = a[0];
    int count = 1;
    for (int i = 1 ; i<n; i++) {
        if (a[i] == tmp) {
            count++;
        }else{
            count--;
            if (count == 0) {
                count = 1;
                tmp = a[++i];
            }
        }
    }
    
    printf("%d",tmp);
    return 0;
}


某狗:#

1.delloc方法,学的时候全是ARC根本没有接触过delloc这个方法!“#¥#%&‘
百度了半天,得出的结论是ARC下面可以忽略这个方法,如果实在需要delloc方法里面去销毁一些东西,比如不受ARC管理的C++对象,写个method swizzling貌似是个不错的选择。

2, imageNamed
利用它可以方便加载资源图片。用imageNamed的方式加载时,会把图像数据根据它的名字缓存在系统内存中,以提高imageNamed方法获得相同图片的image对象的性能。即使生成的对象被 autoReleasePool释放了,这份缓存也不释放。而且没有明确的释放方法。如果图像比较大,或者图像比较多,用这种方式会消耗很大的内存, 不会被autorelease释放,不会被autorelease释放,不会被autorelease释放,不会被autorelease释放。
imageWithContentsOfFile不会生成缓存 , 会被autorelease释放。

机会很少且面且珍惜!!!!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容