一、 Java语言有哪些特点

1、简单易学、有丰富的类库

2、面向对象(Java最重要的特性,让程序耦合度更低,内聚性更高)

3、与平台无关性(JVM是Java跨平台使用的根本)

4、可靠安全

5、支持多线程

二 、八种基本数据类型的大小,以及他们的封装类

三、访问修饰符 public,private,protected,以及不写(默认)时的区别?

四、 重载和重写的区别

重写:

1.发生在父类与子类之间

2.方法名,参数列表,返回类型(除过子类中方法的返回类型是父类中返回类型的子类)必须相同

3.访问修饰符的限制一定要大于被重写方法的访问修饰符(public>protected>default>private)

4.重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常

重载:

在一个类中,同名的方法如果有不同的参数列表(参数类型不同、参数个数不同甚至是参数顺序不同)则视为重载。同时,重载对返回类型没有要求,可以相同也可以不同,但不能通过返回类型是否相同来判断重载。

五、equals与==的区别

== :

== 比较的是变量(栈)内存中存放的对象的(堆)内存地址,用来判断两个对象的地址是否相同,即是否是指相同一个对象。比较的是真正意义上的指针操作。

1、比较的是操作符两端的操作数是否是同一个对象。

2、两边的操作数必须是同一类型的(可以是

父子类之间)才能编译通过。

3、比较的是地址,如果是具体的阿拉伯数字的比较,值相等则为true,如: int a=10 与 long b=10L 与 double c=10.0都是相同的(为true),因为他们都指向地址为10的堆。

equals:

equals用来比较的是两个对象的内容是否相等,由于所有的类都是继承自java.lang.Object类的,所

以适用于所有对象,如果没有对该方法进行覆盖的话,调用的仍然是Object类中的方法,而Object

中的equals方法返回的却是==的判断。

六、ArrayList和linkedList的区别

Array(数组)是基于索引(index)的数据结构,它使用索引在数组中搜索和读取数据是很快的。

Array获取数据的时间复杂度是O(1),但是要删除数据却是开销很大,因为这需要重排数组中的所有数据,(因为删除数据以后, 需要把后面所有的数据前移)

缺点: 数组初始化必须指定初始化的长度, 否则报错

例如:

int[] a = new int[4];//推荐使用int[] 这种方式初始化
int c[] = {23,43,56,78};//长度:4,索引范围:[0,3]

List—是一个有序的集合,可以包含重复的元素,提供了按索引访问的方式,它继承Collection。

List有两个重要的实现类:ArrayList和LinkedList。

ArrayList: 可以看作是能够自动增长容量的数组。

ArrayList的toArray方法返回一个数组。

ArrayList的asList方法返回一个列表。

ArrayList底层的实现是Array, 数组扩容实现。

LinkList是一个双链表,在添加和删除元素时具有比ArrayList更好的性能.但在get与set方面弱于ArrayList。当然,这些对比都是指数据量很大或者操作很频繁。

七、String、String StringBuffer 和 StringBuilder 的区别是什么?

String是只读字符串,它并不是基本数据类型,而是一个对象。从底层源码来看是一个final类型的字符数组,所引用的字符串不能被改变,一经定义,无法再增删改。每次对String的操作都会生成新的String对象。

private final char value[]

每次+操作 : 隐式在堆上new了一个跟原字符串相同的StringBuilder对象,再调用append方法 拼 接+后面的字符。 StringBuffer和StringBuilder他们两都继承了AbstractStringBuilder抽象类,从 AbstractStringBuilder抽象类中我们可以看到

char[] value;

他们的底层都是可变的字符数组,所以在进行频繁的字符串操作时,建议使用StringBuffer和 StringBuilder来进行操作。 另外StringBuffer 对方法加了同步锁或者对调用的方法加了同步锁,所 以是线程安全的。StringBuilder 并没有对方法进行加同步锁,所以是非线程安全的。

八、深拷贝和浅拷贝的区别是什么?

浅拷贝:被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象。换言之,浅拷贝仅仅复制所考虑的对象,而不复制它所引用的对象。

深拷贝:被复制对象的所有变量都含有与原来的对象相同的值。而那些引用其他对象的变量将指向被复制过的新对象。而不再是原有的那些被引用的对象。换言之,深拷贝把要复制的对象所引用的对象都复制了一遍。

九、HashTable, HashMap,TreeMap区别?

答:

1. HashTable线程同步,HashMap非线程同步。

2. HashTable不允许<键,值>有空值,HashMap允许<键,值>有空值。

3. HashTable使用Enumeration,HashMap使用Iterator。

4. HashTable中hash数组的默认大小是11,增加方式的old*2+1,HashMap中hash数组的默认大小是16,增长方式一定是2的指数倍。

5. TreeMap能够把它保存的记录根据键排序,默认是按升序排序。

HashMap的数据结构:

jdk1.8之前list + 链表

jdk1.8之后list + 链表(当链表长度到8时,转化为红黑树)

HashMap的扩容因子默认0.75,也就是会浪费1/4的空间,达到扩容因子时,会将list扩容一倍,0.75 是时间与空间一个平衡值;

多线程修改HashMap多线程同时写入,同时执行扩容操作,多线程扩容可能死锁、丢数据;可以对HashMap 加入同步锁Collections.synchronizedMap(hashMap),但是效率很低,因为该锁是互斥锁,同一时刻只能有一个线程执行读写操作,这时候应该使用ConcurrentHashMap

LinkedHashMap:

Java LinkedHashMap工作原理及实现

Java集合框架:LinkedHashMap

注意:在使用Iterator遍历的时候,LinkedHashMap会产生java.util.ConcurrentModificationException。

扩展HashMap增加双向链表的实现,号称是最占内存的数据结构。支持iterator()时按Entry的插入顺序来排序(但是更新不算, 如果设置accessOrder属性为true,则所有读写访问都算)。实现上是在Entry上再增加属性before/after指针,插入时把自己加到Header Entry的前面去。如果所有读写访问都要排序,还要把前后Entry的before/after拼接起来以在链表中删除掉自己。

十、HashMap 的长度为什么是 2 的 N 次方呢?

为了能让 HashMap 存数据和取数据的效率高,尽可能地减少 hash 值的碰撞,也就是说尽量把数

据能均匀的分配,每个链表或者红黑树长度尽量相等。我们首先可能会想到 % 取模的操作来实现。

重点:

取余(%)操作中如果除数是 2 的幂次,则等价于与其除数减一的与(&)操作(也就是说

hash % length == hash &(length - 1) 的前提是 length 是 2 的 n 次方)。并且,采用二进

制位操作 & ,相对于 % 能够提高运算效率。这就是为什么 HashMap 的长度需要 2 的 N 次方了。

2023年java基础面试题,适合年初找工作的小伙伴相关推荐

  1. Java 基础面试题,java基础面试笔试题

    我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...

  2. 2022 最新 Java 基础 面试题(一)

    2022 最新 Java 基础 面试题(一) 1.面向对象的特征有哪些方面? 3.String 是最基本的数据类型吗? 4.float f=3.4;是否正确? 5.short s1 = 1; s1 = ...

  3. 知识点整理,Java基础面试题(一)

    写在前面 整理了一些互联网大厂的面试题,这些面试题经常会被问到,也是作为Java工程师需要掌握的一些知识点,毕竟理论和实践的结合,才是王道,分片整理,每天嗑些知识点,快乐每一天,如果对你有帮助,记得点 ...

  4. Java基础面试题(建议收藏)

    个人博客欢迎访问 总结不易,如果对你有帮助,请点赞关注支持一下 微信搜索程序dunk,关注公众号,获取博客源码.数据结构与算法笔记.面试笔试题 序号 内容 1 Java基础面试题 2 JVM面试题 3 ...

  5. 100道Java基础面试题收集整理(附答案)

    不积跬步无以至千里,这里会不断收集和更新Java基础相关的面试题,目前已收集100题. 1.什么是B/S架构?什么是C/S架构 B/S(Browser/Server),浏览器/服务器程序 C/S(Cl ...

  6. 判断一个java对象中的属性是否都未赋值_100道Java基础面试题(一)

    100道Java基础面试题(一)未来大家将步入职场,面试的时候面试官还会问大家一些Java相关的问题.小编整理出100道非常实用的面试题目,可以帮助双体的小伙伴应对面试,我们一起来看看都有哪些吧! 1 ...

  7. Java继承_30道最常问的Java基础面试题

    30道最常问的Java基础面试题 1. 面向对象和面向过程的区别面向过程优点: 性能比面向对象高,因为类调用时需要实例化,开销比较大,比较消耗资源;比如单片机.嵌入式开发.Linux/Unix等一般采 ...

  8. Java进阶篇(六)——Swing程序设计(上),java面试题,java基础笔试题,BAT

    写在最前面,我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家.扫码加微信好友进[程序员面试学习交流群],免费领取.也欢迎各位一起在群里探讨技术. Sw ...

  9. Java基础知识面试题(2021最新版)

    转载自:https://thinkwon.blog.csdn.net/article/details/104390612 文章目录 Java概述 何为编程 什么是Java jdk1.5之后的三大版本 ...

最新文章

  1. 观察内核linux行为,Linux 学习:基于proc观察Linux行为
  2. Coursera, Big Data 1, Introduction (week 3)
  3. 网易云信10月大事记
  4. why my SAP UI5 filter by titleID does not work
  5. 【错误异常大全】:ArcGIS Engine中C#无法引用ESRI.ArcGIS.AxControls问题
  6. Buffers与cached啥区别
  7. PHP 四种基本排序算法的代码实现(2)
  8. 5岁儿童自学python编程-适合6-16岁孩子学习的Python编程
  9. PA 2011 Round 3 prz题解
  10. ECMAScript5 [].reduce()
  11. 软件测试——JUnit基础
  12. Linux模块化增加设备驱动程序
  13. C. Balanced Stone Heaps
  14. 《改变心理学的40项研究》第二章 知觉与意识
  15. 台式计算机的cpu设置,台式电脑如何超频,cpu超频详细设置教程
  16. Pycharm2017补丁破解
  17. 【Android】Android外接音源设备之小蜜蜂坑
  18. pdf太大怎么压缩大小?
  19. Egret性能优化之优化渲染
  20. ucsd计算机科学,UCSD计算机科学博士排名,谨记得细致看

热门文章

  1. 计算机基础教学案,计算机基础教学案[完整版].doc
  2. 最大子段和(C++,DP)
  3. 大学生个人网页模板 简单网页制作作业成品 极简风格个人介绍HTML(个人博客 4页)
  4. Linux基础 -- 文件操作、进程、监测命令
  5. 人工智能微信小程序人脸识别之人脸属性检测(附源码)
  6. houdini volumetrail
  7. PC端Windows安装adb工具和使用
  8. 关于解析XML文件时遇到的一些错误
  9. 安装VC++2015运行库时出现0x80240037错误(JT预览报错)
  10. 教你如何搭建CRM—商机管理系统的demo