JAVA

一、java基础

1.JDK 和 JRE 有什么区别?

JDK:JAVA开发工具包,提供了java的开发环境和运行环境。

JRE:java运行环境,为java运行提供了所需环境。

JDK包括JRE.

2.== 和 equals 的区别是什么?

  1. ==:基本数据类型比较的是值;引用数据类型比较的是引用是否相同。
  2. equals:实际上就是==,但是String和Integer重写了其方法,把引用比较变成了值比较。

3.两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?

不对,因为在散列表中,hashCode()相等即两个键值对的哈希值相等,但是并不能确定键值对是否相等。

4.final 在 java 中有什么作用?

  1. 修饰变量叫常量,该常量必须初始化,初始化后值不能修改。
  2. 修饰的类,不能继承
  3. 修饰的方法,不能重写

5.java 中的 Math.round(-1.5) 等于多少?

round:四舍五入,负数的.5要舍去,正数的.5要加上。

6. String 属于基础的数据类型吗?

String 不属于基础类型,基础类型有 8 种:byte、boolean、char、short、int、float、long、double,而 String 属于对象。

7. java 中操作字符串都有哪些类?它们之间有什么区别?

  1. String:字符串常量,不可变对象
  2. StringBuffer:字符串变量,在原有对象基础进行操作,线程安全,适用于多线程,效率较低。
  3. StringBuilder:字符串变量,在原有对象的基础进行操作,线程不安全,适用于单线程,效率较高。

8. String str="i"与 String str=new String("i")一样吗?

不一样,第一个是将其放入常量池中,第二个会将其放入堆内存中,相当于新建了一个对象。

9. 如何将字符串反转?

使用StringBuffer和StringBuilder的reverse()方法。

例如:

StringBuffer strbuffer = new StringBuffer();

strbuffer.append(“abbbb”);

strbuffer.reverse();

StringBuilder用法相同

10. String 类的常用方法都有那些?

(1)indexOf():返回指定字符的索引

    1. int indexOf(String str) :返回第一次出现的指定子字符串在此字符串中的索引。 
    2. int indexOf(String str, int startIndex):从指定的索引处开始,返回第一次出现的指定子字符串在此字符串中的索引。 
    3. int lastIndexOf(String str) :返回在此字符串中最右边出现的指定子字符串的索引。 
    4. int lastIndexOf(String str, int startIndex) :从指定的索引处开始向后搜索,返回在此字符串中最后一次出现的指定子字符串的索引。

(2)charAt(int index):返回指定索引处的字符。0~length-1

(3)replace(目标字符串, 替换后的字符串):字符串替换。

(4)trim():去除字符串两端空白。

(5)split():分割字符串,返回一个分割后的字符串数组。

  1. 要是符号作为分隔条件,必须进行转义加上\\。
  2. 如果有多个分隔符,则可以用|作为连字符。

  (6)getBytes():返回字符串的 byte 类型数组。

  1. str.getBytes(),获取当前文件的编码格式
  2. new String(str.getBytes(“uft-8”),”gbk”),转换字符串编码格式。
  3. str.getBytes(“charset”)将底层的Unicode转换为charset编码格式的字符串数组。

(7)length():返回字符串长度。

(8)toLowerCase(String str):将字符串转成小写字母。

(9)toUpperCase(String str):将字符串转成大写字符。

(10)substring():截取字符串。

        substring(str,start,length)

         substring(str,length)

(11)equals():字符串比较。

11.抽象类必须要有抽象方法吗?

不需要

12.普通类和抽象类有哪些区别?

  1. 抽象类可包含抽象方法,普通类不能包含抽象方法;
  2. 抽象类不能直接实例化,普通类可以直接实例化;

13.抽象类能使用 final 修饰吗?

不能,因为定义抽象类就是为了让类继承的,所以不能用final修饰。

14.接口和抽象类有什么区别?

  1. 实现:抽象类由子类使用extends继承,接口必须使用implements实现。
  2. main:抽象类可以有main函数,可以运行,但是接口不能有。
  3. 构造函数:抽象类有构造函数,接口没有。
  4. 实现数量:可以实现多个接口,但是只能继承一个抽象类。
  5. 访问修饰符:接口只能使用public,抽象类可以使用任意修饰符。

15.java 中 IO 流分为几种?

功能:输入流、输出流

类型:字节流、字符流

InputStream/OutStream:字节输入/输出流

InputReader/OutWriter:字符输入/输出流

区别:字节流按8位传输以字节为单位输出数据,字符流按16位传输以字符为单位输出数据。

16. Files的常用方法都有哪些?

    1. Files.exists():检测文件路径是否存在。
    2. Files.createFile():创建文件。
    3. Files.createDirectory():创建文件夹。
    4. Files.delete():删除一个文件或目录。
    5. Files.copy():复制文件。
    6. Files.move():移动文件。
    7. Files.size():查看文件个数。
    8. Files.read():读取文件。
    9. Files.write():写入文件。

二、容器

面试题----java

 

1.Collection 和 Collections 有什么区别?

Collection :java.lang.Collection :是个集合接口,提供了对集合对象进行基本操作的通用接口方法。

Collections:集合类的一个工具类/帮助类,其中的一系列静态方法,用于对集合中元素进行排序、搜索以及线程安全等各种操作。

2.List、Set、Map 之间的区别是什么?

比较

List

Set

Map

继承接口

Collection

Collection

 

常见实现类

AbstractList(常见子类ArrayList/LinkedList/Vector)

AbstracSet(常见子类HashSet/LinkedHashSet/TreeSet)

HashMap/HashTable

常见方法

add(),remove(),clear(),get(),contains(),size()

add(),remove(),clear(),contains(),size()

put(),get(),remove(),clear(),containsKey(),containsValue(),keySet(),values(),size()

元素

可重复

不可重复

键不可重复,值可以重复

顺序

有序

无序

 

线程安全

vector线程安全

 

HashTable线程安全

3.ArrayList 和 LinkedList 的区别是什么?

ArrayList :底层的数据结构为数组,支持随机访问

LinkedList:底层数据结构为双向循环链表,不支持随机访问

4.如何实现数组和 List 之间的转换?

  1. 数组转list:arr.asList();[ArrayList中]
  2. list转数组:list.toArray();[Arrays]

5.Array 和 ArrayList 有何区别?

  1. Array可以容纳基本数据类型和对象,ArrayList只能存储对象。
  2. Array是指定大小的,而ArrayList的大小是固定的。
  3. Array没有那么多功能,比如addAll/removeAll/iterator.

6.poll()和 remove()有什么区别?

poll和remove都是从队列中取出一个元素,但是poll获取失败的时候会返回null,remove则会抛出异常。

7.迭代器 Iterator 是什么?

迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为“轻量级”对象,因为创建它的代价小。

8.Iterator 怎么使用?有什么特点?

Java中的Iterator功能比较简单,并且只能单向移动:

(1) 使用方法iterator()要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素。注意:iterator()方法是java.lang.Iterable接口,被Collection继承。 

(2) 使用next()获得序列中的下一个元素。

(3) 使用hasNext()检查序列中是否还有元素。 

(4) 使用remove()将迭代器新返回的元素删除。

Iterator是Java迭代器最简单的实现,为List设计的ListIterator具有更多的功能,它可以从两个方向遍历List,也可以从List中插入和删除元素。
9. Iterator 和 ListIterator 有什么区别?

Iterator可用来遍历Set和List集合,但是ListIterator只能用来遍历List。 

Iterator对集合只能是前向遍历,ListIterator既可以前向也可以后向。 

ListIterator实现了Iterator接口,并包含其他的功能,比如:增加元素,替换元素,获取前一个和后一个元素的索引,等等。


三、多线程

1.线程和进程的区别?

进程:程序运行和资源分配的基本单位;

线程:CPU调度和分派的基本单位;

进程包括多个线程。

2.守护线程是什么?

即服务其它线程。

3.创建线程的几种方式

  1. 继承Thread类
  2. 实现Runnable接口
  3. 通过callable和future创建

四、其他

1.session和cookie的区别?

  1. cookie数据存放在客户的浏览器上,session数据放在服务器上。
  2. cookie不是很安全,session相对较安全。
  3. session会占用你服务器的性能,cookie能减轻服务器性能方面。
  4. 单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
  5. 可以考虑将登陆信息等重要信息存放为session,其他信息如果需要保留,可以放在cookie中。
  6. session当刷新浏览器的时候就会消失,而cookie不会。

2.后端流程

前端发出请求-->controller接收请求-->service实现业务逻辑-->dao层实现对数据库的操作-->返回到前台

面试题----java

 

解释:

请求发过来会被前端控制器获取,前端控制器然后将url发给处理器映射器,处理器映射器解析url,将controller名字放进集合中返回给前端控制器,前端控制器在将这个装有controller名字的集合给处理器适配器,处理器适配器再去匹配controller层中的@RequeatMapper(value=“这个名字”)中的名字,找到对应方法,然后controller层中的方法执行了,去调用service层,service层调用dao层,dao层将结果给service层,service层将结果给controller层,controller层将结果给处理器适配器,处理器适配最后将结果给前端控制器,前端控制器将结果给试图解析器进行解析,解析完将结果返回给前端控制器,前端控制器再讲结果给试图渲染,变成一个完整页面后,将结果返回给前端控制器,前端控制器将页面返回给前端呈现。

[email protected]@RequestMapping

@ResponseBody注解(应用于controller)。

将方法的返回值以特定的格式写入到response的body区域,进而将数据返回给客户端。假如是字符串则直接将字符串写到客户端,假如是一个对象,此时会将对象转化为json串然后写到客户端。这里需要注意的是,如果返回对象,按utf-8编码。如果返回String,默认按iso8859-1编码,页面可能出现乱码。

@RequestMapping  

作用:处理请求映射,用于类或方法上, 用于类时,表示类中的所有响应请求的方法都是以该地址作为父路径。

4.HTML布局方式

  1. 浮动布局:兼容性比较好,但是页面宽度不够会影响布局。
  2. 绝对定位布局:快捷,有效性比较差
  3. flex布局:自适应好,高度能够自动撑开
  4. table-cell表格布局:兼容性好,但是不能固定高度,会被内容撑高
  5. 网格布局:兼容性不太好

4.ajax的同步和异步

同步是在一条直线上的队列,异步不在一个队列上 各走各的。

async:false,这个属性 ,默认是true:异步,false:同步。

        1.同步:提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干任何事

另一种解释:

当执行当前AJAX的时候会停止执行后面的JS代码,直到AJAX执行完毕后时,才能继续执行后面的JS代码。

2.异步:请求通过事件触发->服务器处理(这时浏览器仍然可以作其他事情)->处理完毕同步需要等待返回结果才能继续,异步不必等待,一般需要监听异步的结果。

另一种解释:

当ajax发送请求后,在等待server端返回的这个过程中,前台会继续 执行ajax块后面的脚本,直到server端返回正确的结果才会去执行success,也就是说这时候执行的是两个线程,ajax块发出请求后一个线程 和ajax块后面的脚本(另一个线程)。

  1. java的引用类型

Byte、Short、Integer、Long、Float、Double、Character、Boolean

  1. 时间复杂度

时间复杂度是指执行算法所需要的计算工作量。

  1. Integer和int的转换
  1. int到Integer:

int a=3;

Integer A=new Integer(a);

或:

Integer A=Integer.valueOf(a);

  1. Integer到int:

Integer A=new Integer(5);

int a=A.intValue();

  1. 数组和链表的优缺点?

数组:

优点

缺点

随机访问性强

插入和删除效率低

查找速度快

浪费内存

内存空间要求高,必须有足够的连续内存空间。

大小固定,不能动态拓展

链表:

优点

缺点

插入删除速度快

不能随机查找,必须从第一个开始遍历,查找效率低

内存利用率高,不会浪费内存

大小没有固定,拓展很灵活

  1. static的作用
  1. 被static修饰的变量属于类变量,可以通过类名.变量名直接引用,而不需要new出一个类来。
  2. 被static修饰的方法属于类方法,可以通过类名.方法名直接引用,而不需要new出一个类来。
  3. 静态代码块是严格按照父类静态代码块->子类静态代码块的顺序加载的,且只加载一次,只在初始化类的时候执行。静态代码块对于定义在它之后的静态变量,可以赋值,但是不能访问。
  1. 什么是注解?注解的作用?

它可以充分利用 Java 的反射机制获取类结构信息,这些信息可以有效减少xml配置。

  1. jsp和servlet的区别
  1. jsp编译过后成为servlet
  2. jsp用于页面显示,servlet用于逻辑控制
  3. servlet没有内置对象,jsp中的内置对象通过HttpServletRequest和HttpServletResponse获取。
  1. 设计模式

工厂模式、单例模式、代理模式、外观模式。组合模式。

  1. SSM的流程
  1. 加载配置文件applicationContext.xml。
  2. 调用getBean方法,获取配置文件中的bean
  3. 调用service层的方法
  1. mybatis的应用

与数据库进行交互,将数据持久化到关系型数据库中。封装了jdbc简化了数据库的连接。

  1. java如何实现序列化?作用?

实现serializable接口。

作用:实现对象的持久化。

  1. HashMap和HashTable的区别?

 

HashMap

HashTable

继承父类不同

AbstractMap<k,v>

Dictionary<k,v>

安全性不同

线程不安全

线程安全

初始容量和扩容量不同

初始:16,扩容为原来2倍

初始:11,扩容为原来的2n+1

堆和栈的区别?

(1)栈内存存储的是局部变量,而堆内存存储的是实体(new出的对象和数组)。

(2)栈内存的更新速度要快于堆内存,因为局部变量的生命周期很短。

(3)栈内存存放的变量生命周期一旦结束就会被释放,而堆内存存放的实体会被垃圾回收机制不定时的回收。

相关文章:

  • 2021-12-02
  • 2021-12-15
  • 2021-11-17
猜你喜欢
  • 2022-12-23
  • 2021-12-26
  • 2021-11-23
  • 2021-12-12
  • 2021-09-01
  • 2021-12-03
  • 2021-12-05
相关资源
相似解决方案