
面试题
文章平均质量分 55
轻尘×
一念起,千山万水;一念灭,沧海桑田;生活,或许本该就有诸多遗憾;那些情,已散落天涯,那些未说完的话、未叙完的故事,终将被流年吹散
展开
-
暴力破解Leetcode 42:接雨水问题
问题描述 给定一个整形数组arr,已知其中所有的值都是非负的,将这个数组看作一个柱子高度图,计算按此排列的柱子,下雨之后能接多少雨水。(数组以外的区域高度视为0)数据范围:1≤n≤1000000,数组中每个值满足 >=0示例输入:[3,1,2,5,2,4]返回值:5说明:数组 [3,1,2,5,2,4] 表示柱子高度,在这种情况下,可以接 5个单位的雨水,蓝色的为雨水。原创 2022-09-14 14:45:05 · 1305 阅读 · 0 评论 -
模仿dubbo的ConsistentHashLoadBalance实现一个自定义负载均衡案例
模仿dubbo的ConsistentHashLoadBalance实现一个自定义负载均衡案例原创 2022-09-09 18:04:44 · 520 阅读 · 0 评论 -
了解一致性hash原理,这篇文章就够了
在理解一致性hash算法之前,让我们来看一个在缓存中最经典的案例场景,理解这个运用场景之后,我们再去理解一致性hash算法就更容易了,在这个过程中我们还能体会一致性hash算法的优势之处,好了,让我们来描述一下这个经典的分布式缓存案例。翻译 2022-09-09 15:03:41 · 411 阅读 · 0 评论 -
java字节码层面逐行分析,解释i++和++i的区别
源码 public void testAdd(){ int a = 10; a = a++; System.out.println(a); } public void testAddAdd(){ int a = 10; a = ++a; System.out.println(a); }编译后生成的字节码testAdd()public void原创 2022-05-24 14:18:04 · 271 阅读 · 0 评论 -
阿里巴巴Java开发手册推荐使用LongAdder,为什么呢?
高并发情况下各种累加器性能测试,包括synchronized、AtomicInteger、AtomicLong、LongAdder、LongAccumulator原创 2022-05-21 18:33:53 · 429 阅读 · 0 评论 -
CompletableFuture实现多个互不相干的方法并行调用
CompletableFuture.supplyAsync()和 CompletableFuture.allOf()解决多方法并行问题原创 2022-05-20 17:01:27 · 9097 阅读 · 1 评论 -
线程池ThreadPoolExecutor拒绝策略RejectedExecutionHandler
问题1:什么时候触发拒绝策略?问题2:拒绝策略有哪些?问题3:默认的拒绝策略是什么?问题4:你实际开发经历中的拒绝策略是什么?原创 2022-05-16 10:53:50 · 1006 阅读 · 0 评论 -
java新特性之Stream,演变过程
遍历数组1.0 public static void ergodicList(List<Integer> list){ for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); } }遍历List1.5 public static void ergodicList(List<Integer> ..原创 2022-05-10 13:43:43 · 242 阅读 · 0 评论 -
代码验证REQUIRES_NEW事务传播机制
REQUIRES_NEW 传播行为下,内外事务是独立的,互不干扰原创 2022-04-28 17:45:34 · 1269 阅读 · 0 评论 -
spring 事务传播机制总结
spring事务的传播机制定义在 TransactionDefinition 接口中,定义了如下传播类型PROPAGATION_REQUIRED支持当前事务,如果没有当前事务就创建一个新的事务,是默认的传播行为。外围方法未开启事务内部会创建新事务,若新事务回滚,不影响外围方法。外围方法开启事务内部方法会加入到外围方法的事务中,使用同一个事务,不管内外谁发生异常,整个事务都将回滚。/** * Support a current transaction; create a原创 2022-04-28 15:20:52 · 675 阅读 · 0 评论 -
mvcc相关:innoDB之read view数据格式
源码struct read_view_t{ ulint type; /*!< VIEW_NORMAL, VIEW_HIGH_GRANULARITY */ undo_no_t undo_no;/*!< 0 or if type is VIEW_HIGH_GRANULARITY transaction undo_no when this high-granularity consistent read view was created */ trx_id_t..原创 2022-04-26 11:33:41 · 282 阅读 · 0 评论 -
mysql InnoDB两次写(doublewrite)
前置知识InnoDB的数据的读取和更新是以页为单位的,并不是以行为单位的;需要被操作的数据,会先以页(16K)为单位加载到内存中;内存中被修改了的页,称为脏页;被修改的数据(脏页)并不是立刻刷新到磁盘,而是通过fscyn函数调用才会刷新到磁盘;doublewriteInsert Buffer给InnoDB存储引擎带来了性能上的提升,doublewrite给InnoDB带来的是数据页的可靠性。当数据库宕机时,可能InnoDB存储引擎正在写入某个页到表中,而这个页只...原创 2022-04-25 11:16:42 · 522 阅读 · 0 评论 -
玩大了,机试让写一段代码模拟OOM,结果电脑死机了,面试官脸都绿了
public static void testStackOutOfMemory(){ while (true) { Thread thread = new Thread(new Runnable() { public void run() { while(true){} } }); thread.start(); } }上面这个必死,下面这个没试过 public static void testStackOutOfMemory() { ..原创 2022-04-18 15:01:42 · 264 阅读 · 0 评论 -
jdk1.8 HashMap哈希表底层采用何种算法计算hash值?如何确定元素在哈希表的下标
关键代码取hash自身hashCode 按位异或hashCode无符号右移16位当数组的长度很短时,只有低位数的hashcode值能参与运算。而让高16位参与运算可以更好的均匀散列,减少碰撞,进一步降低hash冲突的几率。并且使得高16位和低16位的信息都被保留了。static final int hash(Object key) { int h; return (key == null) ? 0 : (h = key.hashCode()) ^ (h.原创 2022-03-23 18:52:31 · 1194 阅读 · 1 评论 -
jdk1.8HashMap扩容后链表拆分过程解析
源码拆分思路逐行解析原创 2022-03-12 16:37:15 · 975 阅读 · 0 评论 -
一把锁引发的问题,synchronized方法与非synchronized方法共存产生数据脏读问题
模拟场景:写一段小程序,一个方法给某人账户充值,另一个方法查询某人的账户,如果两个方法都不加锁,并发情况下肯定会问题,现在只给充值方法加锁,查询方法不加,由于synchronized与非synchronized方法可以同时运行,所以查询方法可能产生脏读问题。public class Account { String name; double balance; public synchronized void setBalance(String name, do..原创 2022-01-27 17:28:55 · 410 阅读 · 0 评论 -
java实现三个线程按指定顺序执行
让前一个线程先执行,即Thread_after中调用Thread_before.jion()原创 2022-01-25 19:40:40 · 1151 阅读 · 0 评论 -
利用ClassLoad机制实现单例模式,安全省心
利用了 classloder的机制来保证初始化 instance 时只有一个线程原创 2022-01-24 10:12:30 · 2515 阅读 · 0 评论 -
一道面试题引出的Java加载、链接与初始化verification、preparation、resolution、initialization过程
背景试题case 1public class JavaLoading { private static int NUM = 3; private static JavaLoading INSTANCE = new JavaLoading(); private JavaLoading() { NUM++; } public static void main(String[] args) { System.out.prin原创 2022-01-10 11:17:18 · 451 阅读 · 0 评论 -
8位的能表示的范围是±2^7(最高位做符号位),也就是±128,为什么单精度浮点数的指数范围却是-126~127呢?
8个字节的能表示的范围是±2^7(最高位做符号位),也就是±128,为什么单精度浮点数的指数范围却是-126~127呢?我是在《计算机组成原理》一书中解开迷惑的按照IEEE754标准规定,浮点数的表示方式如下中间的8位数阶码是无符号数,原本它的范围是0~2^8,即0~256IEEE754规定只取1~254最为阶码的取值范围,255和0用于表示特殊值。阶码与实际指数之间满足如下关系:阶码=127+实际指数值所以实际指数的范围就是1-127~254-127,即-1..原创 2021-12-31 14:54:17 · 2138 阅读 · 2 评论 -
同样是32位,为什么float能表示的数据范围比int的大?
System.out.println("Float.MAX_VALUE:"+Float.MAX_VALUE); System.out.println("Integer.MAX_VALUE:"+Integer.MAX_VALUE); System.out.println("Integer.MIN_VALUE:"+Integer.MIN_VALUE);Float.MAX_VALUE:3.4028235E38Integer.MAX_VALUE:2147483647Integer.MIN_VALU..原创 2021-12-28 16:22:58 · 4386 阅读 · 0 评论 -
深度剖析JVM常量池,String字符串相关八股文,茴香豆的茴有几种写法?
最近看到一篇非常有深度的博文,用流行语说就是——整的我都不会了!有兴趣的可以来挑战一下,文末有原文链接!盲猜1String a="Mic";String b="Mic";assert(a==b);盲猜2String a =new String(new char[]{'a','b','c'}); String b = a.intern(); System.out.println(a == b);盲猜3 String x =new String("def");原创 2021-11-09 16:55:02 · 322 阅读 · 0 评论 -
数据实测告诉你:不要人云亦云的瞎说EXISTS 与 in 的区别
背景实践过程中发现了MySQL一些慢查询,主要出现在in关键字上,查阅相关资料,众多博客都在分析in和 EXISTS 的区别与各自的适用场景,很多都是如下一般,直接给出结论,却没有数据支撑的。他们的结论言之凿凿的说:in()适合B表比A表数据小的情况exists()适合B表比A表数据大的情况我在实测过程中发现,在5.7环境下,无论是大表驱动小表,还是小表驱动大表,in的速度都优于exists,这不由得让我产生了怀疑。环境准备安装两个版本的数据库各一...原创 2021-10-14 11:37:32 · 1798 阅读 · 18 评论 -
java中的“我”不是“我”,NaN特殊标识以及正无穷+负无穷应该等于多少?
上文:Java虚拟机规范.Java SE 8版中关于浮点类型的说明,Infinity和-Infinity给大家提到一个小的知识点,即浮点数的0,它有正负之分作为分母不会产生java.lang.ArithmeticException: / by zero,而是得到正负无穷大,至于为什么,这是IEEE 754标准定义的在《Java虚拟机规范.Java SE 8版》第二章第三节有如下描述那我就好奇了,你说正无穷+负无穷应该等于多少,会是零吗? public static void main(S原创 2020-09-26 11:38:58 · 1086 阅读 · 0 评论 -
Java虚拟机规范.Java SE 8版中关于浮点类型的说明,Infinity和-Infinity
在我们的经验中除数是不可以为零的,否则java.lang.ArithmeticException: / by zero在等您但是浮点数可就不一定了在第二章2.3.2节《浮点类型、取值集合及浮点值》中有这样的表述代码验证一下 public static void main(String[] args) { float f1 = 1f; float f2 = 0.0f; float f3 = -0.0f; System.out.pri原创 2020-09-26 11:10:30 · 301 阅读 · 0 评论 -
关于java的switch接收字符串底层实现逻辑
看一段代码,这是一道试题,思考一下,结果是什么?为什么?package cn.com.suntree.utils.myself;public class SwitchTest { public static void main(String[] args) { String paramStr = null; switch (paramStr){ case "boy": break;原创 2020-09-24 18:24:35 · 673 阅读 · 0 评论 -
使用LinkedHashMap实现简单的LRU
LRU在很多缓存失效策略中会涉及,本质是一种节约更公平的节约资源策略,最近最少使用java中的LinkedHashMap就有自带的实现LRU简单说一下LinkedHashMap这种数据结构,本质是HashMap+双向链表,不仅有HashMap的特性,还能维护元素的顺序,示意图如下使用LinkedHashMap实现简单的LRUpackage cn.com.suntree.utils.myself;import java.util.LinkedHashMap;import java.util.M原创 2020-09-22 14:15:28 · 988 阅读 · 0 评论 -
探究java类的加载顺序
基类public class Father { private int i = testFather(); // 6 private static int f = method();// 1 static { System.out.println("父类静态代码块被加载");// 2 } private static int f2 = method2();// 3 Father(){ // 9 System.out.原创 2020-09-21 14:53:35 · 204 阅读 · 0 评论 -
阿里巴巴难度系数五颗星的试题,小白竟然说很简单
牛客网上有道阿里巴巴的面试题,网站显示该题难度系数五颗星代码如下:public class Base{ private String baseName = "base"; public Base(){ callName(); } public void callName(){ System. out. println(baseName); } static class Sub extends Base{原创 2020-09-19 16:09:20 · 447 阅读 · 0 评论 -
面试官问你HashMap为什么线程不安全,体现在哪?举个例子看看?
看过我HashMap系列教程的人都应该对HashMap的原理都有了比较深的理解深入源码分析HashMap到底是怎样将元素put进去的HashMap扩容后,元素是如何重新分布的”准备用HashMap存1w条数据,构造时传10000会触发扩容吗?“java的hashmap,如果确定只装载100个元素,new HashMap(?)多少是最佳的,why?读HashMap源码之tableSizeFor大家都知道HashMap是线程不安全的,可是为什么是不安全的呢?其实我们看一下源码就知道final V原创 2020-09-14 15:33:47 · 1356 阅读 · 1 评论 -
List<? extends T>和List<? super T>之间的区别
定义几个基础类// 动物类,一个吃方法public static class Animal { public void eat() { System.out.println("Animal eat"); } }// 鸟继承自动物,一个飞方法public static class Birds extends Animal { public void fly() { System.out.prin原创 2020-09-12 16:04:43 · 4889 阅读 · 4 评论 -
HashMap扩容后,元素是如何重新分布的
上文回顾在上文深入源码分析HashMap到底是怎样将元素put进去的我们着重分析了无参构造函数是如何创建map对象和HashMap是如何将第一个元素put进table的。此篇重点这篇我们将逐行代码分析1、有参构造函数是如何创建map对象的2、当元素增多导致扩容之后,元素是如何重新分布的同样,为了方便读者复盘,我截取源码是尽量将行号带上。jdk版本还是1.8结构图再重复一遍,HashMap的底层数据结构为数组+链表+红黑树的结构,放一个HashMap的结构示意图,有个大致印象。解剖思路原创 2020-09-10 11:39:08 · 6727 阅读 · 8 评论 -
深入源码分析HashMap到底是怎样将元素put进去的
说明此次深入源码解剖是为了搞明白几个问题1、HashMap是如何初始化的2、HashMap的扩容机制是怎样的3、元素是put进HashMap的,具体位置在哪(重难点)4、扩容后,元素是如何重新分布的(重难点)注:为了方便读者复盘,我截取源码时会将源码行号也带上。jdk版本:1.8在深入源码之前,应该先有个大致的了解,在JDK8里面,HashMap的底层数据结构已经变为数组+链表+红黑树的结构HashMap结构示意图数组就是源码中的table链表就是内部类Node红黑树就是内部类原创 2020-09-09 12:00:18 · 1456 阅读 · 4 评论 -
HashMap的resize()方法注释
/** * Initializes or doubles table size. If null, allocates in * accord with initial capacity target held in field threshold. * Otherwise, because we are using power-of-two expansion, the * elements from each bin must either stay at s.原创 2020-09-04 16:46:15 · 266 阅读 · 0 评论 -
StringBuffer.append(str)之OutOfMemoryError打破砂锅问到底
众所周知StringBuffer是安全的,而StringBuilder是不安全的,他们都有append方法,但具体实现细节你了解过吗?为什么有时候用着用着就OutOfMemoryError,在哪报的以StringBuffer.append(str)为例上图可见,线程安全是因为synchronized,正真的实现调用的是父类犯法super.append(str)父类核心方法ensureCapacityInternal确保容量足够,是怎么确保的呢?ensureCapacityInternal(in原创 2020-09-02 10:55:26 · 1571 阅读 · 0 评论 -
Integer == 与 eques的坑以及避免NEP
先看一段代码 public static void main(String[] args) { Integer a = 100, b = 100, c = 600, d = 600; System.out.println(a == b); System.out.println(c == d); }结果是查看源码得知,以上四个变量都...原创 2019-12-25 15:56:56 · 666 阅读 · 0 评论 -
”准备用HashMap存1w条数据,构造时传10000会触发扩容吗?“
构造10000/** * Constructs an empty <tt>HashMap</tt> with the specified initial * capacity and the default load factor (0.75). * * @param initialCapacity the initial cap...原创 2019-11-04 17:59:48 · 1677 阅读 · 0 评论 -
java的hashmap,如果确定只装载100个元素,new HashMap(?)多少是最佳的,why?
问题来源美团CRM后端团队:https://www.iteye.com/topic/1134016刚学java萌新一看:只装载100个元素,本着厉行节约的原则,直接给100不就行了一年java菜鸟一看:有坑……好像扩容因子是0.75,应该是100/0.75两年java初级一看:想坑我~ tableSizeFor,所以最好应该是128~三年java码农一看:还是太年轻~其实问的就是Hash...原创 2019-11-04 17:45:03 · 2450 阅读 · 0 评论 -
面试官请不要再问我mysql联合索引失效、有效情况了
版本:5.5.18.1联合索引建立情况:查询条件顺序和联合索引一样EXPLAIN SELECT * FROM t_cmp_mission WHERE companyID = "" AND isFinish ="" AND missionType ="" AND creTm = "";查询条件顺序和联合索引顺序完全相反EXPLAIN SELECT * FROM t_cmp_mis...原创 2019-10-25 17:55:21 · 1493 阅读 · 3 评论 -
面试官请不要再问我StringBuffer与StringBuilder的区别了,源码讲你你听
StringBuffer类的定义——重点final,说明很多性质和String类似不可变继承自AbstractStringBuilderpublic final class StringBuffer extends AbstractStringBuilder implements java.io.Serializable, CharSequence{……无参构造函数,潜台...原创 2019-10-12 17:56:53 · 201 阅读 · 0 评论