栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

社招公司面试题

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

社招公司面试题

题目都是从牛客上找的,CSDN 找的答案。

目录

一. 字节一年社招

1. 用过哪些Java容器?Which kind of containers of Java you hava been used?

2. ArrayList 和 LinkedList 特点及各自应用场景?

3. TreeMap

怎么按照自己想要的顺序排序


一. 字节一年社招

先来个一个年字节的社招练练手

1. 用过哪些Java容器?Which kind of containers of Java you hava been used?

            这个范围很广泛,一般来说来分为 Collection 和 Map 两大类。只针对数据进行存储的Collection, 和键值对存储的 Map, 最常用的集合 ArrayList,和LinkedList, 如果在多线程的情况下可以使用 Vector, 或者直接使用Collecitons 中的线程安全的方法。如果不要求顺序和重复值可以使用Set ,常用到的有 HashSet 和 TreeSet。队列我接触到基本上就是比如生产者消费者模式中这些固定的写法,线程池之类的队列。Map 常见的有 HashMap 和 TreeMap。

            Well, Containers of Java is very wide. generally, It can be divided into Collection and Map. Collection store data without index, Map store key-value pairs. The most common use of collection,such as ArrayList, and LinkedList. Also use vectors if you have to store in multiple threads, or simply use the thread-safe method in Collecitons'. Set can be used if sequential and duplicate values are not required. Such as HashSet and TreeSet are most common I haved used to define in my program. Queue, I've been use queue in that situation,basically like the producer consumer model, thread pools and things like that. Common use of Map like HashMap and TreeMap.

2. ArrayList 和 LinkedList 特点及各自应用场景?

        ArrayList 采用数组进行存储,特点是存储访问快,插入慢,LinkedList 采用链表的方式进行存储,特点是访问慢插入快。

从数据结构实现上讲,ArrayList 是动态数据的数据结构实现,而 LinkedList 是双向链表的数据结构实现。

从随机访问效率上讲,ArrayList 比 LinkedList 在随机访问的时候效率要高,因为 LinkedList 是线性的数据存储方式,所以需要移动指针从前往后依次查找。

从增加和删除效率上讲,在非首尾的增加和删除操作,LinkedList 要比 ArrayList 效率要高,因为 ArrayList 增删操作要影响数组内的其他数据的下标。

综合来讲,在需要频繁读取集合中的元素时,更推荐使用 ArrayList,而在插入和删除操作较多时,推荐使用LinkedList。

3. TreeMap 怎么按照自己想要的顺序排序

        一般来说有两种方式,一种是根据 TreeMap 中 key 的字典顺序来排序,默认排序规则对应底层数据结构红黑树的中序遍历,另一种可以自定义排序规则,实现 Comparator接口, 有一个可能会遇到的坑是如果使用默认排序且 key 是数字字符串,比如 "1","3","21", 这样,如果想按照数字大小排序需要把 key 改成Long 类型。       

        3.1加餐:这里记录一下什么玩意是红黑树,一直也没有搞明白这个红黑树是干啥的。

1.  平衡树介绍  

    红黑树的本质是对概念模型: 2-3-4树 的一种实现,2-3-4树是阶数为 4 的 B 树,B 树,全名 Balance Tree, 平衡树。 这种结构主要用来做查找。 最重要的特性在于平衡,这样使我们能够在最坏情况下也保持 O(LogN) 的时间复杂度实现查找(一个不具备平衡性的查找树可能退化成单链表,时间复杂度会到 O(N))。 平衡的定义是说从空链接到根节点的距离。

        由于 2-3-4 树是一颗阶数为 4 的 B 树,所以会存在一下节点:

        2节点:包含1个元素的节点,有2个子节点

        3节点:包含2个元素的节点,有3个子节点

        4节点:包含3个元素的节点,有4个子节点

2节点存放着一个key[X] , 两个指针,分别指向小于X 的子节点和大于X 的子节点;3节点中存放在两个 key[X,Y], 三个指针,分别执行小于X 的子节点,介于 X,Y 之间的子节点和大于 Y 的子节点; 4节点一次类推。

234树节点至少有1个元素,符合二叉查找树的性质,即父节点大于左子节点,小于右子节点,但对于234 有多个元素时,每个元素必须大于它左边的和它的左子树中元素。

2.  234树到红黑树的转化

        红黑树是对概念模型234树的一种实现,由于直接进行不同节点间的转化会造成较大的开销,所以选择以二叉树为基础,在二叉树的属性中加入一个颜色属性来表示234树种不同的节点。

        234树种的2节点对应着红黑树中的黑色节点,而234树中的非2节点是以红节点+黑节点的方式存在,红节点的意义是与黑色父节点结合,表达着234书中的3,4节点。(看到这里好像刚明白存在几个子节点就叫几节点,好尴尬。)

        我们先看234树到红黑树的节点转换。2节点直接转化为黑色节点;3节点这里可以有两种表现形式,左倾红节点或右倾红节点。而4节点被强制要求转化为一个黑父带着左右两个红色儿子。 

图解:什么是红黑树? - 知乎

4. 说下 TreeMap 和 LinkedHashMap

5. 说下 HashMap

6. ConcurrentHashMap 怎么实现的, 1.7和1.8分别说下

7. ConcurrentHashMap 怎么取的 size 值

8. 一个非常多元素的HashMap , rehash 非常耗时,所以需要在他rehash 过程中还能get、put ,你有什么解决方案或者思路,谈谈你的理解?

9. 怎么防止恶意请求刷接口

10. 说下 ES 的倒排索引

11. 那 ES 怎么切词的呢,有写过切词插件吗?

12. 你在项目中用Redis 的场景

13. 说下 Redis 有哪些数据类型

14. 说说你在项目中怎么用的这些数据类型

15. 一次请求拿出来所有的数据有什么问题,那怎么改进?

16. Redis 怎么分片的

17. Redis 的删除策略

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/855257.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号