前言:
职场就像围城,我们每一个职场人总是以“墙外”的视角羡慕着“墙内”的世界,而也许你的生活也出现在别人的梦中。希望“互联网坊间八卦”能成为一个分享和了解不同生活的平台。
今天,笔者给大家分享一位19届应届生秋招的遭遇。让我们一起了解一下应届生最原始的求职生活状态。希望这些“干货”能让你认识到不一样的秋招。
写在前面
楼主是北邮真渣硕,之前天真地认为实习期间活儿干完了就能转正,就没有准备提前批,也几乎完美错过了9月秋招正式批。倒在亚马逊的转正答辩后(感到痛心,舍不得组里和善的大佬们,技术好又有耐心又有趣),10月正式踏上秋招,目标是JAVA后台研发。至此告一段落,虽然没拿到什么牛逼的offer,但好歹互联网大厂基本都面了,写下来让自己以后复习,也算回馈网友。
话不多说,面试问题几乎集中在JAVA基础、JVM、算法、数据库(MySQL、Redis)、计算机网络、操作系统等方面,会分类进行列举,限于篇幅项目相关的问题就不写出了。
高频问题
后面面经挺长的,嫌太长的可以只看这部分。基本上你在简历的技能树上写了以下关键词,那这些高频问题你会特别眼熟,有些会附上解答,有写错的地方欢迎指正~
设计模式
单例模式懒汉、饿汉、双重校验锁、静态内部类工厂模式JAVA基础
集合类的结构Iterator、Collection(List、Set、Queue)、MapArrayList和LinkedList的区别HashMap
底层结构数组+链表Put的过程为什么长度是2的倍数找索引时key的hash值与数组的长度值减1进行与运算,长度为2的倍数时能减少碰撞JDK1.7和1.8中HashMap的区别1.8增加红黑树、头插变为尾插、扩容后元素位置要么在原位置,要么在原位置+扩容前旧容量为什么线程不安全扩容时链表可能形成闭环ConcurrentHashMap怎么保证线程安全ConcurrentHashMap和HashMap区别线程池
线程池常用参数核心线程数、最大线程数、阻塞队列、线程最大存活时间线程池工作流程线程池的类别和区别阻塞队列的类别和区别JVM
内存结构和各自存放的内容方法区、堆、虚拟机栈、本地方法栈、程序计数器新生代和老年代垃圾回收算法新生代-复制,老年代-标记-整理(CMS用的标记-清除)CMS/G1的流程初始标记-并发标记-重新标记-并发清除CMS/G1的特点和区别CMS:尽可能减少停顿时间,采用标记-清除,会造成内存碎片化G1:可以预测停顿时间,采用标记-整理,减少内存碎片化,将内存划分为region粒度判断垃圾是否可以回收的方法引用计数法、可达性分析法哪些对象可以作为GCROOTSpring
IOC和AOP的含义和原理Spring、SpringBoot、SpringMVC的区别SpringBoot的启动流程Bean的生命周期SpringMVC的流程MySQL
事务
什么是事务事务的特性(ACID),详细说明各个特性的含义原子性、一致性、隔离性、持久性事务隔离级别未提交读-已提交读-可重复读-串行化脏读、不可重复读、幻读的区别事务隔离级别怎么实现预防上述问题(eg:可重复读怎么实现预防不可重复读)索引
常用索引(B树、Hash)聚簇索引和非聚簇索引的区别B树和B+树的区别B+树的非叶子节点不保存数据,所以磁盘页能容纳更多节点元素,更“矮胖”B+树查询必须查找到叶子节点,B树只要匹配到即可不用管元素位置,因此B+树查找更稳定(也不慢)对于范围查找来说,B+树只需遍历叶子节点链表即可,B树却需要重复地中序遍历Redis
Redis的五种数据结构String、Hash、List、Set、Zset(SortSet)Redis为什么快纯内存、单线程、IO多路复用(一般会继续问IO多路复用相关问题)Redis持久化RDB、AOFRedis高可用哨兵机制、RedisCluster、持久化(上面那个)计算机网络
点击一个URL到页面返回,发生了什么客户端传给服务端时经过TCP/IP四层模型,中途依次加入HTTP报文、TCP报文、IP报文、MAC报文,然后逆序依次拆包OSI七层模型TCP/IP四层模型TCPUDP
TCP三次握手,四次挥手的流程(最好能画图,说明各阶段状态)为什么需要三次握手防止已过期的连接再次传到被连接的主机为什么需要四次挥手/断开连接时为什么比建立连接多一次服务端的ACK和FIN一般都会分开发送,ACK表示自己收到了客户端的断开请求(但还有数据没传输完),FIN表示自己传输完了数据TCP和UDP的区别TIME_WAIT的作用保证客户端发送的最后一个ACK报文能够到达服务器防止类似与“三次握手”中提到了的“已经失效的连接请求报文段”出现在本连接中。客户端发送完最后一个确认报文后,在这个2MSL时间中,就可以使本连接持续的时间内所产生的所有报文段都从网络中消失HTTPS
HTTPS的优势CA证书认证、加密传输HTTPS建立连接流程为什么传输过程中采用对称加密,协商时采用非对称加密对称加密快操作系统
进程线程
进程和线程的区别进程间通信方式管道、消息队列、信号量、共享内存线程间通信方式消息队列、全局变量Linux(几乎为Linux命令)
查找某个进程(psaux
grepthreadId)杀掉某个进程(kill,参数添加-9表示强制执行)查看某个端口是否被占用(netstat-anp
grepthreadId)实时查看进程状态(top)算法
最大子序列和反转链表数组中查找两数之和为K的序列对坎坷面经
大家可以找找上面的高频问题在下面的面试中也出现过多少次(笑),针对每个公司会有一个小结(碎碎念)。
腾讯-医疗
一面
MySQL
事务的特性如何删除表中的所有数据,delete和truncate的区别char,varchar,text的区别一张表里数据量大,慢查询怎么办Redis
redis的数据结构zset的底层结构redis的常用命令操作系统
多线程和多进程的区别进程间通信方式线程间通信方式计算机网络
TCP三次握手,四次挥手TCP和UDP的区别UDP如何重组数据应用层和网络层是干嘛的ARP是网络层的吗腾讯-地图
一面
MySQL
MySQL引擎默认的隔离等级MySQL有哪些锁执行select和update会如何加锁计算机网络
TCP和UDP的区别TCP和UDP的报文头内容HTTPHTTP属于TCP还是UDPHTTP1.1比1.0多了什么HTTPRequestHeader中有哪些内容如何判断是否是长连接DNS属于TCP还是UDP,原理Ping使用的什么协议,原理操作系统
进程和线程区别Linux进程有哪几种状态Linux查找某个进程算法
二分查找最大子序列和腾讯-小结
可以看出腾讯对于计算机网络方面的知识要求蛮多的,光熟悉TCP、UDP、HTTP相关这样基础的面试题是hold不住面试官的。
楼主目前在开发中还没用到过计算机网络的知识去解决问题,但前人的经验告诉我们后台系统多半会遇到网络拥堵的情况,这个时候计算机网络就能派上用场了(帮助定位问题,调bug)
阿里-健康
一面
JAVA
HashMap原理,用红黑树解决什么问题MySQL
B+树的原理和优势算法
硬盘中有10G数据,内存1G,如何排序(多路归并排序)最大子序列和,除了动态规划还能怎么做阿里-高德
一面
数据库
delete和truncate区别如果索引值为null,走不走索引JAVA
常见的单例写法JVM
新生代和老年代的区别大量大对象进入老年代会有什么问题(频繁触发fullGC)有很多个大对象,应该如何改进开放式
如何设计一个查询附近商家的功能二面
开放式
爬虫爬千万个手机号码,如何统计每个手机号码的出现次数阿里-小结
阿里对于算法方面的考核会更加严格,普通的算法题期待你有多种解法,并且倾向于给你一个具体问题让你解决,然而我开放式问题都答得不咋样
开放式问题一般都是大的业务问题(数据量大、用户量大(高并发场景)等等),需要衡量业务是正确稳定至上还是效率至上(同步、异步),还有资源消耗(空间换时间、分布式会导致调度的额外开销),尝试将大问题分解,自上而下/自下而上去解决
美团-金融
一面
JVM
JVM的结构新生代和老年代的垃圾回收算法虚拟机栈和本地方法栈的区别类信息会加载到JVM哪个区域JAVA基础
HashMap和ConcurrentHashMap的区别final的作用,加在变量、方法、类的区别新建一个string会创建几个对象哪些类是线程安全的线程池的参数;为什么需要超出最大容量的策略ThreadLocal了解吗Spring
AOP的实现原理
Autowired和Resource的区别什么情况下会用ResourceMySQLB+树的优势悲观锁和乐观锁了解吗数据库如何实现乐观锁设计模式
工厂模式怎么理解单例模式有哪几种实现方式懒汉和饿汉的区别,懒汉的缺点算法
反转链表二面
JAVA基础
HashMap和ConcurrentHashMap的区别hash冲撞怎么办?如何rehashHashMap的遍历方式为什么HashMap是线程不安全的volatile和synchronized的区别Spring
SpringBoot的优势SpringMVC的MVC指什么?好处呢Redis
主从结构了解吗宕机之后如何恢复数据消息队列
rabbitmq和kafka的区别rabbitmq如何保证事务消息队列的优势美团-数据平台
一面
JAVA基础
ConcurrentHashMap的特点JUC包下其他并发类了解过吗多个消费者生产者,如何处理同一段数据(消费者-生产者模型)操作系统
线程间通信的方式JVM
阐述JMM内存模型垃圾回收算法有哪些标记-整理会触发StopTheWorld吗什么情况下触发mirrorGCJVM结构新建的字符串会存到哪消息队列
设计时应该考虑什么问题如何保证高可用算法
n个有序数组,找出Topk美团-到家
一面
JVM
JVM存在的优势通过什么方式来判断是否回收哪些对象可以当GCroot虚拟机栈的对象为什么能当root堆和栈区别JAVA基础
ArrayList和LinkedList区别HashMap的底层数据结构JDK1.8中HashMap有哪些变化静态变量和非静态变量的区别类和对象的区别Synchronized和Lock区别Lock底层实现Exception和Error的区别线程池常用参数在什么情况下使用这些参数(线程池工作流程)设计模式
手撕单例模式的双重检验锁为什么要有两次检验Redis
Redis为什么快Redis如何保证可用MySQL
B树索引和hash索引区别聚簇索引和非聚簇索引计算机网络
HTTPS建立连接流程算法
LeetCode11water给定一个数,通过调换顺序,找到比这个数大的最小数