Java面试之面经(一)

个人开发的基于内存的请求监控系统。欢迎star和一同参与。https://github.com/standup-jb/tortoise

Java web后端开发面经

楼主现在毕业一年了,因为各种原因考虑决定换工作去互联网企业。然后经过了很多面试,
在面试的过程中把很多遇到的问题和知识点也都记录下来了。现在找到了一个合适的工作,
所以打算把之前的一些东西做一个总结,也为其他需要的人提供一点帮助。

Java 基础

  • Java Object类有那些常见函数
  • final,finally,finalize的区别
  • 重载和重写
  • 接口和抽象类的区别
  • equals() 和 == 的区别
  • String Integer , valueOf()函数
  • JUC ( AQS CAS ) 重点
  • Collection (List Map Set HashMap HashSet ConcurrentHashMap)
  • IO,NIO,AIO
  • Java 8 新特性 (Stream 函数式编程)
  • Error,Exception

Java基础类主要是自己要使用得多,而且这部分推荐直接看Jdk里面的源代码,看完
后对Java从最底层会有很深入的了解,为后面的打下坚实的基础。

Java Virtual Machine(Java虚拟机)

  • Java 内存模型 (虚拟机栈,程序计数器,方法区,堆,本地方法栈)
  • 对象存活检查(根索引法,引用计数法)
  • 垃圾回收算法(标记清除,标记整理,复制算法,分代收集)
  • 垃圾收集器(Serial,Serial Old,parNew,Parallel Scavaenge,CMS,G1 )
  • YoungGC FullFC
  • 类文件结构
  • 虚拟机类加载机制(双亲委派模型)
  • 虚拟机字节码执行引擎

Java虚拟机部分强烈推荐周志明<<深入理解Java虚拟机>>这本书。这本书如果Java
基础不是很好刚开始看确实晦涩难懂。但是需要反复看反复看。把很多东西弄懂了之后
以后再遇到Java棘手问题可以从本质上去排查。

算法

  • 链表操作(循环链表找开始点,反转链表,两个链表公共节点)
  • 树操作 (二叉查找,二叉树反转,二叉树深度,共同父节点,树的遍历)
  • 数组操作 (基本的排序算法,查找)
  • 图(DFS 和 BFS )
  • 动态规划 (背包问题,斐波拉契数列)
  • 模拟数学题

算法部分推荐使用LeetCode在线编程,可以快速的提高手写代码的能力。
推荐只需要完成"Top 100 Interview"的问题就好了。算法不会超过leetcode hard模式,不然面试官
也很难肉眼看出你的代码是否有问题了

打个广告,推荐我的leetcode解题答案。
https://github.com/standup-jb/leetcode

网络

  • TCP的三次握手,四次挥手
  • HTTP的报文结构,分为几部分
  • 一次完整的HTTP请求是怎么样的
  • Session和Cookie的区别及联系

数据库

  • 常见的日志类型及作用
  • ACID
  • 索引 (B+ Hash)
  • 触发器,视图
  • 范式
  • 连接
  • 分库分表
  • 慢查询
  • Innodb和MyISAM的区别
  • 聚集索引
  • SQL的优化策略
  • 索引选取的原则,联合索引
  • 事务隔离级别

现在的一种常见的考察方式是给你一个应用场景,由你自己去设计数据库的表。然后给你一个需求让你写出SQL语句
然后再往上让你设计出合理的Java业务逻辑代码。

例:

  • 1.设计一个类似于今日头条的评论系统
  • 2.设计一个电商的转账和下订单系统

框架

  • Spring-boot Spring-cloud
  • Hibernate or Mybatis
  • Spring(DI AOP 事务传播机制 bean)

分布式

  • 分布式锁原理
  • ACID,CAP和BASE理论
  • 一致性协议 2PC,3PC
  • Dubbo的架构和原理

项目

项目这部分主要是对着你自己所做的项目来进行详细的介绍了。面试官会跟随你的项目进行往深度的
去问。一定要对自己的项目有着非常深刻的认识。最好自己可以背着画出架构图然后把每一个细节都了解清楚

常用服务

  • Redis
  • Kafka
  • RabbitMQ
  • Mysql

计算机基础

  • 计算机网络
  • 操作系统
  • 数据结构
  • 前端知识

智力题

  • 洗牌算法
  • 100G的数里面找出最大的100个
  • 两个1T的文件做匹配,内存有限
  • ID生成器,线程安全
  • 缓存穿透,缓存击穿,缓存雪崩

智力题一般考察你在遇到问题的思维敏捷程度,一般你可以先给一个时间复杂度慢的算法,然后再优化时间复杂度。
总之就是要做到又省时间又省资源的去解决问题就是你最好的答案,可以天马行空的去设想,只要能够说得出你的理由。

架构设计

  • 如何设计一个分布式Session框架
  • 如何设计一个购物商城
  • 如何设计商城的秒杀模块
  • 如何设计日志系统

参考链接

Java面试总结之真题
Java面试总结之总结题
Java面试之面经
如果对你有用,点个关注呗。会持续更新

互联网内推

上海知名互联网内推,有意者私聊,或者简历砸我邮箱[email protected]
测试,开发,运维啥都缺。只要能写代码都可以。内推可以关注进度,进一步掌握更多内幕消息。

你可能感兴趣的:(Spring)