第二章:基础知识 面试题2

概念部分

在C++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。
    1. 栈,就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区。里面的变量通常是局部变量、函数参数等。
    2. 堆,就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束后,操作系统会自动回收。
    3. 自由存储区,就是那些由malloc等分配的内存块,他和堆是十分相似的,不过它是用free来结束自己的生命的。
    4. 全局/静态存储区,全局变量和静态变量被分配到同一块内存中,在以前的C语言中,全局变量又分为初始化的和未初始化的(初始化的全局变量和静态变量在一块区域,未初始化的全局变量与静态变量在相邻的另一块区域,同时未被初始化的对象存储区可以通过void*来访问和操纵,程序结束后由系统自行释放),在C++里面没有这个区分了,他们共同占用同一块内存区。
    5. 常量存储区,这是一块比较特殊的存储区,他们里面存放的是常量,不允许修改(当然,你要通过非正当手段也可以修改,而且方法很多)

单例模式

1. 懒汉模式

public class Singleton {
    private static Singleton instance = null;

    private Singleton() { // 初始化对象 }

    public static Singleton getInstance() {
        if(null == instance) { // 按需创建
            instance = new Singleton();
        }
        return instance;
    }

}

改进版本,解决多线程重复创建实例问题:

public class Singleton {
    private static Singleton instance = null;

    private Singleton() { // 初始化对象 }

    public static synchronized Singleton getInstance() { // 同步方法,只能有一个线程调用该方法
        if(null == instance) {
            instance = new Singleton();
        }
        return instance;
    }

}

优点:按需创建,线程安全。

缺点:性能差,统一时间只能有一个线程调用getInstance()方法。

场景:实例占用内存较大,使用次数较少的场景。

2. 饿汉模式

public class Singleton {
    private static Singleton instance = new Singleton(); //类加载时即创建实例

    private Singleton() { // 初始化对象 }
 public static Singleton getInstance() { return instance; } }

优点:在类加载时创建实例,避免了多线程重复创建实例的情况。

缺点:类加载时即被创建实例,若实例没被使用,则浪费内存和时间。

场景:实例占用内存较小,初始化之后即被用到的场景。

原文地址:https://www.cnblogs.com/frank-QAQ/p/9054761.html

时间: 2024-11-06 09:47:50

第二章:基础知识 面试题2的相关文章

汇编第二章--基础知识梳理与总结

第一章,我们介绍了有关汇编语言的基础知识,在第二章我们主要介绍寄存器. CPU的主要部件是寄存器,在8086CPU有14个寄存器,它们分别是:AX.BX.CX.DX.SI.DI.SP.BP.IP.CS.SS.DS.ES.PSW.8086CPU的所有寄存器都是16位的,可以存放两个字节.AX.BX.CX.DX这4个寄存器通常用来存放一般性的数据,称为通用寄存器.由于8086CPU的上一代CPU中的寄存器都是8位的,为了保持兼容,8086CPU的AX.BX.CX.DX这4个寄存器都可分为两个独立使用

读《精通css》--第二章基础知识

一. 常用的选择器:类型选择器和后代选择器.ID选择器和类选择器.伪类选择器(:link,:visited,:hover,:active,:focus) 二. 通用选择器:*  ( 通配符,也可以用来对某个元素的所有后代应用样式) 三. 高级选择器:CSS有向后兼容性,即如果浏览器不理解某个选择器,那么它会忽略整个规则.对于站点功能或布局很重要的任何元素上,都应该避免使用这些高级选择器. 1. 子选择器和相邻同胞选择器:> +    (IE6不支持) 2. 属性选择器:根据属性是否存在 或者 属

Java基础知识二次学习-- 第二章 基础语法与递归补充

第二章 基础语法与递归补充   时间:2017年4月24日10:39:18 章节:02章_01节,02章_02节 视频长度:49:21 + 15:45 内容:标识符,关键字与数据类型 心得:由字母,下划线,$,数字组成,应该由字母,下划线$开头,同时应该避开java保留字符 变量是内存中的一小块区域,使用变量名来访问这块区域 执行过程中的内存管理(疑问:这里的内存和Jvm的一样吗?) code segment 存放代码 data segment 静态变量 字符串常量 stack 栈 局部变量 h

《软件可靠性方法》笔记(一)---第二章 预备知识

时间:2016.11.12: 地点:南京江宁实验室: 状态:迷茫的研一: 为什么会读到这本书?导师推荐的.可以说第一开始听到这本书名时完全是一脸蒙蔽,就像选本科毕设题目时是一样的...就是在上半年当老师告诉我他是做形式化的,我一度以为我特么的难道联系到自动化学院了?我可是一门心思向计算机的.后来直到暑假在家闲的发慌翻翻本科时候的软件课本书时,居然看到了一章讲形式化的...蜜汁尴尬,毕竟当年这门课最后我得了优.咳咳,扯远了.这本书还是蛮适合刚接触形式化的人看的,但是得有一定的数学功底(所以说我一开

(连载)边喝咖啡边学Unity——第二章 预备知识体系

第二章 预备知识体系 --本章涉及空间数学.解析几何.线性代数.计算机图形学.算法.数据结构等众多基础学科.同上一章相比,虽然枯燥,但是绝不能称为废话之章,即使粗略的看一遍,也比直接跳过来的好,详细地读完,会让读者以后的开发之路走的更加平坦. 并且本章的知识不仅仅对您的Unity游戏开发有帮助,对于大部分软件开发人员都是大有作用的. 作为传统3D游戏编程来讲,需要运用到的知识面非常之广,涉及到的学科特别之多.而通常讲编程的书籍,会弱化数学知识,讲数学的书籍,会弱化编程方面的知识.这就是我在第一章

wpf(第一章 基础知识)

wpf第一章基础知识:通过vs2015创建wpf程序会在引用里面多出3个核心程序集PresentationCore.PresentationFramework.WindowsBase.并且会在解决方案中生成如下的结构: 1.程序起始相关的资源:2.与整个wpf相关的后台代码:3.窗体界面:4.窗体界面的后台代码. 在app.xaml中 1.Application的后台类:2.启动窗体:3.系统资源区域 除此之外可以在MainWindow.xaml中自定义窗体设置属性,拖拉控件在里面.

【读书笔记】《Python基础教程》第一章 基础知识

第一章 基础知识 实现两个数整除:使用命令开关 -Qnew (?): 使用双斜线. from future import division 执行向计算器那样的普通除法. 幂(乘方)运算符: 2 ** 3 (8),用函数代替 pow(2,3),内建函数 长整数型:在数字结尾加L.eg:10000000000000L 获取用户输入 input("提示信息 :") eg: x = input("x: ") .输入的是合法的python表达式 raw_input("

Kubernetes 第一章 基础知识

Kubernetes 第一章 基础知识 Kubernetes是一个开源容器编排引擎,用于自动化容器化应用程序的部署,扩展和管理.开源项目由Cloud Native Computing Foundation(CNCF)托管. Kubernetes是一个可移植,可扩展的开源平台,用于管理容器化工作负载和服务,有助于声明性配置和自动化.它拥有庞大,快速发展的生态系统.Kubernetes服务,具有广泛的工具和支持可用. 发展历程 传统部署时代: 早期,组织在物理服务器上运行应用程序.无法为物理服务器中

<<Python基础教程>>学习笔记之|第01章|基础知识

本学习笔记主要用要记录下学习<<Python基础教程>>过程中的一些Key Point,或自己没怎么搞明白的内容,可能有点杂乱,但比较实用,查找起来也方便. 第01章:基础知识 ------ Jython:      Python的Java实现,运行在JVM中,相对稳定,但落后于Python,当前版本2.5,在TA(Python+Robot)会用到 IronPython:  Python的C#实现,运行在Common Language Runtime,速度比Python要快 >

汇编语言第1章 基础知识

*****本章学习***** 一.学习目标 ? 了解机器语言->汇编语言->其他编程语言进化趋势 ?  了解汇编语言源程序的组成 ?  理解计算机硬件系统的基本结构 ?  掌握内存地址空间 二.学习内容 1.计算机编程语言的演进 2.汇编语言源程序的组成 3.计算机硬件系统的基本结构 4.内存地址空间 ~~~1.计算机编程语言的演进 机器语言->汇编语言->高级语言 ? 机器语言           这样的代码晦涩难懂而且不易查错,如果程序里有一个"1"被误写为