学习java的第六天——java面试题

PS:三天没学习java的原因,后期除了学习java也要学习其他的面试题呀!就把这里当做是日记本吧,记录自己每天的学习和工作,日常琐碎吧。本科的时候还有写日记的习惯,可是到了研究生也不知道一天天在忙什么,总是很忙,但是反而感觉还不如本科的时候,日记也没再记录过,姑且再捡起来,把这里当作日记本吧,反正也没人认识我。以前也写过几篇文章,但是都不好意思发出来,仅自己可见,现在脸皮变厚了,嘻嘻。

2.24日因为某些原因休息了一天,所以没有学习java
2.25日导师返回了大论文的修改意见,于是便一整天都在修改大论文
2.26日,显然,大论文还是没有修改完,上午下午依旧是为大论文折腰的一天,晚上就找了一些公司投了一些简历,希望能有一个合适的offer吧。仅做个人记录,大家都要继续努力呀,每个阶段都有每个阶段面临的一些困难,可能深处其中的时候,会觉得很难,但是坚持下来,应该也会有很多收获,等今后回过头来,可以轻松感叹一句:也不过如此嘛!加油呀!

1、说说进程和线程的区别?

分点答:地址空间、开销、并发性、程序的出入口、内存、健壮性

  • 地址空间:进程有独立的地址空间,线程有自己的堆栈和局部变量,但是没有独立的地址空间。

  • 开销:进程和线程进行切换时,进程和线程都需要进行上下文切换,但是进程的上下文切换消耗的时间要大于线程的,并且耗费的资源也大一些,效率要低一些。
    并发性:进程的并发性低,线程的并发性高。

  • 程序出入口:进程有独立的程序入口,顺序执行序列和程序出口,而线程则要依存于进程,有应用程序提供多个线程进行控制。

  • 内存:系统运行时会为每一个进程分配不同的内存空间,而线程则没有,除了CPU之外,各个线程之间共享资源。

  • 健壮性:线程的健壮性要高于进程。

2、Java 中的 Math. round(-2. 5) 等于多少?

等于 -2,因为在数轴上取值时,中间值(0.5)向右取整,所以正 0.5 是往上取整,负 0.5 是直接舍弃。

3、String str="a"与 String str=new String(“a”)一样吗?

不一样,因为内存的分配方式不一样。
String str="a"的方式,Java 虚拟机会将其分配到常量池中;而 String str=new String(“a”) 则会被分到堆内存中。

4、接口和抽象类有什么区别?

实现方式:接口时通过implemnets来实现的,抽象类是使用extends继承的
实现数量:一个类只能继承一个抽象类,但是一个类可以实现多个接口方法
构造方法:抽象类里可以有构造方法,但是接口不行。
访问修饰符:抽象类中的方法访问修饰符是任意的,但是接口中的方法一般都是public

5、BIO、NIO、AIO 有什么区别?

BIO:同步堵塞IO,是最常用的一种IO方式,特点是模式简单,使用方便,处理并发的能力较差。
NIO:同步非阻塞IO,是对传统IO的升级,客户端和服务器端使用channel来实现通讯,实现了多路复用
AIO:异步非阻塞IO,被称为NIO2,实现了异步非堵塞 IO ,异步 IO 的操作基于事件和回调机制。

6、Files的常用方法有哪些?

Files类主要是用来处理与文件相关的操作。
Files.exists():判断文件是否存在
Files.createFile():创建新文件
Files.createDirectory():创建新的文件夹
Files.delete():删除文件
Files.copy():复制文件
Files.size():查看文件的大小
Files.move():移动文件
Files.read():读取文件
Files.write():写入文件

7、java的容器有哪些?

容器可以管理对象生命周期的依赖关系。
java提供了多种容器类型,主要有以下几种:
List(列表):有序、可重复的集合,允许通过索引访问元素。常见实现类有ArrayList和LinkedList。
Set(集合):无序、不可重复的集合。常见实现类有HashSet和TreeSet。
Map(映射):一种键值对的映射结构,允许通过键来访问值。常见实现类有HashMap和TreeMap。
Queue(队列):一种先进先出(FIFO)的数据结构。常见实现类有LinkedList和PriorityQueue。
Stack(栈):一种后进先出(LIFO)的数据结构。常见实现类有Stack类。

除了上述常用的容器类型,Java还提供了一些其他的容器类型,例如Vector(向量)、Hashtable(散列表)等。此外,Java中还有一些集合框架类,例如Collections和Arrays,它们提供了对集合的操作方法

8、HashMap和TreeMap分别使用的场景?

HashMap使用插入、删除、定位Map中的一个元素,因为相对TreeMap而言,HashMap的插入效率要高一些;但是如果是要对key进行有序的遍历,则更适用的是TreeMap。

9、HashMap的实现原理?

HashMap是通过put(key,value)的形式添加键值对的,通过get(key)获得value值。

  1. 当创建一个 HashMap 实例时,会默认创建一个初始容量为 16数组,用来存储键值对。
  2. 存储时,首先将对象通过哈希函数(hash function)映射为一个整数,然后将这个整数对数组长度进行取模,得到一个索引值
  3. 如果该索引值上没有存储任何键值对,那么直接将键值对存储在该位置上;如果该索引值上已经有其他的键值对,那么就需要进行解决冲突的操作。
  4. HashMap 采用的是链地址法(chaining)解决冲突的方式,即在冲突的位置上维护一个链表,将新的键值对添加到链表的末尾。
  5. 当链表长度达到一定阈值时(默认为 8),就将链表转换为红黑树,以提高查询效率。
  6. 当数组大小达到一定阈值时(默认为 0.75 *数组长度),就会触发扩容操作,将数组大小扩大为原来的两倍,并将所有键值对重新散列到新的数组中。
  7. 在查询时,HashMap会先计算键的哈希值,并将哈希值对数组长度取模,得到索引值。然后在该索引值上查找链表或红黑树,直到找到目标键值对或者没有更多的节点可遍历。

10、HashSet的实现原理?

HasSet是基于HashMap实现的,存储方式是按照哈希码的值来存储的,无序的,不可重复的。

11、数组和List是如何相互转换的?

  • 数组转 List:使用 Arrays. asList(array) 进行转换。
  • List 转数组:使用 List 自带的 toArray() 方法。

12、Array 和 ArrayList 有什么区别?

存储对象不同:Array既可以存储基本数据类型又可以存储对象,而ArrayList只能存储对象。
大小不同:Array 的大小是固定的,而 ArrayList 大小是自动扩展的。
内置方法的数量不同:Array 内置方法没有 ArrayList 多,比如 addAll、removeAll、iteration 等方法只有 ArrayList 有。

13、什么是迭代器?

迭代器(Iterator)是Java中用来遍历集合(Collection)和映射(Map)的对象的。

迭代器通常包含以下三个基本方法:
hasNext():判断集合中是否还有下一个元素,如果有返回 true,否则返回 false。
next():返回集合中的下一个元素,并将迭代器的指针向后移动一位。
remove():从集合中删除迭代器最后一次返回的元素。如果还没有调用 next() 方法或者已经调用过 remove() 方法,再调用 remove() 方法会抛出 IllegalStateException 异常。

迭代器的使用非常简单,只需要调用集合的 iterator() 方法获取迭代器对象,然后通过循环遍历迭代器,即可访问集合中的所有元素。例如,对于 ArrayList 集合,可以使用如下代码来遍历集合:

List<String> list = new ArrayList<>();
list.add("Java");
list.add("Python");
list.add("C++");
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
    String element = iterator.next();
    System.out.println(element);
}

迭代器可以保证集合的安全性,避免了在遍历集合时修改集合的问题。同时,迭代器还可以提供不同的遍历方式,例如正向遍历、反向遍历、跳跃遍历等,更加灵活和高效。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值