都说程序员吃青春饭,也许你可能不信,你会觉得不管哪行哪业都是吃青春饭呀!因为其他行业的知识是大概学完的然后使用一辈子,就比如司机,只要学会开车就行了,然后不断的每天开;比如教师,只靠考证考了,然后平常上课就好了,而课本的内容也是好久才改版一次;就比如做烧饼,只要长年累月的做就行了(武大郎表示内行╮(╯_╰)╭)
而程序员如果也是这样,那可能要不了几年就会慢慢的被淘汰了,只能在一家公司一直干直到被裁失业;
仿佛想起了开始学习编程的我,打开了一个新世界的大门,所有的一切对我来说都是新奇的,我可以通过不断的学习掌握一个个知识点,感觉对java所有的东西都很有兴趣,沉迷于java不可自拔,这也是喜欢编程的人的共性吧!
我比较喜欢Linux 的创始人 Linus Torvalds 在 2000-08-25 给linux-kernel 邮件列表的一封邮件提到的一句话“Talk is cheap, show me the code”,简单翻译就是:少bb,代码给我瞅瞅!
仔细了解任何一门语言的会发现很多东西很巧妙,宛若天成,这背后是由不知道多少大佬不断的进行完善。
由于我是自学的java,很单纯的就是因为兴趣,在学习中途也走了不少弯路,其实也是在不断的完善自己的知识体系,从最开始接触java从java的起源开始,到现在也能凭着写代码吃饭了,哈哈哈,功夫不负有心人吧!
毕竟,兴趣驱动学习!
不断的学习,终有一天将javase,ssh,ssm,spring源码,springcloud,double,redis等等知识点学习过了一遍,这个时候你会觉得这他喵的学的东西真的多,有哪个语言需要啃这么多东西才是入门的?还记得ssm框架我学了两三天(主要是有配置文件和注解两种方式,就跟学6个框架一样),然后搭环境用了两三天......
等到入门了之后你就会发现这些框架才是迈出第一步,接下来就是了解原理了,例如jdk中常用数据结构的原理,然后spring,springboot等常用开源框架源码以及原理,这些了解之后,你会发现接下来你需要了解数据结构和算法了(非科班出身这块是很薄弱的),这也是走向中级程序员的必经之路,这些东西学完了之后然后就是jvm了,其中各种分区,垃圾收集机制,class结构以及文件解析方式以及各种调优(从来没调过,但是出去面试经常被问,你可以没有调过,但是你必须要会调,还要把怎么操作一步一步说清楚,装作你很拿手的样子\(@ ̄∇ ̄@)/)
ok,到了这里java基础知识算是告了一段落,你以为结束了吗?并没有,上面那些只是让能搭建出一个基本的分布式项目,但是性能方面却是很拉夸;
然后推出面试必问三大点:关系型数据库,缓存,消息队列
关系型数据库的话,一般就是用mysql和oracle,sql写法差不多,就是一些函数名称不一样;面试的时候有笔试题就看看你sql写的溜不溜(其实说实话,工作上sql写的溜比你了解什么什么原理强多了),然后就是问你sql怎么优化呀,怎么用索引,索引原理啊,怎么排查一个sql执行的慢,更高级的一点的就是怎么读写分离,分库分表...
缓存的话一般就是redis,恶心点的问题就是redis和memcache的区别,这个就是技术选型的问题了,然后还有redis数据结构,持久化原理,分布式锁,主从复制,哨兵模式,集群模式,虽然不会问你详细的怎么搭建,但是会问你缓存在你项目中使用的场景,出了问题你是怎么排查,怎么处理
消息队列的话,一般就是rabbitmq,rocketmq和kafka,就我感觉入门就先学习rabbitmq,然后再去深入学习kafka!因为学kafka,又会扯到zookeeper,因为kafka是基于zookeeper搭建的,zookeeper又能扯出来一大堆东西。。。面试一问到消息队列,首先就是问你之前项目的应用场景,其中实现原理,出现了一些问题你是怎么排查的,怎么处理的
你以为这些就学完了么,殊不知还有一大堆东西
比如:非关系型数据库mongodb,一般的使用场景,和关系型数据库mysql什么区别啊,然后各种知识点吧啦吧啦一大堆;
又比如站内搜索引擎solr和elasticsearch(简称es),学其中一个就好了,这个就是做站内搜索的,例如淘宝网站那个站内搜索和百度的那个搜索区别就很大好吧,我们可以把es看做一个数据库吧,将es和mysql中一些表的数据进行同步,然后在网站中用es就可以达到搜索的功能了;
可能那有些人要问了,mysql不是可以搜吗?为什么还要使用es啊?坑爹啊!举个例子,你的系统中需要有个搜索物品的功能,用户输入了“夏天鞋子 男性”,你肯定希望用户既能查询出来“夏天鞋子 男性”相关的数据,也能查询出类似“夏天鞋子”“鞋子”“夏天”这种相关的数据嘛,这样给用户选择的可能性就高多了,如果用mysql实现这种功能很麻烦,而且效率很辣鸡,使用es就是比较好的选择了。哎,不说es了,搜索这块的东西太庞大了,还能扯出来elk之类的很多东西
还比如权限框架,比如springsecurity与shiro,两个框架功能差不多,建议学其中一个,但是学起来都不容易啊
又继续比如分布式事务框架,例如seata,其实简单来说就是你在一个微服务A中首先调用B服务的service1,然后调用C服务中的service2,由于B和C不在同一台机器上,而且数据库用的也不是同一个,怎么保证A中调用B和C的事务性呢?所以就有了分布式事务了;
学到这里,跟框架相关的东西就已经是完成了,而且你已经可以写完一个分布式项目了,项目中是一个个微服务组成,各个微服务之间还有各种缓存,消息等中间件,通过一个网关对外提供一个统一的接口,权限框架控制每个用户访问的路径;
但是问题来了,项目做好了是要部署到服务器的,你以为是要运维做吗?当然是要你做啦!所以你还要学习linux系统的常用命令,如果想精通linux的话还需要很长时间的学习和使用,然后由于微服务太多,不可能一个一个服务的部署,所以你要需要学习docker进行微服务的打包和部署,当微服务数量太多的时候docker管理也不容易,于是你还要会k8s,又是一个漫长学习的过程。
经历了上面说的这么一大堆的的东西,才只能说明你起步了,对java开发有了一个基础的认识,怎么说呢?停留在了大概知道有这么个东西,基本什么用处,但是过不了多久就会忘记,因为很多东西实际项目中根本用不到好吧.....那就需要实际项目和熬夜加班的沉淀,才能让你对其中某些框架知识有深刻的印象!
说了老半天,这还只是后端的东西,如果还有精力啃啃前端,那又是一个全新的世界等着你探索,哈哈哈哈!
前端的话就没有这么多技术了,感觉比较纯粹吧,最开始入门的html,css,js学完了之后,就是各种库了,jquery,bootstrap以及各种ui组件库,然后就是vue,react,angular三大组件化开发的框架了,其实只要精通vue和react会了就好了,因为这两个框架是必学的嘛!不过最好主攻一个框架,另外一个框架平常了解吧!前端还包括安卓开发,ios开发以及混合模式开始app,这就已经是另外一个层面了.....
别看我三两句话就把前端说完了,但是组件化开发中的各个插件也是很多很多的,需要学习的东西真的很多;
说了这么多,再回头想想程序员是吃青春饭这句话真的没错,因为技术的发展太快了,就比如目前时间是2021.04.17,常用的jdk大多都是jdk7和jdk8的,而JDK16已于北美时间2021年3月16日发布了,尼玛拼了命也追不上这版本的更新速度啊!还有我们知道springcloud全家桶中很多组件其实直接拿的netflix公司开发的组件用的,但是netflix公司早就宣布很多组件暂时停止维护了,在这么发展迅速的时代,也许过几年就会有新的框架代替如今的框架了(其实现在已经有了开源的springcloud alibaba可以代替之前的springcloud了),毕竟发展的速度太快了,都快学不动了;
真的是学的东西越多,就会发现需要学习的东西越多,就越不敢谈“精通”二字,这两个字太沉重了,只敢说熟悉,了解,哈哈哈
java真正可怕的是既需要足够的广度,还要足够的深度,同时还需要有足够的业务来支持,毕竟没有经过业务的考验终究“|纸上得来终觉浅”,但是很多业务场景实际中根本碰不到呀,尴尬!
在日常工作中其实我们大多是去处理各种业务逻辑,就不信晚上九、十点回来了还能继续学习的,那简直就是精神太亢奋了,容易掉头发,正常的是一到家洗洗睡了,躺着立马就能睡着,周末才有时间整理一下最近让自己进步的东西吧!
最后说一点,如果刚学java没多久的人觉得java知识点太多,学了总是忘记,建议最好就是去背诵面试题,想想,被网上广为流传的面试题肯定就是最重要的东西呀!背面试题真的是最快掌握知识点的一个途径,比你自己总结的笔记不好多了么,哈哈!
大家共同进步呀! 不管怎么样,每天都要明确自己的目标,不要忘记了当初下定的决心,不要放弃当初定下的理想!
时刻保持正能量!