面试
文章平均质量分 92
Ethan_199402
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
从裸辞面试阿里说起
我呢,毕业于普通一本,一般般的双一流高校,没有名校光环。本科是自动化,软件硬件都学,c和汇编都会,而java则属于半路出家。 工作三年,有三份工作经验(着实挺尴尬的履历),第一份工作是一个巨无霸外企,但是作为成本中心并非是企业的核心板块,身边的人都是30岁靠上,在这样一个养老环境我坚持了一年半,期间前端后端运维都干,j原创 2021-06-17 22:14:58 · 972 阅读 · 1 评论 -
数据库索引,终于懂了
不少朋友留言问MySQL索引底层的实现,让我讲讲B+树。知其然,知其所以然,讲懂B+树其实不难,今天更多聊聊“数据库索引,为什么设计成这样”。 问题1. 数据库为什么要设计索引? 图书馆存了1000W本图书,要从中找到《架构师之路》,一本本查,要查到什么时候去? 于是,图书管理员设计了一套规则: (1)一楼放历史类,二楼放文学类,三楼放IT类… (2)IT类,又分软件类,硬件类… (3)软件类,又按照书名排序… 以便快速找到一本书。 与之类比,数据库存储了1000W条数据,要从中找到name=”shenji转载 2021-03-24 09:46:03 · 195 阅读 · 0 评论 -
RocketMQ源码分析之消息持久化
说到消息的持久化,笔者因为对kafka了解在先,于是首先的疑问是: 消息是放在内存吗? 这一点是不可能的,任何一个成熟的mq,消息都是持久化的,放内存不可能存贮那么多的消息 消息是放在队列里面吗? 答案是不是的,kafka的消息持久化在分区,而rocketMq的消息持久化在commitLog中 那么rocketMq是不是也像kafka那样分块存储消息呢? 如果所有消息全都存放到一个文件中,消息检索会很耗时,过期消息的清理也会很麻烦,所以消息肯定要进行多文件存储。 到底如何实现呢? 每个Broker都对应有一转载 2021-03-23 11:38:24 · 544 阅读 · 0 评论 -
RocketMQ源码分析之消息发送
由于之前线上发生了很严重的消息堆积问题,所以研究了一下rocket的发送源码,这里主要研究消息发送:生产者在发送消息的时候,会根据消息的Topic,选出对应路由信息,再挑选出某个Queue,将消息发送至Queue对应的Broker。 消息对应的Topic信息以及具体内容被封装在了Message中,并交由DefaultMQProducer,调用send()进行发送。DefaultMQProducer 只是一个面向调用方的代理,真正的生产者是DefaultMQProducerImpl,而消息发送的具体实现,便在原创 2021-03-22 11:29:29 · 402 阅读 · 0 评论 -
rocketMQ 总结
RocketMQ由哪些角色组成,每个角色作用和特点是什么? Nameserver 无状态,动态列表;这也是和zookeeper的重要区别之一。zookeeper是有状态的。前者保证AP,后者保证CP,NameServer 每个节点相互之间没有数据过程、都是独立的 (ap模式)保证可用性、不保证每个NameServer 数据的一致性问题。存储Broker 的IP和端口号 主题信息、集群信息 过滤器等 Producer 消息生产者,负责发消息到Broker。采用轮询算法连接nameserver 如果能够获取到原创 2021-03-19 15:50:18 · 1118 阅读 · 0 评论 -
Kafka面试细节
为什么kafka性能非常高 1.使用到零拷贝技术 属于linux操作系统内核自带;参考文章 2.顺序读写 kafka 属于日志存储系统实际将消息直接追加在segment 后面,将一个大的日志文件拆分成n多个小不同segment 文件,在访问的时候就可以提高效率 设计原理:segment 分段设计+稀疏索引算法(查找) 不会对每个msg建立索引。 3.分区模型架构 提高吞吐量 动态的消费者扩容与缩容 消息顺序一致性的问题 消息落地到同一个分区中,最终被一个消费者消费。在kafka中建议:相同分组中,原创 2021-03-17 19:29:46 · 415 阅读 · 2 评论 -
JVM (十)Java虚拟机栈栈详解,一文透彻栈的那些事(方法调用,动态分派,栈上分配等)
我们已经从JVM(一) 面试必知——运行时数据区域 了解到Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。 本篇详解Java虚拟机栈相关内容 运行时栈帧结构 Java虚拟机以方法作为最基本的执行单元,“栈帧”(Stack Frame)则是用于支持虚拟机进行方法 调用和方法执行背后的数据结构,它也是虚拟机运行时数据区中的虚拟机栈(Virtual Machine Stack)的栈元素。 每 一个方法从调用开始至执行结束的过程,都对应着一个栈帧在虚拟机栈里面从入栈到出栈的过程原创 2020-12-30 15:18:14 · 2513 阅读 · 0 评论 -
java反射机制中class.forName和classloader的区别
类加载机制 大致分为5个阶段: (1)加载:java类运行时候会生成一个class字节码文件,加载的过程就是去我们的操作系统寻找这个class文件。 (2)链接:这个过程就是把class文件加载到java虚拟机。 (3)初始化:在虚拟机中根据class文件进行初始化。 (4)使用:这个过程大家都明白。 (5)卸载:使用完了,java虚拟机进行清理。对于class.forName和classloader来说针对的就是第一个过程,也就是加载过程。不过这俩虽然有一定的相似性,但是区别还是挺大的。 详情可看另一边原创 2020-05-21 09:50:19 · 520 阅读 · 0 评论 -
JVM (八)大厂必问类加载机制,加载过程,生命周期
我们已经在[JVM (六) Class类文件的结构](https://blog.csdn.net/Ethan_199402/article/details/110858799)学习了Class文件存储格式的具体细节,在Class文件中描述的各类信息,最终都需要加 载到虚拟机中之后才能被运行和使用。而虚拟机如何加载这些Class文件,Class文件中的信息进入到虚 拟机后会发生什么变化,这些都是本文将要讲解的内容原创 2020-12-18 17:04:36 · 371 阅读 · 1 评论 -
深入理解字符串常量池,常见面试题总结
什么是字符串常量池 string的string Pool是一个圉定大小的Hashtable,默认值大小长度是1009。如果放进string Pool的string非常多,就会造成Hash冲突严重,从而导致链表会很长,而链表长了后直接会造成的影响就是当调用string.intern时性能会大幅下降。 参数设置 使用-xX :StringTablesize可设置stringTable的长度 在jdk6中stringTable是固定的,就是1009的长度,所以如果常量池中的字符串过多就会导致效率下降很快。Stri原创 2020-12-29 09:49:33 · 859 阅读 · 0 评论 -
面试官:我们聊聊线程池吧
阻塞队列 讲原理之前应该先了解一下阻塞队列,之所以是阻塞队列,是因为队列为空时,消费者从队列获取数据将一直阻塞直至队列非空,队列满时生产者往队列插入数据将一直阻塞直至队列非满 下面引用《java并发编程的艺术》原文: 在阻塞队列不可用时,这两个附加操作提供了4种处理方式 抛出异常:是指当阻塞队列满时候,再往队列里插入元素,会抛出 IllegalStateException(“Queue full”) 异常。当队列为空时,从队列里获取元素时会抛出 NoSuchElementException 异常 。 返回原创 2020-07-30 14:27:19 · 930 阅读 · 1 评论 -
又开始了面试官——请手写一个LRU算法
当我第一次被问这个问题的时候,我的脑子里不断重复L R U!what?这是什么?面试官嘴角上扬?你知道redis的缓存淘汰机制吗? 哦上帝!就这啊!(其实挺尴尬的,但只要脸皮够厚,我就不会尬住) 什么是LRU? LRU(Least recently used,最近最少使用)算法根据数据的历史访问记录来进行淘汰数据,其核心思想认为是“如果数据最近被访问过,那么将来被访问的几率也更高”。 那么你能手写一个LRU算法出来吗? 额。。。书到用时不得了哇,幸好我平时看的多 首先,做缓存的嘛,要快,于是我很快就pass原创 2020-07-24 16:59:36 · 581 阅读 · 0 评论
分享