Java教程

面试题(1)

本文主要是介绍面试题(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.json

11.Java内存区域

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

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

这篇关于面试题(1)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!