刷Java面试题(基础篇)

面向对象的基本特征

封装

封装是面向对象的特征之一,是对象和类概念的主要特性。封装,也就是把客观事物
封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不
可信的进行信息隐藏。

继承

继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的
情况下对这些功能进行扩展。通过继承创建的新类称为“子类”或“派生类”。被继承的类
称为“基类”、“父类”或“超类”。继承的过程,就是从一般到特殊的过程。
继承的实现有三类:实现继承、接口继承和可视继承。

多态

多态性(polymorphisn)是允许你将父对象设置成为和一个或更多的他的子对象相等
的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。
实现多态,有二种方式,覆盖,重载。

int和Integer区别

1、Integer是int的包装类,int则是java的一种基本数据类型 
2、Integer变量必须实例化后才能使用,而int变量不需要 
3、Integer实际是对象的引用,当new一个Integer时,实际上是
	生成一个指针指向此对象;而int则是直接存储数据值 
4、Integer的默认值是null,int的默认值是0
 原文链接:https://www.cnblogs.com/guodongdidi/p/6953217.html

为什么有了int还要integer
Int是java的原始数据类型,Integer是java的为int提供的封装类。Java为每个原始类型提供
了封装类。因为Java语言是面向对象的,这也是它只所以流行的原因之一,对象封装有很
多好处,可以把属性也就是数据跟处理这些数据的方法结合在一起,比如Integer就有
parseInt(),tolist()等方法来专门处理int型相关的数据,另一个非常重要的原因就是在  	
Java中绝大部分方法或类都是用来处理类类型对象的,如ArrayList集合类就只能以类作为
他的存储对象,而这时如果想把一个int型的数据存入list是不可能的,必须把它包装成
类,也就是Integer才能被List所接受。所以Integer的存在是很必要的  

final,finally,finalize区别

1、final修饰符(关键字)。被final修饰的类,就意味着不能再派生出新的子类,
不能作为父类而被子类继承。因此一个类不能既被abstract声明,又被final声明。
将变量或方法声明为final,可以保证他们在使用的过程中不被修改。被声明为final的
变量必须在声明时给出变量的初始值,而在以后的引用中只能读取。被final声明的
方法也同样只能使用,即不能方法重写。

2、finally是在异常处理时提供finally块来执行任何清除操作。不管有没有异常被抛出、捕
获,finally块都会被执行。try块中的内容是在无异常时执行到结束。catch块中的内容,是
在try块内容发生catch所声明的异常时,跳转到catch块中执行。finally块则是无论异常是
否发生,都会执行finally块的内容,所以在代码逻辑中有需要无论发生什么都必须执行的
代码,就可以放在finally块中。
3、finalize是方法名。java技术允许使用finalize()方法在垃圾收集器将对象从内存中清		    
除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对
这个对象调用的。它是在object类中定义的,因此所有的类都继承了它。子类覆盖
finalize()方法以整理系统资源或者被执行其他清理工作。finalize()方法是在垃圾收
集器删除对象之前对这个对象调用的
原文链接:https://blog.csdn.net/cyl101816/java/article/details/67640843

重载和重写

override(重写)
   1、方法名、参数、返回值相同。
   2、子类方法不能缩小父类方法的访问权限。
   3、子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。
   4、存在于父类和子类之间。
   5、方法被定义为final不能被重写。

 overload(重载)
  1、参数类型、个数、顺序至少有一个不相同。 
  2、不能重载只有返回值不同的方法名。
  3、存在于父类和子类、同类中。

抽象类和接口

	接口(interface)和抽象类(abstract class)是支持抽象类定义的两种机制。
	接口是公开的,不能有私有的方法或变量,接口中的所有方法都没有方法体,通过关键字interface实现。
	抽象类是可以有私有方法或私有变量的,通过把类或者类中的方法声明为abstract来表示
一个类是抽象类,被声明为抽象的方法不能包含方法体。抽象类的子类为父类中所有抽象
方法的具体实现,否则也是抽象类。
	接口可以被看作是抽象类的变体,接口中所有的方法都是抽象的,可以通过接口来间接
	的实现多重继承。接口中的成员变量都是static final类型,由于抽象类可以包含部分方
	法的实现,所以,在一些场合下抽象类比接口更有优势。

相同点:
(1)都不能被实例化
(2)接口的实现类或抽象类的子类都只有实现了接口或抽象类中的方法后才能实例化。

不同点:

(1)接口只有定义,不能有方法的实现,java 1.8中可以定义default方法体,而抽象类可
以有定义与实现,方法可在抽象类中实现。
(2)实现接口的关键字为implements,继承抽象类的关键字为extends。一个类可以实
现多个接口,但一个类只能继承一个抽象类。所以,使用接口可以间接地实现多重继承。
(3)接口强调特定功能的实现,而抽象类强调所属关系。
(4)接口成员变量默认为public static final,必须赋初值,不能被修改;其所有的成员方
法都是public、abstract的。抽象类中成员变量默认default,可在子类中被重新定义,也
可被重新赋值;抽象方法被abstract修饰,不能被private、static、synchronized和native
等修饰,必须以分号结尾,不带花括号。
(5)接口被用于常用的功能,便于日后维护和添加删除,而抽象类更倾向于充当公共类
的角色,不适用于日后重新对立面的代码修改。功能需要累积时用抽象类,不需要累积时
用接口。
原文链接 https://blog.csdn.net/zhangquan2015/java/article/details/82808399

反射的实现及应用

参考链接: https://www.jianshu.com/p/d6035d5d4d12
		 https://blog.csdn.net/SongYuxinIT/article/details/81872066

注解的原理及其使用场景

参考链接:https://blog.csdn.net/vbirdbest/article/details/78822646

HTTP中get和post区别

原本以为就是常说的一个通过url一个request body啥的,get有长度限制啥的,看了这个
文章才知道具体有啥   膜拜: https://www.cnblogs.com/logsharing/p/8448446.html

cookie和session

cookie:
http请求是无状态的。也就是说即使第一次和服务器连接后并且登录成功后,第二次请求
服务器依然不能知道当前请求是哪个用户。cookie的出现就是为了解决这个问题,第一次
登录后服务器返回一些数据(cookie)给浏览器,然后浏览器保存在本地,当该用户发送
第二次请求的时候,就会自动的把上次请求存储的cookie数据自动的携带给服务器,服务
器通过浏览器携带的数据就能判断当前用户是哪个了
session:
session和cookie的作用有点类似,都是为了存储用户相关的信息。不同的是,cookie是
存储在本地浏览器,而session存储在服务器。存储在服务器的数据会更加的安全,不容
易被窃取
结合使用:
通过cookie存储一个session_id,然后具体的数据则是保存在session中。如果用户已经登
录,则服务器会在cookie中保存一个session_id,下次再次请求的时候,会把该
session_id携带上来,服务器根据session_id在session库中获取用户的session数据。

JDBC流程

注冊驱动 (仅仅做一次)	
建立连接(Connection)	
创建传输器Statement	
运行SQL语句	
处理运行结果(ResultSet)	
释放资源

list set map

在这里插入图片描述

list和set是实现了collection接口的
List:1.可以允许重复的对象。
    2.可以插入多个null元素。
      3.是一个有序容器,保持了每个元素的插入顺序,输出的顺序就是插入的顺序。
      4.常用的实现类有 ArrayList、LinkedList 和 Vector。ArrayList 最为流行,它提供了使
      用索引的随意访问,而 LinkedList 则对于经常需要从 List 中添加或删除元素的场合更为合适	
 Set:1.不允许重复对象
    2. 无序容器,你无法保证每个元素的存储顺序,TreeSet通过 Comparator  或者 
    Comparable 维护了一个排序顺序。
      3. 只允许一个 null 元素
      4.Set 接口最流行的几个实现类是 HashSet、LinkedHashSet 以及 TreeSet。最流行
      的是基于 HashMap 实现的 HashSet;TreeSet 还实现了 SortedSet 接口,因此 
      TreeSet 是一个根据其 compare() 和 compareTo() 的定义进行排序的有序容器  
map:	     
1.Map不是collection的子接口或者实现类。Map是一个接口。
2.Map 的 每个 Entry 都持有两个对象,也就是一个键一个值,Map 可能会持有相同的值
对象但键对象必须是唯一的。
3. TreeMap 也通过 Comparator  或者 Comparable 维护了一个排序顺序。
4. Map 里你可以拥有随意个 null 值但最多只能有一个 null 键。
5.Map 接口最流行的几个实现类是 HashMap、Hashtable 和 TreeMap     

优缺点:

如果经常用索引进行访问,那么使用Arraylist,如果经常增删使用LinkList。
如果你想容器中的元素能够按照它们插入的次序进行有序存储,那么用 List。
保证唯一性,使用Set,使用键值对形式使用Map			
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值