原标题:Java中高级面试题及答案

在掌握了Java技术之后,面试就成为马上要面临的问题了。面对面试官的问题,提前做好准备能够有助于你的临场发挥,以下是一些Java面试中高频出现的一些问题,有一部分是没有固定答案的,希望能够对大家有所帮助。

BIO、NIO和AIO的区别

Java BIO : 同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善。

Java NIO : 同步非阻塞,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。

Java AIO: 异步非阻塞,服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理。

NIO比BIO的改善之处是把一些无效的连接挡在了启动线程之前,减少了这部分资源的浪费(因为我们都知道每创建一个线程,就要为这个线程分配一定的内存空间)

AIO比NIO的进一步改善之处是将一些暂时可能无效的请求挡在了启动线程之前,比如在NIO的处理方式中,当一个请求来的话,开启线程进行处理,但这个请求所需要的资源还没有就绪,此时必须等待后端的应用资源,这时线程就被阻塞了。

适用场景分析:

BIO方式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4以前的唯一选择,但程序直观简单易理解,如之前在Apache中使用。

NIO方式适用于连接数目多且连接比较短(轻操作)的架构,比如聊天服务器,并发局限于应用中,编程比较复杂,JDK1.4开始支持,如在 Nginx,Netty中使用。

AIO方式使用于连接数目多且连接比较长(重操作)的架构,比如相册服务器,充分调用OS参与并发操作,编程比较复杂,JDK7开始支持,在成长中,Netty曾经使用过,后来放弃。

Java中常说的堆和栈,分别是什么数据结构;另外,为什么要分为堆和栈来存储数据

栈是一种具有后进先出性质的数据结构,也就是说后存放的先取,先存放的后取。

堆是一种经过排序的树形数据结构,每个结点都有一个值。通常我们所说的堆的数据结构,是指二叉堆。堆的特点是根结点的值最小(或最大),且根结点的两个子树也是一个堆。由于堆的这个特性,常用来实现优先队列,堆的存取是随意的。

为什么要划分堆和栈

1、从软件设计的角度看,栈代表了处理逻辑,而堆代表了数据。这样分开,使得处理逻辑更为清晰。

2、堆与栈的分离,使得堆中的内容可以被多个栈共享。一方面这种共享提供了一种有效的数据交互方式(如:共享内存),另一方面,堆中的共享常量和缓存可以被所有栈访问,节省了空间。

3、栈因为运行时的需要,比如保存系统运行的上下文,需要进行地址段的划分。由于栈只能向上增长,因此就会限制住栈存储内容的能力。而堆不同,堆中的对象是可以根据需要动态增长的,因此栈和堆的拆分,使得动态增长成为可能,相应栈中只需记录堆中的一个地址即可。

4、体现了Java面向对象这一核心特点(也可以继续说一些自己的理解)。

为什么要用线程池

那先要明白什么是线程池

线程池是指在初始化一个多线程应用程序过程中创建一个线程集合,然后在需要执行新的任务时重用这些线程而不是新建一个线程。

使用线程池的好处

1、线程池改进了一个应用程序的响应时间。由于线程池中的线程已经准备好且等待被分配任务,应用程序可以直接拿来使用而不用新建一个线程。

2、线程池节省了CLR 为每个短生存周期任务创建一个完整的线程的开销并可以在任务完成后回收资源。

3、线程池根据当前在系统中运行的进程来优化线程时间片。

4、线程池允许我们开启多个任务而不用为每个线程设置属性。

5、线程池允许我们为正在执行的任务的程序参数传递一个包含状态信息的对象引用。

6、线程池可以用来解决处理一个特定请求最大线程数量限制问题。

Msyql优化经验

1、对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。

2、应尽量避免在 where 子句中使用!=或<>操作符,否则引擎将放弃使用索引而进行全表扫描。

3、尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型,这会降低查询和连接的性能,并会增加存储开销。这是因为引擎在处理查询和连接时会逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了。

4、任何地方都不要使用 select * from t ,用具体的字段列表代替“*”,不要返回用不到的任何字段。

5、避免频繁创建和删除临时表,以减少系统表资源的消耗。诸如此类,等等等等......返回搜狐,查看更多

责任编辑:

java中高级面试_Java中高级面试题及答案相关推荐

  1. java基础考试_Java语言基础试题及答案

    Java语言基础试题及答案 引导语:Java是一种可以撰写跨平台应用程序的面向对象的程序设计语言.以下是小编整理的Java语言基础试题及答案,欢迎参考阅读! 1.浮点型数据根据数据存储长度和数值精度的 ...

  2. java netty 面试_Java 200+ 面试题补充② Netty 模块

    让我们每天都能看到自己的进步.老王带你打造最全的 Java 面试清单,认真把一件事做到最好. 1.Netty 是什么? Netty 是一款基于 NIO(Nonblocking I/O,非阻塞IO)开发 ...

  3. java 字符串 面试_Java 字符串面试题

    1. String的创建 String s = new String("abc"); String s1 = "abc"; String s2 = new St ...

  4. Java并发编程71道面试题及答案

    Java并发编程71道面试题及答案 1.在java中守护线程和本地线程区别? java中的线程分为两种:守护线程(Daemon)和用户线程(User). 任何线程都可以设置为守护线程和用户线程,通过方 ...

  5. Java并发编程75道面试题及答案

    1.在java中守护线程和本地线程区别?java中的线程分为两种:守护线程(Daemon)和用户线程(User).任何线程都可以设置为守护线程和用户线程,通过方法Thread.setDaemon(bo ...

  6. java语言程序设计考题_《JAVA语言程序设计》期末考试试题及答案6(应考必备题库)...

    <JAVA语言程序设计>期末考试试题及答案6(应考必备题库) 一.填空题 1.定义类的保留字是( class ),定义接口的保留字是( interface ). 2.Socket通常也称为 ...

  7. 《JAVA语言程序设计》期末考试试题及答案

    文章目录 <JAVA语言程序设计>期末考试试题及答案1(应考必备题库) 一.单选择题 二.填空题 三.写出下面程序的运行结果 <JAVA语言程序设计>期末考试试题及答案2(应考 ...

  8. java阿里面试官直接告诉你录取答案,你还在犹豫那就晚了

    java阿里面试官直接告诉你录取答案,你还在犹豫那就晚了 2022-03-11 16:49·LBL-埃文斯 前言 阿里巴巴面试规则 1.第一轮面试: 第一轮面试通常是电话面试,面试官会提前打电话约定面 ...

  9. 2022年河南省高职单招(面试)考试冲刺试题及答案

    题库来源:优题宝公众号 2022年河南省高职单招(面试)考试冲刺试题及答案,由优题宝公众号根据最新高职单招(面试)考试大纲与历年高职单招(面试)考试真题汇总编写,包含高职单招(面试)考试常考重点题型与 ...

最新文章

  1. 睡觉觉睡觉睡觉计算机手机,孩子爱睡觉怎么回事
  2. 中国爬虫违法违规案例汇总
  3. (49)逆向分析KiSystemService/KiFastCallEntry调用内核函数部分(SST,SSDT,SSPT)
  4. Quartz整合Spring
  5. hdu 1024(滚动数组优化)
  6. jfinal上传文件
  7. php中怎样阻止网页进行跳转,php中如何阻止网页进行跳转?
  8. Gradle多项目构建–类似父pom的结构
  9. IM、RTC技术两生花,看融云如何打造“IM+RTC+Push”一站式通信云服务
  10. java8 groupingby_Java8 教程第五章之Streams Collectors groupingBy
  11. 2016-2017 ACM-ICPC Southwestern European Regional Programming Contest (SWERC 2016)
  12. 通过里程碑式管理,控制软件项目管理进度
  13. vsftpd的参数说明和虚拟用户配置
  14. 基于单片机的智能温度监测系统的代码
  15. 2018中原工学院网络安全校赛
  16. 美国华盛顿州立大学计算机排名,2020年华盛顿州立大学排名TFE Times美国最佳计算机科学硕士专业排名第38...
  17. 邮件发送软件-推广软件
  18. 特征图注意力_深入理解图注意力机制
  19. AT24C1024读写
  20. 【微分方程】微分算子法求微分方程特解

热门文章

  1. 四元数和欧拉角的个人理解
  2. Vue2+Node.js前后端分离项目部署到云服务器
  3. Nginx基本使用和代理服务器(负载均衡)--保姆级教程
  4. 计算机三维动画学什么,计算机三维动画设计教学大纲..doc
  5. 深入浅入 ~ ConCurrentHashMap底层原理透析
  6. node js 写按键精灵_带有按键的Node.js Raw模式
  7. Linux下网络丢包故障定位
  8. 什么文案才算得上好文案
  9. C++11 参数绑定-bind函数用法
  10. 造梦西游ol玩家玩法攻略