面试常见的一些底层知识(一)

java基础

Posted by LY on October 9, 2018

在这里小小推荐下我的个人博客

csdn:雷园的csdn博客

个人博客:雷园的个人博客

简书:雷园的简书

面试常见的一些底层知识点(一)

JDK和JRE的区别是什么

JDK包括JRE,JDK为Java Development Kit也就是Java的开发环境,JRE为Java Runtime Enviroment也就是Java运行时环境,JRE包含bin目录下的JVM(Java虚拟机)以及lib目录下的类库。

什么是封装

封装给对象提供了隐藏内部特性和行为的能力。对象提供一些能被其他对象访问的方法来改 变它内部的数据。

封装的好处是什么

1.提高代码的可维护性。

2.通过隐藏属性来保护对象。

3.禁止对象之间的不良交互

什么是继承

继承给对象提供了从基类获取字段和方法的能力。继承提供了代码的重用行,也可以在不修改类的情况下给现存的类添加新特性。

什么是多态

多态是编程语言给不同的底层数据类型做相同的接口展示的一种能力。一个多态类型上的操作可以应用到其他类型的值上面。

什么是抽象

抽象是把想法从具体的实例中分离出来的步骤,因此,要根据他们的功能而不是实现细节来创建类。 Java 支持创建只暴漏接口而不包含方法实现的抽象的类。这种抽象技术的主要目的是把类的行为和实现细节分离开。

接口和抽象类的区别

1.接口是公开的,里面不能有私有的方法或变量,是用于让别人使用的,而抽象类是可以有私有方法或私有变量的,另外,实现接口的一定要实现接口里定义的所有方法,而实现抽象类可以有选择地重写需要用到的方法,一般的应用里,最顶级的是接口,然后是抽象类实现接口,最后才到具体类实现。

2.接口可以实现多重继承,而一个类只能继承一个超类,但可以通过继承多个接口实现多重继承,接口还有标识(里面没有任何方法,如Remote接口)和数据共享(里面的变量全是常量)的作用。

int 和 Integer 有什么区别

int是Java的基础数据类型而integer是int的包装类是一个类。

重载(overload)和重写(override)

重写(override)

  1. 方法名、参数、返回值相同。

  2. 子类方法不能缩小父类方法的访问权限。

  3. 子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。

  4. 存在于父类和子类之间。

  5. 方法被定义为final不能被重写。

重载(overload)

  1. 参数类型、个数、顺序至少有一个不相同。

  2. 不能重载只有返回值不同的方法名。

  3. 存在于父类和子类、同类中。

HTTP请求的GET和POST的区别

GET方法会把名值对追加在请求的URL后面。因为URL对字符数目有限制,进而限制了用在客户端请求的参数值的数目。并且请求中的参数值是可见的,因此,敏感信息不能用这种方式传递。

POST方法通过把请求参数值放在请求体中来克服GET方法的限制,因此,可以发送的参数的数目是没有限制的。最后,通过POST请求传递的敏感信息对外部客户端是不可见的。

参考:HTTP请求中POST与GET的区别

无论客户端浏览器做怎么样的设置,session都应该能正常工作。客户端可以选择禁用 cookie, 但是, session 仍然是能够工作的,因为客户端无法禁用服务端的 session。

jdbc流程

1.加载驱动

2.获取url

3.创建连接

4.创建Statement(Statement(静态)、PreparedStatement(动态)、CallableStatement(存储过程))

5.执行SQL

6.处理结果

7.关闭对象

什么是MVC

M(Model模型层)、V(View视图层)、C(Controller控制层)

模型就是封装业务逻辑和数据的一个一个的模块,控制器就是调用这些模块的(java中通常是用Servlet来实现,框架的话很多是用Struts2来实现这一层),视图就主要是你看到的,比如JSP等,当用户发出请求的时候,控制器根据请求来选择要处理的业务逻辑和要选择的数据,再返回去把结果输出到视图层,这里可能是进行重定向或转发等。

什么是三层架构

三层分为: 界面层、业务逻辑层、数据访问层。

1.界面层:展现给客户的界面,用于展示用户输入以及服务端返回的数据;交互式操作界面中,用户输入的数据和想要的数据展示。

2.业务逻辑层:用户输入的数据通过业务逻辑层的处理发给数据层;数据层返回的数据通过业务逻辑层发送给界面展示。常做的操作是验证、计算、业务规则等。

3.数据访问层:主要管理数据,实现对数据的增删改查等操作。把业务逻辑层提交的用户输入的数据保存,把业务逻辑层请求的数据返回给业务逻辑层。

常用的Map实现类

HashMap 使用哈希表(hash table)实现, 在 keys 和/或 values 之中,都是无序的.

TreeMap 基于红黑树(red-black tree)数据结构实现, 按 key 排序.

LinkedHashMap 保持者插入顺序.

Hashtable 与HashMap实现方式一样,但Hashtable属于同步(synchronized)的.

HashMap集合的底层实现

首先有一个每个元素都是链表(可能表述不准确)的数组,当添加一个元素(key-value)时,就首先计算元素key的hash值,以此确定插入数组中的位置,但是可能存在同一hash值的元素已经被放在数组同一位置了,这时就添加到同一hash值的元素的后面,他们在数组的同一位置,但是形成了链表,同一各链表上的Hash值是相同的,所以说数组存放的是链表。而当链表长度太长时,链表就转换为红黑树,这样大大提高了查找的效率。

本段参考