V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zxc1234
V2EX  ›  程序员

关于面试问设计模式

  •  
  •   zxc1234 · 2020-04-18 10:58:47 +08:00 · 5531 次点击
    这是一个创建于 1680 天前的主题,其中的信息可能已经有所发展或是发生改变。

    面试官问,工作中用到哪些设计模式 我:单例模式用的比较多,用内部类实现 面试官问:还有呢 我:......(尴尬,没有了)

    如果面试官问知道哪些设计模式,那还可以继续聊得下去,但是设计模式在工作的中应用就。。。。 想问下你们工作中都有用到哪些啊,我这边怎么感觉工作中用的不多啊

    35 条回复    2020-04-20 19:04:43 +08:00
    janxin
        1
    janxin  
       2020-04-18 11:04:53 +08:00
    比较多的单例,工厂,建造者,组合,装饰器,适配器,代理

    这些应该基本上经常会用的吧
    twoconk
        2
    twoconk  
       2020-04-18 11:07:51 +08:00   ❤️ 1
    实际工作中可能需要经过多次刻意练习使用,才能回答好这个问题,不然确实是不好回答
    wushigejiajia01
        3
    wushigejiajia01  
       2020-04-18 11:08:29 +08:00 via Android
    单例,工厂,策略,代理
    MinQ
        4
    MinQ  
       2020-04-18 11:56:18 +08:00 via Android
    设计模式?啥是设计模式?
    Cmdhelp
        5
    Cmdhelp  
       2020-04-18 12:03:26 +08:00   ❤️ 1
    用好了提高代码结构,用不好 写出四不像,画蛇添足,,,,,,,作为一名老咸鱼,用到的设计模式也挺少
    geekvcn
        6
    geekvcn  
       2020-04-18 12:10:24 +08:00
    入门知识真的很便宜,都有明码标价
    https://item.jd.com/10079261.html
    Junh
        7
    Junh  
       2020-04-18 12:10:54 +08:00 via iPhone
    我也被问到了,能说出几个,不过问我观察者模式和发布订阅者模式的区别的时候懵了(因为印象中好像没啥区别,后来查资料知道是有些区别的),我面的小公司,前端
    kmyzzy
        8
    kmyzzy  
       2020-04-18 13:07:42 +08:00   ❤️ 1
    要我我就直接说,这些没卵用
    iFlicker
        9
    iFlicker  
       2020-04-18 13:32:58 +08:00 via Android
    用到的多啊。。。单例 工厂 观察者 代理 建造者
    alamaya
        10
    alamaya  
       2020-04-18 13:38:27 +08:00
    不如反问一下面试官,为啥 java 有这么多设计模式
    findmyself
        11
    findmyself  
       2020-04-18 13:39:23 +08:00 via iPhone
    @kmyzzy 可以用于扯淡
    wellsc
        12
    wellsc  
       2020-04-18 13:41:45 +08:00 via Android
    货物崇拜编程
    guaiZhang
        13
    guaiZhang  
       2020-04-18 13:48:27 +08:00
    @kmyzzy 不然怎么造火箭
    aguesuka
        14
    aguesuka  
       2020-04-18 14:05:34 +08:00
    spring-beans,单例工厂,spring-mvc mvc 过滤器,spring-aop 代理。把用到的框架的设计模式讲出来就行
    xingheng
        15
    xingheng  
       2020-04-18 14:05:58 +08:00   ❤️ 6
    个人认为你只回答了一个“单例用的比较多”确实是减分的,首先“单例”并不是一个很好的常用的设计模式,不应该被大量使用,这个问题在 SO 上有一个很大关注度的讨论,可以去看看。

    了解设计模式是有必要的,它跟语言和框架都有关系,好的框架大都是在主流的设计模式上建立起来的,设计模式在通用性和测试的问题上会有比较大的帮助。

    至于有哪些设计模式,我觉得你应该搜索“<lang> design patterns”,不同语言下结果会有一些差异。

    不用设计模式?单纯的面向过程式或者 OOP 是非常 ugly 的,其实很大程度上我觉得你已经用过一些了,只是不知道会有对应的名字而已。。。
    leafShimple
        16
    leafShimple  
       2020-04-18 15:09:40 +08:00
    = = 看了书 知道 我只能吹吹 我才用过 5 6 种,大部分遇见问题都是按照那种抽象一层或者几层的思路来解决问题
    useben
        17
    useben  
       2020-04-18 16:56:25 +08:00
    @janxin +1
    guyeu
        18
    guyeu  
       2020-04-18 16:56:51 +08:00
    vvvvww
        19
    vvvvww  
       2020-04-18 17:19:39 +08:00
    面试官可能更希望考察你对多态的理解和运用,而单例这种创建型的设计模式不太能体现到
    Jrue0011
        20
    Jrue0011  
       2020-04-18 17:22:49 +08:00
    工厂、策略、代理、门面、建造者、适配器、责任链,写企业应用的话倒是经常有用到。。。
    across
        21
    across  
       2020-04-18 17:23:37 +08:00
    是不是看书学的还是容易区分的。刚接触到的只会告诉你说这个模式代码或 UML 图结构是什么样的。
    实践要点是,什么时候用,什么时候不适合用。像上面有人提到,单例有很大的副作用。面试官挖深一点,完全可以问你,为了避免使用单例,还可以选用什么设计方案解决问题····
    nicebird
        22
    nicebird  
       2020-04-18 17:26:19 +08:00
    其实一般来说用过很多的,只是你没有识别出来。

    模式不是特意创造的,而是实践过程中总结的。
    zxc1234
        23
    zxc1234  
    OP
       2020-04-18 23:04:55 +08:00
    @xingheng 单例有什么缺点呢?怎么解决?还有,请问 SO 是什么?
    zxc1234
        24
    zxc1234  
    OP
       2020-04-18 23:06:38 +08:00
    @across 为什么要避免使用单例呢?不用单例,用什么呢?
    xingheng
        25
    xingheng  
       2020-04-18 23:35:15 +08:00
    across
        26
    across  
       2020-04-19 00:23:13 +08:00 via iPhone
    @zxc1234 第一次初始化时机也不确定,基本整个运行周期都不会销毁。 单例哪里都可以调用,很方便,代价就是多了后代码耦合就降不下来,容易被小白无脑调用。
    cheng6563
        27
    cheng6563  
       2020-04-19 03:48:01 +08:00 via Android
    语言不支持的功能就得靠设计模式补
    ciki
        28
    ciki  
       2020-04-19 08:11:49 +08:00   ❤️ 1
    说设计模式无用的,说明不适合在这个行业混下去,用过设计模式你会发现你的编码能力提升的不是一点两点
    laobingge
        29
    laobingge  
       2020-04-19 11:07:33 +08:00
    像 Spring 这类开发框架非常强大,极大地降低了我们的工作难度,可以像填空一样做应用开发。

    但是,这也让我们沦为生产线工人,每天都是 CRUD,知其然,但不知其所以然,最后就变成可以被轻易取代的人。

    因此,最好是去剖析我们常用的这些开发框架,那些经典的设计模式、架构模式都被封装在里面了。知道这些不仅有助于我们更好地使用框架,也可以提升我们的能力,有机会还可以自己做一些框架,有利于职业发展进阶。
    hitmanx
        30
    hitmanx  
       2020-04-19 12:11:18 +08:00
    如果这个代码不是你一个人写的话,很可能里面已经用了一些设计模式了,只是不熟悉设计模式本身的话你不知道这是个设计模式。

    我觉得这种感觉是最好的,你先熟悉了一个模式的用法,再去了解它的理论,很容易有恍然大悟的感觉。而看书的话基本上是倒过来的,这样理解容易流于表面:打开书,马冬梅,合起书,马什么梅
    skypyb
        31
    skypyb  
       2020-04-19 15:08:09 +08:00
    只要是稍微有一点点点点封装的项目, 别的花里胡哨的设计模式不说
    起码代理、建造者、门面、装饰器、模板方法、工厂、策略 这几个都是可以轻松找出来的吧?
    怎么可能会有没用过
    可能只是你看着别人写的代码不知道人家写的什么...
    zxc1234
        32
    zxc1234  
    OP
       2020-04-19 21:46:33 +08:00
    @vvvvww 如果是考查多态,是希望我说哪些设计模式呢
    zxc1234
        33
    zxc1234  
    OP
       2020-04-19 21:59:36 +08:00
    @iFlicker 项目中什么地方用到代理呢
    james122333
        34
    james122333  
       2020-04-20 09:13:09 +08:00 via Android
    会写的好的就是会写的好
    不会写的好的就不会写的好
    不懂一样可以写的精美
    重要的还是语言特性
    面向过程有面向过程的写法
    搞得文皱皱的不代表代码质量
    iFlicker
        35
    iFlicker  
       2020-04-20 19:04:43 +08:00
    @zxc1234 之前是写 SDK 的 ,负责的策略代理接口用过,还有个可参考的就是 Android Framework 中 ams
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1285 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 17:58 · PVG 01:58 · LAX 09:58 · JFK 12:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.