问题:
Java基础
- java集合的数据结构,你使用的了解。
- hashMap的底层数据结构是怎样的?
- hashmap构建的时候有什么参数,比如构造因子,构造因子起的什么作用,扩容因子。
- 怎么解决hash冲突?
- 往hashmap填充很多数据比如几百万的数据量,你觉得会发生什么情况?我们在业务当中应当注意什么。
- 红黑树有什么特性,为什么要使用红黑树替换链表。
- 往红黑树插入数据的时间复杂度是多少。
- hashtable和concurrenthashmap说说你的了解。
- Node加锁和分段加锁的区别,给Node加锁有什么好处
多线程
- volatile的作用有哪些。
- volatile是线程安全的吗?
- synchronized的加锁原理。
- 轻量级锁你的理解。
- reentrendtlock原理是什么。
- 造成死锁的原因有哪些?怎么避免死锁?
- 在实际应用编程当中如何避免出现死锁的情况。
- synchronized 和 ReentrantLock 区别是什么?
- 加锁为什么一定要加操作时间?
框架
- MyBatis的工作原理是什么。有阅读过源码?用到了什么设计模式。
- SpringBoot的核心工作原理是什么?或者说SpringBoot主要解决了什么问题?
数据库
- MySQL分页查询,第一页和最后一页查询有什么区别
- 聚族索引说一说
- 主键生成策略是什么
- uuid适合做主键吗?
- 自增的目的是什么?
- MySQL的隔离级别
- Spring的事务传播机制有了解过吗?
- 你在哪些项目中使用过Redis。
- 存流水号的目的是什么,为什么不适用数据库呢?为什么利用redis快的特性,你有多大的数据量。10几万的数据量为什么不适用数据库呢?万一他丢失了流水号呢?
- 你了解redis的哪一块呢?(Redis的持久化)
- 10m大小的String,存储成文本形式会有什么问题?
- Redis分布式锁讲讲
- 哨兵模式的原理是什么
项目
- 你在项目中扮演的角色,干了些什么
- 你是如何做幂等校验的。
- 你了解哪些kafka特性。(消费者组,答得乱七八糟)
- 每日交易数据核对,是怎么核对的。(两个字段合成一个字段)比对两个数据源是吧?怎么去比对呢?怎么去注重他的效率?
- 给你一个场景,两张一亿数据量的表,只有两个字段,你要去比较两张表,怎么比较效率可以更高。这么的数据量就不能使用数据库去比较了,要使用离线平台去比较。bitmap有了解过吗?
- 你使用过Hadoop离线平台,主要用来是做什么的。
网络
- TCP三次握手介绍一下。(没有条理和逻辑,堪称糟糕)
- 为什么需要四次挥手才能终端连接。
- Http的head的设置
- Http的get,post区别
- Https有了解吗?常见的加密算法有哪些?
- 怎么辨别请求的来源方?
- sessionid,cookie可以伪造的,如何防止伪造。
反问?
我是社招,为什么邮件是校招。
技术栈 开发加测试总共是1400多人。互联网公司,SSM,关注高可用。
复盘:
往hashmap填充很多数据比如几百万的数据量,你觉得会发生什么情况?我们在业务当中应当注意什么。
- 首先考虑存储这么多数据,内存有没有足够的空间存储,会不会引发虚拟机管理的空间溢出。
- hashmap集合的初始容量是16,当使用量超过加载因子时,会触发扩容。加载因子默认值是0.75。hashmap扩容会涉及拷贝原有的键值对,重新hash等操作,会影响集合的正常使用。如果要插入百万数据,一定要提前规划好hashmap的集合大小,避免扩容情况的发生。
给你一个场景,两张一亿数据量的表,只有两个字段,你要去比较两张表,怎么比较效率可以更高。这么的数据量就不能使用数据库去比较了,要使用离线平台去比较。bitmap有了解过吗?
bitmap
https://blog.csdn.net/rlnLo2pNEfx9c/article/details/84207497?
bitmap原理: 原本是用一个字节32位表示一个整数,现在使用一个位表示一个数,相比于原来缩小了32倍。它是用一位表示一个数是不是存在的。
适用场景: 判断一个数是不是在一个海量数据集中存在。
实现过程: 原数据量是N,建一个int[N/32+1] bm的数组。遍历整个数据量,对数做整除32得到数组得下标,得知应该存放在哪个数组位置下。与做32的求余运算,得知这个数在这个位置下的哪一位。
写入数据是把这个数对应的位变成1。判断是否存在是看这个数对应的位是不是1。