IE盒子

搜索
查看: 103|回复: 0

Java大厂高级面试题灵魂100问,面试官突击一问

[复制链接]

4

主题

5

帖子

13

积分

新手上路

Rank: 1

积分
13
发表于 2023-3-5 10:13:33 | 显示全部楼层 |阅读模式
面试官:”JVM如何判断一个对象可以被回收“

关于这个问题,来看看普通人和高手的回答。
普通人:

嗯。。。。。。。。。。
高手:

好的,面试官。
在JVM里面,要判断一个对象是否可以被回收,最重要的是判断这个对象是否还在被使用,只有没被使用的对象才能回收。

  • 引用计数器,也就是为每一个对象添加一个引用计数器,用来统计指向当前对象的引用次数,
    如果当前对象存在应用的更新,那么就对这个引用计数器进行增加,一旦这个引用计数器变成0,就意味着它可以被回收了。
    这种方法需要额外的空间来存储引用计数器,但是它的实现很简单,而且效率也比较高。



不过主流的JVM都没有采用这种方式,因为引用计数器在处理一些复杂的循环引用或者相互依赖的情况时,
可能会出现一些不再使用但是又无法回收的内存,造成内存泄露的问题。





  • 可达性分析,它的主要思想是,首先确定一系列肯定不能回收的对象作为GC root,
    比如虚拟机栈里面的引用对象、本地方法栈引用的对象等,然后以GC ROOT作为起始节点,
    从这些节点开始向下搜索,去寻找它的直接和间接引用的对象,当遍历完之后如果发现有一些对象不可到达,
    那么就认为这些对象已经没有用了,需要被回收。
    在垃圾回收的时候,JVM会首先找到所有的GC root,这个过程会暂停所有用户线程,
    也就是stop the world,然后再从GC Roots这些根节点向下搜索,可达的对象保留,不可达的就会回收掉。
    可达性分析是目前主流JVM使用的算法。
    以上就是我对这个问题的理解。


面试官:“IO和NIO的区别”

看看普通人和高手的回答。
普通人:

嗯。。。。。。。。。。
高手:

好的,关于这个问题,我会从下面几个方面来回答。
首先,I/O ,指的是IO流, 它可以实现数据从磁盘中的读取以及写入。
实际上,除了磁盘以外,内存、网络都可以作为I/O流的数据来源和目的地。
在Java里面,提供了字符流和字节流两种方式来实现数据流的操作。
其次,当程序是面向网络进行数据的IO操作的时候,Java里面提供了Socket的方式来实现。
通过这种方式可以实现数据的网络传输。
基于Socket的IO通信,它是属于阻塞式IO,也就是说,在连接以及IO事件未就绪的情况下,当前的连接会处于阻塞等待的状态。



如果一旦某个连接处于阻塞状态,那么后续的连接都得等待。所以服务端能够处理的连接数量非常有限。
NIO,是JDK1.4里面新增的一种NEW IO机制,相比于传统的IO,NIO在效率上做了很大的优化,并且新增了几个核心组件。
Channel、Buffer、Selectors。
另外,还提供了非阻塞的特性,所以,对于网络IO来说,NIO通常也称为No-Block IO,非阻塞IO。
也就是说,通过NIO进行网络数据传输的时候,如果连接未就绪或者IO事件未就绪的情况下,服务端不会阻塞当前连接,而是继续去轮询后续的连接来处理。
所以在NIO里面,服务端能够并行处理的链接数量更多。



因此,总的来说,IO和NIO的区别,站在网络IO的视角来说,前者是阻塞IO,后者是非阻塞IO。
面试官:Redis存在线程安全问题吗?为什么?

关于这个问题,看看普通人和高手的回答。
普通人:

嗯。。。。。。。。。。。。
高手:

好的,关于这个问题,我从两个方面来回答。
第一个,从Redis 服务端层面。
Redis Server本身是一个线程安全的K-V数据库,也就是说在Redis Server上执行的指令,不需要任何同步机制,不会存在线程安全问题。
虽然Redis 6.0里面,增加了多线程的模型,但是增加的多线程只是用来处理网络IO事件,对于指令的执行过程,仍然是由主线程来处理,所以不会存在多个线程通知执行操作指令的情况。



为什么Redis没有采用多线程来执行指令,我认为有几个方面的原因。

  • Redis Server本身可能出现的性能瓶颈点无非就是网络IO、CPU、内存。但是CPU不是Redis的瓶颈点,所以没必要使用多线程来执行指令。
  • 如果采用多线程,意味着对于redis的所有指令操作,都必须要考虑到线程安全问题,也就是说需要加锁来解决,这种方式带来的性能影响反而更大。
第二个,从Redis客户端层面。
虽然Redis Server中的指令执行是原子的,但是如果有多个Redis客户端同时执行多个指令的时候,就无法保证原子性。
假设两个redis client同时获取Redis Server上的key1, 同时进行修改和写入,因为多线程环境下的原子性无法被保障,以及多进程情况下的共享资源访问的竞争问题,使得数据的安全性无法得到保障。



当然,对于客户端层面的线程安全性问题,解决方法有很多,比如尽可能的使用Redis里面的原子指令,或者对多个客户端的资源访问加锁,或者通过Lua脚本来实现多个指令的操作等等。
小编收集整理了二十多个互联网大厂常见面试题N道,你想要的这里都有!内容涵盖了:

  • Java并发面试题及答案详解
  • 多线程面试题及答案详解
  • 设计模式面试题及答案详解
  • Tomcat面试题及答案详解
  • Netty面试题及答案详解
  • MyBatis面试题及答案详解
  • ZooKeeper面试题及答案详解
  • Dubbo面试题及答案详解
  • ES面试题及答案详解
  • Memcached面试题及答案详解
  • Redis面试题及答案详解
  • MySQL面试题及答案详解
  • Spring全家桶(Spring、Spring Boot、Spring Cloud、Spring MVC、IOC、AOP)面试题及答案详解面试题及答案详解
  • RabbitMQ面试题及答案详解
  • Kafka面试题及答案详解
  • Linux面试题及答案详解
  • 算法与数据结构面试题及答案详解
希望大家都能找到适合自己的公司,开开心心的撸代码。
由于题量较多,篇幅的限制,文章中的面试题分享没有全部附上详细的解析,但是整理成了一份详细的PDF文档可分享给大家,大家可【点击此处即可免费获取】

Java基础


  • 数据类型
  • String3
  • 运算
  • 继承
  • Object 通用方法
  • 关键字
  • 反射
  • 异常
  • 泛型
  • 注解
  • Java特性
Java基础知识详细解析





Java并发面试题


  • Java 中守护线程和本地线程区别
  • 线程与进程的区别
  • 什么是多线程中的上下文切换
  • 死锁与活锁的区别,死锁与饥饿的区别
  • Java 中用到的线程调度算法是什么
  • 什么是线程组,为什么在 Java 中不推荐使用
  • 为什么使用 Executor 框架
  • 在 Java 中 Executor 和 Executors 的区别
  • 什么是原子操作,在 Java Concurrency API 中有哪些原子类(atomic classes)
  • Java Concurrency API 中的 Lock 接口(Lock interface)是什么,对比同步它有什么优势
  • 什么是 Executors 框架
  • 什么是阻塞队列,阻塞队列的实现原理是什么,如何使用阻塞队列来实现生产者-消 费者模型
  • 什么是 Callable 和 Future
  • 什么是 FutureTask,使用 ExecutorService 启动任务
  • 什么是并发容器的实现
  • 多线程同步和互斥有几种实现方法,都是什么
  • 什么是竞争条件?你怎样发现和解决竞争
  • 如何使用 thread dump,如何分析 Thread dump
  • 为什么我们调用 start()方法时会执行 run()方法,为什么我们不能直接调用 run()方法
  • Java 中你怎样唤醒一个阻塞的线程
Java并发解析





设计模式知识要点


  • 工厂方法模式
  • 抽象工厂模式
  • 单例模式
  • 建造者模式
  • 原型模式
  • 适配器模式
  • 装饰器模式
  • 代理模式
  • 外观模式
  • 桥接模式
  • 组合模式
  • 享元模式
  • 策略模式
  • 模板方法模式
  • 观察者模式
  • 迭代子模式
  • 责任链模式
  • 命令模式
  • 备忘录模式
  • 状态模式
  • 访问者模式
  • 中介者模式
  • 解释器模式
23种设计模式详解





Tomcat面试高频


  • Tomcat 的缺省端口是多少,怎么修改?
  • tomcat 有哪几种 Connector 运行模式(优化)?
  • Tomcat 有几种部署方式?
  • tomcat 容器是如何创建 servlet 类实例?用到了什么原理?
  • tomcat 如何优化?
  • 内存调优
  • 垃圾回收策略调优
  • Tomcat工作模式
Tomcat知识点解析





Netty面试高频


  • BIO、NIO 和 AIO 的区别?
  • NIO的组成
  • Netty 的特点?
  • Netty 的线程模型?
  • TCP 粘包/拆包的原因及解决方法?
  • 了解哪几种序列化协议?
  • 如何选择序列化协议?
  • Netty 的零拷贝实现?
  • Netty 的高性能表现在哪些方面?
  • NIOEventLoopGroup 源码?
Netty知识点详解





Mybatis面试高频


  • 什么是 MyBatis?
  • 讲下 MyBatis 的缓存
  • Mybatis 是如何进行分页的?分页插件的原理是什么?
  • 简述 Mybatis 的插件运行原理,以及如何编写一个插件?
  • Mybatis 动态 sql 是做什么的?都有哪些动态 sql?能简述一下动态 sql 的执行原理不?
  • 为什么说 Mybatis 是半自动 ORM 映射工具?它与全自动的区别在哪里?
  • Mybatis 是否支持延迟加载?如果支持,它的实现原理是什么?
  • MyBatis 与 Hibernate 有哪些不同?
  • MyBatis 的好处是什么?
  • 简述 Mybatis 的 Xml 映射文件和 Mybatis 内部数据结构之间的映射关系?
  • 什么是 MyBatis 的接口绑定,有什么好处?
  • 接口绑定有几种实现方式,分别是怎么实现的?
  • 什么情况下用注解绑定,什么情况下用 xml 绑定?
  • MyBatis 实现一对一有几种方式?具体怎么操作的?
  • Mybatis 能执行一对一、一对多的关联查询吗?都有哪些实现方式,以及它们之间的区
    别?
  • MyBatis 里面的动态 Sql 是怎么设定的?用什么语法?
  • Mybatis 是如何将 sql 执行结果封装为目标对象并返回的?都有哪些映射形式?
mybatis核心知识解析





Zookeeper面试高频


  • ZooKeeper 提供了什么?
  • ZAB 协议?
  • ZAB 和 Paxos 算法的联系与区别?
  • ACL 权限控制机制
  • Zookeeper 下 Server 工作状态
  • Zookeeper 的数据同步
  • zookeeper 是如何保证事务的顺序一致性的?
  • 分布式集群中为什么会有 Master?
  • zk 节点宕机如何处理?
  • zookeeper 负载均衡和 nginx 负载均衡区别
  • Zookeeper 有哪几种几种部署模式?
  • 集群最少要几台机器,集群规则是怎样的?
  • 集群支持动态添加机器吗?
  • Zookeeper 的 java 客户端都有哪些?
  • Zookeeper 的典型应用场景
Zookeeper核心知识解析





Redis面试高频


  • redis 事务
  • Redis 集群模式
  • redis 常见数据结构以及使用场景分析
  • 缓存双写一致性
  • Redis 常见异常及解决方案
  • redis持久化机制
  • redis内存淘汰机制




MySQL面试高频


  • 事务四大特性(ACID)原子性、一致性、隔离 性、持久性?
  • 事务的并发?事务隔离级别,每个级别会引发什么问题,MySQL 默认是哪个级别?
  • MySQL 常见的三种存储引擎(InnoDB、 MyISAM、MEMORY)的区别?
  • MySQL 的 MyISAM 与 InnoDB 两种存储引擎在,事务、锁级别,各自的适用场景?
  • 查询语句不同元素(where、jion、limit、group by、having 等等)执行先后顺序?
  • 什么是临时表,临时表什么时候删除?
  • MySQL B+Tree 索引和 Hash 索引的区别?
  • sql 查询语句确定创建哪种类型的索引,如何优化查询
  • 聚集索引和非聚集索引区别?
  • 有哪些锁(乐观锁悲观锁),select 时怎么加排它锁?
  • 非关系型数据库和关系型数据库区别,优势比较?
  • 数据库三范式,根据某个场景设计数据表?
  • 数据库的读写分离、主从复制,主从复制分析的7个问题?
  • MySQL 慢查询怎么解决?
  • MySQL 都有什么锁,死锁判定原理和具体场景,死锁怎么解决?
BAT面试的高频MySQL数据库问题解析





Spring全家桶面试精选(Spring、Spring Boot、Spring Cloud、Spring MVC、Spring IOC、Spring AOP)


  • Spring Boot、Spring MVC 和 Spring 有什么区别?
  • 使用 Spring 框架的好处是什么?
  • Spring 由哪些模块组成?
  • 什么是 Spring 的依赖注入?
  • 什么是 Spring 配置文件?
  • 什么是 Spring IOC 容器?
  • spring 中有多少种 IOC 容器?
  • Spring IoC 的实现机制是什么
  • spring 提供了哪些配置方式?
  • 什么是 spring bean?
  • spring bean 容器的生命周期是什么样的?
  • spring DAO 有什么用?
  • spring JDBC API 中存在哪些类?
  • 使用 Spring 访问 Hibernate 的方法有哪些?
  • 列举 spring 支持的事务管理类型
  • spring 支持哪些 ORM 框架
  • 什么是 AOP?
  • AOP 有哪些实现方式?
  • Spring AOP and AspectJ AOP 有什么区别?
  • 如何理解 Spring 中的代理?
  • Spring MVC 框架有什么用?
  • 什么是 Spring Cloud?
  • 使用 Spring Cloud 有什么优势?
  • 服务注册和发现是什么意思?Spring Cloud 如何实现?
  • 负载平衡的意义什么?
  • 什么是 Hystrix?它如何实现容错?
Spring全家桶全解





Linux面试高频精选


  • Linux 中主要有哪几种内核锁?
  • Linux 中的用户模式和内核模式是什么含意?
  • 怎样申请大块内核内存?
  • 怎么查看当前进程?怎么执行退出?怎么查看当前路径?
  • Ls 命令执行什么功能? 可以带哪些参数,有什么区别?
  • 目录创建用什么命令?创建文件用什么命令?复制文件用什么命令?
  • Linux 下命令有哪几种可使用的通配符?分别代表什么含义?
  • Linux 中进程有哪几种状态?在 ps 显示出来的信息中,分别用什么符号表示的?
Linux核心知识点解析





算法与数据结构


  • 栈和队列
  • 链表问题
  • 二叉树问题
  • 递归和动态规划
  • 字符串问题
  • 大数据和空间限制
  • 位运算
  • 数组和矩阵问题
  • 其他题目
算法数据结构最优解析





看面试题可以是为了面试,也可以是对自己学到的东西的一种查漏补缺,更加深刻的去了解一些核心知识点有需要的小伙伴可【点击此处免费领取】
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表