文章转载自:
招聘高峰期来了,大家都非常积极地准备着跳槽,那么去一家公司面试就会有一堆新鲜的问题,可能不会,也可能会,但是了解不够深。本篇文章为群里的小伙伴们去宝库公司的笔试题,由笔者整理并提供笔者个人参考答案。注意,仅供参考,不代表绝对正确。
参考答案不唯一,大家可以根据自己的理解回答,没有必要跟笔者的一样。参考笔者的答案,也许给你带来灵感!
例如:
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);
|
1
2
3
|
dispatch_queue_t q = dispatch_get_global_queue(dispatch_queue_priority_default, 0);
|
1
2
3
|
dispatch_queue_t q = dispatch_get_main_queue();
|
上面这四种是针对gcd来讲的,串行队列中的任务只能一个个地执行,在前一个没有执行完毕之前,下一个只能等待。并行队列可以并发地执行任务,因此多个任务之间执行的顺序不能确定,当添加一个新的任务时,交由gcd来判断是否要创建新的新的线程。
大家可以阅读图片多线程,也许更明了:
参考答案:
内存管理准则:谁强引用过,谁就在不再使用时使引用计数减一。
对于内存的使用和优化常见的有以下方面:
参考答案:
plist是ios系统中特有的文件格式。我们常用的nsuserdefaults偏好设置实质上就是plist文件操作。plist文件是用来持久化存储数据的。
我们通常使用它来存储偏好设置,以及那些少量的、数组结构比较复杂的不适合存储数据库的数据。比如,我们要存储全国城市名称和id,那么我们要优先选择plist直接持久化存储,因为更简单。
参考答案:
详情请阅读:
参考答案:
数据库的简单操作,还是会的,大学可没白学。
增:
1
2
3
|
insert into tb_blogs(name, url) values('标哥的技术博客','http://www.henishuo.com');
|
删:
1
2
3
|
delete from tb_blogs where blogid = 1;
|
改:
1
2
3
|
update tb_blogs set url = 'www.henishuo.com' where blogid = 1;
|
查:
1
2
3
|
select name, url from tb_blogs where blogid = 1;
|
12、在提交苹果审核时,遇到哪些问题被拒绝,对于被拒绝的问题是如何处理的。
参考答案:
对于笔者而言,所提交过的app还没有被拒绝过。不过在笔者所维护的几个群里经常有朋友们问到相关被拒绝的解决办法。幸好还懂一点点英文,还能帮助他们翻译翻译苹果反馈的被拒原因及所担的建议。
这里只列出几种最常见的被拒原因:
在这个夜晚,所有答案都是笔者花了大量的时间来整理出来的,且看且珍惜吧!
文章转载自:
如对本文有疑问, 点击进行留言回复!!
iOS14Beta3续航怎么样 iOS14Beta3续航能力介绍
iOS14Beta3稳定性怎么样 iOS14Beta3升级建议介绍
uniapp编写H5界面放入IOS全面屏原生导航栏盖住H5界面
游戏APP解决方案,8月1日起下架无版号ios手游的出路在哪?
网友评论