面试二

1、面向对象特征

  • 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么

  • 继承:继承是从已有类得到继承信息创建新类的过程,提供继承信息的类称为父类(基类、超类),得到继承信息的类称为子类。继承让变化中的软件系统有了一定的延续性,继承也是封装程序中可变因素的重要手段

  • 封装:封装就是把数据及操作数据的方法绑定起来。封装就是隐藏一切可以隐藏的东西,只向外部提供编程接口

  • 多态:多态是指同一个对象对同一消息做出不同的响应

    • 实现多态两个条件
      • 子类继承父类并重写父类中的方法
      • 父类引用类型需要指向子类对象

2、final关键字

  • final关键字修饰的类不能被继承
  • final关键字修饰的方法为最终方法,不能被重写
  • final关键字修饰的变量为常量,只能被赋值一次
    • final修饰的成员变量,必须在声明的同时进行赋值
    • final修饰的局部变量,可以先声明,后赋值

3、基本数据类型

基本数据类型 所占字节 包装类型
byte 1字节 Byte
boolean 1字节 Boolean
short 2字节 Short
int 4字节 Integer
long 8字节 Long
char 2字节 Character
float 4字节 Float
double 8字节 Double

4、== 和 equals 的区别是什么/h2>
  • ==:对于基本类型和引用类型的作用效果是不同的
    • 基本类型:比较的是值是否相同
    • 引用类型:比较的是引用是否相同
  • equals:本质上是==,String和Integer等重写了equals方法,把它变成了值比较

JVM

进程和线程

多线程

synchronized:用来控制线程同步

  • Thread:需要重写run() 方法,Java中的继承是单继承,继承了Thread之后就无法继承其他类了
  • Runnable接口:需要重写run() 方法,接口更为灵活
  • Callable接口:call方法可以在线程执行结束时产生一个返回值

一、阐述 final、finally、finalize 的区别。

1:final:修饰符(关键字)有三种用法:

如果一个类被声明为 final,意味着它不能再派生出新的子类,即不能被继承,因此它和 abstract 是反义词。

将变量声明为 final,可以保证它们在使用中不被改变,被声明为 final 的变量必须在声明时给定初值,而在以后的引用中只能读取不可修改。

被声明为 final 的方法也同样只能使用,不能在子类中被重写。

2:finally

通常放在 try…catch…的后面构造总是执行代码块,这就意味着程序无论正常执行还是发生异常,这里的代码只要 JVM 不关闭都能执行,可以将释放外部资源的代码写在 finally 块中。

3:finalize

Object 类中定义的方法,Java 中允许使用 finalize()方法在垃

圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在销毁对象时调用的,通过重写 finalize()方法可以整理系统资源或者执行其他清理工作。

二、Array和ArrayList的异同点:

  • Array数组可以包含基本类型和对象类型
  • ArrayList却只能包含对象类型
  • Array数组在存放的时候一定是同种类型的元素。ArrayList就不一定了,因为ArrayList可以存储Object。

空间大小比较:

  • Array它的空间大小是固定的,空间不够时也不能再次申请,所以需要事前确定合适的空间大小。
  • ArrayList的空间是动态增长的,如果空间不够,它会进行扩容

效率比较

  • 数组在内存中是连续存储的,所以它的索引速度是非常的快,而且赋值与修改元素也很简单。
  • 数组在俩数据中插入数据是很麻烦的,还有我们在声明数组的时候,必须同时指明数组的长度,数组的长度过长,会造成内存浪费,数组和长度过短,会造成数据溢出的错误
  • Arraylist在内存中也是连续存储的,很方便的进行数据的插入和移除(比Array方便,但是不如linkedlist)

使用场景:

  • 如果在使用过程中,大小不固定,可能需要动态增长的话,就需要使用ArrayList了。

三、ArrayList和LinkedList

共性:ArrayList与LinkedList都是List接口的实现类,因此都实现了List的所有未实现的方法,只是实现的方式有所不同。

区别:List接口的实现方式不同

ArrayList以数组的方式来实现List接口,因此对于快速的随机取得对象的需求,使用ArrayList实现执行效率上会比较好。

LinkedList是采用链表的方式来实现List接口的,因此在进行insert和remove动作时效率要比ArrayList高。适合用来实现Stack(堆栈)与Queue(队列)。

四、HashTable和HashMap

共性:都实现了Map接口。

区别

(1)继承的父类不同

Hashtable继承自Dictionary类,而HashMap继承自AbstractMap类。

(2)线程安全性不同

Hashtable的方法是Synchronize的,而HashMap中的方法在缺省情况下是非Synchronize的。

(3)提供contains方法

Hashtable则保留了contains,containsValue和containsKey三个方法,其中contains和containsValue功能相同。

HashMap把Hashtable的contains方法去掉了,改成containsValue和containsKey,因为contains方法容易让人引起误解。

(4)key和value是否允许null值

Hashtable中,key和value都不允许出现null值。HashMap中,null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null。

(5)两个遍历方式的内部实现上不同

HashMap使用了 Iterator;Hashtable使用 Iterator,Enumeration两种方式 。

(6)hash值不同

哈希值的使用不同,HashTable直接使用对象的hashCode。而HashMap重新计算hash值。

(7)内部实现使用的数组初始化和扩容方式不同

HashTable在不指定容量的情况下的默认容量为11,增加的方式是 old*2+1;

而HashMap为16,HashMap则要求一定为2的整数次幂。

五、Error和Exception有什么区别2)

比如内存溢出,不可能指望程序能处理这样的情况;

Exception表示需要捕捉或者需要程序进行处理的异常,是一种设计或实现问题;也就是说,它表示如果程序运行正常,从不会发生的情况。

六、java中==和eqauls()的区别,equals()和`hashcode的区别

**== :**是运算符,用于比较两个变量是否相等。

**equals:**是Object类的方法,用于比较两个对象是否相等

默认Object类的equals方法是比较两个对象的地址,此时和==的结果一样.

换句话说:基本类型比较用==,比较的是他们的值.

默认下,对象用==比较时,比较的是内存地址,如果需要比较对象内容,需要重写equal方法

六:反射

反射机制是Java语言中一个非常重要的特性:

它允许程序在运行时进行自我检查,同时也允许对其内部成员进行操作。

反射机制提供的功能主要有:

得到一个对象所属的类;

获取一个类的所有成员变量和方法;

在运行时创建对象;

在运行时调用对象的方法;

缺点:

忽视权限符的检查,破坏了封装。

**七、**列出一些你常见的运行时异常/strong>

  • ArithmeticException(算术异常)
  • ClassCastException (类型转换异常)
  • IllegalArgumentException (非法参数异常)
  • IndexOutOfBoundsException (下标越界异常)
  • NullPointerException (空指针异常)
  • SecurityException (安全异常)

八、Object中有哪些公共方法/strong>

  • equals()
  • clone()
  • getClass()
  • notify(),notifyAll(),wait()
  • toString()

九、String s = new String(“xyz”);创建了几个字符串对象/strong>

两个对象,一个是静态区的”xyz”,一个是用new创建在堆上的对象。

StringBuilder:线程不安全.

StringBuffer: 线程安全,性能相对较低。

十、Java修饰符

Java中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。Java 支持 4 种不同的访问权限。

default (即默认,什么也不写): 在同一包内可见,不使用任何修饰符。使用对象:类、接口、变量、方法。

private : 在同一类内可见。使用对象:变量、方法。 注意:不能修饰类(外部类)

public : 对所有类可见。使用对象:类、接口、变量、方法

protected : 对同一包内的类和所有子类可见。使用对象:变量、方法。 注意:不能修饰类(外部类)。

修饰符 当前类 同一包内 子孙类(同一包) 子孙类(不同包) 其他包
public Y Y Y Y Y
protected Y Y Y Y/N(说明) N
default Y Y Y N N
private Y N N N N

十一、关于方法之间的传递

按值传递:当一个简单类型传递给一个方法时,使用按值传递。

引用传递:对象传递则按引用传递。

十二、string类中的.lenth()方法,数组中.lenth是属性。

十三、ES与传统数据库的对比

1.结构名称不同

ES包括很多索引,索引包括很多类型,类型包括很多文档,文档包括很多字段**。**

关系型数据库 数据库
ElasticSearch 索引 类型 文档 字段

2、ES分布式搜索,数据库遍历方式搜索

ES支持分片和复制,从而方便水平分隔和扩展,保证了ES的高吞吐性和高可用性。

ES创建索引库的时候,可以指定分片的个数,每个分片本身就是个完整的并且独立的索引库,索引可以放在集群的任何一个节点上。

1.允许水平分隔/扩展内容量

2.允许在分片上进行分布式、并行式的操作,方便提高性能和高吞吐性

3.分片的分布,文档的聚合回搜索完全有ES控制。

ES用倒排索引,传统数据库用的是B+树索引。

假设一个文档(用id标识)是有许多的单词(用value标识)组成的,每个单词可能同一个文档中重复出现很多次,也可能出现在不同的文档中。

**正排序:**从文档角度看其中的单词,表示每个文档都含有哪些单词,以及每个单词出现了多少次(词频)及其出现位置(相对于文档首部的偏移量)。

**倒排序:**从单词角度看文档,标识每个单词分别在那些文档中出现(文档ID),以及在各自的文档中每个单词分别出现了多少次(词频)及其出现位置(相对于该文档首部的偏移量)。

ES没有用户权限限制

ES没有事物回滚,不支持回滚,勿删不能恢复。

ES免费,完全开源,传统数据库部分免费。

十四、throw和throws的区别联系

Throw:

  1. 作用在方法内,表示抛出具体异常,由方法体内的语句处理。
  2. 具体向外抛出的动作,所以它抛出的是一个异常实体类。若执行了Throw一定是抛出了某种异常。

Throws:

  1. 作用在方法的声明上,表示如果抛出异常,则由该方法的调用者来进行异常处理。
  2. 主要的声明这个方法会抛出会抛出某种类型的异常,让它的使用者知道捕获异常的类型。
  3. 出现异常是一种可能性,但不一定会发生异常。

十五、集合:

?

十六、HashSet和HashMap区别:

  • HashSet实现了Set接口,它不允许集合中有重复的值。它存储的是对象
  • HashMap实现了Map接口,Map接口对键值对进行映射。Map中不允许重复的键。Map接口有两个基本的实现,HashMap和TreeMap。

十七、解决Hash冲突的方法有哪些

? 开放地址法、链地址法、再哈希法、建立公共溢出区等。

十八、数据库索引和主键的区别:

1、应用范畴不同:

在数据库关系图中为表定义bai主键将自动创建主du键索引,主键索引是唯一索引的特定类型。该索引要求主键中的每个值都唯一。当在查询中使用主键索引时,它还允许对数据的快速访问。

2、种类不同:

根据数据库的功能,可以在数据库设计器中创建三种索引:唯一索引、主键索引和聚集索引。而,主键只是其中的一种。

3、创建方式不同:

当创建或更改表时可通过定义 PRIMARY KEY 约束来创建主键。一个表只能有一个 PRIMARY KEY 约束,而且 PRIMARY KEY 约束中的列不能接受空值。由于 PRIMARY KEY 约束确保唯一数据,所以经常用来定义标识列。经常在WHERE子句中的列上面创建索引。

UDP TCP
是否连接 无连接 面向连接
是否可靠 不可靠传输,不使用流量控制和拥塞控制 可靠传输,使用流量控制和拥塞控制
连接对象个数 支持一对一,一对多,多对一和多对多交互通信 只能是一对一通信
传输方式 面向 文 面向字节流
首部开销 首部开销小,仅8字节 首部最小20字节,最大60字节
适用场景 适用于实时应用(IP电话、视频会议、直播等) 适用于要求可靠传输的应用,例如文件传输

十九、HTTP和HTTPS的联系

HTTP:

是互联 上应用最为广泛的一种 络协议,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使 络传输减少。

HTTPS:

是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。

HTTPS协议的主要作用可以分为两种:

一种是建立一个信息安全通道,来保证数据传输的安全;

另一种就是确认 站的真实性。

二十、HTTPS和HTTP的区别主要如下:

1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。

2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。

3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的 络协议,比http协议安全

二十一、Session和cookie的区别联系。

1、cookie数据存放在客户的浏览器上,session数据放在服务器上。

2、cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session。

3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用cookie。

4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。

5、可以考虑将登陆信息等重要信息存放为session,其他信息如果需要保留,可以放在cookie中。

左外连接:

左外连接就是把左边的数据作为查询条件, 一条一条去右边查询,如果有就显示,没有就为null。

右外连接:

返回包括右表中的所有记录和左表中联结字段相等的记录

一、jsp和servlet的不同之处

1.Servlet在Java代码中通过HttpServletResponse对象动态输出HTML内容。

2.JSP在静态HTML内容中嵌入Java代码,Java代码被动态执行后生成HTML内。

二、jsp和servlet各自的特点

1.Servlet能够很好地组织业务逻辑代码,但是在Java源文件中通过字符串拼接的方式生成动态HTML内容会导致代码维护困难、可读性差。

2.JSP虽然规避了Servlet在生成HTML内容方面的劣势,但是在HTML中混入大量、复杂的业务逻辑同样也是不可取的。(思考:前后端分离)

ES不适合做数据库的原因

1、mapping不可更改,不能改index属性。

2、无法多对多关联

3、没有用户验证和权限控制

4、从ES设计初衷看就是为了检索和统计

5、项目不好确定分片的数量。

6、适用于特定的需求,不适合做数据的存储。

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年3月13日
下一篇 2021年3月13日

相关推荐