首先经常使用api(String,StringBuffer/StringBuilder等)javascript
1.集合类,线程类css
2.Servlet(不多用纯粹的servlet写,但你要懂,由于不少框架都是基于servlet封装的)html
3.json,xml读写前端
4.数据库访问(CRUD,事务,链接池)java
5.http请求(HttpClient)mysql
6其余,包括经常使用框架,设计模式,面向对象linux
初级程序员会这些就能够写项目了。后期遇到的问题就会复杂得多,要靠各类经验和知识的积累。git
除了要掌握的20%之外还要掌握些什么知识才能游刃有余。下面说说我接触(使用)过、的东西吧。程序员
java以分布式应用丰富的生态闻名,在分布式系统中逃不过CAP的抉择。早早了解一些分布式一致性协议paxos、raft等。学习zookeeper的原理和使用场景(metadata、分布式锁、leaderEletion… etc)web
RPC框架在SOA架构中起着重要的做用,好好探究终是有好处的,在这里推荐阿里巴巴的dubbo框架,同时会netty、mina等网络库
Hadoop系列 Storm Spark 等离线\实时计算框架
ElasticSearch\SolrCloud 分布式搜索 ELK 日志相关的东西对这些比较敏感,固然在更多的场景使用ES也是有不少的
消息队列 kafka\MetaQ RabbitMQ 恩,昨天ZeroMQ(不彻底算做MQ)的做者选择安乐死了,愿天堂没有痛苦
而后就是各类基础知识,编程语言、网络方面、数据库、数据结构和算法。不要以为任何一项都精通了,敢说精通的知乎能有几个。
1.学会使用eclipse,svn等IDE和工具(不用说了吧,主要是看你工做的地方,好比你们用eclipse你想用IntelliJ IDEA也能够,可是刚工做确定不少不懂,这时候暂时还不要标新立异的好,出了问题好问。固然你是ide大神请无视)
2. 刚入职还接触不到核心工做,就让我先改改页面什么的,做为web开发html、css、和javascript不用精通,至少须要了解用法和语法吧,虽然 有前端工程师,可是这个确定也是要了解的(本身公司小项目组,各个都被逼成全栈了)。javascript其实仍是很强大的,可是刚开始不用写的很深,很 多轮子能够用,好比easyui,正如@王大胖 所说的
会查阅官方文档
知道用法往网页里嵌,而后后台按格式把数据传到前台就好。
3. 而后开始逐步日后台写了,熟悉下设计模式,若是太多太难理解能够先理解工厂模式,写一个接口再用一个或若干个实现类实现这个接口,须要用的时候在根据须要 来肯定用哪一个实现类。(一开始不理解这么作这么繁琐有什么用,可是自从上次项目的数据库从oracle换成mysql就知道这么作其实大有用处)通常项目 开发都会用到设计模式,不了解可能会摸不清楚整个项目的架构,无从下手。
4.不一样公司用的框架不同,但struts,spring仍是用 的比较多的,因此这两个东西仍是比较熟悉的好,否则你可能连整个项目的架构都不清楚,不要说本身写,连改都很难入手。好比项目的跳转是怎么配的,哪一个配置 文件表明了什么。(一开始我把项目本地跑起来之后我连主页在哪是哪一个文件怎么进去的都不清楚T.T,一直在找index.jsp而后才知道项目用 freemarker作的,是一个ftl文件)
5.web项目要操做数据库的工做是少不了的了,本身跟的项目没用hibernate,主要用的是StringBuffer拼接sql,若是从事web开发,sql仍是要比较熟的。按带个人小哥说,sql这么厉害,就没有sql完成不了的事。
<!–(这句正确与否观望中,可是一开始作一个抽取功能,本身把全部的人抽到程序里再抽,后来直接用sql抽了返回抽中的结果就行了,越用愈加现sql真的猴犀利呀)–>
提醒,不该该用sql在数据库里作太多事,具体解决方法能够参考以前提的另一个问题
请问多个功能须要同批数据是在程序里面遍历好仍是sql数据库返回好? – 编程
可是sql的重要仍是不言而喻的
6. 本身感受作web项目设计高深算法的可能作的比较深才会遇到,更多的是对字符串和数值格式的操做,好比后台从数据库抽出来到前台怎么展现,用户输入的数据 怎么怎么存到数据库里,因此最好熟悉下字符串的操做,分割呀合并呀,String转float、int什么的,日期格式呀什么的。
若是公司有专业运维,服务器部署什么的交给他们就行了,若是没有就最好仍是了解下,远程链接呀,linux的一些简单的命令呀,tomcat呀什么的
固然做为一个提供分布式服务接口的java工程师,须要熟练具有如下技能点:
一、java基本语法:最好能偶尔使用java8 lambda简化代码逻辑,google的guava库等等
二、docker基本使用:现在愈来愈多的公司选择将服务部署在docker上,构成独立的服务云平台,并且docker操做和资源调度分配很爽的。
三、消息队列:kafka、rabbitmq、notify、metamq等等,消息队列做为处理高吞吐量,不计较及时结果的应用场景的工具很是受欢迎。所采用的实际应用手法就是消息队列+补偿机制。
四、zookeeper或Etcd:这俩种都是分布式服务提供服务的注册中心,经过它们能够实现多服务多机器部署且实现负载均衡。
五、RPC:远程调用的场景使用愈来愈普遍,特别在分布式服务中更加离不开它。它能使多个服务间的调用如同调用本地方法同样简便。针对RPC的实现使用较为普遍的有Thrift、protobuffer等。
六、Netty:是一个高性能、异步事件驱动的NIO框架。能为RPC提供高性能的调用
七、git和maven等项目管理及依赖包管理的工具,这是协做开发的基础。
八、Redis:差点忘了这个必知必会的技能...Redis做为高性能的内存数据库,基本覆盖了访问量大的服务缓存。固然memcached前几年用的也居多,不过功能可被Redis替代。除了缓存也能够提供分布式锁机制。
最近去面试Java的东时学员整理:
0、 集合框架:源码阅读,重点理解 HashMap,ArrayList 等经常使用集合类;
一、 并发包:理解 ConcurrentHashMap 原理,线程池,异步并发,锁;
二、 IO / NIO;
一、面向流与面向缓冲
Java IO和NIO之间第一个最大的区别是,IO是面向流的,NIO是面向缓冲区的。 Java IO面向流意味着每次从流中读一个或多个字节,直至读取全部字节,它们没有被缓存在任何地方。此外,它不能先后移动流中的数据。若是须要先后移动从流中读取的数据,须要先将它缓存到一个缓冲区。 Java NIO的缓冲导向方法略有不一样。数据读取到一个它稍后处理的缓冲区,须要时可在缓冲区中先后移动。这就增长了处理过程当中的灵活性。可是,还须要检查是否该缓冲区中包含全部您须要处理的数据。并且,需确保当更多的数据读入缓冲区时,不要覆盖缓冲区里还没有处理的数据。
二、阻塞与非阻塞IO
Java IO的各类流是阻塞的。这意味着,当一个线程调用read() 或 write()时,该线程被阻塞,直到有一些数据被读取,或数据彻底写入。该线程在此期间不能再干任何事情了。Java NIO的非阻塞模式,使一个线程从某通道发送请求读取数据,可是它仅能获得目前可用的数据,若是目前没有数据可用时,就什么都不会获取,而不是保持线程阻塞,因此直至数据变的能够读取以前,该线程能够继续作其余的事情。 非阻塞写也是如此。一个线程请求写入一些数据到某通道,但不须要等待它彻底写入,这个线程同时能够去作别的事情。 线程一般将非阻塞IO的空闲时间用于在其它通道上执行IO操做,因此一个单独的线程如今能够管理多个输入和输出通道(channel)。
三、选择器(Selectors)
Java NIO的选择器容许一个单独的线程来监视多个输入通道,你能够注册多个通道使用一个选择器,而后使用一个单独的线程来“选择”通道:这些通道里已经有能够处理的输入,或者选择已准备写入的通道。这种选择机制,使得一个单独的线程很容易来管理多个通道。
三、 Java SE 基础:主要是一些基本概念和语法细节,如 equals 和 hashcode 做用,访问修饰等;4. SSH 框架:IoC 和 AOP 的原理,涉及概念有动态代理和反射;
五、 设计模式:常见的会画 UML,例如徒手撸各类单例实现,JDK 里面涉及的设计模式;
六、 Socket 编程。
固然,你去的话也可能不是这些,大致上脱离不了这些范围内的知识点,在编程工做中须要的,你天然会去学,没必要局限本身必须学会什么才能工做,可是,这些20%的基础你必须掌握。