【面试题总结一】JAVA基础

前言

因为比较喜欢写JAVA,所以之前面试的时候看了不少的面试的问题,但是面了两家完全没有问到我这些,十分的尴尬,所以我觉得花点时间把之前看过的东西总结一下。

自动装箱和拆箱

基本数据类型与对应的包装类的自动转换
在这里插入图片描述
和C++的强制类型转换有点像。

String,StringBuffer,StringBuilder

String是字符串,一般来说一个字符串被定义了就不可变了,如果要使用可变的字符串,也就是可以动态的添加修改的,就需要用StringBuffer和StringBuilder了,这两个都是可以动态修改和添加的。
区别:StringBuffer是线程安全的,StringBuilder是线程不安全的,可以看一下源码:
StringBuffer:都是同步方法
在这里插入图片描述
StringBuilder:在这里插入图片描述
结论:单线程环境下,使用StringBuilder效率高,多线程使用StingBuffer,可以保证线程安全。

import 时java和javax的区别

区别不大,一个是基本包,一个是拓展包,随着java api的发展,越来越多的拓展包被当做基本api使用。

接口和抽象类的区别

(1)接口中只能有static,final变量,但是抽象类里面不做限制。
(2)抽象类中可以有非抽象方法,但是接口中不能有方法实现(但是这个规则在jdk 8)以后有修改。

== 和equals的区别

== 是直接判断两个对象的地址是不是相同,基本数据类型比较值,引用类型比较地址。
equals在没有被重写是,默认就是 ==,这一点可以在源码中看到。重写之后可以自由定义。
这里的有一个特殊的类:String,这个默认重写了equals。

hashCode

(1)类的hashCode方法是一个基本的方法,所有类都有,因为这个方法被定义在了Object里。
作用:这个方法定义了这个类的对象被hash的方式,很多人说equals比较的就是两个对象的hashcode,这句话是错的!!!!!。hashcode有时候是没有毛用的,下面讨论一下它的用处。
(2)会创建该类的hash表:对于一个类,如果采用了HashMap,HashSet等集合来存储它的对象,那么hashcode会作为散列值,来定位这些对象,这个时候才有用。这个时候,重写equals时,也要重写hashcode,否则就会造成集合内元素重复。
(3)不会创建散列表:如果没有上述需求,那么就不会创建散列表,那么hashcode就没啥事了。

线程,进程,程序

这个还说嘛?不想说了,仁者见仁,智者见智。

线程的状态

就绪,阻塞,等待,超时等待,终止。

final关键字

类似C++中的const,修饰变量既是不可修改的,修饰类就是不可继承的,修饰方法就是锁定这个方法,早期的jdk版本会把这个方法作为内联使用,类似于C++中的inline。private方法都是final的。

IO流

主要分类两大类,字节流和字符流。这个感觉没啥可说的,反正类太多了,还要包装一堆,我没怎么记。

IO机制

BIO:阻塞式IO,这个就是一般的IO方式。
NIO:非阻塞式IO,jdl提供了一套NIO机制,基于底层的IO多路复用,但是很复杂,有一个优秀的封装框架:netty。这个能说多少说多少吧。
AIO:异步IO。这个技术水平有点高,不怎么常用。

深拷贝和浅拷贝

这两个对于基本数据类型来说没区别,主要是引用类型,浅拷贝会直接像指针一样指过去,深拷贝会new一个对象赋值过去。

get和post的区别

本质来说没有区别,都是tcp连接,只不过表现形式有差别。get请求参数附加在地址栏,post在消息的body里。get请求主要是请求服务端数据,post主要是提交数据。其实可以看一下Restful api,现在这个标准几乎是大家都在用的。

Cookie 和Session

首先这两个都是对http无状态的补充,用来区分用的身份的,Cookie是客户端本地缓存,是一段字符串,并且这个字符串大小是有限的,Session是服务端的,这个可以存储各种数据,不仅仅是字符串,大小理论上来说也没有限制。现在的都是把不敏感的信息写入本地Cookie,然后建立键连接的时候服务端解析,根据这个信息找Session。

Servlet和JSP

j2ee的组件,这个知识太多了,而且现在的Web开发很少用了,都是封装好的集成框架,说两点吧。
(1)Servlet不是线程安全的,不要定义类的变量,如果非要保证线程安全,可以在goGet或者doPost里面使用同步方法。
(2)请求转发(Forward)和重定向(redirct)的区别,请求转发是发生在服务端的,这个客户端感受不到。重定向是服务端会给客户端一个状态码,然后客户端重新发起请求,这个客户端可以看到地址栏的地址发生变化。

集合类

这个说实话,把HashMap理解透就行了,关于初始大小,扩容机制,冲突解决,树化,快速失败和安全失败,hash函数的选取,不同版本jdk函数的函数的变化。这里推荐一个大佬的博客,讲的十分的透彻。hashmap详解
基础部分大概就是这些了。

发布了370 篇原创文章 · 获赞 48 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/weixin_41863129/article/details/104328672