zoukankan      html  css  js  c++  java
  • 9月17号面试总结(softstone)

    1.数据结构:
    数组、链表、栈、队列、数

    2.jmm内存模型:
    jmm java memory model java内存模型
    volatile具备两种特性,第一就是保证共享变量对所有线程的可见性。将一个共享变量声明为volatile后,会有以下效应:

        1.当写一个volatile变量时,JMM会把该线程对应的本地内存中的变量强制刷新到主内存中去;

        2.这个写操作会导致其他线程中的缓存无效。

    3.jvm内存模型:
    堆区:
    1.存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令)
    2.jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身
    栈区:
    1.每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),对象都存放在堆区中
    2.每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。
    3.栈分为3个部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令)。
    方法区:
    1.又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量。
    2.方法区中包含的都是在整个程序中永远唯一的元素,如class,static变量。

    4.java垃圾回收机制
    答:java垃圾回收机不是一直运行,只有达到了触发条件才会启动。

    通常两种情况下,会自动触发java垃圾回收机。

    (1)cpu空闲

    gc线程(垃圾回收器线程)执行的优先级最低。当cpu空闲时,才会轮到gc线程执行。

    (2)java堆内存不足

    当jvm堆内存不足时,gc会自动执行,清理过期对象和垃圾,释放内存空间。当一次清理之后,内存仍然不足时,gc会重复执行。

    需要指出的是,当堆内存超出堆内存上限时,会发生内存泄漏(out of memory),抛出异常,程序执行结束。


    5.hashmap和hashtable区别,hashtable为什么是线程安全的
    hashmap:底层数组+链表实现,无论key还是value都不能为null,线程安全,实现线程安全的方式是在修改数据时锁住整个HashTable,效率低
    hashmap:底层数组+链表实现,可以存储null键和null值,线程不安全

    6.arraylist和linkedlist区别

    底层数据节后,arraylist是数组,linkedlist是链表,物理上有序 和逻辑上有序

    7.redis数据库有哪几种数据类型
    String list set sortedset hash

    8.数据库优化
    答:索引的作用是避免全表扫描,提高查询效率。

    索引的原理:二分查找,折半查询。

    索引的应用场景:

    (1)经常查询的列,才需要建索引。

    (2)大文本的列不要建索引,因为索引会额外占用内存空间;

    (3)值不唯一的列,不要建索引。索引要排序,值不唯一的情况下,数据库需要额外建一个序列,去维护这个排序。

    联合索引是同时对两个或多个列建立索引。

    聚簇索引并不是一种单独的索引类型,而是一种数据存储方式。(了解即可)

  • 相关阅读:
    超级变态之access查询
    计算机安全病毒问题汇集(转自华军)
    Avast I Love You
    Windows2003 3389端口修改
    希捷 250G 7200.10 8M(串口/5年盒)(买硬盘了~~~)
    DataTable 中Remove方法的使用
    我的主板(p5pl2e)
    冼东妹(为奥运冠军名字作诗)
    李彦宏告诫年轻人:向前看两年
    郭文珺(为奥运冠军名字作诗)
  • 原文地址:https://www.cnblogs.com/WhiperHong/p/11537988.html
Copyright © 2011-2022 走看看