非科班水硕的春招实习总结- 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 熟悉吗?
- 对虚拟化了解吗?
二面
- 介绍一下项目
- 闲聊