跳到主要内容

软件构建中层结构的设计原则--SOLID

· 阅读需 13 分钟
Jiajie Wu
一名崭新水手

SOLID是五条原则的英文首字母拼接,这五条原则指的是:

  • SRP:单一职责原则

    一个软件系统的最佳结构高度依赖于开发这个系统的组织的内部结构。这样,每个软件模块都有且只有一个需要被改变的理由。

  • OCP:开闭原则

    核心要素是:如果软件系统想要更容易被改变,那么其设计就必须允许新增代码来修改系统行为,而非只能靠修改原来的代码。

  • LSP:里氏替换原则

    如果想用可替换的组件来构建软件系统,那么这些组件就必须遵守同一个约定,以便让这些组件可以相互替换。

  • ISP:接口隔离原则

    这项设计原则主要告诫软件设计师应该在设计中避免不必要的依赖。

  • DIP:依赖反转原则

    该设计原则指出高层策略性的代码不应该依赖实现底层细节的代码,恰恰相反,那些实现底层细节的代码应该依赖高层策略性的代码。

SOLID原则的主要作用就是告诉我们如何将数据和函数组织成为类,以及如何将这些类链接起来成为程序。下面会分别介绍这五条设计的原则,以及给出相应的代码示例。

评论

Swin Transformer总结

· 阅读需 24 分钟
Jiajie Wu
一名崭新水手

Transformer在NLP领域大展身手,但将Transformer迁移到CV领域,会面临两个困难:

  1. 尺度问题:在一些CV任务中,比如目标检测问题,具有相同语义的实例由于尺度的问题,在图像中占据不同的像素规模,但目前基于Transformer的方法中,图像切片都是固定大小的。
  2. 计算复杂度:图像的特征张量展开成向量的方式计算自注意力这个过程,当图像分辨率稍大时,该过程的复杂度将变得难以忍受,因为此时的计算复杂度将与图像大小的平方成正比,这让Transformer在诸如语义分割的下游任务(需要像素级别的标签预测)中遇到困难。

为了解决上述问题,作者提出的Swin Transformer仅在局部窗口计算自注意力,并提出用Shifted windows得到特征的全局上下文信息(全局特征)。

评论

Transformer简介

· 阅读需 23 分钟
Jiajie Wu
一名崭新水手

Transformer是谷歌在2017年提出的一种基于注意力机制的神经网络架构,它在自然语言处理(NLP)领域取得了显著的成果,并逐渐在计算机视觉(CV)领域展现出强大的潜力。

Transformer

评论

【译】如何为自己思考

· 阅读需 31 分钟
Jiajie Wu
一名崭新水手

文章主要探讨了独立思考的重要性及其在不同职业领域中的表现。作者指出,某些工作领域(如科学研究、投资、创业等)要求个体不仅要有正确的观点,还要有新颖的见解,这需要与他人持有不同的思维方式。而在大多数其他类型的工作中,仅仅正确就足够了,不一定需要新颖性。文章强调了独立思考对于个人选择职业路径时的重要性,并讨论了如何培养和维持独立思考能力的方法,包括减少对传统观念的意识、选择与自己思想不同的人为伍、通过阅读历史和探索不同的话题来拓宽视野等。此外,文章还探讨了独立思考的三个组成部分:对真理的严谨态度、抗拒被告诉该怎样思考的欲望以及好奇心,并讨论了这些组成部分如何相互作用以促进新思想的产生。最后,作者提到了一些具体策略,如避免参与政治极端主义、扩大对真理严谨性的理解范围,以及认识到幽默感与独立思考之间的关联等,来帮助人们更好地培养和维持独立思考的能力。

评论

【译】Tim Urban:如何选择真正适合你的职业?

· 阅读需 114 分钟
Tim Urban
Tim Urban
Jiajie Wu
一名崭新水手

很多人在临终时回溯自己的一生,都充满着深深的后悔。很多后悔来自于童年,大部分人小时候并没有机会学习如何创造自己的路径。并且大多数人成年后依然不会创造自己的路径,所以才会在临终回顾时发现自己所走的路有多么荒诞。

那我们该如何选择真正适合自己的路,并走得尽兴呢?

作者Tim Urbun没有给出任何具体的建议,而是给我们提供了一个可行的思考框架。比起带有倾向性的建议,一个好的思维框架可以帮你摆脱社会的固有认知,选择真正适合自己的职业。

本文搬运自:参考答案Answers·2023-08-17

原文链接:How to Pick a Career (That Actually Fits You) — Wait But Why

评论

【译】信息茧房自救指南

· 阅读需 36 分钟
Michael Simmons
Michael Simmons
Jiajie Wu
一名崭新水手

“我们消费的信息和我们摄入的食物一样重要。它影响着我们的思想,我们的行为,我们如何理解自己在世界上的位置,以及我们如何理解他人“ ——Evan Williams,Twitter和Medium的联合创始人

现在,在世界的某个角落,有一段文字、一章内容或者一整本书籍,只要你读过,就有可能永久改变你的人生轨迹。我把这种内容称之为“突破性知识”。

在这个信息爆炸的时代,寻找并掌握突破性知识的能力,是我们需要学习的最重要的技能之一。我们每个人都曾有过类似的突破性体验。可能是父母、导师或老师说过的一句话,深深地改变了我们的思维和行为。或者是一本书,深深地震撼了我们的内心世界。(下文将这种书籍简称为“触动书”)。

评论

【译】如何启动google

· 阅读需 24 分钟
Paul Graham
Y Combinator 创始人
Jiajie Wu
一名崭新水手

这篇文章是Paul Graham在2024年3月给14至15岁青少年的一场演讲,主题是如何开始创业。文章强调了一个观点:避免传统就业的最佳方式是创办自己的公司。Paul分享了他个人的经验和见解,包括他与妻子共同创立的Y Combinator(一个帮助初创企业成长的机构)。

评论

评论

【译】设计者的品味

· 阅读需 42 分钟
Paul Graham
Y Combinator 创始人
Jiajie Wu
一名崭新水手
备注

本文摘抄自保罗·格雷厄姆(Paul Graham)的著作《黑客与画家》第九小节。

哥白尼不认同托勒密的体系,一个极其重要的原因是,他觉得托勒密提出的偏心等距点(equant)毫无美感……——托马斯·库恩,《哥白尼革命》

我们所有人都受到凯利·约翰逊的影响,狂热地相信外观优美的飞机一定会飞得同样漂亮。——本·里奇,《臭鼬计划》

美感是第一道关卡。丑陋的数学在世界上无法生存。——G.H.哈代,《一个数学家的辩白》

评论

一文简介C++智能指针

· 阅读需 14 分钟
Jiajie Wu
一名崭新水手

一般情况下,当我们在堆上申请内存和释放内存,我们需要显式调用new和delete。智能指针是自动化该过程的一种方式。智能指针意味着当你调用new时(甚至不用显式调用new),你不必调用delete。智能指针本质上是一个真正原始指针的包装器。当你创建一个智能指针时,它会调用new并为你分配内存。然后根据您使用的智能指针,内存将在某个时候自动释放。

评论

一文简介C++左/右值引用以及移动语义

· 阅读需 24 分钟
Jiajie Wu
一名崭新水手

C++中的左值引用(lvalue reference)和右值引用(rvalue reference),以及移动语义(move semantics),都是为了提高程序性能和效率而设计的语言特性。本文会介绍左值引用和右值引用的使用形式,以及基于右值引用的移动语义的使用样例。

本文的总结主要来自于cherno的C++系列视频,可以在bilibili观看翻译的中文版本。

神经元猫的个人空间-神经元猫个人主页-哔哩哔哩视频

评论

Markdown 语法指南

· 阅读需 10 分钟
Jiajie Wu
一名崭新水手

Markdown 是一种轻量级标记语言,它允许人们使用易读易写的纯文本格式编写文档,然后转换成有效的 HTML 文档。本文将系统地总结 Markdown 的各种语法用法,帮助你更好地掌握这个强大的文档编写工具。

评论