再次更新一波,也是近一段时间以来不断学习和思考的感悟。不过这一次跟技术栈无关,纯讲心法。(2017-2-11)
1、基本的数据结构和算法真的非常重要:不管你做过多少项目或者是熟悉多少框架和工具,面试和考察一个人还是大部分停留在基本功上。所以,在每天工作开发之余,应保证一定的时间段不断去打磨自己的基本功:保证每天一俩道算法题,尝试去探索java每一个数据结构的实现原理,最后通过技术博客记录自己的成长与收获。
2、用框架的同时尽量去探索底层的源码实现,比如Spring,每次看源码都会有不一样的收获。从而使得自己在使用框架开发时不至于太被动。即使是在面试的时候,面试官也不会希望你对框架的理解仅仅停留在使用上。
--------------------------
更新...(2016-10-10)
我居然把庞大的Spring家族给忘了...实际上是基本上每天都在用的额,以下再补充几点重要的知识:
9、Spring系列:我不说Spring MVC 还是Spring Boot等具体名词,因为spring真的是个庞大的生态圈额(Cloud、NoSql、Redis等等)。虽然Spring Mvc比较火,但是对于微服务的开发我建议使用Spring Boot,而且Spring Boot势头确实猛啊...能够把开发效率之少提升一个档次...
10、Jersey:Spring Boot +Jersey 这俩个构成完美的服务接口Resultful开发组合。Jersey是Resultful开发框架,这个也是微服务开发的基础,使用也很简单方便,尤其是可以在其上自己封装请求的过滤层。
11、zuul: 应用层上的网关实现,通过Spring Boot组合使用,构成微服务体系的基本架构,原理图如下:
12、掌握一款开源的分析和搜索引擎 Elasticsearch or Solr。业务相关,为了将基础数据整理给数据做分析,最近在学ES,所以比较推荐,是一款分布式的开源搜索引擎。关键是spring boot还集成了这俩个了有木有。 这些都是目前在用的算是比较时髦的技术吧...不过啊,用轮子的感觉是永远跟在别人屁股后面走,所以在使用的同时,多看看技术的实现原理,深入源代码,然后自己尝试在其上封装自己想要的功能或者干脆单独造个轮子。以上只是说熟练使用,事实上每一项都要熟练掌握原理太难,但是现在的发展速度...谁能快速且熟练地使用好工具,在某种程度上其实也是走在了前面。
13、数据库也忘了,mysql作为java工程师的高频面试考点居然也忘了...嗯,mysql在java中还是王道,所以对mysql的理解也不能仅仅停留在简单的使用上。InnoDB作为使用率最高的存储引擎,应该对其进行深入的探索。推荐书籍:《Mysql技术内幕 InnoDB存储引擎》
原答案分割线...
------------------------------------
作为一个提供分布式服务接口的java工程师,需要熟练具备以下技能点:
1、java基本语法:最好能偶尔使用java8 lambda简化代码逻辑,google的guava库等等
2、docker基本使用:如今越来越多的公司选择将服务部署在docker上,构成独立的服务云平台,而且docker操作和资源调度分配很爽的。
3、消息队列:kafka、rabbitmq、notify、metamq等等,消息队列作为处理高吞吐量,不计较及时结果的应用场景的工具非常受欢迎。所采用的实际应用手法就是消息队列+补偿机制。
4、zookeeper或Etcd:这俩种都是分布式服务提供服务的注册中心,通过它们可以实现多服务多机器部署且实现负载均衡。
5、RPC:远程调用的场景使用越来越广泛,特别在分布式服务中更加离不开它。它能使多个服务间的调用如同调用本地方法一样简便。针对RPC的实现使用较为广泛的有Thrift、protobuffer等。
6、Netty:是一个高性能、异步事件驱动的NIO框架。能为RPC提供高性能的调用
7、git和maven等项目管理及依赖包管理的工具,这是协作开发的基础。
8、Redis:差点忘了这个必知必会的技能...Redis作为高性能的内存数据库,基本覆盖了访问量大的服务缓存。当然memcached前几年用的也居多,不过功能可被Redis替代。除了缓存也可以提供分布式锁机制。