集合
- 集合分为两大块:java.util包下的非线程安全集合和java.util.concurrent下的线程安全集合。
List
-
ArrayList与LinkedList的实现和区别
LinkedeList和ArrayList的区别
1、数据结构不同
ArrayList是Array(动态数组)的数据结构,LinkedList是Link(链表)的数据结构。
2、效率不同
当随机访问List(get和set操作)时,ArrayList比LinkedList的效率更高,因为LinkedList是线性的数据存储方式,所以需要移动指针从前往后依次查找。
当对数据进行增加和删除的操作(add和remove操作)时,LinkedList比ArrayList的效率更高,因为ArrayList是数组,所以在其中进行增删操作时,会对操作点之后所有数据的下标索引造成影响,需要进行数据的移动。
3、自由性不同
ArrayList自由性较低,因为它需要手动的设置固定大小的容量,但是它的使用比较方便,只需要创建,然后添加数据,通过调用下标进行使用;而LinkedList自由性较高,能够动态的随数据量的变化而变化,但是它不便于使用。
4、主要控件开销不同
ArrayList主要控件开销在于需要在lList列表预留一定空间;而LinkList主要控件开销在于需要存储结点信息以及结点指针信息。
Map
-
HashMap:了解其数据结构、hash冲突如何解决(链表和红黑树)、扩容时机、扩容时避免rehash的优化
哈希表的主题是数组+链表的形式
通过对关键字进行哈希函数的映射,找到数组对应的存储位置,如果此位置的链表指向(next)为空,则增删查改只需查找一次,如果不为空,则复杂度为O(n)
-
LinkedHashMap:了解基本原理、哪两种有序、如何用它实现LRU
-
TreeMap:了解数据结构、了解其key对象为什么必须要实现Compare接口、如何用它实现一致性哈希
Set
- Set基本上都是由对应的map实现,简单看看就好
常见问题
- hashmap如何解决hash冲突,为什么hashmap中的链表需要转成红黑树?
- hashmap什么时候会触发扩容?
- jdk1.8之前并发操作hashmap时为什么会有死循环的问题?
- hashmap扩容时每个entry需要再计算一次hash吗?
- hashmap的数组长度为什么要保证是2的幂?
- 如何用LinkedHashMap实现LRU?
- 如何用TreeMap实现一致性hash?
中间件、存储、以及其他框架
Spring
- bean的生命周期、循环依赖问题、spring cloud(如项目中有用过)、AOP的实现、spring事务传播
常见问题
- java动态代理和cglib动态代理的区别(经常结合spring一起问所以就放这里了)
- spring中bean的生命周期是怎样的?
- 属性注入和构造器注入哪种会有循环依赖的问题?
Dubbo(或其他Rpc框架)
了解一个常用RPC框架如Dubbo的实现:服务发现、路由、异步调用、限流降级、失败重试
常见问题
- Dubbo如何做负载均衡?
- Dubbo如何做限流降级?
- Dubbo如何优雅的下线服务?
- Dubbo如何实现异步调用的?
RocketMq(或其他消息中间件)
- 了解一个常用消息中间件如RocketMq的实现:如何保证高可用和高吞吐、消息顺序、重复消费、事务消息、延迟消息、死信队列
常见问题
- RocketMq如何保证高可用的?
- RocketMq如何保证高吞吐的?
- RocketMq的消息是有序的吗?
- RocketMq的消息局部顺序是如何保证的?
- RocketMq事务消息的实现机制?
- RocketMq会有重复消费的问题吗?如何解决?
- RocketMq支持什么级别的延迟消息?如何实现的?
- RocketMq是推模型还是拉模型?
- Consumer的负载均衡是怎么样的?
Redis(或其他缓存系统)
- redis工作模型、redis持久化、redis过期淘汰机制、redis分布式集群的常见形式、分布式锁、缓存击穿、缓存雪崩、缓存一致性问题
常见问题
- redis性能为什么高?
- 单线程的redis如何利用多核cpu机器?
- redis的缓存淘汰策略?
- redis如何持久化数据?
- redis有哪几种数据结构?
- redis集群有哪几种形式?
- 有海量key和value都比较小的数据,在redis中如何存储才更省内存?
- 如何保证redis和DB中的数据一致性?
- 如何解决缓存穿透和缓存雪崩?
- 如何用redis实现分布式锁?
- Mysql
- 事务隔离级别、锁、索引的数据结构、聚簇索引和非聚簇索引、最左匹配原则、查询优化(explain等命令)
- 推荐文章:
- https://tech.meituan.com/2014/06/30/mysql-index.html
- http://hbasefly.com/2017/08/19/mysql-transaction/
常见问题
- Mysql(innondb 下同) 有哪几种事务隔离级别?
- 不同事务隔离级别分别会加哪些锁?
- mysql的行锁、表锁、间隙锁、意向锁分别是做什么的?
- 说说什么是最左匹配?
- 如何优化慢查询?
- mysql索引为什么用的是b+ tree而不是b tree、红黑树
- 分库分表如何选择分表键
- 分库分表的情况下,查询时一般是如何做排序的?
zk
- zk大致原理(可以了解下原理相近的Raft算法)、zk实现分布式锁、zk做集群master选举
常见问题
- 如何用zk实现分布式锁,与redis分布式锁有和优缺点
1、学过的课程(最好回答一些你学的比较好的课程)
2、简述数据库事务的概念和作用
3、简述死锁的概念
4、操作系统生产者消费者问题如何解决
5、c语言中带括号的字符串的大小
6.交换机和路由器的异同
7、OSI七层模型,TCP/IP协议
8、指针怎么用
arrarlist、linklist、vector之间的区别?抽象类与接口类的区别?如何实现一个多线程?类选择器有那些?说说折半查找?tcp、ip所用到的场景有那些?arrarlist、linklist、vector之间的区别?抽象类与接口类的区别?如何实现一个多线程?类选择器有那些?说说折半查找?tcp、ip所用到的场景有那些?
每个人都不一样,如果你有项目,按具体情况回答就行了。 第二部分:根据简历考察
大概问了我以下这么几个问题,都超级简单呐。。。。。。
1.SpingMVC的运行原理
2.从后台返回json数据用哪个注释
3.SSM和SSH的区别
4.实现多线程的方式有哪些
5.实现多线程需要继承哪个类,如果不想继承怎样实现
6.oracle数据库查询学生表中重名人数大于2的
7.hashmap和hashtable有什么区别
8.Map和List在什么场景下应用
9.接口和抽象类的区别
10.web项目后台怎样部署
最后问了职业规划 短期和长期
现在就记得这些啦都不难! 祝大家都面试顺利!
面试过程:
基本上面试官没有问太多java基础的问题,很担心会问jvm、数据结构与算法之类的问题,这些基础不是很好,也没做太多准备,问的比较多的基本上跟web项目相关的。以后重点吧自己做过的新项目重新梳理一遍,做到熟记于心。
面试官问的面试题:
1.自我介绍
2.TCP/IP有几层?那些?传输层有哪些协议?,http是基于什么协议的?
3.cookies和session的区别?
4.session是怎么做区分的?
5.springMVC工作机制
6.dubbo分布式工作原理,如何提供与消费服务
面试官问的面试题:
考官说要不先做一下自我介绍吧,由于紧张然后把学校里自我简绍的磨练给忘了只是简短的做了姓名年龄毕业学校的回答,完全忘了把特长兴趣爱好介绍了,回来后才发现自己脑子当时干嘛了
第二,考官问你对公司了解多少呢,一定要记得面试前下点功夫,然后如果实在不知道就实事求是就可以,考官一般都挺好的,他在你不知道情况下会简短的把公司概况说一下的,然后回问你对自己专业以及未来发现方向,三到五年的规划什么的,一定要面试前把规划计划好
再就是你的简历问题,一定要实事求是,他们会从你简历里挑你很擅长的东西查看你的掌握情况以及真实度从而侧面看你人品
还提了很多专业知识的问题
最后会问你对薪资,以及自己对公司有什么要求呀,你还有什么问题呀之类,但问的一定不要问太多,一个两个代表性的就够了。