互联网科技Java

去面试BAT大型互联网公司竟然是这样的要求(校招Java岗)

2019-07-08  本文已影响10人  cd4bd3aa39ec

前言
个人感觉面试还是主要围绕简历来问的,所以不熟悉的东西最好不要随便写上去。 项目和基础都很重要,(后面会补充一下自己学习过程和路线,书籍等,给自学的同学一点参考)

阿里一面

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

阿里二面

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

阿里三面

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

阿里四面

  1. 自我介绍
  2. 学习过程, 难点——
  3. synchronized关键字作用与静态方法和普通方法的区别,通过不同的对象的监视器来进行并发控制,monitorenter, monitorexit
  4. 服务器CPU使用率很高,如何排查, top 定位进程, 如果是Java,通过jstack进行线程快照分析,jmap,jhat 等等,
  5. 智力题
  6. 红黑树的优缺点
  7. AOP 动态代理

阿里HR面

  1. 自我介绍 学习过程
  2. 为什么选择转专业
  3. 项目中遇到的难点,
  4. 对部门的理解
  5. 个人的职业发展,城市的选择,职业方向,有没有其他公司的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等等
系统设计:如何提升系统并发,保证可用性,伸缩性,扩展性,安全性这几个方面的考虑。

自己在学习的大致就是上述的过程,也不是很有计划性,基本都是边学习边修改自己的计划。 个人学习路线大纲(由于学习路线图过大这里就不做展示了,可私信我“资料”获取)

读者福利

读到这的朋友还可以私信我免费领取一份收集的Java核心知识体系文档及更多Java进阶知识笔记和视频资料。

资料领取方式:点击链接加入java架构技术交流

更多笔记分享

上一篇下一篇

猜你喜欢

热点阅读