写面试题中遇到的问题(8)

写面试题中遇到的问题(8),第1张

写面试题中遇到的问题(8) 本文写给正在努力的自己,努力的补基础知识,五道题一篇

ps:我把答案都放在解析下面了

    在Windows中,下列关于堆和栈的说法中错误的是?
    A. 堆都是动态分配的,没有静态分配的堆,栈有静态分配和动态分配2中分配方式。
    B. 堆的生长方向是向下的,即向着内存地址减小的方向增长;栈的生长方式是向上的,即向着内存地址增加的方向增长
    C. 对堆的频繁new/delete会造成内存空间的不连续,栈则不会存在这个问题
    D. 栈是由编译器自动治理;堆的释放工作由程序员控制,轻易产生内存泄漏。

初识想法:我记得垃圾回收时间是由系统决定的,所以选了D

解析:先来看看栈和堆是怎么
栈:栈是向低地址扩展的数据结构,是一块连续的内存区域,这句话的意思是栈顶的地址和栈的最大容量是系统预先规定好的,在Windows下,栈的大小是2M(也有的说是1M,总之是一个编译时确定的常数),如果申请的空间超过栈的剩余空间,将会提示stackOverFlow,因此,能从栈获得空间较小。生长方向是向下的,即向内存地址减小的方向增长

堆:堆是向高地址扩展的数据结构,是不连续的内存区域,这是由于系统是用链表来存储的空闲内存地址的,自然是不连续的,而链表的遍历方向是由低地址向高地址。生长方向是向上的,即向内存地址增大的方向增长

综上堆和栈区别主要有五大点:
1. 申请方式不同:栈由系统自动分配,而堆是人为申请开辟的
2. 申请大小不同:栈获得的空间较小,而堆获得的空间较大
3. 申请速率不同:栈由系统自动分配,速度较快,而堆一般速度比较慢
4. 存储内容不同:栈在函数调用时,函数调用语句的下一条可执行语句的地址第一个进栈,然而好书各个参数进栈,其中静态变量时不进栈的,而堆中一般是在头部用一个字节存放堆的大小,堆中具体内容是人为安排的
5. 底层结构不同,栈是连续的空间,堆是不连续的空间

答案:B

    Java的屏幕坐标以像素为单位,容器的左下角被确定为坐标的起点,这句话对不对?
    A. 正确
    B. 错误

初识想法:忘了Jframe的知识点了

解析及答案:是以左上角为起点

    下列关于计算机系统和Java变成语言的说法,正确的是?
    A.计算机是由硬件, *** 作系统,和软件组成, *** 作系统是缺一不可的组成部分
    B. Java语言编写的程序源代码可以不需要编译,直接在硬件上运行
    C. 在程序中书写注释不会影响程序的执行,可以在必要的地方多写一些注释
    D. Java的集成开发换将(IDE),如Eclipse,是开发Java语言必须的软件工具

初识想法:只看了A选项就选了,第一眼看着没毛病

解析:A: *** 作系统属于系统软件。B:源代码需要先编译成.class的字节码文件交给JVM处理,JVM通过类加载器加载所需方法后才能执行。C:正确。D:如果能记得下来所有名称,在txt文件写完更改后缀,用javap编译后也能运行

答案:C

    下面那些具体实现类可以用于存储键值对,并且方法调用了基本的多线程安全支持?
    A. java.util.ConcurrentHashMap
    B. java.util.Map
    C. java.util.TreeMap
    D. java.util.SortMap
    E. java.util.HashTable
    F. java.util.HashMap
    初识想法:这都是啥啊,懵逼状态
    解析:能存储键值对并且线程安全的map只有三个:HashTable,SynchronizedMap,ConcurrentHashMap
    Hashtable是线程安全的哈希表,它是通过 synchronized来保证线程安全的;即,多线程 通过同一个“对象的同步锁”来实现并发控制。Hashtable在线程竞争激烈时,效率比较低 (此时建议使用ConcurrentHashMap)。当一个线程访问Hashtable的同步方法时,其它 线程如果也在访问Hashtable的同步方法时,可能会进入阻塞状态。
    Collections.synchronizedMap()使用了 synchronized同步关键字来保证对Map的 *** 作是线程安全的。
    ConcurrentHashMap是线程安全的哈希表。在JDK1.7中它是通过“锁分段”来保证线程安全 的,本质上也是一个“可重入的互斥锁 (ReentrantLock)。多线程对同一个片段的 访问,是互斥的;但是,对于不同片段的访问,却是可以同步进行的。在JDK1.8中是通过 使用CAS原子更新、volatile关键字、 synchronized可重入锁实现的。

    以下关于java封装的描述中,正确的是()
    A. 封装的主要作用在于对外隐藏内部实现细节,增强程序的安全性
    B. 封装的意义不大,因此在编码中尽量不要用
    C. 如果子类继承父类,对于父类中进行封装的方法,子类仍然可以直接调用
    D. 只能对一个类中的方法进行封装,不能对属性进行封装

初始想法:BD错的太明显了,没有看的必要,AC乍一看都对

解析:C:如果父类的方法使用的是private修饰,子类不能直接调用,需要父类的get/set方法

答案:A(封装的特性)

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/zaji/5717256.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-12-18
下一篇2022-12-17

发表评论

登录后才能评论

评论列表(0条)

    保存