面试题(1)

1.HashMap与HashTable的区别

2.Java线程的状态

  • 新建状态(New):新创建了一个线程对象

  • 就绪状态(Runnable):线程对象创建后,其他线程调用了该线程的start()方法。该状态的线程位于可运行线程池中,变得可运行,等待获取CPU的使用权

  • 运行状态(Running):就绪状态的线程获取了CPU,执行程序代码

  • 阻塞状态(Blocked):线程因为某种原因比如sleep()、wait()方法失去所占用CPU资源,暂时停止运行。在睡眠时间到或者获得设备资源时,可以重新进入就绪状态;

    阻塞有三种情况:

    1. 等待阻塞:运行的线程执行wait()方法,则JVM会将线程放入等待池中;(调用 motify() 方法回到就绪状态)
    2. 同步阻塞:线程获取synchronized同步锁失败(因为同步锁被其他线程占用),则JVM会将线程放入锁池中
    3. 其他阻塞:通过调用线程的sleep()或join()方法,或发出了I/O请求时,线程就会进入阻塞状态。当sleep()状态超时,join()方法等待线程终止或超时,或者I/O处理完毕,重新转入就绪状态
  • 死亡状态(Dead):线程执行完了或者因为异常退出run()方法

3.接口与抽象类的区别

  • 相同

    1. 都不能被实例化
    2. 接口的实现类或者抽象类的子类只有在实现了接口或者抽象类的方法才能够实例化
  • 不同点

    1. 抽象类单继承,接口多实现

    2. 抽象类中可以有方法的实现,而接口中只能有方法的定义不能实现(public abstract)

      接口中的方法包含抽象方法(JDK 7及以前),默认方法和静态方法(JDK 8),私有方法(JDK 9)

      • 默认方法 (default修饰且不可省略),供子类调用或重写:public default void fun(){}

        静态方法,供接口直接调用(接口名.静态方法名),实现类无法调用: public static void fun(){}

      • 私有方法 private,供接口中的默认方法或者静态方法调用

    3. 抽象类 extends 接口 implements

    4. 接口中成员变量都是public static final,必须初始化,抽象类可以有抽象方法和具体方法

    5. 抽象类可以有构造方法,供子类实例化使用,接口没有

4.final

  • 修饰类,表示类不可被继承

  • 修饰方法,表示方法不可被继承类修改

  • 修饰变量,表示变量不可被修改

5.集合

6.反转字符串

  1. 用StringBuffer\StringBuider的reverse方法

  2. 用String类的toCharArray()转化成字符数组

  3. 用String类的charAt()

    补充

    常用的String类方法 length(),subString(),toCharArray(),charAt(),split(),equals(),concat(),contains(),indexOf(),toString(),replace(),toUpperCase()

7.tcp/ip,http协议

TCP/IT协议:TCP负责发现传输的问题,一有问题就发出信号,要求重新传输,直到所有数据安全正确地传输到目的地。而IP是给因特网的每一台联网设备规定一个地址。

HTTP协议:

  1. GET:

  2. POST:

  3. PUT:

  4. DELETE:

    GET传输的数据量小,不能大于2kb

8.工厂模式,单例模式

  • 单例模式:保证一个类只有一个实例,并且提供一个访问点
    1. 饿汉式
    2. 懒汉式
    3. 静态内部类式:结合了饿汉式和懒汉式的优点,需要使用的时候才会加载,加载类是线程安全的
    4. 枚举单例
    5. 双重检测锁方式
  • 工厂模式:例如spring的IOC
    1. 简单工厂
    2. 工厂方法
    3. 抽象工厂

9.数据库优化,索引

10.拦截器和过滤器的区别

拦截器是面向切面编程的一种运用,是在在service或者一个方法前,调用一个方法,或者在方法后,调用一个方法

  • 拦截器是基于Java的反射机制的,过滤器是基于函数的回调
  • 拦截器依赖于框架,过滤器依赖于servlet
  • 拦截器可以对静态资源的请求进行拦截,过滤器可以对几乎所有请求过滤
  • 在action的生命周期中,拦截器可以多次被调用,过滤器只能在容器初始化的时候调用一次

11.Java内存区域

  • jdk1.8之前:虚拟机栈,本地方法栈,堆区,方法区,程序计数器

  • jdk1.8及之后:虚拟机栈,本地方法栈,堆区,元空间,程序计数器

12.AOP

面向切面编程,利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,进而提高开发效率。

AOP可以理解为在业务方法的执行前后植入一些增强

实现:动态代理

就是使用者使用的不是真实的对象,而是使用一个代理对象,而这个代理对象中包含的是真实的对象,代理对象的作用就是不改变原有对象的功能方法的基础之上封装新的功能。

13.事务

事务访问数据库的一个操作序列,可以是一条sql语句,也可以是一组sql语句或整个程序

特性:

  • 原子性:不可分割型,一个事务中的所有操作必须全部完成。事务在执行过程中发生了错误,会回滚到事务发生前的状态
  • 一致性:事务开始之前和结束之后,数据库的完整性没有被破坏
  • 隔离性:事务A与事务之间有隔离性,
  • 持久性:事务处理结束后,对数据的修改是永久的,即使系统故障也不会丢失(硬盘)

14.boolean类型占多少内存

理论上占一位

但是,计算机分配内存的最小单位是byte,在jvm中boolean类型被编译成int类型,占四个字节;

Boolean数组在Oracle的jvm中被编译为byte数组,每个boolean占一个字节

posted @ 2021-10-20 22:49  64one  阅读(43)  评论(0)    收藏  举报