ChenYilong / ChenYilong/iOSInterviewQuestions

iTeaTime(技术清谈)【005期】【代号:变形金刚-擎天柱】

Open
#119 0 comments 0 reactions 0 assignees View on GitHub
note wiki
Dominant language
Swift
Stars
9.5k
Forks
2.8k
PR merge metrics
No merged PRs in 30d

Description

# [iTeaTime(技术清谈)]( https://github.com/ChenYilong/iOSInterviewQuestions/issues/127)【005期】【代号:变形金刚-擎天柱】

----------

![](http://ww4.sinaimg.cn/large/006tNc79ly1g4wvr2s23oj31sr0q242m.jpg)

----------

出题:微博@iOS程序犭袁

本期代号:变形金刚-擎天柱

----------









----------

![enter image description here](http://getwallpapers.com/wallpaper/full/6/b/8/1522210-widescreen-optimus-prime-vs-megatron-wallpaper-1920x1080.jpg)

从未被讨论过的问题,不公布答案。顺延到下一期。只要讨论过,答案不正确也会提供答案。下面将讨论过的问题公布答案:

今天会从没有修改马甲(马甲格式为【昵称+地区/公司/职位】)的同学中随机抽取几位幸运儿,送出飞机票若干张。待会儿我出题,回答任意一道即可,别人回答过的,不能再回答,交卷时间为出题日第二天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都不能被拉伸或者压缩:【 难度🌟🌟🌟】【出题人:记忆、搁浅】

![Pasted Graphic 3](https://user-images.githubusercontent.com/2911921/57273314-df622780-70c9-11e9-87cf-172c0d8d02f3.jpg)

效果图见:

![Pasted Graphic 4](https://user-images.githubusercontent.com/2911921/57273320-e5f09f00-70c9-11e9-8d79-40bc1169ed08.jpg)

【答案】需要给label1设置一下优先级,设置平行的的Content compression resistance priority。

系统 Autolayout 参考 :
- [**Apple-Documentation-UIView-setContentHuggingPriority(_:for:)**]( https://developer.apple.com/documentation/uikit/uiview/1622485-setcontenthuggingpriority )

Masonry 参考以下属性:

```Objective-C
static const MASLayoutPriority MASLayoutPriorityRequired = UILayoutPriorityRequired;
static const MASLayoutPriority MASLayoutPriorityDefaultHigh = UILayoutPriorityDefaultHigh;
```

图形化操作见以下动图:

![1557371233399](https://user-images.githubusercontent.com/2911921/57424621-dc427500-724a-11e9-93b3-1b29549a41e8.gif)

----------

4 【计算机常识】如果你一直在用GitLab开发,现在公司要切换到GitHub开发,可以两个邮箱不一样,你自己的提交记录,GitHub无法识别,签到数据也没了,请问如何让GitHub能够识别你整个仓库中所有的提交记录。【难度🌟🌟】【出题人 微博@iOS程序犭袁】
【注】“签到数据”指的是下图:
![image](https://user-images.githubusercontent.com/2911921/57293454-5d88f300-70f7-11e9-9818-7325622aaf15.png)
【答案】参考:
- [《 Git 实战手册(一): 批量修改log中的提交信息》]( https://www.cnblogs.com/geyouneihan/p/9600721.html )
- [《使用git迁移git项目并保留提交记录》]( https://yq.aliyun.com/articles/675073?utm_content=m_1000028591 )

----------

Posted by [微博@iOS程序犭袁](http://weibo.com/luohanchenyilong/)
原创文章,版权声明:自由转载-非商用-非衍生-保持署名 | [Creative Commons BY-NC-ND 3.0](http://creativecommons.org/licenses/by-nc-nd/3.0/deed.zh)

----------


One more thing...



【非礼勿视】以下为彩蛋部分,建议28岁以上男性观看

----------

![image](https://user-images.githubusercontent.com/2911921/57273677-4cc28800-70cb-11e9-8000-7ed13889ade4.png)

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.