2021届Java开发求职-------面试实战之Vivo提前批

一.介绍

这个面试题目非常多,牛客网链接

我擦 但是 VIvo好像不招Java研发岗的

二.题目

Java基础

  1. Java异常了解吗?说说平时遇到的异常?说出6种常见的java异常。写程序遇到过哪些异常 运行时异常有哪些
  • 运行时异常,比如空指针这种,也叫做非受检异常
  1. 面向对象 面对对象的几大特性 多态怎么理解
  • 这个就举例子扯就行
  1. 对string类的理解。stringbuffer 和 stringbuilder
  • StringBuffer线程安全,StingBuilder线程不安全
  • 底层是char数组
  1. 反射机制介绍一下
  • 指在程序的运行状态中,可以构造任意一个类的对象,可以了解任意一个对象所属的类,可以了解任意一个类的成员变量和方法,可以调用任意一个对象的属性和方法
  1. bio,nio,aio分别介绍一下,nio的实现方式
  • 阻塞式IO,非阻塞式IO,异步非阻塞式IO
  • NIO 基于 Channel(通道)和 Buffer(缓冲区)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。Selector(选择器)用于监听多个通道的事件(比如:连接请求,数据到达等),因此使用单个线程就可以监听多个客户端通道
  1. 问了public等变量定义修饰词的时间域
  1. 问了反射机制,还有问了动态代理的好处和坏处,好处答不上来
  • 好处:动态代理可以通过用代理对象替换原本对象,对一些功能进行扩展,例如Spring的AOP面向切面编程,就是通过动态代理来实现一些类似于打日志等功能
  • 坏处:但是它只能基于接口进行代理,已经继承proxy了,可能还有消耗内存?
  1. 接口和抽象类的区别。
  • 接口能实现多继承,抽象类不行
  • 抽象类描述的是一种类,接口描述的是一个功能
  1. 有一个public static final的HashMap,里边对象的属性能不能修改?
  • 可以更改,只有初始化操作做不了
  • 当final修饰变量时,对于基本类型和string,这个变量的值是不能改变的;当修饰其他类型的对象时,final使其引用恒定不变,但是对象自身却可以自由修改变换。
  1. 为什么java 平台无关性 机器码和字节码区别 JVM加载代码的一个流程
  • 流程:加载,准备,验证,解析,初始化,使用,卸载
  • 平台无关性:通过JVM把class文件转化为机器能看懂的机器语言
  • 机器码是二进制的,字节码是16进制class文件,java文件编译产生的
  1. java数据类型以及自己的应用 自动拆箱和自动装箱以及自己的应用即什么时候用到的,列举几种情况
  • byte,short,int,long,boolean,double,float,char
  1. 什么是值传递和引用传递,区别及应用
  • “在Java里面参数传递都是按值传递”这句话的意思是:按值传递是传递的值的拷贝,按引用传递其实传递的是引用的地址值,所以统称按值传递。
  1. 重载和重写
    重写是子类对父类方法进行重写,重载是指不同函数用同名方法,根据参数不同实现函数不同。
  2. static方法是否能重写,接口和抽象类的区别
    不可以
  3. 你觉得java是一种什么样的语言以及java特性
  • 面向对象blablabla
  1. lamda表达式了解吗?1.8新特性有什么?(面试宝典对接口抽象这个问题是错的,过时了)
  • 了解
  • 速度更快 – 红黑树
  • 代码更少 – Lambda
  • 强大的Stream API – Stream
  • 便于并行 – Parallel
  • 最大化减少空指针异常 – Optional
  1. 内存泄露怎么造成的,怎么排查
    内存泄漏就是创建的对象一直没有回收,导致丢了一部分内存。内存泄漏排查
  2. 讲讲final修饰符。
  • 修饰类,终态类,类不能被继承。
  • 修饰方法,方法不能被重写。
  • 修饰变量,变量只能被赋值一次,不能被重新赋值,其实就是一个常量。(在类加载阶段可以把对象的值预先赋值)
  1. 一个对象占多少内存。
  • Object o=new Object(): 在java中空对象占八个字节,对象的引用占四个字节。所以上面那条语句所占的空间是4byte+8byte=12byte
  1. java浅拷贝和深拷贝
  • 二者对于基本类型变量没区别
  • 对于引用类型对象,浅拷贝直接把地址赋值给新对象,假如新对象变了,原来对象也跟着变
  • 深拷贝每个对象都需要实现 Cloneable 并重写 clone() 方法,开销大,速度慢
  1. static能不能被重写?
  • 重写方法的目的是为了多态,或者说:重写是实现多态的前提,即重写是发生在继承中且是针对非static方法的。
    语法上子类允许出现和父类只有方法体不一样其他都一模一样的static方法,但是在父类引用指向子类对象时,通过父类引用调用的依然是父类的static方法,而不是子类的static方法。
    即:语法上static支持重写,但是运行效果上达不到多态目的
  1. 序列化,反序列化,什么时候用? 如何对一个对象序列化
    存储为二进制、xml、json等等,把bai对象转换成这du种格式就叫序列化,而反序列化通常是从这种格式转换回来。序列化可以用一些API

Java集合类

  1. Hashmap底层(数组+链表+红黑树)hashmap为什么线程不安全,如何保证线程安全,就扯到concurrenthashmap hashmap底层实现 多线程会出现什么情况 扩容机制是什么为什么会死锁 如何解决碰撞 Jdk 1.8的优化。
  • 为什么线程不安全:头插法/数值覆盖
  • 解决碰撞:拉链法
  • jdk1.8:引入红黑树优化过长链表导致的查询效率低
  1. concurrenthashmap1.7和1.8的区别;concurrenthashmap说说,它是如何保证线程安全的?jdk1.7的hashentry和segment锁。具体说说segment锁?能讲下ConcurrentHashMap的实现原理么 JDK7或者8都行
    常用集合类 实现类
  2. list和set区别(重复/不重复)
  3. set,list,map(线程安全的map,map怎么实现之类的)
  4. 红黑树介绍一下,跟平衡二叉树比较一下,红黑树有哪些应用场景
  5. 一致性哈希函数以及hashmap的put方法

Java并发

  1. java创建线程的方式,runnable和callable区别(参数不同)1. java线程的状态有哪些;线程的几种状态
  2. wait和sleep的区别;wait和notify的使用场景;
  3. 介绍一下volatile以及原理;volatile介绍一下Volatile底层是如何实现的? 说了内存可见性和内存屏障,Volatile是绝对线2程安全的吗?不是,没有保证原子性。volatile关键字在线程通信的问题
  4. 介绍一下synchornized以及原理; lock和synchornized的区别;synchronized锁的升级过程?Synchronized,底层是如何实现的?说了monitor对象头,以及两个monitorenter和monitorexit运用于代码块。
    对象头是存储了哪些信息?说说synchronized的锁优化过程?说了偏向,自旋,轻量和重量。
  5. 介绍一下AQS
  6. 说一下公平锁和非公平锁的原理;
    • 公平锁是每次都从队列中取队头的线程获得锁
    • 非公平锁每次都会竞争(用CAS操作尝试获取锁)
  7. cas操作是什么,以及可能出现的问题;
  • 关于CAS我的文章
  • 问题就是ABA问题
  1. 说说你理解的悲观锁和乐观锁?乐观锁有哪些?乐观锁有什么缺点?
  • 悲观锁和乐观锁是两种思想
  • 乐观锁的实现有版本号机制,如果数据跟预期版本version一致就更新
  • 缺点是只适用于并发写操作少的情况,如果操作多就会一直阻塞
  1. 阻塞队列 线程间通信方式 创建线程方式 创建线程池方式 线程池常用参数
  2. cpu密集型多线程和io密集型多线程的比较。cpu密集型里如何管理多线程? 用什么样的线程池和阻塞队列?
  • CPU密集型就需要线程数与CPU数一致

JVM

  1. JVM运行时内存区域划分?哪些线程私有?运行时数据区,私有共享都是哪些?堆区内存如何分配?
  • 堆区内存:年轻代80% ,老年代20%,大部分对象都是朝生夕死的
  • 堆区,方法区,本地方法栈,虚拟机栈,程序计数器。堆和方法区是共有的,其余是私有的
  1. 对象的生命周期?
    1.  创建阶段(Created)
      
    1.  应用阶段(In Use)
      
    1.  不可见阶段(Invisible)
      
    1.  不可达阶段(Unreachable)
      
    1.  收集阶段(Collected)
      
    1.  终结阶段(Finalized)
      
    1.  对象空间重分配阶段(De-allocated)
      
  1. JVM垃圾回收器,cms和g1的特点,两者的区别是什么,比g1更加先进的垃圾回收器有了解么,ZGC原理,能够管理多大的内存,CMS能管理多大的内存,G1呢
  • cms是最短停顿时间收集器,g1是整堆收集器
  • CMS专注老年代
  • G1:它将整个Java堆划分为多个大小相等的独立区域(Region),虽然还保留有新生代和老年代的概念,但新生代和老年代不再是物理隔离的了,它们都是一部分Region(不需要连续)的集合。
  • 工作步骤不同
  • 比G1更先进:这还真不知道
  1. JVM内存模型 类的生命周期 类加载过程 双亲委派机制了解吗 进入老年代过程 什么情况下直接进入老年代
  2. 类加载机制,过程,类加载机制?如何自定义实现类加载器?双亲委派模型、类加载器类别,双亲委派模型本质是解决了什么问题?安全性,有哪几种类加载器?类加载的流程。知道哪些类加载器。类加载器之间的关系?双亲委派模型。为什么使用双亲委派模型?
  1. 垃圾回收算法,常见的垃圾回收器及他们之间区别,垃圾回收发生在哪里,怎么判断对象存活、GC Roots具体有哪些、讲讲对象分配与回收,什么可以作为垃圾回收的对象,垃圾回收算法和流程。
  • 发生在堆区,通过GC-roots对象判断,如果没有引用就是要进行gc的对象
  1. 栈什么情况下会溢出?
  • 方法执行是创建的栈帧超过了栈的深度。那么最有可能的就是方法递归调用产生这种结果。
  • 注意栈是线程私有的
  1. 静态变量存放在内存哪个区域?
  • static修饰的成员(包括变量和方法)叫静态成员,都存放在方法区中的静态区,随着类的加载而存在、类的回收而释放,和对象存在与否没有关系,并且要先于对象存在。
  • 在主函数中调用静态方法,静态方法是在栈内存中进行加载的,静态方法执行完之后就弹栈结束了。事实上,所有方法都是在栈内存中执行的。

计算机网络

  1. 输入一个url后的过程;浏览器从发送请求的全部过程
    我的文章关于计网
  2. OSI七层和TCP四层协议,OSI七层模型/五层模型,每一层有哪些协议,3. http,tcp,ip位于哪一层
  • http位于应用层
  • tcp位于传输层
  • ip位于网络层
  1. TCP三次握手四次分手,tcp四次挥手为什么要四次,为什么TCP是安全的,TCP,UDP的区别
    TCP的可靠体现在TCP在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完后,还会断开连接用来节约系统资源。

1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接

2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付

3、TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的

UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)

4、每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信

5、TCP首部开销20字节;UDP的首部开销小,只有8个字节
6、TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道

  1. 一个手机应用程序里面的进程和线程分别是怎么进行的?

进程是操作系统资源分配的基本单位,而线程是任务调度和执行的基本单位

在开销方面:每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销;线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程之间切换的开销小。

所处环境:在操作系统中能同时运行多个进程(程序);而在同一个进程(程序)中有多个线程同时执行(通过CPU调度,在每个时间片中只有一个线程执行)

Mysql

  1. 数据库引擎事务隔离级别,串行化如何实现,数据库的隔离级别?四个。你平常使用的是哪个隔离级别。数据库隔离级别以及分别解决了什么问题
  • 读未提交,读已提交,可重复读,可串行化
  • mysql默认是可重复读
  • 脏读,不可重复读,幻读
  1. MySQL的存储引擎有哪些?它们之间的区别?你用的mysql存储引擎?为什么选择它?实现原理?
    innodb和myisam,区别见:innodb和myisam区别
  2. 怎么判断一个SQL语句有没有走索引?紧接着问explain知道哪些字段吗
    mysql存储模型 区别 怎么看用没用索引 怎么判断sql语句好坏
  • explain命令看结果
  1. 一个手机应用要更改数据库,它的底层是怎么实现的?
  2. MySQL InnoDB存储引擎中的MVCC解决了什么问题,能说下MVCC的实现原理么
  • 多版本并发控制
  • 一种处理读写冲突的手段, 目的在于提高 数据库 高并发场景下的吞吐性能 。
  • 如此一来不同的事务在并发过程中, SELECT 操作可以不加锁而是通过 MVCC 机制读取指定的版本历史记录,并通过一些手段保证保证读取的记录值符合事务所处的隔离级别,从而解决并发场景下的读写冲突。

文章:MVCC

你可能感兴趣的:(面试题)