原本想分享毕业生和初级程序员如何进大公司的经验,但后来一想,人各有志,有程序员或许想进成长型或创业型公司或其它类型的公司,因此就干脆来分享些提高技能和经过面试的技巧,技巧我讲,公司你选,两厢便利。前端
毕业生和初级程序员(通常是工做经验3年如下)大多处于事业的青黄不接的阶段,在找工做时每每会遇到缺少实际项目经验的瓶颈,做为技术面试官,我也常常在面试过程当中感觉到这些候选人缺少实际经验的缺陷。不过本人以前作过java兼职培训老师,也总结了些这批人群提高实际技能和面试技能的技巧,最近也老有人来问我这个,因此我就干脆把这写成博客文章。 java
公司通常会录用哪类人?咱们把各类答案概括成一句:须要技术匹配并且有相关项目经验的人,再简化一下,作过相关经验(通常是指商业项目经验,说再直白点就能挣钱的项目),那么用到的技术大多和公司要求匹配,也就是说,若是你有相关经验,那么和那些光有理论经验的候选人相比,就有代差优点,因此我在面试候选人时,常常会见到二本甚至三本大学生逆袭的场景。linux
如何积累商业项目经验?尽快开始实习,若是能够,大二暑假就能够找个软件公司打工了,若是你有老师在外有项目,那最好也一块儿作,若是学校安排实习,那更得去。若是实在找不到实习公司,或者也能够去一些网站接些商业项目的兼职活。程序员
这里请注意,通常毕业设计的份量没商业项目的份量重,那若是你就只有毕业设计的经验,那只能和一样没商业项目的这群人一块儿竞争了。web
代差优点能给你带来什么样的好处?面试
1 在校招时,大多数人没商业项目经验,但你有,你的简历经过初审的可能性就很是大,并且在实际面试时,哪怕你算法基础知识等问题没回答好,但只要让面试官确信你作过商业项目,经过面试的可能性也比无商业项目的人群要高不少。算法
2 在经过网站等形式投简历时,不少公司其实是要有商业项目经验的,若是你没,甚至连面试的机会都没有,但若是你有实习等的商业项目经验,那至少你经过初选的可能性就大大提高了。 sql
我在面试毕业生乃至初级程序员时,感受有过实际项目经验的人很是少,(这就更验证了有经验的人至关有利),并且,这批人经过面试的可能性比3年左右的程序员要小不少。下面我来分析下这群人的广泛问题。数据库
问题1,商业项目经验不多,因此简历甚至没法经过筛选,这样根本得不到面试的机会。编程
问题2,即便有些项目组由于着急要人,从而让一些初级程序员获得面试机会,但在面试过程当中,这些人每每没法证实本身真的在项目中用过相关技巧,这些仅有理论经验的人经过面试的可能性很是小。
问题3:大多数初级程序员每每能经过准备,能知道算法、逻辑题和一些简单的说辞,没法证实本身掌握一些工做中必要的技能点,从而没法证实本身胜任这份工做。
上述问题的结果就是:在我手上经过面试的程序员,八成以上具备3年之上经验的,其实面试要求不难,能干活就行,但大多数的初级程序员就是无法证实这点。
针对上述问题,给出的建议是:学习和积累。
1 给本身制定一个明确的目标,工做后3年内尽可能少换,不然就得从头开始积累。
2 好比目标方向是Java后端开发,那么在工做中,别得过且过,多跟组里的前辈学,多掌握些知识点。
3 必定得围绕“性能优化”这个主题,好比内存性能优化,数据库优化,多掌握些项目中能用到的优化技能点。
4 哪怕你最近不许备面试,但也得边工做边看面试题,最好按期出去面试下。毕竟每一个人在学习过程当中都会走弯路,用句比较流行的话来说就是试错,经过不断的面试,能不断修正本身的学习方向。
这些也是能找到工做的最低标准,Java Core的标准以下。
方面 |
合格程序员的标准 |
集合 |
1 对于各线性表类对象(好比Array, LinketList, ArrayList, Stack, Set等)和键值对类对象(好比HashMap等),会基本的遍历和增删改操做 2 会使用Iterator,泛型,比较器等经常使用对象 |
异常处理 |
1会用try…catch…finally框架 2 了解各类异常的类型,好比运行期异常,数据库或者IO等异常。 |
IO |
能完成基本的IO操做,好比读写文件,读写内存,读写压缩包等 |
JDBC |
会基本的链接,增删改查预处理批处理操做 |
多线程 |
1会建立多线程,并且能经过notify, wait,sleep等的关键字,让多线程协调地完成项目里的任务。 2 会用synchronized等经常使用关键字,在多线程读写状况下不会产生冲突问题。 3 最好会用线程池。 |
面向对象和设计模式 |
能知道基本的概念和诸如继承,抽象类和接口等的语法 |
垃圾回收和内存性能管理 |
知道基本的概念,知道基本的System.gc等的语法,知道经过java –xms等基本的配置内存的操做。 |
Java Web方面的要求点大体以下:
方面 |
合格程序员的标准 |
JSP+Servlet +JavaBean (简单的MVC框架) |
1 会用JSP+Servlet+JavaBean这套框架编程,知道基本的MVC流程。 2 最好了解些简单的JS,DIV,CSS等前端技术。 3 知道怎么把Web程序发布到服务器上。 |
Struts方面 |
能够不用了解,由于用得比较少 |
Spring方面 |
1知道IOC和AOP的概念,知道如何使用这些技术。 2 知道Spring MVC的开发流程,能在项目经理带领下开发基于Spring的Web项目。 3 最好能了解下Spring MVC方面的一些组件。 |
Hibernate (或者ORM) |
1 能够只掌握一种ORM技术。 2能用Hibernate干些基本的增删改查等操做。 2 熟悉一些基本组件,好比SesionFactory,Criteria和Session等的用法。 3 知道一对一,一对多,多对多的基本用法。 4 知道缓存概念,最好了解下性能优化等技能。 |
Spring和Hibernate整合 |
这点上合格和高级程序员的差异不大,要求是,能整合,能配置链接池。 |
而在数据库方面,最低的要求体如今以下三方面的需求。
第一,针对一类数据库(好比MYSQL,Oracle,SQL Server等),会基本的增删改查操做,会用一些基本的函数,会编写存储过程触发器索引等工具。
第二,知道一些基本的对项目开发有帮助的概念,好比范式,索引,分区等。
第三,能编写一些相对复杂的SQL语句,好比带链接,带子查询,嵌套查询等。
在java web轻量级开发面试教程这本书里,我对此作了详细的说明。
我知道,其实大多数的初级程序员都知道上述知识点,但没法有效地在项目中证实这点,并且,我以前也说了,上述仅仅是最低要求,接下来给出的要点将大大提高各位的面试成率。
这里给出些准备简历时的注意要点。
1 针对每份工做微调简历,在发给目标公司的简历中,多写些在该公司职位介绍时出现的关键字。
2 少写不相干的工做经验,任何经验都往目标公司的职位要求上靠,好比目标公司的职位是java后端开发,你写一些linux上项目维护的经验或数据库DBA的相关经验尚属搭边,但若是写上测试或实施等经验,就属于不相干了。
3 少写关于项目业务介绍的内容,由于目标公司不关心。
4 这个是关键,必定得结合业务实际,写上本身有过相关技能的经验。
好比目标公司要求有数据库优化的经验,那你就能够写,在xx项目里,对sql的执行时间有要求,因此在订单管理模块里,我用到了xx技术,实现了sql优化效果。
相似的文字要多,涉及到的项目年限也请尽量地长。这样当筛选简历的人和面试官看到你的简历时,不禁得不信你第一有实践项目经验,第二在实践经验中用过相关技术。
而在面试时,技术面试官必定会问到职位要求里的相关技能,你事先得准备。若是你能在面试过程当中有条理地说出你是如何在项目里用到相关技术的,那么这样的说服力要比你单纯说“你知道“要强不少,甚至有些面试官听到你的这些叙述后,会少问或不问相关问题。
这些证据能够出如今简历中,固然你更应该在面试中说出来。
我在面试中,每每会不得不从10我的符合要求的人里挑选出3人。(按我说10我的全要算了,但不行,预算不够)。这样若是某个候选人表现出优于别人的技能,那么这我的就必定是在同等条件里优先考虑的。
以下是Java Core方面能够准备的亮点。
技术方面 |
能够说的亮点 |
Java集合对象 |
1 能根据项目的需求选用合适的集合对象,好比知道ArrayList和LinkedList的差别,并能合理选用。 2 能在合适的场合选用WeakHashMap。 3 能够适当讲一些集合的JDK底层实现代码。 |
异常处理方面 |
能在finally从句里写释放资源的代码 |
JDBC方面 |
1 能经过PreparedStatement的预处理方法来防止SQL注入。 2 能经过批处理来提高操做性能。 3 能经过实例讲述事务隔离级别的含义 |
多线程方面 |
1 会使用线程池 2 能经过锁或信号量等手段正确地处理多线程并发时的数据一致性。 |
在下表里,咱们列了些在数据库方面能够准备的亮点。
技术方面 |
能够说的亮点 |
建表 |
建表时须要根据项目的数据状况,考虑是采用三范式或是反范式。 |
SQL调优 |
1 能够经过查看日志等方式看哪些SQL须要调优。 2 能够经过执行计划查看SQL的所消耗的代价,并据此调优。 3 能够经过建索引,建分区等手段来优化SQL性能。 |
事务 |
1 能够说下JDBC或Spring里是如何管理事务的。 2 能够说下Spring里的声明式事务的作法和优势。 3 能够举例说明事务隔离级别和事务传播机制的用法。 |
分布式数据库 |
1 能够经过水平或竖直等方式的方式来拆分数据库,从而减轻对单表访问所须要的代价。 2 能够经过集群等方式来承担对数据库的过量的访问请求。 |
NoSQL和Hadoop |
这两个自己就是个亮点,若是你们用过,能够结合项目来讲明。 |
下面里列了Java Web方面能够准备的亮点
技术方面 |
能够说的亮点 |
Spring MVC架构 |
1 能够说下Spring的IOC和AOP是如何优化项目结构的。 2 能够说下拦截器等Spring组件对项目的帮助。 |
ORM,好比Hibernte或Mybatis |
使用这种ORM技术时,如何优化访问和操做数据库的性能。 |
Spring和Mybatis等的整合 |
能够讲下整合框架的细节,并能够举例说明整合后的框架能很好地适应需求的变动。 |
此外,你们还能够在Linux使用技能以及项目管理软件的使用经验方面展现本身的亮点。这里请注意,必定找合适的机会“顺带”地说,若是没机会宁肯别说,更不能仗着有所准备就直接自说自话地说。不然的话,反倒可能会获得“表达能力不清晰”或“叙述条理混乱”等的不良评价。
本文涉及到的点有些广,这里来总结下本文中提到的观点。
1 在校生尽量早地积累些商业项目的经验。
2 工做后找准发展方向,而后经过不断的面试来调整本身的学习路线。
3 简历中的项目描述应该尽可能与目标公司的需求一致,在面试中也应当尽可能证实这点。
4 多积累些优于别人的优点。