2018-03-01面试分享

由于各种原因打算从现公司离职,于是就有了今天的面试分享,可能最近一段时间都会更新这个话题相关的文章。有兴趣的可以follow一下。
今天一共面试了两家,上午一家下午一家,上午十点我就到了第一家公司,填写了个人信息,个子高的离谱的人事妹纸就递过来一份面试题,我一看每个题都那么眼熟,而且都可以说个大概,但是写到纸上的文字就是组织不好,这也许是我们码农的通病吧!下面我分享下对于我来说比较困难的题(其实大部分题网上都有,大家面试之前多看下《招聘一个靠谱的iOS》不知道为啥,好多公司现在全都从这上面上找题,甚至直接就是复制粘贴过来的)。

  • 1.最长公共子字符串查找(OC实现)
    使用类别扩展NSString实现。
//实现查找两个字符串中最大相同的子串,例如:”likeyou”和”lookyou”,最大相同的子串是”you”。
#import <Foundation/Foundation.h>
#import "NSString+Find.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        char *s1=malloc(30*sizeof(char)),*s2=malloc(30*sizeof(char));
        NSLog(@"输入字符串1(长度小于30):");
        gets(s1);
        NSLog(@"输入字符串2(长度小于30):");
        gets(s2);
        NSString *str1=[NSString stringWithUTF8String:s1];
        NSString *str2=[NSString stringWithUTF8String:s2];
        NSLog(@"你输入的两个字符串为:%@,%@",str1,str2);
        NSString *subStr=[str1 findMaxSubstring:str1 andString2:str2];
        if (subStr) {
            NSLog(@"最长公共子串是:%@",subStr);
        }
    }
    return 0;
}
  • NSString+Find.h
#import <Foundation/Foundation.h>

@interface NSString (Find)
//找到两个字符串的最大公共子字符串
-(NSString*)findMaxSubstring:(NSString *)string1 andString2:(NSString*)string2;
@end
  • NSString+Find.m
#import "NSString+Find.h"

@implementation NSString (Find)
-(NSString *)findMaxSubstring:(NSString *)string1 andString2:(NSString *)string2{
//    首先找到长度较小的字符串 保证string1<string2
    NSString *temp;
    if ([string1 length]>[string2 length]) {
        temp=string1;
        string1=string2;
        string2=temp;
    }
    long length1=[string1 length];
//    然后从长到短获取string1的子字符串,去string2中找,如果包含,则返回该子字符串,否则再找
    NSRange range=NSMakeRange(0, length1);
    while (![string2 containsString:[string1 substringWithRange:range]]&&range.location<=length1-1&&range.length>=1) {//如果string2不包含目前的子串并且没有越界

//        判断下一步操作
        if (range.location<length1-range.length) {//不需要减length
            range.location++;
        }else{
            range.length--;
            range.location=0;
        }
    }
//    最后判断并返回子串
    if (range.length==0) {
        NSLog(@"没有找到公共子字符串!");
        return nil;
    }else{
        NSLog(@"找到了");
        return [string1 substringWithRange:range];
    }
    }
@end

其实这是一道算法题,不使用类别也可以实现。
下面是我写的Demo

  • 2.如何用GCD同步若干个异步任务?(如根据多个Url异步加载多张图片,然后在都下载完成后合成一张整图)
//使用Dispatch Group追加block到Global Group Queue,这些block如果全部执行完毕,
//就会执行Main Dispatch Queue中的结束处理的block
dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_group_t group = dispatch_group_create();
dispatch_group_async(group, queue, ^{ /*加载图片1 */ });
dispatch_group_async(group, queue, ^{ /*加载图片2 */ });
dispatch_group_async(group, queue, ^{ /*加载图片3 */ });
dispatch_group_notify(group, dispatch_get_main_queue(), ^{
    // 合并图片
});
答题的时候只要打出group概念和完成结束后的notify就加分。
//面试的第二场也问了GCD相关的问题,看来有必要刚一波GCD了!

面试感想:现在的大公司基本上都是看学历和经历,这个是门槛,没有高一点的学历,基本还是那个不看你的简历的,而且即使你学历达标,也是要求你是大厂出来的,也就是阿里P8P10级别的。说实话,有点小受打击!
未完待续。。。

最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 180,862评论 25赞 708
  • 1.内存管理 2.单例的理解 3.post和get的区别 4.md5和base64是什么,有什么区别 5.简单谈谈...
    coder_Wg阅读 1,387评论 1赞 6
  • 烟囱里升起昨日的余烬 在群山的肩头 理想是最后的荣光 而荣光即黯 为继的是夜 是悄悄掩至的大梦 更多一片月光白 月...
    狂生小乙阅读 384评论 0赞 0

友情链接更多精彩内容