
每天一道面试题
文章平均质量分 75
分享常见面试题,助你早日拿到Offer
程序员面试那点事儿
互联网大厂校招、社招面试官,多年互联网大厂工作经验,分享校招、社招面试题、职场相关内容,互相交流经验
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
学习导航
JVM Full GC分析原创 2021-01-06 21:37:59 · 163 阅读 · 0 评论 -
线上CPU爆高,如何定位问题
top命令查看当前系统负载信息top -H -p pid查看指定进程中每个线程的资源占用情况jstack pid 查看指定进程中线程的堆栈信息原创 2020-12-28 09:03:20 · 592 阅读 · 0 评论 -
JVM Full GC分析
JVM的GC关于对象Age问题以及JVM的内存分配策略Eden中比较频繁的GC,每次GC都会导致内存分布的变化。对象的计数器:对象的Age是标记的关键。年青代的GC又叫minor GC。对象GC年龄阈值默认是15。每次GC后,还存在,对象Age加1。实际运行的时候,Survive区域中,对象不一定要达到阀值就进入Old Generation。有这样一种情况,就是Survive中有这样一组对象,其Age是相同的,其总大小等于或超过Survive空间的一半,就会集体晋升为Old Generation对象。是原创 2020-12-23 19:53:21 · 1093 阅读 · 0 评论 -
同步与异步、阻塞与非阻塞
理解同步与异步,阻塞与非阻塞的核心就是理解 “消息通知机制”和“等待消息通知时的状态”这两个概念。同步与异步指的是消息通知机制。A任务调用B任务,A任务依赖B任务完成通知消息而完成最终才完成就是同步。A任务调用B任务,A任务只是通知B任务去开始,A任务不依赖于B任务的完成,就是异步同步需要等待被调用者消息返回异步调用者可以通过状态、通知、异步回调来通知调用者(通过状态需要轮询,所以性能较低,通知和异步回调本质一样,效率很高)阻塞与非阻塞这两个状态是等待消息回来的时候的状态相关A调用B,A一原创 2020-12-16 22:05:50 · 114 阅读 · 0 评论 -
BIO、BIO多线程和NIO
文章目录BIO服务端客户端NIO服务端客户端BIO服务端/* * Copyright (c) 2019 wangkai * All rights reserved. * */package QQ.v1;import java.io.IOException;import java.net.InetSocketAddress;import java.net.ServerSoc...原创 2020-02-03 09:25:54 · 325 阅读 · 0 评论 -
linux硬链接和软链接
什么是硬连接硬连接又称实际链接,在linux文件系统中,所有的文件都会有一个编号,称为inode。可以将它理解为一个“指向原始文件inode的指针”,系统不为它分配独立的inode和文件。所以,硬链接文件与原始文件其实是同一个文件,只是名字不同。我们每添加一个硬链接,该文件的inode连接数就会增加1;而且只有当该文件的inode连接数为0时,才算彻底将它删除。换言之,由于硬链接实际上是指向原文件inode的指针,因此即便原始文件被删除,依然可以通过硬链接文件来访问。需要注意的是,由于技术的局限性,我们不原创 2020-11-10 22:57:42 · 305 阅读 · 0 评论 -
MySQL单表访问方式及索引使用相关问题
访问方法使用全表扫描进行查询使用索引进行查询等值查询范围查询扫描整个索引访问方法类型const通过主键或者唯一二级索引列与常数的等值比较来定位一条记录非常快,是常数级别的,所以访问方法定义为:constref通过普通的二级索引列与常数进行等值比较的访问方法为ref...原创 2020-11-10 22:56:41 · 175 阅读 · 0 评论 -
01 动态规划之背包问题
有????个物品,每个物品有一个体积????,价值????,每个物品只能选一次,问在所选体积不超过????的情况下的最大价值?确定状态最后一步最后一步是选第N个物品,看背包容量是否够,放入或者不放入子问题放入的话 问题转化为 前N-1个物品放入体积不超过m-Wn的最大价值不放入的话 问题为 前N-1个物品放入体积不超过m的最大价值所以确定状态为f(i)(j): 前i个物品的体积不超过j的最大价值。转移方程f(i,j) = Math.Max(f(i-1,j-v)+w,f(i-1,j));原创 2020-11-10 09:00:59 · 106 阅读 · 0 评论 -
ElasticSearch索引过程
文章目录概念图协调节点流程客户端发送索引请求参数检查数据预处理自动创建索引请求预处理检测集群状态路由算法及构建shard请求转发请求并等待响应主分片节点流程主分片索引文档副本分片索引文档请求返回概念图协调节点流程客户端发送索引请求客户端向ES节点发送索引请求参数检查对请求中的参数进行检查,检查参数是否合法,不合法的参数直接返回失败给客户端。数据预处理如果请求指定了pipeline参数,则对数据进行预处理,数据预处理的节点为Ingest Node,如果接受请求的节点不具有数据处理能力,则转发原创 2020-11-10 08:07:24 · 1543 阅读 · 0 评论 -
ElasticSearch常见优化方案
设计阶段调优根据业务增量需求,采取基于日期模板创建索引,通过 roll over API 滚动索引使用别名进行索引管理每天凌晨定时对索引做 force_merge 段合并操作,以释放空间采取冷热分离机制,热数据存储到 SSD,提高检索效率,冷数据定期进行 shrink操作,以缩减存储采取 curator 进行索引的生命周期管理仅针对需要分词的字段,合理的设置分词器Mapping 阶段充分结合各个字段的属性,是否需要检索、是否需要存储等写入调优写入前副本数设置为 0写入前关闭 ref原创 2020-11-10 08:07:12 · 300 阅读 · 0 评论 -
ElasticSearch缩小索引之Shrink API
文章目录缩小索引概述准备缩小索引缩小索引Shrink 工作过程创建新索引创建硬链接目的索引 recovery在 Elasticsearch 中,主节点管理分片有很大工作量,降低集群整体分片数量可以降低 recovery 的时间,减小集群状态的大小。很多时候,冷索引不会再有数据写入,可以使用 shrink API 缩小索引分配数。缩小完成后,源索引可删除。缩小索引API可以允许你将存在的索引转变为一个只包含主要分片的新索引。目标索引中请求的主要分片数量必须要为原索引中的因子(即原分片数量是新分片倍数原创 2020-11-10 08:06:58 · 598 阅读 · 0 评论 -
Elasticsearch的分布式查询过程
客户端发送一个 search 请求到 Node 3 , Node 3 会创建一个大小为 from + size 的空优先队列。Node 3 将查询请求转发到索引的每个主分片或副本分片中。每个分片在本地执行查询并添加结果到大小为 from + size 的本地有序优先队列中。每个分片返回各自优先队列中所有文档的 ID 和排序值给协调节点,也就是 Node 3 ,它合并这些值到自己的优先队列中来产生一个全局排序后的结果列表。https://blog.youkuaiyun.com/u010454030/article.原创 2020-11-10 08:06:31 · 490 阅读 · 0 评论 -
Kafka吞吐量高的原因
文章目录顺序读写Page Cache零拷贝分区+索引批量发送数据压缩顺序读写kafka的消息是是不断追加到本地磁盘文件末尾的,而不是随机的写入,这个特性使kafka可以充分利用磁盘的顺序读写性能。磁盘的顺序读写性能很高,一般而言要高出磁盘随机读写三个数量级,一些情况下磁盘顺序读写性能甚至要高于内存随机读写。顺序读写不需要硬盘磁头的寻道时间,只需很少的扇区旋转时间,所以速度远快于随机读写Page Cache为了优化读写性能,Kafka利用了操作系统本身的Page Cache,就是利用操作系统自身的内存原创 2020-11-09 21:24:34 · 348 阅读 · 0 评论 -
可重复读隔离级别下的加锁分析
使用主键进行等值查询值存在 单个记录锁值不存在 gap锁使用主键进行范围查询SELECT * FROM hero WHERE number >= 8 LOCK IN SHARE MODE;为值为8的聚簇索引加记录锁为大于8的聚簇所以记录加next-key锁SELECT * FROM hero WHERE number <= 8 LOCK IN SHARE MODE;对小于15的值都会加上next-key锁,并且不会释放15的锁使用唯一二级索引进行等值查询值原创 2020-10-30 11:27:25 · 842 阅读 · 0 评论 -
MySQL幻读问题
首先建立一张表,便于分析。CREATE TABLE `t` ( `id` int(11) NOT NULL, `c` int(11) DEFAULT NULL, `d` int(11) DEFAULT NULL, PRIMARY KEY (`id`), KEY `c` (`c`)) ENGINE=InnoDB;insert into t values(0,0,0),(5,5,5),(10,10,10),(15,15,15),(20,20,20),(25,25,25);执行以下S原创 2020-10-30 09:43:37 · 127 阅读 · 0 评论 -
面试常见问题及应答技巧
分析方式STAR模型常见问题请做一下自我介绍面试官心理通过自我介绍,想在短时间内认识求职者,对求职者成长经历、表达能力、技术背景等方面有一个了解。注意点不要使用官话,比如“统筹能力强”、“工作积极上进”等“大而空”的描述,从以往有怎样的项目经验,在该项目中发挥什么样的作用等具体细节进行阐述;避免过分“炫技”,用陈述事实的口吻真诚的进行展现。应答技巧面试前,提前做好准备,准备一个5分钟的自我介绍,尽量介绍以下几方面:简单介绍在校学习及工作经历,大学如果是985、211的话,介绍下学校的原创 2020-10-29 11:06:26 · 2317 阅读 · 0 评论 -
B+树索引
文章目录没有索引的查找索引InnoDB中的索引方案聚簇索引二级索引联合索引InnoDB的B+树索引的注意事项B+树的形成过程内节点中目录项记录的唯一性一个页面最少存储2条记录MyISAM中的索引方案简单介绍InnoDB各个数据页可以组成一个双向链表,每个数据页内部的记录会按主键值从小到大组成一个单链表,每个数据页都会为存储在其中的记录生成一个页目录,通过主键查找的时候,可以通过页目录进行二分查找。没有索引的查找首先分析下在一个页中的查找以主键为搜索条件:通过页目录进行二分查找以其他列为搜索条件原创 2020-10-09 17:33:15 · 309 阅读 · 0 评论 -
MySQL日志之binlog、redo log、undo log详解
binlogbinlog是Mysql sever层维护的一种二进制日志三种格式binlog的格式也有三种:STATEMENT、ROW、MIXED 。STATEMENT:每一条会修改数据的SQL语句会记录到binlog中优点:不需要记录每行的数据变化,这样子binlog日志比较少,减少磁盘IO,提高性能缺点:某些特定函数的执行无法被复制,UUID()、USER()ROW:不记录上下文信息,只记录那条数据修改成了什么样子。优点:缺点:一条update语句,修改多条记录,产生多条日志。alte原创 2020-09-28 14:57:51 · 421 阅读 · 0 评论 -
消息队列的使用场景
消息队列:是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构,是大型分布式系统不可缺少的中间件使用场景:异步处理用户注册成功后,发送注册邮件,再发送注册短信串行方式:将注册信息写入数据库成功后,向用户发送邮件,在发送注册短信,将结果放回给客户端并行方式:将注册信息写入数据库成功后,发送注册邮件的同时,发送注册短信,以上三个任务完成后,返回给客户端消息队列:将注册信息写入数据库成功后,注册信息写入消息队列,发送邮件和短信的消费者异步读取原创 2020-09-28 09:37:47 · 214 阅读 · 0 评论 -
Kafka基础原理
https://mp.weixin.qq.com/s/yH0NDocqb6oJhYf9R79uJw原创 2020-09-28 09:36:25 · 286 阅读 · 0 评论 -
MySQL Explain 执行计划常用参数解析
一条查询语句在经过MySQL查询优化器的各种基于成本和规则的优化会后生成一个所谓的执行计划,table原创 2020-09-22 20:52:17 · 895 阅读 · 0 评论 -
MySQL锁问题
锁机制出现的背景最大限度的利用数据库的并发访问每个用户以一致的方式读取和修改数据什么是锁用于管理对共享资源的并发访问,从而保证数据的完整性和一致性InnoDB存储引擎中的锁共享锁:允许读一行数据排他锁:允许更新或者删除一行数据只有同时是共享锁的时候兼容,其他组合均互斥。InnoDB 支持多粒度的锁,这种锁允许事务在行级锁和表级锁同时存在。为支持在不同粒度上进行加锁操作,InnoDB存储引擎支持一种额外的锁方式,称之为意向锁(Intention Lock)意向共享锁(IS Lo原创 2020-09-14 19:19:10 · 201 阅读 · 0 评论 -
什么是TCP粘包、拆包问题
https://www.cnblogs.com/sui776265233/p/9289858.html原创 2020-09-09 15:42:25 · 799 阅读 · 0 评论 -
Redis分布式锁
原理Redis 锁主要利用 Redis 的 SETNX 命令。加锁:SETNX key value。键不存在时,对键进行设置操作并返回成功,否则返回失败。KEY 是锁的唯一标识,一般按业务来决定命名。解锁:DEL key。通过删除键值对释放锁,以便其他线程可以通过 SETNX 命令来获取锁。锁超时:EXPIRE key timeout,。设置 key 的超时时间,以保证即使锁没有被显式释放,锁也可以在一定时间后自动释放,避免资源被永远锁住。伪代码如下:if (setnx(key, 1) =原创 2020-09-08 11:49:27 · 253 阅读 · 0 评论 -
MySQL全局锁、表锁、行锁
数据库锁设计的初衷就是处理并发问题,合理的控制资源的访问规则。根据加锁的范围,可以分为全局锁、表锁、行锁。全局锁对整个数据库实例加锁。MySQL可以通过Flush tables with read lock 来实现全局读锁,之后更新类的语句都会被阻塞。通过加全局读锁的备份方式,在主库,会引发业务停摆,在从库,会引发主从不一致。使用场景:不支持可重复读这个隔离级别的引擎全库的逻辑备份。当引擎支持可重复读的时候,可以用mysqldump -single-transaction,导数据的时候启动一原创 2020-08-27 10:59:16 · 311 阅读 · 0 评论 -
特殊数据结构:单调队列
队列中的元素单调递增、或者递减public class MonotonicQueue { Deque<Integer> deque = new LinkedList<>(); void push(int i, int[] nums) { while (!deque.isEmpty() && nums[i] > nums[deque.getLast()]) { deque.pollLast();原创 2020-08-26 09:02:20 · 129 阅读 · 0 评论 -
单调栈栈类型题
单调栈是每次新元素入栈后,栈内的元素都保持有序(单调递增或单调递减)的栈。单调栈主要解决Next Greater Number 问题,问题是:给你一个数组,返回一个等长的数组,对应索引存储着下一个更大元素,如果没有更大的元素,就存 -1。例子解释:给你一个数组 [2,1,2,4,3],你返回数组 [4,2,4,-1,-1]。第一个 2 后面比 2 大的数是 4; 1 后面比 1 大的数是 2;第二个 2 后面比 2 大的数是 4; 4 后面没有比 4 大的数,填 -1;3 后面没有比 3 大的数,填原创 2020-08-25 09:03:26 · 170 阅读 · 0 评论 -
存储数据用 string 类型 和 hash 类型,你是如何选择的呢?
比较结构化的数据,经常需要操作数据的一个或者几个,用Hash需要把所有数据都读取出来再处理,使用string 是一个好的选择原创 2020-08-24 19:17:35 · 561 阅读 · 0 评论 -
InnoDB数据页结构
页是InnoDB管理存储空间的基本单位,一个页的大小一般是16KB数据页结构名称中文名占用空间大小简单描述File Header文件头部38字节页的一些通用信息Page Header页面头部56字节数据页专有的一些信息Infimum + Supremum最小记录和最大记录26字节两个虚拟的行记录User Records用户记录不确定实际存储的行记录内容Free Space空闲空间不确定页中尚未使用的空间Page Dir原创 2020-08-24 17:34:18 · 387 阅读 · 0 评论 -
innoDB记录结构
简介InnoDB是将表数据存储在了磁盘上,真正进行处理数据的时候,还是需要将数据从磁盘读入内存中,磁盘和内存的交互单位是页,InnoDB中页的大小一般为16KB。行格式向表中插入数据是以记录为单位的,这些记录在磁盘上的存储方式被称为行格式或者记录格式。行格式都有哪些Compact、Redundant、Dynamic、Compressed如何指定具体的行格式CREATE TABLE 表名 ROW_FORMAT= 行格式ALTER TABLE 表名 ROW_FORMAT= 行格式COMPAC原创 2020-08-24 11:12:04 · 311 阅读 · 0 评论 -
MySQL基本架构详解之连接器、查询缓存、分析器、优化器、执行器
文章目录连接器查询缓存分析器优化器执行器MySQL 可以分为 Server 层和存储引擎层两部分。Server 层:所有跨存储引擎的功能都在这一层实现存储引擎层:负责数据的存储和提取连接器负责跟客户端建立连接、获取权限、维持和管理连接。MySQL使用长连接某些情况下会造成MySQL 占用内存涨得特别快,因为 MySQL 在执行过程中临时使用的内存是管理在连接对象里面的。代码层判断执行过一个大查询后,断开重新连接5.7版本之后,mysql_reset_connection 来重新初始化连接原创 2020-08-21 20:27:37 · 3036 阅读 · 2 评论 -
MySQL事务隔离级别详解及MVCC实现原理
事务是什么事务的隔离级别事务隔离级别的实现MVCC原理更新时的事务逻辑原创 2020-08-20 17:52:06 · 1525 阅读 · 1 评论 -
JVM之经典垃圾回收器
性能指标吞吐量:用户线程执行时间/(用户线程执行时间+垃圾回收线程执行时间),吞吐量越高,系统的资源利用率越高停顿时间:GC执行过程中,导致用户线程停顿的时间。内存占用率:垃圾收集器执行过程中也需要占用一部分内存空间,内存占用率越低越好保证吞吐量的情况下,尽可能追求低时延Serial针对新生代的垃圾收集器,单线程执行,串行的垃圾收集器,采用标记-复制算法。垃圾回收的时候是单线程处理,同时需要STW优点:简单高效、占用内存更小、单线程省去线程资源竞争带来的损耗当使用参数 「-XX:+Use原创 2020-08-20 11:45:34 · 154 阅读 · 0 评论 -
Java的三种代理模式(Spring动态代理实现原理)
https://www.cnblogs.com/qlqwjy/p/7550609.htmlhttps://blog.youkuaiyun.com/dhfzhishi/article/details/79692433https://www.jianshu.com/p/67bf0bea8157https://zhuanlan.zhihu.com/p/24908105原创 2020-08-17 20:25:57 · 1272 阅读 · 1 评论 -
深入理解ThreadLocal
ThreadLocal是什么提供一种在多线程环境下,每个线程都可以拥有自己独特的数据,同时在线程执行过程中传递。ThreadLocal怎么实现的类泛型public class ThreadLocal<T>{}可以存储任意格式的数据关键属性 //表示当前ThreadLocal的hashCode,用于计算当前ThreadLocalMap中索引的位置 private final int threadLocalHashCode = nextHashCode(); /**原创 2020-08-17 17:42:03 · 347 阅读 · 0 评论 -
动态代理,屏蔽RPC处理流程
通过采用动态代理技术,对字节码进行增强,在方法调用的时候进行拦截,以便在方法调用前后,增加额外处理逻辑。远程调用的内部逻辑使用RPC的时候,我们需要找提供方要接口,然后通过maven工作把接口依赖到我们的项目中,接口里是不包含真实的业务逻辑的,业务逻辑都在提供方的应用里。那么是如何通过调用接口方法,拿到了想要的结果呢?核心的技术是动态代理。当我们在项目中注入接口的时候,运行期实际绑定的是这个接口的代理类,调用过程中,是被代理类拦截到了,我们可以在代理类里加入远程调用逻辑。实现原理实现方法JDK原创 2020-08-17 11:37:45 · 267 阅读 · 0 评论 -
RPC框架在网络通信上更倾向于哪种IO模型
常见的网络模型阻塞IOIO多路复用什么是零拷贝Netty零拷贝原创 2020-08-17 10:16:38 · 347 阅读 · 0 评论 -
对象在网络中如何传输之序列化
为什么要序列化因为在网络中传输的数据只能是二进制。序列化就是将对象转换成二进制,反序列化就是讲二进制转化为对象的过程。常见的序列化JDK原生序列化方式JSONHessianProtobuf如何选择序列化方式RPC框架的性能和效率序列化协议的通用性和兼容性序列化协议的安全性RPC使用过程中注意哪些问题对象要尽量简单,没有太多的依赖关系入参和返回值体积不要太大尽量使用简单的、常用的原生对象。对象不要有复杂的继承关系。...原创 2020-08-16 14:34:27 · 1520 阅读 · 1 评论 -
如何设计可扩展的RPC协议
协议作用只有二进制才能在网络中进行传输,在RPC请求发送到网络之前,需要转化成二进制,然后写入本地Socket,然后通过网卡发送到网络设备中。对于RPC调用方来说,不会把所有二进制的数据整体一下子发送到服务端的机器上,中间会拆包或者并包。对于RPC服务方来说,从TCP通道里接收到的二进制数据,如何去识别具体的请求呢?类似于一个没有标点符号的文章,我们要想识别,就必须有标点,所以协议就是给我们断句提供依据。为什么不适用HTTP协议HTTP协议性能不高HTTP协议属于无状态协议设计协议原创 2020-08-16 10:10:05 · 674 阅读 · 0 评论 -
RPC概述及其通信流程
为什么要学习RPCRPC可以让我们调用远程服务像调用本地服务一样,RPC是微服务的基础,它是用来解决分布式系统通信的,涉及到网络通信就可以使用RPCRPC将网络通信的整个过程做了封装,使网络通信相关的开发逻辑变得简单。RPC的作用屏蔽远程调用和本地调用的差异隐藏底层网络通信的复杂性,更专注于业务逻辑。RPC通信流程首先RPC通信需要保证可靠性,一般采用TCP来传输。...原创 2020-08-14 17:52:18 · 835 阅读 · 0 评论