摘要:
在Java中,HashMap的设计使其底层采用了数组+链表/红黑树的形式来存储元素。其中,数组的长度(即table长度)为什么要设置为2的n次方(2^n),有几个关键原因: 散列分布均匀性:2^n的数组长度有助于散列函数更均匀地分布键值对。当使用高质量的散列函数时,这种长度可以减少冲突的概率,从而提 阅读全文
摘要:
引言 面试题 如何在10e的数据中,检查用户是否存在? 朴素方法: 在数据库里直接查,虽然可以建索引,10亿级的数据索引树也大的不得了。这种方式会产生性能问题,造成数据库的不太有价值的负载。 select count(1) from user_info where user_id = GGJHAGJ 阅读全文
摘要:
概论 在日常开发场景中,迁移数据库是非常常见的。但是线上业务系统进行迁移,并不是见一个简单的问题,必须考虑到迁移过程中线上系统的可用性、性能等。本文针对MySQL对迁移策略进行讨论。 实现方法 思路一:binlog MySQL的binlog日志是一种二进制格式的日志,binlog记录所有的DDL和D 阅读全文
摘要:
概念 面向对象的三大特征为封装、继承、多态。其中多态指的是为不同数据类型的实体提供统一的接口,或使用一个单一的符号来表示多个不同的类型。一直都知道有这个概念,但是不清楚其背后的原理,明哥我当然要看看。 class Circle extends Graphics {} class Rectangle 阅读全文
摘要:
背景 在Java岗位的面试中经常遇到JVM调优的考题,作为技术爱好者,常考肯定是要学的嘛。 什么时候应该进行JVM调优 大多数的Java应用不需要GC调优。 大部分需要GC调优的,不是GC配置参数的问题,而是代码的问题。 在实际使用中,通过分析GC情况优化代码比优化GC参数更普遍。 GC调优是最后的 阅读全文
摘要:
数据粒度是什么? 数据粒度其实就是指数据仓库的数据单位中保存数据的细化或综合程度的级别。 数据粒度的大小带来的影响 粒度的主要问题是使数据处于一个合适的级别,粒度级别不能太高也不能太低。低的粒度级别能提供详尽的数据,但要占用较多的存储空间和较长的查询时间。高的粒度级别能够高速方便的进行查询,但不能提 阅读全文
摘要:
希望被人认可是一种本能性的欲望和冲动,如同性欲。按照欲望和冲动去生活,如同山坡上的滚石,以重力、惯性想下滚动。如果为了别人的认可,任由滚石下坡,不断地磨损自己,直至失去了自己原本的形状,那还有真正的自我吗? 真正的自由是一种把滚落下来的自己从下面往上推的态度,也就是说自由就是”被别人讨厌“。人际关系 阅读全文
摘要:
基于hash值的K-V结构数据容器。 重要计算方法 计算key的hash值 (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16) 利用hash计算tab中的位置 p = tab[i = (n - 1) & hash] 数据结构 初始化后HashT 阅读全文
摘要:
线程池的目的是通过对线程的管理,让多线程程序中的多线程便捷开发、高效运行。 线程池的存在的意义 让线程变得可重用,减小线程创建和销毁带来的消耗。 线程池中保留的可用线程,无需创建过程即可立即执行,提高响应速度。 方便线程并发数的管控,避免创建过多的线程,从而导致占用过多资源。 提供定时、定期以及可控 阅读全文
摘要:
Java中线程的状态 New:新创建对象,还没执行start()方法 RUNNABLE:就绪态和运行状态。 BLOCKED:表示线程等到获取锁时候的状态。 WAITING:处于这种状态的线程不会被分配CPU执行时间,它们要等待被显式地唤醒。 TIMED_WAITED:与TIMED_WAITED不同的 阅读全文