一、应聘准备:
1)并发、JVM、分布式、TCP/IP协议
2)Java的数据结构相关的类实现原理,比如LinkedList,ArrayList,HashMap,TreeMap、LinkedHashMap这一类的。
3)CyclicBarrier
4)IO包和NIO包:其实NIO的核心是IO线程池,IO包的设计模式(装饰器模式)
5)GC、类加载机制,以及内存
6)著名开源项目的源码,你自己有很棒的开源项目。
7)个人博客
二、学习历程:
1)Java基础:http://www.runoob.com/java/java-tutorial.html
2)Web开发:HTML/CSS/JS(前端页面)、Servlet/JSP(J2EE)以及Mysql(数据库)相关的知识:马士兵老师视频
3)开发框架
a)SSM框架,即spring、springmvc、mybatis,视频教程(http://edu.51cto.com/lesson/id-76468.html)
b)Maven
三、必读宝典:
工作1年以内:《Java编程思想》
工作1年到2年:《大话设计模式》、《重构 改善既有代码的设计》、《effective java》、http://www.cnblogs.com/zuoxiaolong/p/pattern26.html
工作2年到3年:《深入理解Java虚拟机》、http://www.cnblogs.com/zuoxiaolong/category/508918.html、《Java并发编程实战》、深入了解Java底层和Java类库
工作3年到4年:大数据(Hadoop、hbase)、分布式缓存(redis)、分布式消息服务、分布式计算(Mapreduce或者storm)、软负载均衡等等
四、高级开发:
《深入理解计算机系统》:比较适合一直从事Java Web开发和APP后端开发工作的人群。
《tcp/ip详解 卷一、二、三》:比较适合做网络编程的人群,比如你使用netty去开发的话,那么就要对TCP/IP有更深入的了解。
《数据结构与算法》:比较适合做计算研究工作的人,比如刚才提到的分布式计算
五、目标:
工作4年到5年:有自己的github开源项目、有自己的产品、提高自己的影响力、参与一个伟大的项目
六:互联网公司面试技术:
阿里巴巴:高并发,缓存,JVM这些方面,比如memcached,redis这类缓存组件,memcached的内存模型是slab,item等类去描述的
百度:一些项目管理,敏捷开发方面的问题
京东:集合框架,算法、并发,JVM,缓存这类内容
网易:memcached,集群,session共享,tcp协议,gc策略,jvm内存模型,并发
艺龙:集合框架,算法、并发,JVM,缓存这类内容
七:跳槽经验:
1,如果可能,不要轻易更换自己的行业。
2,给自己定价一定要谨慎,否则可能错过很好的机会。
3,如果你喜欢技术,公司的技术氛围很重要。
4、跳槽的时候,最好先不要投你的意向公司,而是应该先找几个练手的公司探探身价,然后再客观的给自己定价。一旦定好价之后,就不能再轻易的改变了
八、面试编程:
题目内容是,写一个函数,它的作用是接受一个整数(假设为length),返回一个数组,数组的长度为length,数组中的内容为随机的0至(length-1)的值,并且不能重复。比如length为5的话,数组可能是[1,0,3,2,4]。
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
/**
* @author zuoxiaolong
*
*/
public abstract class RandomArray {
public static int[] random(int length){
if (length <= 0) {
return new int[0];
}
List<Integer> list = new ArrayList<Integer>(length);
for (int i = 0; i < length; i++) {
list.add(i);
}
int[] array = new int[length];
for (int i = 0; i < length; i++) {
array[i] = list.remove(new Random().nextInt(length - i));
}
return array;
}
public static void main(String[] args) {
int[] array = RandomArray.random(10);
System.out.print("[");
for (int i = 0; i < array.length; i++) {
if (i < array.length - 1) {
System.out.print(array[i] + ",");
} else {
System.out.print(array[i]);
}
}
System.out.print("]");
}
}
import java.util.HashSet;
import java.util.Iterator;
import java.util.Random;
import java.util.Set;
public class RandomTest {
/**
* @param args
*/
public static int [] getArray(int length){
int index = 0;
int [] a = new int[length];
Random r = new Random();
Set<Integer> set = new HashSet<>(length);
while(set.size()<length){
set.add(r.nextInt(length));
}
for(Iterator<Integer> it = set.iterator(); it.hasNext();){
a[index] = it.next();
index ++ ;
}
return a;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int [] a = RandomTest.getArray(100);
for(int i = 0; i<a.length; i++){
System.out.println(a[i]);
}
}
}
九、楼主博客:
http://www.zuoxiaolong.com
http://www.zuoxiaolong.com/
1)并发、JVM、分布式、TCP/IP协议
2)Java的数据结构相关的类实现原理,比如LinkedList,ArrayList,HashMap,TreeMap、LinkedHashMap这一类的。
3)CyclicBarrier
4)IO包和NIO包:其实NIO的核心是IO线程池,IO包的设计模式(装饰器模式)
5)GC、类加载机制,以及内存
6)著名开源项目的源码,你自己有很棒的开源项目。
7)个人博客
二、学习历程:
1)Java基础:http://www.runoob.com/java/java-tutorial.html
2)Web开发:HTML/CSS/JS(前端页面)、Servlet/JSP(J2EE)以及Mysql(数据库)相关的知识:马士兵老师视频
3)开发框架
a)SSM框架,即spring、springmvc、mybatis,视频教程(http://edu.51cto.com/lesson/id-76468.html)
b)Maven
c)开发工具:IntelliJ IDEA、Eclipse
三、必读宝典:
工作1年以内:《Java编程思想》
工作1年到2年:《大话设计模式》、《重构 改善既有代码的设计》、《effective java》、http://www.cnblogs.com/zuoxiaolong/p/pattern26.html
工作2年到3年:《深入理解Java虚拟机》、http://www.cnblogs.com/zuoxiaolong/category/508918.html、《Java并发编程实战》、深入了解Java底层和Java类库
工作3年到4年:大数据(Hadoop、hbase)、分布式缓存(redis)、分布式消息服务、分布式计算(Mapreduce或者storm)、软负载均衡等等
四、高级开发:
《深入理解计算机系统》:比较适合一直从事Java Web开发和APP后端开发工作的人群。
《tcp/ip详解 卷一、二、三》:比较适合做网络编程的人群,比如你使用netty去开发的话,那么就要对TCP/IP有更深入的了解。
《数据结构与算法》:比较适合做计算研究工作的人,比如刚才提到的分布式计算
五、目标:
工作4年到5年:有自己的github开源项目、有自己的产品、提高自己的影响力、参与一个伟大的项目
六:互联网公司面试技术:
阿里巴巴:高并发,缓存,JVM这些方面,比如memcached,redis这类缓存组件,memcached的内存模型是slab,item等类去描述的
百度:一些项目管理,敏捷开发方面的问题
京东:集合框架,算法、并发,JVM,缓存这类内容
网易:memcached,集群,session共享,tcp协议,gc策略,jvm内存模型,并发
艺龙:集合框架,算法、并发,JVM,缓存这类内容
七:跳槽经验:
1,如果可能,不要轻易更换自己的行业。
2,给自己定价一定要谨慎,否则可能错过很好的机会。
3,如果你喜欢技术,公司的技术氛围很重要。
4、跳槽的时候,最好先不要投你的意向公司,而是应该先找几个练手的公司探探身价,然后再客观的给自己定价。一旦定好价之后,就不能再轻易的改变了
八、面试编程:
题目内容是,写一个函数,它的作用是接受一个整数(假设为length),返回一个数组,数组的长度为length,数组中的内容为随机的0至(length-1)的值,并且不能重复。比如length为5的话,数组可能是[1,0,3,2,4]。
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
/**
* @author zuoxiaolong
*
*/
public abstract class RandomArray {
public static int[] random(int length){
if (length <= 0) {
return new int[0];
}
List<Integer> list = new ArrayList<Integer>(length);
for (int i = 0; i < length; i++) {
list.add(i);
}
int[] array = new int[length];
for (int i = 0; i < length; i++) {
array[i] = list.remove(new Random().nextInt(length - i));
}
return array;
}
public static void main(String[] args) {
int[] array = RandomArray.random(10);
System.out.print("[");
for (int i = 0; i < array.length; i++) {
if (i < array.length - 1) {
System.out.print(array[i] + ",");
} else {
System.out.print(array[i]);
}
}
System.out.print("]");
}
}
import java.util.HashSet;
import java.util.Iterator;
import java.util.Random;
import java.util.Set;
public class RandomTest {
/**
* @param args
*/
public static int [] getArray(int length){
int index = 0;
int [] a = new int[length];
Random r = new Random();
Set<Integer> set = new HashSet<>(length);
while(set.size()<length){
set.add(r.nextInt(length));
}
for(Iterator<Integer> it = set.iterator(); it.hasNext();){
a[index] = it.next();
index ++ ;
}
return a;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int [] a = RandomTest.getArray(100);
for(int i = 0; i<a.length; i++){
System.out.println(a[i]);
}
}
}
九、楼主博客:
http://www.zuoxiaolong.com
http://www.zuoxiaolong.com/
http://www.cnblogs.com/zuoxiaolong/
十、Java基础
1、HashMap等集合的底层实现、concurrent包的类
2、面相对象概念、Java内存模型
3、框架:Spring MVC、Spring、Hibernate、Mybatis特点、
4、数据库:Mysql索引和优化,
5、计算机基础:计算机网络、看算法排序,查找,动态规划,分治
6、对于做过的项目,会画系统架构图
十一、面试问题:
1、Spring的特点! “IOC和AOP
2、Spring AOP是怎么实现的
3、聊聊面向对象吧
4、你自己写个线程池,说说思路