面试题总结

目 录

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

java for 面试题_Java面试题整理相关推荐

  1. java cglib jar包_Java面试题|反射必看的4道面试题

    上三篇: 动力节点:Java面试题|多线程21道必看面试题​zhuanlan.zhihu.com 动力节点:面试题|Java基础17道常见面试题​zhuanlan.zhihu.com 动力节点:面试题 ...

  2. java面试题_Java面试题总结(2020年多家公司整理的300道Java面试题手册)

    Java面试手册 目录 一.性能优化面试专栏 1.1.tomcat性能优化整理 1.2.JVM性能优化整理 1.3.Mysql性能优化整理 二.微服务架构面试专栏 2.1.SpringCloud面试整 ...

  3. 上海长亮java笔试题_java笔试题整理

    exit()是system类的方法,如system.exit(); 如果某个方法是静态的,它的行为就不具有多态性. 类后面没有括号,方法必须要有返回值.如果没有返回值,要写void 构造函数不具有多态 ...

  4. java linux 面试题_java 面试题

    第一,谈谈final, finally, finalize的区别. final?修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承.因此一个类不能既被声明为 ...

  5. java list 删除元素_Java面试题:List如何一边遍历,一边删除?

    这是最近面试时被问到的1道面试题,本篇文章对此问题进行总结分享. 面试清单(Java岗):Java+JVM+数据库+算法+Spring+中间件+设计模式​shimo.im 1. 新手常犯的错误 可能很 ...

  6. java重写面试题_Java面试题:重写了equals方法,为什么还要重写hashCode方法?

    核心问题:重写了equals方法,为什么还要重写hashCode方法? 这不仅仅是一道面试题,而且是关系到我们的代码是否健壮和正确的问题.在前面两篇文章涉及到了equals方法的底层讲解:<说说 ...

  7. 关于java的面试题_JAVA面试题100问第一部分

    译者注:由于原文太长,这只是大概三分一的部分,即翻译至第五页倒数第三个问题. 以下是面试时常问到的JAVA面试题,能让你对JAVA面试有基本的了解.根据我个人的经验,一个好的面试官在面试的时候是不会事 ...

  8. java程序设计教程试题_java程序设计试题库.doc

    java程序设计试题库.doc 还剩 67页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧,价低环保! 内容要点: <Java 语 ...

  9. JAVA 面试背 通过_java面试题背不下来怎么办?java面试题总结

    最近有很多java人员反映,说java面试题太多根本就背不下来,这可急坏了他们,毕竟要去面试java工作的,那么接下来,我们就来给大家讲解一下java面试题背不下来的解决方法. 其实java面试题背不 ...

最新文章

  1. C++中typedef和define的区别
  2. 使用uni-app实现使用浏览器下载功能时,安卓端部分机型不兼容问题(小米/华为)
  3. linux shell 数组倒序
  4. 44 ansible ad-hoc模式
  5. Spring-方法注入lookup、方法替换MethodReplacer接口
  6. java linkedlist源码_Java集合之LinkedList源码分析
  7. 计算机操作系统的新技术新知识,计算机操作系统教程:核心与设计原理
  8. python123平台作业答案第十一周_马哥2016全新Linux+Python高端运维班第十次作业
  9. 手机数控模拟器安卓版_手机cnc加工模拟器中文版下载-cnc加工模拟器手机版 1.1.4 安卓版-玩友游戏网...
  10. 关于TRACERT和TTL
  11. OpenWRT(四)AP、STA、中继模式
  12. 解决win10+Ubuntu20.0.4双系统,win10时间错误问题
  13. html5 判断页面加载,js判断页面是否加载完成的方法
  14. OAuth2授权方式
  15. 小心你的网站让百度蜘蛛抓取不到
  16. Neo4j 4.x 社区版数据导入及Spring-Data-Neo4j 5.x、6.x使用案例
  17. “大多数”餐馆收银系统被用于盗用信用卡信息的恶意软件感染
  18. OpenStack计算节点nove启动报错
  19. 前端性能优化学习 03 Web 性能测试
  20. MySQL常见问题汇总

热门文章

  1. 不能右键新建html文件,win10无法新建文件夹怎么办 win10右键新建菜单设置方法图文教程...
  2. html固定悬浮窗效果,js 固定悬浮效果实现思路代码
  3. python安装request库_Python——安装requests第三方库
  4. php strpose_php中strpos()和stripos()函数的区别用法详解
  5. 多线程调用同一个对象的方法_这一次,让我们完全掌握Java多线程(2/10)
  6. ecs云服务器 系统登陆密码,云服务器ecs系统登录密码
  7. javadocx转换成html_使用Java将Word转为Html或txt[转]
  8. python对象特性教学_Python三个面向对象特性多态性的实用解释,实践,解读,丨,三大,特征,之...
  9. linux系统更新失败处理功能,Proxmox VE升级apt-get update失败处理 | linux运维小站–linux系统架构_服务器运维_Linux运维工程师工作手札...
  10. 同时买票是怎么实现的_腰包怎么背才更新潮?教你3种时尚背法,告别土味老气风...