乐趣区

关于java:工作13年的程序员应该具备怎么样的技术能力该如何提升

这篇文章大部分内容都是面向整个程序员群体的,次要是想说说对于程序员的几个阶段和怎么去无效的晋升本人的技术。

文章的学习形式和材料都是依照 Java 程序员为外围的;做 Java 开发的能够重点看一下;文章中呈现的材料都是收费分享给各位粉丝的,只需关注公众号【Java 斗帝】回复“666”即可支付收费获取形式;

第一阶段:三年

三年对于程序员来说是第一个门槛,这个阶段将会淘汰掉一批不适宜写代码的人。这一阶段,咱们走出校园,迈入社会,成为一名程序员,正式从书本上的内容迈向真正的企业级开发。咱们晓得如何团队合作、如何应用项目管理工具、我的项目版本如何管制、咱们写的代码如何测试如何在线上运行等等,积攒了肯定的开发教训,也对代码有了肯定深刻的意识,是一个比拟纯正的 Coder 的阶段。

举荐学习这篇:最佳实际

本书会帮你升高构建与保护软件的老本。如果你是软件开发者,将学到一套实际办法以构建易批改的代码,因为在利用当中代码常常须要批改。对于和软件开发者单干的管理者来说,本书会向你展现为何引入这 9 个根本的实际办法,会使你的团队更加无效地交付软件而不至于让软件演变成遗留代码。

第二阶段:五年

五年又是辨别程序员的第二个门槛。有些人在三年里,除了实现工作,在空余工夫根本不会钻研别的货色,这些人永远就是个 Coder,年纪大一些势必被更年老的人给顶替;有些人在三年里,除了写代码之外,还热衷于钻研各种技术实现细节、看了 N 多好书、写一些博客、在 Github 上分享技术,这些人在五年后必然具备在技术上独当一面的能力并且分明本人将来的倒退方向,从一个 Coder 逐渐走向零碎分析师或是架构师,成为项目组中不可或缺的人物。

举荐学习:程序员精进之路

这是浏览起来十分难受的一本书籍;

到了五年这个阶段思考的就不仅仅是简略敲代码这个问题了,本书尽管面向程序员,却不蕴含代码。在作者看来,90% 的程序设计工作都不须要写代码;程序员不只是编程专家,其外围竞争力是利用代码这一工具解决人类社会的常见问题。以此作为出发点,作者精心构思了 8 个故事,以情景代入的形式邀请读者思考代码之外的关键问题:软件开发工作如何从以技术为核心转为以人为本?透过故事主人公的视角,读者能比拟本人与书中角色的差别,发现决策过程的瑕疵,晋升解决问题的综合能力。

第三阶段:十年

十年又是另一个门槛了,转行或是持续做一名程序员就在这个节点上。如果在前几年就抱定不转行的思路并且为之致力的话,那么在十年的这个节点上,有些人必然成长为一名对行业有着深刻意识、对技术有着深刻意识、能从零开始对一个产品进行剖析的程序员,这样的人在公司根本负责的都是 CTO、技术专家、首席架构师等最要害的职位,这对于本人相对是一件光荣的事,当然老板在经济上也绝不会亏待你。

第一局部总结一下,随着你工作年限的增长、对生存对生命意识的深刻,该当一直思考三个问题:

1、我到底适不适宜当一名程序员?

2、我到底应不应该一辈子以程序员为职业?

3、我对编程到底持有的是一种什么样的态度,是够用就好呢还是一直钻研?

最终,明确本人的职业规划,对本人的布局负责并为之致力。

举荐学习我的项目实战

这个阶段曾经不是看书能够来晋升的了,须要在每个我的项目中来冲破本人,从而造成属于本人架构思维;

比拟经典的我的项目:网约车、亿级商城我的项目、中台我的项目等等;

我的项目教训

在网上常常看到一些别的敌人有提出我的项目教训的问题,按照面试的感觉来说,面试次要看几点:我的项目教训 + 根本技术 + 集体后劲(也就是值不值得造就)。

对于我的项目教训,我认为并发编程网的创始人讲的一段话十分好:

介绍产品时面试官会考查应聘者的沟通能力和思考能力,咱们大部分状况都是做产品的一个性能或一个模块,然而即便是这样,本人有没有把整个零碎架构或产品搞清楚,并能介绍分明,为什么做这个零碎?这个零碎的价值是什么?这个零碎有哪些性能?优缺点有哪些?如果让你从新设计这个零碎你会如何设计?

我感觉这就曾经足以概括了。兴许你仅仅工作一年,兴许你做的是我的项目中微不足道的模块,当然这些肯定是你的劣势且无奈扭转,然而如何补救这个劣势,能够总结几点:

  1. 明确你的我的项目到底是做什么的,有哪些性能
  2. 明确你的我的项目的整体架构,在面试的时候可能分明地画给面试官看并且分明地指出从哪里调用到哪里、应用什么形式调用
  3. 明确你的模块在整个我的项目中所处的地位及作用
  4. 明确你的模块用到了哪些技术,更好一些的能够再理解一下整个我的项目用到了哪些技术

在你无奈扭转本人的工作年限、本人的不那么有说服力的我的项目教训的状况下(这肯定是扣分项),能够通过这种形式来肯定水平上地补救并且增进面试官对你的好感度。如果没有几个能够拿出手的我的项目,能够借鉴下面给大家那几个我的项目(包装,都懂吧)。

专业技能

写完我的项目接着写写一名 3 年工作教训的 Java 程序员应该具备的技能,这可能是 Java 程序员们比较关心的内容。我这里要阐明一下,以下列举的内容不是都要会的货色—然而如果你把握得越多,最终能失去的评估、拿到的薪水势必也越高。

1、根本语法

这包含 static、final、transient 等关键字的作用,foreach 循环的原理等等。明天面试我问你 static 关键字有哪些作用,如果你答出 static 润饰变量、润饰办法我会认为你合格,答出动态块,我会认为你不错,答出动态外部类我会认为你很好,答出动态导包我会对你很称心,因为能看出你十分热衷钻研技术。

2、汇合

十分重要,也是必问的内容。基本上就是 List、Map、Set,问的是各种实现类的底层实现原理,实现类的优缺点。

汇合要把握的是 ArrayList、LinkedList、Hashtable、HashMap、ConcurrentHashMap、HashSet 的实现原理,能流畅作答,当然能把握 CopyOnWrite 容器和 Queue 是再好不过的了。另外多说一句,ConcurrentHashMap 的问题在面试中问得特地多,大略是因为这个类能够衍生出十分多的问题,对于 ConcurrentHashMap,我给网友敌人们提供三点答复或者是钻研方向:

  1. ConcurrentHashMap 的锁分段技术
  2. ConcurrentHashMap 的读是否要加锁,为什么
  3. ConcurrentHashMap 的迭代器是强一致性的迭代器还是弱一致性的迭代器

3、设计模式

原本认为蛮重要的一块内容,后果只在阿里巴巴 B2B 事业部面试的时候被问了一次,过后问的是装璜器模式。

当然咱们不能这么功利,为了面试而学习,设计模式在工作中还是十分重要、十分有用的,23 种设计模式中重点钻研罕用的十来种就能够了,面试中对于设计模式的问答次要是三个方向:

  1. 你的我的项目中用到了哪些设计模式,如何应用?
  2. 晓得罕用设计模式的优缺点。
  3. 能画出罕用设计模式的 UML 图。

4、多线程

这也是必问的一块了。因为三年工作教训,所以基本上不会再问你怎么实现多线程了,会问得深刻一些比如说 Thread 和 Runnable 的区别和分割、屡次 start 一个线程会怎么样、线程有哪些状态。当然这只是最根本的,出其不意地,几次面试简直都被同时问到了一个问题,问法不尽相同,总结起来是这么一个意思:

如果有 Thread1、Thread2、ThreaD3、Thread4 四条线程别离统计 C、D、E、F 四个盘的大小,所有线程都统计结束交给 Thread5 线程去做汇总,该当如何实现?

不难,java.util.concurrent 下就有现成的类能够应用。

另外,线程池也是比拟常问的一块,罕用的线程池有几种?这几种线程池之间有什么区别和分割?线程池的实现原理是怎么样的?理论一些的,会给你一些具体的场景,让你答复这种场景该应用什么样的线程池比拟适合。

最初,尽管这次面试问得不多,然而多线程同步、锁这块也是重点。synchronized 和 ReentrantLock 的区别、synchronized 锁一般办法和锁静态方法、死锁的原理及排查办法等等

5、JDK 源码

要想拿高工资,JDK 源码不可不读。下面的内容可能还和具体场景分割起来,JDK 源码就是实打实地看你平时是不是爱钻研了。面试过程中被问了不少 JDK 源码的问题,其中最刁钻的一个问了:String 的 hashCode()办法是怎么实现的,幸好平时 String 源代码看得多,答了个大略。JDK 源码其实没什么好总结的,纯正看集体,总结一下比拟重要的源码:

  • List、Map、Set 实现类的源代码;
  • ReentrantLock、AQS 的源代码;
  • AtomicInteger 的实现原理,次要能说分明 CAS 机制并且 AtomicInteger 是如何利用 CAS 机制实现的;
  • 线程池的实现原理;
  • Object 类中的办法以及每个办法的作用。

这些其实要求蛮高的,真的破费工夫、破费精力,当然回头看,是值得的,不仅仅是为了应酬面试。

6、框架

陈词滥调,面试必问的货色。一般来说会问你一下你们我的项目中应用的框架,而后给你一些场景问你用框架怎么做,比方我想要在 spring 初始化 bean 的时候做一些事件该怎么做、想要在 bean 销毁的时候做一些事件该怎么做、MyBatis 中 $ 和 #的区别等等,这些都比拟理论了,平时积攒得好、有多学习框架的应用细节天然都不成问题。

7、数据库

数据库十有八九也都会问到。一些根本的像 union 和 union all 的区别、left join、几种索引及其区别就不谈了,比拟重要的就是数据库性能的优化,如果对于数据库的性能优化无所不通,那么有工夫,还是倡议你在面试前花一两天专门把 SQL 根底和 SQL 优化的内容筹备一下。

不过数据库倒是不必放心,一家公司往往有很多部门,如果你对数据库不相熟而根本技术又十分好,九成都是会要你的,预计会先把你放到对数据库应用不是要求十分高的部门锤炼一下。

8、数据结构和算法剖析

数据结构和算法剖析,对于一名程序员来说,会比不会好而且在工作中相对能派上用场。数组、链表是根底,栈和队列深刻一些但也不难,树挺重要的,比拟重要的树 AVL 树、红黑树,能够不理解它们的具体实现,然而要晓得什么是二叉查找树、什么是均衡树,AVL 树和红黑树的区别。

记得某次面试,某个面试官和我聊到了数据库的索引,他问我:你晓得索引应用的是哪种数据结构实现吗?

我答到用的 Hash 表吧,答错。他又问,你晓得为什么要应用树吗?答到因为 Hash 表可能会呈现比拟多的抵触,在千万甚至是上亿级别的数据背后,会大大增加查找的工夫复杂度。而树比较稳定,根本保障最多二三十次就能找到想要的数据,对方说不齐全对,最初咱们还是交换了一下这个问题,我也明确了为什么要应用树。

9、Java 虚拟机
简略地列一个提纲吧,谈谈 Java 虚拟机中比拟重要的内容:

(1)Java 虚拟机的内存布局

(2)GC 算法及几种垃圾收集器

(3)类加载机制,也就是双亲委派模型

(4)Java 内存模型

(5)happens-before 规定

(6)volatile 关键字应用规定

兴许面试无用,但在走向大牛的路上,不可不会。

10、Web 方面的一些问题

Java 次要面向 Web 端,因而 Web 的一些问题也是必问的。LZ 碰到过问得最多的问题是:谈谈分布式 Session 的几种实现形式。

罕用的四种能答出来天然是让面试官十分称心的,另外一个常问的问题是:讲一下 Session 和 Cookie 的区别和分割以及 Session 的实现原理。

这两个问题之外,web.xml 外面的内容是重点,Filter、Servlet、Listener,不说对它们的实现原理一清二楚吧,至多能对它们的应用知根知底。另外,一些细节的方面比方 get/post 的区别、forward/ 重定向的区别、HTTPS 的实现原理也都可能会被考查到。

如果有趣味有工夫,倡议学习、钻研一下 SOA 和 RPC,面向服务体系,大型分布式架构必备,救命良方、包治百病、屡试不爽。

如果这些你都学会了,同时你还要能简练的讲进去,这样能力震住面试官;

举荐浏览:Java 外围精讲

对于面试心态

一半以上的面试者答复问题的时候都属于那种双腿发抖、声音颤动的类型。这大可不必并且这还是扣分项,答复问题的时候最最根本的两个要求:

  1. 不紧不慢,愤愤不平
  2. 条理清晰

表达能力相对是面试的时候重要的考查我的项目。咱们做的是程序员这一行,考究的是团队合作,不是写作、画画,一支笔、一个人就行了,一个表达能力不行的程序员,要来又有什么用呢?

除此之外,就是保持良好的心态。古语说得好,只有功夫深,铁杵磨成针,面试的胜利与否,在于平时的积攒,长期抱抱佛脚,看两道面试题是没有用的,只有平时足够致力,胜利是瓜熟蒂落的事件,平时不怎么钻研技术的,那也就是个事在人为的事件,只有充沛地展现平时本人的所学就能够了。

因而在我看来,不要把面试当作面试,当做一次技术交换,把面试的心态从我要找到一份工作转变为我要通过面试去发现有余、晋升本人,这样就会温和多了,即便失败也不会有太多悲观的感觉。

另外,如果平时本人热衷于钻研技术的敌人,真的要有自信,不要感觉他人面试你他人就比你厉害。面试官未必比你优良,他问的问题往往都是他平时钻研得比拟多的问题,你一样有很多本人的钻研面试官未必晓得。

写在最初

上述的这些材料都是收费分享给各位粉丝呢,只需关注公众号【Java 斗帝】回复“666”即可支付收费获取形式;材料名字:三本成长书 + 6 个实战我的项目

当然除了下面那些材料必不可少的还有上面这套面试真题;

看完三件事❤️

========

如果你感觉这篇内容对你还蛮有帮忙,我想邀请你帮我三个小忙:

点赞,转发,有你们的『点赞和评论』,才是我发明的能源。

关注公众号『Java 斗帝』,不定期分享原创常识。

同时能够期待后续文章 ing????

退出移动版