2021 届毕业生还没找到 Java 开发工作,技术详细介绍
一、阿里 (会员中台)
1. Java
重写 hashcode()是否需要重写 equals(),不重写会有什么后果
2. 并发
自旋锁和阻塞锁的区别
公平锁和非公平锁的区别
jdk 中哪种数据结构或工具可以实现当多个线程到达某个状态时执行一段代码
栅栏和闭锁的区别
如何使用信号量实现上述情况
3. JVM
新生代和年老代的 GC 算法分别是什么
标记清除和标记整理的区别
了解过 CMS 收集器吗
4. 网络
解释 HTTPs
HTTPs 为什么要用对称加密+非对称加密,相对于只使用非对称加密有什么好处
5. 数据库
给定一个表,其中有三列(员工名称,工资,部门号),找出每个部门工资最高的员工
6. 代码
LeetCode 863 二叉树中所有距离为 K 的结点
二、阿里 - 新零售技术事业群(一面挂)
1. 框架
用过哪些 Java 开源框架
讲一讲对 Spring 的理解
看过 IOC 和 AOP 的源码吗
它们底层是如何实现的
用过其他什么框架
了解过分布式或者微服务的开源框架吗
讲一讲对分布式系统模型的理解
分布式系统中有一个节点宕机怎么办
分布式系统如何实现负载均衡
2. 数据库
MySQL 和 Oracle 数据库有哪些不同
数据库有哪些锁
表锁和行锁的区别
哪些场景需要加表锁
插入一条数据需要加什么锁
分布式数据库如何保证数据可靠性
了解过 MySQL 的主从复制吗
三、腾讯 - TEG
1. 数据结构
B+树与红黑树的区别
2. Java
HashMap 的底层数据结构,局限性与线程安全
如何实现线程安全的 HashMap
Collections.sychronizedMap 与 ConcurrentHashMap 的区别
HashMap 与 ConcurrentHashMap 的性能比较
3. JVM
类的编译过程
类的加载过程
JVM 的内存空间
JVM 的 GC 机制
4. 操作系统
进程与线程的区别
进程间如何通信
共享内存与 Socket 的优缺点与性能比较
子进程从父进程继承了什么
什么是僵尸进程
线程与协程的区别
5. 网络
TCP 的四次挥手
TIME_WAIT 状态处在哪一方以及为什么需要它
TCP 与 UDP 的区别与可靠性
如何实现 UDP 的可靠传输
6. 数据库
解释 ACID 四大特性
原子性的底层实现
数据库宕机后恢复的过程
如何保证事务的 ACID 特性
MySQL 日志类型
7. 分布式
谈谈对分布式系统的理解
分布式数据库的实现
如何保证不同数据库之间的数据一致性
如何实现主从数据库间的同步
四、腾讯 - FIT
1. 网络
TCP 三次握手/四次挥手
TIME_WAIT 状态
网络延迟大的情况怎么处理
HTTP 请求到响应全过程(服务端)
HTTP 请求头及其作用
HTTP 和 HTTPs
HTTPs 的握手过程
五、字节 - 头条(二面挂)
1. 一面
操作系统
讲一讲进程和线程
讲一讲多线程和线程池
Linux 的最大进程数限制
WEB
输入 URL 到页面加载的过程
后端怎么处理前端传过来的文件
JVM
GC 机制(GC 算法,分代收集,收集器,STW)
代码
给定一个数组 a[N]和一个整数 P,求 a[i] + a[j] + a[k] =P,保证 i<j<k
2. 二面
数据库
身份证如何有效建立索引
Innodb 索引类型
聚簇索引和非聚簇索引的区别
索引失效的情况
写一个分页查询
Java
JMM 内存模型
Classloader 双亲委派机制
讲一下 ThreadLocal
线程间如何通信
六、字节 - 头条 - 客户端开发(已拿 offer)
1. 一面
操作系统
讲一下进程和线程
讲一下线程安全
智力题
两个人抛硬币,先抛的人赢的概率
代码
单链表排序,奇数位升序,偶数位降序
2. 二面
WEB
HTML,JS,CSS 的区别
输入 URL 到页面加载的过程
HTTP 的长连接和实现原理
Java
创建和终止一个线程
讲一下熟悉的容器类
ArrayList 中如何删除某个元素的所有相同元素
讲一下迭代器的实现原理
SQL
学生表 Student (S#,Sname,Sage,Ssex),课程表 Course (C#,Cname),成绩表 SC (S#,C#,score),查询平均成绩大于 60 分的同学的学号和平均成绩
代码
Leetcode 283 移动零
3. 三面
智力题+数据结构+代码
扑克牌的移动
并发
乐观锁和悲观锁的区别
两种锁在 Java 中的具体实现
两种锁的使用场景
七、阿里 - 供应链平台事业部(二面挂)
1. 一面
框架
讲一下 IOC
对 SpringBoot 的理解
Mybatis 中 #和 $的区别
Java
HashMap 底层实现和扩容机制
代码
Leetcode 206 链表反转
数据库
InnoDB 和 MyISAM 的区别
其他
SQL 注入
2. 二面
算法和数据结构
讲一下红黑树
红黑节点的个数
红黑树的插入删除查询时间复杂度
讲一下 B+树
B+树的插入删除查询时间复杂度
讲一下堆的性质及应用场景
建堆时间复杂度
各种排序算法的时间复杂度及稳定性
数据库
讲一下三范式
网络
为什么要三次握手
二次握手有什么问题
三次握手有哪些缺陷
TCP 是如何控制流量的
发送方发送频率过高造成丢包,TCP 是如何解决的
讲一下 OSI 网络架构
HTTP 在哪一层
HTTP 报文结构
HTTP 首部字段
HTTPs 加密在哪一层实现
操作系统
讲一下虚拟内存
如果访问虚拟地址时,该地址在物理内存中不存在,会发生什么
Java
讲一下 volatile
volatile 底层实现
static 修饰用法和区别
JVM
讲一下 GC 算法
JVM 内存空间
代码
Leetcode 2 链表相加
函数式编程
函数式编程和面向对象编程的区别
jdk8 为什么要引入函数式编程
机器学习
讲一下梯度下降
梯度下降能保证收敛吗
最后
为什么我不完全主张自学?①平台上的大牛基本上都有很多年的工作经验了,你有没有想过之前行业的门槛是什么样的,现在行业门槛是什么样的?以前企业对于程序员能力要求没有这么高,甚至十多年前你只要会写个“Hello World”,你都可以入门这个行业,所以以前要入门是完全可以入门的。②现在也有一些优秀的年轻大牛,他们或许也是自学成才,但是他们一定是具备优秀的学习能力,优秀的自我管理能力(时间管理,静心坚持等方面)以及善于发现问题并总结问题。如果说你认为你的目标十分明确,能做到第②点所说的几个点,以目前的市场来看,你才真正的适合去自学。
除此之外,对于绝大部分人来说,报班一定是最好的一种快速成长的方式。但是有个问题,现在市场上的培训机构质量参差不齐,如果你没有找准一个好的培训班,完全是浪费精力,时间以及金钱,这个需要自己去甄别选择。
我个人建议线上比线下的性价比更高,线下培训价格基本上没 2W 是下不来的,线上教育现在比较成熟了,此次疫情期间,学生基本上都感受过线上的学习模式。相比线下而言,线上的优势以我的了解主要是以下几个方面:①价格:线上的价格基本上是线下的一半;②老师:相对而言线上教育的师资力量比线下更强大也更加丰富,资源更好协调;③时间:学习时间相对而言更自由,不用裸辞学习,适合边学边工作,降低生活压力;④课程:从课程内容来说,确实要比线下讲的更加深入。
应该学哪些技术才能达到企业的要求?(下图总结)
评论