https://www.bilibili.com/video/BV1Eb4y1R7zd?from=search&seid=10716683573082248310&spm_id_from=333.337.0.0https://www.bilibili.com/video/BV1Eb4y1R7zd?from=search&seid=10716683573082248310&spm_id_from=333.337.0.0

上图是面试题链接

1.什么是面向对象:

①说到面向对象就不得不说面向过程,这里我举一个例子;我需要去洗衣服。

如果是用面向过程的思想,那么就应该是: 我打开洗衣机,放衣服,关闭洗衣机,开始洗衣服。

如果是用面向对象的思想,那么就应该是: 人:打开洗衣机,放衣服,关闭洗衣机;洗衣机:洗衣服。

两者的区别是:面向过程更注重事情的顺序与步骤,而面向对象更注重事情的参与者与各自需要完成的事情,所以面向对象更加容易维护,扩展与复用。

②面向对象有三个特点:封装,继承,多态;

封装是指:内部细节对外部的调用透明,外部调用不需要修改与知道内部的实现,保证数据的安全。

继承是指:子类继承父类,子类有共性的方法直接使用父类,不需要自己再定义,只需要扩展自己的个性化就可以了。

多态是指:基于对象所属类的不同,外部对同一个方法的调用,实际执行的逻辑不同。

2.JDK,JRE,JVM的区别和联系:

JDK:java开发工具包  (开发人员使用)

JRE:java运行时环境   (提供给java程序用户使用)

JVM:java虚拟机

3.==与equals

==比较的是栈中的值,基础类型的变量值,引用类型比较的是引用地址;

equals默认没有重写的情况下与==没有区别,但在string类中进行了重写,内部实现是将字符一一取出进行比对。

4.final

修饰类:表示类不可被继承

修饰方法:表示方法不能被子类覆盖,但是可以重载

修饰变量:表示常量,不可修改

5.string,StringBuffer,StringBuilder的区别以及使用场景

string 是final修饰的,不可变,每次操作都会新生成一个string对象,对内存造成负担

stringBuffer和stringBuilder都是在原来的对象上进行操作,

stringbuffer线程是安全的,stringbuilder线程不安全,

性能:stringbuffer>stringbuilder>string 。

使用场景:多线程:striungbuffer,经常改变字符串使用stringbuilder,没有其他要求用string

6.重载和重写的区别

重载:发生在同一个类中,方法名相同,参数类型不同,个数不同,顺序不同,

重写:发生在父子类中,方法名,参数列表必须相同返回值范围小于等于父类,如果父类访问修饰符是private则不能重写该方法

7.接口与抽象类

①抽象类可以存在普通成员方法,而接口只能存在 public abstract 方法

抽象类中的成员变量可以是各种类型的,而接口中的成员变量只能是public static final 类型的

抽象类只能继承一个,接口可以实现很多个

②接口设计的目的是约束类行为的有无,但不对如何实现进行限制

抽象类的目的是代码复用

使用场景:当你关注一个事物的本质的时候,用抽象类。当你关注一个操作的时候,用接口。

8.List和Set的区别

List:有序,可重复,允许多个null元素,可以使用iterator取出所有元素逐一遍历,可以使用get(index)获取指定下标取出数据

Set:无序,不可重复,最有允许有一个null元素,取元素只能使用迭代器进行取出

9.hashcode与equals

hashcode()的作用是获取一个哈希码,散列码,是一个int类型的整数,哈希码的作用是确定该对象在哈希表中的索引位置

10.ArraryList和LinkedList的区别

ArrayList:基于动态数组,在内存中需要连续的内存空间进行存储;存在扩容机制,在数组超出存储长度会进行扩容,创建新数组,并将旧数组数据复制到新数组中。ArrayList和LinkedList集合有一个误区,普遍认为ArrayList的插入效率比LinkedList低,因为涉及到扩容和数据复制。不过当ArrayList使用尾插法和指定出售长度得当,效率会大大高于LinkedList。

LinkedList:基于链表,可以存储分散的内存中,适合做新增和删除操作。不适合做查询:因为在LinkedList底层,每增加一个元素就会新增一个node。当遍历的时候,需要从第一个元素开始遍历。而且如果使用元素索引返回元素,如果结果为空,会将整个集合进行遍历,非常影响性能。

11.HashMap和HashTable的区别?底层实现是什么?

区别:

①HashMap方法没有synchronized修饰,线程非安全,HashTable线程安全;

②HashMap允许key和value 为null,而HashTable不允许

底层实现:数组+链表实现

jdk1.8开始 链表高度到8,数组长度超过64 链表转为红黑树 元素以内部类Node节点存在

计算key的hash值,二次hash然后对数组长度取模,对应到数组下标;

如果没有产生hash冲突,则直接Node存入数组

如果产生hash冲突,先进行equals比较,相同则取代该元素,不同,则判断链表高度插入链表,链表高度达到8,并且数组长度到64转变为红黑树,长度低于6则将红黑树转为链表

key为null,存在下标0 的位置

数组扩容

12.ConcurrentHashMap原理简述,jdk1.8和jdk1.7的区别

-----------------------------------------------------------------暂时不讲解

13.如何实现一个IOC容器:

①配置文件配置包扫描路径

②递归包扫描获取class文件

③反射,确定需要交给IOC管理的类

④对需要注入的类进行依赖注入

14.java的类加载器有哪些?

引导类加载器,扩展类加载器,应用程序类加载器,自定义类加载器

引导类加载器:负责加载java核心类,maven仓库中的类

扩展类加载器:负责加载java工具类

应用程序类加载器:加载classpath下的类文件,也就是程序员自己写的类

15双亲委派模型:

重点:*向上委派到顶层类加载器,向下查找到发起加载的加载器。

双亲委派的好处:抓要是为了安全性,避免用户自己编译的类动态替换JAVA的核心类,比如string

同时也避免了类的重复加载,因为jvm中区分不同类不仅仅是根据类名,相同的class文件被不同的classloader加载就是不同的两个类

16.java中的异常体系:

java中所有异常都来自顶级父类Throwable。

Throwable下有两个子类Exception和Error。

Error是程序无法处理的错误,一旦出现这个错误,则程序将被迫停止(如OOM)

Exception不会导致程序停止,它有分为两个部分,RunTimeException运行时异常和CheckedException检查异常 。

RunTimeException常常发生在程序运行中,会导致程序当前线程失败。CheckedException 常常发生在程序编译过程中,会导致编译不通过。

17.GC如何判断对象可以被回收?

目前GC判断对象是否可以被回收有两种主流方法:引用计数法 和 可达性分析法。

引用计数法:每个对象有一个引用计数属性,每次当前对象被引用一次,计数器就+1。引用释放时,计数器-1。当计数器为0时可以被回收。

可达性分析法:从GC Roots开始向下搜索,当一个对象到GC Roots没有任何引用链时,证明此对象已经变成了垃圾,那么虚拟机就会回收该对象。

但是引用计数法有一个缺陷,如果出现循环依赖,则该对象永远无法被回收。所以JVM虚拟机用的是可达性分析法。

GC Roots对象有:

虚拟机栈中引用的对象

方法区中类静态属性引用的对象

方法区中常量引用的对象

本地方法栈中JNI引用的对象

18.线程的生命周期,线程有哪些状态:

线程状态:创建,就绪,运行,阻塞和死亡

阻塞的情况又分为三种:

等待阻塞:运行线程执行wait方法,JVM会将该线程放入“等待池”中,进入这个状态不能自动唤醒,需要依靠其他线程执行notify或者notifyAll进行唤醒。wait是object类的方法。

同步阻塞:运行的线程在获取同步锁时,若该同步锁被其他线程占用,则JVM会将该线程放入“锁池”当中去。

其他阻塞:运行的线程执行sleep或者join方法,或者发出I/O请求,JVM会将该线程置为阻塞状态。当sleep方法超时,join等待线程终止或者超时,或者I/O处理完毕后,线程重新转入就绪状态,sleep是Thread类的 方法。

①新建状态:新创建了一个线程对象

②就绪状态:线程创建后,其他线程调用了该对象的start方法。该对象的线程位于可运行线程池中,变得可运行,等待CPU的使用权

③运行状态:就绪状态线程获取了CPU,执行程序代码

④阻塞状态:阻塞线程因为某种原因放弃CPU的使用权,暂时停止运行,直到线程进入就绪状态,才有机会转到运行状态。

⑤死亡状态:线程执行完或者因为异常退出run方法,该线程结束生命周期

19.spring是什么:

关于图灵JAVA一百道面试题总结相关推荐

  1. Java 208道面试题及部分答案

    Java 208道面试题及部分答案 一.Java 基础 1.JDK 和 JRE 有什么区别? 答:JRE是java运行时环境,包含了java虚拟机,java基础类库.是使用java语言编写的程序运行所 ...

  2. Java 208道面试题及部分答案(后期继续做)

    目前流行的208面试题:copy一部分,自己做一部分,慢慢学习,消化. 一.Java 基础 1.JDK 和 JRE 有什么区别? 答:JRE是java运行时环境,包含了java虚拟机,java基础类库 ...

  3. JAVA 150道笔试题知识点整理

    JAVA 笔试题 整理了几天才整理的题目,都是在笔试或者面试碰到的,好好理解消化下,对你会有帮助,祝你找工作顺利,收到满意的 offer . 1.Java 基础知识 1.1 Java SE 语法 &a ...

  4. Java Web解决跨域请求,java初级面试笔试题

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

  5. Java并发编程71道面试题及答案

    Java并发编程71道面试题及答案 1.在java中守护线程和本地线程区别? java中的线程分为两种:守护线程(Daemon)和用户线程(User). 任何线程都可以设置为守护线程和用户线程,通过方 ...

  6. Java多线程常见面试题及答案汇总1000道(春招+秋招+社招)

    Java多线程面试题以及答案整理[最新版]Java多线程高级面试题大全(2021版),发现网上很多Java多线程面试题都没有答案,所以花了很长时间搜集,本套Java多线程面试题大全,汇总了大量经典的J ...

  7. Java每天5道面试题,跟我走,offer有!(八)

    2019独角兽企业重金招聘Python工程师标准>>> 76.XML技术的作用? XML技术用于数据存储. 信息配置. 数据交换三方面. 可以将数据存储在XML中, 通过节点. 元素 ...

  8. Java并发编程75道面试题及答案

    1.在java中守护线程和本地线程区别?java中的线程分为两种:守护线程(Daemon)和用户线程(User).任何线程都可以设置为守护线程和用户线程,通过方法Thread.setDaemon(bo ...

  9. 10 道关于 Java 泛型的面试题

    转载自   10 道关于 Java 泛型的面试题 1.Java中的泛型是什么 ? 使用泛型的好处是什么? 这是在各种Java泛型面试中,一开场你就会被问到的问题中的一个,主要集中在初级和中级面试中.那 ...

最新文章

  1. Java基础-锁机制
  2. Excel导入SQL SERVER,数字和字符会被系统自动置为NULL的解决方法
  3. 谷歌最新提出无需卷积、注意力 ,纯MLP构成的视觉架构
  4. ML之xgboost:利用xgboost算法(自带方式)训练mushroom蘑菇数据集(22+1,6513+1611)来预测蘑菇是否毒性(二分类预测)
  5. struts2:在Action中使用Servlet的API,设置、读取各种内置对象的属性
  6. RDIFramework.NET 中多表关联查询分页实例
  7. LSTM 和 GRU
  8. 15 CT04创建特性程序DUMP解决方法
  9. Ubuntu下The program 'python' can be found in the following packages:
  10. 二分图的最佳匹配(KM 算法)
  11. Mac端SVN工具CornerStone详解
  12. Word VBA-图片操作汇总
  13. opa847方波放大电路_用运算放大器获得三角波、正弦波、方波的简易实用电路
  14. php 绘制斜线,css怎么绘制斜线
  15. WPF入门一:搭建WPF的开发环境
  16. 小组项目--闲置物品交换系统-第一周
  17. IE浏览器代理出问题导致的程序网络不可用
  18. 门诊地图导航怎么做,零成本的医院室内导航解决方案
  19. 滑动窗口大杀器,牛逼
  20. WINDOWS程式设计--窗体和消息机制

热门文章

  1. ios中在app应用内刷新小组件数据
  2. 推荐一本书《Atomic Habits》
  3. 浪潮刀片服务器型号,浪潮刀片服务器 NF600 Center
  4. 图片数据损坏了怎么恢复
  5. 基于STM32的倒车雷达系统设计
  6. python图片转黑白_python实现彩照转黑白以及图片转素描画
  7. MySQL批量导入Excel数据【超详细】
  8. h5前端开发培训,html5学习笔记
  9. ubuntu16.04安装rtems
  10. 共享汽车充电桩方案开发详解