java for 面试题_Java面试题整理

本文总结了Java编程中的关键知识点,包括线程池的创建与核心参数,sleep()与wait()的区别,异常处理的基本概念,以及NIO与BIO的异同。同时,介绍了设计模式中的单例模式实现,并探讨了SSH框架和Linux内存查看命令。这些内容对于理解和提升Java程序员的面试技巧至关重要。
摘要由CSDN通过智能技术生成

面试题总结

目 录

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(intcorePoolSize,intmaximumPoolSize,longkeepAliveTime, TimeUnit unit, BlockingQueueworkQueue, ThreadFactory threadFactory,

RejectedExecutionHandler handler);

参数说明:corePoolSize,初始化线程池时候,拥有的线程数量

maximumPoolSize,线程池允许的最大线程数

keepAliveTime,线程存活时间,跟单位一起时间片轮转调度

unit,时间单位,TimeUnit的枚举值

workQueue,任务队列:基于数组阻塞、基于链表阻塞、

threadFactory,线程工厂

handler,饱和策略

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

/*

* 第一种:

*/

Executor executor = Executors.newFixedThreadPool();

executor.execute( new newFixedThreadPool() {

}

);

/*

* 第二种:

*/

publicstaticExecutorService newSingleThreadExecutor() {

return new FinalizableDelegatedExecutorService (new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS,

new LinkedBlockingQueue()));

}

publicstaticExecutorService newSingleThreadExecutor(ThreadFactory threadFactory) {

return new FinalizableDelegatedExecutorService (new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue(), 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 classSingleton {private static Singleton singleton = newSingleton();privateSingleton() {}public staticSingleton getInstance() {returnsingleton;

}

}/** 懒汉单例*/

public classSingleton {private staticSingleton singleton;privateSingleton(){};public static synchronizedSingleton getInstance() {if (singleton == null) {

singleton= newSingleton();

}returnsingleton;

}

}

特点:

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调优

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值