Java面试题一

文章详细对比了List、Set和Map的区别,HashMap与ConcurrentHashMap的线程安全性,以及ArrayList和LinkedList的扩容机制。还讨论了Java中的数据类型、异常处理、多态、抽象类与接口、以及HTTP请求等核心概念。此外,涵盖了JDK1.8的新特性如StreamAPI,并探讨了JavaWeb开发中的session、cookie、Servlet生命周期等问题。
摘要由CSDN通过智能技术生成

一、List 和Set 和Map的区别

二、HashMap和ConcurrentHashMap的区别

三、arraylist,linkedlist内部扩容机制是怎样的

四、hashmap,hashtable,为什么hashtable是线程安全的,为什么hashmap不是线程安全的。Hashmap扩容机制,hashmap底层原理,hashamp为什么扩容为原理的二倍

五、final和finally和finalize的区别

六、jdk1.8的新特性

七、java的异常处理机制

八、String、StringBuilder、StringBuffer的区别

九、重写equals已经能比较两个对象了,为什么还要重写hashcode方法

十、基本数据类型和包装数据类型的区别

十一、什么是多态

十二、抽象类和接口的区别

十三 、==和equals的区别

十四、java中的几种基本类型,各占用多少字节

十五、隐式类型转换和强制类型转换

十六、运行时异常有几种

十七、Java语言如何进行异常处理:Throw和Throws区别:关键字throws、throw、try、catch、finally分别代表什么意义,在catch块中可以抛出异常吗?

十八、对面向对象的理解 面向对象的特征有哪些

十九、session和cookie之间的区别

二十、HTTP报文由哪几部分组成 get/post有什么区别

二十一、转发(forward)和重定向(redirect)的区别

二十二、简述jsp的九大内置对象

二十三、怎么理解ajax ajax是否可以同步 ajax的优缺点

二十四、图片如何上传

二十五、说一说servlet的生命周期

二十六、跨域问题如何解决

二十七、javaweb项目中如何实现jsp页面的跳转,数据的交互


一、List 和Set 和Map的区别

List 可重复的集合

Set不包含重复元素的集合

Map键值对 key是唯一不可重复的 value可以重复一个键对应一个值

二、HashMap和ConcurrentHashMap的区别

Hashmap不是线程安全的,而ConcurrentHashMap是线程安全的

三、arraylist,linkedlist内部扩容机制是怎样的

Arraylist默认大小是10,当集合个数大于容量的时候,就会以1.50倍容量去扩容

Linkedlist是一个双向链表,没有初始化大小,也没有扩容的机制,就是一直在前面或者后面新增就好

四、hashmap,hashtable,为什么hashtable是线程安全的,为什么hashmap不是线程安全的。Hashmap扩容机制,hashmap底层原理,hashamp为什么扩容为原理的二倍

hashtable的方法都提供了同步机制

hashmap的方法不提供同步机制

也就是说hashmap采用2倍扩容,可以尽可能的减少元素位置的移动

五、final和finally和finalize的区别

final用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承

finally是异常处理语句的一部分,表示总是执行

finalize方法在垃圾收集器将对象从内存中清除之前会调用finalize方法

六、jdk1.8的新特性

函数式接口

方法引用和构造引用

Stream API

接口中的默认方法和静态方法

新时间日期API

七、java的异常处理机制

抛出异常和捕获异常

八、String、StringBuilder、StringBuffer的区别

String 字符串变量 不可变 使用字符串 拼接时是不同的两个空间

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

Stringbuffer 字符串变量 可变 线程安全 字符串拼接时直接在字符串后追加

九、重写equals已经能比较两个对象了,为什么还要重写hashcode方法

调高效率

保证是同一个对象

十、基本数据类型和包装数据类型的区别

1)包装类是对象,拥有方法和字段,对象的调用都是通过引用对象的地址;

      基本类不是

2)包装类是引用的传递;

      基本类是值的传递

3)声明方式不同

      基本数据类型不需要new关键字;

      包装类型需要new创建对象分配内存空间

4)存储位置不同

      基本数据类型直接将值保存在堆中;

      包装类型是把对象放在堆中,然后通过对象的引用来调用他们

5)初始值不同

      Int的初始值为0,boolean的初始值为false

      包装类型的初识值为null

6)使用方式不同

      基本数据类型直接赋值使用就好

      包装类型是在集合时使用

十一、什么是多态

允许不同类的对象对同一消息做出响应,即同一消息可以通过根据发送对象的不同而采用多种不同的行为方式

十二、抽象类和接口的区别

  1. 抽象类要被子类继承,接口要被类实现
  2. 接口只能做方法声明,抽象类中可以做方法声明,也可以做方法实现
  3. 接口里定义的变量只能是公共的静态的常量,抽象类中的变量是普通变量
  4. 接口是设计的结果,抽象类是重构的结果
  5. 抽象类和接口都是用来抽象具体对象的,但是接口的抽象级别最高
  6. 抽象类可以有具体的方法和属性,接口只能有抽象方法和不可变常量
  7. 抽象类主要用来抽象类别,接口主要用来抽象功能

十三 、==和equals的区别

       “==”是运算符,如果是基本数据类型,则比较存储的值,如果是引用数据类型,则比较所指向对象的地址值

       equals是Object的方法,比较的是所指向的对象的地址值,一般情况下,重写之后比较的是对象的值

十四、java中的几种基本类型,各占用多少字节

布尔型 Boolean 8位,字节型 byte 8位,字符型 char 16位,短整型 short 16位,

整型 int 32位,长整型 long 64位,浮点型 float 32位,双精度 double 64位

十五、隐式类型转换和强制类型转换

低级向高级转换---自动转换:隐式转换

高级到低级转换---强制转换

十六、运行时异常有几种

算法异常

类转换异常

非法参数异常

下标越界异常

空指针异常

安全异常

十七、Java语言如何进行异常处理:Throw和Throws区别:关键字throws、throw、try、catch、finally分别代表什么意义,在catch块中可以抛出异常吗?

try:尝试着执行可能会出现异常的代码

catch:如果try中的代码在执行过程中,出现了异常,捕获该异常,如果没有异常,就不执行

finally:其中的代码块不管报不报错都会执行,通常用来释放资源

throw:语句抛出一个异常

throws:方法可能抛出异常的声明

十八、对面向对象的理解 面向对象的特征有哪些

  1. 打开洗衣机——>2.放衣服——>3.放洗衣粉——>4.清洗——>5.烘干

面向对象会拆分出人和洗衣机两个对象

人:1.打开洗衣机——>2.放衣服——>3.放洗衣粉

洗衣机:1.清洗——>2.烘干

面向对象三大特征:封装、继承、多态

十九、session和cookie之间的区别

1)数据存放位置不同

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

2)安全程度不同

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

3)性能使用程度不同

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

4)数据存储大小不同

单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie,而session则存储于服务器,浏览器对其没有限制

5)会话机制不同

session会话机制:session会话机制是一种服务器端机制,它使用类似于哈希表的结构来保存信息

二十、HTTP报文由哪几部分组成 get/post有什么区别

请求报文:

请求报文由请求行,请求头,空行,请求体四个部分组成;

(注意:get方式发起的请求是没有空行和请求体的)

请求行:包括请求方法、请求的utl(路径)、http协议及版本;

请求头:一大堆的键值对;

空行:当服务器在解析请求头的时候,如果遇到了空行,则表明后面的内容是请求体;

请求体:数据部分

响应报文:

响应报文由状态行,响应头,空行,响应体组成;

状态行:http协议及版本、状态码及状态描述;

其他部分都是响应回来的东西,跟请求报文的内容对应

http的方法

  1. get:获取资源
  2. post:传输资源
  3. put:更新资源
  4. delete:删除资源
  5. head:获得报文首部

get与post的区别

  1. get在浏览器回退时是无害的,而post会再次提交请求
  2. get请求会被浏览器主动缓存,而post不会
  3. get产生的url路径地址是可以被收藏的,而post是不可以的
  4. get比post更不安全,因为参数是直接暴露在路径地址上的,所以一些比较敏感的数据就不要用get方式来传递
  5. get请求在url中传递的参数有大小限制,基本是2kb,不同的浏览器略有不同,而post没有
  6. get只接受ASCII码字符的参数类型,post没有限制
  7. get请求的参数,会保留在浏览器的历史记录里,而post不会

二十一、转发(forward)和重定向(redirect)的区别

forward是服务器行为,redirect是客户端行为

forward只能是同一个web内的url,redirect可以是任意的url

froward
客户端发送请求—>服务器接收—>调用内部的方法处理请求并转发—>将目标资源信息发送给客户
redirect
客户发送请求—>服务器接收并响应新的location给客户—>客户会接收到一个新的location地址

二十二、简述jsp的九大内置对象

Request:封装客户端的请求,其中包含来自get或post请求的参数

Response:封装服务器对客户端的响应

pageContext:通过该对象可以获取其他对象

session:封装会话用户的对象

application:封装服务器运行环境的对象

out:输出服务器响应的输出流对象

config:web应用的配置对象

page:jsp页面本身(相当于java程序中的this)

exception:封装页面抛出异常的对象

二十三、怎么理解ajax ajax是否可以同步 ajax的优缺点

Ajax是一种通过在后台与服务器进行少量的数据交换,可以使页面实现异步更新,这就意味着可以在不重新加载整个网页的情况下,对页面的某一部分进行数据的更新

在ajax的参数中增加一个async:false参数可以发送同步ajax请求

优点:

  1. 实现了异步交互,提高了用户体验
  2. 无需重新加载整个网页,只需要与服务器进行少量的数据交互,就能够实现对网页中的某一部分进行更新,从而减少了带宽的占用
  3. Ajax是在客户端运行的,它承载了一部分本来有服务器承担的工作,减少了大用户量下的服务器负载

缺点:

  1. 安全性问题,大量的使用ajax暴露了服务器交互的细节
  2. 不容易调试
  3. 对搜索引擎的支持比较弱

二十四、图片如何上传

前端上传图片到后端接口,后端上传成功后返回一个路径,再把这个路径放在标签里,最后一起保存入数据库。其中生成的UUID是为了上传照片解决重名的问题

二十五、说一说servlet的生命周期

  1. 加载并实例化
  2. 初始化
  3. 服务
  4. 销毁

二十六、跨域问题如何解决

  1. 通过jsonp跨域
  2. document.domain+iframe跨域
  3. location.hash+iframe跨域
  4. window.name+iframe跨域
  5. postMessage跨域
  6. 跨域资源共享(CORS)
  7. nginx代理跨域
  8. nodejs中间件代理跨域
  9. webSocket协议跨域

二十七、javaweb项目中如何实现jsp页面的跳转,数据的交互

页面跳转:

  1. 提交表单
  2. Javascript window.loaction.href=页面
  3. 转发request.getRequestDispatcher(页面).forward(request,response)
  4. 重定向response.setHeader()和response.sendRedirect()

数据交互:

  1. setAttribute()和getAttribute()方法传递参数
  2. 使用request对象获取客户端提交的信息
  3. 利用隐藏域传递数据
  4. 通过超链接传递数据
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值