北京小厂一面30问

小厂一面30问

  1. Redis除了存储数据外还能实现什么功能?

除了存储数据外,Redis还可以实现数据的缓存、分布式锁、消息队列、计数器等功能。Redis还支持事务、Lua脚本、发布/订阅等高级功能。

  1. HashMap的底层原理是什么?

HashMap是通过数组和链表(或红黑树)实现的。当我们向HashMap中put一个键值对时,首先会根据键的hashcode值计算出它在数组中的索引位置,然后将值存储在对应的链表(或红黑树)中。当产生哈希冲突时,会在链表(或红黑树)中继续寻找对应的值。

  1. HashMap的put是怎么存储数据的,哈希冲突怎么解决的?

当我们向HashMap中put一个键值对时,首先会根据键的hashcode值计算出它在数组中的索引位置,然后将值存储在对应的链表(或红黑树)中。当产生哈希冲突时,会在链表(或红黑树)中继续寻找对应的值。哈希冲突解决的方式是,当链表中元素个数大于等于8时,将链表转化为红黑树,否则继续在链表中寻找。

  1. HashMap不是线程安全的,那有什么是线程安全的?

ConcurrentHashMap是线程安全的HashMap实现。

  1. ConcurrentHashMap是怎么实现的线程安全?

ConcurrentHashMap通过分段锁的方式实现线程安全,将整个HashMap分为多个Segment,每个Segment维护一个HashTable,每个Segment只对自己的HashTable进行操作,可以有效地提高并发性能。

  1. HashMap初始容量大小是多少?

HashMap的初始容量大小是16。

  1. HashMap怎么实现的扩容?

当HashMap中的元素数量达到容量的75%时,就会触发扩容操作,即将容量扩大为原来的两倍,并重新构建哈希表。

  1. HashMap为什么每次扩容为2的n次方?

HashMap每次扩容为2的n次方是为了让元素在哈希表中分布更加均匀。

  1. Java8有什么新特性?

Java8的新特性包括Lambda表达式、函数式接口、Stream API、默认方法、新的Date/Time API等。

  1. Java中有哪些语法糖?

Java中的语法糖包括自动装箱/拆箱、泛型、foreach循环、变长参数、枚举、注解等。

  1. foreach和for有什么区别?

foreach循环是用来遍历集合或数组的简化语法,它不需要我们定义一个计数器或索引变量,可以直接遍历每一个元素。而for循环则需要我们手动定义计数器或索引变量,并通过循环来遍历集合或数组。

  1. foreach底层是怎么实现的?

foreach底层是通过迭代器实现的,它会自动调用集合或数组的iterator()方法获取一个迭代器,然后使用迭代器进行遍历。

  1. MySQL的事务有哪些?

MySQL中的事务包括四个基本操作:ACID,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。

  1. MySQL事务中隔离性是怎么实现的?

MySQL中的隔离性是通过锁和MVCC(多版本并发控制)实现的,不同程度的隔离级别使用不同的实现方式。锁实现了串行化执行,而MVCC实现了读写分离,多版本并发控制,可以提高并发性能。

  1. 能讲讲MVCC具体怎么实现事务的隔离性的?

MVCC是MySQL中实现事务隔离性的一种方式,它通过在每行记录中保存多个版本来实现。当进行读操作时,会根据事务启动时的时间戳和版本号来选择符合要求的记录版本,从而实现读操作不会被写操作影响的隔离性。当进行写操作时,会将新版本的记录插入到对应的行中,并将旧版本的记录标记为删除,从而实现更新操作不会影响到其他事务读取旧版本数据的隔离性。

  1. ReadView具体是保存了什么数据?

ReadView是MySQL中实现MVCC的一种机制,它保存了当前事务开始执行时的系统版本号和所有活跃事务的ID列表。在事务执行过程中,ReadView会根据这些信息来判断当前事务是否可见其他事务的修改。

  1. InnoDB存储引擎有什么好处?

    InnoDB存储引擎具有以下优点:

    • 支持事务和行级锁,可以实现高并发和数据一致性。
    • 支持MVCC,可以提高读写性能。
    • 支持外键约束,可以保证数据的完整性。
    • 支持在线热备份和恢复,可以提高数据可用性。
  2. 如果要查询前1-5条数据,在B+树中是怎么进行查找的?

在B+树中,数据是按照键值大小有序地存储在叶子节点上。如果要查询前1-5条数据,可以先定位到最左边的叶子节点,然后从左往右依次扫描叶子节点,取出前5个数据即可。

  1. MySQL中除了InnoDB以外还有什么存储引擎?

MySQL中还有MyISAM、Memory、CSV等多个存储引擎。

  1. MyISAM与InnoDB的区别,有什么优点?

MyISAM和InnoDB在存储方式、锁机制、事务支持等方面有很大的区别。MyISAM适合于读多写少的场景,不支持事务和行级锁,但是具有快速读取和空间占用小的优点;InnoDB适合于高并发、事务严格要求一致性的场景,支持事务和行级锁,但是具有写入慢、空间占用大的缺点。

  1. MySQL中有什么锁?

MySQL中有共享锁(S锁)、排他锁(X锁)、意向共享锁(IS锁)、意向排他锁(IX锁)等多种锁。

  1. 间隙锁是锁的什么数据?

间隙锁是针对B+树中的间隙(即不存在的数据)进行的锁定,它是InnoDB实现MVCC的一种方式,可以避免幻读的问题。

26、在查看某次查询索引时一般看的什么

在查看某次查询索引时一般要看索引是否被正确地使用,可以通过explain命令查看查询计划、索引类型、扫描行数、是否使用了索引等信息。

27、说一下对分布式锁的理解

分布式锁是在分布式系统中实现锁管理的一种方式,它可以保证在分布式系统中的多个节点同时对共享资源进行操作时,只有一个节点能够获得锁,并且在操作完成之后释放锁,从而保证数据的一致性和正确性。

28、说一下什么是线程池

线程池是一种用于管理和复用线程的机制,它可以在应用程序中预先创建一定数量的线程,并将它们保存在一个线程池中,以便根据需要动态地分配线程来处理任务。

29、线程池怎么创建

创建线程池可以使用Java中的Executors工具类提供的静态方法来创建,例如newFixedThreadPool、newCachedThreadPool等方法。

30、创建线程池时主要设置什么属性

创建线程池时主要要设置线程池的核心线程数、最大线程数、线程空闲时间、任务队列等属性。

31、线程池一般可以用在什么情况下

线程池一般可以用在需要频繁创建和销毁线程的场景,例如高并发的网络服务器、大规模数据处理等。

32、springcloud中 你熟悉什么

在Spring Cloud中,我比较熟悉的是服务注册与发现组件Eureka、配置中心组件Config、负载均衡组件Ribbon、断路器组件Hystrix等。

33、nacos是什么,主要实现什么功能

Nacos是阿里巴巴开源的一个服务注册中心和配置中心,主要实现了服务的注册、发现、配置管理等功能。

34、SpringBoot中 请求进来时mapping是怎么处理的,底层是怎么实现的(如Getmapping是怎么处理请求的)

在Spring Boot中,请求进来时mapping是通过Spring MVC框架来处理的。底层实现是通过反射机制来扫描所有的Controller类和方法,并将它们映射到对应的URL上,当请求进来时,会根据请求的URL和HTTP方法来匹配对应的Controller方法,然后执行该方法,并将返回结果封装成HTTP响应返回给客户端。Getmapping是通过RequestMappingHandlerMapping类的getMappingForMethod方法来处理的,该方法会根据方法上的GetMapping注解和请求的URL来匹配对应的方法。

相关推荐
Lee川8 小时前
优雅进化的JavaScript:从ES6+新特性看现代前端开发范式
javascript·面试
Lee川11 小时前
从异步迷雾到优雅流程:JavaScript异步编程与内存管理的现代化之旅
javascript·面试
晴殇i13 小时前
揭秘JavaScript中那些“不冒泡”的DOM事件
前端·javascript·面试
绝无仅有14 小时前
Redis过期删除与内存淘汰策略详解
后端·面试·架构
绝无仅有14 小时前
Redis大Key问题排查与解决方案全解析
后端·面试·架构
AAA梅狸猫15 小时前
Looper.loop() 循环机制
面试
AAA梅狸猫15 小时前
Handler基本概念
面试
Wect15 小时前
浏览器缓存机制
前端·面试·浏览器
掘金安东尼16 小时前
Fun with TypeScript Generics:玩转 TS 泛型
前端·javascript·面试
掘金安东尼16 小时前
Next.js 企业级落地
前端·javascript·面试