因为42-想写一点东西给你们

写在前面

  本来有些东西,换届大会就应该说的,可那个时候我还不知道我在干什么,整天的在怀疑人生,也不知道该说什么好,也就没有去。后来,本来想着找到工作再整理出来,告诉你们,以一个所谓的“过来人”的身份说经验,可是,又想一想,早点告诉你们,你们还能早一点准备,早点知道该去做点什么。下面我要说的一些东西,其实或多或少的一些东西以前的学长也说过,可我当时也没怎么放在心上,因为,那个时候,我可能会有点“膨胀”,哈哈哈哈哈哈。



选好你要走的路

  你要知道你毕业之后要做什么?待在哪个城市?如果只是想靠技术找个工作,然后升管理不做技术的话,那就在小组好好写写项目,准备找工作前看基础知识就差不多可以了。如果想做技术,去北上广杭那些互联网企业,就继续往下看吧。


需要了解的

  其实,下面这些东西,我之前也多多少少都知道,那个时候真的没放在心上。因为那个时候,觉得用框架直接写东西多爽啊,了解那些多线程或者底层的东西完全没多大用啊。所以,这也间接导致了我上面说的怀疑人生,那段时间,我觉得框架真的随便来个人稍微学学就能上手写东西,我在怀疑我到底在做什么,以前那样做的意义在哪。

  所以,也就出现了下面的TO DO LIST。不过,在说之前,你们应该明白咱们学校和人家985/211,除了高考分数之外的区别在哪?为什么有的大公司校招会对学历很严格?这是因为,咱们学校注重的是应用,就是毕业到一些企业马上就可以上手写项目,但这些企业不包括那些大公司。大公司看中的是什么?看中的是你的潜力,你的培养价值,985/211的学习能力强,而且基础知识都很扎实,所以大公司在校招的时候更愿意去985/211的学校招聘。当然,目前的大部分互联网公司,并没有对学历有多严格的要求,但是他们看重的依旧是基础。


TO DO LIST

  1. 计算机基础:操作系统、计算机网络,计算机组成原理,编译原理(我们专业记得没这个课,可以到网上看下公开课)。真后悔当初考完试就忘了。
  2. 数据结构和算法:可以看《算法》和《剑指offer》,对队列、栈、链表这些数据结构要很了解,基本的排序和查找那些算法,了解它们的时间复杂度和空间复杂度,以及它们的应用场景这些。刷经典的面试编程题,《剑指offer》差不多够了,可以去牛客网,有时间也可以去LeetCode刷题,这是程序员的内功。
  3. 常用设计模式:单例设计模式、工厂模式等等等等。
  4. Java很基础的东西:这个应该不需要多说,重载啊、重写啊、多态啊、8大基本数据类型啊这些东西,网上多看看面试题。
  5. Java集合框架:看下集合框架的源码,ArrayList、LinkedList、HashMap等等这些的源码,底层用什么实现,各有什么优劣等等。HashMap面试几乎都会问到。
  6. Java并发编程:参考书《Java并发编程的艺术》或者《Java并发编程实战》,了解下Java并发容器、多线程、线程池那些东西。
  7. Java虚拟机:推荐《深入理解Java虚拟机》这本书。了解Java的内存划分,垃圾回收策略等,还有类加载机制几乎都会被问到。而且,学完真的会对Java有更深的了解。
  8. Java NIO:百度搜一下,并发编程网上面介绍的不错。
  9. 了解Netty:如果可以读下它的源码就更好了。
  10. MySQL数据库:推荐一本介绍基础SQL的书叫《MySQL 必知必会》。不过面试一般都会问到调优这些东西,再推荐一本《高性能MySQL》。
  11. JavaEE基础:也就是Servlet相关的东西,比如Servlet的生命周期。
  12. Web框架相关:Spring、Spring MVC、MyBatis这三个框架,从小组出来的,应该会用这三个框架是没问题的,但是一定要深入的去理解,理解Spring的IOC以及AOP,代理方式什么的,如果有时间,看下源码也是极好的。如果项目中有需要可以学下Shiro安全框架以及全文检索引擎Lucene/Solr,也可以关注一些新框架,比如Spring Boot等等。《Spring 实战》、《Spring Boot实战》、《深入浅出MyBatis》都不错。
  13. Maven:引入Maven来管理Jar包,对项目模块开发什么的。
  14. Git:学习一下Git的用法,多去Github看看,如果可以参与一下开源项目也是极好的。推荐廖雪峰老师的教程——》Git教程
  15. Tomcat源码:去看下Tomcat源码,了解下它的设计模式。有一本书《how tomcat works》,中文名叫《深入剖析Tomcat》,我还没看过,但是很多人都推荐。
  16. TCP/IP、HTTP协议:一定要了解TCP协议。也要知道HTTP协议中的请求方法和常用的请求头,还有状态码等等,作为一名Web程序员是必须要了解的。
  17. Linux基础:不需要Linux学的多深,会些基础操作就好,比如手动搭建起来一个Web服务器,Tomcat + Nginx + Mysql。推荐《鸟哥的Linux私房菜》。
  18. NoSQL数据库:主要是用于做缓存,比如Redis,项目中可以用到Redis就要用,多了解一下Redis,比如它的特点、在分布式中如何应用等等一系列的东西。
  19. 实现一个轻量级Web框架:推荐《架构探险-从零开始写Java Web框架》,自己去实现一个,对Java的反射,对那些框架也会有比较深的理解。
  20. 分布式:多去了解分布式的东西,比如阿里系的DUBBO框架、Zookeeper、大数据相关的Hadoop等等一系列技术。
  21. 掌握一门脚本语言:Python也好,Shell也好,Js也好,试着去掌握一门。我推荐的是Python,最近我也学了Python,感觉很不错。不过,我建议你要在能熟练使用Java去写东西的时候再去学,这样可以更好的理解Java和Python而不至于把自己搞的混乱。也推荐廖雪峰老师的Python3教程——》Python3教程
  22. 关注业内新闻:多关注一些网站,比如InfoQ或者开源中国这类网站。

项目经验

  我上面提到的东西,你完全可以在写你现有项目的同时去学习,每天学一点,应该足够了。

  项目这种东西,不在于数量,在于质量。不管你是做自己的项目,还是做小组的项目,你必须要去考虑一些事情,比如:同时1W个人来访问你的项目,你的项目会怎么样?这就需要你去掌握一些并发啊等等一堆知识了。还有就是要考虑数据库,怎么取数据更快?你就会去学习Redis,并给你的项目引入缓存机制。还有MySQL的性能,怎么去优化?你就会去学习MySQL的调优。


学习的小建议

  我个人认为,最好的获取新知识的方式是:书籍为主视频为辅。因为,大部分视频是告诉你怎么用,而书都会很详细的介绍一个点。

  最好的学习方式就是实践,就是去写代码。在理解的基础上去写代码,多去写代码,才记得牢。

  还有就是,要在Java有深度的前提下去扩展广度。

  如果有心的话,去搞一个博客,记录笔记。虽然现在写不了什么有价值的东西,但是你要明确你是写给自己看的。而且,写博客是一个过程。最后,你也要知道,你发一篇博客,要确保你写的东西是正确的。


小结

  上面那些东西,在秋招前,如果能完成三分之二,我就很满足了,毕竟明白的太晚。如果,早一点留心的话,哎。。。不过,之后要努力将上面的List都做完的。

  现在看文章的,后台开发部门的你,不管你大几,希望你要留心,选好你的路,就马上去做。

  如果认真去做完上面那些东西,BAT不要你,那就可能是他们的问题。当然,这句话,你也可以理解为“吹牛逼谁不会啊?哈哈哈哈”。

  希望,每天的我们都和昨天不一样。

  最后,感谢42。

Author: HowieLi
Link: https://www.howieli.cn/posts/because-42-so-wonderful.html
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.