IE盒子

搜索
查看: 186|回复: 0

超级干货 | Java后端实习面经

[复制链接]

4

主题

8

帖子

16

积分

新手上路

Rank: 1

积分
16
发表于 2023-1-19 01:01:29 | 显示全部楼层 |阅读模式
感觉面试还是主要围绕简历来问的,所以不熟悉的东西最好不要随便写上去。项目和基础都很重要,整体的基础知识的框架可以参考GitHub 上 CYC2018的博客,分类很全,但是深入的学习还是要自己去看书,写demo。项目中最好有难点,能够体现自己解决问题的过程和思路。算法方面剑指offer + LeetCode 200左右吧。投了10+公司,进行面试大概就这几家,其他没结果或者笔试被刷了。最后求比较一下offer, 杭州阿里B端业务部门 和 深圳的字节 头条主端部门, 还请大家提提建议。
(后面会补充一下自己学习过程和路线,书籍等,给自学的同学一点参考)

01腾讯

一面:


  • 讲一讲异常, throwable, exception, error
  • try- catch
  • 手写单例模式——很生疏,GG
  • volatile ,作用,底层, lock 前缀的指令, 多CPU的嗅探机制,多处理器下的缓存一致性协议
  • synchronized
  • JVM 内存划分, 堆内存分代
  • redis, 源码,
  • spring bean的实例化过程。——不熟悉的地方不要写上去。
  • AOP
  • 使用redis来实现单点登录,那么当单个redis节点内存不够的时候,怎么办?集群化,redis-Cluster
  • 比较偏底层
02华为

一面:


  • 自我介绍
  • 项目中的可用性,性能,扩展性 如何提升
  • nginx是如何实现反向代理的,哪一层的方向代理?应用层
  • 如何向外提供HTTPS协议的服务, 在内网使用http协议, 通过nginx配置来进行实现
  • 设计一个网络的时候,需要考虑的因素
  • 虚拟网络

03字节跳动


  • 自我介绍
  • 单点登录
  • JVM内存划分, 堆内存为什么要进行分代回收,  生命周期不同
  • redis,主从,哨兵,集群,分布式锁。
  • redis的对象类型, 每种对象类型对应的底层的数据结构,参考redis设计与实现。

    • string, list, hash, set, sortedset.
    • 每种对象都至少有2中数据结构, SDS, linkedlist, ziplist, intset, ziplist, skiplist

  • ISN,  TCP协议为什么要随机初始化一个序列号——安全性, 防止和上一次会话滞留的报文冲突

04手撕算法


  • 把九亿三千零五万五千三百 转化为 对应的数字,
  • 给了一个长度为n的 值的范围为0 到 n-1的数组,然后判断是否有重复的元素出现的问题。
  • leetcode 42 雨水收集问题

05拼多多

一面:


  • 自我介绍,redis,分布式锁, redlock算法,zookeeper分布式锁,分布式锁的问题
  • 手写一个随机选择算法的变种

二面:


  • 说明一下缺页中断, 虚拟内存
  • JVM中的内存区域划分,堆的分代,为什么分代, 垃圾回收算法,垃圾回收器
  • Linux进程间的通信方式, 管道,有名管道,socket,共享内存,消息队列
  • 如何实现进程间特定场景下的高效通信,  问了存储相关的问题。
  • MySQL索引类型, 底层的数据结构
  • 手写一个双链表的插入和删除,查找方法

HR:


  • 为什么换专业
  • 有没有其他公司的offer,
  • 职业规划
  • 你认为自己转专业和科班出身相比差距在哪里,我们为什么要录用你  555
  • 学习的过程, 如何去学习
06招银

电话简历面:


  • 自我介绍
  • 事务的特性  ACID , 数据库的死锁发生的情景
  • 死锁的四个必要特性, 非共享, 持有并等待, 非抢占, 循环等待
  • 死锁避免   死锁预防
  • 线程的状态 , 新建,就绪,running, wait, blocked, terminated
  • sleep 和 wait 的区别, 类的不同,是否会释放持有的锁,monitor
  • JDK  可重入锁, 读写锁 , 底层 AQS,抽象队列同步器的机制
  • 悲观锁和乐观锁, 概念上,JDK 中的类,  CAS的缺点, 空转,ABA问题。使用pause指令, AtomicStampedReference
  • 讲一讲Servlet, web.xml 配置路径到servlet的映射, init, service, destroy
  • 可以看一看Tomcat容器的过程 ,Connector和 Context容器两大部分。完成从socket到 request和Response对象的构造
  • SpringMVC的  dispatcher-servlet的请求解析过程
  • redis介绍,  系统中的角色,作为缓存, 分布式session服务器
  • redis的 性能,可用性,主从复制+哨兵, redis缓存访问有网络上的消耗。
  • redis事务, 分布式事务, 2PC, 本地消息表等, 3PC


07阿里

一面:


  • 自我介绍, 项目
  • 收获最大的一个项目, 着重介绍, 项目的演进过程, 从提高系统可用性的来进行演进,例如redis的可用性,
  • 分布式锁(项目), redlock,持久化机制,主从复制过程, redis知道的都说出来
  • redis解决分布式Session问题, 单点登录, Session一致性问题,描述,如何实现
  • IOC 的实例化过程,原理,
  • AOP, JDK代理, Proxy, InvocationHandler
  • 一个循环链表进行是否为空判断
  • 树的遍历, 层序,先、中、后的递归非递归实现
  • 操作系统 P/V Semaphore类,
  • CAS, AQS 实现
  • 看哪些书, 论坛,如何学习Java
  • 智力题 喝汽水问题, 2个空瓶换一瓶汽水,1元1瓶,可以买多少瓶汽水 问题,(刚好看过,通过借一瓶来最后再多喝一瓶)
二面:


  • 自我介绍
  • 在校,学习情况,参与项目(介绍一下业务方面,架构方面的过程)
  • hosts文件
  • 乐观锁, 悲观锁, 举例, 可以顺便说一下, CAS,volatile, synchronized
  • 事务,分布式事务, 如何实现分布式事务, 两阶段提交,(过程)
  • JVM堆划分,方法区,
  • 执行了 system.gc()触发的GC机制,FGC, 如何进行回收的, 分代回收
  • 系统周期性卡顿,如何定位问题,结合GC日志, YGC,FGC, 调整分代的大小, 减小FGC时间
  • 产生FGC的原因

三面:


  • 自我介绍,学习过程,项目中的难点,如何解决,
  • 如何去提升系统的可用性,性能,扩展性,伸缩性,等等, LVS,反向代理,集群,异步,缓存等等
  • 开放性的系统设计,一个车票查询系统,对最短时间,最短开销进行求解,类似于12306的火车票购票系统,。
  • 亿万流量网站架构和新技术,  这本书可以参考一下

四面:


  • 自我介绍
  • 学习过程, 难点——
  • synchronized关键字作用与静态方法和普通方法的区别,通过不同的对象的监视器来进行并发控制,monitorenter, monitorexit
  • 服务器CPU使用率很高,如何排查, top 定位进程, 如果是Java,通过jstack进行线程快照分析,jmap,jhat 等等,
  • 智力题
  • 红黑树的优缺点
  • AOP 动态代理
  • HR面:
  • 自我介绍  学习过程
  • 为什么选择转专业
  • 项目中遇到的难点,
  • 对部门的理解
  • 个人的职业发展,城市的选择,职业方向,有没有其他公司的offer

=========================================================
下面是自己的一点自学和准备面试的过程,希望可以对其他人转行的人有帮助

自学过程:
首先对于Java后端开发的岗位而言,自己一开始也是从0开始学习的。最开始也只是知道有前端、后端、移动端、测试、算法等这些岗位,但是并不清楚这些岗位都是做什么工作的,在网上也没有找到对应的学习路线,就去知乎,或者别人的博客看看Java后端都需要学习那些知识。

刚开始学习的时候从Java基础知识入手,先看了一下《Head First Java》,然后《Java编程思想》看了不到一半就放弃了,基本看不懂。然后看了一下黑马的视频,看了一下大致的基础知识和web基础的部分,然后就可以开始学习框架和简单的开发了,刚开始自己可以在网上找一个Demo,跟着做一做,熟悉一下后端开发。(可以去牛客网或者慕课网找一个Demo项目跟着做一下)。在熟悉了基本的开发过程之后,可以进行深入做一些web项目。然后自己有针对性的进行学习,比方Redis,消息队列等。

大致就是下面这几个方面要进行学习:

  • 计算机基础:计网,OS,算法和数据结构必须熟悉;组成原理,编译原理等等看了更好
  • 语言基础:Java的一些语言特性,多线程,JVM
  • 数据库:基础概念,SQL,数据库的设计等
  • web基础:Servlet,JSP, HTTP协议, Cookie, Session等进行一下了解,可以自己用servlet写个demo
  • web框架:SpringMVC, Spring, Mybatis, 在项目实践中学习,先会用,然后深入。SpringCloud, SpringBoot等也可以进行学习
  • 中间件:Redis, 消息队列这些也可以了解一下
  • 开发工具:Maven ,Git等等
  • 系统设计:如何提升系统并发,保证可用性,伸缩性,扩展性,安全性这几个方面的考虑。

自己在学习的大致就是上述的过程,也不是很有计划性,基本都是边学习边修改自己的计划。



自己准备的过程就是先去看对应的书籍,基本理解之后再去看面经进行查漏补缺,自我检验,然后不断迭代反复的过程。所以我准备的各个方面进行一下总结。还有更多的面试资料整理成PDF了,需要的友友们可以戳此获取
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表