自学编程的困局
自己有强大的自学能力 + 自己愿意去折腾摸索,那么你自学完全可以滴。然而事实是,很多人自学能力一般,也没那么多时间折腾。
- 网上资源很多,但没有重点。一个jvm视频动辄就是几百集,有几个人能坚持看完的,而且很多在校招面试中压根就不会考。这就导致不知不觉走了很多弯路,会花费半年甚至更久的时间才能学完基本的八股文,如果你有大量的时间去打磨也是可以的。
- 有问题没人请教。毕竟大部分同学都是零基础入门的,经验和经历有限,学的过程中很容易遇到问题,在网上要找到跟自己问题精准匹配的问题是需要花费一定的精力的,而且计算机是一个偏实操型的学科,实操过程中各种稀奇古怪的环境和配置问题基本在网上要花大量的精力去解决。
- 理解的知识点可能是错的或者是不全面的。对于一些比较难的知识点,很多同学自认为自己理解对的,但很多时候可能是自己YY的,跟面试官要的答案可能是偏差的,面试官碍于情面很多时候是不会给你指出来的,导致很多同学觉得自己面试还不错啊,为什么没offer呢。比如MySQL的binlog和redolog都背过有什么用,那为什么有了binlog还需要redolog?布隆过滤器可以解决重复消费的问题,那当过滤器数据接近饱和后误判率提高,如何扩容或者如何删除历史数据。
- 面试问题可能是企业场景问题,没有经历过就是理解不了。现在的校招面试不像前两年问几个八股文就完事儿了,基本都是面试官结合自己的企业级开发场景来提问,很多同学没接触过企业级开发,怎么可能回答出来场景题呢?比如现在有两张数据表,一个库存信息表,一个订单表,现在要做对账逻辑,如何对这个逻辑进行极致的性能优化,很多同学听到这个问题就是懵的。
以下是我给某同学模拟面试后的反馈情况,可以看到自认为的不错,实际离大厂面试还有一定的差距:
技术栈 | 自评 | 模拟面试情况 |
Java基础 | 基础还可以,看完过尚硅谷视频和一些八股文 | 基础语法能答出来,反射为什么慢、、hashmap等底层实现原理说不清楚;为什么要设计抽象类、面向对象的理解等体现个人思考类问题答不出来 |
计算机基础 | 大学课上学过,分数还不错 | 基本概念能答出来,知识面不够广,如三次握手的问题、swap分区概念、拥塞控制的优化手段等 |
MySQL | 八股文都看过,一些小公司面试都能过 | 基本八股文回答还可以,涉及底层一点的搞不定,如磁盘页的记录格式、为什么有了binlog还需要redolog、加锁范围的各种情况讨论 |
并发编程 | 了解Synchornized、AQS、线程池等概念及原理 | 锁升级的回答流程是错误的,CAS、Volatile等底层实现机制搞不清楚,具体实际场景不知道选择什么并发工具类来解决问题,如夜间对账场景怎么做性能优化 |
Redis | 了解基础概念及常见八股文 | 八股文回答的还是不错的,实际应用场景不知道怎么解决,如B站弹幕人数统计 |
微服务 | 了解微服务概念、MQ和RPC基本架构 | 基本概念差不多,但不够深入,如设计RPC框架如何兼容不同语言客户端,健康检查、优雅启停、业务分组、熔断限流具体怎么设计方案;RocketMQ和Kafka的使用场景选型、技术架构细节对比 |
项目 | 做过苍穹外卖 | 流程是说的出来的,但更多的是一些通用型的技术方案,实际的企业化场景该方案可能是错的,问如何优化、如何扩展答不出来 |
怎么测试自己是否有比较好的学习能力:找一个没学习过的知识点文章,看完后,找周围的同学从概念+工作过程+为什么这样做三个维度进行讲解,你同学的反应就会告诉你的学习能力怎样。
- 如果你的学习能力强、学历好、时间多,就不用花钱买一些付费服务了;
- 如果你学习能力一般、学历一般、时间又比较着急的情况下,个人建议还是找找前辈指导下吧,花一点小钱换一份好的工作肯定是值得的。
- 要注意甄别,关于如何甄别是否靠谱,我在历史的帖子里也讲过,不要听他各种title,各种吹,直接听他讲解知识点,你觉得舒服那么就是好的。