金九银十来啦!学好这套面试题,大厂Java岗可放心冲!

发布于:2022-12-30 ⋅ 阅读:(523) ⋅ 点赞:(0)

面试官:“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 并发面试题

  1. Java 中守护线程和本地线程区别

  2. 线程与进程的区别

  3. 什么是多线程中的上下文切换

  4. 死锁与活锁的区别,死锁与饥饿的区别

  5. Java 中用到的线程调度算法是什么

  6. 什么是线程组,为什么在 Java 中不推荐使用

  7. 为什么使用 Executor 框架

  8. 在 Java 中 Executor 和 Executors 的区别

  9. 什么是原子操作,在 Java Concurrency API 中有哪些原子类(atomic classes)

  10. Java Concurrency API 中的 Lock 接口(Lock interface)是什么,对比同步它有什么优势

  11. 什么是 Executors 框架

  12. 什么是阻塞队列,阻塞队列的实现原理是什么,如何使用阻塞队列来实现生产者-消 费者模型

  13. 什么是 Callable 和 Future

  14. 什么是 FutureTask,使用 ExecutorService 启动任务

  15. 什么是并发容器的实现

  16. 多线程同步和互斥有几种实现方法,都是什么

  17. 什么是竞争条件?你怎样发现和解决竞争

  18. 如何使用 thread dump,如何分析 Thread dump

  19. 为什么我们调用 start()方法时会执行 run()方法,为什么我们不能直接调用 run()方法

  20. Java 中你怎样唤醒一个阻塞的线程

Java 并发解析

设计模式知识要点

  1. 工厂方法模式

  2. 抽象工厂模式

  3. 单例模式

  4. 建造者模式

  5. 原型模式

  6. 适配器模式

  7. 装饰器模式

  8. 代理模式

  9. 外观模式

  10. 桥接模式

  11. 组合模式

  12. 享元模式

  13. 策略模式

  14. 模板方法模式

  15. 观察者模式

  16. 迭代子模式

  17. 责任链模式

  18. 命令模式

  19. 备忘录模式

  20. 状态模式

  21. 访问者模式

  22. 中介者模式

  23. 解释器模式

23 种设计模式详解

Tomcat 面试高频

  1. Tomcat 的缺省端口是多少,怎么修改?

  2. tomcat 有哪几种 Connector 运行模式(优化)?

  3. Tomcat 有几种部署方式?

  4. tomcat 容器是如何创建 servlet 类实例?用到了什么原理?

  5. tomcat 如何优化?

  6. 内存调优

  7. 垃圾回收策略调优

  8. Tomcat 工作模式

Tomcat 知识点解析

Netty 面试高频

  1. BIO、NIO 和 AIO 的区别?

  2. NIO 的组成

  3. Netty 的特点?

  4. Netty 的线程模型?

  5. TCP 粘包/拆包的原因及解决方法?

  6. 了解哪几种序列化协议?

  7. 如何选择序列化协议?

  8. Netty 的零拷贝实现?

  9. Netty 的高性能表现在哪些方面?

  10. NIOEventLoopGroup 源码?

Netty 知识点详解

Mybatis 面试高频

  1. 什么是 MyBatis?

  2. 讲下 MyBatis 的缓存

  3. Mybatis 是如何进行分页的?分页插件的原理是什么?

  4. 简述 Mybatis 的插件运行原理,以及如何编写一个插件?

  5. Mybatis 动态 sql 是做什么的?都有哪些动态 sql?能简述一下动态 sql 的执行原理不?

  6. 为什么说 Mybatis 是半自动 ORM 映射工具?它与全自动的区别在哪里?

  7. Mybatis 是否支持延迟加载?如果支持,它的实现原理是什么?

  8. MyBatis 与 Hibernate 有哪些不同?

  9. MyBatis 的好处是什么?

  10. 简述 Mybatis 的 Xml 映射文件和 Mybatis 内部数据结构之间的映射关系?

  11. 什么是 MyBatis 的接口绑定,有什么好处?

  12. 接口绑定有几种实现方式,分别是怎么实现的?

  13. 什么情况下用注解绑定,什么情况下用 xml 绑定?

  14. MyBatis 实现一对一有几种方式?具体怎么操作的?

  15. Mybatis 能执行一对一、一对多的关联查询吗?都有哪些实现方式,以及它们之间的区

    别?

  16. MyBatis 里面的动态 Sql 是怎么设定的?用什么语法?

  17. Mybatis 是如何将 sql 执行结果封装为目标对象并返回的?都有哪些映射形式?

mybatis 核心知识解析

Zookeeper 面试高频

  1. ZooKeeper 提供了什么?

  2. ZAB 协议?

  3. ZAB 和 Paxos 算法的联系与区别?

  4. ACL 权限控制机制

  5. Zookeeper 下 Server 工作状态

  6. Zookeeper 的数据同步

  7. zookeeper 是如何保证事务的顺序一致性的?

  8. 分布式集群中为什么会有 Master?

  9. zk 节点宕机如何处理?

  10. zookeeper 负载均衡和 nginx 负载均衡区别

  11. Zookeeper 有哪几种几种部署模式?

  12. 集群最少要几台机器,集群规则是怎样的?

  13. 集群支持动态添加机器吗?

  14. Zookeeper 的 java 客户端都有哪些?

  15. Zookeeper 的典型应用场景

Zookeeper 核心知识解析

Redis 面试高频

  1. redis 事务

  2. Redis 集群模式

  3. redis 常见数据结构以及使用场景分析

  4. 缓存双写一致性

  5. Redis 常见异常及解决方案

  6. redis 持久化机制

  7. redis 内存淘汰机制

MySQL 面试高频

  1. 事务四大特性(ACID)原子性、一致性、隔离 性、持久性?

  2. 事务的并发?事务隔离级别,每个级别会引发什么问题,MySQL 默认是哪个级别?

  3. MySQL 常见的三种存储引擎(InnoDB、 MyISAM、MEMORY)的区别?

  4. MySQL 的 MyISAM 与 InnoDB 两种存储引擎在,事务、锁级别,各自的适用场景?

  5. 查询语句不同元素(where、jion、limit、group by、having 等等)执行先后顺序?

  6. 什么是临时表,临时表什么时候删除?

  7. MySQL B+Tree 索引和 Hash 索引的区别?

  8. sql 查询语句确定创建哪种类型的索引,如何优化查询

  9. 聚集索引和非聚集索引区别?

  10. 有哪些锁(乐观锁悲观锁),select 时怎么加排它锁?

  11. 非关系型数据库和关系型数据库区别,优势比较?

  12. 数据库三范式,根据某个场景设计数据表?

  13. 数据库的读写分离、主从复制,主从复制分析的 7 个问题?

  14. MySQL 慢查询怎么解决?

  15. MySQL 都有什么锁,死锁判定原理和具体场景,死锁怎么解决?

BAT 面试的高频 MySQL 数据库问题解析

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

  1. Spring Boot、Spring MVC 和 Spring 有什么区别?

  2. 使用 Spring 框架的好处是什么?

  3. Spring 由哪些模块组成?

  4. 什么是 Spring 的依赖注入?

  5. 什么是 Spring 配置文件?

  6. 什么是 Spring IOC 容器?

  7. spring 中有多少种 IOC 容器?

  8. Spring IoC 的实现机制是什么

  9. spring 提供了哪些配置方式?

  10. 什么是 spring bean?

  11. spring bean 容器的生命周期是什么样的?

  12. spring DAO 有什么用?

  13. spring JDBC API 中存在哪些类?

  14. 使用 Spring 访问 Hibernate 的方法有哪些?

  15. 列举 spring 支持的事务管理类型

  16. spring 支持哪些 ORM 框架

  17. 什么是 AOP?

  18. AOP 有哪些实现方式?

  19. Spring AOP and AspectJ AOP 有什么区别?

  20. 如何理解 Spring 中的代理?

  21. Spring MVC 框架有什么用?

  22. 什么是 Spring Cloud?

  23. 使用 Spring Cloud 有什么优势?

  24. 服务注册和发现是什么意思?Spring Cloud 如何实现?

  25. 负载平衡的意义什么?

  26. 什么是 Hystrix?它如何实现容错?

Spring 全家桶全解

Linux 面试高频精选

  1. Linux 中主要有哪几种内核锁?

  2. Linux 中的用户模式和内核模式是什么含意?

  3. 怎样申请大块内核内存?

  4. 怎么查看当前进程?怎么执行退出?怎么查看当前路径?

  5. Ls 命令执行什么功能? 可以带哪些参数,有什么区别?

  6. 目录创建用什么命令?创建文件用什么命令?复制文件用什么命令?

  7. Linux 下命令有哪几种可使用的通配符?分别代表什么含义?

  8. Linux 中进程有哪几种状态?在 ps 显示出来的信息中,分别用什么符号表示的?

Linux 核心知识点解析

算法与数据结构

  • 栈和队列

  • 链表问题

  • 二叉树问题

  • 递归和动态规划

  • 字符串问题

  • 大数据和空间限制

  • 位运算

  • 数组和矩阵问题

  • 其他题目

算法数据结构最优解析

看面试题可以是为了面试,也可以是对自己学到的东西的一种查漏补缺,更加深刻的去了解一些核心知识点。

有需要的小伙伴可厚台私信我哦!

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到