后端研发校招经验分享(附2023阿里云校招内推)
上成果
校招这件事情为什么能成,抛开每个人可能不同的影响因素,面试时候针对具体的问题去准备是没有坏处的,刻意练习对我的帮助很大。
回顾走过的“弯路”
背景
- 大一的时候学了高中最不喜欢的化学,有了转专业的念头,但是自己太菜,一开始还想着转专业学金融,后来发现自己不太适合,但是当时时间已经不多了,匆忙准备了下去转专业考试,最后面试的时候挂掉了。当时笔试过了以为自己稳了,终究还是太年轻
- 大二的时候选了双学位,想着转不过去就双学位跨考研究生吧,结果最后意外转专业成功了,就开始了自己的软件工程之路,但是代价也是挺惨的,被迫降了一级,因为课程上不完了
- 重新的一个大二基本都在补学分,业余把 web 基本过了一遍,当时学的很杂,uniapp、小程序、Vue、java体系、Python、go,反正大部分人差不多了解的基本都过了一遍(C++漏网之鱼),最后基本是什么都没记住,哈哈哈方法不对努力全白费。
- 大二升大三的暑假开始比赛,有了之前的积累,写一些web的项目还是比较顺手,当时还初生牛犊不怕虎,自己学深度学习,NLP,做了一些深度学习的项目,啥也不懂自己电脑跑模型,主板给烧了。基本上所有的都尝试过了,明白自己不适合搞科研,所以在大三上学期结束的时候有了找工作的写法,但是当时家人还是极力劝阻,让读研究生,自己那段时间也很迷茫。因为没有一个人支持自己工作。
- 时间来到大三寒假,开始重新系统学习java web,因为打算要去找工作了。彼时的自己属实焦虑,因为自己的准备实在太少了,常常看牛客很晚凌晨几点,哈哈哈,找工作的这个决定做了,接下来却是要走的弯路才刚刚开始。
考研还是工作:也曾举棋不定
关于这个,其实是我自己不太喜欢上学的氛围,你可以让我学习,但是得学习我感兴趣的,目光短浅的我选择了就业,或许研究生会有更加广阔的天空,但是每个人都有自己要走的路,选择了就不要后悔。
关于如何选择,大家可以参考下面的文章:*************************************************
我觉得最后的总结说的已经非常到位了!
春招:投不出去的简历
时间过的飞快,当时差不多一二月份开始准备的结果过了一个年各个大厂就开始春招了,自己简历还没开始写,朋友也在催先写简历试试,但是我自己知道自己当时什么也不会,就一直拖着。
当时主要有几个痛点,相信很多人也会和我走一样的弯路:
- 算法题刷的太少,更多时候是一种逃避(想着学哪个不是学,面试都要问,其实算法是校招重中之重)
- 简历上的项目太平庸(普通学生,写出花了面试官看来也是垃圾,把自己的简单项目熟悉透了就好)
- 八股文还没有系统看完(八股文是看不完的,过上几遍就好了,重要的是有自己的知识体系)
我一开始讲重点放在了八股文,然后是项目,然后是算法,其实这个顺序对于校招而言是完全反了,校招更加侧重的是你的逻辑能力,而不是你的八股文6不6,但是当时自己是一个人准备的,时间久了很容易就走到了错误的方向了。直到五月份到六月份才认识到自己的策略错了,再这样下去秋招也没戏了,只能是第二年的春招了,所以首先做的决定是直接放弃春招了,不去暑期实习了,到时候直接秋招。开始慢慢调整自己准备的重心,转向算法。
秋招:来不及了,却意外收获
是的,当秋招提前批开始的时候我和春招提前批开始是同一个状态,还是没有写出来简历,还是没有拿出手的项目,还是算法不过关。这个时候也开始动摇了,开始怀疑自己这样不顾一切选择工作,没有留考研的后路是不是对的,那些天真的是天天自我怀疑。一边怀疑一边还得看。
暑假来了,大家都回去了,寝室里就剩下考研的室友和我两个人,第一次面试给了字节,面试官很好,居然给过了,当时信心大增,结果二面的时候面试官上来就两道算法题,做出来一道,问我是不是做过,当场凉凉,随便为了一下八股文结束了。
字节第一次面试,也是找工作的第一次面试,不能说表现多不好,至少迈出了第一步,之后开始先面小公司,然后小米,然后百度和其他的大厂,那段时间可能是把积攒了一年的好运气全用了,面试几乎不挂,也很感谢每一个面试官的手下留情。
总结
个人在秋招的主要竞争力可能还是在数据库和消息队列的原理看的比较多,个别厂面的时候 jdk 和 spring 框架也起到一定作用,但是spring这种框架绝对不是重点,也就只有阿里问的深一点,包括依赖注入的源码以及循环依赖的解决,其余都直接不问。但是中间件比如Redis,MQ 只要项目涉及了基本对应的八股文是没跑了。
“可复用的套路”
1. 明确大方向
- 技术方向
- 准备流程:整体--局部--整体
- 先整体了解需要会什么,可以过一遍网上汇总的八股文(快速,一周,一堆大佬各种总结,各种GitHub和公众号,培训机构的PDF),过一遍算法的PDF(快速,一周,记思路,记题型,写笔记,哪怕只是复制一定要全,方便复习);
- 之后深入到每一个模块详细学习,每一个模块都要有自己详细的笔记;坚持固定时间刷题,复习自己写的算法笔记,毕竟是校招
- 最后整体汇总到一个思维导图,包含所有模块的重点,用来面试前看。
- 先整体了解需要会什么,可以过一遍网上汇总的八股文(快速,一周,一堆大佬各种总结,各种GitHub和公众号,培训机构的PDF),过一遍算法的PDF(快速,一周,记思路,记题型,写笔记,哪怕只是复制一定要全,方便复习);
2. 写简历(写个初版,一边准备面试一边改)
- 初版简历,用LaTeX写了两页,最后因为修改繁琐以及不太好看放弃了。
- 改版简历,用超级简历写的,虽然自定义的地方少了,但是更加关注内容了,赞
- 最终简历,在朋友的反复 review 下压缩成了一页。
注意点:
- 别觉得自己看过就往上写,一定是自己比较熟悉的,自己在没有任何提示的情况下可以说个大概的才写上去,那种只是之前学过没有实际上手的非重点,就尽量不要写上去,容易给自己挖坑。否则写太多东西面试前那叫难受,东西太多了,是真的看不完(虽然最后很多面试官基本没问我列出的那些技能)
3. 面向简历准备
可能写完简历之后过一段时间,你会有一种感觉:这说的是我吗???我熟悉吗,我深入理解吗?我写会这些技能的时候到底在想什么?
其实我在深入每一个模块学习的时候确实是自以为可以达到深入理解的程度的,毕竟源码都是debug过的,但是需要看的东西实在是太多了,后面是一定会忘的,所以就是最后总结的时候是要面向简历准备的,不要说刚学完的时候多精通。
下面是需要看的一些知识点的提纲,每一个都应该深入理解。最后达到可以自己不借助任何资料写出来这些提纲,面试说的时候就基本不会卡壳,也就可以自己延伸一些话题,把握面试的主动权。所以最重要的还是知识要成体系。
一开始学快速总览全局,之后深入每一个细节,最后还要抓住每一个模块的重点整理出自己的知识框架,就可以去面试了。
基础(次次重要)(java后端)
每一个点深入进去都可以写几本书,我就是因为把握不住,在这部分花费了大量时间,虽然面试基本不卡壳,但是也直接导致我没有参加春招,所以各位一定要合理分配时间,有些内容该放弃就放弃(比如什么class字节码解析,各大框架源码,实在想装逼看看spring源码,但是问的也没那么多(尤其是校招不重视框架源码掌握)等等)。
重点
- java
- 基础
- 面向对象和面向过程的本质区别,SOLID原则,面向对象的特性。
- 接口和抽象类的区别
- 字符串常见的问题,以及不同版本中新建字符串时候的区别。
- 包装类和基本类型的自动装包拆包,包装类的缓存,互相转换方法
- final修饰变量,方法,类。transient作用。
- Object的方法以及使用注意
- 泛型实现原理、泛型擦除
- 异常:继承体系,try catch finally 谁可以省略,return在某个地方是否会执行
- 反射:原理(动态获取类或者对象的字段以及方法,可以获取private字段)
- 动态代理:JDK和cglib的实现原理区别,性能对比,spring里面默认什么,如何切换。
- 新特性:8 的lamda和Stream,方法引用;9 的String使用byte,接口的私有方法
- 容器(基本都是源码级别理解的要求,自己实现需要注意什么,各个培训机构和八股文其实讲烂了,多看几遍就记住了)
- List
- ArrayList
- LinkedList
- 数组和List之间的相互转换,注意事项
- Map
- HashMap:数据结构,put流程(死循环原因),扩容流程(前面都是7和8对比说),几个参数(容量2的幂,refactor 0.75,8,6,64)默认值原因,线程安全(null的时候)
- Collections.synchronizeMap(),HashTable(问题,锁粒度大)
- ConcurrentHashMap:7分段锁原理,锁粒度;8的CAS+ synchronized以及所粒度;转移节点,协助扩容。count 的CAS并发计算,
- TreeMap
- Set
- HashSet
- TreeSet
- Queue
- BlockingQueue
- List
- 并发编程(线程池基本是别问的,再写个并发编程的代码)
- Thread:4个创建方式、中断、状态以及状态变化涉及的方法
- 线程池:Excutors的缺点,参数含义,阻塞队列的选择,参数的选择,常见拒绝策略
- ThreadLocal:实现源码,内存泄漏,子线程想共享怎么办
- volatile:作用,实现原理,MESI,为什么有了MESI还要volatile(MESI 实现可见性-->store buffer + 失效队列 实现加速,但是带来不一致-->读写屏障解决不一致-->volatile手动设置屏障位置)。
- synchronized:使用(方法和代码块使用的锁,阻塞,条件等待),字节码(方法和代码块的区别),JVM实现原理ObjectMonitor(数据结构,加锁流程),锁的升级流程
- Lock
- AQS:继承需要实现方法,如何实现可重入(state字段),如何实现公平和非公平,同步队列和条件队列(Condition)
- 常见Lock的实现
- 和synchronized的对比:使用上,实现原理上,效率上,使用场景选择
- JMM:逻辑还是物理存在,导致的问题。
- Serial:单线程下,即使CPU指令重排,看起来没有重排
- happens-before:多线程下,即使不是按照顺序执行,看起来是顺序执行
- 基础
- jvm (也是基本会问的,最好看看课或者书,看课收益高见效快,B站多的是)
- 类加载
- 加载链接(验证准备解析)初始化,初始化时机,准备阶段做什么,类卸载的条件。
- 双亲委派源码,常见类加载器,自定义类加载的方式
- Tomcat如何打破,如何实现热加载
- 对象实例化
- 加载,分配内存,设置对象头,执行init方法
- 对象头的构成
- JVM内存模型
- 共享(堆,方法区),独享(虚拟机栈,本地方法栈,程序计数器)
- JDK678中方法区的实现改进
- 字符串常量池在6和7 的区别,intern() 的实现机制差别
- GC理论
- 为什么需要GC,为什么其他语言不需要GC
- 垃圾定位:引用计数,可达性分析,GCroot是谁
- 区域划分
- 3个算法:使用区域,优缺点
- 垃圾回收器:特点,流程,使用场景,不同JDK默认的垃圾回收器,三色标记(增量更新,原始快照)
- 逃逸分析,标量替换
- JVM参数调优
- 常见参数含义,Xms,Xmx,Xmn,Xss,SurvivorRatio
- 动态年龄判断机制
- 空间担保机制
- 类加载
- 设计模式(最简单的例子,在自己的项目里面使用策略模式替换了多种类型的时候 if else代码块,使得系统变得更加易扩展,也可以结合JDK源码里面和Spring源码里面涉及到的一些模式展开描述)
- 单例模式(可能会手写,最好掌握,理解每一个字段的作用)
- 饿汉
- 懒汉:
- 双重检查 + volatile + synchronized
- 静态内部类:可以防止反射攻击
- 枚举类
- 工厂模式
- 策略模式
- 适配器模式
- FutureTask
- 责任链模式
- 模板方法
- 监听者模式
- 单例模式(可能会手写,最好掌握,理解每一个字段的作用)
- MySQL(这个要理解好还真得看看书,视频和专栏都太简略了,我基本比较好评的书、视频、专栏都看了)
- SQL题目(基本刷题,看书没用):连表查询,分组查询,SQL关键字的执行顺序
- 存储引擎
- innodb和MyISAM的区别
- 索引
- 实现数据结构,为什么用这个
- 优化理论
- 事务
- 事务特性,AID实现C,如何实现
- 隔离级别,如何实现
- MVCC = readview + undolog
- 日志
- binlog:意义,参数设置
- redolog:2阶段提交,redolog buffer/block
- undolog:记录的内容
- 三者区别
- 高可用
- 主从复制:三个线程执行流程。
- InnoDB实现原理
- buffer pool实现原理:内存结构,三个链表,描述数据,LRU冷热数据优化
- 表空间,数据区组,数据区,页,页目录,槽,行记录
- 行格式(变长字段,null字段,数据头,三个隐藏字段,真实数据)
- 慢查询
- 定位
- show processlist
- 设置慢查询日志超时时间
- 解决
- 偶尔:buffer pool小,redolog buffer小,
- 频繁:explain 看是否有索引,是否用对索引。
- 定位
- SQL完整流程
- update:涉及到缓存页的读取,bufferpool 链表的修改,undolog的更新,数据页的修改,事务提交时日志的两阶段提交
- select:涉及到缓存页的读取,bufferpool 链表的修改
- BufferPool
- Redis (最常见的就是数据结构的实现,使用场景以及持久化的一些原理,缓存问题)
- Redis 和 memcache 的对比
- 数据结构:常见五个记住就好,以及一些简单的命令
- 编码格式:
- 各自的实现编码的方式
- sds的改进,和c、java对比,
- 跳表的实现,
- 字典和跳表为什么结合使用,zset分别使用key以及分数查询时候的时间复杂度,实现原理
- 为什么不使用红黑树或者B+树而使用跳表
- 应用场景
- 持久化
- aof
- rdb
- 混合持久化
- 事务
- 自带的
- lua脚本
- 缓存问题以及常见解决方案
- 缓存雪崩
- 缓存击穿
- 缓存穿透
- 数据库和缓存不一致方案
- 先改缓存后改数据库
- 先改数据库后改缓存
- 先删缓存后改数据库
- 先改数据库后删缓存(cache aside)
- 主从复制
- 全量复制原理
- 增量复制原理
- 哨兵
- 如何实现自动切换
- raft 选哨兵的主
- 客户端使用时候的注意事项
- 集群
- 实现原理
- gossip 原理
- 分布式锁
- 数据库
- Redis
- nx
- lua
- zk
- spring (培训机构最喜欢讲的,比较偏向社招,不要太沉迷,说的就是我)
- IOC 和 依赖注入的源码实现
- AOP的源码实现
- spring 的启动流程
- 循环依赖的解决(二层缓存可以吗,一层呢)
- 事务的实现原理
- 事务的传播机制,隔离级别
- Bean的生命周期,线程是否安全
- spring的扩展点
- springboot (下面的三个就基本够了)
- 自动配置的原理
- 启动的原理
- starter的原理
- mq消息队列
- rabbitMQ 和 rocketMQ 和 kafka的对比,使用场景
- 常见问题:消息不丢,消息有序,消息不重,消息积压的解决方案
- 实现原理(时间不够挑一个重点学,我学的rocket,因为用java实现的)
- rocketMQ事务消息,半消息队列
- 重试队列和死信队列
- rocketMQ组件启动流程,心跳机制,拉取路由实际,负载均衡算法
- commitlog,零拷贝(和kafka的区别),consumequeue,index file
- rocket高可用,dledger。raft算法,主从同步,落盘机制
- 计算机网络:“小林coding”的电子书,应对普通研发岗绰绰有余(至少我面的这些是这样的)。
- 四层七层模型分别作用
- 应用层:http请求响应组成,常见字段,状态码,http 1、1.1、2、3的区别,https流程,
- 传输层:TCP和UDP区别,TCP握手回收流程,状态变化,每一次消息丢失的补救措施,头部字段。UDP如何实现安全
- 网络层:IP层
- 数据链路层
- URL回车整个流程
- 网络安全:中间人攻击,CSRF跨站请求伪造,XSS跨站脚本攻击,SYN Flood攻击 ,DNS劫持,对应的解决办法
- 操作系统:CPU缓存行,执行一个c程序的流程,虚拟内存,分页分段段页式,进程线程协程,PCB组成,进程间通信,线程间通信
- Linux:
- 常见命令使用:top,iostat,lsof,ping,
- 命令原理,kill原理,fork()函数原理
- 僵尸进程,孤儿进程
- 索引目录项,索引节点inode,数据块
- 硬链接(ln -s , 同一个INODE,多个指向自己),软链接(不同INODE,文件里面放的文件指针)
非重点
- netty(花费了我大量时间,结果没人问,装逼失败,所以大家还是多关注面经里面问的比较主流的东西吧)
- reactor + 多路复用
- 零拷贝的几个实现方式,netty的具体实现
- 源码流程
- netty 如何解决粘包拆包,断线重连,JDK的空轮询
- ByteBuffer和ByteBuf的区别是什么
- springmvc
- 运行流程是什么
- RequestMapping的原理是什么
- mybatis
- 两个缓存的作用是什么
#
和$
的区别- 设计模式
- 微服务
- 为什么使用微服务,又是优点和缺点
- 服务如何拆分
- docker (字节做go的部门可能会问问)
- 解释namespace
- 解释cgroup
- Git (没问过我)
- maven (没问过我)
项目(次重要)
- 博客(牛客的项目,自己改了一些,面试主要是讲一些自己改动的部分)
- 常见问题
- 数据流,项目架构,主要的项目难点,
- 消息队列选型对比
- 缓存选型对比
- Redis在项目里面的使用,常见数据类型,使用场景,实现原理
- RocketMQ 的事务消息的实现原理,保证消息不丢失和有序性
- 为什么使用websocket + netty 替换 浏览器轮询的方式,这是单体项目,分布式下还适用吗,不适用怎么做,重新设计一下。
- netty 的源码流程,好处(问的时候都是让我一个人说,问题很泛,将的时候就讲reactor架构,再将启动流程,再讲底层NIO 以及 Linux 的多路复用三者之间的关联是如何相互对应和调用的,一般都会问多路复用怎么样。最后有机会说说netty都做了哪些优化)
- 项目性能提升的手段
- docker 的部署方式,docker 的原理(cgroup,namespace)
- 常见问题
- 比赛项目(一个微服务项目)
- 项目地址:https://github.com/delta-qin/data-heterogeneous-system
- 常见问题
- rabbitMQ 如何实现
- 秒杀(最后没敢写),其实当时也是花了不少时间准备,怎么说呢,大家都说秒杀烂大街但是还是在用,因为可以选择的可以说的项目比较少,还是看自己有没有其他选择吧(我是怕被怼,我发现你准备多少,都会被面试官问倒的)
算法(最重要)
准备思路(ACM大佬除外,早就开始刷题的老哥除外),如果你是准备的比较晚,而且算法的基础比较薄弱,那我建议你可以按下面的思路准备(大佬不要嘲笑,但他对我快速提升算法确实有效):
- 先看PDF,所有题目过一遍,直接看题解,理解思路
- PDF 我比较推荐公众号“数据结构和算法”里面的,作者大佬直接把自己的文章按照分类打包PDF,看的时候很方便,适合过题解。不过这个是java写的,C++或者可以看看Carl哥的,大家自己决定。
- 顺序可以参考公众号 labuladong 给出的思路,不要一上来就动态规划,树和链表还没玩儿溜。我当时的顺序基本是树、数组、链表、栈、队列、双指针、递归、回溯、DFS、BFS、贪心、动态规划、位运算、特殊题。(图直接放弃了)
- 再开始刷题,刷题之外每天再回顾之前的PDF。这个时间点没必要一杯茶一支烟一道力扣调一天。最重要的是如何快速掌握。
面试加分项
- JDK源码(重要)、点到为止的Spring源码(refresh启动流程搞清楚,循环依赖等等如何解决)
- 系统设计(自己的项目熟悉好,设计秒杀系统,海量数据分布式计算也经常考)
- 分布式理论和算法
总结
校招面试不可能考你 class 字节码每一部分构成以及作用,不会问你G1垃圾回收器实现定长时间回收的参数是什么,你可以学过,知道在哪里可以快速回忆,但是没有必要面试前记住这些。所以深入完整学习完每一部分之后一定要汇总每一部分的重点。
时间越短越要学会放弃,一定要有自己十分擅长的。一旦被问到就“总分总”结构去说,面试官不想听会在“分”打断你的。
避坑指南:一些准备误区以及注意事项
- 后端的东西太多了,容易自己走迷路了,一段时间一定要看看自己是不是准备到偏路上了,走偏路是我准备秋招时候经常干的事情。一定要及时调整,时间不等人,你可以招聘完再学,但是招聘错过就是错过了,所以自己要有一个优先级,什么是目前最需要的知识
- 一个人战斗太难了,有同行的最好同行。也不容易走偏,自己很容易大方向走偏,像我从年初到八月底整个过程都是自己在搞,和外界几乎没什么交流,因为周围的人都在保研考研,也没什么共同话题。所以把自己封闭起来了,最痛的就是自己的大方向走歪了。导致春招连一份简历都没投出去
- 自己喜欢看什么就一直看什么,我险些因为这个把自己玩儿没了。尽可能还是要一起看
- 一定要重视算法,可能市面上的培训班不太重视算法,那是因为公司业务用的少,社招算法也不是大头,所以培训机构整天都是分布式秒杀三高,却不重视算法,但是校招算法真的是门槛,门槛都过不去还说啥。(我就是在这上面栽了跟头,很多时候其实不是你意识不到,而是意识到也无从下手。。小白可以参考上面的方法准备算法,大佬不要嘲笑)
- 面试前看的一般不考,但是一定要看,重要的不是你看了什么,而是激活你的思维,打开你的思路。面试时候不卡壳。别指望面试突击被考到,我遇到的大部分都是平时学的东西,不是考前看的。
- 没有实习不能进大厂?实习对于技术开发岗,尤其是本科,如果你的学校还说得过去,应该就不是硬性要求。
- 面试一定要笑,一定要注意礼貌。起码的。你也会因此获益,试试就知道了。
- 开始准备的时间,如果是参加春招实习或者秋招正式,最轻松有保障的时间就是前一年的九月份,九月份先狠刷PDF上的题,大量记思路,后面慢慢每天上手写题,每天看基础,写项目,到第二年二月三月差不多春招提前批开了(是否实习看个人吧,我没来得及实习不代表我不想实习,当时实力不允许,自信心也不够)。后面秋招也是最好参加提前批。按照这个思路应该是差不多可以参加提前批的。
- 面试遇到不清楚的:对不起不会/不了解/不知道,但是让我实现的话我会。。。
一些资料推荐
- 技术公众号分享:
- yes的练级攻略
- 小林coding
- 艾小仙
- 帅地玩儿编程
- 安琪拉的博客
- 数据结构和算法
- 书籍专栏分享:
- MySQL是怎么运行的
- 儒猿技术窝专栏
- JVM
- MySQL
- mq
- 拉勾教育专栏
- DDD 微服务落地实战
- netty
- 算法
- 并发编程
- 极客时间专栏
- OAuth2
- 分布式协议
- 并发编程
- 图灵教育腾讯课堂
有需要的同学可以留下自己的邮箱,我过几天把自己用过的资料整理好可以发给大家。
碎碎念
最后想说的,就是相信自己。
你或许一开始真的没有能力,但是你准备了一段时间之后,即使没有能力也应该去试试,因为这回让你及时纠正自己当前的错误,回归到正确的道路上。
走过最长的路,就是自己铺的弯路。上了4年高中,5年大学,高考完不想看志愿随便写,最后超了分数线8分调剂到自己最害怕的化学专业,学了2年终于转到了软件,开启了2年的肝帝生活,好在阶段性结果还算可以接受,但是谁又知道这是不是下一条弯路,但是根据以往的弯路经验(只要不放松警惕,居安思危,一般不会太弯,毕竟“巅峰之处即为跌落之始”,一直保持进步和敏锐,运气应该不会太差,弯路不会走太久。
选择转专业,选技术方向,选读研究生还是本科工作,这些可能是我这几年经历的几个比较重要的决定吧,有些事情现在看起来好未来不好,现在看起来不好未来又好了,没有绝对好坏,选一个自己肯努力的决定就好,各有各的命,只和自己比,别在未来羡慕别人过去做的决定,每一个决定都有成本,每一个选择都是博弈,不要只看到羡慕别人的结果,看不到别人脱皮掉肉的过程。自己想起来当时做决定时候不后悔就好,毕竟我最爱走弯路了,最爱给自己挖坑了(“无奈||”)。没有绝对的对错的决定,只有自己后不后悔的决定,自己不后悔就行了,别听了别人的,最后自己不好好努力还怨别人,所以最保险的就是别人说的可能是出于好意,经验之谈有对有错,要放到具体的时间、具体的大环境、具体的事情以及谁在做这个事情,不可生搬硬套,执不执行还是要看自己,毕竟最后身处其中的是你不是别人,别人只是动动嘴,你要花的是时间和精力,所以最后的选择就是自己不后悔自己心甘情愿为之付出的决定。
最后总结
文章是去年十月份校招结束写了一些,但是一直没有发出来,现在完善下发出来希望对大家有帮助,其实一段时间不接触八股文自己都有些淡忘了。还是要制造机会继续熟悉起来。本来只是想简单写写,没想到一写就收不住,想起自己这几年的经历,有太多想写的,但也有很多不能公开写,也算是阶段里程碑吧,可能几年后会把自己现在写的当笑话看看,感觉自己还是格局小了。也希望自己以后看这些文字变成笑话,人是需要进步的,希望自己是在进步的。
#春招##内推##实习##秋招##校招##腾讯##阿里云#