![](https://img-blog.csdnimg.cn/20190918140037908.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
原理不会,面试都跪
文章平均质量分 78
仅作学习
向着百万年薪努力的小赵
当注意力专注于一件事上,岁月就会显得十分轻浮,快的有些过于浪荡——远近书疏,莫不手答,笔翰如流,未尝壅滞
展开
-
面上大厂需要准备的面试题
简历,最好能找大厂的小哥哥帮你看看,改到他们觉得可以过hr的法眼,让他们帮你内推,这样基本能获取到面试的机会,不然机会都没有,只能做大厂梦了。简历最好有亮点,能够量化的东西,也别写的太浮夸了,明明是个小的系统,非要吹几百万的qps的话,即便简历过了,大佬面你时候,你吹不出来,你懂吧。很多人其实和我差不多,天天crud的,哪有什么亮点?有的,你要相信自己,你遇到过什么问题,怎么解决的,用了什么方法,效果怎么样的?你把这个4连击想破头你都要想出来,组成一段话,你的亮点就出来了。当然,亮不亮就看你平时了,实在没有原创 2022-07-13 09:28:38 · 31977 阅读 · 3 评论 -
探究HashMap源码中最大容量为什么是2的30次方(1<<30)?
在阅读hashmap的源码过程中,我看到了关于hashmap最大容量的限制,并产生了一丝疑问。为啥最大容量是 1原创 2022-07-09 22:33:49 · 16012 阅读 · 0 评论 -
HashMap为什么扩容重新计算位置后,还能找到以前数据的位置
进行扩容,会伴随着一次重新hash分配,并且会遍历hash表中所有的元素,是非常耗时的。在编写程序中,要尽量避免resize。HashMap在进行扩容时,使用的rehash方式非常巧妙,因为每次扩容都是翻倍,与原来计算的 (n-1)&hash的结果相比,只是多了一个bit位,所以节点要么就在原来的位置,要么就被分配到"原位置+旧容量"这个位置。怎么理解呢?例如我们从16扩展为32时,具体的变化如下所示:因此元素在重新计算hash之后,因为n变为2倍,那么n-1的标记范围在高位多1bit(红色),因此新原创 2022-07-09 22:41:57 · 19636 阅读 · 1 评论 -
为什么HashMap默认初始容量为2次幂?不是2次幂会怎样?讲讲 HashMap 扰动函数?
关于HashMap的详解文章请移步:链接: HashMap源码研究——源码一行一行的注释通过看源码,我们发现,判断桶的索引的实现是 i = ( n - 1 ) & hash,其中 n 是 map 的容量。任何 2 的整数幂 - 1 得到的二进制都是 1,如:16 - 1 = 15(1111);32 - 1 = 31(11111)而 n-1 与 hash 做的是与运算(&),与运算是 两个都为1,才为1既然我们的 n-1 永远都是 1,那 ( n - 1 ) & hash 的计算结果就是 低位的hash原创 2022-07-10 10:32:17 · 16346 阅读 · 1 评论 -
HashMap为什么用链表加红黑树?目的是什么?原理是什么
关于HashMap的详解文章:链接: HashMap源码研究——源码一行一行的注释关于hashmap的其他有关问题我在源码研究专栏中都有讲解,深入到源码层次的讲解,绝对一看就懂链接: 深入源码,探究设计思想在jdk1.8版本后,Java对HashMap做了改进,在链表长度大于8的时候,将后面的数据存在红黑树中,以加快检索速度。一句话回答:用链表是为了应对哈希冲突这种情况的我们都知道hashmap是根据算得哈希值来确定数据存放的位置,但是我们也知道哈希值会一样,也就是哈希碰撞这种情况。为了让哈希值一样的原创 2022-07-10 10:46:09 · 21790 阅读 · 10 评论 -
重载与重写的区别
从字面上看,重写就是重新写一遍的意思。其实就是在子类中把父类本身有的方法重新写一遍。子类继承了父类原有的方法,但有时子类并不想原封不动的继承父类中的某个方法,所以在方法名,参数列表,返回类型(除过子类中方法的返回值是父类中方法返回值的子类时)都相同的情况下,对方法体进行修改或重写,这就是重写。但要注意子类函数的访问修饰权限不能少于父类的。......转载 2022-07-18 21:54:48 · 79 阅读 · 0 评论 -
面试题:HashMap和HashTable的区别
它的作用与containsValue()一致。虽然HashMap是线程不安全的,但是它的效率远远高于Hashtable,这样设计是合理的,因为大部分的使用场景都是单线程。ConcurrentHashMap虽然也是线程安全的,但是它的效率比Hashtable要高好多倍。HashMap是线程不安全的,在多线程并发的环境下,可能会产生死锁等问题,因此需要开发人员自己处理多线程的安全问题。Hashtable是线程安全的,它的每个方法上都有synchronized关键字,因此可直接用于多线程中。......原创 2022-07-18 22:01:37 · 342 阅读 · 0 评论 -
大厂真实面试:HashMap八连问,逐渐深入
主要还是对锁的升级做了一些优化,它默认采用的是偏向锁,然后在程序运行中始终是(只有)有一个线程去获取这个synchronized的这个这么一个锁,那么Java对象中的话会记录了一个线程的ID,所以呢,我们在下次再获取这个synchronized的锁定的时候,只需要去比较这个线程ID就行了,在运行过程中如果出现第二个线程去请求synchronized锁的时候,这里就分两种情况。......原创 2022-07-15 23:01:19 · 14833 阅读 · 5 评论 -
面试题:fail-safe 机制与 fail-fast 机制分别有什 么作用
前段时间一个同学去面试,遇到这样一个问题。fail-safe 机制与 fail-fast 机制分别有什么作用?他说他听到这个问题的时候,脑子里满脸问号。额….嗯…(持续几秒后,贴一个搞笑的图,比如 two years latter 之类,然后再配 个一脸蒙蔽。。)fail-safe 和 fail-fast,是多线程并发操作集合时的一种失败处理机制。一般会配合迭代器中使用,比如定义一个 Map 集合,使用 Iterator 迭代器进行数据遍历,在遍历过程中,对集合数据做变更时,就会发生 fail-fast。原创 2022-07-12 22:11:10 · 729 阅读 · 0 评论 -
面试题:谈谈你对AQS 的理解
在很多大厂的面试中,面试官对于并发编程的考核要求相对较高,简单来说,如果你不懂并发编程,那么你很难通过大厂高薪岗位的面试。 AQS 是 AbstractQueuedSynchronizer 的简称,是并发编程中比较核心的组件,它是 J.U.C 包中 多个组件的底层实现,可以用它来实现多线程的同步器, 包中多个组件的底层实现,如 Lock、 CountDownLatch、Semaphore 等都用到了 AQS。 从本质上来说,AQS 提供了两种锁机制,分别是排它锁,和共享锁。 排它锁,就是存在多线程原创 2022-07-12 22:01:58 · 897 阅读 · 1 评论 -
面试题——基础篇
面试题1:Java 中操作字符串都有哪些类?它们之间有什么区别?正经回答:操作字符串的类有:String、StringBuffer、StringBuilder。String 和 StringBuffer、StringBuilder 的区别在于 String 声明的是不可变的对象,每次操作都会生成新的 String 对象,然后将指针指向新的 String 对象,而 StringBuffer、StringBuilder 可以在原有对象的基础上进行操作,所以在经常改变字符串内容的情况下最好不要使用 Stri转载 2021-07-22 15:25:28 · 182 阅读 · 0 评论 -
面试题——Redis篇
面试题1:为什么要用 Redis ?业务在哪块儿用到的?正经回答:Redis是眼下最为人熟知的缓解高并发、提升高可用能力的手段之一,再提升服务器性能方面效果显著。这里不得不提到高并发场景,我们知道,并发场景下核心点在数据库,引入缓存(以及引入任何负载均衡、集群等策略)的目的都是在减轻数据库压力,让更多原本打到DB上的请求,在中间被拦截处理掉。就像你请个假屁大点儿事还要大老板签字一样?通俗易懂点儿说,高并发对服务器来说,就好比你被人锤一拳,这拳头可是硬的很,光着膀子的话一拳就给我干吐血。。那么我为了承转载 2021-07-22 15:12:48 · 317 阅读 · 0 评论 -
面试题-集合框架篇
面试题:对比 Vector、ArrayList、LinkedList 有何区别?适合在什么场景下使用正经回答:这三者都是实现了集合框架中的 List,也就是有序集合,因此具体功能也比较近似,比如都提供按照位置进行定位、添加或者删除的操作,都提供迭代器以遍历其内容等。但因为具体的设计区别,在行为、性能、线程安全等方面,表现又有很大不同。Vector: 是 Java 早期提供的线程安全的动态数组,如果不需要线程安全,并不建议选择,毕竟同步是有额外开销的。 Vector 内部是使用对象数组来保存数转载 2021-07-23 09:49:58 · 213 阅读 · 0 评论 -
面试题-数据库篇
面试题1:你对数据库优化有哪些了解呀?正经回答: 在高并发环境下,数据库是最敏感的地方,nginx负载均衡、Server集群、MQ消息队列、Redis缓存集群、数据库主从集群所作的一切都是为了减轻数据库访问压力。但是!前提是要有健壮的数据库和底层代码,这样才能使前期准备不再是花架子。性价比如上图,我们针对数据库的优化优先级大致如下:高:从SQL优化、索引优化入手,优化慢SQL、利用好索引,是重中之重;中:SQL优化之后,是对数据表结构设计、横纵分表分库,对数据量级的处理;低:通过修改数据库系转载 2021-07-23 11:14:01 · 218 阅读 · 0 评论 -
面试题——基础篇2
面试题1:说一下抽象类和接口有哪些区别?正经回答:抽象类和接口的主要区别: 从设计层面来说,抽象类是对类的抽象,是一种模板设计;接口是行为的抽象,是一种行为的规范。一个类可以有多个接口 只能有继承一个父类抽象类可以有构造方法,接口中不能有构造方法。抽象类中可以有普通成员变量,接口中没有普通成员变量接口里边全部方法都必须是abstract的;抽象类的可以有实现了的方法抽象类中的抽象方法的访问类型可以是public,protected;但接口中的抽象方法只能是public类型的,且默认即为p转载 2021-07-28 11:23:02 · 133 阅读 · 0 评论