大厂面试题
文章平均质量分 84
分享高频大厂面试题
Code皮皮虾
华为云享专家、掘金创作者、CSDN Java领域优质创作者,但并不仅限于Java,博文干货满满,期待您的关注!
展开
-
面试官问我HashMap哪里不安全,我支支吾吾的说了这些...
文章目录前言JDK7 HashMapJDK8 HashMap最后前言HashMap在JDK7和JDK8是有了一些不同的,具体体现如下:JDK7HashMap底层是数组+链表,而JDK8是数组+链表+红黑树JDK7扩容采用头插法,而JDK8采用尾插法JDK7的rehash是全部rehash,而JDK8是部分rehash。JDK8对于key的hash值计算相比于JDK7来说有所优化。如果还有兴趣的小伙伴可以学习学习我的以下文章,写的十分详细!!高频考题:手写HashMapJDK7、8原创 2021-05-26 10:32:23 · 9644 阅读 · 67 评论 -
【福利分享】阿里面试官叫我手写HashMap,我两分钟就给他整出来了!!!
文章目录前言撸起袖子开始造实现数组 + 链表实现获取Key对应数组索引的方法实现get方法实现put方法实现remove方法测试一下完整代码最后前言今天看面经看得到大厂面试题,说实话HashMap感觉真的很了解,源码看了也很多遍了,相信大部分小伙伴都能有这个程度。但是,突然给你来这么一手,还是有点懵圈!所以,今天给各位小伙伴整理一下,帮助各位掌握!正常来说,面试时遇到手写HahsMap,基本上都是要求实现get、put方法,我就稍微全面那么一点,再加一个remove方法。JDK7、8HashM原创 2021-05-21 14:30:01 · 27263 阅读 · 69 评论 -
【Code皮皮虾】带你盘点双亲委派机制【原理、优缺点】,以及如何打破它?
文章目录????前言什么是双亲委派机制?双亲委派机制原理优点缺点打破双亲委派机制?前提知识:线程上下文类加载器双亲委派出现之前JDBC打破双亲委派机制Tomcat如何打破双亲委派机制?1.自定义类加载器2. 使用线程上下文类加载器????福利???? Java入门到就业学习路线规划???? 小白快速入门Python爬虫路线????前言Code皮皮虾 一个沙雕而又有趣的憨憨少年,和大多数小伙伴们一样喜欢听歌、游戏,当然除此之外还有写作的兴趣,emm…,日子还很长,让我们一起加油努力叭???????原创 2021-10-06 13:04:47 · 8410 阅读 · 9 评论 -
【大厂面试题专栏更文】:一文帮你总结JVM 垃圾回收算法✨
文章目录????毛遂自荐????文章整体架构????JVM垃圾回收算法✨标记-清除算法✨复制算法✨标记-整理算法✨分代收集算法????常见垃圾回收器使用到的回收算法????最后????毛遂自荐毛遂自荐一下,给大家推荐一下自己的专栏????,欢迎小伙伴们收藏关注????大厂面试题专栏Java专栏爬虫专栏更多专栏尽在主页,点我????!!!????文章整体架构????JVM垃圾回收算法✨标记-清除算法该算法分为“标记”和“清除”阶段:首先标记出所有需要回收的对象,原创 2021-08-18 14:30:00 · 488 阅读 · 38 评论 -
一文就带你搞懂✨为什么重写 equals 时必须重写 hashCode 方法?
文章目录✨前景说明⭐为什么?有什么作用OR好处?????实战演练没有重写hashcode()解决办法:重写hashcode()尾言✨前景说明为什么重写 equals 时必须重写 hashCode 方法?相信这个问题大部分小伙伴即使面试中没有被问到过,但肯定也听说过那么这个问题到底是为什么?该怎么回答?今天我皮皮虾就来告诉各位小伙伴们????当然,如果对各位有那么亿点点小作用的话,那么期待大家的一键三连哦!????⭐为什么?有什么作用OR好处?使用hashcode方法提前校验,可以避免原创 2021-08-17 08:32:32 · 8941 阅读 · 55 评论 -
又是白嫖Gitee的一天,PicGo+Gitee搭建图床,用过的都说真香!!!
文章目录原创 2021-06-18 09:36:47 · 962 阅读 · 47 评论 -
小伙伴们,线程生命周期、线程池生命周期别再傻傻分不清楚了!!!
文章目录线程的生命周期线程池生命周期CSDN独家福利降临!!!尾言线程的生命周期新建状态(New):当线程对象对创建后,即进入了新建状态,如:Thread t = new MyThread();就绪状态(Runnable):当调用线程对象的start()方法(t.start();),线程即进入就绪状态。处于就绪状态的线程,只是说明此线程已经做好了准备,随时等待CPU调度执行,并不是说执行了t.start()此线程立即就会执行;运行状态(Running):当CPU开始调度处于就绪状态的线程时,此时原创 2021-06-10 10:22:44 · 592 阅读 · 7 评论 -
好不容易说明白AQS,面试官却还要我说应用场景,我只好又讲了CountDownLatch ~~~
文章目录前言CountdownLatch源码讲解CountDownLatch构造函数countDown()图示、源码讲解await()图示、源码讲解总结CSDN独家福利降临!!!最后前言博主 常年游荡于牛客面经区,总结了字节、阿里、百度、腾讯、美团等等大厂的高频考题,之后会逐步分享给大家,期待各位的关注、点赞!CountdownLatch源码讲解CountdownLatch主要原理依赖于AQS,还不了解AQS的小伙伴可以看我的这篇博文了解了解,很容易去上手AQS这个面试大考点AQS快速上原创 2021-06-08 08:37:01 · 715 阅读 · 49 评论 -
带你掌握被大厂面试官狂轰乱炸的ThreadLocal原理,别再傻乎乎的说不了解了~~~
文章目录什么是ThreadLocal?ThreadLocal怎么使用?ThreadLocal底层原理总结ThreadLocal相关面试题ThreadLocal 如何解决 Hash 冲突?ThreadLocal内存泄漏问题及解决办法CSDN独家福利降临!!!最后什么是ThreadLocal?ThreadLocal 是一个本地线程副本变量工具类。主要用于将私有线程和该线程存放的副本对象做一个映射,各个线程之间的变量互不干扰ThreadLocal怎么使用?ThreadLocl使用比较简单,主要有三原创 2021-06-03 21:32:26 · 915 阅读 · 41 评论 -
不讲武德(手动狗头):面试官上来就甩给我几道多线程代码题叫我手撕,我心里拔凉拔凉的~~~
文章目录两个线程,一个线程打印奇数,一个线程打印偶数三个线程打印ABC线程打印A5次,B10次,C15次创建水分子生产者、消费者阻塞队列版CSDN独家福利降临!!!最后两个线程,一个线程打印奇数,一个线程打印偶数public class Main { private static Lock lock = new ReentrantLock(); static Condition c1 = lock.newCondition(); static Condition c2 =原创 2021-06-02 11:26:54 · 1743 阅读 · 77 评论 -
见招拆招:老油条教你如何化解大厂面试官的线程池夺命连环炮!!!
文章目录什么是线程池?使用线程池的好处线程池的核心参数线程池的创建方式有哪些?各种线程池的使用场景线程池被创建后里面有线程吗?你知道有什么方法对线程池进行预热吗?线程池的状态有哪些?线程池的拒绝策略有那些?线程池的线程数到底怎么配置?execute 和 submit的区别CSDN独家福利降临!!!尾言什么是线程池?使用线程池的好处降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。提高响应速度。当任务到达时,任务可以不需要的等到线程创建就能立即执行。提高线程的可管理性。线原创 2021-05-30 10:24:21 · 1060 阅读 · 46 评论 -
阿里Leader叫我手写LRU,我写完淡淡地说我还能手撕LFU呢!!!
文章目录LRULFU尾言LRULFU尾言我是 Code皮皮虾,一个热爱分享知识的 皮皮虾爱好者,未来的日子里会不断更新出对大家有益的博文,期待大家的关注!!!创作不易,如果这篇博文对各位有帮助,希望各位小伙伴可以点赞和关注我哦,感谢支持,我们下次再见~~~分享大纲大厂面试题专栏Java从入门到入坟学习路线目录索引开源爬虫实例教程目录索引更多精彩内容分享,请点击 Hello World (●’◡’●)...原创 2021-05-27 10:33:16 · 3437 阅读 · 57 评论 -
源码、图示一步一步带你深入了解AQS机制!!!
1原创 2021-05-25 13:01:33 · 831 阅读 · 7 评论 -
Redis高级数据类型Hyperloglog、Bitmap快速带你上手!!!
文章目录原创 2021-05-23 10:04:10 · 2388 阅读 · 16 评论 -
JVM面试高频考点:由浅入深带你了解G1垃圾回收器!!!
文章目录G1垃圾回收器介绍G1 垃圾回收器工作流程SATB(原始快照)G1和CMS的区别最后G1垃圾回收器介绍G1垃圾回收器是一款主要面向服务端应用的垃圾收集器。作为垃圾回收器技术发展史上里程碑的成果,G1垃圾回收器不同于以往的垃圾回收器,首先是思想上的转变,如下图:G1对于Java堆的划分上面的图,小伙伴们第一次看可能不咋明白,因为各位还不了解G1,看看下面的话,应该就差不多了。G1垃圾回收器对于Java堆区域的划分不同于以往我们对Java对区域划分的认知以往对于Java堆区域的划分为.原创 2021-05-22 14:33:52 · 1506 阅读 · 22 评论 -
手把手教学妹JVM如何判断死亡对象!!!
文章目录前言引用计数法引用计数法弊端可达性分析算法GC Roots两次标记最后前言博主 常年游荡于牛客面经区,总结了字节、阿里、百度、腾讯、美团等等大厂的高频考题,之后会逐步分享给大家,期待各位的关注、点赞!话不多说,开讲!JVM是怎么判定对象为死亡对象?答:有两种算法可以判定对象是否存活:①引用计数法,②可达性算法。引用计数法概念:在对象中添加一个引用计数器,每当有一个地方引用它时,计数器的值就加一;当引用失效时,计数器就减一;任何时刻,当计数器值为 0 时,那么就代表该对象是可以被回原创 2021-05-18 16:33:13 · 529 阅读 · 4 评论 -
花式玩转二叉树遍历,递归迭代应有尽有,绝对满足您的需求!!!
文章目录前言二叉树层序遍历递归法二叉树前序遍历二叉树中序遍历二叉树后序遍历迭代法二叉树前序遍历二叉树中序遍历二叉树后序遍历最后前言力扣:二叉树前序遍历地址力扣:二叉树中序遍历地址力扣:二叉树后序遍历地址力扣:二叉树层序遍历地址二叉树层序遍历使用广度优先搜索(BFS)public class Main { public List<List<Integer>> levelOrder(TreeNode root) { List<原创 2021-05-19 14:02:41 · 5818 阅读 · 44 评论 -
字节大佬问我TopK,我反手来一句我这有几种解法,您想要哪种?
文章目录前言快速排序快排优化(三分取中法)堆排序大顶堆小顶堆解决TopK问题利用快速排序分区思想找第 K 小元素快排获取最小的 K 个元素构造固定堆解决最小K个元素构造固定堆解决最大K个元素最后前言博主 常年游荡于牛客面经区,总结了字节、阿里、百度、腾讯、美团等等大厂的高频考题,之后会逐步分享给大家,期待各位的关注、点赞!快速排序import java.util.Arrays;public class sorts { public static void quickSort(i原创 2021-05-19 11:16:21 · 7377 阅读 · 71 评论 -
Redis主从复制原理详解,小白也能看懂!!!
文章目录什么是Redis主从复制?为什么需要对Redis主从复制?主从复制的作用Redis主从复制原理连接建立阶段(即准备阶段)数据同步阶段命令传播阶段心跳检测min-slaves选项什么是Redis主从复制?Redis主从复制,就是说现在有多台Redis服务器,我们把他们分为master(主节点)和slave(从节点),而主从复制呢就是将 master的数据复制到 slave上面,且数据的复制是单向的,不能从 slave复制到master。主从模式为什么需要对Redis主从复制?日常开发原创 2021-05-18 15:43:55 · 3870 阅读 · 10 评论 -
阿里面试被问到 Java 内存模型、happens-before规则,我直接绿脸!!!
1原创 2021-05-15 20:21:52 · 1262 阅读 · 8 评论 -
【JVM大厂进阶知识点】——>逃逸分析之你能知多少?
逃逸分析技术面试过程中就算有答不上来的也不要惊慌失措,脸色要稳,这样会无形之中给面试官一种压力。????逃逸分析的基本原理:分析对象的动态作用域当一个对象在方法里被定义之后,它可能被外部的方法引用,例如:作为调用参数传递到其他方法中,这种现象被称为 方法逃逸甚至还有可能被外部线程访问到,例如:赋值给可以在其他线程访问到的实例变量,这称为 线程逃逸。对象从低到高逃逸程度:从不逃逸——> 方法逃逸 ——> 线程逃逸。如果能证明一个对象不会逃逸到方法或线程之外,或者逃逸程度较低(原创 2021-05-15 19:52:57 · 759 阅读 · 12 评论 -
面试被问到CAS原理,触及知识盲区,脸都绿了!
CAS底层原理想要了解 CAS 底层原理,那么我们先来了解一下 JUC包的一个类即:AtomicInteger。那么 这个 AtomicInteger 有什么用呢 ?我们平时开发或多或少都会使用到 i++ 这个操作,那么稍微了解多线程的同学都会知道,在多线程环境下,i++ 操作是线程不安全的操作,譬如下面这段代码:public class Main { private int i = 0; public void addI() { i++; }..原创 2021-05-17 12:50:28 · 4743 阅读 · 36 评论 -
字节面试被问到了Java泛型原理,我是这么回答的...
泛型原理——>类型擦除在没有泛型的时代,如果我们可能会写出如下代码public class Main { public static void main(String[] args) { ArrayList list = new ArrayList(); list.add(1); list.add("Code"); System.out.println(list); }}这段代码编译运行都可以,但...原创 2021-05-11 17:20:07 · 375 阅读 · 3 评论 -
【阿里面试题】fail-fast、fail-safe一套给你讲全!!!
文章目录什么是fail-fast、fail-safejava.util包下list的iterator()方法原理java.util.concurrent包下如何解决什么是fail-fast、fail-safefail-fast 和 fail-safe 是 Java集合中常见的错误检测机制,通常出现在集合遍历过程中。fail-safe允许在遍历的过程中对容器中的数据进行修改,而fail-fast则不允许。java.util下的所有集合类都是 fail-fast 机制,而 java.util.原创 2021-04-22 18:09:47 · 651 阅读 · 1 评论 -
阿里面试官叫我细说 Synchronized锁优化、锁升级,我张口就来!!!
文章目录前置知识:Java对象头锁优化锁消除锁粗化锁升级偏向锁轻量级锁自旋锁前置知识:Java对象头Java对象保存在内存中时,由以下三部分组成:对象头实例数据对齐填充字节而java的对象头由以下三部分组成:Mark Word指向类的指针数组长度(只有数组对象才有)Java对象头存储结构锁优化JDK1.6对锁的实现引入了大量的优化,如自旋锁、适应性自旋锁、锁消除、锁粗化、偏向锁、轻量级锁等技术来减少锁操作的开销。锁消除例如下面这个方法public Str原创 2021-04-21 15:00:47 · 429 阅读 · 0 评论 -
【Redis高频面试题系列】:聊聊 Redis持久化RDB、AOF机制原理、区别
文章目录Redis为什么要有持久化?Redis持久化方式?RDBAOFAOF重写两种持久化机制优缺点两种持久化机制工作原理RDB和AOF触发机制RDB和AOF区别Redis为什么要有持久化?因为Redis是一个基于内存的数据库,因此数据容易丢失,为了解决数据丢失的问题,于是Redis就设计了持久化。不做持久化,redis宕机或重启后数据全部丢失。Redis持久化方式?RDB持久化方式能够在指定的时间间隔能对你的数据进行快照存储.AOF持久化方式记录每次对服务器写的操作,当服务器重原创 2021-04-20 19:15:58 · 859 阅读 · 0 评论 -
【大厂面试题系列】:volatile在单例模式中的作用
以 双重检查单例模式为例,先上代码public class Singleton { public Singleton() { } private static volatile Singleton singleton; public static Singleton getSingleton() { if (singleton == null) { synchronized (Singleton.class) { ..原创 2021-03-31 21:27:27 · 1235 阅读 · 0 评论 -
【大厂面试不丢分系列】:超详解Mysql的select语句和update语句执行流程(两阶段提交)
文章目录Select语句执行流程Update语句执行流程Select语句执行流程客户端通过连接器与 MySQL 服务器建立连接,并获取了用户的读写权限,然后提交查询语句。首先 MySQL 会在查询缓存中对提交的语句进行查询,如果命中且用户对表有操作权限,会直接返回查询缓存中查询结果作为本次查询的结果,查询到此结束。如果查询缓存未命中,会来到分析器,分析器会解析语句并检查其合法性。如果语句不符合 MySQL 的语法规范,执行器会报错,查询到此结束。若语句合法,会来到优化器,优化器会为 SQL原创 2021-03-31 20:52:43 · 501 阅读 · 4 评论 -
大厂面试被问到数组索引定位的原理,我直接懵圈???
数组(Array)是一种线性表数据结构。它用一组连续的内存空间,来存储一组具有相同类型的数据根据寻址公式进行定位公式address[i] = base_address + i * data_type_sizeaddress[i] : 下标 i 的地址值。base_address: 数组的首地址。data_type_size: 数组中每个元素的大小,也就是数据类型大小(字节),例如int是4个字节。简单来说就是根据 数组首地址 + 索引 * 元素大小 来进行定位获取觉得不错的小..原创 2021-03-29 20:14:07 · 648 阅读 · 0 评论 -
【大厂面试题系列】:什么是回表查询?如何避免?
说到回表查询,我们得现说说Mysql 的 InnoDB引擎的索引结构即 B+树B+ 树 索引主要分为两个:聚簇索引 和 非聚簇索引聚簇索引:也就是平常我们说的主键索引,在 B+ 树中叶子节点存的是整行数据。非聚簇索引:非聚集索引即索引结构和数据分开存放的索引。我们如果使用主键查找,那么使用的是聚簇索引,能直接获取到数据,而如果我们使用非聚簇索引查找,如果该索引不包含我们需要查找的的全部字段,那么就需要根据叶子节点存储的主键值在进行一次查找来找到我们需要的数据,这就是回表查询。很..原创 2021-03-25 19:49:00 · 2406 阅读 · 0 评论 -
【大厂面试题系列】:说说JVM垃圾回收算法及其优缺点
JVM的垃圾回收算法,优缺点标记-清除算法该算法分为“标记”和“清除”阶段:首先标记出所有需要回收的对象,在标记完成后统一回收掉所有被标记的对象。也可以反过来先标记所有不需要被回收的对象,标记完成以后回收没有被标记的对象。执行效率不稳定,适用于对象存过较多的区域,适用于老年代会产生内存碎片何为清除?标记清除并不是真的置空,而是把需要清除的对象地址保存在空闲的地址列表里。下次有新对象需要加载时,判断垃圾的位置空间是否够,如果够,就存放。复制算法将可用内存分为大小相.原创 2021-03-24 21:12:56 · 639 阅读 · 0 评论 -
面试官:说说你对CMS垃圾回收器的理解
文章目录CMS垃圾回收器相关面试题CMS垃圾收集器,用在哪个年代为什么CMS怎样进行垃圾回收,哪些过程是stop the worldCMS的缺点,什么是浮动垃圾,浮动垃圾过多会有什么影响CMS垃圾回收器CMS是一种已获得最短回收停顿时间为目标的收集器。CMS垃圾回收器基于标记-清除算法实现,那么使用该算法的最大缺点也显而易见——大量的内存碎片。内存碎片过多时会给大对象分配带来麻烦,即会存在空间足够,但是连续的空间太小,这样的话就会触发Full GCCMS解决办法:使用 -XX:CMSFullGC原创 2021-03-24 20:47:30 · 638 阅读 · 0 评论 -
【Redis高频面试题系列】:说说Redis的rehash过程
Redis的字典由 dict.h/dict 结构如下(rehash的重点)typedef struct dict { //类型特性函数 dictType *type; //私有数据 void *privdata; //哈希表 dictht ht[2]; //rehash索引 //当rehash没有进行时为-1 int trehashidx;}ht 属性是一个包含两个项的数组,数组中的每个项都是一个dictht哈希表,一般情况下使用的都是ht[0]的哈希表,而...原创 2021-03-23 20:52:17 · 873 阅读 · 2 评论 -
超详细 JDK7、8HashMap扩容流程 源码解析、读后总结一套给你搞定!!!
文章目录前言JDK7 HashMap扩容JDK8 HashMap扩容前言JDK7 和JDK8 的扩容方法都基于 resize()方法,但底层实现却有所不同JDK7 HashMap扩容void addEntry(int hash, K key, V value, int bucketIndex) { if ((size >= threshold) && (null != table[bucketIndex])) { resize(2 * table原创 2021-03-23 20:08:17 · 869 阅读 · 2 评论 -
【大厂面试题系列】:JDK7、8 HashMap扩容原理源码讲解
文章目录前言JDK7 HashMap扩容JDK8 HashMap扩容前言JDK7 和JDK8 的扩容方法都基于 resize()方法,但底层实现却有所不同JDK7 HashMap扩容void addEntry(int hash, K key, V value, int bucketIndex) { if ((size >= threshold) && (null != table[bucketIndex])) { resize(2 * table原创 2021-03-22 20:31:07 · 1012 阅读 · 0 评论 -
【大厂面试题系列】:如何解决CAS的ABA问题
CAS解决ABA问题ABA问题产生如果一个变量V初次读取的时候是A值,并且在准备赋值的时候检查到它仍然是A值,那我们就能说明它的值没有被其他线程修改过了吗?很明显是不能的,因为在这段时间它的值可能被改为其他值,然后又改回A,那CAS操作就会误认为它从来没有被修改过。这个问题被称为CAS操作的 "ABA"问题。public class ABADemo { static AtomicReference<Integer> atomicReference = new Atomi..原创 2021-03-19 13:52:06 · 935 阅读 · 0 评论 -
【大厂面试题系列】:JDK7、8 HashMap的get()、put()方法流程
文章目录JDK7get()流程put()流程JDK8get()流程put()流程 JDK7、8对于链表的插入:JDK7采用的是头插法,JDK8采用的是尾插法JDK7get()流程先看key是否为null,如果为null的话则调用getForNullKey()方法(之后看,如果数组size为0,则返回bull,如果不为0,则获取数组下标为0的链表进行遍历来获取key为null的键值对,如果存在则返回key为null对应的value值,没有则返回null)如果key不为null,则调用g原创 2021-03-12 18:30:27 · 1629 阅读 · 1 评论 -
【大厂面试题系列】:说说Young GC(Minor GC) 和 Full GC的触发条件【JVM】
文章目录1. 调用 System.gc()2. 老年代空间不足3. 空间分配担保失败4. JDK 1.7 及以前的永久代空间不足5. CMS GC时出现Concurrent Mode Failure1. 调用 System.gc()只是建议虚拟机执行 Full GC,但是虚拟机不一定真正去执行。不建议使用这种方式,而是让虚拟机管理内存。2. 老年代空间不足老年代空间不足的常见场景为前文所讲的大对象直接进入老年代、长期存活的对象进入老年代等。为了避免以上原因引起的 Full GC,应当尽量.原创 2021-02-22 15:32:09 · 1772 阅读 · 0 评论 -
【大厂面试题系列】:请写出Java中线程安全的单例模式【设计模式】
文章目录第一种:双重检查第二种:静态内部类第三种:枚举完善使用enum枚举实现单例模式第四种:懒汉式(加锁)第一种:双重检查public class Singleton { private volatile static Singleton singleton; private Singleton() { } public static Singleton getSingleton() { if (singleton == null) {原创 2021-02-22 15:21:20 · 664 阅读 · 2 评论