资讯专栏INFORMATION COLUMN

JAVA面试题(42)

Noodles / 954人阅读

摘要:本文首发于的博客转载请注明出处基础抽象类和接口的区别类层面上抽象类与接口都不能被实例化抽象类只能继承一个直接父类,实现多个接口接口能继承多个接口抽象类大多用作模板类使用,接口用于规范模块间的行为方法抽象类可以用有抽象方法,静态方法以及普通方

    本文首发于cartoon的博客
    转载请注明出处:https://cartoonyu.github.io/c...

JAVA基础

抽象类和接口的区别

类层面上

抽象类与接口都不能被实例化

抽象类只能继承一个直接父类,实现多个接口;接口能继承多个接口

抽象类大多用作模板类使用,接口用于规范模块间的行为

方法

抽象类可以用有抽象方法,静态方法以及普通方法;接口只能是抽象方法

抽象类中方法作用域跟普通类没有区别;接口方法只能是公共的

抽象类中可以通过方法间的相互引用实现自身逻辑,接口只能通过子类实现逻辑

抽象类可以拥有构造器,接口没有构造器

变量

抽象类可以有成员变量与静态变量,接口只能有final的静态变量

Object类有哪些成员方法

wait/notify

clone

hashCode/equals

getClass

finalize

克隆有哪些方法

实现Cloneable重写clone方法

实现Serialize接口

Collections有哪些方法

返回线程安全类

synchronizedXxx

返回不可变集合

emptyXxx

singletonXxx

unmotifitableXxx

集合间的转换

对集合内元素进行操作

添加元素到集合中

addAll

copy

查找元素

binarySearch

frequency

indexOfSubList

shuffle

替换

fill

replaceAll

改变元素位置

sort

swap

rotate

reverse

元素对比

min/max

disJoint

java常见异常类

系统级

IllegalAccessException

OutOfMemoryException

类级

ClassNotFoundException

ClassDefFoundException

对象级

NullPointerException

ClassCastException

CloneNotSupportedException

NoSuchFieldException

InstantiationException

方法级

IllegalArgumentException

NoSuchMethodException

操作级

数字

ArithmeticException

NumberFormatException

数组

ArrayStoreException

IndexOutOfBoundException

IO

IOException

FileNotFoundException

EOFException

数据库

SQLException

线程

InterruptedException

类加载机制是怎么样的

步骤

加载

校验

准备

解析

初始化

使用

卸载

双亲委派模型工作原理

类加载器

BootstrapClassLoader

ExtensionClassLoader

ApplicationClassLoader

UserClassLoader

当类被加载到内存时,逐层向上询问父加载器是否能加载,如果所有父加载器都不能加载,则由当前类加载器负责加载

这样做的原因能有效保证类的唯一性

HashMap的扩容机制

HashMap的扩容机制主要依赖于三个元素:capacity(默认为16),loadFactory负载因子,size当前元素个数

当前元素个数大于8时,内部数组自动转换为红黑树进行存储

当前元素个数大于初始容量x负载因子时,数组扩容两倍,且内部元素的位置重新进行哈希

当前元素个数小于初始容量的0.1倍时,数组缩小一半,同样元素位置需要重新哈希

ArrayList扩容机制

ArrayList扩容主要依赖于size(当前元素个数)以及capacity(默认10)的对比

当元素填满当前数组(capacity=size),将capacity扩容到现在的1.5倍,若计算后元素大于Integer.MAX_VALUE时,抛出OOM

ArrayList与LinkedList区别

ArrayList内部为数组,LinkedList内部为双向链表

新增元素

ArrayList涉及到数组扩容(或者伴随着arrayCopy)

LinkedList修改指针指向(或者伴随着遍历操作)

删除元素

ArrayList需要进行arrayCopy

LinkedList遍历链表并修改指针指向

ArrayList大小受Integer.MAX_VALUE影响,LinkedList大小理论上无限(受JVM调用最大内存影响)

ArrayList在插入元素时需要考虑当前容量以及进行arrayCopy操作,LinkedList插入不需要有额外操作

Array与ArrayList区别

存储类型

Array:基本数据类型以及对象

ArrayList:只能对象

大小限制

Array:在定义时指定,无法增大或缩小

ArrayList:定义时可不指定(初始为10),可以扩容

插入元素

Array:插入基本数据类型元素不涉及装拆箱操作

ArrayList:涉及装拆箱操作

Queue中poll与remove区别

poll与remove都是取出队头元素

队列不为空时,两个方法结果是一样的

队列为空

poll返回null

remove抛出NoSuchElementException

线程不同步集合如何转换成线程同步集合

通过Collections工具类返回

锁为读写锁,锁的粒度为对象级

通过java.util.Concurrent进行包装

锁为写锁,锁的粒度为元素级

通常都是用Concurrent进行包装

JVM

垃圾回收算法

标记-清除

标记不清理对象,清理未标记对象

速度快,但是会造成内存碎片

复制

将内存划分两块区域:清理区与存活区

将不清理对象移到存活区,删除清理区的所有对象

空间浪费大

标记-整理

标记不清理对象,清理未标记对象

移动整理存活对象

成本高,但是有效解决内存碎片问题

G1工作流程

初始标记(停顿线程)

标记GC Root直接关联对象

并发标记

从GC Root对堆中对象进行可达性分析

最终标记(停顿线程)

并行将Remembered Set Logs的数据合并到Remembered Set中

筛选回收

根据各Region的回收价值和成本进行回收计划的制定

Spring

Spring中有哪些模块

Spring Core(Spring 核心库)

Spring AOP

Spring ORM

Spring Dao

Spring Web

Spring Context

Spring Web MVC

Spring MVC的处理流程

请求通过DispatchServlet处理

普通逻辑处理交由Controller处理,Controller处理后返回model

视图处理,DispatchServlet调用View temlate进行视图返回

AOP概念

AOP面向切面编程,它将原本纵向的程序看作成一个个切面的组合,是OOP的补充

动态插入执行逻辑到原有执行流程中

通知(Advice):具体实现逻辑

连接点(JoinPoint):使用通知的位置

切入点(PointCut):指定使用通知的连接点位置

切面(Aspect):通知与切入点集合

引入(introduction):添加新方法属性到现有类中

目标(target):被通知的对象

代理(proxy)

静态代理

动态代理

织入(weaving):将切面引用到目标对象生成代理对象的过程

Spring bean的作用域

singleton(默认)

prototype

request

session

globalSession

数据库

MyBatis中#与$区别

传入数据

:当作字符串传入sql,相当于PrepareStatement

$:直接将参数传入sql,相当于Statement

安全性

可以防止sql注入,$不能

事务的四个特性

一致性

事务执行前后都是一致的

原子性

事务中操作结果都是一样的

隔离性

事务间的操作是相互隔离的

持久性

事务的执行结果是永久性的

char与varchar区别

char的长度是固定的,varchar的长度是不固定的

char会用空格填充到指定长度,varchar不会

char类型数据后面空格会被删除,varchar不会

char的检索效率比varchar高

逻辑分页与物理分页

逻辑分页会将全部数据加载到内存中,再利用代码逻辑返回分页结果

物理分页是在数据库层面进行分页

MyBatis的分页方式

数组分页

sql分页

拦截器分页

RowBounds分页

数据库三范式

第一范式

属性已经是不能分割的数据单位

第二范式

所有非主属性完全依赖于候选属性

第三范式

不存在传递依赖候选属性

内连接外连接区别

内连接只返回符合条件的共有记录

外连接会返回表的所有记录,插入符合条件的列

操作系统

线程与进程的区别

进程是操作系统分配资源时间的最小单位,线程是进程内部调用的实体

不同进程拥有操作系统分配的不同地址空间,同一进程的不同线程共享父进程的内存地址

进程的资源与空间由操作系统分配,线程资源与空间由进程分配

进程切换开销比线程大

进程崩溃不会造成对其他进程的影响;线程崩溃造成父进程的死亡

进程拥有一个程序运行的入口,线程依附进程生存

网络

http方法有哪些

方法

get

post

delete

put

options

connect

trace

link

unline

head

get与post的区别

幂等

get为幂等操作,post为非幂等操作

数据传输

get的数据通过url进行传输,post数据通过http报文传输

get数据大小受url长度限制,post不受限制

可缓存

get数据可缓存,post数据不可缓存

http报文

get的报文没有实体,post的报文有实体

forward与redirect区别

行为方

forward是浏览器行为

redirect是服务器行为

url是否改变

forward url不变

redirect url改变

资源消耗

forward的资源消耗比redirect小

数据共享

redirect不共享数据,forward可以共享request数据

效率

forward高

redirect低

TCP三次握手

一次握手(客户端发起)

创建TCB

发送SYN=1,seq=x

进入SYN-SENT

二次握手(服务器发起)

发送ACK=1,syn=1,ack=y+1,seq=x+1

进入SYN-RCVD

三次握手(客户端发起)

发送ACK=1,seq=x+1,ack=x+1

进入ESTABLISHED

UDP与TCP区别

TCP面向连接,UDP不面向连接

TCP有拥塞控制,UDP没有拥塞控制

TCP资源开销大,UDP资源开销小

TCP只支持一对一,UDP支持一对多

TCP提供可靠传输,UDP尽可能交付

TCP面向字节流,UDP面向报文

设计模式

单例模式实现的三种方法

https://www.cnblogs.com/ngy02...

静态内部类

懒汉式

双重检查式

BIO NIO AIO

BIO

同步阻塞

线程阻塞进行运算后返回结果

NIO

同步非阻塞

请求共用一个线程进行处理

线程会直接返回结果到请求

AIO

异步非阻塞

线程处理后会通过回调返回结果

反射

JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;

动态代理以及静态代理

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/75464.html

相关文章

  • 10个流行的JavaScript面试

    摘要:然而,异步函数不会立即被推入调用堆栈,而是会被推入任务队列,并在调用堆栈为空后执行。将事件从任务队列传输到调用堆栈称为事件循环。我们调用接受和或返回另一个函数称为高阶函数的函数。 为了保证可读性,本文采用意译而非直译 想阅读更多优质文章请猛戳GitHub博客,一年百来篇优质文章等着你! 1.如何理解 JS 中的this关键字? JS 初学者总是对 this 关键字感到困惑,因为与其他现...

    CollinPeng 评论0 收藏0
  • 前端面试总结(js、html、小程序、React、ES6、Vue、算法、全栈热门视频资源)

    摘要:并总结经典面试题集各种算法和插件前端视频源码资源于一身的文档,优化项目,在浏览器端的层面上提升速度,帮助初中级前端工程师快速搭建项目。 本文是关注微信小程序的开发和面试问题,由基础到困难循序渐进,适合面试和开发小程序。并总结vue React html css js 经典面试题 集各种算法和插件、前端视频源码资源于一身的文档,优化项目,在浏览器端的层面上提升速度,帮助初中级前端工程师快...

    pumpkin9 评论0 收藏0
  • 前端面试总结(js、html、小程序、React、ES6、Vue、算法、全栈热门视频资源)

    摘要:并总结经典面试题集各种算法和插件前端视频源码资源于一身的文档,优化项目,在浏览器端的层面上提升速度,帮助初中级前端工程师快速搭建项目。 本文是关注微信小程序的开发和面试问题,由基础到困难循序渐进,适合面试和开发小程序。并总结vue React html css js 经典面试题 集各种算法和插件、前端视频源码资源于一身的文档,优化项目,在浏览器端的层面上提升速度,帮助初中级前端工程师快...

    Carson 评论0 收藏0
  • 前端面试总结(js、html、小程序、React、ES6、Vue、算法、全栈热门视频资源)

    摘要:并总结经典面试题集各种算法和插件前端视频源码资源于一身的文档,优化项目,在浏览器端的层面上提升速度,帮助初中级前端工程师快速搭建项目。 本文是关注微信小程序的开发和面试问题,由基础到困难循序渐进,适合面试和开发小程序。并总结vue React html css js 经典面试题 集各种算法和插件、前端视频源码资源于一身的文档,优化项目,在浏览器端的层面上提升速度,帮助初中级前端工程师快...

    muzhuyu 评论0 收藏0

发表评论

0条评论

Noodles

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<