设为首页
收藏本站
切换到窄版
登录
立即注册
找回密码
搜索
搜索
本版
帖子
用户
快捷导航
论坛
BBS
C语言
C++
NET
JAVA
PHP
易语言
数据库
IE盒子
»
论坛
›
IE盒子
›
JAVA
›
Java大厂高级面试题灵魂100问,面试官突击一问 ...
返回列表
发帖
查看:
103
|
回复:
0
Java大厂高级面试题灵魂100问,面试官突击一问
[复制链接]
长城智能门业
长城智能门业
当前离线
积分
13
4
主题
5
帖子
13
积分
新手上路
新手上路, 积分 13, 距离下一级还需 37 积分
新手上路, 积分 13, 距离下一级还需 37 积分
积分
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核心知识点解析
算法与数据结构
栈和队列
链表问题
二叉树问题
递归和动态规划
字符串问题
大数据和空间限制
位运算
数组和矩阵问题
其他题目
算法数据结构最优解析
看面试题可以是为了面试,也可以是对自己学到的东西的一种查漏补缺,更加深刻的去了解一些核心知识点有需要的小伙伴可【点击此处免费领取】
回复
使用道具
举报
返回列表
发帖
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
本版积分规则
发表回复
回帖后跳转到最后一页
快速回复
返回顶部
返回列表