最后
面试前一定少不了刷题,为了方便大家复习,我分享一波个人整理的面试大全宝典
- Java核心知识整理
Java核心知识
- Spring全家桶(实战系列)
- 其他电子书资料
Step3:刷题
既然是要面试,那么就少不了刷题,实际上春节回家后,哪儿也去不了,我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。
以下是我私藏的面试题库:
- 负载均衡如何设计?
以上文章中,提及到的所有的思维图、笔记内容、面试题等资料,均可以免费分享,
需要获取得话麻烦一键三连+评论,然后添加VX(tkzl6666)即可免费领取
Share2:苏宁开发三年,我如何积累经验?
========================================================================================
(1)善于利用碎片时间,学习提升自我
从初级程序员升到资深开发,没有别的捷径可走,从始至终我都奉信:进步得靠学习,学习得靠时间堆砌。现在互联网行业基本上都是996趋势,程序员加班情况更为明显,所以利用碎片时间来学习,才是提升自己最合适的方式。
先算算我个人的学习时间账(可参考,可借鉴):
-
每天早上起床后,大概30min(上厕所,吃早餐,通勤等)
-
每天上班时,利用别人划水的时间搜一些技术资料,逛逛技术博客,约30min。
-
晚上通勤、吃饭(这个阶段我一般会休息+娱乐来调整自己状态,刷刷微博、朋友圈)
-
晚上到家后,不管再累都会抽出1~2个小时来学习,看书+看视频。
*这样计算下来,一天大概平均在2~3小时,一周5天至少10个小时,不包括周末。
(2)解决Bug积累经验(提升自己优化能力)
论坛上流行一种说法:大部分的程序员都是通过BUG来积累经验的,你解决的每一个BUG都是你的经验。
实际上,这观点并不在强调BUG的重要性,而是意味着程序员可以通过改Bug来提升自己的优化能力,但这个“改”就非常关键了。
如何“改”?
-
我在开发过程中,总会遇到大大小小的问题,在遇到问题时,我首先考虑的是凭自己个人的能力去解决,会看一下相关的源码,或者Google一下相关的资料或技术博客。如果问题太大,实在解决不了,就会去请教大佬,不会纠结来纠结去,浪费时间还没效果,耽误自己的项目进度。请教大佬也有讲究,不是让他直接帮你解决好问题,而在是建议或思路的基础上自己去思考。
-
另一层意思则是需要我们主动地去提升自己的优化能力了。我在写代码的过程中,会主动地引入面向对象思想和设计模式;会考虑性能优化(如何让sql语句更快,如何让虚拟机内存性能更好);在“单机版”程序的基础上问自己,如何搭建集群?如何利用现有的面向集群的组件?(比如可以用Eureka搭建服务治理的集群,在集群中用Ribbon做负载均衡)
-
最后,技多不压身,还要学一些redis,消息中间件,JVM调优,MySQL优化以及Spring Cloud方面的内容。
(3)参与开源项目
其实,在很多面试攻略和分享中,我们都能get到一个信息:参与过开源项目的面试者往往更吃香,更容易获得offer。
那么,为什么参与过开源项目的程序员会更吃香更抢手呢?
-
大型的开源项目几乎都是大型团队构建的,且非常复杂,由此可以推断出你个人的能力和素质都是过关的;
-
开发开源项目,说明个人的综合能力得到极大提高,这些能力包括“书面沟通能力”、“了解如何挑选和协商要处理的事情”、“完善Git流程/GitLab流程”、“理解语言语法”等等;
-
其他:建立线上声誉、保持个人的进步的动力等等。
(4)提升自己的软实力,让自己更专业
按照我个人的理解来说,初级程序员更像学生,而高级程序员则需要拥有“独当一面”的能力,而这个过渡是需要时间的,也是我前两年来努力的方向之一。
提升自己的软实力,成为更专业的程序员:
-
要学会积极主动沟通;
-
提升自己解决问题(bug)的能力,积累解决问题(bug)的经验;
-
协调(扯皮)的能力:工作方面积极主动协调部门;
-
学会合作,一起完成一个任务或目标。
=================================================================================
Step1:知己知彼(了解岗位职责,规划职业成长路径)
①岗位职责
求职时,我们往往更注重简历,却忽略了“岗位职责”这个关键词,实际这往往也会影响到我们的面试结果。
俗话说“知己知彼,百战不殆”,岗位职责非常清晰明确地标注了应该干什么,怎么干,干到什么标准,对于程序员来说,技术掌握程度以及之后的开发内容都要了解清楚。
随便找的公司为例,就更不用说BAT一线大厂了
②成长路径
在第一次正式工作后,我就非常认真仔细的思考过自己日后的发展方向,实际上程序员的成长轨迹(晋升路径)越早确定越好。程序员的方向大致分为技术岗和管理岗,而这两个方向所看重的能力还是有很大本质区别的。
成长路径如下:
-
管理岗:初做者→技术经理→技术总监→副总裁→总裁
-
技术岗:初做者→高级工程师→技术专家→领域专家→领域权威
Step2:制定目标(制定明确的、可衡量的、可达到的、有时间限制的目标)
在职场中,一定要制定自己的的目标,这样才不免被沦为“咸鱼”,想要快速晋升,就得从目标下手,目标需要满足SMART原则:
-
具体的(Specific)
-
可以衡量的(Measurable)
-
可以达到的(Attainable)
-
具有相关联性的(Relevant)
-
有明确的时间截止的(Time-based)
简单来说,我的操作就是将自己的目标进行阶段性的拆分,比如我1-3年需要达到一个什么阶段,3-5年要达到什么阶段,然后在这个阶段里继续进行拆分,树立一个一个小目标,然后构成一个大目标,总目标,这样就会容易达到得多了。
Step3:善于思考(培养逆向思维、优化思维)
不想机械式的码代码,快速晋升之道首先就要转变自己的思维,要开始慢慢调整,善于思考一些问题,培养逆向思维和优化思维。
所谓的逆向思维,就是要多问自己为什么?如:
-
为什么需要这些数据?
-
为什么要做这些事?
-
为什么要做总结?
-
为什么要做规划?
-
为什么要做代码审核?
而优化思维,则是把事情做得更好,即使是繁琐杂事,也有优化的空间,包括效率和效果,任何事都是有优化空间的,缺少的是发现的眼睛。
====================================================================================
(1)准备简历
面试是会根据简历来进行对你提问的,尤其是对于开发人员来说,看到你的项目经历后,或多或少都会问相关的问题,甚至一线互联网公司会针对项目进行提问,所以准备简历这一环节就尤为重要。
准备简历时,一定要真实,简历作假是职场大忌,切记切记。其次,要分清楚“了解、熟悉、精通”三词的区别,对技术栈的掌握程度跟面试题难度密切相关。
当然,为了帮助各位能够顺利过了简历,我也准备了一些模板大礼包,包括我自己的个人简历也在里面,欢迎大家参考:
(2)尽量找内推
校招容易,社招难。这是一线互联网的普遍现象,对于应届生的要求相对来说还是比较宽松的,但对于有一定工作年限的人来说,技术要求就比较高了,因此很多中途想要进一线大厂的人都说社招实在太难了,简历都过不了。
那其实也是有一些“捷径”可走的,可以找一些内推机会,相对直接社招来说,几率大大提升了。
(3)对技术要掌握一定的广度和深度
既然是技术岗,那么企业对于技术掌握的广度和深度是有自己相应的要求的,学历在技术面前都显得没那么重要了,因此努力提升自己的技术水平是程序员的首要目标。
那么,技术要掌握到什么程度呢?特梳理了一下技术路线,如下图谱:
对于现在流行的一些技术框架,我又掌握得如何了呢?实际上,我是有一个记录学习心得,做学习笔记的习惯,所以我对一些技术也有自己的总结和经验。
- Java核心成长笔记:
- SpringBoot核心技术笔记:
- SpringMVC开发核心笔记:
- Spring源码深度解析:
- Redis学习总结
写在最后
还有一份JAVA核心知识点整理(PDF):JVM,JAVA集合,JAVA多线程并发,JAVA基础,Spring原理,微服务,Netty与RPC,网络,日志,Zookeeper,Kafka,RabbitMQ,Hbase,MongoDB,Cassandra,设计模式,负载均衡,数据库,一致性哈希,JAVA算法,数据结构,加密算法,分布式缓存,Hadoop,Spark,Storm,YARN,机器学习,云计算…
abbitMQ,Hbase,MongoDB,Cassandra,设计模式,负载均衡,数据库,一致性哈希,JAVA算法,数据结构,加密算法,分布式缓存,Hadoop,Spark,Storm,YARN,机器学习,云计算…
[外链图片转存中…(img-zZ4WMv6V-1715710092003)]