写点什么

坚持 ARTS(week-1)

用户头像
王钰淇
关注
发布于: 2020 年 05 月 25 日
坚持ARTS(week-1)

Algorithm

  • 题目:355. 设计推特

  • 描述:设计一个简化版的推特(Twitter),可以让用户实现发送推文,关注/取消关注其他用户,能够看见关注人(包括自己)的最近十条推文。你的设计需要支持以下的几个功能:

  • postTweet(userId, tweetId): 创建一条新的推文

  • getNewsFeed(userId): 检索最近的十条推文。每个推文都必须是由此用户关注的人或者是用户自己发出的。推文必须按照时间顺序由最近的开始排序。

  • follow(followerId, followeeId): 关注一个用户

  • unfollow(followerId, followeeId): 取消关注一个用户

  • 示例:

  • 题解:

class Twitter {
public:
vector<int> vecTwitters;
vector<int> vecUserToTwitters;
map<int, set<int>> mapFollowers;
/** Initialize your data structure here. */
Twitter() {
}
/** Compose a new tweet. */
void postTweet(int userId, int tweetId) {
vecTwitters.insert(vecTwitters.begin(), tweetId);
vecUserToTwitters.insert(vecUserToTwitters.begin(), userId);
}
/** Retrieve the 10 most recent tweet ids in the user's news feed. Each item in the news feed must be posted by users who the user followed or by the user herself. Tweets must be ordered from most recent to least recent. */
vector<int> getNewsFeed(int userId) {
vector<int> newsFeed;
for(int i = 0; i < vecTwitters.size(); ++i)
{
if(10 == newsFeed.size())
break;
if(vecUserToTwitters[i] == userId)
{
newsFeed.push_back(vecTwitters[i]);
}
set<int> setFollower = mapFollowers[userId];
if(setFollower.find(vecUserToTwitters[i]) != setFollower.end())
{
newsFeed.push_back(vecTwitters[i]);
}

}
return newsFeed;
}
/** Follower follows a followee. If the operation is invalid, it should be a no-op. */
void follow(int followerId, int followeeId) {
if(followerId != followeeId)
mapFollowers[followerId].insert(followeeId);
}
/** Follower unfollows a followee. If the operation is invalid, it should be a no-op. */
void unfollow(int followerId, int followeeId) {
if(mapFollowers[followerId].find(followeeId) != mapFollowers[followerId].end())
{
mapFollowers[followerId].erase(followeeId);
}
}
};



Review

文章:Glasses Equipped With Facial Recognition Are Coming

链接:https://onezero.medium.com/glasses-equipped-with-facial-recognition-are-coming-ac2ccfe2795a

内容介绍:讲述了有关面部识别技术的应用,包括与耳机接口的结合和智能穿戴设备上。面部识别技术已经越来越成熟,而且在很多特定领域有着广泛的应用,例如边境巡逻,急救人员,零售,酒店和银行。但同时,面部识别的推广也有着一定的争论,主要是法律和隐私相关的内容,但总体来看,这仍然是一个不可逆的发展过程,只不过需要考虑得更全面。可以想象,在不久的将来,科幻片中通过眼镜识人的场景将成为现实。

Tips

  • 架构设计中的多态和依赖反转

在多态出现之前,源代码层面的依赖不可避免要跟随程序的控制流,如下图:

这就导致:系统行为决定控制流,而控制流决定源代码依赖,从而使得软件架构方面别无选择。

多态出现之后,我们可以通过接口继承实现控制流和代码依赖方向上的相反,如下图:

我们称之为依赖反转,这种反转对架构设计的影响是巨大的。

通过这种方式,架构师可以完全控制系统中所有源代码的依赖关系,而不再收到系统控制流的限制,例如可以让数据库模块和用户界面模块都依赖于业务逻辑模块,如下图:

这样,业务逻辑模块可以独立于用户界面和数据库来进行部署,我们对用户界面和数据库进行的任何修改都不会影响到业务逻辑模块,这些组件都可以被分别、独立的部署。

简单来说,当某个模块需要代码修改,仅仅需要重新部署该模块,不需要更改其他模块,这就是独立部署能力,更进一步,所有用友独立部署能力的模块可以让不同开发团队进行并行开发,也就是拥有了独立开发的能力。

Share

  • 文章:张一鸣:越是高级人才,越要看一些基本素质

  • 链接:https://www.lieyunwang.com/archives/466112

  • 感受:选择越高级影响越大的人才越要看一些基本素质:理性、逻辑、修养、企图心、自我控制力。这与我以往的认知有些相悖,总以为一个高级人才需要在某一专业领域达到极高的高度,同时可能还要有一定的机缘,但其实往往高级人才更看重基本素质的养成。牢记:“理性务实于外,感性浪漫于内”是一种修养;逻辑很重要的一个关键点是“别装逼”;修养是什么意思,即待人处事的正确态度;谋事不求易成,具备强烈的成功动机和韧性才能成功;优秀的自我控制力,帮助我们更以目标为导向,想要获得这个能力,需要我们反复自我修炼。



发布于: 2020 年 05 月 25 日阅读数: 72
用户头像

王钰淇

关注

少花时间在说服别人的事上 2018.03.04 加入

跋涉中的C++程序员

评论 (2 条评论)

发布
用户头像
Tips 我觉得要根据实际的情况来,你觉得呢?
2020 年 05 月 25 日 12:49
回复
你说的对,肯定是要根据实际情况进行选择的。依赖反转不是万能的,也不是所有的依赖关系都需要反转,它只是一种帮助我们实现灵活系统架构的手段,在满足可理解性、可维护性的基础上,尽量满足实现层依赖抽象层,最终目的都是为了架构的稳定和易扩展。
2020 年 05 月 25 日 13:58
回复
没有更多了
坚持ARTS(week-1)