Java 基础知识部分面试题+一些原理2021-04-16

首先这是今年我今年参加面试所面临到面试官提问的一些技术性面试题,准备记录下来用来温固一下基础。
java 基础部分
1.java的集合都有哪些,他们的特点是什么?
java集合包括:List、Set、Map
List特点:有序,可重复
ArrayList
优点:底层数据结构是数组,查询快,增删慢。
缺点:线程不安全,效率高
LinkedList
优点:底层数据结构是链表,查询慢,增删快。
缺点:线程不安全,效率高
Set特点:无序,唯一
HashSet
底层数据结构是哈希表(无序,唯一)
2.如何来保证元素唯一性?
2.1 依赖两个方法:hashCode()和equals() LinkedHashSet
底层数据结构是链表和哈希表(FIFO插入有序,唯一)
3.1由链表保证元素有序
3.2由哈希表保证元素唯一
TreeSet
底层数据结构是红黑树(唯一,有序)
1.如何保证元素排序的呢?
自然排序
比较器排序
2.如何保证元素唯一性的呢?
根据比较的返回值是否是0来决定
Map集合:存储一组键值对对象,无序的对象
Map接口有三个比较重要的实现类,分别是HashMap、TreeMap和HashTable.
TreeMap是有序的,HashMap和HashTable是无序的
HashTable的方法是同步的,HashMap的方法不是同步的,这是两者最主要的区别。
这就意味着:
HashTable是线程安全的,HashMap不是线程安全的。
HashMap效率较高,hashTable效率较低

HashMap原理:
HashMap是一个exteds AbstractMap 并且implements Map接口的类,其实维护时一个Entry对象,这个基本对象中有一个Key属性和一个Value属性,它们通过Key的hash算法的hashCode右移运算16位 与key的hashCode做了取反操作关联在一起。
其实我们的Map是放在一个TreeNode节点数据结构中(源代码我是看了是通过getTreeNode方法(key,hash(key)),查找的方式使用的是二分查找 获取值)这是我从jdk1.8版本中能够理解到的key获取value的方式
StringBuffer StringBuilder String 区别
String 字符串常量 不可变 使用字符串拼接时是不同的2个空间
StringBuffer 字符串变量 可变 线程安全 字符串拼接直接在字符串后追加

**public synchronized StringBuffer append(Objet obj)**

StringBuilder字符串变量 可变 非线程安全 字符串直接在字符串后追加

public StringBuilder append(String str){
}

1.StringBuilder 执行效率高于StringBuffer 高于String
2.String 是一个常量,是不可变的,所以对于每一次+=赋值都会创建一个新的对象,StringBuffer 和 StringBuilder都是可变的,当进行字符串拼接时采用append方法,在原来的基础上进行追加,所以性能比String要高,又因为StringBuffer 是线程安全的而StringBuilder是非线程安全的,所以StringBuilder的效率高于StringBuffer
3.对于大量数据的字符串的拼接,采用StringBuffer,StringBuilder
java多态的具体体现
面向对象编程有四个特征:封装、继承、多态、抽象
多态有四种体现形式:
1.接口和接口的继承
2.类和类的继承
3.重载
4.重写
其中重载和重写为核心。
重载:重载发生在同一个类中(当然,如果你的方法从父类继承过来了,这个方法也会发生重载),在该类中如果存在多个同名方法,但是方法的参数类型**和***个数不一样*** ,那么说明该方法被重载了。

**重写:**重写发生在子类继承父类的关系中,父类中的方法被子类继承,方法名,返回值类型,参数完全一样,但是方法体不
一样,那么说明父类中的该方法被子类重写了。
java 的基本数据类型
数据类型 大小
byte(字节) 1(8为)
shout(短整型)2(16位)
int(整型)4(32位)
long(长整型)8(32位)
float(浮点型)4(32位)
double(双精度)8(64位)
char(字符型)2(16位)
boolean(布尔型)(1位)
附加:
String 是基本数据类型吗?
String 不是基本数据类型
String的长度是多少,有限制?
长度受内存大小的影响
抽象类与接口的区别
1.一个类只能进行单继承,但可以实现多个接口
2.有抽象方法的类一定是抽象类,但是抽象
类里面不一定有抽象方法;
接口里面所有的方法的默认修饰符为public abstract, 接口里面的成员变量默认的修饰符为
public static final.
关系
接口和接口 继承
接口和抽象类 抽象类实现接口
类和抽象类 类继承抽象类
类和类 继承
修饰符的作用
修饰符的作用范围:
private default protectd public
同一个类中 可以 可以 可以 可以
同一个包的类中 可以 可以 可以
不同包的子类 可以 可以
不同包的类中 可以

线程和进程的区别
1.线程(Thread)与进程(Process)
进程定义的是应用程序与应用程序之间的边境
通常来说一个进程就代表一个与之对应的应用程序。不同的进程之间不能共享代码和数据空间,而同一进程的不同线程可以共享代码和数据空间。
2.一个进程可以包括若干个线程,同时创建多个线程来完成某项任务,便是多线程。
3.实现线程的两种方式:继承Thread类,实现Runable接口
JVM的内存结构
java虚拟机的内存结构分为堆(heap)和栈(stack),堆里面存放的是对象实例也就是 new出来的对象。栈里面存放的是基本数据类型一级引用数据的地址
对于所谓的常量是存储在方法区的常量池里面。
内存泄露和内存溢出
内存泄露(memmory leak)是指应用程序在申请内存后,无法释放已经申请的内存空间,一次内存泄露危害可以忽略,但如果任其发展最终会导致内存溢出(out of memory)
如果取文件后流要进行及时的关闭及时对数据库连接的释放。
内存溢出(out of memory)是指应用程序在申请内存时,没有足够的内存空间供其使用。
如我们在项目中对于大批量数据的导入,采用分段批量提交的方式。
JDK 常用的包
java.lang:这个是系统的基础类,比如String、Math、lnteger、System和Thread,提供常用功能。
java.io:这里面是所有输入输出有关的类,比如文件操作等
java.net:这里面是与网络有关的类,比如URL,URLConnection等。
java.util:这个是系统辅助类,特别是集合类Collection,List,Map等。
java.sql:这个是数据库操作的类,Connection,Statememt,ResultSet等。
JSP九大隐式对象
输入/输出对象: request response out
作用域通信对象:session application pagContext
Servlet 对象: Page config
错误对象: exception
Page和PageContext的区别
Page是servlet对象;使用this关键字,它的作用范围是在同一页面。
PageContext是作用域通信对象;通常使用setAttribute()和getAtrribute()来设置和获取存放对象的值。
ajax异步请求改同步?
Ajax请求默认的都是异步的
如果想同步 async设置为false就可以(默认是true)
var html = $.ajax({
url: “some.PHP”,
async: false
}).responseText;

或者在全局设置Ajax属性
$.ajaxSetup({
async: false
});
再用post,get就是同步的了
转载来源:http://blog.csdn.net/xiaoguang44/article/details/6454727
==和equals的区别
==是运算符,用于比较两个变量是否相等,对于基本类型而言比较的是变量的值,对于对象类型而 言比较的是对象的地址。
eqals()是Object类的方法,用于比较两个对象内容是否相等,对于对象类型而言比较的是对象的地址,equals()是Object类的方法,用于比较两个对象内容是否相等,默认Object类的equals()
i++和++i的区别
i++是先赋值,然后再自增;++i是先自增,后赋值
通常说web应用程序分三层,即MVC,如果我想分四层,应该怎么分?
加一个Hibernate数据持久层

SpringMvc的执行流程?
1.用户发送请求到前端控制器DispatcherServlet(也叫中央处理器)
2.DisPatcherServlet收到请求调用HandlerMappering处理映射器
3.处理映射器找到具体的处理器(可以根据xml配置、注解进行查找)生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet.
4.DispatcherServlet调用HandlerAdapter处理适配器
5.HandlerAdapter经过适配调用集体的处理器(Controller,也叫后端控制器)
6.Controller执行完成返回ModelAndView
7.HandlerAdapter将Controller执行结果ModelAndView返回给DispatcherServlet
8.DisPatcherServlet将ModelAndView传给ViewReslover视图解析器。
9.ViewReslover解析后返回集体的View
10.DispatcherServlet根据View进行渲染视图(即模型数据填充至视图中)
11.DispatcherServlet响应用户

Spring默认的设计模式是?
单例模式
关于spring概念的理解
1.Spring可以看作是项目的管家,负责管理项目中的所有对象(包括web层,service层和dao层)
2.Spring一站式框架:spring框架性质是属于容器性质的,他之所以能够处理请求,是因为容器中
装了处理请求的对象,容器中装了什么对象它就具备什么功能,所以称之为一站式。
3.Spring的核心是IOC控制反转和AOP面向切面
4.Spring不排斥任何开源框架,并且能够帮助其他框架管理对象
Spring 基本配置是:首先导入Spring的4个基本包,在applicationContext.xml里进行配置
Spring 核心的三大组件是什么?
Core Context Beans
其中Beans是最重要的,Spring就是面向Bean编程,在Spring中所有对象都可以看一个Bean.

面向切面的核心思想是什么?
就是在不需要改变源代码逻辑的前提下,给系统的方法增加一些逻辑进去,并且这个逻辑是在整个程序的生命周期之内都能够使用。
Spring的IOC原理?
IOC inversion of Control控制反转
简单理解Ioc:以前需要自己创建对象,现在对象的创建、销毁等(生命周期)操作都交给Spring的IOC来管理,当你需要什么组件的时候,会自动创建(DI 注入)
举例:就跟简单工厂模式一样,根据客户提供的描述,产生对应的实例.

Spring AOP的增强处理类型有哪些?
增强处理(Advice):前置增强,后置增强,环绕增强、异常抛出增强、最终增强等类型。
理解Spring的AOP原理:
AOP 原理:将复杂的需求分解出不同方面,将散布在系统中的公共功能集中解决
采用代理机制组装起来运行,在不改变原程序的基础上对代码段进行增强处理,增加新的功能。
所谓面向切面编程,是一种通过预编译和运行期动态代理的方式实现在不修改源代码的情况下给程序动态添加功能的技术

Spring 的优点
Spring特点
低侵入式设计
独立于各种应用服务器
依赖注入特性将组建关系透明化,降低了耦合度
面向切面编程特性允许将通用任务进行集中式处理
与第三方框架的良好整合

工厂模式理解:
根据我们提供我们所需的对象实例的描述,为我们返回所需要的产品。

Mybatis 框架
什么是Mybatis: mybatis就是一个封装JDBC的持久层框架,它和hibernate都属于ORM框架
hiberbnnante 是自动化 Hibernate 自动生成sql,有些语句较为繁琐,会多消耗一些性能;
Mybatis 属于半自动化,sql需要手工完成,稍微繁琐; Mybatis 手动编写sql,可以避免不需要的查询,提高系统性能
MyBatis与Hibernate有哪些不同?
(1)Mybatis和hibernate不同,它不完全是一个ORM框架,因为MyBatis需要程序员自己编写Sql语句。
(2)Mybatis直接编写原生态sql,可以严格控制sql执行性能,灵活度高,非常适合对关系数据模型要求不高的软件开发,因为这类软件需求变化频繁,一但需求变化要求迅速输出成果。但是灵活的前提是mybatis无法做到数据库无关性,如果需要实现支持多种数据库的软件,则需要自定义多套sql映射文件,工作量大。
(3)Hibernate对象/关系映射能力强,数据库无关性好,对于关系模型要求高的软件,如果用hibernate开发可以节省很多代码,提高效率。
resultMap和resultType区别
resultMap:适合使用返回值是自定义实体类的情况
resultType:适合使用返回值得数据类型是非自定义的
JDBC数据库连接
jdbc查询数据库步骤
1.注册驱动 通过DriverManager(驱动管理类)
2.获取连接 通过DriverManger建立连接
3.创建语句执行者 通过连接对象来创建
4.语句执行者执行SQL语句,并返回结果集
5.对结果集进行处理
6.释放资源

Servlet
什么是servlet
Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。
执行流程 Server服务器启动时 加载配置文件,指定一系列服务信息。(ServerSocket)
其中一个配置文件就是随着服务器启动而加载的:wed.xml
它会从wed.xml中将一系列的Servlet标签进行解析,然后将servlet-mapping标签的内容pattern存储到map集合中。
生命周期《面试题》
生命周期 流程:
1.加载web.xml文件
2.通过构造函数创建servlet对象
3.通过init方法初始化servlet
4.通过service,或者doGet、doPost提供服务
5.在重启或关闭时自动对service进行销毁

get和post的区别
get是从服务器上获取数据,post是向服务器传送数据
get安全性非常低,post安全性较高,但是执行效率比Post方法好

webService简介
Web Service技术, 能使得运行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件, 就可相互交换数据或集成。
依据Web Service规范实施的应用之间, 无论它们所使用的语言、 平台或内部协议是什么, 都可以相互交换数据。
WebService原理

XML,SOAP和WSDL就是构成WebService平台的三大技术 。
WebService采用Http协议来在客户端和服务端之间传输数据。WebService使用XML来封装数据,XML主要的优点在于它是跨平台的。
WebService通过HTTP协议发送请求和接收结果时,发送的请求内容和结果内容都采用XML格式封装,并增加了一些特定的HTTP消息头,
以说明HTTP消息的内容格式,这些特定的HTTP消息头和XML内容格式就是SOAP协议规定的。
WebService服务器端首先要通过一个WSDL文件来说明自己有什么服务可以对外调用。简单的说,
WSDL就像是一个说明书,用于描述WebService及其方法、参数和返回值。 WSDL文件保存在Web服务器上,
通过一个url地址就可以访问到它。客户端要调用一个WebService服务之前,要知道该服务的WSDL文件的地址。
WebService服务提供商可以通过两种方式来暴露它的WSDL文件地址:1.注册到UDDI服务器,以便被人查找;2.直接告诉给客户端调用者

TCP的协议:
1.Http协议的定义?
对器客户端和 服务器端之间数据传输的格式规范,格式简称为“超文本传输协议”。
2.Http协议中有哪些请求方式?
GET:用于请求访问已经被URI(统一资源标识符)识别的资源,可以通过URL传参给服务器
POST:用于传输信息给服务器,主要功能与GET方法类似,但一般推荐使用POST方式
PUT:传输文件,报文主体中包含文件内容,保存到对应URI位置
HEAD:获得报文首部,与GET方法类似,只是不返回报文主体,一般用于验证URI是否有效
DELETE:删除文件,与PUT方法相反,删除对应URI位置的文件
OPTIONS:查询响应URI支持的HTTP方法
javaScript 常用的事件有哪些?
Onsubmit:提交
Onblur:失去焦点
Onclick:单击
Onload:加载页面
Onchange:内容改变
onMouseMove:鼠标移动
onMouseOver:鼠标经过
onMouseOut:鼠标移出
onselect:下拉选项被选中
Xml的java解析有几种方式?

Java API解析xml主要有两种方式;

Dom解析:一次性加载整个文档,生成树形结构。在生成的文档对象中,可以对节点进行增删改查的操作。当xml文本当较小的时候,可以使用dom解析。

Sax解析:基于事件的解析方式,解析速度比较快,解析的文档大小理论上是没有限制的。

还有一些开源的技术可以解析xml,dom4j或者jdom。
Sql优化有那些方法?
表的设计要规范,即要符合数据库设计三范式。
适当建立索引,在频繁作为检索条件,更新较少的字段上建立索引,以提高查询速度。
分表查询,有水平分割、垂直分割。
读写分离,读(read)、写(create、update、delete)。
建立存储过程。
什么是事务?事务都有哪些特点?
单个逻辑单元执行的一系列操作,要么全部执行,要么全部不执行。
特点:
原子性(Atomicity):事务中各元素不可分割,全部执行成功或者撤销所有的操作
一致性(Consistency):事务完成后数据保持一致的状
隔离性(Isolation):事务是相对独立的,对某数据进行修改时,其他事务不变
持久性(Durability):事务完成后对系统的影响是永久性的
java设计模式 常用的6个
单例(Singleton)模式:某个类只能生成一个实例,该类提供了一个全局访问点供外部获取该实例,其拓展是有限多例模式。
工厂方法(Factory Method)模式:定义一个用于创建产品的接口,由子类决定生产什么产品。
抽象工厂(AbstractFactory)模式:提供一个创建产品族的接口,其每个子类可以生产一系列相关适配器模式
适配器模式
将一个类的接口转换成客户希望的另外一个接口。通俗地讲,就是在2个类之间做了一个衔接。比如你在调用A类的doSomething方法,实际上内部实现调用了B类的doSomething方法。的产品。
代理模式
它的定义是:代理模式给某一个对象提供一个代理对象,并由代理对象控制对原对象的引用。Java的反射机制,很多地方就用了代理模式来实现。
监听模式
当事件源触发某种行为,会自动执行事件监听器里面相应的方法。
Java监听模式右三个部分组成:事件源、事件对象、事件监听器
装饰器模式
简单说就是不改变现有类的结构前提下,扩展它的功能。用别的类来增加原有类的功能。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值