10年 Java 老鸟,写给 1-3 年程序员的几点建议,满满硬货指导
Posted Java领域指导者
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了10年 Java 老鸟,写给 1-3 年程序员的几点建议,满满硬货指导相关的知识,希望对你有一定的参考价值。
从 11年毕业到现在也从业10年了,普通本科毕业,现在一家互联网公司担任 Java 部门总监,摸爬打滚,坑坑洼洼也经历了不少。思绪很久决定还是写下这篇,希望对后进的小伙子少走一点弯路。
很多人把职场想得太美好,其实不然。如果你没有规划好,你就会难免遇到各种各样的问题:工作不开心;没有前进的动力;工作不是自己想像的那么好;自己的才能无法发挥;看到以前的同学待遇如何如何,便受不了刺激,急切地想跳槽;当初为了生存而找的工作,根本就不适合自己……
这些问题通常会在步入职场的 1-3 年之内最明显(3 年之后之所以不明显,是因为你已经被现实折磨得太久了,已经被种种不平现象同化了,因此也就习惯了。你曾经的种种抱负被现实碾得粉碎。于是,你也从一个志向远大的年轻人一下子变成了一个碌碌无为、甘于平庸、成天为了生计而奔走的普通打工者)。如果不及早解决这些问题,那么,你就会荒废这 3 年的时间(有的人可能会更长),而对于一个职场新人来说,这 3 年至关重要,是锻炼能力、积累资本的黄金 3 年!一旦错过,则要花费更多的时间,从头再来,重新弥补!更有甚者,可能一辈子都无法弥补!这绝对不是危言耸听!
为什么要清楚自己的目标?因为,有了目标,才有行动的指南。知道自己想干什么,喜欢干什么,这才是你前进的最终动力。工作不开心、动力不足、盲目跳槽的最根本原因是职业目标不清晰。
作为 Java 程序员头三年更是如此。清楚自己的定位,规划好自己的前进路线,这是将是你超越其他人的最快方式。当然学习是枯燥的,这也使得大部分人会普通,坚持不下去,但是坚持下去的人那都是优秀的人,在今后的日子里他们的优势会更加的明显。这不可否认,业界大牛都不是平白冒出来的,都是通过自身努力拼出来的。
作为前辈我不确定我现在给出的一定百分百正确,但至少能让你少走一点弯路。
参加工作 0-1 年之间,java 程序员必须要做得事儿
当你学会了 Java 的基础知识以后,你还不足以参加工作,你还需要继续深造。你必须要学会 java 开发框架。公司里为了提高开发的效率,会使用一些 Java Web 框架。目前比较主流的是 SSM 框架,即 spring、springmvc、mybatis。你需要学会这三个框架的搭建,并用它们做出一个简单的增删改查的 Web 项目。你可以不理解那些配置都是什么含义,以及为什么要这么做,这些留着后面你去了解。但你一定要可以快速的利用它们三个搭建出一个 Web 框架,你可以记录下你第一次搭建的过程,在搭建的过程中,也可以顺便了解一下 maven 的知识。在你目前这个阶段,你只需要在网络上了解一下 maven 基本的使用方法即可,一些高端的用法随着你工作经验的增加,会逐渐接触到的。
源码与设计模式
参加工作 1-2 年之间,Java 程序员必须要做得事儿
这部分时间段的同学,已经对 Java 有了一个更加深入的了解。
这一年,你必须对于设计模式了如指掌,此外,设计模式并不是你这一年唯一的任务,你还需要看一些关于代码编写优化的书。总而言之,这个阶段,你的核心任务就是提高你的代码能力,要能写出一手优雅的代码。
另外,在过去 2 年的工作当中,你肯定或多或少接触过并发。这个时候,你应该去更加深入的了解并发相关的知识,与此同时,这个阶段你要做的事情还远不止如此。这个时候,你应该对于你所使用的框架应该有了更深入的了解,对于 Java 的类库也有了更深入的了解。因此,你需要去看一些 JDK 中的类的源码,也包括你所使用的框架的源码。总而言之,这个阶段,你需要做的是深入了解 Java 底层和 Java 类库,也就是 JVM 和 JDK 的相关内容。而且还要更深入的去了解你所使用的框架,方式比较推荐看源码或者看官方文档。
分布式微服务与高并发
参加工作 3-4 年之间,Java 程序员必须要做得事儿
这个阶段的同学,提升已经是很难了,而且这个阶段的学习往往会比较多样化。因为在前 3 年的过程中,你肯定或多或少接触过一些其它的技术,比如大数据、分布式缓存、分布式消息服务、分布式计算、软负载均衡等等。这些技术,你能精通任何一项,都将是你未来面试时巨大的优势,因此如果你对某一项技术感兴趣的话,这个时候可以深入去研究一下。这项技术不一定是你工作所用到的,但一定是相关的。
-
分布式架构思维
-
分布式协调分流
-
异步与消息中间件
-
缓存和 NoSQL
-
高可用数据存储
-
分布式场景解决方案
-
海量数据下的性能调优
参加工作 4-5 年之间,Java 程序员必须要做得事儿
参加工作 4 年到 5 年的同学,相信你在自己所钻研的领域已经有了自己一定的见解,这个时候,技术上你应该已经遇到瓶颈了。这个时候不要着急提高自己的技术,已经是时候提高你的影响力了,你可以尝试去一些知名的公司去提高你的背景,你可以发表一些文章去影响更多的人。当然,你也可以去 Github 创建一个属于你的开源项目,去打造自己的产品。技术学到这个阶段,很容易遇到瓶颈,而且往往达到一定程度后,你再深入下去的收效就真的微乎其微了,除非你是专门搞学术研究的。然而很可惜,大部分程序猿做不到这一步,那是科学家做的事情。这个时候提高影响力不仅仅是因为技术上容易遇到瓶颈,更多的是影响力可以给你创造更多的机会。所以,在这个阶段,你最大的任务是提高自己的影响力,为自己未来的十年工作生涯那一天做准备。
项目实战
以上就是作为 Java 程序员前五年你必须要去努力达到的,这是一个路线提升的方向,更加详细的路线图这里没办法展现出来,如果需要可以文末免费领取
Java 高级工程师核心面试 1080 题解析
Java 高级架构核心面试解析整理
Java 面试知识点笔记整理
想要获取资料的小伙伴关注后私信回复“666”获取
写给1-3年Java程序员的几点建议
前言
总有一天你会明白,你的努力终究没有白费
年前辞职,人算不如天算,突如其来的疫情完全把自己的计划给打碎了,面试难度简直不亚于一场江苏高考题,后悔、焦虑不安、失眠成了我的生活状态。
从三月底开始投递简历,甭管是什么公司,只要薪资待遇跟之前差不多我都投了。最气人的一次面试经历是一个小公司的HR约我面试,我过去了,填完表格,还没到技术面呢,她看到我的期望薪资是15k+,直接来了一句:“不好意思,我们最多只能给到10k+,所以,您可能不太适合。“我:”???”
慢慢开始怀疑自己了,是不是自己的技术不够好?是不是自己对技术理解的不够深入等等之类…身边的朋友有进美团的,有进腾讯的,再看看自己就有一种挫败感~~~
于是,我打了个电话向他们请教请教,他们也用各自的经验给了我一些方向。总之,加油吧!!!
一、Spring面试题
1、Spring 在ssm中起什么作用?
答:
Spring:Spring轻量级框架。
作用:Bean工厂,用来管理Bean的生命周期和框架集成。
Spring框架的两大核心:
①. IOC/DI(控制反转/依赖注入) :把dao依赖注入到service层,service层反转给action层,Spring顶层容器为BeanFactory。
②. AOP:面向切面编程。
2、Spring的事务?
答:
编程式事务管理:编程方式管理事务,极大灵活性,难维护。
声明式事务管理:可以将业务代码和事务管理分离,用注解和xml配置来管理事务。
3、IOC 在项目中的作用?
答:
作用:Ioc解决对象之间的依赖问题,把所有Bean的依赖关系通过配置文件或注解关联起来,降低了耦合度。
4、Spring的配置文件中的内容?
答:
1、开启事务注解驱动
2、事务管理器
3、开启注解功能,并配置扫描包
4、配置数据库
5、配置SQL会话工厂,别名,映射文件
6、不用编写Dao层的实现类
5、Spring下的注解?
答:
先注册:@Controller @Service @Component
后注入:@Autowired @Resource
请求地址:@RequestMapping
返回具体数据类型而非跳转:@ResponseBody
6、Spring DI 的三种方式?
答:
构造器注入:通过构造方法初始化
1 <constructor-arg index="0" type="java.lang.String" value="宝马"></constructor-arg>
setter方法注入:通过setter方法初始化
2 <property name="id" value="1111"></property>
接口注入
7、Spring主要使用了什么模式
?
答:
工厂模式:每个Bean的创建通过方法
单例模式:默认的每个Bean的作用域都是单例
代理模式:关于Aop的实现通过代理模式
8、IOC,AOP的实现原理?
答:
IOC:通过反射机制生成对象注入
AOP:动态代理
二、SpringMvc面试题
1、SpringMvc 的控制器是不是单例模式,如果是,有什么问题,怎么解决?
答:
问题:单例模式,在多线程访问时有线程安全问题
解决方法:不要用同步,在控制器里面不能写字段
2、SpringMvc 中控制器的注解?
答:
@Controller:该注解表明该类扮演控制器的角色
3、@RequestMapping 注解用在类上的作用?
答:
作用:用来映射一个URL到一个类或者一个特定的处理方法上
4、前台多个参数,这些参数都是一个对象,快速得到对象?
答:
方法:直接在方法中声明这个对象,SpringMvc就自动把属性赋值到这个对象里面
5、SpringMvc中函数的返回值?
答:
String,ModelAndView,List,Set 等
一般String,Ajax请求,返回一个List集合
6、SpringMvc中的转发和重定向?
答:
转发: return:“hello”
重定向 :return:“redirect:hello.jsp”
7、SpringMvc和Ajax之间的相互调用?
答:
通过JackSon框架把java里面对象直接转换成js可识别的json对象,具体步骤如下:
(1)加入JackSon.jar
(2)在配置文件中配置json的映射
(3)在接受Ajax方法里面直接返回Object,list等,方法前面需要加上注解@ResponseBody
8、SpringMvc的工作流程图?
答:
SSM框架相关基础面试题整理。
9、Struts2 和 SpringMvc的区别?
答:
(1)入口不同:
Struts2:filter过滤器。
SpringMvc:一个Servlet即前端控制器。
(2)开发方式不同:
Struts2:基于类开发,传递参数通过类的属性,只能设置为多例。
SpringMvc:基于方法开发(一个url对应一个方法),请求参数传递到方法形参,可以为单例也可以为多例(建议单例)。
(3)请求方式不同:
Struts2:值栈村塾请求和响应的数据,通过OGNL存取数据。
SpringMvc:通过参数解析器将request请求内容解析,给方法形参赋值,将数据和视图封装成ModelAndView对象,最后又将ModelAndView中的模型数据通过request域传输到页面,jsp视图解析器默认使用的是jstl。
三、Mybatis面试题
1、Ibatis和Mybatis?
答:
Ibatis:2010年,apache的Ibatis框架停止更新,并移交给了google团队,同时更名为MyBatis。从2010年后Ibatis在没更新过,彻底变成了一个孤儿框架。一个没人维护的框架注定被mybatis拍在沙滩上。
Mybatis:Ibatis的升级版本。
2、什么是Mybatis的接口绑定,有什么好处?
答:
Mybatis实现了DAO接口与xml映射文件的绑定,自动为我们生成接口的具体实现,使用起来变得更加省事和方便。
3、什么情况用注解,什么情况用xml绑定?
答:
注解使用情况:Sql语句简单时
xml绑定使用情况:xml绑定 (@RequestMap用来绑定xml文件)
4、Mybatis在核心处理类叫什么?
答:
SqlSession
5、查询表名和返回实体Bean对象不一致,如何处理?
答:
映射键值对即可
1 <result column="title" property="title" javaType="java.lang.String"/>
column:数据库中表的列名。
property:实体Bean中的属性名。
6、Mybatis的好处?
答:
(1)把Sql语句从Java中独立出来。
(2)封装了底层的JDBC,API的调用,并且能够将结果集自动转换成JavaBean对象,简化了Java数据库编程的重复工作。
(3)自己编写Sql语句,更加的灵活。
(4)入参无需用对象封装(或者map封装),使用@Param注解。
7、Mybatis配置一对多?
答:
1 <collection property="topicComment" column="id" ofType="com.tmf.bbs.pojo.Comment" select="selectComment" />
property:属性名
column:共同列
ofType:集合中元素的类型
select:要连接的查询
8、Mybatis配置一对一?
答:
1 <association property="topicType" select="selectType" column="topics_type_id" javaType="com.tmf.bbs.pojo.Typ>
property:属性名
select:要连接的查询
column:共同列
javaType:集合中元素的类型
9 、${} 和 #{}的区别?
答:
${}: 简 单 字 符 串 替 换 , 把 {}:简单字符串替换,把:简单字符串替换,把{}直接替换成变量的值,不做任何转换,这种是取值以后再去编译SQL语句。
#{}:预编译处理,sql中的#{}替换成?,补全预编译语句,有效的防止Sql语句注入,这种取值是编译好SQL语句再取值。
这里总结的Java程序员相关面试题很基础,但是很细节,大家可以评估一下自己掌握的情况。
最后
现在其实从大厂招聘需求可见,在招聘要求上有高并发经验优先,包括很多朋友之前都是做传统行业或者外包项目,一直在小公司,技术搞的比较简单,没有怎么搞过分布式系统,但是现在互联网公司一般都是做分布式系统。
所以说,如果你想进大厂,想脱离传统行业,这些技术知识都是你必备的,下面自己手打了一份Java并发体系思维导图,希望对你有所帮助。
程序员相关面试题很基础,但是很细节,大家可以评估一下自己掌握的情况。
最后
现在其实从大厂招聘需求可见,在招聘要求上有高并发经验优先,包括很多朋友之前都是做传统行业或者外包项目,一直在小公司,技术搞的比较简单,没有怎么搞过分布式系统,但是现在互联网公司一般都是做分布式系统。
所以说,如果你想进大厂,想脱离传统行业,这些技术知识都是你必备的,下面自己手打了一份Java并发体系思维导图,希望对你有所帮助。
以上是关于10年 Java 老鸟,写给 1-3 年程序员的几点建议,满满硬货指导的主要内容,如果未能解决你的问题,请参考以下文章
八年 Java 老鸟,写给 1-3 年程序员的几点建议,满满硬货指导
10年 “自动化测试” 老鸟,写给 3-5 年测试员的几点建议,满满硬货指导
八年 “自动化测试” 老鸟,写给 3-5 年测试员的几点建议,满满硬货指导