当前位置: 首页 > news >正文

校招又临近了,怎么在面试中应对设计模式相关问题呢?

在这里插入图片描述

夏天开始了,那么夏天结束时的毕业季也不远了。毕业是个伤感、期待而又略带残酷的时节,就像蜜桃无论成熟与否都会在这个时间被采摘,如果毫无准备就踏入社会,就会……马上变成低级社畜。所以说还是要早点为了毕业找工作做点准备,不然等到毕业时间到来,就真的只剩心慌慌,不知道该怎么办了

01 | 准备

校招其实是对毕业生各方面的综合考量,其中包括基础知识、个人思维能力、临场反应能力等等。其中最重要的一点是实力才是硬道理,基础硬实力不过关,看再多“攻略”也无济于事,所以在前期准备阶段,首先要明确的一点就是夯实基础,然后才是针对性的扩展,最后就是调整好自己的心态,从容的面对每一场笔试面试

夯实基础

正所谓”万丈高楼平地起,一砖一瓦皆根基“,既然面试会问到设计模式,那么设计模式的基础(C++知识,操作系统)等也一定会同时出现,所以在学习设计模式之前,一定要先把基础给打好

  • C++基础:结合自己学习的过程以及群里老师的建议,总结如下学习/复习C++知识的方法

    1. 《C++ Primer 5》:入门经典之作,时间充裕的话可以过一遍,或者挑重点看(比如泛型百年城、继承于堕胎、模板与函数重载、C++11特性等)

    2. 《STL源码剖析》:面试C++岗位必问的内容,也是最近在群里老师提及并且自己也正打算看的内容,大概看了以下目录结构,对标设计模式的话就重点关注虚函数、多继承、虚继承的对象模式。看书觉得太烦躁的可以跟着小破站侯捷老师的课进行学习

  • 操作系统原理:设计模式中常遇到进程、线程、资源等相关问题,所以操作系统原理还是比较重要的

    1. 《UNIX环境高级编程》:系统编程的必读书籍,最近学习设计模式的时候也同时在看这本书中进程相关的知识模块,两者结合起来一起学习,效率更高

知识扩展

基础打好之后,也就保证了知识的基础深度,但是还欠缺知识的广度,也就是地基打好了,要开始盖楼了,比如现在要学的设计模式、之前学过的计算机网络编程等

  1. 设计模式:直接跟着老师的专栏《C++设计模式》进行学习,最好每一个类别的设计模式都自己动手执行一遍,照猫画虎也起码能跟着学到怎么画,纸上谈兵只会做无用功
    1. 《大话设计模式》:大话系列书籍,阅读起来还是很不错的,通俗易懂

  2. 计算机网络原理:我偏向于想做网络服务器方向的,所以就找书学了以下这块内容
    1. 《TCP/IP 详解 卷1》:深入理解TCP/IP协议栈的机制以其实现过程
    2. 《UNIX网络编程》:网络编程领域经典之作
    3. 《图解HTTP/图解TCP/IP》:图形化的方式描述协议栈的知识,通俗易懂

心态调整

心态也是面对各种问题的十分重要的一环,就像以前中学考试,小考十拿九稳,大考一上就慌,保持一个良好的心态,才能发挥自己本身的实力,甚至超常发挥。当然,这个阶段也要不断的夯实基础,可以多刷题,锻炼自己的解题能力,保证自己高度专注的精神力

在这里插入图片描述

02 | 热门

设计模式那么多!面试官会怎么问?_冯Jungle的博客-CSDN博客

参考上面老师的文章,以及问了一下面试过的朋友,整理了一下面试中可能会问到的与设计模式相关的问题以及解答

设计模式的种类?

设计模式分为三大类:创建型模式、结构型模式、行为型模式

  1. 创建型有种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式;

  2. 结构型有种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式;

  3. 行为型有十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式;

23种类型我目前也只学习了创建型模式,其他模式还没怎么看,所以到时候应该挑重点说,比如我得话就直接说”这23种类型中,我目前学习过的只有创建型模式,其他两类暂时还没有开始学习“,这样子就把面试官的重点扯到自己比较熟悉的模块上了

讲一下单例模式

单例模式是属于创建型模式中的应用十分广泛的一种,它的设计目的是保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享,简单来说就是在整个软件运行的生命周期里,单例模式保证一个类只能产生一个实例,确保该类的唯一实例性

  1. 单例模式的设计理念是什么?

主要为了解决一个全局使用的类被频繁的创建和销毁,浪费系统资源,防止多线程环境中资源使用异常导致系统信息错乱、崩溃的情况

  1. 构造函数等为什么设计为私有?除了私有还有没有其他实现方法?

    1. 为了禁止外部构造和析构,禁止外部拷贝和赋值,确保实例的唯一性。所以将构造函数和析构函数以及拷贝构造和赋值构造函数设置为private类型

    2. 第二个问题只找到了这样一句话:”标准的单例模式,构造函数是需要私有化的,但是单例模式是一种思想,代码模式设计的目的是为了服务于业务的,可能某些特俗场景下,需要外界使用构造函数“

  2. 单例对象为什么设计为static,什么时候初始化,什么时候销毁?

    1. 为什么是static?

      1. 通过静态的类方法(getInstance) 获取instance,该方法是静态方法,instance由该方法返回(被该方法使用),如果instance非静态,无法被getInstance调用;
      2. instance需要在调用getInstance时候被初始化,只有static的成员才能在没有创建对象时进行初始化。且类的静态成员在类第一次被使用时初始化后就不会再被初始化,保证了单例;
      3. static类型的instance存在静态存储区,每次调用时,都指向的同一个对象
    2. 什么时候初始化?
      初始化的情况分两种,对应单例模式中的懒汉式、饿汉式

      1. 懒汉式:在需要使用时再初始化
      2. 饿汉式:程序开始时就初始化
    3. 什么时候销毁?
      我的理解是:单例模式全局只有一个实例,反复个体Instance不会增加内存,不会造成内存溢出,程序退出时内存会被系统释放

  3. 懒汉模式和饿汉模式的实现,以及c++11后懒汉模式的实现
    参考前面的笔记什么是单例模式?

  4. 加锁式懒汉模式中的”双检锁“为什么两次判空?

    1. 第一次判空:验证是否创建对象,判断为了避免不必要的同步
    2. 第二次判空:避免重复创建单例,因为可能会存在多个线程通过了第一次判断在等待锁,来创建新的实例对象

抽象工厂和工厂方法的区别

工厂方法模式是定义了一个创建对象的抽象方法,由子类决定要实例化的类。这样做的好处是再有新的类型的对象需要实例化只要增加子类即可。抽象工厂模式定义了一个接口用于创建对象族,而无需明确指定具体类。抽象工厂也是把对象的实例化交给了子类,即支持拓展。同时提供给客户端接口,避免了用户直接操作子类工厂。

享元模式

待学习后补充

观察者模式

待学习后补充

STL有了解嘛?具体讲一下

待整理

智能指针中的shared_ptr,手写shared_ptr

待整理

相关文章:

校招又临近了,怎么在面试中应对设计模式相关问题呢?

夏天开始了,那么夏天结束时的毕业季也不远了。毕业是个伤感、期待而又略带残酷的时节,就像蜜桃无论成熟与否都会在这个时间被采摘,如果毫无准备就踏入社会,就会……马上变成低级社畜。所以说还是要早点为了毕业找工作做点准备&…...

padans关于数据处理的杂谈

情况:业务数据基本字段会有如下: Index([时间, 地区, 产品, 字段, 数值], dtypeobject)这样就会引发一个经典“三角不可能定理”,如何同时简约展现分时序、分产品、分字段数据。)一般来说, 1、时序为作为单独的分类&…...

神经网络的理解

文章目录 概念得分函数损失函数神经网络结构非线性激活函数神经网络运行过程神经网络能够做的事情概念 人工神经网络(Artificial Neural Networks,简写为ANNs)也简称为神经网络(NNs)或称作连接模型(Connection Model),它是一种模仿动物神经网络行为特征,进行分布式并…...

夏驰和徐策带你从零开始学数据结构——哈希表

哈希表的概念: 哈希表是一种常用的数据结构,它可以在 O(1) 的时间复杂度内执行插入、查找和删除操作。哈希表的核心思想是使用哈希函数将键值对映射到数组中的一个位置上,从而实现快速的访问和修改。 哈希表由两个主要部分组成:…...

linux实现网络程序

1️⃣ 在linux下,通过套接字实现服务器和客户端的通信。 2️⃣ 实现单线程、多线程通信。或者实现线程池来通信。 3️⃣ 优化通信,增加守护进程。 有情提醒,类里面默认的函数是内联。内联函数在调用的地方展开,没有函数地址&…...

FreeRTOS 队列(二)

文章目录 一、向队列发送消息1. 函数原型(1)函数 xQueueOverwrite()(2)函数 xQueueGenericSend()(3)函数 xQueueSendFromISR()、xQueueSendToBackFromISR()、xQueueSendToFrontFromISR()(4&…...

用python获取当前目录下的创建时间超过3天的所有python文件

直接上代码: import os import datetime print(os.getcwd()) # 获取当前目录下所有的html文件 html_files [] for filename in os.listdir(): if filename.endswith(.py): html_files.append(os.path.join(., filename)) now date…...

第五章 Linux实际操作——用户管理

第五章 Linux实际操作——用户管理 5.1 基本介绍5.2 添加用户5.3 指定、修改密码5.4 删除用户5.5 查询用户信息指令5.6 切换用户5.7 查看当前用户、登录用户5.8 用户组5.9 用户和组相关文件8.9.1/etc/passwd 文件8.9.2/etc/shadow文件8.9.3/etc/group文件 5.1 基本介绍 Linux系…...

悲观锁和乐观锁详细

悲观锁和乐观锁详细 悲观锁 ​ 悲观锁就是悲观的思想,他认为数据每一次被访问的时候都会被上锁,所以每次获得锁的时候都会上锁,这样其他线程想要获取这个锁的时候就会被堵塞,要等待上一个线程锁的释放。也就是说这个线程只一次只…...

三谈ChatGPT(ChatGPT可以解决问题的90%)

这是我第三次谈ChatGPT,前两篇主要谈了ChatGPT的概念,之所以火的原因和对人们的影响,以及ChatGPT可能存在的安全风险和将面临的监管问题。这一篇主要讲讲ChatGPT的场景和处理问题的逻辑。 这一次我特意使用了ChatGPT中文网页版体验了一番。并…...

Qt QSet 详解:从底层原理到高级用法

目录标题 引言:QSet的重要性与简介QSet 的常用接口迭代器:遍历Qset 中的元素(Iterators: Traversing Elements in Qset )高级用法:QSet 中的算法与功能(Advanced Usage: Algorithms and Functions in QList…...

Mac Doxygen的使用

Doxygen的使用 安装着Doxygen和Graphviz这两个东西 在源码目录先使用doxygen -g生成一个叫 ‘Doxyfile’ 的Doxygen的配置文件修改配置文件,里面都有介绍各个选项的功能,这里主要修改一下几个: HAVE_DOT YES EXTRACT_ALL YES EXTRACT_PRIVATE YES E…...

FPGA基础代码复用

一、verilog中有关代码复用的语法 1、连接符“{}” {4{1b1}} 或者 {5d6, 5d8} 2、参数(Parameter)型常量定义 parameter 参数名=表达式; 或者 localparam 参数名=表达式; parameter DATA_WIDTH 20; 3、function函数定义 …...

Hbase简介

HBase简介 一、HBase简介 1. HBase简介 (1) apache的顶级项目,hadoop的数据库,分布式、大规模的大数据存储。 HBase是Google的BigTable的开源java版本,建立在hdfs之上的,分布式、列存储、非关系(nosql、key-value&a…...

科海思除COD树脂,大孔树脂,除COD专用树脂

一、产品介绍 Tulsimer A-722 MP具有控制孔径的大孔强碱性Ⅰ型阴离子交换树脂 Tulsimer A-722 MP 是一款具有便于颜色和有机物去除的控制孔径的,专门开发的大孔强碱性Ⅰ型阴离子交换树脂。 Tulsimer A-722 MP(氯型)专门应用于去除COD…...

Qt 多线程 QThread、QThreadPool使用场景

QThread 和 QRunnable 都是 Qt 框架中用于多线程编程的类,它们之间有以下不同点: 继承关系不同 QThread 继承自 QObject 类,而 QRunnable 没有父类。 实现方式不同 QThread 是一个完整的线程实现,包含了线程的创建、启动、停止、…...

如何一招搞定PCB阻焊过孔问题?

PCB阻焊油墨根据固化方式,阻焊油墨有感光显影型的油墨,有热固化的热固油墨,还有UV光固化的UV油墨。而根据板材分类,又有PCB硬板阻焊油墨,FPC软板阻焊油墨,还有铝基板阻焊油墨,铝基板油墨也可以用…...

【代码随想录】刷题Day2

1.左右指针比大小 977. 有序数组的平方 class Solution { public:vector<int> sortedSquares(vector<int>& nums) {vector<int> ret nums;int left 0;int right nums.size()-1;int end nums.size();while(left<right){if(abs(nums[left])>abs…...

Python机器学习、深度学习技术提升气象、海洋、水文领域实践应用

Python是功能强大、免费、开源&#xff0c;实现面向对象的编程语言&#xff0c;在数据处理、科学计算、数学建模、数据挖掘和数据可视化方面具备优异的性能&#xff0c;这些优势使得Python在气象、海洋、地理、气候、水文和生态等地学领域的科研和工程项目中得到广泛应用。可以…...

计及调度经济性的光热电站储热容量配置方法【IEEE30节点】(Matlab代码实现)

&#x1f4a5; &#x1f4a5; &#x1f49e; &#x1f49e; 欢迎来到本博客 ❤️ ❤️ &#x1f4a5; &#x1f4a5; &#x1f3c6; 博主优势&#xff1a; &#x1f31e; &#x1f31e; &#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 …...

深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法

深入浅出&#xff1a;JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中&#xff0c;随机数的生成看似简单&#xff0c;却隐藏着许多玄机。无论是生成密码、加密密钥&#xff0c;还是创建安全令牌&#xff0c;随机数的质量直接关系到系统的安全性。Jav…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者

抖音增长新引擎&#xff1a;品融电商&#xff0c;一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中&#xff0c;品牌如何破浪前行&#xff1f;自建团队成本高、效果难控&#xff1b;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/

使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题&#xff1a;docker pull 失败 网络不同&#xff0c;需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...

Android15默认授权浮窗权限

我们经常有那种需求&#xff0c;客户需要定制的apk集成在ROM中&#xff0c;并且默认授予其【显示在其他应用的上层】权限&#xff0c;也就是我们常说的浮窗权限&#xff0c;那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

实现弹窗随键盘上移居中

实现弹窗随键盘上移的核心思路 在Android中&#xff0c;可以通过监听键盘的显示和隐藏事件&#xff0c;动态调整弹窗的位置。关键点在于获取键盘高度&#xff0c;并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

CSS设置元素的宽度根据其内容自动调整

width: fit-content 是 CSS 中的一个属性值&#xff0c;用于设置元素的宽度根据其内容自动调整&#xff0c;确保宽度刚好容纳内容而不会超出。 效果对比 默认情况&#xff08;width: auto&#xff09;&#xff1a; 块级元素&#xff08;如 <div>&#xff09;会占满父容器…...

C++使用 new 来创建动态数组

问题&#xff1a; 不能使用变量定义数组大小 原因&#xff1a; 这是因为数组在内存中是连续存储的&#xff0c;编译器需要在编译阶段就确定数组的大小&#xff0c;以便正确地分配内存空间。如果允许使用变量来定义数组的大小&#xff0c;那么编译器就无法在编译时确定数组的大…...

HDFS分布式存储 zookeeper

hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架&#xff0c;允许使用简单的变成模型跨计算机对大型集群进行分布式处理&#xff08;1.海量的数据存储 2.海量数据的计算&#xff09;Hadoop核心组件 hdfs&#xff08;分布式文件存储系统&#xff09;&a…...

在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案

这个问题我看其他博主也写了&#xff0c;要么要会员、要么写的乱七八糟。这里我整理一下&#xff0c;把问题说清楚并且给出代码&#xff0c;拿去用就行&#xff0c;照着葫芦画瓢。 问题 在继承QWebEngineView后&#xff0c;重写mousePressEvent或event函数无法捕获鼠标按下事…...