为爱奔跑


无论在家出家。必须上敬下和。忍人所不能忍。行人所不能行。代人之劳。成人之美。静坐长思己过。闲谈不论人非。行住坐卧。穿衣吃饭。从幕至朝。一名佛号。不令间断。或小声念。或默念。除念佛外。不起别念。若或妄念一起。当下就要教他消灭。当生惭愧心及忏悔心。从有修持。总觉我工夫很浅。不自矜夸。只管自家。不管人家。只看好样子。不看坏样子。看一切人都是菩萨。唯我一人是凡夫!

面试题总结

 目 录

0、通用问题

  0.1 自我介绍

  0.2 项目中遇到的困难,如何解决的?

  0.3 面向对象的特点

  0.4 常用的Java类

1、数据结构

  1.1 

  1.2 

2、Java基础

  2.1 怎么创建线程池?

  2.2 sleep()和wait()的区别?

  2.3 Java中的异常有几种?

  2.4 Java中的序列化和反序列化?存储和传输。

  2.5 NIO和BIO

3、设计模式

  3.1 设计模式的六大原则:开闭、里氏替换、接口隔离、合成复用、最少知道、依赖倒转

  3.2 手写单例模式、饿汉懒汉模式

  3.3 

4、SSHM框架

5、Linux命令

  5.1 查看内存命令

6、SQL常用

/*************************************************************************************************************************/

零、自我介绍

一、数据结构

二、Java基础

  2.1 怎么创建线程池?

  在Java中线程池的实现类主要通过ThreadPoolExecutor类来实现。我们创建线程通常使用Executors类中的四个静态方法来创建的,分别如下:

/*
* 创建一个单线程的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO)执行.
* 适用于那种需要按照线程数量执行的场景。
*/
newSingleThreadExecutor();
/*
* 创建一个固定线程数的线程池,可控制线程最大并发数,适用需要限制线程池数量的应用场景。
*/ newFixedThreadPool();
/*
* 创建一个可以根据需要创建新线程的线程池,它是没有线程数量限制的,适用于短期异步任务的操作,
* 或者是负载比较轻的服务器。
*/ newCachedThreadPool();
/*
* 创建一个固定线程数的线程池,支持定时及周期性执行后台任务。
*/ newScheduledThreadPool();

 接着介绍一下在ThreadPoolExecutor的构造方法中的几个参数:

 

public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory,
  RejectedExecutionHandler handler);
参数说明:
corePoolSize,初始化线程池时候,拥有的线程数量
maximumPoolSize,线程池允许的最大线程数
keepAliveTime,线程存活时间,跟单位一起时间片轮转调度
unit,时间单位,TimeUnit的枚举值
workQueue,任务队列:基于数组阻塞、基于链表阻塞、
threadFactory,线程工厂
handler,饱和策略

创建线程池的常用方法有:

/*
* 第一种:
*/
Executor executor = Executors.newFixedThreadPool();
executor.execute( new newFixedThreadPool() {
  
}
);

/*
* 第二种:
*/
public static ExecutorService newSingleThreadExecutor() { 
   return new FinalizableDelegatedExecutorService (new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS,
                                new LinkedBlockingQueue<Runnable>()));
}

public static ExecutorService newSingleThreadExecutor(ThreadFactory threadFactory) {
  return new FinalizableDelegatedExecutorService (new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>(), threadFactory)); }

   2.2 Java中sleep()和wait()的区别与联系

  在Java中,wait方法是属于Object类的,sleep方法则是属于Thread类的。

  sleep方法不会释放对象锁,当指定的时间到了,又自动恢复运行状态;wait会放弃对象锁,只有针对此对象调用notify方法之后,才进入准备状态,之后获取对象锁进入运行状态。

  2.3 Java中的异常有几种?

  异常都是由java.lang.Throwable衍生而来的,有两个子类Exception和Error。

  2.5 NIO和BIO

 

BIO(Blocking IO)阻塞IO
NIO(Non-Blocking IO)非阻塞IO

共同点:两者都是同步操作。即必须先进行IO操作后才能进行下一步操作。

不同点:BIO多线程对某资源进行IO操作时会出现阻塞,即一个线程进行IO操作完才会通知另外的IO操作线程,必须等待。
NIO多线程对某资源进行IO操作时会把资源先操作至内存缓冲区。然后询问是否IO操作就绪,是则进行IO操作,否则进行下一步操作,然后不断的轮询是否IO操作就绪,直到iIO操作就绪后进行相关操作。

  NIO主要是引入了管道的概念,你可以先看看netty这个项目。就是用nio实现的一个网络层开发框架。做tcp/udp开发用的比较多,服务器通信,RPC调用。游戏服务端基本都是这个套路。

 

三、设计模式

  3.2 手写单例模式、饿汉懒汉模式

  单例模式,确保一个类只有一个实例,整个系统公用该实例。如:日志logger。单例模式包括三大要素:私有的构造方法、指向自己实例的私有静态引用、以自己实例为返回值的静态的公有的方法。

  饿汉模式和懒汉模式的区分在于,实例化对象的时机不同。饿汉模式,在单例类被加载的时候,就实例化对象。懒汉模式,在调用取得实例方法的时候,才实例化对象。代码分别如下:

 

/*
*  饿汉单例
*/
public class Singleton {
    private static Singleton singleton = new Singleton();
    private Singleton() {}
    public static Singleton getInstance() {
        return singleton;
    }   
}

/*
* 懒汉单例
*/
public class Singleton {
    private static Singleton singleton;
    private Singleton(){};
    public static synchronized Singleton getInstance() {
        if (singleton == null) {
            singleton = new Singleton();
        }
        return singleton;
    }    
}
特点:
1.在内存中只有一个对象,节省内存空间。
2.避免频繁的创建销毁对象,可以提高性能。
3.避免对共享资源的多重占用。
4.可以全局访问。

 

 

 

  3.3 

四、SSHM框架

五、Linux命令

  5.1 linux查看内存命令:top、free、cat proc/meminfo、less proc/meminfo

 

基础;线程和进程理解加掌握、会用进程和线程编程序、多态、父类引用指向子类对象、List和Set和Map、synchronized同步、重写和重载、String和StringBuffer、

数据结构;排序算法、红黑树、KMP算法、

操作系统:

 

Jsp内置对象:在.jsp页面中,可以不加申明,就可以在页面脚本中使用的成员变量。(jsp的页面脚本是用Java语言写的)

1.requeset对象。客户端的所有请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应。它是HttpServletRequest的实例。

 

/**************************知识点-重载、重写**************************************/

重载,方法名相同;参数个数、类型、次序不同;返回值可以相同也可以不同。(对返回值没有规定)

重写,方法名、参数个数类型顺序都必须相同;返回值类型或者与父类返回值相同,或者是父类返回值类型的子类;(如父类返回Object,子类可以返回String);子类权限不能低于父类权限;子类异常跟基类相等或者更小。

/**************************知识点-Spring依赖注入**************************************/

依赖注入:程序中的某个类需要依赖其他类的方法。通常的做法是new一个其他类,然后再调用类实例化后对象的方法,这种开发带来的问题是,new来的对象不好统一管理。于是,Spring提出了依赖注入的思想:其他类不需要程序来实例化,而是通过Spring容器new好,并把对象注入到需要该对象的类中。然后就可以调用方法了。

setter注入;构造方法注入;静态工厂方法注入;实例工厂方法注入;(set注入优先于构造方法注入)

http://blessht.iteye.com/blog/1162131

/**************************知识点-Servlet初始化参数***********************************/

 

 

/**************************知识点-线程和进程**************************************/

1.sleep()和wait()区别。

2.关键字synchronize。

3.

 /**************************知识点-JVM知识***************************************/

1、JVM调优

 

 

posted on 2015-03-24 23:33  RunforLove  阅读(389)  评论(0编辑  收藏  举报