高频面试题
文章平均质量分 58
分析java面试中的高频面试题目,包含Java基础、Java开源源码、Redis、MySql、高频算法题目。详解其原理、底层机制、实际场景。
闲来也无事
欢迎留言,一起交流!
展开
-
高频面试Redis之数据结构
1、简介Redis的数据结构有五种:string、hash、list、set、zset2、内部编码及场景stringint:8个字节的长整型;embstr:小于等于44个字节的字符串;raw:大于44个字节的字符串优点:常数复杂度获取字符串长度、杜绝缓冲区溢出、减少字符串修改时内存分配次数场景:计数器 incr、decr;分布式锁 setnx expire;json 存储对象hashziplist:元素个数小于512、长度小于64,ziplist即节约内存又保证读写效率hasht原创 2021-09-02 14:25:15 · 2349 阅读 · 0 评论 -
高频面试Java之线程池
简介本专栏结合笔者面试的一些高频率题目,详细分析其原理、场景、底层机制、以及实际场景等。为了节约篇幅,我们注重分析一些原理、较为底层的东西,对于一些概念性的知识,不多赘述。也希望通过这个专栏,让大家在面试的过程中能够灵活应对。早日收到满意的offer关于线程池的一些概念,如线程池是什么、为什么要使用线程池,不多赘述。1、为什么不推荐使用Executors线程池的创建方式有很多种,这也是面试最常问的问题,归根结底,面试官还是为了考察线程池的参数含义。不推荐使用 Executors的原因是默认参数不友好原创 2021-09-01 19:04:53 · 2555 阅读 · 1 评论 -
高频面试MySQL之索引、查询优化
1、简介索引和查询优化是面试比不可少的环节,下面针对B+Tree做一些常见的面试点的分析,从建表、索引、查询三个方面分析。2、数据库和表设计从大的设计原则上,可以考虑分库分表,读写分离,使单表数据不会太大,同时流量分散到不同数据库实例上,减轻数据库压力字段数据类型选择:1)选择占用空间较小的数据类型,使用定长代替变长,如使用unsigned tinyint、smallint代替int;2)对于布尔、枚举类型的字段,使用char(1) 来代替;3)分离text、blob等类型的字段;4)避免单表字段原创 2021-09-03 10:16:43 · 2282 阅读 · 0 评论 -
高频面试Redis之哨兵
简介Sentinel 机制,用于当主节点出现故障时,自动完成故障发现、故障转移等操作,保证 redis 的高可用性。2、 监控与故障发现Sentinel 通过 pub/sub 机制、以及定时任务实现:监控主从拓扑信息:每隔10秒,Sentinel 向 master、slave发送 INFO 命令获取最新的拓扑结构Sentinel 节点信息交换:每隔 2 秒,Sentinel 向 redis 数据节点的 sentinel:hello 频道上,发送自身的信息,以及对主节点的判断信息。这样,Sent原创 2021-09-03 10:09:12 · 2357 阅读 · 0 评论 -
高频面试Redis之持久化
1、简介Redis的持久化方式有两种,AOF、RDB2、RDB 持久化RDB 触发方式有两种:save、bgsave,redis主进程接收到命令后fork子进程负责持久化redis主进程判断当前是否存在正在执行的子进程,如RDB、AOF子进程,若存在则直接返回;若不存在fork子进程,这时候主进程会被阻塞主进程fork完成后,返回Background saving started,并恢复主进程子进程创建RDB文件,根据父进程内存生成临时快照文件,完成后对原有文件进行原子替换子进程发送信号通知原创 2021-09-02 14:38:59 · 2333 阅读 · 0 评论 -
高频面试Redis之复制
1、简介适用于 Master/Slave 模式,提高redis的可用性,提高对并发读写的支持。建立:可通过配置文件、命令行、启动命令参数实现,根式均为slaveof {masterHost} {masterPort};断开:从节点执行 slaveof no one。有全量复制和增量复制两种场景。2、全量复制最常见的场景,slave第一次连接到master,则触发全量复制master 节点收到 slave节点的 psync 命令后执行 bgsave 命令,在后台生成RDB文件,同时将从现在开始执行的原创 2021-09-02 14:44:57 · 2244 阅读 · 0 评论 -
高频面试Redis之分布式锁
1、简介Redis实现分布式锁的方式有很多,可借助setnx、lua等方式实现。但是现实往往要考虑更多的问题。如超时时间、可重入、加锁形式、锁的安全释放、锁的自动延期等等。所以我们重点分析Redssion的分布式锁实现。2、Redssion 加锁加锁的过程如下,代码均有注释。解锁过程与之相反,不一一赘述。// 加锁过程:// 执行exists命令,判断对应的lockName是否存在,如果key不存在"if (redis.call('exists', keyS[1]) == 0) then " +原创 2021-09-02 14:35:34 · 2267 阅读 · 0 评论 -
高频面试Redis之签到、限流
1、简介面试环节,面试官往往会结合一些实际的场景,下面通过分析redis的签到、限流两个最常见的场景。2、签到位图,本质string,可理解为byte数组,利用 0、1 标识是否签到。节约内存空间(46字节365天)// 按月签到 setbit key offset(偏移量,0:1号,1:2号) value(1:签到;0:未签到)setbit u:sign:1000:202101 0 1 // 1月1号签到 setbit u:sign:1000:202101 1 1 // 1月2号签到原创 2021-09-02 14:29:11 · 2349 阅读 · 0 评论 -
高频面试Spring之Aop
简介切面编程,提取与业务无关的操作,实现一些方法增强、日志、事务、权限等功能。原理:JDK动态代理或者CGLib代理实现解析aspectj-autoproxy,注册AnnotationAwareAspectJAutoProxyCreater,该类间接实现了beanPostProcessor接口,实例化bean的时候,会调用applyBeanPostProcessorsBeforeInitialization、applyBeanPostProcessorsAfterInitialization两个方法原创 2021-09-02 14:23:15 · 2267 阅读 · 0 评论 -
高频面试之Ribbon
1、简介实现负载均衡2、负载均衡策略负载均衡的权重策略较为特殊,可重点查看:RandomRule,随机策略,通过 ThreadLocalRandom.current().nextInt(serverCount) 实现,保证随机性和线程隔离性RoundRobinRule,轮询策略,通过 int next = (current + 1) % modulo(所有服务器数) 实现BestAvailableRule,最小并发请求策略,通过 getActiveRequestsCount() 函数选择一个最原创 2021-09-02 14:21:55 · 2932 阅读 · 0 评论 -
高频面试之Eureka
1、简介注册中心,包含了服务发现、治理等功能。@EnableEurekaServer,作为注册中心;@EnableEurekaClient,作为服务的提供者、或消费者。下面分析下服务发现和治理。2、注册服务当EurekaClient启动后,首先会执行服务注册。EurekaClient将服务信息封装成InstanceInfo对象,通过EurekaHttpClient调用register方法发送POST请求执行服务注册EurekaServer提供了基于Jersey的Rest风格的接口,在Applic原创 2021-09-02 14:19:51 · 5353 阅读 · 0 评论 -
高频面试Spring之IOC
1、简介IOC的目的:控制反转和依赖注入2、IOC过程简析(针对单例Bean)该问题考察是否读过Spring IOC 源码,以下列举部分流程,应对面试是没问题的:解析配置文件、或注解元数据,将bean的定义转换为BeanDefinition调用getBean()方法获取bean。首先查找缓存,若存在,返回;否则,做创建bean的准备工作,合并BeanDefinition、实例化依赖bean调用doCreateBean方法,创建bean的实例通过createBeanInstance方法并根据原创 2021-09-02 10:33:35 · 2414 阅读 · 0 评论 -
高频面试SpringBoot之自动装配
1、简述 SpringBoot最常见的问题,会让你列举SpringBoot的优点,以及与Spring的区别。SpringBoot是面试最常问题目之一。SpringBoot是对Spring的扩展和优化,以***自动装配***为核心,简化了配置文件、Maven管理、可快速与三方插件集成,并且jar包可独立运行2、核心注解与常见注解核心注解:@SpringBootApplication 该注解为组合注解,包含了:@SpringBootConfiguration 代替配置文件@EnableAutoCo原创 2021-09-02 10:23:27 · 2424 阅读 · 0 评论 -
高频面试算法之求众数
1、简介求众数在面试考察算法环节,非常常见,解法较多,而且还有扩展,笔者在京东科技的面试中曾被考察到该题目。题目:给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。2、解法一分析该题目,最常见的思路即使用hash表,求得每个元素的个数,再找到其中最大元素个数即可。时间复杂度:O(n);空间复杂度:O(n)。因为空间复杂度较高,所以一般情况下面试官还会继续追问可否优化空间复杂度。2、解法原创 2021-09-01 19:27:47 · 2630 阅读 · 0 评论