柚子班是啥?它是孤尽老师(鼎鼎大名的《码出高效》书籍作者)在2020年于阿里内部发起的,为期一年(12期)公益性质技术进阶培训营,专注于帮助1-5年的技术同学在成长中的技术进阶和成长困惑。20211030开展第四期培训。首先由衷感谢孤尽老师,在百忙之中抽出时间构思整理培训材料,每次开课前都熬通宵搞课件,想尽办法给我们这帮小兔崽子上技术干货。向技术人的纯粹致敬~
技术框架
课程内容很充实,讲了Spring Boot、Spring Cloud、MyBatis Plus等大家耳熟能详的技术框架的原理、重要源码。工作中大家开箱即用,好像都会一点,但是一旦问到某些细节的时候,就能感受到来自柚子班slogan(Sometims Naive)的无情嘲讽:根本不是偶尔幼稚,而是不断傻眼(Always Naive),如:
1、你知道怎么用Jetty或者undertow启动Spring Boot吗?
解这个题,知识储备里得知道Spring Boot启动程序默认使用Tomcat作为Web容器、通过判断导入的容器依赖坐标然后进行创建bean,才能快速给出正确的解法:在pom.xml中将jetty的依赖引入,同时要将spring-boot-starter-web中spring-boot-starter-tomcat依赖排除。
2、什么叫云原生?这个问题听起来挺简单,其实很难一下子说到点子上、说全面。老师给出的理解是:容器化、微服务、Devops、持续集成。
3、还有很多类似的问题,比如说大家都会用spring boot,能否两三个词说清楚什么是注解?为什么有了spring boot,还会出现spring cloud?已被问麻...
从这个环节中,体现出的问题是自己没有完备的知识框架体系,仅有一些知识碎片,不能像老师一样纲举目张,通过记忆、理解、表达、融会贯通后将原理内化并输出。我个人反省了下自己这几年知识获取方式,不会什么就度娘谷歌查这个点,头痛医头脚痛医脚,这个路径依赖十分差劲,这样下去永远都是遇到问题解决问题、不能借助搜索引擎or超纲立刻死机。后续要加强构建基础知识体系,不然真的是always native没救了。
手撕代码
给30分钟手写(用中性笔写在纸上的写)冒泡、插入、快速三种排序。在场的20+小伙伴都沉默了.....感觉如果是校招那阵刷ACM可能还有点印象,现在思路都不清晰了(不清晰的本质是学习之初没有理解并内化,这几年也没有温习重复记忆,现象就是说忘就忘)。反正我写的乱七八糟不忍直视一个没对十分羞愧,下课后把老师手撕的三种排序抄了一遍如下。后续还会再默写5遍,内化到长期记忆磁盘中。
//冒泡排序
public static void bubbleSort(int[] source){
if(null == source || source.length < 2 ){
return;
}
int temp;
for(int i=source.length;i>0;i--) {
boolean isSwapped = false;
for(int j=0;j<i;j++) {
if(source[j] > source[j+1]) {
temp = source[j];
source[j] = source[j+1];
source[j+1] = temp;
isSwapped = true;
}
}
if(!isSwapped) {
return;
}
}
}
//插入排序
public static void insertSort(int[] source) {
if(null == source || source.length < 2 ){
return;
}
int j=0;
int temp = 0;
for(int i=1;i<source.length;i++) {
temp = source[i];
for(j=i-1;j>=0;j--) {
if(source[j] > temp) {
source[j+1] = source[j];
}else {
break;
}
}
source[j+1] = temp;
}
}
//快速排序
public static void quickSort(int[] source,int left,int right) {
if(left >= right) {
return;
}
int pivot = source[left];
int pointerLeft = left;
int pointerRight = right;
while (pointerLeft < pointerRight) {
while ((source[pointerRight] >= pivot && pointerLeft < pointerRight)){
pointerRight--;
}
while(source[pointerLeft] <= pivot && pointerLeft < pointerRight){
pointerLeft--;
}
if(pointerLeft < pointerRight) {
int temp = source[pointerLeft];
source[pointerLeft] = source[pointerRight];
source[pointerRight] = temp;
}
}
source[left] = source[pointerLeft];
source[pointerLeft] = pivot;
quickSort(source,left,pointerLeft -1);
quickSort(source,pointerLeft+1,right);
}