2025届_子曦
技术栈测试
1、学Java看的哪个资料:javaguide、尚硅谷视频、狂神说视频
- 重载,重写,泛型懂吗?都看过基本概念,会用,没学过底层原理
-
Java集合这块学过了吗?看过javaguide,写算法用过但是不熟练,不知道底层
- HashMap源码,JVM,JUC是否看过:没
2、数据结构与算法看的哪个资料:王道计算机考研、javaguide、代码随想录
- 链表,栈,队列,二叉树能自己手写吗:可以
- AVL树,红黑树,线段树学过吗:看过前两个的基本概念、原理,不会写
- 冒泡,快速,归并排序能手写吗:会但是忘记了
- 递归,二分,贪心,回溯,动规,枚举这几种算法学过哪几种:递归、二分
- LeetCode 大概刷了多少题:34
3、框架与中间件
- servlet,cookie,session学过吗:都学过基本概念
- SSM学过了吗:学过,跟着狂神说
- redis 学过吗:没有
- SpringBoot项目做过几个:一个瑞吉外卖的项目,没做优化部分
4、MySQL看的哪些资料:狂神说、javaguide
- sql 熟练吗:熟悉基本crud,其他需要查
- 索引底层原理懂吗:innodb的B+树,会大部分原理
5、计算机基础
* 计算机网络看什么资料:王道考研(基本都学会了)
* 操作系统看什么资料:王道考研(大部分知道但是知识脉络不清晰)
* 计算机组成原来看的什么资料:王道考研(了解大部分)
基本上计算机网络的题目我大部分都会,操作系统的除了内存部分也都答得出来,就是细节扣的不够深,mysql部分除了主从、故障排查也大部分都会了
学习规划(2024.7.16)
一些链接入口
课程大纲: 所有课程大纲入口 ,PS:你要的东西,课程大纲基本都会有哈,需要学啥记得来课程大纲看看。
你的大致情况分析与规划
目前面试互联网大厂的话,需要补充的还是挺多,javaguide的八股文太浅了,基本无法应付大厂八股文的,现在距离秋招也就 不到两个月了,我这里是建议好好学习一个月学习准备秋招,当然,这期间你可以小范围投递一些公司,投递算法岗啥的,反正那种比较互联网性质的可以先不投递。
八股文,项目,算法都得补充,具体安排如下
目标:冲九月份秋招。
具体学习安排
下面是按照每天投入 6+ 个小时学习时间的安排:
1、项目:你外卖项目把后面的优化学习完,到时候也可以加功能内容进去,比如改成可以对接微信支付来实现支付功能,然后再做一个项目,从这里找: web学习路线整合(框架+项目),可以做个论坛或者B站弹幕都行,主要还是学习设计思路。
时间推荐:7天。
2、核心八股文:系统刷一下八股文,不然深入拷打会搞不定,可以先系统刷一下并发+ mysql + redis,刷完就可以按照面经来刷了
(1)、JVM入门=》并发:学习 图解JVM学习指南 ,之后学习 Java并发,然后Java并发有点难,你看前面十几章节就行,有个概念就行,因为比较难。
(2)mysql=>redis:mysql 你看 MySQL原理剖析课程说明,可以先看下标🌟的那些。redis 的话刷一下Redis原理剖析阅读指南(新),刷标🌟的那些即可
时间推荐:15天。
3、八股文复习:八股文太多太杂容易忘,咱们通过这些来多轮复习,这里有个八股文复习建议总指导,核心的就是:
第一轮复习(必须完成):刷高频题,按照 八股文高频题库(必看) 进行第一轮复习,这个题库非常非常非常重要,学完可以投递大厂了,其实很多也是和「3」中的重复的。
时间:10天
第二轮复习(非必需):之后按 面试突击专题学习指南(必看) 进行第二轮复习,这个时候你已经能够应付挺多八股文了,但是八股文学无止境,之后学完有时间再回归系统学习,我会给你推荐对应的书籍和专栏。
时间:5天。
4、算法:这块你刷的比较少,但是还是要学习的,考虑到时间因为,你主要刷一下简单题以及中等即可,可以按照:算法高频题库 刷,能刷多少就多少。
时间推荐:需要高强度刷洗,每周 20+ 道题,能刷多少就多少。
学习顺序
算法4可以保持长期刷。
1 + 2=》3同时进行,就是一边做项目一边学习八股文,然后等你项目写完之后,重新写简历,以及根据我说的包装下,之后我给你修改吧。
就行先安排这么多,然后记得来每周打卡学习进度哈,也可以星球每天打卡哦,我会看的,比如像他们这样:0. 每周打卡做的比较好的成员示例,你也可以每天打卡或者星球打卡吧,我会看的
有什么问题记得随时私聊帅地
算法还未做的题目
8.长度最小子数组
10.递归入门与优化
20.K 个一组翻转链表
26.链表随机节点
27.复制带随机指针的链表
28.LRU 缓存
37.前 K 个高频元素
55.从前序与中序遍历序列构造二叉树
56.从中序与后序遍历序列构造二叉树
57.二叉搜索树中第K小的元素
58.序列化二叉树
60.路径总和2
66.位运算技巧3_m的n次方🌟🌟🌟🌟
67.只出现一次的数3 中等🌟🌟🌟
68.只出现一次的数2 🌟🌟🌟中等
69.数学相关的一些说明
70.阶乘后的零 🌟🌟🌟中等
71.多数元素 🌟🌟🌟🌟简单
72.扑克牌中的顺子 🌟🌟🌟🌟简单
73.整数拆分 🌟🌟🌟中等
74.剪绳子 II 🌟🌟🌟中等
77.摆动序列 中等🌟🌟🌟
80.任务调度器 中等🌟🌟🌟
81.无重叠区间 中等🌟🌟🌟🌟
84.回溯通用模版🌟🌟🌟🌟🌟
85.组合问题 中等🌟🌟🌟🌟🌟
86.组合总和3 中等🌟🌟🌟
87.组合总和 2 中等🌟🌟🌟
88.组合总和1 中等🌟🌟🌟
89.子集问题1 中等🌟🌟🌟🌟
90.子集问题2 中等🌟🌟🌟
91.全排列问题1 中等🌟🌟🌟🌟🌟
92.全排列问题2 中等🌟🌟🌟
101.动态规划优化讲解🌟🌟🌟🌟
102.01背包问题🌟🌟🌟🌟🌟
103.完全背包问题🌟🌟🌟
104.多重背包问题🌟🌟🌟
105.最长回文子串 中等🌟🌟🌟🌟🌟
106.最长重复子数组 中等🌟🌟🌟🌟🌟
107.最长递增子序列 中等🌟🌟🌟🌟🌟
110.买卖股票的最佳时机2 中等🌟🌟🌟🌟
111.买卖股票的最佳时机含手续费 中等🌟🌟🌟
112.买卖股票的最佳时机1 简单🌟🌟🌟🌟
116.零钱兑换1 中等🌟🌟🌟
每天打卡记录
7.17
JVM类装载、内存分配看完。
7.18
开始做B站项目看到3-11.
7.19
看到mysql的全局锁与行锁、jvm看完了简单的垃圾回收,B站项目看到3-19。
对B站项目使用的JWT还有疑问:
1、JWT使用后带来的副作用,服务端无法主动停止令牌时间,如何解决。
2、JWT实际带来的提升除了减轻服务端存储压力和提供分布式扩展性外还有什么?
3、JWT比较适合运用在哪些场景中?
4、JWT的双令牌延长有效期的方法,为什么要这么做?只用一个令牌,在请求到达服务端做校验的时候,如果剩余有效期小于一定时间就重发一个新的令牌起到的效果不是一样吗?
5、JWT发送的内容包括了明文的头部、载荷和加密过后的签名是吗?三者都发? 确实是都发
6、JWT相对于cookie的安全性提升真的有吗?截取到token,获得载荷的情况一样没有解决,和cookie中获得的情况差不多。唯一的区别是,截取到内容后由于RSA算法校验问题,导致无法对载荷内容作出修改,但该知道的都知道了,只要在有效期以内都可以伪造登陆权限。实际上是发送token时用私钥加密,接受token时用公钥解密,所以理论上signature只是为了保证token自己无法被修改。
看到3-19还有几个问题:
1、为什么添加关注的用户需要进行一次更新的操作,即先删除关注关系再添加?解释说是防止短时间内连续出现两次添加用户操作。
2、为什么需要判断一次传过来的被关注的up主的id是否存在?
3、设置两个表可以理解,但是为什么需要设定一个type,不用type只保存分组表的分组名以及创建人id一样可以完成任务,只需要在每一个人创建的时候默认创建一个主键为1,分组名为默认的分组就可以了。
4、如何做到每一个人都会默认创建一个默认分组。
5、是所有人的分组信息都会存入同一张表吗,那第4点是不是在创建账号的同时就会在分组表创建一个默认分组。
6、为什么在删除关系时不使用JWT里保存的用户id而时使用前端的数据?
以上问题都未解决
7.20
休息一天
7.21
解决了一些19号留下的问题,将mysql标星的基本学完,读到21章,自己对于实际操作还是有一些疑问,例如
不同的语句什么样的操作会加锁;
默认情况下增删改查是具有什么样的锁;
行级锁表级锁和各个隔离级别之间的关系;
各个隔离级别具体是通过什么操作完成的,锁和mvcc怎么配合;
changebuffer和redolog的区别;
三大日志互相怎么配合工作;
查询的性能怎么优化,怎么找到问题;
7.22
学科目三去了,晚上回来看了一点项目。
看到3-26 RocketMQ的配置,发现文件里没内容,需要自己去找材料学一下
7.23
写了六道算法题:二分、相交、反转、回文链表、删除倒数K节点、两数相加
看了一些JVM相关内容
7.24
看完了JVM内存分配和垃圾回收算法,垃圾回收器除了G1都看完了
做了三道算法题
1. ##### 删除链表重复元素:
创建虚拟头部,cur指针指向虚拟头部开始
①判断cur后的两个节点是否相同。
②若相同,记录相同值,一直往下匹配到不同值的节点,cur直接指向这个节点。
③若不同,将cur向后移动一个节点,之后重复第①
④直到没有cur之后没有两个节点结束
2. ##### 反转链表2
定义区间头部、要修改的节点的前驱和后继,维护后继,使用头插法
3. ##### 环形链表2
用物理的追击问题模型简化,考虑环形链表通用的双指针法。
当快慢指针步幅相差一倍时,快指针追上慢指针的时刻,必定快指针走了慢指针的两倍距离。
在有环的情况下还可以判断出快指针还比慢指针多走了N倍环长。
如果把环长设定为x,环外长设定为y,慢指针走了z步,则快指针走了2z步,且z=Nx。
每一次经过环入口的步数为y+kx,k可以为任意整数值,那么慢指针在与快指针相遇时走了Nx步,还差y步就可以到达环入口。
此时若知道环外长就可以还原出数据。设定一个新的指针,当快慢指针相遇时从起点出发,速度与慢指针相同,当这个指针走了y步,则慢指针也会走y步,他们会相遇在起点。
7.25
看完了项目RocketMQ相关怎么使用生产者和消费者的部分3-31。
做完三道算法题,链表部分只剩下两个困难还没看,分别是k个排序链表合并和K个翻转链表
1. ##### 重排链表
找到中点,前后切断,后半反转,前后按顺序添加。
2. ##### 排序链表
递归思想,来回调用找中点切割,前半部分持续切割直到只剩下两个节点后排序,返回这两个节点,针对当前层的后半继续调用本函数,最后合并两个两个节点的链表,返回结果。
3. ##### 找到倒数第k个
假设这个链表x个,快指针先走k步,之后快指针和慢指针一起走,快指针指向空时走了x-k步,此时慢指针刚好指向倒数第k个节点,直接删除即可。
7.26
项目看到4-5
算法做了二叉树的相关内容
1. 中序遍历
采用递归调用的方法遍历,如果找到空节点则返回,否则先递归调用找左孩子,再将中间值加入结果列表,再递归调用找右孩子。
2. 对称二叉树
两种思路:
1. .先把右子树翻转,再比较右子树是否完全相同
2. 因为翻转和完全相同比较都需要递归调用,所以可以把其中一步省略,直接再比较右子树完全相同时,将左子树的左子树和右子树的右子树比较,右子树的左子树和左子树的右子树比较即可。
3. 完全相同二叉树
分四种情况讨论
1. 如果是两个空树则相同
1. 如果两个树一个空一个不空则不相同
1. 如果两个树都不空则先比较两个树的根节点值是否相同,若不同则两个树不相同
1. 若相同则需要看这两个树的对应子树是否相同,直接返回相与的值即可。
4. 二叉树最大深度
维护两个数,一个最大深度,一个当前深度,初始都是0;每遍历一个新的节点当前值+1,若大于最大深度则替换。求当前节点的左子树和右子树最大深度的更大值,采用递归的思想,右子树结束后将当前深度-1(保证确实是当前层的深度),再返回。
7.27
项目看完上传视频fastFDS、断点续传、妙传部分
juc看到3-7,理解基本线程池内容
做了三道算法题
1. 平衡二叉树
一开始理解错题意了,平衡是指对于任意一个节点左右子树的深度都是只相差1;
方法就是维护一个当前节点的最大深度,递归调用,上层比较左右子树的根节点的最大深度差。利用-1提前截止。
2.中序遍历迭代法
还是使用栈来维护,但是在添加栈元素时使用一个指针辅助,
1、将指针指到的节点加入栈堆,
2、并移动指针到节点的左孩子,
重复上述两步直到指针指的节点为空,此时已经一路往左将所有左节点记录在栈中了。
3、之后将节点指向栈顶元素,
4、将指针节点的值加入结果列表,
5、指针指向栈顶元素的右孩子,若有值则重复1、2、无值则3、4、5.
3. 二叉树层序遍历
使用一个辅助指针指向列表当前最后一个节点(即当前层的最右节点),每当读到这个节点才创建一个新的列表用来存储下一层的节点。用双向队列存储节点,出队列记录值并添加左右孩子。
7.29
看完项目弹幕装载转发MQ过程
完善了简历
juc
7.30
三道算法题
1. 求二叉树右视图
使用层序遍历,维护一个队列,借用一个最右指针(初始为根节点)指向每一层的最右一个节点。当出栈一个节点时判断是否是最右节点,若不是则添加其左右孩子节点进入队列尾部,若是则将此节点值加入结果列表,同时将最右指针指向此时的队列尾部。直到队列为空或者当前操作节点为空。
1. 求根节点到叶子节点的数字之和
利用深度遍历,每次向下递归都会记录上一层的数字并加上这一层的值,求得直到本节点为止的数是多少。例如第二层会得到第一层的值8,则在第二层时将其乘以10,即为80,加上本层的节点值7,共为87传给下一层。如果遇到空节点则返回0,因为空节点并未参与最终值的累加。同时本层需要判断是否是叶子节点,若不是则需要递归调用本函数求取两个子树的值是多少并相加。若是叶子节点则返回给上一层告诉他这一个路径的值是多少。递归的逻辑是不停计算本节点的两个子树到叶子节点的值相加有多少。
1. 后续遍历
递归,左右中
7.31
- 看了juc的视频第二章和第三章
- 看了弹幕异步保存和弹幕查询
找到了项目的两个问题
8.1
- 看了juc并发的文档到死锁部分,共5篇
并发看完大概需要四天,每天两小时 - 看了redis到AOF、RDB部分,共5篇
redis看完大概需要6天
8.2
- 看了juc并发到线程生命周期、线程数、局部变量是否要线程安全,共6篇
还剩两天看完juc - 看了redis看5篇,跳过了9、10两节分别是哨兵集群和切片集群和14、15
还剩4天看完。 - 一道算法题
– 求二叉树最大宽度:
给每个节点编号,他的左子节点编号为2N,右子节点为2N+1,每层宽度为最右节点-最左节点,这样可以不用考虑不存在的最左节点,因为他的编号不存在
8.3
- juc看到了信号量看了5篇
还剩1天左右就可以看完 - redis看完缓存雪崩、缓存击穿、缓存穿透
还剩3天看完。
8.4
休息了一天整理了一下面试的回答并梳理了一下项目的情况。
8.5
- redis看完所有四星五星的内容
还剩下一天就可以看完三星的部分 - juc看完,看到原子类和excutor
- 三道算法题:最大k个元素、移除相同元素、盛最多水的容器
- 开始进行第一轮复习 看内容的同时还需要每天做3-5道算法
预计两天到三天看完java相关部分
一天设计模式和框架部分
两到三天mysql部分
两天redis部分
两天消息队列
一天操作系统和计算机网络
项目特有的还需要两天的时间看完,例如JWT、MD5、webSocket
第一轮复习完大概还需要14天
8.6
- java基础部分复习结束,还需要回看一部分例如多态、编译类型等
- java集合复习结束,有时间还可以看一下关于hashmap的源码
- 还做了算法题
- 巧用数组下标法
- 移除链表元素
- 链表的中间结点
- 明天开始复习JVM和juc部分
后天要读一下消息队列,大概两天时间,读完可以开始投递简历了,大概是10号左右
再之后准备mysql和redis
8.7
- 看完JVM部分
- 看多线程和并发编程的时候有非常多的问题,感觉材料很乱,不知道从何学起,也不像别的部分一样有大概的考点,得自己找视频。
把突击八股的大部分内容看完了:- 线程安全与锁
- java线程关键字
- cas
- Volitale
- synchronized
- 线程池
- 做了算法
16.从尾到头打印链表
17.相交链表:逻辑细节还要梳理,用三目表达式完成判断赋值,跳出条件应该是两个都是null则没有相交。
23.合并两个有序链表
8.8
- 看了Mq系列材料,基本搞懂了MQ技术优缺点、各个mq的优缺点、如何保证高可用、如何保证不重复、如何保证顺序消费、刷盘机制、高性能原因、事务性消息、如何处理积压。
但记不牢还需要再看笔记。还需要搞懂延迟消息、参数配置 - 面了两个笔试,帆软和友塔
8.9
- 看了JWT、看了WebSocket、看了断点续传、看了秒传、看了md5加密
- 还需要看fastDFS、IO、ConCurrentHashMap、redis、MySQL,就可以把项目相关全部看完
- 第一轮复习至今为止结束了Java基础、java集合、java并发、JVM、MQ、项目相关,还剩下redis、mysql、计算机网络、操作系统、设计结构
- 算法:
- 24.旋转链表
- 34.最小栈
- 59.路径总和1
- 40.商品折扣后的最终价格
- 75.贪心算法思想科普 🌟🌟🌟🌟🌟
- 94.动态规划基础讲解🌟🌟🌟🌟🌟
- 83.回溯概念科普🌟🌟🌟🌟🌟
8.12
休息了两天放松一下,接下来继续做算法和复习剩下的部分
1. 算法题
95.爬楼梯 简单🌟🌟🌟🌟🌟
96.使用最小花费爬楼梯 简单🌟🌟🌟🌟🌟
97.打家劫舍 中等🌟🌟🌟🌟🌟
76.分发饼干 简单🌟🌟🌟🌟
78.跳跃游戏 I 中等🌟🌟🌟🌟🌟
79.跳跃游戏 II 中等🌟🌟🌟🌟🌟
98.不同路径1 中等🌟🌟🌟🌟🌟
1. 读了redis,除了并发竞争、leader选举没看。
1. 还需要看fastDFS、IO、ConCurrentHashMap、MySQL,就可以把项目相关全部看完
1. 还剩下mysql、计算机网络、操作系统、设计结构
8.13
状态很差,先读了mysql索引部分做了语句sql训练,还剩下锁、日志和事务、性能分析部分没看,算法也没做。
8.14
- 做了算法
99.最小路径和 中等🌟🌟🌟🌟🌟
100.不同路径2 中等🌟🌟🌟🌟
64.位运算技巧1_只出现一次的数字 🌟🌟🌟🌟🌟 简单
记住a^b^b=a,a^0=a,b^b=0
65.位运算符技巧2_ 二进制中1的个数 🌟🌟🌟🌟🌟简单 - 看了mysql 锁、日志和事务、性能分析部分
- 还剩下计算机网络、操作系统、设计结构
8.21and8.15
看了计算机网络,休息了一个星期,面试了很多次。
看了三种排序算法。
更新一下秋招
zyb
– 8.16一面
– 8.23二面
– 8.26hr面,口头offer
mt
– 8.17笔试
– 8.18测评+ai面试
– 8.22一面
– 8.23二面
– 8.27hr面
jd
– 8.17笔试
– 8.28一面
gd
– 8.21一面
– 8.22笔试+测评
– 8.28二面(可能改)
sp
– 8.25笔试
zj
– 8.30一面