文章转载自:http://www.pythonheidong.com/blog/article/3337/
招聘高峰期来了,大家都非常积极地准备着跳槽,那么去一家公司面试就会有一堆新鲜的问题,可能不会,也可能会,但是了解不够深。本篇文章为群里的小伙伴们去宝库公司的笔试题,由笔者整理并提供笔者个人参考答案。注意,仅供参考,不代表绝对正确。
参考答案不唯一,大家可以根据自己的理解回答,没有必要跟笔者的一样。参考笔者的答案,也许给你带来灵感!
例如:
1
2 3 |
NSArray *array = @[@"12-11", @"12-11", @"12-11", @"12-12", @"12-13", @"12-14"];
|
参考答案:
1
2 3 4 5 6 7 8 9 10 11 12 |
NSMutableArray *resultArray = [[NSMutableArray alloc] initWithCapacity:array.count]; // 外层一个循环 for (NSString *item in array) { // 调用-containsObject:本质也是要循环去判断,因此本质上是双层遍历 // 时间复杂度为O ( n^2 )而不是O (n) if (![resultArray containsObject:item]) { [resultArray addObject:item]; } } NSLog(@"resultArray: %@", resultArray);
|
补充:原来集合操作可以通过valueForKeyPath来实现的,去重可以一行代码实现:
1
2 3 4 |
array = [array valueForKeyPath:@"@distinctUnionOfObjects.self"]; NSLog(@"%@", array);
|
但是返回的结果是无序的,与原来的顺序不同。大家可以阅读:Collection Operators
1
2 3 4 5 6 7 8 |
NSMutableDictionary *resultDict = [[NSMutableDictionary alloc] initWithCapacity:array.count]; for (NSString *item in array) { [resultDict setObject:item forKey:item]; } NSArray *resultArray = resultDict.allValues; NSLog(@"%@", resultArray);
|
如果需要按照原来的升序排序,可以这样:
1
2 3 4 5 6 7 8 |
resultArray = [resultArray sortedArrayUsingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2) { NSString *item1 = obj1; NSString *item2 = obj2; return [item1 compare:item2 options:NSLiteralSearch]; }]; NSLog(@"%@", resultArray);
|
1
2 3 4 5 |
NSSet *set = [NSSet setWithArray:array]; NSArray *resultArray = [set allObjects]; NSLog(@"%@", resultArray);
|
如果要求有序,那就得排序,比如这里要升序排序:
1
2 3 4 5 6 7 8 |
resultArray = [resultArray sortedArrayUsingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2) { NSString *item1 = obj1; NSString *item2 = obj2; return [item1 compare:item2 options:NSLiteralSearch]; }]; NSLog(@"%@", resultArray);
|
补充:
一直没有使用过有序集合,网友们反馈到可以直接使用有序集合,感谢大家:
1
2 3 4 |
NSOrderedSet *set = [NSOrderedSet orderedSetWithArray:array]; NSLog(@"%@", set.array);
|
以上三种方法是笔者所能想到的办法。如果大家有更好的办法,欢迎在评论中指出。
1
2 3 |
NSArray、NSSet、NSDictionary与NSMutableArray、NSMutableSet、NSMutableDictionary
|
参考答案:
特性:
作用:
参考答案:
笔者倾向于纯代码开发,所以所提供的参考答案可能具有一定的个人感情,不过还是给大家说说笔者的想法。
优点:
缺点:
2015-04-10格式化日期转为NSDate类型
参考答案:
1
2 3 4 5 6 7 8 9 |
NSString *timeStr = @"2015-04-10"; NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; formatter.dateFormat = @"yyyy-MM-dd"; formatter.timeZone = [NSTimeZone defaultTimeZone]; NSDate *date = [formatter dateFromString:timeStr]; // 2015-04-09 16:00:00 +0000 NSLog(@"%@", date);
|
参考答案:
在iOS中,通常是通常UIWebView来实现,当然在iOS8以后可以使用WKWebView来实现.有以下几种实现方法:
1
2 3 |
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType;
|
优缺点:
参考答案:
首先,我们要明确一点,同步和异步都是在线程中使用的。在iOS开发中,比如网络请求数据时,若使用同步请求,则只有请求成功或者请求失败得到响应返回后,才能继续往下走,也就是才能访问其它资源(会阻塞了线程)。网络请求数据异步请求时,不会阻塞线程,在调用请求后,可以继续往下执行,而不用等请求有结果才能继续。
区别:
参考答案:
在iOS中队列分为以下几种:
1
2 3 |
dispatch_queue_t q = dispatch_queue_create("...", DISPATCH_QUEUE_SERIAL);
|
1
2 3 |
dispatch_queue_t q = dispatch_queue_create("......", DISPATCH_QUEUE_CONCURRENT);
|
参与评论
手机查看
返回顶部