程序员程序员

【干货】java面试之超全基础篇

2018-06-26  本文已影响26人  Allen的光影天地
  1. 和jre的区别以及各自作用
    JRE是java runtime environment的简称,是java程序运行环境,核心内容是JVM和核心类库。
  2. java的编译和运行
    java源码经过编译,生成中间字节码文件.class文件,需要将这些文件放在JVM中运行,JVM是跨平台的,所以java具有跨平台特性。

以下几个知识点相互之间是交融的:都是关于一段程序执行过程中真正发生了什么,包括jvm中内存分配过程

  1. java的垃圾回收机制
    垃圾回收器自动进行,无需显示调用delete方法
  2. Java支持的数据类型有哪些?什么是自动拆装箱?
    八种基本数据类型:
    int, double, float, char, boolean, byte, long, short
    java有两种数据类型:基本数据类型如上八种,基本类型在栈中占一块内存。
    引用数据类型,例如string,其中引用数据类型,JVM中虚拟栈中存的是对象的地址,创建的对象实质在堆中,通过地址来找到堆中的对象的过程,即为引用类型。
    引用类型:占两块内存,一块在栈,一块在堆。
    自动装箱就是Java编译器在基本数据类型和对应的对象包装类型间的转化,即int转化为Integer,自动拆箱是Integer调用其方法将其转化为int的过程。
  3. 局部变量和成员变量的重要区别
    局部变量没有初始化就打印时,会报错。例如函数中定义的变量
    而成员变量,我们不用初始化,java会自动对它初始化。
    当变量是引用的时候,java会赋给它null。
  4. 运行过程内存分析

  1. Java中的方法覆盖(Overriding)和方法重载(Overloading)是什么意思?
    Java中的方法重载发生在同一个类里面两个或者是多个方法的方法名相同但是参数不同的情况。构造方法重载也是这样,有其唯一的参数列表。
    方法覆盖是说子类重新定义了父类的方法。方法覆盖必须有相同的方法名,参数列表和返回类型。覆盖者可能不会限制它所覆盖的方法的访问。

  1. 如何理解java中的类和对象?
  1. 类与类之间的关系
  1. 面向对象的优点
    可复用,可扩展
  2. 接口和抽象类的区别是什么?
  1. 进程和线程的区别:
    进程是执行着的应用程序,比如电脑同时开着QQ和浏览器两个软件,而线程是进程内部的一个执行序列,比如在qq中你可以收信息,发语音,传文件等等。一个进程可以有多个线程。线程又叫做轻量级进程。
  2. java中创建线程的几种方式:
    有4种方式可以用来创建线程:
  1. 线程的几种可用状态


    线程5种状态

    这里也可能会让你写一个死锁程序

//死锁
public class TestDeadLock implements Runnable {
    public int flag = 1;
    static Object o1 = new Object(), o2 = new Object();


    public static void main(String[] args) {
        TestDeadLock td1 = new TestDeadLock();
        TestDeadLock td2 = new TestDeadLock();
        td1.flag = 1;
        td2.flag = 0;
        Thread t1 = new Thread(td1);
        Thread t2 = new Thread(td2);
        t1.start();
        t2.start();
    }

    @Override
    public void run() {
        System.out.println("flag=" + flag);
        if (flag == 1) {
            synchronized (o1) {
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                synchronized (o2) {
                    System.out.println(1);
                }
            }
        }
        if (flag == 0) {
            synchronized (o2) {
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                synchronized (o1) {
                    System.out.println(2);
                }
            }
        }
    }
}
  1. 关键字synchronized怎么使用?
  1. java的集合类
  1. 迭代器
    ListIterator实现了Iterator接口,并包含其他的功能,比如:增加元素,替换元素,获取前一个和后一个元素的索引,等等。

  2. Comparable和Comparator接口
    Comparable & Comparator 都是用来实现集合中元素的比较、排序的,只是 Comparable 是在集合内部定义的方法实现的排序,Comparator 是在集合外部实现的排序。如想实现排序,就需要在集合外定义 Comparator 接口的方法或在集合内实现 Comparable 接口的方法。
    可以将自己的类继承comparable接口,重写compareto方法,实现自定义的类的比较

  3. Java中的两种异常类型是什么?他们有什么区别?
    Exception和Error都是Throwable的子类。Exception用于用户程序可以捕获的异常情况。Error定义了不期望被用户程序捕获的异常。
    Exception又包含了运行时异常(RuntimeException, 又叫非检查异常)和非运行时异常(又叫检查异常)
    (1) Error是程序无法处理了, 如果OutOfMemoryError、OutOfMemoryError等等, 这些异常发生时, java虚拟机一般会终止线程 .
    (2) 运行时异常都是RuntimeException类及其子类,如 NullPointerException、IndexOutOfBoundsException等, 这些异常是不检查的异常, 是在程序运行的时候可能会发生的, 所以程序可以捕捉, 也可以不捕捉. 这些错误一般是由程序的逻辑错误引起的, 程序应该从逻辑角度去尽量避免.
    (3) 检查异常是运行时异常以外的异常, 也是Exception及其子类, 这些异常从程序的角度来说是必须经过捕捉检查处理的, 否则不能通过编译. 如IOException、SQLException等。异常处理过后,Exception对象会在下一个垃圾回收过程中被回收掉。

  4. throw和throws有什么区别?
    1、Throw用于方法内部,Throws用于方法声明上
    2、Throw后跟异常对象,Throws后跟异常类型
    3、Throw后只能跟一个异常对象,Throws后可以一次声明多种异常类型


  1. JDBC相关知识
 Class.forName("com.mysql.jdbc.Driver");
 String url = "jdbc:mysql://localhost:3306/bbs?characterEncoding=utf8&useSSL=false";
 Connection connection = DriverManager.getConnection(url,"root","332999");
  1. java面向分布式的一些设计
  1. 序列化
    Java提供了一种叫做对象序列化的机制,他把对象表示成一连串的字节,里面包含了对象的数据,对象的类型信息,对象内部的数据的类型信息等等。实现序列化和反序列化的对象必须实现serializable接口。序列化可以看成是为了把对象存储在磁盘上或者是从磁盘上读出来并重建对象而把对象扁平化的一种方式。反序列化是把对象从扁平状态转化成活动对象的相反的步骤。

这一块都是JAVAEE知识点

  1. Servlet
  1. HTTP
  1. Cookie和Session
    cookie是Web服务器发送给浏览器的一块信息。浏览器会在本地文件中给每一个Web服务器存储cookie。以后浏览器在给特定的Web服务器发请求的时候,同时会发送所有为该服务器存储的cookie。下面列出了session和cookie的区别:
    cookie是客户端的,session是服务端的。cookie存储于客户端,记录web服务器的信息,每次上网时都会先查看对应的cookie信息,比如购物时,使用cookie记录购物车信息。session是服务端记录客户机的信息,SessionID是session的唯一标识,使用session可以记录客户端的请求等。
    无论客户端浏览器做怎么样的设置,session都应该能正常工作。因为客户端无法禁用服务端的session。
    在存储的数据量方面session和cookies也是不一样的。session能够存储任意的Java对象,cookie只能存储String类型的对象。

  2. sendRedirect()和forward()方法有什么区别?
    forward是服务器内部的跳转,浏览器的地址栏不会发生变化,同时可以把request和response传递给后一个请求。sendRedirect()是浏览器方面的跳转,要发送两次请求,地址栏也会发生变化,同时request和response也会发生变化,重新生成新的对象。一般认为sendRedirect()比forward()要慢。

  3. jsp


面向对象语言的特性

代码开发模块化,更易维护和修改。
代码复用。
增强代码的可靠性和灵活性。
增加代码的可理解性。
面向对象编程有很多重要的特性,比如:封装,继承,多态和抽象。

上一篇下一篇

猜你喜欢

热点阅读