项目介绍
大部分情况,这是一场面试的开门题,面试官问这个问题,主要是考察你的概述能力和全局视野。有的人经常抱怨自己每天在堆业务,但没有成长。事实上,很多情况下确实在堆业务,但并不是没有成长的。并非做中间件或者技术架构才是成长,例如我们的需求分析能力,沟通协作能力,产品思维能力,抽象建模能力等都是一个非常重要的硬实力。
好的,现在进入正文。
Java基础
Java 并发
Spring
Netty
分布式相关
缓存
JVM
答案解析部分太长了,需要获取答案,可以关注我,私信回复“面试”,清晰截图可以查看文末!
阿里技术一面
- Java IO流的层次结构?
- 请说出常用的异常类型?
- SKU的全称是什么,SKU与SPU的区别及关系?
- FileInputStream在使用完以后,不关闭流,想二次使用可以怎么操作?
- 设计一个分布式登录系统?
- Spring加载过程?
- 自己有没有写过类似Spring这样的AOP事务?
- Java中 try..catch关闭流的语法糖?
- 如何设计一个秒杀系统?要考虑什么?
- 有没有遇到进线上GC,出现的症状是什么样的,怎么解决的?
- spring的加载过程?
- atomic与 volatile的区别?
- Thread的 notify给notifyAll的区别?
- notifiy是唤醒的那一个线程?
- Thread.sleep唤醒以后是否需要重新竞争?
- 单例有多少种写法?有什么区别?你常用哪一种单例,为什么用这种?
- 问一个Thread.join相关的问题?
- 商品相关模块系统怎么设计数据模型?
- 写一个JAVA死锁的列子?
- 如何解决死锁?
- GC回收算法,及实现原理?
- HashMap数据存储结构? key重复了怎么办?是如何解决的?
- Spring AOP的实现原理,底层用什么实现的?
阿里技术二面
电话面试主要考察3块内容:
- Java的相关基础知识,开源框架的原理,JVM,多线程,高并发,中间件等;
- 之前项目经历,运用的技术,遇到的问题,如何解决,个能有什么收获和成长;
- 对于技术的热情(平时是否看些技术书籍,逛论坛,写博客,写源代码或程序等);
JAVA开发技术面试可能问到的问题?
- 我们主要考核的是网络nio分布式数据库高并发大数据
- 自定义表格的实现?
- 动态表单设计?
- in-jvm(必考)以及jmm缓存模型如何调优?
- 常用的RPC框架
- nio和io
- 并发编程,设计模式
- 地图组件?
- hashmap有什么漏洞会导致他变慢?
- 如何给hashmap的key对象设计他的hashcode?
- 泛型通配符?在什么情况下使用?
- 后端方面:redis?分布式框架dubbo(阿里巴巴开源框架)?设计模式?
- 场景式的问题:秒杀,能列出常见的排队、验证码、库存扣减方式对系统高并发的影响?
- 能根据实际的需要构建缓存结构提高提高网站的访问速度,熟练使用ehcache、oscache,了解memcache。
- 了解基于dns轮询的负载均衡,熟练配置web服务器实现负载均衡,程序级能综合使用基于hash或取模等手段实现软负载。
- 熟悉分布式数据库设计和优化技术,熟练使用mysql、oracle、SqlServer等主流数据库,熟悉hadoop hbase mangodb redis ehcache、oscache memcache。对于大数据量的数据库处理采用分表分库、数据库读写分离、建立缓存等手段优化性能。
- 熟练掌握lucene,能基于lucene开发大型的搜索引擎,并能用lucene来改善和优化数据库的like查询。
三面
自我介绍,不超过3分钟(这次好像时间更久了,也就2分钟多点)说一下你对哪个项目比较熟悉数据库项目为什么做这个项目当时公司里为了整改balabala项目采用了什么架构,数据库如何设计的
简单是MVC架构,数据库数据库有哪些表,为什么有这些表
主要有哪些核心模块,模块之间如何通信的session放在哪里
image.png
如何保存会话状态,有哪些方式、区别如何cookie 保存在客户端,容易篡改session 保存在服务端,连接较大的话会给服务端带来压力,分布式的情况下可以放在数据库中,优点:
1:简单且高性能2:支持分布式与集群3:支持服务器断电和重启4:支持 tomcat、jetty 等运行容器重启缺点:1、需要检查和维护session过期,手动维护cookie;2、不能有频繁的session数据存取;token 多终端或者app的话一定要这个,随着技术的发展,分布式web应用的普及,通过session管理用户登录状态成本越来越高,因此慢慢发展成为token的方式做登录身份校验,然后通过token去取redis中的缓存的用户信息,随着之后jwt的出现,校验方式更加简单便捷化,无需通过redis缓存,而是直接根据token取出保存的用户信息,以及对token可用性校验,单点登录更为简单。
JWT的token包含三部分数据:
Header:头部,通常头部有两部分信息: 声明类型,这里是JWT 加密算法,自定义我们会对头部进行base64加密(可解密),得到第一部分数据 Payload:载荷,就是有效数据,一般包含下面信息: 用户身份信息(注意,这里因为采用base64加密,可解密,因此不要存放敏感信>息) 注册声明:如token的签发时间,过期时间,签发人等这部分也会采用base64加密,得到第二部分数据 Signature:签名,是整个数据的认证信息。一般根据前两步的数据, 再加上服务的>的密钥(secret)(不要泄漏,最好周期性更换),通过加密算法生成。用于验证整个数据完整和可靠性(不要泄漏,最好周期性更换),通过加密算法生成。用于验证整个数据完整和可靠性
分布式session如何管理,你有哪些方案 Redis做缓存持久化存储session 数据库存储session
学过数据结构和算法吗(当然),你说说二分搜索的过程 二分搜索有一点要求就是数据有已经排序好的,假设是自然排序的,拿到目标数据后查找中间的值,如果大了,就去右边一部分的中间值比较,小了就去左边一部分的中间值
说一下快排的过程,写一下伪代码 取一个值,然后设置两个指针,一个指针先从后到前开始遍历,遇到小于这个值的就停止,然后另一个指针从前到后遍历,遇到大于这个值的就停止,知道这两个指针相遇,此时交换这个值与相遇的时候指针的值,以这个坐标为边界两边开始递归
了解哪设计模式,举例说说在jdk源码哪些用到了你说的设计模式 单例:ioc容器 模板:ioc、springmvc 建造者模式:lombok 工厂:ioc 代理:aop 订阅/发布:消息队列,redis的pub/sub
你有什么问我吗(仍然上面三个问题)
四面:
来个自我介绍呗,不超过3分钟 介绍下你最熟悉的项目 项目使用了什么架构,亮点是什么 MVC,用到Lucene,用aop实现了权限的管理 平时主要学习什么课程 Java、数据结构、数学建模 你目前的研究方向是什么 家是哪的 喜欢看什么书
大概什么时候能来实习呢 四面总结
五面
自我介绍下吧做了哪些项目看你在问题中说你在杭州看到很多商贩使用付款二维码,你对支付宝怎么看每天有那么多人使用支付宝,这些数据如果给你存储,你会怎么设计呢(不是说HR不问技术问题吗?不愧是阿里的HR)为什么想来支付宝实习呢技术栈、对移动支付比较好奇,你身边同学如何评价你、老师呢如果与同事发生了意见的不一致,你会如何解决呢首先就是要确保双方都理解了对方的意思,因为有些是沟通不充分导致的,然后同时综合对比不同意见,可能会对工作内容产生的影响,并且会根据利弊来选择方法
通过阿里的面试,我查看了这些面试资料,现在分享出来给大家,希望能给大家带来帮助,包括前面的面试答案
Spring面试题
SpringMVC面试题
SpringBoot面试题
SPringCloud面试题
如何获取?
转发这篇文章,关注我,私信回复“ 面试”即可获取高清大纲,以上 spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化、分布式架构面试资料
如何私信?
关注我后,在手机,点进我的主页,主页上方右上角有个私信,点击私信,如何回复关键字“面试”即可