前言

本人是底层 211 本科,刚毕业,⽆科研经历,但是有些项⽬经历。
在国内监控行业某头部企业做过一段时间的实习。
想着投下字节,可以积累⼀下⾯试经验和为金九银十面招做准备。投了简历之后,过了一段时
间,HR 就打电话跟我约时间,
说明一下,我投的是北京 office。
以下就是一个面试的全部过程,分享出来给感兴趣的朋友们一看。

一面

  • 自我介绍
  • 项目中的监控:那个监控指标常见的有哪些?
  • 微服务涉及到的技术以及需要注意的问题有哪些?
  • 注册中心你了解了哪些?
  • consul 的可靠性你了解吗?
  • consul 的机制你有没有具体深入过?有没有和其他的注册中心对比过?
  • 项目用 Spring 比较多,有没有了解 Spring 的原理?AOP 和 IOC 的原理
  • Spring Boot除了自动配置,相比传统的 Spring 有什么其他的区别?
  • Spring Cloud 有了解多少?
  • Spring Bean 的生命周期
  • HashMap 和 hashTable 区别?
  • Object 的 hashcode 方法重写了,equals 方法要不要改?
  • Hashmap 线程不安全的出现场景
  • 线上服务 CPU 很高该怎么做?有哪些措施可以找到问题
  • JDK 中有哪几个线程池?顺带把线程池讲了个遍
  • 应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描
  • SQL 索引的顺序,字段的顺序
  • 查看 SQL 是不是使用了索引?(有什么工具)
  • TCP 和 UDP 的区别?TCP 数据传输过程中怎么做到可靠的?
  • 说下你知道的排序算法吧
  • 查找一个数组的中位数?

二面

你有什么问题想问我的吗?(常规问询)

  • 自我介绍、工作经历、技术栈
  • 项目中你学到了什么技术?
  • 微服务划分的粒度?
  • 微服务的高可用怎么保证的?
  • 负载均衡与反向代理,隔离,限流,降级,超时与重试,回滚,压力测试与应急预案
  • 常用的负载均衡,该怎么用,你能说下吗?

(技术问)

  • http重定向
  • DNS负载均衡
  • 反向代理负载均衡
  • IP负载均衡(LVS-NAT)
  • 直接路由(LVS-DR)
  • IP隧道(LVS-TUN)
  • 网关能够为后端服务带来哪些好处?
  • Spring Bean 的生命周期
  • xml 中配置的 init、destroy 方法怎么可以做到调用具体的方法?反射的机制
  • Object 类中的方法
  • 对象比较是否相同
  • hashmap put 方法存放的时候怎么判断是否是重复的
  • Object toString 方法常用的地方,为什么要重写该方法
  • Set 和 List 区别?
  • ArrayList 和 LinkedList 区别
  • 如果存取相同的数据,ArrayList 和 LinkedList 谁占用空间更大?
  • Set 存的顺序是有序的吗?
  • 常见 Set 的实现有哪些?
  • TreeSet 对存入对数据有什么要求呢?
  • HashSet 的底层实现呢?
  • TreeSet 底层源码有看过吗?
  • HashSet 是不是线程安全的?为什么不是线程安全的?
  • Java 中有哪些线程安全的 Map?
  • HashTable 你了解过吗?
  • 如何保证线程安全问题?
  • synchronized、lock
  • volatile 的原子性问题?为什么 i++ 这种不支持原子性?从计算机原理的设计来讲下不能保证原子性的原因happens before 原理
  • cas 操作
  • lock 和 synchronized 的区别?
  • 公平锁和非公平锁
  • Java 读写锁
  • 读写锁设计主要解决什么问题?
  • 你项目除了写 Java 代码,还有前端代码,那你知道前端有哪些框架吗?
  • MySQL 分页查询语句
  • MySQL 事务特性和隔离级别

二、事务的并发问题

  • 不可重复读会出现在什么场景?
  • sql having 的使用场景
  • 前端浏览器地址的一个 http 请求到后端整个流程是怎么样?
  • http 默认端口,https 默认端口
  • DNS 你知道是干嘛的吗?
  • 你们开发用的 ide 是啥?你能说下 idea 的常用几个快捷键吧?
  • 代码版本管理你们用的是啥?
  • git rebase 和 merge 有什么区别?

你们公司加班多吗?(题外话)

举例回答:

项目用 Spring 比较多,有没有了解 Spring 的原理?AOP 和 IOC 的原理

答:(1). IoC(Inversion of Control)是指容器控制程序对象之间的关系,而不是传统实现中,由程序代码直接操控。控制权由应用代码中转到了外部容器,控制权的转移是所谓反转。 对于Spring而言,就是由Spring来控制对象的生命周期和对象之间的关系;IoC还有另外一个名字——“依赖注入(Dependency Injection)”。从名字上理解,所谓依赖注入,即组件之间的依赖关系由容器在运行期决定,即由容器动态地将某种依赖关系注入到组件之中。

(2). 在Spring的工作方式中,所有的类都会在spring容器中登记,告诉spring这是个什么东西,你需要什么东西,然后spring会在系统运行到适当的时候,把你要的东西主动给你,同时也把你交给其他需要你的东西。所有的类的创建、销毁都由 spring来控制,也就是说控制对象生存周期的不再是引用它的对象,而是spring。对于某个具体的对象而言,以前是它控制其他对象,现在是所有对象都被spring控制,所以这叫控制反转。

(3). 在系统运行中,动态的向某个对象提供它所需要的其他对象。

(4). 依赖注入的思想是通过反射机制实现的,在实例化一个类时,它通过反射调用类中set方法将事先保存在HashMap中的类属性注入到类中。 总而言之,在传统的对象创建方式中,通常由调用者来创建被调用者的实例,而在Spring中创建被调用者的工作由Spring来完成,然后注入调用者,即所谓的依赖注入or控制反转。 注入方式有两种:依赖注入和设置注入; IoC的优点:降低了组件之间的耦合,降低了业务对象之间替换的复杂性,使之能够灵活的管理对象。

AOP(Aspect Oriented Programming)

(1). AOP面向方面编程基于IoC,是对OOP的有益补充;

(2). AOP利用一种称为“横切”的技术,剖解开封装的对象内部,并将那些影响了 多个类的公共行为封装到一个可重用模块,并将其名为“Aspect”,即方面。所谓“方面”,简单地说,就是将那些与业务无关,却为业务模块所共同调用的 逻辑或责任封装起来,比如日志记录,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。

(3). AOP代表的是一个横向的关 系,将“对象”比作一个空心的圆柱体,其中封装的是对象的属性和行为;则面向方面编程的方法,就是将这个圆柱体以切面形式剖开,选择性的提供业务逻辑。而 剖开的切面,也就是所谓的“方面”了。然后它又以巧夺天功的妙手将这些剖开的切面复原,不留痕迹,但完成了效果。

(4). 实现AOP的技术,主要分为两大类:一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;二是采用静态织入的方式,引入特定的语法创建“方面”,从而使得编译器可以在编译期间织入有关“方面”的代码。

(5). Spring实现AOP:JDK动态代理和CGLIB代理 JDK动态代理:其代理对象必须是某个接口的实现,它是通过在运行期间创建一个接口的实现类来完成对目标对象的代理;其核心的两个类是InvocationHandler和Proxy。 CGLIB代理:实现原理类似于JDK动态代理,只是它在运行期间生成的代理对象是针对目标类扩展的子类。CGLIB是高效的代码生成包,底层是依靠ASM(开源的java字节码编辑类库)操作字节码实现的,性能比JDK强;需要引入包asm.jar和cglib.jar。 使用AspectJ注入式切面和@AspectJ注解驱动的切面实际上底层也是通过动态代理实现的。

(6). AOP使用场景:

  • Authentication 权限检查
  • Caching 缓存
  • Context passing 内容传递
  • Error handling 错误处理
  • Lazy loading延迟加载
  • Debugging 调试
  • logging, tracing, profiling and monitoring日志记录,跟踪,优化,校准
  • Performance optimization性能优化,效率检查
  • Persistence 持久化
  • Resource pooling资源池
  • Synchronization同步
  • Transactions 事务管理

另外Filter的实现和struts2的拦截器的实现都是AOP思想的体现。

美团面试场景以及面试答案(文档总结)

最后分享一波我的面试宝典——一线互联网大厂Java核心面试题库

以下是我个人的一些做法,希望可以给各位提供一些帮助:

点击《一线互联网大厂Java核心面试题库》即可免费领取,整理了很长一段时间,拿来复习面试刷题非常合适,其中包括了Java基础、异常、集合、并发编程、JVM、Spring全家桶、MyBatis、Redis、数据库、中间件MQ、Dubbo、Linux、Tomcat、ZooKeeper、Netty等等,且还会持续的更新…可star一下!

283页的Java进阶核心pdf文档

Java部分:Java基础,集合,并发,多线程,JVM,设计模式

数据结构算法:Java算法,数据结构

开源框架部分:Spring,MyBatis,MVC,netty,tomcat

分布式部分:架构设计,Redis缓存,Zookeeper,kafka,RabbitMQ,负载均衡等

微服务部分:SpringBoot,SpringCloud,Dubbo,Docker

还有源码相关的阅读学习

itMQ,负载均衡等

微服务部分:SpringBoot,SpringCloud,Dubbo,Docker

[外链图片转存中…(img-jlxjB4Tz-1624584482611)]

还有源码相关的阅读学习

[外链图片转存中…(img-NgmsIrS1-1624584482613)]

2020-2021阿里巴巴Java面试真题解析,面试真题解析相关推荐

  1. 2021最新 MySQL面试题精选(附刷题小程序)

    推荐使用小程序阅读 为了能让您更加方便的阅读 本文所有的面试题目均已整理至小程序<面试手册> 可以通过微信扫描(或长按)下图的二维码享受更好的阅读体验! 最近梳理汇总了Java面试常遇到的 ...

  2. 2021最新 SpringBoot面试题精选(附刷题小程序)

    推荐使用小程序阅读 为了能让您更加方便的阅读 本文所有的面试题目均已整理至小程序<面试手册> 可以通过微信扫描(或长按)下图的二维码享受更好的阅读体验! 文章目录 推荐使用小程序阅读 1. ...

  3. 阿里巴巴 Java 开发手册1.4.0

    2019独角兽企业重金招聘Python工程师标准>>> 阿里巴巴 Java 开发手册1.4.0 1/38 Java 开发手册 1.4.0 阿里巴巴集团技术团队 2018.5.20 增 ...

  4. 2021大厂Java面试真题集锦,深度解析,值得收藏

    第一个:Alibaba[搜索推荐] 一面:算法题:长度为n的数组里放了n+1个大小在[1,n]的数,必然至少有一个重复的数,找出来 二面:概率题:求一根绳子被切两刀能组成一个三角形的概率. 三面主管面 ...

  5. 吃一堑长一智!2021最新Java面试真题解析

    字节跳动一面 自我介绍,我简历里面有一个商城的项目 画一个商城项目的所有的模块,然后讲解. 在用户登录的时候,由于HTTP是无状态的如何识别不同的用户(session或者cookie) ,然后让说一下 ...

  6. 2021大厂Java面试真题(六)

    2021大厂Java面试真题(六) * * 2021 [华为]面试真题* * : * * 1.Java 常用集合及特点?* * List:ArrayList.LinkedList.Vector.Sta ...

  7. 2021大厂Java面试真题(一)

    2021大厂Java面试真题(一) 大厂面试的基本流程 以下是一些大厂面试的基本流程,大家可以参考下: 字节跳动 阿里 腾讯 网易游戏 面试前需要准备: \1. **Java 八股文:**了解常考的题 ...

  8. 2021大厂Java面试真题(二)

    2021大厂Java面试真题(二) 2021 [阿里]面试真题: 1.TCP 和 UDP 区别? TCP 基于连接,UDP 基于无连接. TCP 要求系统资源较多,UDP 较少. UDP 程序结构较简 ...

  9. Android事件动机模式,2021最新Java大厂面试真题大全

    Android事件动机模式 1.事件动机模式简介 2.事件动机模式的性质 3.事件动机模式的Java桌面程序版 4.事件动机模式的Android版 5.事件动机模式的原理 5.1 对方法进行拆解封装重 ...

  10. 2021字节跳动校招秋招算法面试真题解题报告--leetcode19 删除链表的倒数第 n 个结点,内含7种语言答案

    2021字节跳动校招秋招算法面试真题解题报告--leetcode19 删除链表的倒数第 n 个结点,内含7种语言答案 1.题目描述 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点. ...

最新文章

  1. linux pcie热插拔驱动_Linux安装TLP-高级电源管理工具
  2. 20张图助你了解JVM运行时数据区,你还觉得枯燥吗?
  3. Go语言写的解析器(支持json,linq,sql,net,http等)
  4. 文本编辑器实现拖放功能
  5. 安装flex碰到的一个问题及其解决方法(原创)
  6. ubuntu下python的错误
  7. VS2015解决非Unicode编码包含中文字段无法编译的问题
  8. Delphi 精选文章地址
  9. [bzoj3527][Zjoi2014]力
  10. nyoj--2--括号配对
  11. STM32 使用串口下载程序( ISP 一键下载)
  12. 深度学习 —— 深度置信网络
  13. 收集:Programer Jokes
  14. 苹果账号续费以及过期更新问题
  15. 一文读懂DeFi衍生品市场六大方向及底层发展逻辑 |链捕手
  16. HTML---表格table标签中thead、tbody、tfoot的作用
  17. [基础服务] 常用邮箱服务地址
  18. 高精度加法 problem A+B
  19. STORJ 有实际应用
  20. ssm报错:Invalid bound statement (not found): mapper.UserMapper.findAllUser

热门文章

  1. 云计算行业发展呈上升趋势,技术成为重要驱动因素
  2. html给图片加个框,PS怎么给图片加边框 几个步骤搞定
  3. 孩子每天吃多少鸡蛋比较合理?
  4. linux运维面试题3
  5. jenkins执行状态stable unstable是什么
  6. EXCEL_整个工作簿的多个Sheet调整为同一个字体
  7. 解决ios H5微信支付不能跳回App的问题
  8. 用pandas_profiling生成数据报告遇到的各种坑
  9. A Survey of Learning on Small Data(二)
  10. 基于Multisim的LC正弦波振荡器的设计与仿真