关于图灵JAVA一百道面试题总结
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一百道面试题总结相关推荐
- Java 208道面试题及部分答案
Java 208道面试题及部分答案 一.Java 基础 1.JDK 和 JRE 有什么区别? 答:JRE是java运行时环境,包含了java虚拟机,java基础类库.是使用java语言编写的程序运行所 ...
- Java 208道面试题及部分答案(后期继续做)
目前流行的208面试题:copy一部分,自己做一部分,慢慢学习,消化. 一.Java 基础 1.JDK 和 JRE 有什么区别? 答:JRE是java运行时环境,包含了java虚拟机,java基础类库 ...
- JAVA 150道笔试题知识点整理
JAVA 笔试题 整理了几天才整理的题目,都是在笔试或者面试碰到的,好好理解消化下,对你会有帮助,祝你找工作顺利,收到满意的 offer . 1.Java 基础知识 1.1 Java SE 语法 &a ...
- Java Web解决跨域请求,java初级面试笔试题
我总结出了很多互联网公司的面试题及答案,并整理成了文档,以及各种学习的进阶学习资料,免费分享给大家. 扫描二维码或搜索下图红色VX号,加VX好友,拉你进[程序员面试学习交流群]免费领取.也欢迎各位一起 ...
- Java并发编程71道面试题及答案
Java并发编程71道面试题及答案 1.在java中守护线程和本地线程区别? java中的线程分为两种:守护线程(Daemon)和用户线程(User). 任何线程都可以设置为守护线程和用户线程,通过方 ...
- Java多线程常见面试题及答案汇总1000道(春招+秋招+社招)
Java多线程面试题以及答案整理[最新版]Java多线程高级面试题大全(2021版),发现网上很多Java多线程面试题都没有答案,所以花了很长时间搜集,本套Java多线程面试题大全,汇总了大量经典的J ...
- Java每天5道面试题,跟我走,offer有!(八)
2019独角兽企业重金招聘Python工程师标准>>> 76.XML技术的作用? XML技术用于数据存储. 信息配置. 数据交换三方面. 可以将数据存储在XML中, 通过节点. 元素 ...
- Java并发编程75道面试题及答案
1.在java中守护线程和本地线程区别?java中的线程分为两种:守护线程(Daemon)和用户线程(User).任何线程都可以设置为守护线程和用户线程,通过方法Thread.setDaemon(bo ...
- 10 道关于 Java 泛型的面试题
转载自 10 道关于 Java 泛型的面试题 1.Java中的泛型是什么 ? 使用泛型的好处是什么? 这是在各种Java泛型面试中,一开场你就会被问到的问题中的一个,主要集中在初级和中级面试中.那 ...
最新文章
- Java基础-锁机制
- Excel导入SQL SERVER,数字和字符会被系统自动置为NULL的解决方法
- 谷歌最新提出无需卷积、注意力 ,纯MLP构成的视觉架构
- ML之xgboost:利用xgboost算法(自带方式)训练mushroom蘑菇数据集(22+1,6513+1611)来预测蘑菇是否毒性(二分类预测)
- struts2:在Action中使用Servlet的API,设置、读取各种内置对象的属性
- RDIFramework.NET 中多表关联查询分页实例
- LSTM 和 GRU
- 15 CT04创建特性程序DUMP解决方法
- Ubuntu下The program 'python' can be found in the following packages:
- 二分图的最佳匹配(KM 算法)
- Mac端SVN工具CornerStone详解
- Word VBA-图片操作汇总
- opa847方波放大电路_用运算放大器获得三角波、正弦波、方波的简易实用电路
- php 绘制斜线,css怎么绘制斜线
- WPF入门一:搭建WPF的开发环境
- 小组项目--闲置物品交换系统-第一周
- IE浏览器代理出问题导致的程序网络不可用
- 门诊地图导航怎么做,零成本的医院室内导航解决方案
- 滑动窗口大杀器,牛逼
- WINDOWS程式设计--窗体和消息机制