小公司做小项目一般都用SSH+jsp大公司做项目都是根据不同的项目 采取不同的框架技术,比如银行大部分都用 EJB等
第一:先学习Java的核心库(JavaSE)
JavaSE的内容包括:环境搭建、基础语法、面向对象、数组、集合、常用类、IO流、反射机制、网络编程……..
第二:MySQL数据库
搞定一门数据库相关的课程,例如:MySQL、Oracle,搞定一个就可以了,目前互联网公司,例如:京东、阿里等,他们都在使用MySQL,所以建议大家学习MySQL数据库,小巧轻盈,免费,由于互联网公司的项目访问量比较大,所以一般会搭建数据库的集群,可以一个数据库不够,所以需要搭建数据库集群,为了应付高并发。(搭建的比较多的时候,免费就很重要了。)
第三:WEB前端
以后从事Java开发,从事JavaEE开发,主要开发的系统结构是B/S结构的,B指的是Browser,S指的是Server。要开发这种系统,B端要会,S端也要精通。WEB前端的学习就是学习B端技术。包括:HTML 、CSS、JavaScript(JS)、jQuery框架(底层对JS进行了封装)…
第四:WEB后端(JavaWEB)
WEB后端其实可以是很多种不同的编程语言,例如:PHP、C、C++、Java,他们都可以进行WEB后端的开发,我们既然选择了比较火爆的Java,那么我们学习的后端一定是基于Java语言实现的,包括:Servlet、Filter、Jsp、EL、JSTL、MVC架构模式、数据库连接池(阿里巴巴的Druid连接池)、代理模式(动态代理)。另外后端学习了之后,还要学习一个异步编程技术AJAX。(完成网页的局部刷新,AJAX其实不属于后端,是前端浏览器上的程序。)
学习到这里为止,表示Java基本/基础的技术已经学完了。但是这些最基层的技术在实际的开发中不会使用的,一般为了开发效率,都会使用大量的提前封装好的框架。
第五:最好能够停留下来,做一个项目。
这个项目最好能将之前所学全部串起来。(对以前的知识点进行巩固。)
这个项目最好是基于:Servlet + Jsp+AJAX+jQuery+MySQL….
在这个项目的开发过程中:大家一定要记住,目前比较好的项目自动构建工具:Maven是一定要精通的。还有一个就是团队协作开发:Git/SVN是一定要会用的。(目前使用Git比较多一些。)
第六:学习高级框架
Spring、SpringMVC、MyBatis(持久层框架,这个框架互联网公司使用比较多,因为互联网项目需要进行SQL优化,MyBatis的SQL优化很方便,所以大部分都是使用MyBatis)
Struts2(很少使用了,使用这个的肯定是很老的项目)、Hibernate(传统企业,还有政府等可能会使用Hibernate。)
SpringBoot(新项目大部分使用的都是boot了。所以在项目中遇到还在使用SSM的一般都是遗留项目。)
当你走到这里之后,基本上你可以出山了。(去找工作,8K的薪资应该问题不大,但前提是你学的好。学习的深度够了,广度够了。)
第七:最好能有一个大型项目是使用框架来完成的。
SpringBoot做一个项目。
Spring SpringMVC MyBatis做一个项目。
这个项目最好是找几个人搭伙做一下。体验一下团队协作。(尤其是使用一些协作的工具。怎么沟通,怎么写日报,怎么开会,怎么使用Git,等等….)
第八:如果你的薪资想达到15K的话,你可能需要还要学习一些分布式相关的一些技术。
能够应付高并发的一些技术,例如:分布式框架Dubbo、SpringCloud、MQ、Nginx、Redis…..
java的知识体系构架
....祝 工作顺心 哈哈
又是新的一年了,去年的绩效也出来了,总是几家欢乐几家愁。绩效好的机会多的老板信任的,在新的一年会更加有干劲。绩效不好的,老板不看好的,可能新的一年就会有离职的冲动。 如果你有离职的想法,那么还是需要花一些时间准备一下,毕竟现在外面好的互联网公司对程序员的要求还是蛮高的,需要你有各种能耐。
这篇文章主要是介绍一下我自己从毕业到现在碰到的一些面试题。
JAVA 基础
int 占用几个字节
答案: 4个
不用第三个变量,如何交换两个变量的值
public class TestSwitchVar { public static void main(String[] args) { int a = 1; int b = 2; a = a + b; b = a - b; a = a - b; System.out.println(a); System.out.println(b); }}1234567891011
JAVA动态代理使用什么技术实现的
答案: 反射
JAVA类加载器的原理
答案: 学习Java类加载器
集合类
HashSet的add方法是如何实现的,如何去重的;
答案: HashSet的底层是使用HashMap来实现的,调用add方法的时候,底层也是用HashMap的put方法来实现的。HashSet之所以具备去重的能力,也是因为HashMap的put方法中,如果发现key已经存在了,会覆盖key对应的值,但是对于HashSet来说,还是原来那个key。也就是说Key set并没有任何变动。
HashMap的实现原理;
答案:
看我之前写的HashMap的put和get方法原理和 HashMap扩容以及HashMap多线程下发生死循环的原因
JDK 1.7 ConcurrentHashMap的实现原理
答案:
ConcurrentHashMap学习
ConcurrentHashMap在JDK 1.8的实现跟JDK7有什么不同; ArrayList是线程安全的吗
答案:
线程不安全的ArrayList
CopyOnWriteArrayList是如何实现线程安全的;
答案:
CopyOnWriteArrayList的使用场景貌似很少很少
NIO
描述JAVA NIO的工作原理,相比JAVA IO有什么优势
答案:
学习NIO
线程和并发
sleep方法和wait方法有什么区别
答案: 1、wait方法释放锁,sleep方法不释放锁 2、wait方法必须在同步代码块里,比如synchronize关键里,但是sleep方法没有这限制
wait()方法调用后,到底发生了什么事情
小编整理了一些面试资料,这些资料希望能帮到大家,需要资料的朋友们关注转发私信关键词(架构)得到。
答案:
Object wait方法
除了使用synchronized关键字之外,还有其他同步的做法吗
答案: volatile关键字 lock()和unlock()
什么是daemon 线程 如果有多个线程要并发操作一个文件,如何做到线程安全,请写出伪代码 什么是线程安全 volatile关键字有什么用
答案:
浅析volatile关键字
悲观锁和乐观锁的区别 有哪些并发模型,用过哪些并发模型,选择这些模型有什么依据(比如说Master-Worker模式) 用过ThreadLocal吗?什么场景下用过 线程有哪几种状态 CAS的原理
答案:
学习一下CAS
写一个发生死锁的JAVA代码,并描述一下如何避免死锁? 线程要进入阻塞状态,操作系统是如何操作的(涉及到用户态和内核态) 谈谈如何进行”锁”的优化 什么叫可重入锁
JVM
垃圾回收算法有哪几种?各种有什么特点
答案:
JVM专栏
什么时候触发young gc,什么时候触发full gc
答案: 新生代中的Eden满了就就行young gc,老年代满了,就进行full gc。
如果JAVA进程突然挂掉了,怎么查看挂掉的原因
答案: java进程挂掉后,会产生core dump 文件,可以使用jstack 命令输出线程堆栈信息。
JVM监控工具有哪些,各有什么用途,简单介绍一下用法 描述一下JVM的内存模型 怎么知道是哪行代码导致系统CPU高
mysql
使用什么关键字来分析SQL的性能 建立索引有什么注意点
Mysql 索引知识点
什么是覆盖索引
Mysql 索引知识点
什么情况下,需要建立复合索引
Mysql 索引知识点
索引原理是什么,底层用什么数据结构
Mysql B+树学习
应用的数据库是如何做容灾的 如何做到动态增加业务字段,而代码无需改动 行锁和表锁的区别,innodb引擎用的是哪种锁 innodb myisam的区别
索引知识点
mysql批量插入数据的时候,怎么优化 你参与的项目,有做分库处理吗,路由到分库的规则是什么?
nosql
用过哪些NoSQL数据库,简单介绍一下
缓存
memcache的原理 memcache和redis的区别 系统有用本地缓存吗?是如何做命中率的统计的 选择堆外缓存和堆内缓存的依据是什么 从堆外缓存获取数据需要反序列化,有办法避免吗?说一下思路即可
算法
一致性hash算法的原理 使用JAVA实现快速排序 使用JAVA实现二分查找 使用JAVA进行二叉树的遍历(前序/中序/后序,写一种即可) 红黑树的原理
HTTP
如何用JAVA代码解析一个HTTP请求,描述一下实现的思路 HTTP 1.0 HTTP1.1 HTTP 2.0的区别
答案:
HTTP1.0 HTTP 1.1 HTTP 2.0主要区别
小编整理不易/(ㄒoㄒ)/~~,需要面试相关资料的朋友们 关注和转发,私信关键词 【架构】即可免费获取到哈
java联网架构师