招聘高峰期来了,大家都非常积极地准备着跳槽,那么去一家公司面试就会有一堆新鲜的问题,可能不会,也可能会,但是了解不够深。本篇文章为群里的小伙伴们去宝库公司的笔试题,由笔者整理并提供笔者个人参考答案。注意,仅供参考,不代表绝对正确。
参考答案不唯一,大家可以根据自己的理解回答,没有必要跟笔者的一样。参考笔者的答案,也许给你带来灵感!
例如:
NSArray *array = @[@"12-11", @"12-11", @"12-11", @"12-12", @"12-13", @"12-14"];
NSMutableArray *resultArray = [[NSMutableArray alloc]initWithCapacity:array.count]; // 外层一个循环 for (NSString *item in array) { // 调用-containsObject:本质也是要循环去判断,因此本质上是双层遍历 // 时间复杂度为O ( n^2 )而不是O (n) if (![resultArraycontainsObject:item]) { [resultArrayaddObject:item]; } } NSLog(@"resultArray: %@", resultArray);
NSMutableDictionary *resultDict = [[NSMutableDictionary alloc]initWithCapacity:array.count]; for (NSString *item in array) { [resultDictsetObject:itemforKey:item]; } NSArray *resultArray = resultDict.allValues; NSLog(@"%@", resultArray);
如果需要按照原来的升序排序,可以这样:
resultArray = [resultArraysortedArrayUsingComparator:^NSComparisonResult(id _Nonnullobj1, id _Nonnullobj2) { NSString *item1 = obj1; NSString *item2 = obj2; return [item1compare:item2options:NSLiteralSearch]; }]; NSLog(@"%@", resultArray);
NSSet *set = [NSSetsetWithArray:array]; NSArray *resultArray = [setallObjects]; NSLog(@"%@", resultArray);
如果要求有序,那就得排序,比如这里要升序排序:
resultArray = [resultArraysortedArrayUsingComparator:^NSComparisonResult(id _Nonnullobj1, id _Nonnullobj2) { NSString *item1 = obj1; NSString *item2 = obj2; return [item1compare:item2options:NSLiteralSearch]; }]; NSLog(@"%@", resultArray);
以上三种方法是笔者所能想到的办法。如果大家有更好的办法,欢迎在评论中指出。
NSArray、NSSet、NSDictionary与NSMutableArray、NSMutableSet、NSMutableDictionary
笔者倾向于纯代码开发,所以所提供的参考答案可能具有一定的个人感情,不过还是给大家说说笔者的想法。
2015-04-10格式化日期转为NSDate类型
NSString *timeStr = @"2015-04-10"; NSDateFormatter *formatter = [[NSDateFormatter alloc]init]; formatter.dateFormat = @"yyyy-MM-dd"; formatter.timeZone = [NSTimeZone defaultTimeZone]; NSDate *date = [formatterdateFromString:timeStr]; // 2015-04-09 16:00:00 +0000 NSLog(@"%@", date);
在iOS中,通常是通常UIWebView来实现,当然在iOS8以后可以使用WKWebView来实现.有以下几种实现方法:
- (BOOL)webView:(UIWebView *)webViewshouldStartLoadWithRequest:(NSURLRequest *)requestnavigationType:(UIWebViewNavigationType)navigationType;
优缺点:
首先,我们要明确一点,同步和异步都是在线程中使用的。在iOS开发中,比如网络请求数据时,若使用同步请求,则只有请求成功或者请求失败得到响应返回后,才能继续往下走,也就是才能访问其它资源(会阻塞了线程)。网络请求数据异步请求时,不会阻塞线程,在调用请求后,可以继续往下执行,而不用等请求有结果才能继续。
区别:
在iOS中队列分为以下几种:
dispatch_queue_t q = dispatch_queue_create("...", DISPATCH_QUEUE_SERIAL);
dispatch_queue_t q = dispatch_queue_create("......", DISPATCH_QUEUE_CONCURRENT);
dispatch_queue_t q = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_queue_t q = dispatch_get_main_queue();
上面这四种是针对GCD来讲的,串行队列中的任务只能一个个地执行,在前一个没有执行完毕之前,下一个只能等待。并行队列可以并发地执行任务,因此多个任务之间执行的顺序不能确定,当添加一个新的任务时,交由GCD来判断是否要创建新的新的线程。
大家可以阅读图片多线程,也许更明了:
内存管理准则:谁强引用过,谁就在不再使用时使引用计数减一。
对于内存的使用和优化常见的有以下方面:
plist是iOS系统中特有的文件格式。我们常用的NSUserDefaults偏好设置实质上就是plist文件操作。plist文件是用来持久化存储数据的。
我们通常使用它来存储偏好设置,以及那些少量的、数组结构比较复杂的不适合存储数据库的数据。比如,我们要存储全国城市名称和id,那么我们要优先选择plist直接持久化存储,因为更简单。
详情请阅读: iOS常用的持久化存储方式
数据库的简单操作,还是会的,大学可没白学。
增:
insertintotb_blogs(name, url) values('标哥的技术博客','http://www.henishuo.com');
删:
deletefromtb_blogswhereblogid = 1;
改:
updatetb_blogsseturl = 'www.henishuo.com' whereblogid = 1;
查:
selectname, urlfromtb_blogswhereblogid = 1;
12、在提交苹果审核时,遇到哪些问题被拒绝,对于被拒绝的问题是如何处理的。
对于笔者而言,所提交过的app还没有被拒绝过。不过在笔者所维护的几个群里经常有朋友们问到相关被拒绝的解决办法。幸好还懂一点点英文,还能帮助他们翻译翻译苹果反馈的被拒原因及所担的建议。
这里只列出几种最常见的被拒原因:
在这个夜晚,所有答案都是笔者花了大量的时间来整理出来的,且看且珍惜吧!如果所提供的参考答案与您的想法有所不同,欢迎到群里来交流,也可以直接在评论中反馈。
夜深人静了~
关注 | 账号 | 备注 |
---|---|---|
Swift/ObjC技术群一 | 324400294 | 群一若已满,请申请群二 |
Swift/ObjC技术群二 | 494669518 | 群二若已满,请申请群三 |
Swift/ObjC技术群三 | 461252383 | 群三若已满,会有提示信息 |
关注微信公众号 | iOSDevShares | 关注微信公众号,会定期地推送好文章 |
关注新浪微博账号 | 标哥Jacky | 关注微博,每次发布文章都会分享到新浪微博 |
关注标哥的GitHub | CoderJackyHuang | 这里有很多的Demo和开源组件 |
关于我 | 进一步了解标哥 | 如果觉得文章对您很有帮助,可捐助我! |
版权声明:本文为【标哥的技术博客】原创出品,欢迎转载,转载时请注明出处!