2023届_空
技术栈测试
1、学Java看的哪个资料: 黑马程序员200集,参加过半年的机构培训
- 重载,重写,泛型懂吗? 懂
-
Java集合这块学过了吗? 简单了解过,没有深入研究
- HashMap源码,JVM,JUC是否看过: 看过一些,已经忘了
2、数据结构与算法看的哪个资料:
- 链表,栈,队列,二叉树能自己手写吗: 不能
- AVL树,红黑树,线段树学过吗: 没有
- 冒泡,快速,归并排序能手写吗: 不能
- 递归,二分,贪心,回溯,动规,枚举这几种算法学过哪几种: 没有
- LeetCode 大概刷了多少题: 没有
3、框架与中间件
- servlet,cookie,session学过吗: 学过
- SSM学过了吗: 学过
- redis 学过吗:会用,了解不深
- SpringBoot项目做过几个: 很多个
4、MySQL看的哪些资料:
- sql 熟练吗: 熟练
- 索引底层原理懂吗:不懂
5、计算机基础
- 计算机网络看什么资料:没有
- 操作系统看什么资料: 没有
- 计算机组成原来看的什么资料: 没有
学习建议(2023.2.1)
课程大纲: 所有课程大纲入口
这里我写了一篇社招的文章可以看看:毕业三年内,小公司上班,可以往哪方面提升自己
你应该不是特别着急跳槽的,那么就静下心来,好好打基础吧,把一些核心原理学一下,以后要跳槽了,根据八股文复习题库复习起来很快。
所以,我们需要做的就是,以面试跳槽为大目标,来补充各个方面的学习,其实按照我的了解 10K以下的公司,就就的很基础,10K以上的公司,还会问一些原理,并且一般就问 Java+框架 + redis + mysql 多一些,所以我们主要目标就是学习这些,把这些基础类打通,才能举一反三。
下面是你具体的学习建议:
主要这个项目很多东西我觉得挺不错,以后可以迁移进简历里。
一、八股文原理学习:
1、深入Java =》JVM=》Java并发:Java 开发,原理部分,比较难的是 JVM 和多线程,你学习下 JVM和并发,JVM 刷 图解JVM学习指南 就可以了,之后学习下Java并发,重点看前面二三十章吧,另外看不懂的话,在找我,我也有对应视频,知识我觉得这部分,文字学起来更加轻松。
2、mysql+redis:这两门是重灾区,mysql你看 MySQL原理剖析课程说明,看看能不能看懂索引的那些,到时候看不懂再和我说吧,我在给你视频。redis 的话,看 Redis原理剖析阅读指南(新) 就可以了,如果 redis 原理剖析前面的章节都看不懂的话,建议先去刷《redis开发与运维》:《Redis开发与运维》怎么看 + 重点章节,对应的电子书这里下载:书籍推荐
二、再做个项目:看你做过不少项目,咱们从 0 到 1 做个属于自己的项目,以后跳槽会用到这个项目,这个项目设计了主流的技术栈,我们后面就围绕里面涉及的技术栈来学习,就做这个:SpringBoot+MQ+ES项目,做之前看下这篇文章:做项目时需要考虑的几个点.
上面这些,应该可以给你学习一阵子了,另外可以慢慢学习下算法,按照刷剑指offer,先刷下 算法面试专题 ,之后 算法高频题库 挑 easy+medium 做就可以(或者刷剑指offer也可以。
学习顺序:主要学习八股文原理,至于算法的话,慢点学,兴趣来了再学吧,社招算法考的少,不过这玩意比较锻炼思维和代码能力。
然后记得来每周打卡学习进度哈,比如像他们这样:23与22届做的比较好的成员示例
有什么问题记得随时私聊帅地
课程大纲: 所有课程大纲入口
每周学习跟进
2023.2.1 – 2021.2.3 第一周
图解JVM
阅读了【图解JVM】 1-5章 内容
总结:梳理了jvm运行机制的整体脉络
1. 类从加载到使用:加载 ,验证,准备,解析,初始化,使用,卸载
1. 类加载器和双亲委派机制
1. jvm 内存区域:方法区,程序计数器,虚拟机栈,堆内存
1. jvm 垃圾回收机制
作图:
2023.2.6 – 2021.2.10 第二周
图解JVM
阅读了【图解JVM】 8-13章 内容
总结:jvm分代模型:年轻代,老年代,永久代
通过正反两个实战案例讲解了线上jvm内存该如何设置,周末会结合自己公司的系统梳理一下核心业务的jvm内存流转模型
感悟:学东西只能静下心来一点一点的去学,贪多,贪快,带有强烈功利心去学都很难坚持下去。过去几年一直是这样的心态,看似学了很多东西,但没一样是深入进去的
2023.2.13 – 2021.2.17 第三周
图解JVM
阅读了【图解JVM】 14-19章 内容
总结:
1 什么时候进行垃圾回收 新生代,老年代内存快满的时候触发
2 可达性分析,GC Roots,强引用(垃圾回收不会回收),弱引用(垃圾回收会回收),软引用(内存不够时会回收),虚引用
3 垃圾回收算法
复制算法:目的是为了避免在gc之后产生大量的内存碎片,在内存中开辟了两块内存区域,新创建的对象放入其中一块区域,gc的时候标记出哪些是存活对象,将这些对象放入另一块内存中,再将原来的内存区域清空。
缺点:只有一半的内存可以使用,内存利用效率低
优化:新生代内存区域划分为三块,一个Eden(8),两个Survivor(2),新创建的对象分配到eden区,eden区满了之后,进行gc,存活的对象移到其中一个suivivor区,下一次gc的时候,将eden区和survivor区存活的对象放入另一个survivor区,如此反复,内存利用率可以达到90%
4 对象每躲过一次gc,年龄增长一岁,默认年龄达到15岁,进入老年代,可以通过-XX:MaxTenuringThreshold这个参数配置
5 动态年龄判断: 一批对象的内存大于survivor区内存的一半,大于等于这批对象年龄的对象要直接进入老年代,规则:年龄1+年龄2+….+年龄n的对象内存大于survivor区内存的50%,会把年龄n以上的对象放入老年代
6新生代gc后存活下来的对象内存大于survivor区的大小,会把这些对象直接放入老年代
7老年代空间分配担保规则

8 老年代垃圾回收算法:标记整理算法。标记可存活对象,将这些可存活对象移到到一起,再将剩余垃圾清楚
2023.2.20 – 2021.2.24 第四周
图解JVM
本周主要复习巩固了下前几周学的一些东西,梳理了一下自己维护的一个考试系统的核心业务的jvm内存流转模型,感觉还是有些吃力
查资料梳理了 常见的垃圾回收器有哪些类型,以及相关的一些指标
串行垃圾回收器:Serial Garbage Collector,在垃圾回收时会冻结所有应用程序的线程,使用单个垃圾回收线程工作
并行垃圾回收器:Parallel,ParNew,使用多个线程进行垃圾回收
并发垃圾回收器:CMS,G1
指标:吞吐量,cpu运行用户代码的时间和cpu总消耗时间的比值
暂停时间,执行垃圾收集时,程序的线程被暂停的时间
内存占用,java 堆区所占内存大小
————
2023.2.27 – 2021.3.3 第五周
图解JVM
本周学习了22章到27章的内容
1. parNew 如何工作
– parnew 垃圾回收器在合适的时机执行 minor gc 时候,会把系统程序的所有工作线程停掉,禁止程序继续创建新的对象,然后自己就用多个垃圾回收线程去进行垃圾回收
– 使用 “-XX:+UseParNewGC”参数指定parnew垃圾回收器
– parNew 垃圾回收器默认垃圾回收线程数 和服务器的cpu核数一样
1.老年代垃圾回收器cms 如何工作的
– 初始标记
– 并发标记
– 重新标记
– 并发清理
– 内存碎片整理

————
2023.3.6 – 2021.3.10 第六周
图解JVM
本周学习了29章到33章的内容
1. G1 垃圾回收器的工作原理
– 把java堆内存分为多个大小相等的region, g1 可以控制垃圾回收导致的系统停顿时间
g1 通过把内存拆分为大量小region,追踪每个region中可以回收的对象大小和预估时间,最后在垃圾回收的时候,尽量把垃圾回收控制在你指定的时间范围内,同时在有限的时间里尽量收集更多的垃圾
– 每个region可能属于新生代,也可能属于老年代,刚开始region可能能谁都不属于,接着就分配给了新生代,放了很多新生代的垃圾,接着触发了垃圾回收,回收了这个region,下次同一个region可能又被分配给了老年代,用来放老年代的生长周期对象,所以在g1对应的内存模型中,region随时会属于新生代,也会属于老年代,没有给新生代多少内存,给老年代多少内存一说
– 总结:g1内存,region的划分,动态分配给老年代和新生代,在触发垃圾回收的时候,根据设定的系统停顿时间,选择最少回收时间和最多回收对象的region来进行垃圾回收,保证gc对系统停顿的影响在可控范围,同时还能尽可能回收最多的对象
1. G1分代回收为什么回收性能比传统gc更好
– 如何设定g1对应的内存大小
jvm最多可以有2048个region,每个region大小为堆内存除以2048,也可以使用“-XX:G1HeapRegionSize”参数手动配置
刚开始,新生代默认占比是5%,随着系统的运行,jvm会默认给新生代增加更多的region,,但占比不会超过60%
– 新生代的垃圾回收
当新生代的内存达到了堆内存60%会触发垃圾回收,使用复制算法进行垃圾回收
1. 线上系统部署如果采用G1垃圾回收器,应该如何设置参数?
– “-XX:InitiatingHeapOccupancyPercent” 默认值是45 老年代占据了堆内存的45%的region时候,触发老年代+新生代的混合回收
– “-XX:G1MixedGCCountTarget” 控制混合回收阶段执行几次混合回收 默认是8次
– “-XX:G1HeapWastePercent” 默认值为5 垃圾回收时,空闲的region内存占堆内存5%的时候,停止混合回收
– “-XX:G1MixedGCLiveThresholdPercent” 确定要回收region时,必须是存活对象低于85%的region
2023.3.13 – 2021.3.17 第七周
图解JVM
本周学习了34章到38章的内容
1. 当系统部署在大内存机器上时,比如机器是32核64g的机器的时候,此时你分配的系统内存有几十个g,新生代的eden区可能有30-40g的内存,比如类似kafka,es之类的大数据相关系统,都是部署在大内存机器上的,此时你的系统负载非常的高,可能导致频繁触发垃圾回收,假设一分钟塞满一次,每次垃圾回收都要停顿系统,执行垃圾回收要几秒钟,此时你发现你的系统每隔一分钟会卡死几秒,要解决的话用g1垃圾回收器,设定一个期望每次gc停顿的时间,比如设置20ms,就可以在运行一段时间之后,针对2g的内存进行回收,仅仅停顿20ms,完美解决大内存垃圾回收停顿时间过长的问题
1. young gc ,新生代gc,old gc 老年代gc,full gc 对新生代,老年代,永久代整体的gc, minor gc 比较混淆,有人指代old gc ,有人指代full gc 建议少用,mixed gc g1垃圾回收器中老年代占据堆内存的45%后触发的垃圾回收
1. young GC 触发的时机:新生代eden区内存满了之后触发
old GC 触发的时机:
– 发生young GC之前的检查,老年代可用内存 < 新生代历次young GC后进入老年代的平均内存
– 执行young GC之后有一批对象要放入老年代,老年代内存不够
– 老年代内存使用率超过92%
full GC 触发的时机:在很多JVM的实现机制里,其实在上述几种条件达到的时候,他触发的实际上就是Full GC,这个Full GC会包含Young GC、Old GC和永久代的GC
2023.3.20 – 2021.3.25 第八周
图解JVM
这周有点懈怠,要做的事情太多,又想学英语,工作需要还要去学大数据相关的技术,导致精力分散,什么没看进去。本周大部分时间用来用写高频题回答(什么是索引),下周打算把之前学的jvm总结梳理一下,整理出一份思维导图笔记。
