博文介绍:
这篇博文我改了一周,职业生涯所有技能例如javaSE基础,ssm框架,springcloud全家桶,dubbo+zk框架,MySQL数据库,MongoDB数据库,redis缓存,es与solr全文搜索,linux系统,docker应用容器引擎,Activiti工作流,Fastdfs分布式文件系统,ActiveMQ与RabbitMQ消息队列,JUC并发线程工具类,线程池技术,Freemark与Thymeleaf模板引擎,面试总结等,java知识点覆盖面广泛,几乎覆盖了从入门到入职拿月薪过万的所有知识点,详细讲了从2016年入行到现在的心路历程以及面试经历和一些经验之谈,还讲解了一个职场真实案例,以及自己做过的企业级项目与自己写的个人项目介绍等.
博客归类:
心路历程:
恍然间,发现自己在这个行业里已经摸爬滚打了好几年了,从2016年开始入行,那时的我技术不行(毕竟入行的菜鸟,能强到哪里去),面试技巧也不会,基础也不是那么强,出去面试总是被拒绝,心里很是难受,后面心态改变了,把面试当做工作,面试二十多家,总算混进第一家外包公司了,当时拿着8k,心里还是挺开心的,入职前三个月感觉啥都不懂(那个时候做java后端还需要做页面数据绑定,有时一些样式都是自己调,真的操蛋),那三个月是过的最难受的,后面成为正式员工后好多了,就一直干着,外包公司项目多,所以期间我混了几个项目经验,反正CRUD写的贼六,一些框架都接触过,流行的框架基本都用过,不过基本没有怎么看底层源码,当时觉得会用就行了(相信你也有过类似的想法),准备跳槽了,原以为自己就凭已有的项目经验和工作经历怎么着也应该算得上是一个业内中等的存在了,但是2018年在换工作的过程中却遭到了重大的挫折。面试过的大厂有PPTV聚力,中国平安,阿里,23456。。。详细过程我就不再叙述,反正让我体会到面试是造航母,工作缺像拧螺丝,在此,只想给大家说一说被拒绝的原因,看看大家有没有相似的经历,和类似的感悟。
面试官提到的一些问题都有映像,心中都有一个模糊的概念,甚至于有些最常用的,最基础的问题回答的不清不楚,那时我就很郁闷,甚至连项目中我负责的pc端的支付宝扫码支付我都讲不出个所以然来,但是明明是自己做过的,并且完成过的居然也答不上来,心中那般无奈。我记得比较深的一次是问了我一个基础问题:举个列子说明一下多态,看看多么简单的问题,初学java的人都知道,多态字面意思多种状态,允许将子类类型的指针赋值给父类类型的指针。我当时讲了一个冰和水,现在想想都好笑,脸红,直接说List和ArrayList不就得了吗?
后面遇到另外一个面试官,他问我栈的工作方式是什么?我说先进后出,后进先出。他接着问你怎么理解这个方式?或者说你举个列子描述一下?我当时很无语,这个不就是你先进来晚点出去吗?然后我就沉默了。之后他对我的答复大致是这样的,你吃东西吃吐了,先吃的东西在肚子里,后吃的东西在嘴里,吐,肯定是先吐嘴里的东西,后吐肚子里的,你这样描述是不是就容易让人理解,其实我知道你会这个东西,但是你描述不出来,那么日后我们的工作肯定会有很多次的讨论与交流,包括和产品,客户的交流都是需要你能够讲的出来。我们不仅需要熟练工,我们还需要拥有整套完整思维模式和优秀认知事物能力的人(当时听着有点懵逼,觉得他是说我语言表达能力的问题),他很诚恳地告诉我,你还年轻,真的应该好好地静下心来,系统性的,深入的研究一些东西,自己写一些功能模块至少用的技术点要了解底层的一些原理,数据结构,而不是这也用过,那也知道,但是多半都是局限于仅仅见过,会用,却从来没有认真思考过其代码背后蕴含的思想。
后来听一些小公司人事吐槽说现在培训机构出来的学生要的薪资真离谱。。。(反正不是什么好话)然而我听进去了,培训半年出来工作比我们这些入行几年的都高,肯定有一定的可取之道,网上百度了几个有实力的培训机构,尚硅谷,黑马这二个还行,我去一些培训机构的官网下面留言,问那些老师,说我觉得我有些东西都用过,但是过了一段时间就忘记了,导致面试的时候答不上来,老师说这个是很正常的,让我可以系统的学习一下,记录学习笔记,之后在面试几家公司成功入职之后,正式开始从头整理,学习路线按照培训机构的来,网上找免费视频,腾讯课堂,哔哩哔哩,这二个是我看的最多的二个,至于为什么不去培训官网看视频,当然是他们家的视频要付费呀,有免费视频为啥要付费呢,当然费点时间也可以找到一些培训机构的视频,有些人分享的云盘里面有,但是我也懒的找。
一开始我是用脑图记录的,本地写了十几篇,后面觉得没啥动力了,就放弃了,好长一段时间过着混吃等死的日子,无意中看到一篇博客,大致意思是写博客一可以记录自己所学,二可以分享出去让大家关注你获得一种成就感,三可以提升自己的影响力,四可以让他人指出你知识点的误区(写错了肯定有人骂)。之后我在csdn上重新创建了一个新号,一起从零开始。
到现在写了快一年多了,知识面也全了,在2019年9月份的时候出去找工作,面试五家公司,拿到二家office,(还是比较快的,至少比2018年好太多了)第一家出来面试有点紧张,脑子有点空白,毕竟又没有天天面试,多少都会紧张。答得七七八八,感觉凉了,不过记录了几个面试题,第二次面试的是外包到阿里的项目组,面试了四轮,说我对SpringCould的技术还不太熟练,基础很扎实,让我等通知,二周后才给了我答复,但我都入职了。第三家还是外包公司外包到阿里项目组,前二轮小意思,第三轮给了我一个文档(菜鸟虚怀项目笔试题):https://download.csdn.net/download/java_wxid/11672431写的七七八八,过了第三轮,第四轮问一个要我设计出一个刚好在一秒内设计出一个程序让堆溢出,但时提出的几个方案:第一种:改配置,调小堆的大小,循环创建对象(直接被怼)第二种:杀死GC线程不让它回收,循环创建对象具有强引用。第三种:计算一个整数的阶乘,计算的整数很大、很大的时候,使用递归算法。第四种:同一时间,多线程创建强引用对象。
都好像没有答到点上估计凉了,第四家和第五家面试都只有一轮,都拿到office了,二个offer,二选一,进公司了。(我是如此渴望进大厂,命运如此玩弄我,好吧,小企业也混着吧)
想想自己的小目标,2020年达到月薪20k,只能继续整理,深度挖掘了,比如像我们常用的MySQL数据库为什么默认使用InnoDB,索引的数据结构什么样子,es的分布式架构原理说一下,多线程CAS,ABA问题,线程同步锁等等这种类型的问题至少要会说吧,而且还需要懂原理、源码,有自己的观点看法,有较强的分析、设计能力。但是一想到我一个朋友做大数据的,拿着月薪30k的薪资吹B,自己却为了20k作为明年的目标,一顿挫败,不过做java的拿到20k也算正式踏入高级程序员的行列了(至少中小企业来说是这样的吧)
当然在这里可以给一些刚入行没有多久的朋友一些建议,如果你是在校的,努力打好基础,因为未来三年都至关重要,有多余的时间自己弄一个项目部署发布到公网上,带着作品面试比没有作品面试要强很多,我有个粉丝,本科毕业带作品入职起步12k,想想几年前的我起步8k,差距,这就是差距。
如果你是刚刚入职的,入职前三个月,一定要警惕,公司是有考核的,入职后不要想着玩,尽快熟悉项目技术,早日拿下几个独立的模块,到那时才算的上稳定下来。
如果你是工作几个月的小菜鸟没有独立开发的能力,基础也很弱,理论与实践都菜,实践方面请到github上搜索几个金融项目练练手,从单一架构到分布式架构,至少手写三个小项目,不求你会搭建,至少能把功能写全。这个是第一阶段,第二阶段,需要你有对接第三方接口的能力,比如接入支付宝支付接口,让你弄一个编辑器等等,至少自己负责的模块要会弄。第三阶段,开始搭建项目,不用任何架构搭建一个项目,Spring+SpringMVC+Mybatis(SSM),SpringBoot+MyBatis,SpringCould全家桶,dubbo+zookeeper+spring,ssh(这种架构很老了这里就不推荐了),云架构。
如果你是工作一年以上,可以去看看进阶的一些视频,流行的一些框架,高并发,高可用,分布式,微服务,线程池技术等等。
如果你是三到五年的,我这里就不做建议了,你基本有自己的学习计划了。不过三年是一个阶段,一般的基本都已经入门,能够独挡一面了,后面需要选择你的职业规划,你的发展方向是啥?全栈工程师,架构师,大数据,项目经理。。。选择方向时主要看兴趣与实际条件。
在这我提一句,如果你想拿高薪,那么能自己解决的尽量不要问同事,养成自己解决问题的能力,想想以后全公司就你技术最牛,你不会,你能问谁,你的同事更加懵逼,连问什么都不知道,不要觉得不可能发生,但你进入一家小公司时你就知道,所有事情都问题,不归你管的也得你负责,因为项目组里只有你有能力解决,真实发生在我身上的事例,在此告知,在你技术能力不够高的时候,尽量多分担团队的工作量,这是你能力提升的机会。
在聊聊理论与实践,理论是面试的一个敲门砖,是日后技术交流的基础,是装逼的好工具,实践才是真理,才是王道,如果你只会说,你可以去当讲师,但干不了多久程序员,你吹的再好,真的让你弄一个功能,不会的时候你会非常尴尬。但是理论却是加薪的法宝,特别是中高级以上的程序员,大家都会做实现,凭什么你工资能比他高,一个是理论知识扎实,别人问你,你至少可以解答,可以表述给产品或者客户,至少别人认为你可以弄这个东西,二个理论知识扎实,底层的一些运行原理总会吧,一旦遇到问题可以很快定位到是哪方面出的错,出现这个问题是什么造成的,可以有那几种方案解决,那种好一些
项目介绍:
到现在,我做过的公司项目有:目前做过的企业项目垂直领域的电商,分别是做电子元器件(立创商城),质量检测(百检网)。 一个移动端资源平台(微信花积分公众号)(目前已嵌入云闪付app)。 一个车险理赔项目(后台项目目前无法访问)。
个人写的项目也只有二个
一个是单一架构的电商,给上连接:https://github.com/javaliao/personalmall
-
Spring Boot:容器+MVC框架
-
MyBatis:ORM框架
-
Swagger-UI:文档生产工具
-
Redis:分布式缓存
-
Elasticsearch:搜索引擎
-
Druid:数据库连接池
-
ActiveMq:消息队列
一个是分布式的电商项目,给上连接:https://github.com/javaliao/mall
分布式电商总后台技术选型
-
使用freemark作为模板引擎,先简单练练手,主要是网站前台后期要做seo推广 后台首页:http:
//localhost:8085/jumpController/
-
使用bootstrap作为响应式框架
-
使用springBoot+mybatis作为主体框架
-
使用IntelliJ IDEA的Database生成实体类
-
使用tk.mybatis作为通用mapper
-
使用druid数据库连接池,以及监控启动项目 druid监控地址:http:
//localhost:8085/druid/login.html。 使用用户名:druid密码:druid登录后,必须先访问一个后台应用的URL,执行了后台程序后,才能看到监控数据。
-
使用actuator用于在项目运行时,查看运行中的各种配置及参数等 类似:Mapped
"{[/jumpController/toProductCategoryModify],methods=[GET]}"
-
使用devtools用于修改代码自动重启
-
使用Swagger-UI作为API文档生产工具 访问文档地址:http:
//localhost:8085/swagger-ui.html
-
使用Hadoop的HDFS作为分布式文件系统,实现图片存储
-
使用log4j作为日志文件,我配置的日志文件路径是E:\Project\PersonalProject\DistributedProject\Log\spring.
log
-
项目部署 将jar上传到服务器的usr/local/apache-tomcat/webapps下 cd /usr/local/apache-tomcat/webapps java -jar backstage
-0.0
.1-SNAPSHOT.jar &
分布式电商网站前台技术选型
-
使用freemark作为模板引擎,后期SEO推广
-
使用springCould全家桶+mybatis作为主体框架
-
使用eureka作为服务注册中心,这里并没有做高可用的注册中心,仅为单一注册中心,便于后期更换注册中心consul或者zookeeper
-
使用Zipkin作为分布式的跟踪系统
-
使用zuul作为路由网关,实现请求转发
-
使用Hystrix作为断路器,实现异常熔断
-
使用Feign作为服务消费者,对外暴露接口
-
使用ribbon作为负载均衡客户端
-
使用config作为统一的配置中心
-
使用mybatisGenerator作为mybatis代码生成器
-
使用Swagger-UI作为API文档生产工具,实现在线调试,接口文档查看
-
使用Redis作为缓存,实现数据存储,快速读取
-
使用ES作为全文搜索服务器,实现了可配置、可扩展并对查询性能进行了优化,并且提供了一个完善的功能管理界面
-
使用kafka作为消息中间件,实现高吞吐,完全的分布式系统,适合处理海量数据
-
使用ClouderaFlume作为日志收集系统,支持在日志系统中定制各类数据发送方,用来收集数据
-
使用Hadoop的HDFS作为分布式文件系统,实现图片存储
-
使用Hadoop的yarn作为资源管理器
-
使用Hadoop的mapreduce作为并行处理的计算模型、框架和平台,来计算
-
使用Hadoop的common一些工具
-
项目架构
-
basic作为基础库,用于存放公共方法,或者工具类
-
bean作为实体库,用于存放实体类
-
service-zuul作为网关路由
-
service-ribbon作为负载均衡
-
service-feign作为服务暴露
-
eurekaserver作为注册中心
-
config-service作为配置中心服务端
-
http:
//localhost:5000服务链路追踪
-
http:
//localhost:8761注册中心
-
http:
//localhost:5000/api-a/hi?name=aa从zuul到ribbon到service-hi
-
http:
//localhost:5000/api-b/hi?name=aa从zuul到feign到service-hi
二个项目没有完全开发完,目前个人开放进度较慢,毕竟从数据库设计,架构设计,前端数据判定,后台接口编写,服务器配置都得弄,希望有兴趣的同学可以加入,这里给上地址:https://github.com/javaliao/
转载:https://blog.csdn.net/java_wxid/article/details/103213813