
面试
文章平均质量分 91
码炫课堂-码哥
一名有10余年经验的互联网老兵,历经从传统软件公司到大型互联网公司的洗礼,早年在中兴通讯等大型通信公司担任项目leader,后随着互联网的崛起,先后在前美团支付等大型互联网公司担任架构师。对互联网架构底层技术有相当的研究和独特的见解,在多个领域有着丰富的实战经验。
展开
-
JVM 面试题集
Java 虚拟机是 Java 程序运行环境的一部分,负责执行 Java 字节码,它是 Java 实现平台无关性的基石。Java 程序首先被编译成一种中间形式,即字节码(.class 文件),这些字节码不针对任何特定的硬件或操作系统。当运行 Java 程序时,JVM 在实际的硬件平台上解释执行这些字节码,实现了“一次编写,到处运行”(Write Once, Run Anywhere, WORA)的理念。原创 2024-05-18 09:43:55 · 908 阅读 · 0 评论 -
Netty 面试题集
什么是TCP粘包/拆包问题?TCP是面向流的协议:TCP协议发送的数据是基于字节流的,没有固定的边界。粘包:当发送方快速连续地发送多个数据包时,TCP可能会将它们合并为一个大的数据包进行发送。这意味着,接收方可能一次性接收到多个数据包的合并数据。拆包:相对地,TCP也可能将一个较大的数据包拆分成多个小的数据包发送。接收方需要多次读取才能获取完整的数据。这两个现象可能导致数据的解析变得复杂,因为接收方可能无法直接确定一个数据包的开始和结束。解决方法固定长度:设定每个数据包的固定长度。原创 2024-05-18 09:41:51 · 1034 阅读 · 0 评论 -
Java NIO 面试题集
阻塞I/O:阻塞I/O模型是最常见的一种模型。当一个线程执行阻塞I/O操作时,它会一直等待,直到数据准备好或操作完成。这种模型非常简单,但会导致线程被阻塞,无法处理其他任务,从而降低了系统的并发性和响应性。非阻塞I/O:非阻塞I/O模型允许一个线程执行非阻塞的I/O操作,即使操作没有完成也会立即返回。通常需要使用循环轮询或者选择器来检查操作是否完成,从而使线程可以同时处理其他任务。这种模型提高了系统的响应性,但需要更多的编程复杂性。原创 2024-05-18 09:33:33 · 712 阅读 · 0 评论 -
MybBatis 面试题集
MyBatis是一个半ORM(对象关系映射)框架,它内部封装了JDBC,开发时只需要关注SQL语句本身,不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。程序员直接编写原生态SQL,可以严格控制SQL执行性能,灵活度高。MyBatis 提供了与数据库交互的API,让程序员可以通过简单的XML或注解来配置和映射原生信息,将接口和Java的实体类映射到数据库中的记录,免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。原创 2024-05-17 18:57:38 · 825 阅读 · 0 评论 -
Redis 面试题集
Redis 是一个开源的基于内存的数据库,它被广泛用于缓存、消息队列、会话存储以及数据存储等各种用途。Redis以键值对(key-value)的形式存储数据,并支持多种数据结构,如字符串、哈希表、列表、集合和有序集合等。快速:Redis能读的速度是110000次/s,写的速度是81000次/s。支持丰富数据类型:Redis支持二进制安全的字符串、哈希表、列表、集合、有序集合等数据结构。原子性:Redis的所有操作都是原子性的,而且Redis还能对多个操作打包成原子性的,通过这个功能可以实现批量插入。原创 2024-05-17 18:55:36 · 1003 阅读 · 0 评论 -
Spring MVC 面试题集
Spring MVC是Spring框架的一个模块,用于构建基于Java的Web应用程序的MVC(Model-View-Controller)架构。它提供了一种结构化的方式来组织和管理Web应用程序,将应用程序分为模型(Model)、视图(View)和控制器(Controller)三个主要组件。模型(Model):模型代表应用程序的业务逻辑和数据。在Spring MVC中,模型通常由Java对象组成,这些对象包含应用程序的核心数据和业务逻辑。模型通常用于存储和处理数据,以便在视图和控制器之间进行交互。原创 2024-05-17 18:52:41 · 718 阅读 · 0 评论 -
Spring 面试题集
IOC 是一种设计思想。**IOC 容器是 Spring 用来实现 IOC 的载体, IOC 容器在某种程度上就是个Map(key,value),key是 name 属性,value 是对应的对象。**容器创建 Bean 对象, 使用依赖注入来管理对象之间的相互依赖关系,配置它们并管理它们的完整生命周期,很大程度上简化应用的开发,降低了耦合度。容器通过读取提供的配置,比如 XML,注解或 Java 代码来接收对象信息进行实例化,配置和组装。原创 2024-05-17 08:38:19 · 816 阅读 · 0 评论 -
MySQL 面试题集
内联接(Inner Join)内联接是最常用的连接类型,它返回两个表中符合连接条件的行。只返回两个表中匹配的行,不包括任何表中没有匹配的行。如果一个表中的某行在另一个表中没有匹配的行,那么这些行将被忽略。左外联接(Left Outer Join)左外联接返回左表中的所有行,以及右表中与左表匹配的行。如果右表中没有与左表匹配的行,返回的结果集中将包括右表的列,但数据将为空。右外联接(Right Outer Join)右外联接与左外联接相反,它返回右表中的所有行,以及左表中与右表匹配的行。原创 2024-05-17 08:36:19 · 856 阅读 · 0 评论 -
Java 并发面试题集
自旋锁(Spin Lock)是一种基于忙等待的锁,它不会让线程阻塞,而是会让线程在一定的时间内反复尝试获取锁。自旋锁的主要思想是,如果锁已经被其他线程占用,那么当前线程将自旋等待,不断尝试获取锁,直到成功为止。自旋锁通常适用于锁被占用的时间非常短暂的情况,以减少线程切换和上下文切换的开销。低延迟**:** 自旋锁不会让线程阻塞,因此不需要进行线程的挂起和恢复操作,避免了线程切换的开销。对于锁的占用时间很短的情况,自旋锁的性能往往比较好。原创 2024-05-17 08:34:27 · 1109 阅读 · 0 评论 -
Java 多线程面试题集
临界区死锁(Deadlock)是指两个或多个进程或线程在竞争资源时,因彼此之间的互斥和等待而陷入无限等待的状态,导致它们都无法继续执行下去。死锁是一种程序设计或系统管理的错误,它会导致应用程序无响应或进程挂起,需要手动干预才能解决。互斥条件至少有一个资源是独占的,即一次只能被一个进程或线程占用。如果多个进程或线程同时需要访问这个资源,就会出现互斥条件。请求与保持条件进程或线程在持有至少一个资源的同时,又请求其他资源,但无法立即获得所需资源。这就会导致持有资源的进程或线程等待其他资源的释放,形成循环等待。原创 2024-05-16 15:45:49 · 806 阅读 · 0 评论 -
Java 集合面试题
fail-fast 机制是 Java 集合(Collection)中的一种错误机制。它的主要思想是,如果在迭代或操作集合的过程中检测到了不一致或并发冲突等问题,立即抛出异常或报错,而不是继续执行可能会导致更严重问题的操作。例如:当某一个线程 A 通过 iterator 去遍历某集合的过程中,若该集合的内容被其他线程所改变了,那么线程 A 访问集合时,就会抛出 ConcurrentModificationException 异常,产生 fail-fast 事件。原创 2024-05-16 15:44:08 · 612 阅读 · 0 评论 -
Java 基础面试题
字符串常量池(String Pool),也称为字符串池或字符串缓存,是一种存储字符串对象的特殊区域或数据结构,通常位于Java堆内存中。字符串常量池的主要目的是节省内存和提高性能,它确保相同的字符串文字(文字常量)在内存中只有一个实例,即使它们被多次引用。在Java中,字符串是不可变的,这意味着一旦创建了一个字符串,它的内容就不能被修改。由于字符串常量池的存在,当你创建一个新的字符串时,JVM 首先检查字符串常量池,如果池中已经存在相同内容的字符串,那么就不会创建新的对象,而是返回已存在的对象的引用。原创 2024-05-16 15:42:24 · 787 阅读 · 0 评论 -
通用Mapper怎么开接口扫描
通用Mapper可以指定查询的列,但只能通过Example对象,但其他诸如selectByPrimaryKey()方法是全列查询,因为mapper对象无法直接设置selectProperties()。默认提供了几个接口,可以实现批量查询(IN)、批量插入(全字段,如果不设置值则插入null)、批量物理删除,没提供批量更新。建议使用带Selective的方法,因为它不是全量操作,可以避免修改其他无关字段,不影响数据库默认值。联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬。原创 2024-01-04 08:17:02 · 526 阅读 · 0 评论 -
Java的并发修改异常
/ 普通for// 增强for,底层是迭代器i++) {对上面的代码进行反编译:你会发现增强for的底层就是Iterator,而Iterator的next()方法会检查并发修改异常,简而言之就是集合的“版本号”是否在遍历过程中发生了改变:那么什么时候“版本号”modCount会改变呢?增删都会改变modCount的值(注意,删除也是modCount++,版本号只能递增):了解了并发修改异常的原因后,我们再来看看如何避免它。原创 2024-01-04 08:14:33 · 1326 阅读 · 0 评论 -
面试官经常出的面试题:如何避免缓存脏读
首先搞懂这个问题是什么意思。由于设置了缓存失效时间(比如1小时),那么在这一小时内,如果有人更新了DB的数据,只要缓存不失效,Redis就不会主动读取DB并更新数据,那么用户看到的其实都是旧的数据,与DB不一致,此谓缓存脏读。原创 2023-11-15 09:28:12 · 187 阅读 · 0 评论