美文网首页
J2EE基础篇

J2EE基础篇

作者: markDownMan | 来源:发表于2023-04-09 20:48 被阅读0次
1. List和Set的区别

List有序,可重复,允许null,可以指定下标获取元素。
set无需,不重复

2.ArrayList和LinkedList区别?
  1. 底层数据结构不同。ArrayList-数组,LinkedList-链表
  2. 适用场景不同。Arraylist-随机查找,LinkedList-增删
  3. LinkedList实现Deque,能当队列使用。
3. 重载和重写的区别
  1. 重载:同一个类,方法名一样,参数类型,个数,顺序不同。返回类型和修饰符可以不同,发生在编译阶段。
  2. 重写:父子类,方法名,参数列表必须相同。返回类型<=父类,抛出异常<=父类,修饰符>=父类。
    private不能重写。
4. hashCode和equals的关系
  1. 都是Object方法。
  2. 每个对象都有自己的哈希值,类似指纹。
    hashCode不同,对象不同。
    hashCode相同,对象可能相同。
    对象相同,hashCode相同。
  3. 集合比较对象是否相等,会用到hashCode比较,相同,再用equals比较。
5 String,StringBuffer,StringBuilder
  1. String 常量,不变。
  2. StringBuffer,线程安全
  3. StringBuilder,线程不安全
6. 泛型中extends,super的区别
  1. <? extends T>表示包含T在内的任何的T的子类。
  2. <? super T>表示包含T在内的任何T的父类。
7. Jdk1.7-Jdk1.8 HashMap发生了什么变化?
  1. jdk1.7=数组+链表,jdk1.8=数组+链表+红黑树
8 深拷贝和浅拷贝
  1. 浅拷贝:只会拷贝基本数据类型,以及引用对象的地址,指向同一个对象。
  2. 深拷贝:即会拷贝基本数据类型的值,也会对引用对象进行复制,指向不同的对象。
9 HashMap的put方法
  1. 根据key通过hash算法与运算得出数组下标
  2. 如果数组下标的元素为空,则将key,value封装成entry(1.7)Node(1.8),并放入该位置
  3. 如果数组下标的元素不为空。分成三种情况:
    a. jsk1.7,判断是否需要扩容,不需要则头插法添加到链表中。
    b. jdk1.8,判断当前位置是链表还是红黑树
    • 如果是红黑树Node,先判断红黑树是否存在该key,存在则更新,不存在则添加到红黑树中。
    • 如果是链表结构,判断链表是否存在该key,存在则更新,不存在则尾插法存入链表。
    • 插入后,在判断是否需要扩容。
10. HashMap扩容机制
  1. 先生成数组。
  2. 重新根据key通过hash算法和运算生成数组下标。把旧数据迁移到新数组上。
  3. 迁移完后,把新数组赋值给HashMap对象的table属性。
11 CopyOnWriteArrayList的底层原理?
  1. 线程安全。读操作-原数组,写操作-复制一个新数组上操作
  2. 写操作会加锁。
  3. 写操作完成后,原数组地址指向新数组。
  4. 适合读多写少的场景。
12 什么是字节码?有什么作用?
  1. javac编译后class文件。
  2. 一次编译到处运行,只要有jre环境,就可以运行。具有跨平台的作用。
13 Java的异常
  1. 所有异常的顶级父类Throwable
  2. Throwable有Exception和Error 2个子类
  3. Error子类:StackOverFlowException和OutOfMemoryError。比较严重的错误。
  4. Exception子类:NullPoinerException,illegalAccessException。
14 类加载器有哪些?
  1. BootStrapClassLoader-lib下的jar包和class文件
  2. ExtClassLoader-lib/ext下的jar包和class文件
  3. AppClassLoader -自定义加载器,加载classpath下的jar包和class文件
15 双亲委派机制?

加载一个类时,先从AppClassLoader查询该类是否已经加载过,如果没有,则找父级ExtClassLoader,也是判断是否加载过,如果没有再找父级BootStrapClassLoader,如果没有加载过,则判断是否可以加载,如果不能,再找子级ExtClassLoader,再找AppClassLoader。


image.png
16 JVM内存共享区

堆和方法区

17 JVM线程隔离数据区

虚拟机栈,本地方法栈,程序计数器

18 项目如何排查JVM问题

宕机

  1. JVM参数内存溢出时自动生成dump文件,再用MAT软件分析。
  2. 应用/中间件日志
  3. 服务器的日志,var/message文件
    线上
  4. JMap查看各个区域的内存使用情况。
  5. JStack查看各个线程阻塞,死锁情况。
  6. JStat查看GC的情况。是否频繁GC,年轻代还是老年代。
  7. 查看占用CPU最多的线程。Top命令。
  8. 阿里的分析软件。arthas
19 一个对象从加载到GC,经历了哪些过程?
  1. 把字节码加载到方法区。
  2. 根据类信息在堆中创建对象。
  3. 对象分配在队中的Eden区,一次Minor GC后进入Survivor区。后续Minor GC中,如果对象一直存在,将在survivor区来回拷贝,每移动一次,年龄+1
  4. 当年龄超过15后,移动到老年代
  5. Full GC后,被标记为垃圾对象,将被GC线程回收。

相关文章

  • SpringMVC

    知识储备 1、j2ee基础 2、spring框架基础 3、JDBC 4、Eclipse+Maven+Tomcat ...

  • 2018-01-25

    J2ee类 Java基础算法和高级编程 Oracle 和 Mysql,(读写分离,mysqlRout,同步) 缓存...

  • J2EE容器

    J2EE 容器的类型 J2EE 容器为 J2EE 应用程序组件提供运行时支持。J2EE 应用程序组件使用容器的协议...

  • Java简介

    JDK:这是开发工具箱中Java最核心的库。 J2SE:标准版(基础语法+基础库) J2EE:企业版 J2ME:微...

  • spring学习笔记(1)

    Spring是一个基于IOC和AOP的结构J2EE系统的框架IOC 反转控制 是Spring的基础,Inversi...

  • weblogic基础

    第一章:weblogic基础 1. J2EE标准与weblogic容器之间的关系 Weblogic容器是基于J2E...

  • Servlet基础--Servlet的调用流程和生命周期

    1. Servlet接口 作为J2EE最基础的一个接口之一,定义如下 servlet调度过程 2. HttpSer...

  • J2EE基础知识

    ZERO 持续更新 请关注:https://zorkelvll.cn/blogs/zorkelvll/artic...

  • 2019java最新面试题

    java面试宝典,java基础面试,2018java面试题,2019java最新面试题 1、[请对以下在J2EE中...

  • java面试宝典_java基础面试_2018java面试题_20

    java面试宝典,java基础面试,2018java面试题,2019java最新面试题1、请对以下在J2EE中常用...

网友评论

      本文标题:J2EE基础篇

      本文链接:https://www.haomeiwen.com/subject/ipzbddtx.html