java面试题

  • Q: spring的controller层是安全的么?
    A:不安全,因为@controller注解默认不是单例的,如果controller中含有静态变量那么就是不安全的。

  • Q:谈谈对线程池的认识?
    A:在一个应用程序中我们需要多次使用线程,每一次线程的创建及销毁都会消耗内存,而内存是宝贵的资源,使用线程池可以方便的管理线程,也可以减少内存的消耗。
    java中提供了两种创建线程池的方法:
    java.util.concurrent.ThreadPoolExecutor类直接创建

 new ThreadPoolExecutor(2, 4, 1, TimeUnit.SECONDS, new LinkedBlockingDeque());

java.util.concurrent.Executors类直接创建

ExecutorService executorService = Executors.newFixedThreadPool(1);
ExecutorService executorService1 = Executors.newCachedThreadPool();
ExecutorService executorService2 = Executors.newSingleThreadExecutor();
ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(6);

需要配置参数:
1、corePoolSize 线程池线程基本数量;
2、maximumPoolSize 线程池最大创建的最大线程数;
3、keepAliveTime 线程最大活跃时间;
4、TimeUnit 线程活跃的时间单位;
5、BlockingQueue 承载任务的阻塞队列;
阻塞队列分为四种:
ArrayBlockingQueue 基于数组的有界阻塞队列,实行先进先出规则(FIFO);
LinkedBlockingQueue 基于链表的阻塞队列,实行先进先出规则(FIFO),newFixedThreadPool()方法创建的线程池使用此队列,吞吐量大于ArrayBlockingQueue ;
SynchronousQueue 不存储元素的阻塞队列,每次插入必须等到另一个线程调用移除操作,否则一直阻塞,newCachedThreadPool()方法创建的线程使用此队列,吞吐量大于LinkedBlockingQueue ;
PriorityQueue 具有优先级的无界阻塞队列;
6、RejectedExecutionHandler 拒绝策略,当线程池及队列都饱和时采取的拒绝策略;
AbortPolicy 默认的拒绝策略,直接抛出异常;
CallerRunsPolicy 只有调用者所在线程执行任务;
DiscardOldestPolicy 抛弃队列中最近的一个任务,执行当前任务;
DiscardPolicy 直接抛弃,不执行;
7、threadFactory 创建线程的工厂;

  • Q:怎么创建自定义注解?
    A:

@Documented//声明式注解
@Inherited//声明式注解
@Target({ElementType.METHOD,ElementType.TYPE})//定义注解的作用域
@Retention(RetentionPolicy.RUNTIME)//定义注解保留的时间
public @interface  AnnotationTest {public String value() default "";
}
  • Q:数据库的默认隔离级别?
    A:mysql的默认隔离级别为repeatable-read,oracle的默认隔离级别为read-commit;

  • Q:Mysql的索引?

A:索引类型:
FULLTEXT 只能在MySAM引擎上使用,只有char、vachar、text类型的列上;
HASH 效率高,但是只在"="和"in"条件下效率高;
BTREE 默认的索引类型,范围查询时效率高;
RTREE 不常用,范围查询是效率高;
索引分类:
普通索引 和一般列的区别在于是个索引,可以提升检索效率;
唯一索引 提升检索效率+保证该列数据的唯一性;
主索引 提升检索效率+保证该列数据的唯一性+保证此列数据不为null;
组合索引 多个列组成的索引,专门为了组合查询;

  • Q:MySql的搜索引擎?
    A:MySql提供了多重搜索引擎,常用的有4种:
    ①:InnoDB MySql默认的搜索引擎,优点在于支持事务以及外键,缺点在于搜索效率相较于MYSAM较低,占据空间较大;
    ②:DBD 支持事务,但是不支持外键,缺点在于效率较低且占用空间较大;
    ③:MYSAM 是基于ISAM的增强版,优点在于查询效率高且占用空间较小,缺点在于不支持事务以及外键,当大量使用INSERT和SELECT操作时可以选用此引擎;
    ④:MEMORY 存储基于内存,如果只是存储临时数据且数据量较小,对数据安全性要求不高时可以选用此引擎,mysql使用了此引擎存储临时表,记录查询的中间值;

  • Q: HashMap和ConcurrentHashMap的区别以及底层实现原理?
    A:hashMap的底层以数组+链表的形式实现;底层是一个可变长数组,元素以key-value的形式组成一个node ,添加数据时根据key的值算出在数组中的位置,如果该位置没有元素存在则直接添加,如果发生hash碰撞,则以链表的形式添加到已存在的链表尾部;jdk8之后引入了红黑树的概念,目的是为了避免hash碰撞攻击,当链表长度超过8时就转为红黑树结构,但是并不能完全解决问题。hashMap默认长度为16,默认加载因子为0.75,当数组长度大于当前长度*0.75时会调用resize()方法进行扩容,hashMap是线程不安全的,因此允许null值和null键的存在;
    concurrentHashMap中引入了分段锁的概念,默认将map分为了16段segment,每一段都是一个哈希表;当添加数据时会根据key的哈希值找到对应的segment,put操作会加锁,保证了线程的安全性,而get方法未加锁,因此线程安全其相较于hashTable效率更高;

  • Q:乐观锁和悲观锁的区别?
    A:乐观锁:总是乐观的认为别的线程不会对数据进行修改,因此只有在对数据进行修改的时候才会判断其他的线程是否对数据进行了修改,常用的方法有version方式和CAS(CompareAndSwap)方式,一般应用在读多写少的情况下;
    悲观锁:总是悲观的认为别的线程会对数据进行修改,因此每次操作都会对数据进行加锁,因此数据的安全性较高,一般应用的数据库中,如表锁,行锁等,java中的Synchronized锁也是此原理;

  • Q:volatile关键字的用法及特点?
    A:volatile是一种轻量级的同步实现,被该关键字修饰的变量具有两个特点:①、不同线程对该变量操作的内存可见性;②、禁止指令重拍性;

  • Q:什么是threadLacal?
    A:ThreadLocal常用于操作当前线程中的变量,以实现在任意位置对该变量的控制,并能保证此对象只在当前线程中可以访问,实现原理为:每一个线程都有一个ThreadLocal.ThreadLocalMap类型的静态变量threadLocals,ThreadLocal提供了四种方法,包含get和set,线程中的变量并不是保存在ThreadLocal中,而是以当前ThreadLocal对象为key,变量副本为value保存在threadLocals中。由于threadLocals是一个弱引用类型的map,且只对key弱引用,因此如果存在其中的变量副本在使用后并没有被remove掉,那么会被key会被gc掉,而导致内存溢出的问题;

  • Q:阻塞队列有哪些类型?
    A:阻塞队列在一般的队列的基础上添加了支持阻塞的添加方法和支持阻塞的阻塞方法,常用的阻塞队列有七种:
    ①:ArrayBlockingQueue 基于数组的有界阻塞队列,采用先进先出(FIFO)规则;
    ②:LinkedBlockingQueue 基于链表的有界阻塞队列,采用先进先出(FIFO)规则,吞吐量大于ArrayBlockingQueue队列,newFixedThreadPool线程池中用到了此队列;
    ③:SynchronousQueue 不存储元素的阻塞队列,每一次插入操作必须等待另一线程调用移除操作,吞吐量大于LinkedBlockingQueue, newCachedThreadPool线程池中用到了此队列;
    ④:PriorityBlockingQueue 具有优先级的无界阻塞队列;
    ⑤:DelayQueue 支持延迟获取元素的无界阻塞队列,可以指定延迟的时间;
    ⑥:LinkedTransferQueue 由链表组成的无界阻塞transfer队列;
    ⑦:LinkedBlockingDeque 链表结构的有界双向阻塞队列,优点是多线程入队是可以减少一半的竞争;

*java面试题**相关推荐

  1. java异常处理试题答案_Java 面试题和答案 - (下)

    第一篇讨论了面向对象编程和它的特点,关于Java和它的功能的常见问题,Java的集合类,垃圾收集器,本章主要讨论异常处理,Java小应用程序,Swing,JDBC,远程方法调用(RMI),Servle ...

  2. 115个Java面试题和答案——终极列表(下)

    转载自   115个Java面试题和答案--终极列表(下) 第一篇讨论了面向对象编程和它的特点,关于Java和它的功能的常见问题,Java的集合类,垃圾收集器,本章主要讨论异常处理,Java小应用程序 ...

  3. JAVA面试题(126~170)《下》

     这部分主要是开源Java EE框架方面的内容,包括Hibernate.MyBatis.Spring.Spring MVC等,由于Struts 2已经是明日黄花,在这里就不讨论Struts 2的面试题 ...

  4. 挑战10个最难的Java面试题(附答案)【下】

    查看挑战10个最难的Java面试题(附答案)[上] 在本文中,我们将从初学者和高级别进行提问, 这对新手和具有多年 Java 开发经验的高级开发人员同样有益. 关于Java序列化的10个面试问题 大多 ...

  5. 什么情况下java会出现堆溢出_【Java面试题第三期】JVM中哪些地方会出现内存溢出?出现的原因是什么?...

    内存溢出(Out Of Memory)经常简称为OOM,在jvm中主要分为方法区.堆.栈.本地方法栈.程序计数器这几部分,其中程序计数器是唯一不会出现OOM的,也就是说其他区域都会出现OOM.下面来分 ...

  6. Java面试题及答案2019版(下),mysql事务隔离级别原理

    答:TreeSet要求存放的对象所属的类必须实现Comparable接口,该接口提供了比较元素的compareTo()方法,当插入元素时会回调该方法比较元素的大小.TreeMap要求存放的键值对映射的 ...

  7. Java面试题全集(下)

    这部分主要是开源Java EE框架方面的内容,包括hibernate.MyBatis.spring.Spring MVC等,由于Struts 2已经是明日黄花,在这里就不讨论Struts 2的面试题, ...

  8. Java面试题(九)-----编写程序实现判断E: / 根目录下是否有后缀名为.jpg的文件,如果有则输出文件名称

    Java面试题(九)-----编写程序实现判断E: / 根目录下是否有后缀名为.jpg的文件,如果有则输出文件名称 文章目录

  9. 骆昊-Java面试题全集(下)学习笔记_2018_12_17

    这部分主要是开源Java EE框架方面的内容,包括Hibernate.MyBatis.Spring.Spring MVC等,由于Struts 2已经是明日黄花,在这里就不讨论Struts 2的面试题, ...

  10. [Java]Java面试题全集(下)

    版权声明:本文为转载文章,连接: https://blog.csdn.net/jackfrued/article/details/44931161   这部分主要是开源Java EE框架方面的内容,包 ...

最新文章

  1. C语言字符char和整型int的关系
  2. python 报错 UnicodeDecodeError: ‘utf-8‘ codec can‘t decode byte 0xd3 in position 解决方法
  3. python开发桌面软件-python适合开发桌面软件吗?
  4. 精解C++的switch语句
  5. delphi 回调函数例子 用函数过程作为参数
  6. Udemy - Build Apps with React Native
  7. Qt-在控件上绘图的方式
  8. 娱乐项目和女朋友哪个重要?
  9. Discuz 升级X3问题汇总整理
  10. mysql语句数据库_数据库的Mysql语句
  11. Jenkins环境拓扑及部署流程
  12. 在Android 6.0 Marshmallow(API 23)上弃用了getColor(int id)
  13. pythongetattribute_Python __getattribute__ vs __getattr__ 浅谈
  14. poj 1962 Corporative Network 并查集,很容易超时,大家要注意合并
  15. svn diff 只显示文件名
  16. 机房重构——UML图最终版本
  17. Improving Opencv 2:The Core Functionality :How to scan images, lookup tables
  18. chrome怎么安装java插件下载_java插件下载如何将JAVA插件支持Chrome
  19. IMSIDesign.TurboCAD.Designer.v14
  20. drcom for linux,Drcom for Ubuntu上网解决经验

热门文章

  1. 白盒测试哪种测试效果好_软件测试选择哪种测试方法比较好?
  2. 神经网络与傅立叶变换有关系吗?
  3. 【fragment】Android Fragments 详细使用
  4. 初级测试工程师要求(零基础必备)
  5. USB键盘背后的那些事儿
  6. 26.按之字形顺序打印二叉树
  7. HashMap底层详讲
  8. Linux 系统查询处理器架构
  9. 详细分析:摄像头像素为何不是越高越好
  10. android中获取context的多种方法的区别(this,getbascontext(),getApplicationcontext())