面试题总结

Java基础

目录

Java基础

 1.==和equals的区边?

 2.collection和collections的区边?

3.String为什么是final修饰的?

4.final是什么?

5.面向对象是什么?特点是什么?

6.重写和重载的区边?

7.static的作用?

8.抽象类和接口的区边?

9. 序列化和序列化的区边?

10.线程的创建方式有哪几种?


 1.==和equals的区边?

  •       ==比较的对象的是地址值是否相等,基本数据类型==比较地址值,引用数据类型==比较内存地址
  •       equals 有俩种情况,第一种为类重写equals方法后,就会比较这俩个对象的内容是否相等,如果相等就会返回true,就会认为这俩个对象相等,第二种为不重写equals方法,相当于通过==来比较。
  •                 

 2.collection和collections的区边?

  1.   collection是接口,是各种集合的父接口
  2.   collections是java.util下面的工具类,提供了操作集合的各种方法

3.String为什么是final修饰的?

  1.  用final修饰才能实现常量池,节约内存
  2. String被final修饰后,是多线程安全的,同一字符串可以被多个线程共享,所以final可以避免一个对象改变String对其他对象产生影响
  3. 实现String可以创建hashcode的不可变

4.final是什么?

修饰的类不能被继承,修饰的方法不能被重写,修饰的变量不能被修改,所以就是个常量

5.面向对象是什么?特点是什么?

  • 面向对象是把问题事务分解成各个对象,这些对象是用来描述某个事物在整个解决问题中的步骤的行为
  • 特点:
  •  封装:隐藏对象的数据和实现细节,仅对外提供公共的访问方式    好处:提高了安全性
  •  继承:子类继承父类,并拥有父类的属性和行为,并能扩展新的能力
  •  多态:子类继承父类,并重写父类的所有方法,
  •              父类引用指向子类对象,编译看左边,运行看右边,向上造型(同一调用标准,提高通用性)

6.重写和重载的区边?

  • 都是体现多态的实现方式,重载编译时多态,重写运行时多态
  • 重写:子类继承父类后,需要重写父类的方法,改变父类原有功能的一种,子类需要有足够的权限
  • 重载:在一个类里,方法名相同,参数列表不同的现象,体现程序的灵活性

7.static的作用?

  1. 1.被static修饰的静态变量由多个对象共享,当修改这个静态变量的值后,其他对象的静态变量值也会修改。
  2. 2.被static修饰的方法是静态方法,可以用类名,方法名直接调用

8.抽象类和接口的区边?

  1. 抽象方法没有方法体,
  2. 接口就是个特殊的抽象类,所以里面的方法都是抽象方法,在JDK1.8之后也接口中也可以有一般方法,需要用default和static修饰
  3. 抽象类需要用extends来继承,接口需要用implements来实现
  4. 抽象类能有main方法,可以运行他,而接口没有main方法
  5. 接口可以多实现,类只能单继承

9. 序列化和反序列化的区边?

序列化就是把对象存储到硬盘上,反序列化就是获取对象文件中的数据,转成后台对象类的数据

作用减少内存消耗或在远程rpc调用对象的时候需要

10.线程的创建方式有哪几种?

  1. 继承Thread类
  2. 实现Runnable接口
  3. 实现Callable接口
  4. 创建线程池创建

11. 线程的生命周期?

创建,就绪,运行,阻塞,终止

创建:四种创建线程的方式,start没启动

就绪:创建线程后,调用Thread类start方法来启动线程

运行:线程获取CPU时间,为运行窗台

阻塞:调用sleep方法让线程睡眠,调用wait方法让线程等待等,可以使线程阻塞

终止:线程run方法完成或者是主线程main方法完成时,就认为终止了

12.为什么要创建线程池?

  • 降低资源消耗:重复利用已经创建的线程,降低线程创建和销毁造成的资源消耗
  • 提高响应速度:当任务到达时,不需要等线程创建就可执行
  • 提高线程的可管理性:使用线程池可以进行统一的调优和监控

13.死锁是什么?如何避免?

俩个或俩个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象

避免:将系统中的所有资源设置标志位,排序将所有进程的申请资源以一定的顺序进行排序

目录

Java基础

 1.==和equals的区边?

 2.collection和collections的区边?

3.String为什么是final修饰的?

4.final是什么?

5.面向对象是什么?特点是什么?

6.重写和重载的区边?

7.static的作用?

8.抽象类和接口的区边?

9. 序列化和反序列化的区边?

10.线程的创建方式有哪几种?

11. 线程的生命周期?

12.为什么要创建线程池?

13.死锁是什么?如何避免?

14.设计模式


单例设计模式:

一个类只有一个实例,分为懒汉式和饿汉式

代理模式:

工厂模式:

观察者模式:

JVM相关

1.jvm运行机制

类加载器将.class文件以二进制的形式读入到内存中,并将其放在运行时的方法内,然后在推中创建一个java.lang.Class对象,封装类在方法区内的数据结构。

2.jvm堆和栈

堆:

  1.  用来存放对象实例和数组
  2.  当堆中的实例对象不在被指向时,JVM启动垃圾回收机制,自动清除,
  3.  堆中的队友实例对象都有内存地址值
  4. 有默认初始化值

栈:

  1.  对象的引用变量和基本变量都在栈中存放
  2. 数据执行完毕,变量会立即释放
  3. 没有默认初始化值,需手动设置 

 方法区:

共享内存,存储被虚拟机加载的类,常量,静态变量,编译器编译后的代码

本地方法栈:

  • 和栈的作用类似 ,区别就是
  • 栈:虚拟机执行java(.class)服务
  • 本地方法栈: 虚拟机使用到的native方法服务

程序计数器:

当前线程所执行的字节码的行号指示器

3.堆和栈的区别

堆得内存不连续,所以在运行的时候就确定了

栈的内存连续,在编译的时候就确定了

堆内存远远大于栈内存

堆存放的是实例对象和数组

栈存放的是 局部变量,返回结果 栈更关注的是程序方法的执行

堆对于整个程序都是共享的

栈只对线程是可见的,生命周期和线程相同 

4.GC垃圾回收是什么? 

当堆中的对象不在被指向引用时,就会通过垃圾回收来释放内存

5.垃圾回收算法?

标记---清除算法,标记---整理算法,复制,分代收集算法

6.分代收集算法怎么说?

年轻代和老年代

年轻代:分为三个区 Eden区,From区与To区

  • 创建一个对象总在Eden区操作得时候,当这个区满了就会触发一个垃圾回收,会把有用的对象复制到From区
  • 当Eden区创建对象又满了的时候,触发垃圾回收,将 Eden区,From区有用的对象复制到To区
  • 在下一次垃圾回收的时候,Eden区与To区有用的对象复制到from区,如果经过多次的垃圾回收后,会达到From区与To区的阈值,就会都复制到老年区
  • 老年代在经过这么几次垃圾回收后,会进行全量回收,如果全量回收次数频繁的话,会对系统造成很大的影响
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值