油管上最火的java面试题集合

在油管上搜到的一个查看量最高的面试题整理并复习一下java知识。

老印已经感觉已经占领了油管上编程教程的频道,一搜索编程相关的教程,全都是印度人做的,口音听了分分钟怀疑人生。听完他们的教程,再听正常英语感觉是真的亲切。附上链接

基础问题

Q1. What is the difference JRE,JVM,JDK

JVM:java virtual machine虚拟机,java二进制码执行的运行环境。不同的操作系统需安装不同的JVM
JRE: java runtime environment 是实现JVM的运行环境,他为JVM提供运行代码时所需要的class 库
JDK: java development kit 包含java编译需要的工具,及文档和库等,他包含JRE。

Q2. What is the synchronization(同步)

类似于很多人一起定一个火车票座位,当有多个人订的时候,只有一个人可以订到,并且会被锁定,这个时候其他人就不能再使用这个座位。多个线程来的时候就会有一个同步锁,来锁定一个线程。
在这里插入图片描述

Q3. difference between processes and threads.进程和线程的区别,附:并发和并行的区别

进程和线程

一个操作系统运行多个进程,每个应用为一个进程,每个进程可以运行多个线程。这也就是并发编程。
操作系统控制进程,开发者控制线程。
在这里插入图片描述
在这里插入图片描述

并发和并行的区别

针对某一个应用程序,也即一个进程来定义。
并发:一个应用程序如果可以开启多个线程让多个线程同时存在,但是交替执行(比如在单核处理器上)则他称之为并发执行。
并行:一个应用程序能并行执行,那么就一定是运行在多核处理器上。此时,程序中的每个线程都将分配到一个独立的处理器核上,因此可以同时运行

并发编程:指在同一时间执行多个任务。又包含并行,和并发。并发不一定并行,但并行一定并发

同步和异步

同步和异步是概念,并发,并行,串行,才是具体实现形式。
同步:多个任务情况下,一个任务A执行结束,才可以执行另一个任务B,调用方法在当前线程中运行,且会阻塞线程。只存在于一个线程中。具体利用串行方式来实现。
异步:多个任务情况下,一个任务A正在执行,同时可以执行另一个任务B。任务B不用等待任务A结束才执行。存在多条线程。并发和并行其实是异步线程实现的两种形式。并行其实是真正的异步。

Q4. 什么是wrap封装

就是把基本类型数据转化成他对应的对象。
在这里插入图片描述

Q5 final, finally,finalize

在这里插入图片描述

Q6 string, string builder,stringbuffer

String是不可变的,StringBuilder和StringBuffer是可变的
在这里插入图片描述

Q7 Heap , Stack

在这里插入图片描述

Q8 array,arraylist,和vector的区别

array是放相同的基本类型或者相同的引用类型的数组,他在初始化时size就固定了,而不能改变。
arrayList像一个动态数组,他可以动态的改变size,线程安全的。
As the documentation says, a Vector and an ArrayList are almost equivalent.

Vector跟arraylist几乎相同但是是线程不安全的,所以一般情况下都用arrayList而不用vector,“只有学生或者没经验的程序员用vector”.“think in java”说的是现代版本的java是用arraylist来替换了vector所以vector只出现在老版本的java中。

Q9. difference HashMap and HashTable

现代java用HashTable 代替老版本HashMap,HashTable是同步并且线程安全可以运用在多线程,而HashTable不具备该特征。

Q10. equals and “==”

equals比较的是对象中的value,基本类型没有
“==”比较的是对象的地址,基本类型的值

public static void main(String[] args) {
        String str1  = "abc";
        String str2 = "abc";
        String str11 = new String();
        String str22 = new String();
        int a = 1;
        int b = 2;

        print(str1 == str2);//true 比较的是地址  java把字符串常量统一组织起来放到特定地址,并且所有内容相同的字符串会指向同一个地址。
        print(str11 == str22);//false 比较的是地址
        print(str11.equals(str22));//true 比较的是对象的值,而基本类型没有equals方法

    }

OOP问题

Q1. 抽象类和接口的区别

抽象类
抽象类是用来捕捉子类的通用特性的 。它不能被实例化,只能被用作子类的超类。抽象类是被用来创建继承层级里子类的模板
接口
接口是抽象方法的集合。如果一个类实现了某个接口,那么它就继承了这个接口的抽象方法。这就像契约模式,如果实现了这个接口,那么就必须确保使用这些方法。接口只是一种形式,接口自身不能做任何事情。
在这里插入图片描述

Q2. 什么是多态polymorphism

多态就是“一个接口可以有多种实现"。
也就是说一个接口在不同的环境下表现出不同的功能。

多态举例:比方说按下 F1键这个动作是一个类,如果当前在 Word 下弹出的就是 Word 帮助;在Windows 下弹出的就是 Windows 帮助和支持,在浏览器下可能就是下载。也就是说同一个事件发生在不同的子类对象上会产生不同的结果。

多态的作用:消除类型之间的耦合关系。
多态的实现技术称为:动态绑定(dynamic binding),是指在运行期间判断所引用对象的实际类型而不是编译期间,根据其实际的类型调用其相应的方法。

多态存在的三个必要条件:
一、要有继承;
二、要有重写;
三、父类引用指向子类对象。

Q3.重写和重载

重载(Overloading)
完全不同的方法,除了方法名称相同。
重载Overloading是一个类中多态性的一种表现。
Java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义。
重载的时候,方法名要一样,但是参数类型和个数不一样,返回值类型可以相同也可以不相同。无法以返回型别作为重载函数的区分标准。

重写Overwrite
子类继承父类的方法并修改为重写。
方法名称相同,参数列表相同,返回值类型相同
重写方法的规则:
1)参数列表必须完全与被重写的方法相同,否则不能称其为重写而是重载。
2)返回的类型必须一直与被重写的方法的返回类型相同,否则不能称其为重写而是重载。

注意静态方法不会被重写,你可以重写他,不会报错,但是他是在编译期就已经决定了的,所以即使你使用子类重写了静态方法,当使用父类调用的时候他还是执行父类方法。

Servlet

Q1. 什么是servlet

Servlet(Server Applet),全称Java Servlet,未有中文译文。是用Java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,处理http请求和恢复,生成动态Web内容。狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。
大多数网页传输使用http协议所以我们一般继承HttpServlet类来实现功能。

Tomcat是一个服务器容器,在Tomcat上运行servlet程序就可以提供一个web服务。

在这里插入图片描述
Servlet生命周期
Servlet 通过调用 init () 方法进行初始化。
Servlet 调用 service() 方法来处理客户端的请求。
Servlet 通过调用 destroy() 方法终止(结束)。

Q2. 什么是session和cookies

什么是session

为什么会出现session会话,它出现的机理是什么?我们知道,我们用浏览器打开一个网页,用到的是HTTP协议,它是无状态的,什么是无状态呢?就是说这一次请求和上一次请求是没有任何关系的,互不认识的,没有关联的。但是这种无状态的的好处是快速。
举个例子比如购物车,如果我不登录的情况下网页也会创建一个临时购物车给我,由于HTTP协议无状态,所以并不知道是哪个用户操作的,所以服务端要为特定的用户创建了特定的Session,用于标识这个用户,并且跟踪用户,这样才知道购物车里面有几本书。这个就是session,Session是保存在服务端的,有一个唯一标识。在服务端保存Session的方法很多,内存、数据库、文件都有。
再举个例子比如一个用户登录同一个网不同页面: 我在www.a.com/login.php里面登陆了,我在www.a.com/index.php 也希望是登陆状态,但是,这是2个不同的页面,也就是2个不同的HTTP请求,这2个HTTP请求是无状态的,也就是无关联的,所以无法单纯的在index.php中读取到它在login.php中已经登陆了!

什么是cookie

思考一下服务端如何识别特定的客户?这时就要用到cookie。每次HTTP请求的时候,客户端都会发送相应的Cookie信息到服务端。第一次创建Session的时候,服务端会在HTTP协议中告诉客户端,需要在 Cookie 里面记录一个Session ID,以后每次请求把这个会话ID发送到服务器,我就知道你是谁了。当然如果为了隐私考虑,也可以在浏览器禁用cookie。

举例:非常常见一个场景就是我们登陆过一个网站,浏览器会询问是否要保存用户名和密码,这个信息可以写到Cookie里面,访问网站的时候,网站页面的脚本可以读取这个信息,就自动帮你把用户名给填了,能够方便一下用户。这也是Cookie名称的由来,给用户的甜点省去操作。

所以cookie是运行在客户端,session是运行在服务端。

Q3. 什么是Request Dispatcher 请求调度?

在这里插入图片描述

JDBC

Q1. 什么是JDBC driver

什么是JDBC

Java数据库连接(java代码),(Java Database Connectivity,简称JDBC)
什么是 JDBC 驱动程序?
JDBC 驱动实现了 JDBC API 中定义的接口,该接口用于与数据库服务器进行交互。
JDBC API的实现,是由JDBC驱动程序实现的,不同的数据库对应有不同的驱动程序。需要使用某个具体的JDBC驱动,我们需要将其对应的Jar包引入到项目中。

JDBC目标是做到“一次编写,到处运行”,当你使用JDBC API 访问数据库后,无论是更换数据库还是更换操作系统,都不需要修改代码。所以使用JDBC,我们可以使用相同的API访问不同的数据库服务(比如MySQL和Oracle等),只需要修改JDBC引入的驱动程序包就可以了。
在这里插入图片描述

Q2. JAVA连接数据库的步骤

  1. 注册驱动程序的类
  2. 创建连接
  3. 创建声明
  4. 执行查询
  5. 关闭连接

注册

Spring

Q1. 什么是Spring

Spring,一种用来简化企业应用级开发的一种开源框架
简化开发:它对常用的API做了封装,比如对JDBC的封装,使用Spring JDBC访问数据库,就不需要考虑如何获取连接和关闭的问题。
解耦:Spring帮我们管理软件之间的依赖关系,这样对象之间的耦合性就降低了,这样的维护性就得到了提高。
集成其它框架:方便扩展和优化其功能,例如和Mybatis的集成等。
Spring框架是按照设计模式精心打造的,这使得我们在开发环境中,能方便的使用框架,不用考虑后台是怎么进行的。
Spring容器是Spring框架中一个核心的模块,用来管理对象的创建,销毁和初始化扥操作,以及对象之间的依赖关系等。

Q2. 什么是SpringMVC

Spring是IOC和AOP的容器框架,SpringMVC是基于Spring功能之上添加的Web框架,想用SpringMVC必须先依赖Spring。
简单点的话可以将SpringMVC类比于Struts。 而他与Spring结合更好现在逐步淘汰了Struts。
Spring可以说是一个管理bean的容器,也可以说是包括很多开源项目的总称,spring mvc是其中一个开源项目,所以简单走个流程的话,http请求一到,由容器(如:tomact)解析http搞成一个request,通过映射关系(路径,方法,参数啊)被spring mvc一个分发器去找到可以处理这个请求的bean,那tomcat里面就由spring管理bean的一个池子(bean容器)里面找到,处理完了就把响应返回回去。

Q3. 什么是Hibernate

Hibernate:ORM Hibernate是一个Java ORM开发框架ORM是Object Relation Mapping的缩写,顾名思义,即对象关系映射。ORM是一种以面向对象的方式来进行数据库操作的技术。Web开发中常用的语言,都会有对应的ORM框架。而Hibernate就是Java开发中一种常用ORM框架,另一个现在流行的ORM框架是Mybatis。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Charles Ray

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值