javaa

122 阅读23分钟

怎么设计自己的系统框架

排序算法 垃圾回收机制了解吗 hashmap的原理 算法题:有100瓶液体,其中一瓶是毒药,一只小白鼠喝到毒药一周后就会死亡。请问给我一周时间,至少需要多少只小白鼠能确定哪瓶是毒药?(把瓶子序号变成二进制) 1.hashmap中如何计算下标 .hashset的内容是什么 2 http和https,https加密过程,加密密钥怎么来,对称加密密钥哪里生成 3.事务是什么,隔离级别,每种隔离级别解决了什么问题 4.索引有哪些,数据结构是什么,区别是什么 我2016先在蚂蚁实习了将近三个月时间太短,还是有点虚的,然后去了我现在的老东家,三年多工作经验
数据结构与算法 基础就像“木桶效应”的短板,决定了能装多少水。 此外,在正式决定看机会之前,我给自己列一个提纲,主要包括Java要掌握的核心要点,有不懂的就查资料搞懂。 1给了长度为N的有重复元素的数组,要求输出第10大的数。典型的TopK问题,快排算法搞定。 算法题要注意的是合法性校验、边界条件以及异常的处理。另外,如果要写测试用例,一定要保证测试覆盖场景尽可能全。加上平时刷刷算法题,这种考核应该没问题的。 1 怎么让HashMap变得线程安全?

  1. 监控系统怎么做的,分为哪些模块,模块之间怎么交互的?用的什么数据库?

  2. 订单表有做拆分么,怎么拆的?

  3. 水平拆分后查询过程描述下

  4. 如果落到某个分片的数据很大怎么办?

  5. 哈希取模会有什么问题么?

  6. 主键索引和普通索引的区别?

  7. 你们系统目前的瓶颈在哪里?

  8. 你打算怎么优化?简要说下你的优化思路

  9. 怎么理解微服务?

  10. CMS GC有什么问题?

  11. 怎么避免产生浮动垃圾?

  12. 强制young gc会有什么问题?

  13. 知道G1么?

  14. 回收过程是怎么样的?

  15. 你提到的Remember Set底层是怎么实现的?

  16. Java中的HashMap、TreeMap解释下?

  17. TreeMap查询写入的时间复杂度多少?

  18. HashMap多线程有什么问题?

  19. CAS和synchronize有什么区别?都用synchronize不行么?

  20. 如果要保证线程安全怎么办?(ConcurrentHashMap)

  21. ConcurrentHashMap怎么实现线程安全的?

  22. get需要加锁么,为什么?

  23. 在多核CPU下,可见性怎么保证?

  24. 聊项目,系统之间是怎么交互的?

  25. 系统并发多少,怎么优化?

  26. 给我一张纸,画了一个九方格,都填了数字,给一个MN矩阵,从1开始逆时针打印这MN个数,要求时间复杂度尽可能低

  27. 可以先说下你的思路(想起来了,说了什么时候要变换方向的条件,向右、向下、向左、向上,依此循环)

  28. 数据怎么流转的? 链路追踪的信息是怎么传递的?

  29. 跳表的查询过程是怎么样的,查询和插入的时间复杂度?

  30. 红黑树了解么,时间复杂度?

  31. 既然两个数据结构时间复杂度都是O(logN),zset为什么不用红黑树

  32. 那我们做一道题吧,数组A,2*n个元素,n个奇数、n个偶数,设计一个算法,使得数组奇数下标位置放置的都是奇数,偶数下标位置放置的都是偶数

  33. 下一个奇数?怎么找?

  34. 你这样时间复杂度有点高,如果要求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. 什么是索引覆盖?
  2. 什么时候需要自定义类加载器? 1手写一个对象池

hashmap 的原理
Java 的垃圾回收,gc 算法

  • 进程阻塞、内存泄露怎么排查和解决 HashMap、hashtable、concurrenthashmap 的区别
  • Linux CPU 100% 的时候怎么排查
  • Linux 大文件怎么查找
  • Redis 的持久化方式 十亿个数的集合和10w个数的集合,如何求它们的交集。集合的数字不重复 可达性分析算法中根节点有哪些? 怎样排查 CPU 彪高、内存彪高?
  1. 以下代码题输出什么?(巨坑,输出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 为什么不用红黑树 
跳表的查询过程是怎么样的,查询和插入的时间复杂度? 

做题:数组 A2*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+树除了高低小查询快,还有什么好处? 为什么用红黑树 反转链表变体

给定一个链表头节点,和一个leftright 反转leftright之间的值。 ,让你实现一个 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, 125110795059} 输出:  6560 买进,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.操作系统的页面置换[算法]详细讲了一下