非科班水硕的春招实习总结- Java 后台开发
前言
这篇文章主要是记录我春招实习的经历(碎碎念),只是希望能对别人起到一点点的帮助吧。没拿到什么大厂的 offer,不敢在各位大佬面前献丑。
背景介绍
lz 本科通信,硕士电子,读研以来先后搞过一段时间的嵌入式和机器学习,后来由于一些原因都没继续搞下去了,直到去年暑假开始接触 Java,接着又阴差阳错的去了南京一家外企打了 2 个多月的杂(Python 数据清洗),直到部门 leader 离职创业,我便也辞职了。在这实习期间,跟着视频学完了 Java 的基础知识和部分 servlet 知识,回到学校后又摸鱼了一段时间,直到 12 月份开始准备春招实习,lz 先是看了下之前的实习面经,发现重复的考点确实挺多的,遂开始了面向的面经复习策略,复习了操作系统,计网,Java 集合类,虚拟机等方面常考的知识。事实证明这样还是不足以抵挡住面试官的攻势,还需要根据知识点更深层次的学习,完善自己的知识体系。就这样搞完基础知识的复习,过完年上来就到了 2 月中下旬,然后跟着视频做了牛客网的中级项目课,以填充简历。接着就在 3 月中旬开始投递简历,各个平台(牛客网,实习僧,拉钩网,boss 直聘,高校论坛)估计加起来有 100 多家吧,最终艰难上岸,收获了厦门一个小公司的 offer。
资料分享
由于 lz 的学习路线不是很合理以及学习成效并不好,就不瞎指导了,再加上之前逛牛客比较多,便收藏了一波好帖子,为方便牛油查找,遂将链接放在下面自取(侵删)。
Java 面经
- 这可能不只是一篇面经
 - 如果感觉自己能力不强,又想去BATJ,我的经验对你将很有用!
 - 2018 这一年
 - 【Java面经】非科班渣硕面经,大佬请忽略
 - 非科班的渣渣总结
 - 你不是一个人啦(算是春招总结吧,另含面经资料啥的)
 - 非科班本科菜鸡投的337家(Java后台)
 
Java 书单
Java 学习资料
建议贴
面试情况
阿里新商场(模拟面试)
个人情况
- 个人情况
 - 自我介绍
 - 你为什么学 Java ?
 - 你的计算机专业基础课是怎么学习的?和计算机科班的比较,你觉得你学的比他们更深还是说差不多?
 
Java 基础
- Java 的八种基本数据类型,每个占多少个字节?
 - Java 中抽象类和接口的区别?
 - Java 的三大特性
 - 排序算法
 - 讲一下快排的思想
 - 在最好的情况下快排的时间复杂度是多少呢?
 - 快排是如何选择切分元素的?
 
操作系统
- 说一下线程和进程,它们之间的区别
 - 线程同步的机制
 - 同步和异步的区别
 - 阻塞和非阻塞的区别
 - 操作系统中死锁的四个必要条件
 
Java 集合类
- ArrayList 初始化时数组的默认长度是多少?
 - ArrayList 扩容是扩容多少倍?扩容后是用原来的数组还是新的数组?
 - ArrayList 是一个线程安全的集合类吗?
 - 判断一个集合类是否为线程安全的机制是什么?
 - 说一下 Fail-Fast 机制,结合源码说一下(如果可以的话)
 - ArrayList 和 LinkedList 的使用场景
 - 说一下 HashMap 的底层数据结构
 - 说一下 HashMap 的存储逻辑(put() 函数)
 - HashMap 存储元素时 key 完全一样该怎么处理?
 - HashMap 的默认长度是多少?扩容是扩成几倍?
 - 若两个 key 的 hashcode 值相同但 equals 不同,也就是说它们会插入到同一个桶里,新添加的节点是插入到已有元素的前面还是后面?
 - 为什么 JDK 1.7 是头插法,JDK 1.8 是尾插法?
 - JDK 1.8 的 HashMap 是否线程安全?
 - 既然 HashMap 不是线程安全的类,有啥办法解决这个问题?
 - ConcurrentHashMap 和 HashMap 的区别?为什么 ConcurrentHashMap 会线程安全?
 - ConcurrentHashMap 虽然是线程安全的,但它也存在什么问题?
 - 了解 TreeMap 吗?TreeMap 最大的特点是什么?为什么已经有了 HashMap 了还要有 TreeMap 类?
 - 说一下红黑树的特点
 - 你知道 Http 状态码?302 是代表啥意思?502 是代表啥意思?
 
线程池
- Java 中多线程有哪几种实现方式?
 - 线程池了解吗?说一下为什么要有线程池?
 - 说一下线程池核心的几个参数
 
JVM
- 说一下 JVM 的垃圾回收器 CMS G1
 - 说一下 CMS 的优缺点
 - 回收的机制是什么?凭什么判断一个对象会被回收?
 - 说一下 GC Roots 包含哪些内容?
 - 什么情况下会发生新生代 gc?
 - Eden 区满了之后会怎么样呢?说一下这个处理流程
 - Eden 区 和 From Survivor 区中经过 gc 后还能存活的对象移动到 To Survivor 区后,那第二次 GC 时是取 Eden 区和 From Survivor 进行 gc 还是说取 Eden 区和 To Survivor 区?
 
项目
- Redis 和 数据库是怎么保持一致性的?
 - Spring 和 SpringBoot 的区别?
 - 说一下 Spring IOC 和 AOP
 - 说一下 bean 的四个注解,可以让对象注入的注解
 - 说一下你这个项目是根据什么来做的
 - 看你项目中用 Redis 中的 List 来实现异步队列,说一下具体是怎么做的?是如何基于 Redis 来实现异步的?有没有一个拉取消息的过程?还是说基于 Redis 你就把它放到队列里,然后有人来处理还是说订阅处理
 
腾讯
一面(PCG)
- ThreadLocal 类的底层实现是怎么实现的?使用场景
 - 保存用户信息是一个线程保存一份还是说一个数据结构保存一份?
 - 那这个线程的生命周期?什么时候启动线程,什么时候结束线程?
 - 一旦登录了这个线程一直会存在,退出了之后线程才会销毁吗?
 - 你这个服务是分布式还是单机的?
 - 在单机环境下一个进程可以开启多少个线程?同时能支持多少个用户登录?
 - 进程和线程之间的关系?
 - Java 是单线程的还是单进程的?
 - Redis 有哪些数据结构?
 - list 如何实现的异步消息队列?
 - Redis 在单线程下实现高并发的?核心的机制是什么?
 - IO 多路复用模型有哪些?
 - select 和 epoll 有什么区别?
 
QQ 看点部门
- 自我介绍
 - 介绍一下头条资讯项目
 - 你刚才说内容是你自己添加的内容,那你添加的内容有多少?
 - 登陆注册功能的话是可以通过 QQ/微信 登陆,还是说自己实现的登陆方式?
 - 这个刷图片的时候有一些推荐算法在里面吗?
 - 新闻是按什么排序的?
 - 站内信具体是一个什么功能呢?
 - 站内信的消息的收发,展示完全是你自己写的是吧?
 - 一次请求多久时间可以返回?
 - feed 流中刷新一次会出来几篇文章?这几篇文章是动态出来的吗?这几篇文章出来的耗时是多少?
 - 介绍下 Kaggle 比赛的这个项目
 - 这个项目的训练数据哪里来的?
 - 介绍一下逻辑回归模型吧
 - 了解线性回归吗?
 - 说一下这个 Scikit-Learn 库吧
 - 介绍下 Redis 的基本数据结构
 - 说一下这 5 种数据结构的底层实现
 - 说一下你看过的 Redis 源码
 - Redis 的哪种数据类型用到了跳表结构?
 
滴滴
京东数科
- 自我介绍
 - 说一下 Java 里面的数据结构
 - 说一下 ArrayList 和 LinkedList 的区别
 - 说一下 ArrayList 的底层
 - ArrayList 是线程安全的吗? 怎么解决 ArrayList 线程不安全的问题
 - 在 Java 中如何实现一个线程?
 - 设计模式了解吗?
 - 说一下什么是设计模式
 - 说一下单例模式及其应用场景
 - 了解哪些数据库?
 - 说一下 Redis
 - Redis 是数据库吗?
 - 如何优化查询性能?
 - 如果是全表扫描,如何优化?
 - 一般看哪些博客或者逛哪些网站?
 
追一科技
- 自我介绍
 - 头条资讯项目有没有前端和后端,前后端是怎么交互的,交互时有没有做权限的管控?
 - 网关, http 前后端交互的加密的协议,数据层面的协议有没有了解过?
 - Spring Boot 和 Spring MVC 有什么区别?
 - 说一下 SpringMVC 的执行流程
 - SpringMVC 中用到了哪个核心的 Servlet ?
 - Spring 里面有哪些核心的特性?
 - Spring 注入的方式有哪些?
 - Spring 的 scope 里面有哪几个属性?
 - 说一下 HashMap,Hastable ,ConcurrentHashMap
 - 给定一个字符串,统计每一个字符出现的次数
 - 说一下 hashmap 的插入过程
 - 设计一下权限,比如说后台的不同管理员需要看到不同的菜单
 - Java 的一些设计模式了解吗?
 - Java 的线程池有哪些?
 - 线程池的作用
 - 了解 dubbo 微服务 SpringCloud 吗?
 - 中间件有用过吗?
 - 说一下冒泡排序
 - 学习 Java 的时长
 - 还有其他的项目吗?
 
小红书
- 自我介绍
 - 介绍下头条资讯的项目
 - 站内信功能是如何实现的?是实时通讯吗?就不是像一对一聊天的那种对吧?
 - 评论的话是不是我发布一条资讯,别人可以评论我,然后我可以指定他某条评论去回复?还是说大家都在他发布的资讯下面去评论?
 - Redis 了解吗?项目中为什么要用到 Redis ?
 - 为什么 Redis 会这么快吗?
 - 说一下 SpringBoot 的 IOC 概念
 - JVM 内存管理是看过书还是说在实际项目中做过调优?
 - 说一下堆(新生代,老年代)里的 GC 收集算法
 - 如何判断一个对象是否可回收?
 - 一个对象在堆里的流转是什么样的?
 - TCP 和 UDP 的区别
 - 你的这个项目的规范是 Restful 规范吗?
 - 基本的 get 和 post 的区别
 - 进程间的通信方式
 - 算法:实现一个最小栈,它有正常栈的 push 和 pop 功能,还有一个 getMin 的方法可以获取当前栈中最小的值,不需要取出来最小值,是一个 Integer 的栈。
 
Momenta
- 对 Go 语言了解吗?
 - Python 熟吗?
 - C 语言用过吗?用 C 语言开发过小程序吗?
 - 对容器和 K8S 熟悉吗?
 - Restful 了解吗?
 - 说一下 Http 的 5 个 Methods
 - 如果在项目中你没有用 Restful 的 http 方式的话,那你是用什么方式去做隐层调用?
 - 自我介绍
 - 说一下你做的这两个项目,这两个项目是什么时候做的?
 - 问头条资讯项目,你用了 Redis 的哪些功能?
 -    为什么要用 Redis 把所有点赞的人放在一个队列里?是怎样一个业务呢?
为什么不放在 MySQL 里面,直接用两张表就好了? - 那 Redis 与 MySQL 是怎样一个关系呢?
 - MySQL 是怎样搭建的?有几个副本?只有一个库对吗?
 - 有没有用到 MySQL 的 binlog ? 对这个了解吗?
 - 主从复制
 - 如果某一个人对一个新闻点过赞但后来取消了,你是怎么做的?你是能追踪到某个人吗?
 - 如何统计所有对一个新闻点赞过的人,包括曾经点赞过后来取消了的那一部分人?
 - 当点赞取消的时候,你的人数会减 1 吗?
 - 提一个业务需求:我要快速找到点过赞但后来又取消的人,这个如何实现?
 - 如果说我点了赞取消了然后又点赞了,这样的话你的表是不是又要再添加一列?
 - 当你的数据库非常大的时候,比如 2 T 的数据,我要往某一个表里加一行数据这个事情负载就会非常的大,那这该如何处理,有啥更好的办法吗?
 - 登陆系统怎么做的?
 - 登陆了以后服务端会给客户端返回一个 Session , token 还是一个 cookie ?
 - token 是什么类型?是 Java Web Token (Jession web token) 吗 ?
 - token 是做什么用的?
 - 客户端是怎么带上 token 的?是在哪里带上的?你发送的是什么请求,它是怎么带上的?
 - http 请求分为 header 和 body ?它是放在哪里?
 
华为
一面
- 自我介绍
 - 算法题:给定任意一个字符串,求出现次数最多的字符。
 - ArrayList 和 LinkedList 的区别及它们的使用场景
 - 重载和重写的区别
 - 数据库有哪几种搜索引擎,它们的区别是什么?最大区别是什么?
 - 行级锁和表级锁的区别
 - MySQL 除了 DML 之外,还有哪几种语言?
 - MySQL 有哪几种连接方式,分别解释一下
 - 当使用左连接时,左边存在而右边不存在的行该怎么处理?
 - 简单说一下主键,索引,外键
 
二面
- 成绩和奖学金
 - 团支书的职责和感受
 - 最成功的事是什么?
 - 当遇到压力的时候是怎么调节的?
 - 遇到的最大挫折是什么?
 - 意向工作城市
 
网宿科技
一面
- 自我介绍
 - JDK 1.8 有哪些好用的特性? JDK 1.7 和 JDK 1.8 的区别
 - 你用 Python 做过什么东西?
 
Java 集合类
- 你阅读过哪部分源码 ?
 - 说一下 ConcurrentHashMap 的原理
 - Hash 会有什么问题 ?
 - 怎么避免或者减少哈希碰撞 ?
 - HashMap 和 HashSet 的区别
 
JVM
- Java 是怎么管理内存的 ?
 - Eden 区和 Survivor 区的容量是怎么分配的 ?
 - 什么情况下会触发 Minor GC ?
 - 类的 Class 对象是放在哪个区域 ?
 - StackOverflowError 是什么情况 ?哪一块内部不足会引起栈溢出,什么情况下会引起栈内存不足?
 - 说一下类加载过程,类的生命周期
 
MySQL
- 说一下你对 MySQL 的理解
 - MySQL 有哪些引擎吗 ?
 - 简单说一下对索引的认识
 - MySQL 中 B 树叶子节点中存放的是什么?
 - 说一下 MySQL 的三范式,或者说在开发中有没有遇到三范式方面的问题
 
Redis
- Redis 有什么优点 ?
 - 你刚说到 Redis 是内存数据库,那 Redis 宕机时数据还会存在吗 ?
 - 内存和硬盘的区别
 - 假设在电脑硬盘上存放了一个 word 文件,当点开此文件时,这个文件是否要加载到内存中 ?
 - 假如说 Word 文件有 4 M ,内存只有 2 M,怎么处理这种情况 ?
 - 需要排序的数据很大,比内存还大,这种情况该怎么处理?
 
框架
- SpringMVC 的请求过程,从一个请求过来,到返回请求,SpringMVC 是怎么处理的 ?
 - Spring 有哪些特性 ?
 - MyBatis 中 # 和 $ 有什么区别 ?
 
网络
- TCP 有哪几层 ?
 - TCP 是属于哪一层?
 - IP 是属于哪一层?
 - 10.8.123.121 是一个内网地址还是外网地址?是一个合法地址吗?那 10.8.256.121 呢?
 - HTTP 是在哪一层?
 - 传输层一般有哪几个协议?
 - 说一下 TCP 和 UDP 的优缺点
 - UDP 的使用场景
 - HTTP 是基于 TCP 和 UDP 还是说和这两者没关系?
 - 谈一下你对 HTTP 的理解
 - 既然说 HTTP 是无状态的,那服务器怎么记住上次请求的用户?
 - Session 和 Cookie 有什么关系?
 - 请求两个不同的网站,比如 Google 和 baidu.com ,那请求 Goole 网站的时候会把请求百度时的 Cookie 带过去吗?
 
项目
- 头条资讯项目中的内容是怎么产生的?
 - MD5 加密算法有什么特点?
 - 为什么不用 hhd,3des 等其他加密算法?有没有考虑过这个问题。
 - 如何做到简化后续开发成本?
 - 有没有遇到过 A 用户获取自己的信息时是获取的 B 用户的情况?
 - 说一下 ThreadLocal 的理解,或者说你对它的理解
 
多线程
- 对多线程编程了解吗?
 - AQS 了解吗?
 
二面
- 项目中有涉及到界面这一块吗?登陆入口界面
 - 数据是加密完才传输到后台吗?
 - 你做的功能可能只考虑到了密码校验这一块,有考虑到密码存储这一块吗?就是说账号密码有存到数据库吗?
 - 数据库里面存放的密码是明文还是密文?
 - 你是用 MyBatis 来通过写 SQL 语句还是用 XML 映射的方式来配置 ?
 - 使用 MyBatis 这种数据库框架相比之前写 JDBC 语句去调用的方式有哪些优点?
 - 有了解数据库连接池吗?
 - 关于 Java 虚拟机,平时是只看了理论还是说平时实践过,比如说自己产生了一些数据,然后看它是如何回收的?
 - 什么时候会触发内存回收?
 - 怎么判定一个对象不存活,需要被回收?
 - 了解 SpringCloud 等微服务的概念吗?
 - 对于前端的 CSS,前后端的交互 Ajax 等了解吗?
 
搜狐畅游
- 个人基本情况
 - 详细介绍下你的项目
 - 站内信是怎么实现的,具体说下,比如当我编辑一条消息点提交发送后,是怎么上传给服务器的,需要带些什么参数吗?结合 CDN 说下,它是怎么发送过去的?然后另外一个用户是怎么收到这条消息的。
 - 项目的邮件功能是怎么实现的?
 - 具体说一下是怎么加密的,或者加密算法的核心几行代码
 - 说一下异步队列是如何实现的
 - 缩短了用户的平均请求等待时间是指哪里的时间?
 - Redis 除了用到了它的 List 结构,还用到 Redis 的其他结构没?
 - 为什么要用 Redis 的 set 结构?
 - 这个网站有评论功能没?是像知乎那种嵌套的评论吗?比如其他人可以在你的评论里面再评论。如果要你设计这种评论,你该怎么设计?
 - 阅读过 JDK 哪些源码?说一下。
 - 这些技能清单里面还有哪个是你比较熟悉的,说一下
 - 怎么学习源码的?
 
同城艺龙
- 你对集合了解多少
 - 讲一下 HashMap
 - HashSet 是如何 set 的
 - 线程的状态转换
 - Thread.wait() 和 Thread.sleep() 的区别
 - 你了解 JUC 吗
 - static 代码块顺序问题
 - 你了解数据库的底层吗
 - 你觉得你还有什么擅长的?
 
堆糖
- 自我介绍
 - 说一下 Java 的 Object 类
 - 说一下 Thread.sleep(),它会空出 CPU 吗?
 - 阅读过哪些源码?挑一个熟悉的说一下
 - 说一下 HashMap
 - HashMap 中链表转成红黑树的阈值是 8,为什么是 8?
 - 一个实例 Instance 在 JVM 中是怎么表示的?它的数据结构是什么样子的?
 - 说一下 Redis 的数据结构
 - 算法题:用两个栈实现一个队列
 - 说一下对 Spring 的了解
 
亿联网络
- 自我介绍
 - 说一下 JVM 内存分区
 - 说一下 Java 发射,它的使用场景,在项目中有用到吗?
 - 设计模式了解哪些?
 - Java 多线程了解吗?
 - 说一下线程互斥的方法
 - 说一下线程同步的方法
 - Java 的锁了解吗?
 - MySQL 存储引擎有哪几种?
 - 事务的四大特性
 - 说一下索引
 - 说一下复合索引
 - 说一下幻读
 - 介绍一下头条资讯项目
 - 说一下项目中的难点
 - 用户的点赞点踩全都放在 Redis 还是 MySQL 里面吗?
 - 当用户量很大时,比如今日头条的用户量,数据还放在数据库里面吗?或者说怎么处理这种情况?
 - 说一下 Spring AOP
 - 抛开 Spring 来说,如何自己实现 Spring AOP ?
 - 网络通信了解吗?
 
深信服(测试岗)
一面
- 讲一下 JVM 垃圾回收处理
 - 有过 JVM 调试经验吗?
 - Python 的垃圾回收和 Java 的垃圾回收有什么区别?
 - 说一下 JDK 1.8 之后的 hashmap 的底层原理,使用什么实现的?
 - 对算法了解吗?
 - 介绍下头条资讯的项目
 - 有看过 Redis 源码吗?
 - 异步队列是如何实现的?
 - 对网络熟悉吗?网络协议,路由协议(静态路由,策略路由)等
 - TCP 和 UDP 的区别
 - TCP 的滑动窗口了解吗?
 - 怎么最大化的利用滑动窗口来使传输速度最快以及可靠传输?
 - 了解 Java 多线程吗?
 - 线程池和自己创建线程的区别
 - Linux 熟悉吗?
 - 对虚拟化了解吗?
 
二面
- 介绍一下项目
 - 闲聊
 
查看19道真题和解析