1、设计模式
常用的设计模式分为三种,创建型模式、行为型模式、结构型模式。然后列举这些模式都有哪些一共有二十三种,面试官好像让我背完,我没说出来完。
主要询问了观察者模式、单例模式。
其中单例模式分为饿汉模式和懒汉模式。饿汉模式在初始化时实例一个全局对象,没有线程安全问题,懒汉模式在调用时初始化,有线程安全问题。
追问,懒汉模式的线程安全问题是什么?
当处于多线程状态下,多个线程会同时调用getInstance方法,导致多个线程读取,可能会导致创建多个实例。解决方案加锁、双重检查锁定、使用volatile关键字。
观察者模式:允许一个对象维护一组依赖他的对象,并在自身状态发生变化主动通知这些观察者。通常用于事件处理系统,确保对象之间的低耦合和高协作性。实现方式:定义观察者接口、创建具体观察者、定义主体接口、创建具体主题。
软件设计的基本原则:
- 开放封闭原则:软件实体应当对扩展开放,对修改关闭。
- 里氏替换原则:子类可以扩展父类的功能,但不能改变父类原有的功能。
- 依赖倒置原则:高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象
- 单一职责原则:核心就是控制类的粒度大小、将对象解耦、提高其内聚性。
- 接口隔离原则:约束接口、降低类对接口的依赖性
- 迪米特法则:最少知道原则。如果两个软件实体无须直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发该调用。
- 合成复用原则:尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现
什么是低耦合高内聚?
低耦合的设计意味着各个模块之间的相互依赖性降低,每个模块都应该尽可能独立。这样,当一个模块发生变化时,不会对其他模块产生太大影响,从而提高了系统的可维护性和可扩展性。高内聚则是指模块内部的各个元素都是紧密相关的,共同完成一个明确的功能。一个高内聚的模块应该只负责一项任务,这样不仅使得模块更加清晰,也使得代码更容易理解和维护。
什么是多态?
通俗说就是多种形态,同一个行为具有多个不同表现形式或形态的能力。
分为静态多态和动态多态。静态多态主要通过函数重载、运算符重载实现。动态多态主要通过虚函数表、接口类和抽象类实现。
什么是抽象类什么是接口类?
抽象类不能被直接实例化的类,通常为基类。至少一个函数是纯虚函数。可以带数据成员、非虚函数、构造函数、析构函数等。
接口类一种特殊的抽象类,所有成员函数都是纯虚函数,没有非静态数据成员,析构函数通常也留纯虚并在类外实现。
STL容器了解吗?栈与队列的区别
栈是先进后出,队列是先进先出。栈的应用场景:括号匹配、浏览器前进与后退和撤销操作。队列的应用:消息队列,适合按照顺序的输出的场景。
进程的通讯方式与线程的通讯方式
锁机制:
分为互斥锁和共享锁。简述一下应用场景。
debug与release的区别:
debug是给开发者的调试版本
window的消息机制:
进程是接收来自鼠标、键盘等其他消息都是通过消息队列进行传输的。
序列化与反序列化
序列化:把内存对象变成字节流;反序列化:字节流还原成内存对象。
定义:序列化就是将对象实例的状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化,它依据流重构对象。这两个过程结合起来,能够轻松地存储和数据传输。
场景
当任务事件与进度冲突
如何快速入门C#?
结论:
淘汰
940

被折叠的 条评论
为什么被折叠?



