有了解哪些设计模式?

能接触到的常见问法:
项目中有用到什么设计模式?(前端更多点)
重构使用了什么设计模式?(如果你项目强调了重构一般会问)
说说对 XX 模式的理解?(个人接触过的是单例和工厂,这两个比较多)
有接触到哪些?实际用到过哪些?(通用)

除了这些,还有一些不常见的进阶和基础问法,这些直接在下面整理
--

设计模式这个主题还挺玄乎的,个人直观体验是,自己日常实习那段时间问得挺频繁的,可能是因为没啥好问的。
找暑期实习的时候就问的少了。可能设计模式的定位还真是,个人体验也是,没有大量实践注定没有深刻的理解,对校招生的要求不会那么高吧。
所以我感觉一般策略还是要强调,能想到什么说什么,展示自己对设计模式有一个基本理解,有刻意去考虑使用设计模式这种感受。

作为面试 fw 就不多说了,这里就自己能想到什么就整理什么呢。参考价值不大,可能更多的还是要结合自己项目。
--

OOP 有哪些设计原则?如何理解?(这个可能 cpp 问的比较多,go 倒是不常问)
● 封装。定义是我们通过向对象传递消息来直接执行方法,隐藏方法细节,而不是面向过程那样直接展示方法。这个基础上扩展,才有了私有方法变量这种进一步的封装。
● 继承。继承就是字面继承一个类是属性方法,实现复用和多态。
● 多态(比较常问),定义是对象在不同条件在统一接口下有不同的行为。go 主要通过接口实现,java 和 cpp 也都是分解通过继承和接口/虚函数实现。
  ○ cpp 函数重载是一种「编译时多态」,不太符合传统理念上的多态。
  ○ 策略模式的设计模式,同一对象在不同环境下使用不同算法,就是一种常见的多态设计。比如 orm 框架适配多种存储策略,cpp 排序 stl 适配多种排序算法。

如何理解设计模式和设计原则?
● 区别简单来说,设计原则是一些比较抽象的知道原则和方向,设计模式则是一些具体的时间。
● 设计模式分为创建型、结构型、行为型三种。
● 五大设计原则 SOLID:
  ○ 单一职责:一个类只负责一个功能,具体一般也扩展到一个模块只负责一类功能,一个函数只负责一件事情。
  ○ 开闭:对扩展开放,对修改关闭。这个一旦沾了企业开发确实就接触的挺多,说到这个想起我上段实习就是上去就把代码给重构了被臭骂了一顿。总之这个的意思简单说现有的代码不应该乱改,影响稳定影响线上功能要回归测试。好的做法是,有接口留够扩展性在那(这个需要之前设计的人有实力),你的想做的新的需求应该是在现有的基础上去做扩展。还有一个常见的例子是,假设你有一个新需求,你现在有一个线上接口可以通过加参数来实现,这种情况更好的做法是另起一个新接口,因为你改改逻辑就顶天了,改函数签名影响可能就比预想的要大很多了。
  ○ 里氏替换:子类必须能替换父类,保持行为不变。这个 go 里边用不到。覆写不违反 lsp 原则,只要不改变预期行为。
  ○ 接口隔离:客户端不应该知道他不知道的功能。在 go 里面能考虑的地方还挺多的。首先接口设计上,接口要尽量小,去发现接口而不是事先创造接口。其次,go 里面接口独特的机制是隐式实现,所以双端同时使用接口不会有循环依赖问题,所以我们常见的一种实现是服务端负责完整抽象,客户端单独做他的部分抽象。这个就是经常说的,在 go 里面“避免完成生产侧的接口”
  ○ 依赖倒置:定义是上层不应该依赖下层,而都应该依赖抽象。抽象不依赖细节,细节以应该依赖抽象。设计目的是为了创造耦合性低的依赖关系,所以 DIP 往简单了说就是解耦。此外控制反转,IoC,一种具体实现 DIP 的设计模式,不手动控制对象把控制权交给容器或者框架,其实反面例子就是面向过程的手动控制对象的创建、行动相关操作。依赖注入DI,一个具体的行为,也可以说 IoC 的实现方法之一但是不只是在 ioc 里面用到,就是把对象直接作为参数传入另一个流程的一个写法而已,例子有很多,比如 vue 里边就可以注入全局变量来解决深参数传递的问题。
● 五原则回顾,开闭和依赖倒置比较常问。这两个是有点像的,不过区别也很明显,虽然都可以借助接口实现,不过一个目的是扩展一个目的是为了解耦。

常用的几个设计模式?
● 工厂:一些定义和典型实现是,专门用一个工厂类来封装创建对象的逻辑,类的创建延迟到子类。好处是封装、低耦合(创建的逻辑是独立的内聚的)、便于扩展(要增加新的创建方法的话,直接替换掉原来的工厂方法调用就好了)。
● 单例:目的是全局就是只能只应该唯一实例,否则并发问题或者管理混乱。例子像是 logger,confger,连接池,cache。然后恶汉懒汉 doublecheck 确保能单例实例化。

你 go 项目里会用到设计模式?(Java 废物,Java 那块的 aop,ddd 就不整理了)
不多说,直接提供例子,这种一般你没实际写过,能答出来面试官也不会感兴趣,所以其实一些过于抽象的模式,像是代理、桥接也就不必说了
● NewXXX()是一种简单工厂模式
● sync.Once()实现单例
● 注册模式:实现全局 init 对象到一个 map 里
● 责任链模式,我们不管请求最后会怎么样,没法解决的问题往下传,“丢锅”:gin 的中间件机制。
● WithOption、可变参数、函数闭包 实现 选项模式 https://goplay.tools/snippet/xpnL6BhCsJa
● 建造者模式就是比方我们用个 resty类似的 http 库,来发一个请求 setHeader
● 策略模式比较常见,interface 多种算法实现都是策略模式,比方说多种灰度方案限流方案数据库连接方案

偶见的设计原则开放性场景题:假如有一个历史包袱很重的项目丢给你重构,你会考虑到哪些设计原则和设计模式?(这个很考验积累了,我能做到的只能是分享这个问题和目前的浅见解了,欢迎探讨)
● 没话说就是上面的原则逐个说一遍就好了
● 肯定要强调的是模块化,高内聚低耦合,原因能想到的也围绕一些常用的点说:可维护性、复用性、扩展性、稳定性、简单性。有点八股性质了,具体还是看经验结合例子说。不过能想到这些角度感觉也是有意义的。

--

卡着实习 ddl 昨天实在没写完,精力管理确实重要。决策消耗心智大概到极限了,优化空间在于把实习的事情看得更轻一点,都打算跑了根本不用在意那么多。不过实际做起来还是很难协调,实操性大一点的地方还是在于尽量把排期铺开,分不出时间就延期。

中断一天,重新开始

#每天一篇简单博客 day2-1 
(个人打卡,欢迎监督
全部评论
1 回复 分享
发布于 2024-08-30 23:07 江苏

相关推荐

测试开发面经12.9一面自我介绍项目经历:围绕了项目经历进行提问,比如 具体是做了哪一块,然后就介绍具体做了什么,优化了什么,有具体测试出优化了多少吗。然后根据简历上写的缓存一致性又深入聊了,然后就问我先更新数据库,再删除缓存,这一个是怎么做的,然后如果让我测试这个场景,会怎么设计测试用例。实习经历:然后就围绕实习经历进行提问,怎么找的这个实习,然后就介绍自己印象最深刻的一个项目,以及是怎么测试的,然后就是根据这个不断深挖,深问,问了功能测试是怎么测的,什么是埋点测试和接口测试,具体是怎么做的,怎么决定模拟并发的时候的并发数。游戏经历:根据游戏经历开始问,然后就问最近玩的游戏是什么,或者最想分享的一个游戏是什么,然后我就选择聊了英雄联盟,然后就开始聊了大概十分钟,比如:为什么是觉得想聊英雄联盟?你玩什么位置比较多?为什么喜欢玩打野?你对于打野这个位置的理解是什么?你最喜欢的一个英雄是什么?(我说了蜘蛛)然后就问 你开局的思路是什么,你觉得玩蜘蛛是怎么赢游戏的,节奏是怎么样的如果你是设计师,你会如何设计来加强蜘蛛的打团能力。你觉得英雄联盟这游戏是怎么样的一个状态,未来会是怎么样的?你作为策划你会怎么做来让游戏更多人玩?其他问题:你的获奖经历,可以聊聊你蓝桥杯的获奖是怎么样准备的吗?其中遇到了什么困难?你后续有升学的打算吗?你有别的offer吗?反问:后续流程是怎么样的?游戏测试和软件测试有什么不同吗?体验很好,聊得很开心12.12二面:自我介绍然后围绕了实习经历进行非常细致的提问实习经历:介绍实习做了什么?具体什么业务排行榜这个是怎么测试的?封榜的逻辑是怎么设计的?发奖的逻辑是怎么样的,怎么设计测试用例,要考虑哪些?排行榜具体设计到的数据库表是怎么设计的?都有什么字段?之前那个公司的实习的薪资怎么样?转正的待遇如何?工作强度你觉得怎么样?设计测试用例的时候,leader帮你检查的时候主要是检查或者补充什么部分?有遗漏过什么吗?你觉得测试和测开有什么区别?注重的点是什么?你是怎么理解测试这个岗位,以及为什么想要来干测试?你对于自动化测试怎么理解?你会帮你前公司设计哪些提效的测试工具?如何实现?(聊了很久)如果版本大改,页面变动很大,那自动化的代码不能复用了,你如何处理?如何减小影响?游戏经历:喜欢玩什么游戏?(我答了英雄联盟)对于打野的理解怎么安排前期的野区路线和gank路线野核和节奏型打野这两种类型的打野,你觉得什么因素会影响他们的强弱。面试官问的特别细致,也会给出反应和回应,也会给出一些方向的提示,体验很好网易游戏(互娱)2026届实习生培养项目,2月25日震撼启航!️ 面向26届追梦人,你准备好了吗?如果你是2025年9月至2026年8月间毕业的闪耀新星,这将是你不容错过的舞台!📍招聘城市:广州、杭州、上海招聘岗位:涵盖5大类近40个岗位校招C位提前锁定、SSR级培训资源、一流的实习福利等你来~投递传送门:https://game.campus.163.com/m/home?st=YTE1ZTlhNDUtNmNlMC00ZTI5LWE2ZjUtZGMxNTNhNDhjNzlm内推码:【9QcfNR】内推码可帮助大家优先筛选或直通笔试!!(大家使用这个内推码投递,我才可以帮大家查询进度,跟进流程~) #内推码# #校招# #暑期实习# #内推# #网易互娱#
点赞 评论 收藏
分享
评论
3
28
分享

创作者周榜

更多
牛客网
牛客企业服务