**-
- 一面:主要问的基础知识 (考察对技术底层原理的掌握)
**
- java线程同步都有哪几种方式,Synchronized和ReentrantLock的区别
- ReentrantLock底层是怎么实现的,怎么实现的超时获取锁。
- cas的原理,变量要用哪个关键字修饰,volatile实现的原理,进而引申到了java虚拟机的内存模型。
- 介绍一下java虚拟机内存模型,然后继续讨论volatile。
- 线程池种类,哪四种 workqueue分别是什么
- 反射讲一讲,主要是概念,都在哪需要反射机制,反射的性能,如何优化
- 什么时候触发minor GC 什么时候触发full GC
- 聊点数据库,一般选什么样的字段做主键,有什么选取原则吗,用种子自增来做主键,为什么每次种子要加1,加2加3可以吗。
- sql优化有哪些思路
- 索引使用注意事项
- InnoDB数据模型,B+树具体说说都保存了什么,叶子节点保存了什么
- 你有什么想问我的。
**
- 二面:主要是围绕项目 (考察技术应用实战能力)
**
1、介绍一下你的项目(主要是技术难点),请画出项目架构设计图和部署图?
2、dubbo负载均衡算法有哪些,如果让你实现一致性hash的dubbo负载均衡算法,你会怎么实现?
3、zookeeper实现的分布式锁的原理,以及redis具体怎么实现分布式锁?
4、限流是怎么实现的,hystrix介绍一下。
5、dubbo有哪些模块,底层通信的原理。
6、对Spring的理解,项目中都用什么?怎么用的?对IOC、和AOP的理解及实现原理。
7、线上问题的解决思路,程序运行一段时间,突然内存溢出,重启后,过一段时间又内存溢出,怎么排查问题。
**
- 三面:主要问解决问题的思路
**
1、如果让你实现一个MQ,怎么样保证消息不丢失?
2、硬盘io速度会变慢,有什么解决办法吗?
3、mysql的innodb索引数据结构为什么是b+树,用hash来实现可以吗?
4、分布式事务的实现?
5、线程同步,并发操作怎么控制 ?
6、描述struts的工作流程。
5、如何解决redis和mysql数据一致性?
7、常见的MySQL主从同步方案有哪些?优劣势比较过?
8、先谈秒杀的设计思路?
9、再谈谈秒杀如何防止超卖?
10、你有什么想问我的?
**
- 面试题目以及答案解析
**
**一、反射讲一讲,主要是概念,都在哪需要反射机制,反射的性能,如何优化**
答:反射机制的定义:是在运行状态中,对于任意的一个类,都能够知道这个类的所有属性和方法,对任意一个对象都能够通过反射机制调用一个类的任意方法,这种动态获取类信息及动态调用类对象方法的功能称为java的反射机制。
反射的作用:
1、动态地创建类的实例,将类绑定到现有的对象中,或从现有的对象中获取类型。
2、应用程序需要在运行时从某个特定的程序集中载入一个特定的类
二、对Spring的理解,项目中都用什么?怎么用的?对IOC、和AOP的理解及实现原理
答:Spring是一个开源框架,处于MVC模式中的控制层,它能应对需求快速的变化,其主要原因它有一种面向切面编程(AOP)的优势,其次它提升了系统性能,因为通过依赖倒置机制(IOC),系统中用到的对象不是在系统加载时就全部实例化,而是在调用到这个类时才会实例化该类的对象,从而提升了系统性能。这两个优秀的性能使得Spring受到许多J2EE公司的青睐,如阿里里中使用最多的也是Spring相关技术。
Spring的优点:
1、降低了组件之间的耦合性,实现了软件各层之间的解耦。
2、可以使用容易提供的众多服务,如事务管理,消息服务,日志记录等。
3、容器提供了AOP技术,利用它很容易实现如权限拦截、运行期监控等功能。
Spring中AOP技术是设计模式中的动态代理模式。只需实现jdk提供的动态代理接口InvocationHandler,所有被代理对象的方法都由InvocationHandler接管实际的处理任务。面向切面编程中还要理解切入点、切面、通知、织入等概念。
Spring中IOC则利用了Java强大的反射机制来实现。所谓依赖注入即组件之间的依赖关系由容器在运行期决定。其中依赖注入的方法有两种,通过构造函数注入,通过set方法进行注入。
三、线程同步,并发操作怎么控制
答:
Java中可在方法名前加关键字syschronized来处理当有多个线程同时访问共享资源时候的问题。syschronized相当于一把锁,当有申请者申请该
资源时,如果该资源没有被占用,那么将资源交付给这个申请者使用,在此期间,其他申请者只能申请而不能使用该资源,当该资源被使用完成后将释放该资源上的锁,其他申请者可申请使用。
并发控制主要是为了多线程操作时带来的资源读写问题。如果不加以空间可能会出现死锁,读脏数据、不可重复读、丢失更新等异常。
并发操作可以通过加锁的方式进行控制,锁又可分为乐观锁和悲观锁。
悲观锁:
悲观锁并发模式假定系统中存在足够多的数据修改操作,以致于任何确定的读操作都可能会受到由个别的用户所制造的数据修改的影响。也就是说悲观锁假定冲突总会发生,通过独占正在被读取的数据来避免冲突。但是独占数据会导致其他进程无法修改该数据,进而产生阻塞,读数据和写数据会相互阻塞。
乐观锁:
乐观锁假定系统的数据修改只会产生非常少的冲突,也就是说任何进程都不大可能修改别的进程正在访问的数据。乐观并发模式下,读数据和写数据之间不会发生冲突,只有写数据与写数据之间会发生冲突。即读数据不会产生阻塞,只有写数据才会产生阻塞。
通篇涉及到的技术知识点比较多且范围比较广,建议可以先收藏。
这些面试题出自我一位好友的面试经历的整理,由于篇幅原因,我这边没有把面试以及答案全部列举出来,如果有需要原文件的可以**关注我,私信“架构”**获取完整的文件。
其实,这次互联网的“寒冬”未尝不是一件好事,让大多数技术人员认识到了自身的不足,不要满足于目前的状态,我了解过很多程序员,有点技术能力就自持高大,遭遇到瓶颈时也只是认为自己已经得道升天了,哪里还想到一山更比一山高。
直到裁员的时候,被公司遗弃的时候才发现所学甚少,再这段闲暇时间,更多的人还是选择了跳槽,四处寻找各厂的面试题,以求能够进厂之后深造。
所谓授人以鱼不如授人以渔,这套面试题给大家带来的也只是大致的技术学习要点,并没有明确技术广度提升的学习方向。
在相关面试的知识点后面,我给大家提供一套全面的架构方向的学习思维导图,不少公司很重视高并发高可用的技术,特别是一线互联网公司,分布式、JVM、spring源码分析、微服务等知识点已经是面试的必考题。
这些东西可能你们平时在工作中接触过,但是缺少全面系统的学习,希望对正在面试的朋友或是遭遇技术瓶颈的程序员们提供一点思路。
1、开源框架解析专题: 站在巨人肩膀,收获不一样的视野。
图片描述
2、架构筑基专题: 深入内核、直击故障、拒绝懵圈。
图片描述
3、微服务架构专题:你还不知道微服务,怎么涨薪。
图片描述
4、高性能架构专题: 成为互联网架构师,你要的都在这里。
图片描述
5、团队协作开发专题: 让你团队开发效率提高十倍。
图片描述
6、B2C商城项目实战: 撸起袖子干实事,项目经验那点事。
图片描述
7、设计模式
图片描述
以上资料是我结合自己和身边朋友的面试经历而整理的,希望对面试的朋友或者在找工作的程序员们有所帮助。对技术感兴趣的朋友也可以来Java资源分享群:(878249276),架构资料会不定期更新,群里有阿里大牛,也有一线互联网的资深HR