Open ChenYilong opened 5 years ago
出题:微博@iOS程序犭袁
本期代号:变形金刚-擎天柱
从未被讨论过的问题,不公布答案。顺延到下一期。只要讨论过,答案不正确也会提供答案。下面将讨论过的问题公布答案:
今天会从没有修改马甲(马甲格式为【昵称+地区/公司/职位】)的同学中随机抽取几位幸运儿,送出飞机票若干张。待会儿我出题,回答任意一道即可,别人回答过的,不能再回答,交卷时间为出题日第二天20点。因为是自己出的题,大部分网上没有答案。可以讨论,没点名同学,抢答正确后,请自觉补充同类型问题一道供点名同学回答。题目能够精准筛选非技术同学即可,不需要很难。
1 【问题】【算法】缓存操作进行优化的措施中,有没有迎合用户“喜旧厌新”的算法技巧,可谓是缓存界的“断舍离”算法?也即:那些过去经常被访问的,将来也很可能被访问,优先级提高。那些长时间不被访问的,直接删了就好。描述下算法的实现原理。给出工作中至少两个使用场景。【 难度🌟】【出题人 微博@iOS程序犭袁】 【答案】LRU彻汰策略,应用场景比如iOS的两个常用库:Lottie、YYCache。
2 【问题】【在IM开发中】app 接收到一个message,上层UI刷新一次,要求考虑到CPU和电量消耗,解决短时间内接收到很多条消息的问题。怎么解决?有几种方案?【出题人:远之²³³³-free zone-北】【 难度🌟🌟】 【答案】
方案一:利用联结(在异步线程上调用dispatch_source_merge_data后,就会执行 dispatch source 事先定义好的handler)、DISPATCH_SOURCE_TYPE_DATA_ADD,将刷新UI的工作拼接起来,短时间内做尽量少次数的刷新。
方案二:自己实现队列、确定一个合适的时间阈值,在阈值时间到达时、主动取消息或者被动接受消息,最后刷新UI,达到消息限流的作用。举例:假设我们消息的获取都是通过长连接推送过来的,而不是主动拉取的。可以用消息队列来做,消费者定期去队列取数据进行数据展示。 或者假设前一条 消息和后一条消息间隔只在0.2s以内,就可以认为是频繁收到消息。然后把这0.2s内的消息刷新相关操作,比如做个动画效果。
3 描述:如图label1在containerView上,containerView、label2在cell.contentView上 问题:label1与label2的字数不固定,需求是,无论label2字数多少,label1都不能被拉伸或者压缩:【 难度🌟🌟🌟】【出题人:记忆、搁浅】
效果图见:
【答案】需要给label1设置一下优先级,设置平行的的Content compression resistance priority。
系统 Autolayout 参考 :
Masonry 参考以下属性:
static const MASLayoutPriority MASLayoutPriorityRequired = UILayoutPriorityRequired; static const MASLayoutPriority MASLayoutPriorityDefaultHigh = UILayoutPriorityDefaultHigh;
图形化操作见以下动图:
4 【计算机常识】如果你一直在用GitLab开发,现在公司要切换到GitHub开发,可以两个邮箱不一样,你自己的提交记录,GitHub无法识别,签到数据也没了,请问如何让GitHub能够识别你整个仓库中所有的提交记录。【难度🌟🌟】【出题人 微博@iOS程序犭袁】 【注】“签到数据”指的是下图: 【答案】参考:
技术清谈,无话不谈。今天带来 iTeaTime(技术清谈)@Never-成都-太合乐动-iOS 的推荐:
编程专用字体:
brew cask install font-fira-code
Posted by Posted by 微博@iOS程序犭袁 & 公众号@iTeaTime技术清谈 原创文章,版权声明:自由转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0
----------
One more thing...
【非礼勿视】以下为彩蛋部分,建议28岁以上男性观看
iTeaTime(技术清谈)【005期】【代号:变形金刚-擎天柱】
出题:微博@iOS程序犭袁
本期代号:变形金刚-擎天柱
从未被讨论过的问题,不公布答案。顺延到下一期。只要讨论过,答案不正确也会提供答案。下面将讨论过的问题公布答案:
今天会从没有修改马甲(马甲格式为【昵称+地区/公司/职位】)的同学中随机抽取几位幸运儿,送出飞机票若干张。待会儿我出题,回答任意一道即可,别人回答过的,不能再回答,交卷时间为出题日第二天20点。因为是自己出的题,大部分网上没有答案。可以讨论,没点名同学,抢答正确后,请自觉补充同类型问题一道供点名同学回答。题目能够精准筛选非技术同学即可,不需要很难。
1 【问题】【算法】缓存操作进行优化的措施中,有没有迎合用户“喜旧厌新”的算法技巧,可谓是缓存界的“断舍离”算法?也即:那些过去经常被访问的,将来也很可能被访问,优先级提高。那些长时间不被访问的,直接删了就好。描述下算法的实现原理。给出工作中至少两个使用场景。【 难度🌟】【出题人 微博@iOS程序犭袁】 【答案】LRU彻汰策略,应用场景比如iOS的两个常用库:Lottie、YYCache。
2 【问题】【在IM开发中】app 接收到一个message,上层UI刷新一次,要求考虑到CPU和电量消耗,解决短时间内接收到很多条消息的问题。怎么解决?有几种方案?【出题人:远之²³³³-free zone-北】【 难度🌟🌟】 【答案】
方案一:利用联结(在异步线程上调用dispatch_source_merge_data后,就会执行 dispatch source 事先定义好的handler)、DISPATCH_SOURCE_TYPE_DATA_ADD,将刷新UI的工作拼接起来,短时间内做尽量少次数的刷新。
方案二:自己实现队列、确定一个合适的时间阈值,在阈值时间到达时、主动取消息或者被动接受消息,最后刷新UI,达到消息限流的作用。举例:假设我们消息的获取都是通过长连接推送过来的,而不是主动拉取的。可以用消息队列来做,消费者定期去队列取数据进行数据展示。 或者假设前一条 消息和后一条消息间隔只在0.2s以内,就可以认为是频繁收到消息。然后把这0.2s内的消息刷新相关操作,比如做个动画效果。
3 描述:如图label1在containerView上,containerView、label2在cell.contentView上 问题:label1与label2的字数不固定,需求是,无论label2字数多少,label1都不能被拉伸或者压缩:【 难度🌟🌟🌟】【出题人:记忆、搁浅】
效果图见:
【答案】需要给label1设置一下优先级,设置平行的的Content compression resistance priority。
系统 Autolayout 参考 :
Masonry 参考以下属性:
图形化操作见以下动图:
4 【计算机常识】如果你一直在用GitLab开发,现在公司要切换到GitHub开发,可以两个邮箱不一样,你自己的提交记录,GitHub无法识别,签到数据也没了,请问如何让GitHub能够识别你整个仓库中所有的提交记录。【难度🌟🌟】【出题人 微博@iOS程序犭袁】 【注】“签到数据”指的是下图: 【答案】参考:
无话不谈
技术清谈,无话不谈。今天带来 iTeaTime(技术清谈)@Never-成都-太合乐动-iOS 的推荐:
编程专用字体:
Posted by Posted by 微博@iOS程序犭袁 & 公众号@iTeaTime技术清谈 原创文章,版权声明:自由转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0
----------
One more thing...
【非礼勿视】以下为彩蛋部分,建议28岁以上男性观看
---------- ![image](https://user-images.githubusercontent.com/2911921/57273677-4cc28800-70cb-11e9-8000-7ed13889ade4.png)