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:
- 作用在方法内,表示抛出具体异常,由方法体内的语句处理。
- 具体向外抛出的动作,所以它抛出的是一个异常实体类。若执行了Throw一定是抛出了某种异常。
Throws:
- 作用在方法的声明上,表示如果抛出异常,则由该方法的调用者来进行异常处理。
- 主要的声明这个方法会抛出会抛出某种类型的异常,让它的使用者知道捕获异常的类型。
- 出现异常是一种可能性,但不一定会发生异常。
十五、集合:
?
十六、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进行处理,非常感谢!