java基础知识

  1. 垃圾回收机制,垃圾回收三种算法【2】,判断对象存活算法,复制和标整优缺点
  2. stringbuffer和stringbuilder的区别,string与stringbuffer的区别
    stringbuffer和stringbuilder的区别
    1)StringBuffer 与 StringBuilder 的方法和功能完全是等价
    2)StringBuffer 中的方法大都采用了 synchronized 关键字进行修饰,因此是线程安全的,而 StringBuilder 没有这个修饰,可以被认为是线程不安全的。
    3)在单线程程序下,StringBuilder效率更快,因为它不需要加锁,不具备多线程安全,StringBuffer则每次都需要判断锁,效率相对更低
    string与stringbuffer的区别
    (1)String类对象为不可变对象,一旦你修改了String对象的值,隐性重新创建了一个新的对象,释放原String对象,StringBuffer类对象为可修改对象,可以通过append()方法来修改值
    (2)String类对象的性能远不如StringBuffer类。
    (3)从线程安全的角度来看:StringBuilder的线程是不安全的,而String和StingBuffer的线程是安全的。
    适应场景
    1) String:适用于少量的字符串操作的情况
    2) StringBuilder:适用于单线程下在字符缓冲区进行大量操作的情况
    3) StringBuffer:适用多线程下在字符缓冲区进行大量操作的情况
    三者执行速度比较:StringBuilder > StringBuffer > String
  3. java的string是可变类型吗:不可变。用“+”连接字符串时会创建新的字符串;new String形式创建对象一般情况下回创建两个对象,因为如果常量池不存在直接字符串,那么要先在常量池中创建对象,然后还要在堆中创建对象。
  4. equals和==的区别
    1)==是判断两个变量或实例是不是指向同一个内存空间,equals是判断两个变量或实例所指向的内存空间的值是不是相同
    2)==是指对内存地址进行比较 , equals()是对字符串的内容进行比较
    3)==指引用是否相同, equals()指的是值是否相同
  5. 面向对象的三种特性,继承用到了哪些特性,多态的具体使用场景【2】,设计模式中的多态体现
    三大基本特性:封装,继承,多态
    封装: 把属于同一类事物的共性(包括属性与方法)归到一个类中,以方便使用。好处是实现了专业的分工,隐藏信息,实现细节
    继承: 一个类继承另一个类,则称继承的类为子类,被继承的类为父类,即个性对共性的属性与方法的接受,并加入个性特有的属性与方法。好处是实现代码复用
    多态:相同的事物,调用其相同的方法,参数也相同时,但表现的行为却不同。分为设计时多态(重载)和运行时多态(覆盖和继承时,根据调用方法的实例类型决定调用哪个方法)
    设计模式中的多态体现:策略模式(对象具备某个行为,但是在不同的场景中,该行为有不同的实现算法)
  6. Java堆和栈
    堆区: 1) 存储的全部是对象,每个对象都包含一个与之对应的class的信息。(class的目的是得到操作指令) ;2)jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身
    栈区: 1)每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),对象都存放在堆区中 ;2) 每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。 3) 栈分为3个部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令)。
    堆和栈的区别
    (1) 公有和私有。堆被所有线程共享,栈是线程私有的。
    (2) 存储。堆用来存储new创建的对象和数组,栈用来存储基本类型和对象引用。
    (3) 堆存取速度慢,可以运行时动态分配内存,生存期不需要提前确定;栈存取速度款,大小和生存期必须确定,缺乏灵活性。
  7. Java集合
    HashSet:实现 Set 接口,不允许重复的元素,底层数据结构 hash table
    LinkedHashSet:实现 Set 接口,不允许重复的元素,底层数据结构 hash table 与双链表
    TreeSet:实现 NavigableSet 接口,不允许重复的元素,底层数据结构红黑树
    ArrayList:实现 List 接口,允许重复元素,底层数据结构可变数组
    LinkedList:实现 List 接口,允许重复元素,底层数据结构双链表
    Vector:实现 List 接口,允许重复元素,底层数据结构可变数组
    HashMap:实现 Map 接口,不允许重复的 key,底层数据结构 hash table
    LinkedHashMap:实现 Map 接口,不允许重复的 key,底层数据结构 hash table 与双链表
    HashTable:实现 Map 接口,不允许重复的 key,底层数据结构 hash table
    TreeMap:实现 SortedMap 接口,不允许重复的 key,底层数据结构红黑树
  8. Arraylist和Array的区别,arraylist的get方法怎么实现,如何扩容;Copyonwritearraylist如何实现
    Arraylist和Array的区别
    1) Array类型的变量在声明的同时必须进行实例化(至少得初花数组的大小),而ArrayList可以只是先声明;
    2) Array始终是连续存放的;而ArrayList的存放不一定连续;
    3) Array对象的初始化必须指定大小,且创建后的数组大小是固定的;而ArrayList的大小可以动态指定,空间大小可以任意增加;
    4、Array不能随意添加、删除;而ArrayList可以在任意位置插入和删除
  9. 类加载机制,如何为静态变量分配空间【在类加载的时候分配空间的,静态变量和对象没有关系,在以后的创建对象的时候不在初始化,存在于方法中,属于静态存储方式,外部变量也是属于静态存储方式】
    从Java虚拟机的角度来看,只存在两种不同类加载器:
    1) 启动类加载器(Bootstrap Classloader),使用C++语言实现(仅限于HotSpot),是虚拟机的一部分;
    2) 所有其它的类加载器,使用Java语言实现,独立于虚拟机外部,并且全都继承自抽象类java.lang.Classloader。
    从Java开发人员来看,绝大部分Java程序都会使用到系统提供的类加载器(还有1种自定义类加载器):
    1) 启动类加载器(Bootstrap Classloader):负责将存放在\lib目录中的类库加载到虚拟机,启动类加载器无法被Java程序直接引用。
    其实还可以加载-Xbootclasspath参数所指定的路径中类库,而且启动类加载器只能加载名字能被虚拟机识别的类库
    2) 扩展类加载器(Extension Classloader):负责将存放在\lib\ext目录中类库加载到虚拟机,开发人员可以直接使用扩展类加载器。
    还可以加载被java.ext.dirs系统变量所指定的类路径中的所有类库。
    3) 应用程序类加载器(Application Classloader)(也称系统类加载器):负责加载用户类路径(ClassPath)上所指定的类库,开发人员可以直接使用应用程序类加载器。
  10. 打破双亲委派机制,tomcat的类加载机制
  11. 读写锁底层怎么实现的
  12. Semaphore用过吗 :线程同步的辅助类,可以维护当前访问自身的线程个数,并提供了同步机制。使用Semaphore可以控制同时访问资源的线程个数,例如,实现一个文件允许的并发访问数。
  13. Time-wait怎么形成的,如何处理
  14. mvc框架
  15. wait和sleep的区别
  16. public,private,protected,default的区别
  17. int和integer的区别
  18. 抽象类和接口的区别

你可能感兴趣的:(java)