怎么设计自己的系统框架
排序算法
垃圾回收机制了解吗
hashmap的原理
算法题:有100瓶液体,其中一瓶是毒药,一只小白鼠喝到毒药一周后就会死亡。请问给我一周时间,至少需要多少只小白鼠能确定哪瓶是毒药?(把瓶子序号变成二进制)
1.hashmap中如何计算下标 .hashset的内容是什么
2 http和https,https加密过程,加密密钥怎么来,对称加密密钥哪里生成
3.事务是什么,隔离级别,每种隔离级别解决了什么问题
4.索引有哪些,数据结构是什么,区别是什么
我2016先在蚂蚁实习了将近三个月时间太短,还是有点虚的,然后去了我现在的老东家,三年多工作经验
数据结构与算法
基础就像“木桶效应”的短板,决定了能装多少水。
此外,在正式决定看机会之前,我给自己列一个提纲,主要包括Java要掌握的核心要点,有不懂的就查资料搞懂。
1给了长度为N的有重复元素的数组,要求输出第10大的数。典型的TopK问题,快排算法搞定。
算法题要注意的是合法性校验、边界条件以及异常的处理。另外,如果要写测试用例,一定要保证测试覆盖场景尽可能全。加上平时刷刷算法题,这种考核应该没问题的。
1 怎么让HashMap变得线程安全?
-
监控系统怎么做的,分为哪些模块,模块之间怎么交互的?用的什么数据库?
-
订单表有做拆分么,怎么拆的?
-
水平拆分后查询过程描述下
-
如果落到某个分片的数据很大怎么办?
-
哈希取模会有什么问题么?
-
主键索引和普通索引的区别?
-
你们系统目前的瓶颈在哪里?
-
你打算怎么优化?简要说下你的优化思路
-
怎么理解微服务?
-
CMS GC有什么问题?
-
怎么避免产生浮动垃圾?
-
强制young gc会有什么问题?
-
知道G1么?
-
回收过程是怎么样的?
-
你提到的Remember Set底层是怎么实现的?
-
Java中的HashMap、TreeMap解释下?
-
TreeMap查询写入的时间复杂度多少?
-
HashMap多线程有什么问题?
-
CAS和synchronize有什么区别?都用synchronize不行么?
-
如果要保证线程安全怎么办?(ConcurrentHashMap)
-
ConcurrentHashMap怎么实现线程安全的?
-
get需要加锁么,为什么?
-
在多核CPU下,可见性怎么保证?
-
聊项目,系统之间是怎么交互的?
-
系统并发多少,怎么优化?
-
给我一张纸,画了一个九方格,都填了数字,给一个MN矩阵,从1开始逆时针打印这MN个数,要求时间复杂度尽可能低
-
可以先说下你的思路(想起来了,说了什么时候要变换方向的条件,向右、向下、向左、向上,依此循环)
-
数据怎么流转的? 链路追踪的信息是怎么传递的?
-
跳表的查询过程是怎么样的,查询和插入的时间复杂度?
-
红黑树了解么,时间复杂度?
-
既然两个数据结构时间复杂度都是O(logN),zset为什么不用红黑树
-
那我们做一道题吧,数组A,2*n个元素,n个奇数、n个偶数,设计一个算法,使得数组奇数下标位置放置的都是奇数,偶数下标位置放置的都是偶数
-
下一个奇数?怎么找?
-
你这样时间复杂度有点高,如果要求O(N)要怎么做 为什么B+树要这样设计? 奇数升序偶数降序的数组 将其按从小到大排序为单项链表: 思路:将奇数项和偶数向分别拿出来 将偶数项正序 然后将两个数组采用归并的方式排到数组中。 后端怎么处理前端传过来的文件 GC机制(GC算法,分代收集,收集器,STW) 给定一个数组a[N]和一个整数P,求a[i] + a[j] + a[k] =P,保证i<j<k 身份证如何有效建立索引 写一个分页查询 两个人抛硬币,先抛的人赢的概率 单链表排序,奇数位升序,偶数位降序 学生表 Student (S#,Sname,Sage,Ssex),课程表 Course (C#,Cname),成绩表SC (S#,C#,score),查询平均成绩大于 60 分的同学的学号和平均成绩 Redis常用数据结构及底层数据结构实现 如何实现本地缓存?请描述一下你知道的方式 降低内存占用 算法题:蛇形打印二叉树 算法题:给出[[1, 2], [3, 5], [8, 8], [15, 16], [32, 38]],求间隔
算法题:给出两个升序数组A、B和长度m、n,求第k个大的数
算法题:给出数组A,长度为n,数组中元素的值位于[0, n - 1]之间,求是否有重复元素
算法题:二叉树的左视图 算法题:面值[1,3,4]的硬币,输入n,输出最少组成n的硬币个数以及组成的硬币
算法题:给定正整数n,问1-n组成的二叉搜索树有多少 进行一次查找的话 haspmap 的时间复杂度是多少?
给你一个算法你看一下,有一个无限长的整型数组,从小到大排序,非递增。那么怎么找到数组中一个 key?
B+树性质
栈和队列,怎么用栈实现队列?
垃圾回收算法,复制算法中存活对象太多怎么办?
算法:给一个数组,使数组奇数在前半段,偶数在后半段,在原数组上操作
算法题目:按照之字形分层遍历二叉树,要求bug free,并且构造二叉树进行测试。
算法题:奇数位递增偶数位递减的数组,排序
写sql,group by的查询?
- 什么是索引覆盖?
- 什么时候需要自定义类加载器? 1手写一个对象池
hashmap 的原理
Java 的垃圾回收,gc 算法
- 进程阻塞、内存泄露怎么排查和解决 HashMap、hashtable、concurrenthashmap 的区别
- Linux CPU 100% 的时候怎么排查
- Linux 大文件怎么查找
- Redis 的持久化方式 十亿个数的集合和10w个数的集合,如何求它们的交集。集合的数字不重复 可达性分析算法中根节点有哪些? 怎样排查 CPU 彪高、内存彪高?
- 以下代码题输出什么?(巨坑,输出100,从泛型+向上转型+map+equals原理上想)
Map<Short, String> map = new HashMap<>();
for(short i = 0; i <100; i++)
{
map.put(i, String.valueOf(i));
map.remove(i-1);
}
System.out.println(map.size());
1. 算法:手写jdk中的优先级队列 PriorityQueue(最大堆)
1 剑指offer62:圆圈剩下的数字
1. 写一个快排
1. 给出一个数组nums,一个值k,找出数组中的两个下标 i,j 使得 nums[i] + nums[j] = k. 2种解法,排序数组+双指针o(n)遍历或使用HashMap额外存储空间。
1. 说说操作系统内存模型不连续空间分配,说说分段,分页,虚拟内存,页淘汰算法....
1. 手撕一个阻塞队列,生产者生产0~100的随机数,消费者消费后将其存储到一个list,需要保持list中元素保持递增。(信号量+线程安全)
1. 说说hashmap的resize死循环
1. 说说hashtable和hahsmap区别,说说copyOnwriteArrayList以及他们分别采用的并发修改当然(fast-fail,fast-safe)
- 7.事务隔离
- 10.编程:快排
无锁队列实现细节
算法部分:
(1)给一个正整数,判断是否是2的n次幂,他说用最快的方式不要递归? 肯定是运算的方式,你能想到的数的运算有哪些,除了加减乘除? 这个地方讲了很多,运算太多了,但是感觉不是面试官想要的,我最后把二进制的移位都说了出来,才get到他的点,问还有些什么,他最后问我怎么没提异或,并且出了几个二进制数让我异或算结果
(2)给一个数组,数组里面有rgb三种数,数量和顺序完全无序,给一个算法按照他想要的r都在前面,g都在中间,b都在后面,用移动次数最少的算法进行计算,写算法 这个地方一直叫我优化再优化 了,
银行家算法了解么?
算法部分:
(1)有很多纸盒子,每个纸盒里里面套着纸盒子,其中有一个有硬币,怎么把硬币找出来,写算法
(2)树的遍历方法有什么,写一个二叉树前序遍历算法
(1)寻找最近的父节点,给了两个例子,差不多leetcode中等难度
(2)开放性的问题,猫抓老鼠,猫在圆型中间,老鼠在圆的周长上,速度相同,问猫能不能抓到老鼠
Java的深浅拷贝(clone方法)\
Hashtable和HashMap区别,说下HashMap结构
**算法:**\
(A,B)(A,C)(B,D)(D,A)判断是否有循环引用,提示用拓扑排序(尴尬,没看过,换了超简单的第二题做出来了)\
蛇形打印二叉树
主键索引查询和非主键索引查询区别\
b+树好处\
一致性哈希\
说一下ConcurentHashMap\
设计LRU\
数组找是否存在和为M的两个数
- 内存泄露原因,举例子,怎么排查,OOM异常
- 集合框架源码,concurrenthashmap, hashmap linkedhashmap实现L _RU
写双重检查锁单例模式
- 算法:手写jdk中的优先级队列 PriorityQueue(最大堆)
- 剑指offer62:圆圈剩下的数字
- 写一个快排
- 给出一个数组nums, -个值k,找出数组中的两个下标i, j 使得nums[i] + numsj]= k 2种解法,排.数组+双指针o(n遍历或使用HashMap额外存储空间。
如果有10w请求插入Redis,如何优化?用户量如何统计的
- 手撕一个阻塞队列,生产者生产0~ 100的随机数,消费者消费后将其存储到一个list, 需要保持list中元素保持递增。(信号量+线程安全)
- 说说hashmap的resize死循环
- 说说hashtable和hahsmap区别,说说copyOnwriteArrayL ist以及他们分别采用的并发修改当然(fast-fail,fast-safe)
- 在用户登录的时候,由于HTTP是无状态的如何识别不同的用户(session或者cookie),然后让说一下session和cook各有什么优缺点。
- 单点登录的问题如何解决(服务器集群的情况下,用户如何在一-台服务器上登录,访问其他的服务器就不需要登录了) ?
答:服务器集群之间厂播session厂播或者使用Redis共享session。
- 为什么Redis他是通过hashtable实现的,但是它的扩容的时候并没有卡顿?
- 为何Redis是单线程的还是这么快?
- 商城如果有用户注册的模块,那么在用户注册成功之后一般会返回一个邮箱连接,然后用户点击连接跳转到商城主页。现在要求连接的有效时间为30分钟,这种服务如何保证?
答:可以在数据表中增加一个超时时间的字段,用户点击连接的时候判断是否已经超时,在进行商品展示的时候,如果一个商品有不同的分配,那么可能会涉及到有多级分类的问题。
- 如何涉及数据库表,来实现商品的多级分类? 。
- 两个字符串的最大子序列问题。
## 字节跳动二面
- 对于你的商城项目,如果对于同一个分类有多个卖家,如何设计数据表?
- 对于高并发的系统,如何设计架构才能避免瞬间数据库收到瞬间高流量的冲击?
- 如果你用Redis实现的话,可能会出现商品超卖的问题,那么你是如何结果商品超卖问题的?
- 一般在支付的过程中,用户支付、账户被冻结、订单的生成、卖家库存减少、卖家收到钱,这是个一系列的过程,那么你如何设计实现分布式的事务?
字符串匹配,二叉搜索树的第K小节点,链表每隔K个节点进行翻转。
- 设计一个短连接服务\ MD5hash算法
- 两个鸡蛋问题,如果有100层楼,如何判断出恰好在第几层楼摔坏?
- 能不能推演出一个数学公式
一般情况下,我们的IP的存储都是将点十进制转化为-个长整型进行存储,如1.2.3.4–》1234,现在有一个20w行的文件,其中文件的每一行都存储了一些信息:
设计一个IPquery的服务,以最快的形式,根据我查询的IP返回用户的基本信息。(用 代码实现)
上亿级查询不同数据的怎么处理(这些数据都不在Redis缓存里)
在实践中,如何正确使用对象来减少垃圾回收造成的资源浪费?
HashMap与ConcurrentHashMap的底层实现?
HashMap与ConcurrentHashMap,是否是线程安全,Redis是不是线程安全?
最长回文串变体,给一个字符串,可以使用里面所有字符,在一次循环的限制下,找到并返回一个最长回文串
zset底层数据结构?
跳表如何插入一个值?
如何做到保证数据可靠性
Mysql:
mysql 为什么索引为什么用b+树
b+树除了高低小查询快,还有什么好处?
什么是聚集索引,什么是非聚集索引
hashMap 底层数据结构
为什么用红黑树
红黑树是平衡树吗?
如何保证hashMap线程安全?
聊聊:syn锁与ReentrantLock与volatile
操作系统:
聊聊虚拟内存,为什么要虚拟内存
计算机网络:
为什么网络要分层?
算法:
反转链表变体
给定一个链表头节点,和一个left 和right 反转left和right之间的值。
0.HashMap的源码,实现原理,JDK8中对HashMap做了怎样的优化。
拉链结构,数组+链表,原理是hash找数组,冲突后拉链表,1.8优化为会进化成红黑树提高效率,并且使用2^n来做容量值
对hash算法类型的了解(安全哈希和非安全哈希如mermerhash)
对hashMap实现的了解:取hashcode,高位运算,低位取模
一致性hash(处理了什么问题,在什么场景用到)
红黑树简单描述
流量黑洞如何产生的
3.如何设计双11交易总额面板,要做到高并发高可用。
对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。
应尽量避免在 where 子句中使用!=或<>操作符,否则引擎将放弃使用索引而进行全表扫描。
尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型,这会降低查询和连接的性能,并会增加存储开销。这是因为引擎在处理查询和连接时会逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了。
任何地方都不要使用 select * from t ,用具体的字段列表代替“*”,不要返回用不到的任何字段。
避免频繁创建和删除临时表,以减少系统表资源的消耗。诸如此类,等等等等..
一枚硬币不均匀,如何把他设计成公平硬币(拒绝采样) 这个题留给你们自己思考,发散一下思维,毕竟谁还没被智力题欺负过呢!
五、算法及数据结构:
堆排序建堆及排序过程
这里只简单的提一下吧 建堆 从第一个非叶子结点开始向下交换(即每次调整都是从父节点、左孩子节点、右孩子节点三者中选择最大者跟父节点进行交换(交换之后可能造成被交换的孩子节点不满足堆的性质,因此每次交换之后要重新对被交换的孩子节点进行调整)。有了初始堆之后就可以进行排序了) 排序 排序过程为取出堆顶元素的操作,实现细节(取出堆顶元素与堆尾元素交换,将堆顶元素向下调整堆———在每一个调整过程中当不向下调整时即为调整结束)。取出的顺序为先第一个非叶子结点,第二个非叶子结点…一直到堆顶
这里还问了一下堆调整的时间复杂度,关于这个也不赘述了
手撕:
最长无重复子串
思路与解法 思路1: 暴力法,实际解题中不会使用暴力法,这并不代表我们可以忽略它。 索引从字符串的第一位开始,将后面的字符依次加入到 set 里面。如果 set 里面已经有了该字符,此次循环结束,内循环结束后记录 size。字符串的每一位都用这种方法去计算,得到的最大的 size 即是答案。
代码如下(不是Java的也看得懂,我进行了关键语法的注释,下同)
public int lengthOfLongestSubstring(String s) {
int maxLen = 0;
for(int i = 0; i < s.length(); i++){
// 创建一个存放字符的集合
HashSet<Character> set = new HashSet<>();
for(int j = i; j < s.length(); j++) {
// 判断集合是否存在第 j 个字符
if(set.contains(s.charAt(j)))
break;
set.add(s.charAt(j));
}
maxLen = Math.max(maxLen,set.size());
}
return maxLen;
}
复制代码
这里也只贴这一种解法吧,还有很多种有趣的解法,大伙也可以发散一下思维。
二面:1小时10分钟
项目:设计思路,遇到的最大问题,怎么保证分布式情况下主键全局唯一(项目聊了很久很久....) 场景题:大量主机向一台服务器发送消息,怎么保证性能(当时没太懂什么意思,就谈了谈io模型,被问用没用过epoll)
有32个大小相同的石头,有一把称,请问最少称多少次可以找出质量最大的石头 第二大呢 第n大呢
蛇形遍历数组
①红黑树规定,插入删除如何操作?\
②广度优先搜索用到什么数据结构?
15分钟内要能运行\
深度优先遍历,
输入:一组服务依赖关系list,('A', 'B') 表示 A 会调用 B 服务service_relations = [['A', 'B'], ['A', 'C'], ['B', 'D'], ['D', 'A']] 输出:由于存在 A - B - D - A 故存在循环依赖,返回True;反之如果不存在,返回False
1. hashmap的原理
1. 算法题:有100瓶液体,其中一瓶是毒药,一只小白鼠喝到毒药一周后就会死亡。请问给我一周时间,至少需要多少只小白鼠能确定哪瓶是毒药?(把瓶子序号变成二进制)
请写一段栈溢出、堆溢出的代码
用过哪些加密算法:对称加密,非对称加密算法;
java中常说的堆和栈,分别是什么数据结构;另外,为什么要分为堆和栈来存储数据。
TreeMap如何插入数据:二叉树的左旋,右旋,双旋;
一个排序之后的数组,插入数据,可以使用什么方法?答:二分法;问:时间复杂度是多少?
平衡二叉树的时间复杂度;
Hash算法和二叉树算法分别什么时候用;
图的广度优先算法和深度优先算法:详见jvm中垃圾回收实现;
最长不重复的连续子串
给了长度为 N 的有重复元素的数组,要求输出第 10 大的数。
TreeMap 查询写入的时间复杂度多少?
给我一张纸,画了一个九方格,都填了数字,给一个 MN 矩阵,从 1 开始逆时针打印这 MN 个数,要求时间复杂度
红黑树了解么,时间复杂度?
既然两个数据结构时间复杂度都是 O(logN),zset 为什么不用红黑树
跳表的查询过程是怎么样的,查询和插入的时间复杂度?
做题:数组 A,2*n 个元素,n 个奇数、n 个偶数,设计一个算法,使得数组奇数下标位置放置的都是奇数,偶数下标位置放置的都是偶数。先说下你的思路
做题:手写一个对象池
算法题:滑动窗口
说一下HashMap的实现,扩容机制,扩容时如何保证可操作?
两线程对变量i进行加1操作,结果如何?为什么?怎么解决?
- 自我介绍
- 项目中的监控:那个监控指标常见的有哪些?
- 微服务涉及到的技术以及需要注意的问题有哪些?
- 注册中心你了解了哪些?
- Hashmap 线程不安全的出现场景
- 应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描
- SQL 索引的顺序,字段的顺序
- 查看 SQL 是不是使用了索引?(有什么工具)
- TCP 和 UDP 的区别?TCP 数据传输过程中怎么做到可靠的?
- 说下你知道的排序算法吧
- 查找一个数组的中位数?
- 负载均衡算法
- selectpol/epoll
- 算法题,最长连续相同字符的子串
- 写个题,每K个节点翻转链表
1、一堆数字,其中有一个数字的数量超过了一半,找出这个数字。
2、一个数组,只有一个数字出现奇数次,其余数字出现偶数次,求出现奇数次的数字。
3、输出数字的全排列 以看作是:第一个数字是1和其他两个数字的全排列+第一个数字是2和其他两个数字的全排列+第一个数字是3和其他两个数字的全排列。
4算法题,第一个是11/10,1/0分别代表两个字符、一个字符,判断给的一个二进制代码最后一位是否是一个字符,我以为除最后一位外,其他的只要是01/00就不合法,但其实01/00可以代表两个单字符,所以考虑的情况不全面。
5第二道算法题是判断({【】})括号字符串的合法性 是否可以用栈实现我才想起来
最长公共连续子串
- 二分查找,以及复杂度
- 常见的排序算法
- 满二叉树的高度
- 红黑树的结构
- 快速排序的时间复杂度,[冒泡排序]的时间复杂度
- 堆排序,时间复杂度
- B树,B+树
- 十亿和数找到前100个最大的,堆排序,怎么实现,怎么调整。 (A,B)(A,C)(B,D)(D,A)判断是否有循环引用,提示用拓扑排序(尴尬,没看过,换了超简单的第二题做出来了) 蛇形打印二叉树
b+树好处 一致性哈希
10.让写一下链表实现插入方法(顺序不在这里,忘了在哪了,突然想起来了),查询效率呢,怎么优化
11.写个算法,给一个表达式的字符串(+-*/),算出字符串的结果,没考虑括号说了下括号的思路 说一下ConcurentHashMap 设计LRU 数组找是否存在和为M的两个数 linux 搜索出 linux 中log 文本中出现次数最多的 IP,并且给出次数 给你一个算法你看一下,有一个无限长的整型数组,从小到大排序,非递增。那么怎么找到数组中一个 key? 说一下 hashmap 这个数据结构? HashMap与ConcurrentHashMap的底层实现? HashMap与ConcurrentHashMap,是否是线程安全,Redis是不是线程安全? 进行一次查找的话 haspmap 的时间复杂度是多少? HashMap,为什么使用红黑树 八大排序算法要准备好
Hashtable和HashMap区别,说下HashMap结构
为什么用b+树 b+树除了高低小查询快,还有什么好处? 为什么用红黑树 反转链表变体
给定一个链表头节点,和一个left 和right 反转left和right之间的值。 ,让你实现一个 hashmap 机会如何设计 红黑树是平衡树吗? 如何保证hashMap线程安全? 说说你知道的HashMap解决哈希冲突的方法 最长回文串变体,给一个字符串,可以使用里面所有字符,在一次循环的限制下,找到并返回一个最长回文串 Jdk1.7之前HashMap怎么扩容的?什么时候扩容: HashMap 是线程安全的吗?为什么?
然后说一说 mysql 的索引结构吧 怎么建立索引
(1)第一道题: mysql 订单表有几个属性:订单 id,用户 user_id、下单日期 date(精确到天)等,请问索引怎样建立 a. 查询某个用户的所有订单 b. 查询某一天的所有订单 c. 查询某一天某个用户的所有订单 (2)第二道题: 10G 文件,每一行一个 uint32 数字。有一台 1G 内存的机器 - A. 找出最大的 k 个数 - B. 找出重复数字 (3)第三道题: 我手中有一堆扑克牌, 但是观众不知道它的顺序。 第一步, 我从牌顶拿出一张牌, 放到桌子上。 第二步, 我从牌顶再拿一张牌, 放在手上牌的底部。 第三步, 重复第一/二步的操作, 直到我手中所有的牌都放到了桌子上。 最后, 观众可以看到桌子上牌的顺序是:13\12\11\10\9\8\7\6\5\4\3\2\1 请问, 我刚开始拿在手里的牌的顺序是什么?用代码实现以下
第一道是遍历二叉树的数据生成数组
第二道是实现链表并且完成数据的倒置,我还是不会(心态崩了)。
为什么是B+树---B树和B+树的区别
算法题:滑动窗口
镜像二叉树 …二叉树最远距离
手写项目中某个模块代码。
链表:反转单链表---复杂链表复制。
64匹马,8个赛道,找最快的4匹马
给出两个升序数组A、B和长度m、n,求第k个大的
给出数组A,长度为n,数组中元素的值位于[0, n - 1]之间,求是否有重复元素
场景题目:设计一个短域名服务:短信存不了太长网站,需要弄成短域名,你该如何设计一个服务,可以为全国的网址服务。
哪些工作,难点(
说一下hashmap这个数据结构? 进行一次查找的话haspmap的时间复杂度是多少?
算法有一个无限长的整型数组,从小到大排序,非递增。那么怎么找到数组中一个key?
7.算法题
实现该方法,15分钟
public void printComposite(int[] array, int n) {…}
//给定一个array={1,2,3,4,5}
//当n=2, 输出[1,2],[1,3],[2,3]…
//当n=3, 输出[1,2,3],[1,2,4],[2,3,4]…
6.编程题:实现blockingqueue的put和get方法
场景题目:给了一个业务场景,大体意思是让设计一个异步导出excel的功能,如果有多个任务,如何平均分配到不同节点上
如果有大任务和小任务,希望小任务优先执行,如何设计
看过Spring的源码吗 ConcurrentHashMap的原理,为什么是线程安全的,让你设计怎么实现读写安全
红黑树的数据结构,左旋和右旋是怎样实现的?
HashMap一定用过吧?给我讲讲它的底层数据结构吧?HashTable与HashMap的区别是?
HashMap的扩容机制、详细说说put元素的过程吧
寻址算法是?
hashcode是对象原来的值吗?
为何散列表的长度是2的次方数?它的底层算法是怎样的?给我手写一下吧。
扩容的时候,Map中的元素是怎样分配到新的散列表中的?(面试官提示:红黑树中还维护着链表)
HashMap的负载因子为何默认为0.75?
什么是JVM的堆内存
翻转二叉树
顺时针打印数组
ArrayList、LinkedList和Vector的异同以及底层数据结构是?
什么是Huffman树?主要用途是?什么情况下压缩效率高?
给定一个非空字符串 s 和一个包含非空单词的列表 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。
二叉树展开为链表
TreeMap了解吗?它的底层数据结构是?
平衡二叉树
B树、B+树、B*树有了解吧?简单说说你对他们的理解
搜索旋转排序数组
正则表达式匹配
给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。
HashMap,为什么使用红黑树
1、HashMap实现原理是怎样的?
2、TreeMap实现原理是怎眼的?
3、哈希冲突
讲讲权限是什么吗,该怎么描述呢
什么是双向链表 怎么设计
本着最小化原则,你又该对这个双向链表的设计做怎样的改进
4. Java堆
Java 堆是整个虚拟机所管理的最大内存区域,所有的对象创建都是在这个区域进行内存分配。
可利用参数 -Xms -Xmx 进行堆内存控制。
这块区域也是垃圾回收器重点管理的区域,由于大多数垃圾回收器都采用分代回收算法,所有堆内存也分为 新生代、老年代,可以方便垃圾的准确回收。
这块内存属于线程共享区域。
6. 元数据区 因此可以使用 -XX:MaxMetaspaceSize来控制最大内存。
怎么判断两个单链表交叉? 比较两个链表大小,短的存到hash然后遍历长的,发现一样的就是有交叉。
面试官:不能占用额外空间的话呢? 比较两个链表大小,求长度差值,两个指针长的先前移插值,然后两个指针同步移动,遍历比较之后有相同的就结束遍历返回true,否则返回false;
64匹马,8个赛道,找最快的4匹马
给出两个升序数组A、B和长度m、n,求第k个大的
给出数组A,长度为n,数组中元素的值位于[0, n - 1]之间,求是否有重复元素
给定一个数组代表股票每天的价格,请问只能买卖一次的情况下,最大化收益是多少 输入: {100, 80, 120, 130, 70, 60, 100, 125,110,79,50,59} 输出: 65(60 买进,125 卖出)
快速排序时间复杂度以及时间复杂度在什么情况下会变差
数据库索引的底层实现(B+树)
HashMap和ConcurrentHashMap的区别
算法题:最长不重复字串(HashTable,O(N))
二叉搜索树
红黑树删除算法
算法题:有100个方格,每个上面有毒蘑菇和体力蘑菇,毒蘑菇减体力体力蘑菇加体力,当前体力是能跳到的最远距离,求是否能跳到最远方格,如果可以,求落在第100格上的最大剩余体力
服务方法调用 RPC 序列化/反序列化
10亿找Top10000,需要考虑分片,如果用最小堆需要考虑高效合并
要考虑等待时间且带有优先权的打印机,设计数据结构使打印任务高效
能直接给出这个题目的最优时空复杂度解法,面试官对你的评价会很高。
如果让你自己实现一个线程池,你会怎么实现
了解哪些加密、解密算法?
乐观锁和悲观锁,以及CAS是什么,怎么体现在HashMap中? CAS如何解决ABA问题(版本号)
二叉树的概念?红黑树又是什么,红黑树和其他平衡树的区别在哪
红黑树特性;和平衡搜索二叉树的区别;时间复杂度
如何防止sql注入
java里面hashcode的实现原理是什么,知道有哪些计算hash的算法
哈希地址冲突有哪些解决方式
springcloud,注册中心原理,配置中心原理,dubbo服务发现,熔断限流。
分库分表的话查一条数据怎么查
SQL题(有一张考试分数记录表exam,包含字段(id,student,subject,score;)选出每个student的最高score记录,需要包含所有字段)
数据库的索引大多用的是B+树,为什么很少用B树
网络拥塞现象排查,为啥网络传递越来越快(慢开始算法)
raft原理,一致性hash算法
DNS 的过程,DNS 有什么安全问题?DNS 底层是什么(UDP,IPV4…)?DNS 会减缓访问速度吗?怎么解决?
设计题:短链接服务设计
说一下二叉树,满二叉树, bst avl b+树b树,红黑树的区别
说一下数组链表哈希表的使用场景,时间复杂度,优劣
cookie跨域
说一下xss攻击
一个长度大小为n的数组,数组中的每个元素的取值范围在[1,n],且为正整数。问:如何在时间复杂度为O(n),空间复杂度为O(1)的条件下,统计数组中不同元素出现的次数。
相交链表多种解法如何优化?
bst的第k个节点?中序遍历。
最长无重复子串?如何记忆优化,写一下后面用hashset。写了面试官不满意,问我你不是说要用hashmap优化吗
字典树(前缀树)的实现(尉★★☆☆)
一致性哈希算法的基本原理(尉★★☆☆)
奇数下标都是奇数或者偶数下标都是偶数(士★☆☆☆)
链表(顺序存储、链式存储)
队列(具体使用场景)
栈(具体使用场景)
树
堆
5、排序算法
冒泡排序(时间复杂度及稳定性)
选择排序(时间复杂度及稳定性)
插入排序(时间复杂度及稳定性)
快排(时间复杂度及稳定性)
堆排序(时间复杂度及稳定性)
算法题
手写代码设计实现通过权重获取服务器:
import java.util.ArrayList;
public class Server {
double weight;
String ip;
public Server(){}
public Server(double weight,String ip){
this.weight = weight;
this.ip = ip;
}
//实现通过权重获取服务器(不同服务器权重有可能相同)
public Server getServerByweight(ArrayList<Server> list){
//自定义方法
return null;
}
}
2、倒排索引。
3、讲讲redis里面的哈希表?
8、HashMap原理,为什么用红黑树,红黑树的特点?
9、快排时间空间复杂度,最好最坏的情况,优化方案?
5、讲一下最大堆和最小堆。
2、链表倒数第K个数。(讲思路)
3、一堆螺丝和螺母用最短时间匹配。(代码实现)
5、求抖音小视频每日点击量最高的10个。(Hash + 最小堆)
动态代理
快排
无序数组计算每个位置大于前面的多少个数字(归并排序)
查询学生成绩不及格的所有人的姓名和编号,根据这个语句,如何建立索引,为什么
redis为什么效率高 如何处理高并发
linux命令查询一个文件内出现重复最多的数字的
linux命令查询一个文件的行数
写一个题,找一个无序数组的中位数
写了个快排,然后让我找到无序数组第k大的一个数,我说先排序再找,实际上可以用快排的partition函数。
快排的时间复杂度,最坏情况呢,最好情况呢,堆排序的时间复杂度呢,建堆的复杂度是多少,nlgn。
Linux的共享内存如何实现,大概说了一下。
共享内存实现的具体步骤,我说没用过
多线程用过哪些,chm和countdownlatch用过
写一个层序遍历。
写一个插入树节点到一颗排序树的插入方法,使用递归方式找到插入位置即可。
一个有向图用邻接矩阵表示,并且是有权图,现在问怎么判断图中有没有环。
我说直接dfs走到原点即为有环 然后我说这样应该用bfs,有一次访问到原节点就是有环了。
面试官问我不用递归能不能做这个题,其实我都还没开始写。然后我就说没有思路,他提示我拓扑图。我没明白拓扑图能带来什么好处。现在一想,好像当访问过程中找不到下一个节点时就说明有环。做一个访问标记应该就可以。
第四题:一个二叉树,找到二叉树中最长的一条路径。
我先用求树高的方式求出了根节点的左右子树高度,加起来便是。
然后面试官提示需要考虑某个子树深度特别大的情况,于是我用遍历的方式刷新最大值,用上面那个方法遍历完整个树即可。
面试官说复杂度比较高,但是由于时间问题就说结束了。
写了put和get函数,进行了队头队尾操作。
算法部分:
(1)给一个正整数,判断是否是2的n次幂,他说用最快的方式不要递归? 肯定是运算的方式,你能想到的数的运算有哪些,除了加减乘除? 这个地方讲了很多,运算太多了,但是感觉不是面试官想要的,我最后把二进制的移位都说了出来,才get到他的点,问还有些什么,他最后问我怎么没提异或,并且出了几个二进制数让我异或算结果
(2)给一个数组,数组里面有rgb三种数,数量和顺序完全无序,给一个算法按照他想要的r都在前面,g都在中间,b都在后面,用移动次数最少的算法进行计算,写算法 这个地方一直叫我优化再优化,我快疯了,我说我不行要放弃了,他说你简历不是写着强烈的好奇心求知欲嘛,没事再想想,我直接笑喷了才放松了点继续想,这简直是心理战
银行家算法了解么?
算法部分:
(1)有很多纸盒子,每个纸盒里里面套着纸盒子,其中有一个有硬币,怎么把硬币找出来,写算法
(2)树的遍历方法有什么,写一个二叉树前序遍历算法
(1)寻找最近的父节点,给了两个例子,差不多leetcode中等难度
(2)开放性的问题,猫抓老鼠,猫在圆型中间,老鼠在圆的周长上,速度相同,问猫能不能抓到老鼠,这个问题我给的回答他不是很满意,我把关键点说到了但是不能用数学解释出来
索引是否能够命中相关问题 最左匹配。
spring注解、ioc AOP相关的,基本都问到了
hashmap源码 链表+数组 and so on , 对扩容和内存机制也有说
笔试题:一个链表,每K位反转
:用栈来实现队列。
算法题:二叉树最小公共祖先
二分查找
无重复元素的二分查找
含重复元素的二分查找
找第k大数
快排实现、堆实现
进阶:不用额外空间,尽可能快的找到第k大数
两个栈实现一个队列、怎么优化
滑动窗口、窗口大小
左连接、右连接
实现hashmap,怎么扩容,怎么处理数据冲突?怎么高效率的实现数据迁移?
单例模式,什么时候用到,还了解哪些设计模式,装饰者模式是什么,举例
介绍死锁和如何避免
算法题1:LRU cache (LeetCode 146)
算法题2:一个有符号的有序数组,问这些数平方之后有多少个不重复的数?(双指针)
算法题:在一个长字符串中找一个子字符串是否存在,有,返回index,没有,返回-1。子字符串要求连续,但不在乎内部字符的顺序。(滑动窗口问题)
n个人,n个座位,每个人都有自己的座位,问每个人都不坐自己座位的坐法有多少种?(动态规划,解决重复子问题,两种情况讨论)
cookie和短时cookie分别用在什么时候
堆。什么是最小堆?什么是最大堆?在堆中怎么插入一个元素?
平衡二叉树的判断。
算法是求给定数组中连续数字的最大和
数据库如何短时间高效批量插入数据
手写快排和堆排
最短路径算法
6.什么是哈希[排序]
1.三路归并[算法]实现
2.最长不重复子串长度 最长上升子序列
3.操作系统的页面置换[算法]详细讲了一下