开篇:
作为一个 Java 程序员,你是否平时总是陷在业务开发里,每天噼里啪啦忙敲着代码,上到系统开发,下到 Bug 修改,感觉自己无所不能。然而偶尔的一次聚会,听说和自己一起出道的同学早已经年薪 50 万,而自己却囊中羞涩。于是也想看看新机会,找个新平台,好好发展。
但是面试的时候,当那个笑眯眯的面试官问出那些再熟悉不过的 Java 问题时,只是感觉似曾相识,却怎么也回答不到点上。比如 HashMap 的工作原理,再或者 volatile 的使用场景。
这个时候,开始怀疑自己的能力,也痛恨为什么当初自己没有好好复习。
坦白说,作为一个 Java 老兵,从我的角度来看,有些面试者确实是认真努力工作,但表现出的能力水平却不足以通过面试,或拿到高薪,我认为通常是两方面原因:
- ⊙ 第一,“知其然不知其所以然”。做了多年技术,开发了很多业务应用,但似乎并未思考过种种技术选择背后的逻辑。所以,我并不放心把具有一定深度的任务交给他。更重要的是,我并不确定他未来技术能力的成长潜力有多大。
- ⊙ 第二,知识碎片化,不成系统。在面试中,面试者似乎无法完整、清晰地描述自己所开发的系统,或者使用的相关技术。所以,我会怀疑他是否具备高效解决复杂问题、设计复杂系统的能力。
如果你平时总是埋头苦干,或者过于死磕某个实现细节,却并没有抬头审视这些技术,就要注意了。在准备面试时,你有必要好好梳理一下 Java 的知识体系,归纳其中的核心和要点,才能在面对不同面试官时举一反三、侃侃而谈。
下面是我总结的一些互联网公司java程序员面试所要储备的技术知识及面试专题和答案,希望能帮助到年后想要跳槽换工作的朋友找到一个自己满意的工作。
需要准备的技术知识
以下为这些面试中常问的面试问题,不过这些问题只是冰山一角,就算都会了也不能怎么样,最最重要的,还是坚实的基础,清醒的头脑。
Java基础必备
- HashMap,HashTable,ConcurrentHashMap的区别。
- ArrayList 和 Vector 的区别。
- 说说 ArrayList,Vector, LinkedList 的存储性能和特性。
- 快速失败 (fail-fast) 和安全失败 (fail-safe) 的区别是什么?
- hashmap 的数据结构。
- HashMap 的工作原理是什么?
- Hashmap 什么时候进行扩容呢?
- DK8中对HashMap做了怎样的优化。
- List、Map、Set 三个接口,存取元素时,各有什么特点?
- 动态代理的两种方式,以及区别。
- @transactional注解在什么情况下会失效,为什么。
算法与数据结构
- B+树
- 快速排序,堆排序,插入排序(八大排序算法都应该了解)
- 一致性Hash算法,一致性Hash算法的应用
JVM性能优化
- Java 内存分配?
- GC 是什么? 为什么要有 GC?
- 简述 Java 垃圾回收机制。垃圾回收器的基本原理是什么?
- 什么是分布式垃圾回收(DGC)?
- Java类加载的过程?双亲委派机制?
多线程与并发
- 什么是多线程并发和并行?什么是线程安全问题?
- 什么是可重入锁、乐观锁、悲观锁、公平锁、非公平锁、独占锁、共享锁?
- 讲讲ThreadLocal 的实现原理?ThreadLocal 作为变量的线程隔离方式,其内部是如何做的?
- 独占锁 ReentrantLock 原理?读写锁 ReentrantReadWriteLock 原理?
- 基于链表的非阻塞无界队列 ConcurrentLinkedQueue 原理?
数据库相关
- 请简洁描述 MySQL 中 InnoDB 支持的四种事务隔离级别名称,以及逐级之间的区别?
- MySQL 中使用什么存储引擎?MySQL 中有哪几种锁?
- 什么是 MongoDB?MongoDB 特点?MongoDB 的功能?MongoDB 的适用场景?
网络协议
- 谈谈TCP与UDP区别?
- 三次握手,四次挥手?为什么要四次挥手?
- 什么是粘包与半包问题?粘包与半包为何会出现?如何避免粘包与半包问题?
设计模式
- J2EE 常用的设计模式?说明工厂模式?
- 开发中都用到了那些设计模式?用在什么场合?
分布式与中间件
- zookeeper的负载均衡算法有哪些?
- 业务中使用分布式的场景?Session 分布式方案?
- 分布式锁的场景?分布是锁的实现方案?
- 分布式事务?集群与负载均衡的算法与实现?
- 分库与分表设计?分库与分表带来的分布式困境与应对之策?
缓存相关
- Redis和memcached的区别?Redis支持哪些数据结构?
- Redis是单线程的么,所有的工作都是单线程么?
- Redis如何存储一个String的?Redis的部署方式,主从,集群?
- Redis的哨兵模式,一个key值如何在Redis集群中找到存储在哪里?Redis持久化策略?
源码框架相关
- 什么是 Spring 框架?Spring 框架有哪些主要模块?什么是控制反转 (IOC)?什么是依赖注入?
- BeanFactory 和 ApplicationContext 有什么区别?
- 简单的谈一下 Spring MVC 的工作流程。
- @ModelAttribute 如何使用?说说你对自定义数据类型转换器的理解。
- 什么是 MyBatis 的接口绑定,有什么好处?
总结
无论是哪家公司,都很重视高并发高可用的技术,重视基础,重视JVM。面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,是不是能真的得到锻炼。其实写了这么多,并不一定适用于所有人,相信经过一些面试,大家都会有这些感触。如果这些能够帮到你,那就最好了!
Java面试技术点大纲以及大厂面试真题和Java面试题剖析资料免费送给朋友们
需要获取得话麻烦一键三连+评论,然后添加VX(tkzl6666)即可免费领取