2017面试官提的面试题

1.MyBatis跟ibatis的集合遍历区别

答:MyBatis使用foreach标签,ibatis使用iterator标签

2.threadpool的理解

答:用于创建并管理线程池

3.TCP跟HTTP的差异

答:TCP就是单纯建立连接,不涉及任何我们需要请求的实际数据,简单的传输。http是用来收发数据,http是要基于TCP连接

4.Spring的servlet是否线程安全spring mvc是否线程安全

答:Servlet线程不安全,servlet是单例多线程,单例多线程:一个线程中只有一个实例对象,但是如果在多线程的环境中,就会出现多个实例的情况,这样就不是单例模式了,此时就容易发生线程不安全问题。线程不安全问题详解:多个线程之间是不能直接传递数据交互的,它们之间的交互只能通过共享变量来实现spring mvc是线程不安全原因就在于如果这个controller对象是单例的,那么如果不小心在类中定义了类变量,那么这个类变量是被所有请求共享的,这可能会造成多个请求修改该变量的值,出现与预期结果不符合的异常。解决方案设置对controller设置为prototype,或者使用ThreadLocal 来保存类变量,将类变量保存在线程的变量域中,让不同的请求隔离开来

5.spring mvc 配置的bean是对应的是什么

答:controller

6.spring拦截器的设计模式

答:适配器模式

7.spring singleton跟prototype的区别

答:singleton 只有一个实例,也即是单例模式。   prototype访问一次创建一个实例,相当于new。

8.spring aop的理解

答:aop是面向切面编程,是opp的补充,它能在不改变原来业务逻辑模型的基础上动态地修改模型从而满足新需求,增加日志、安全或异常处理的功能

9.spring IOC的理解

答:ioc叫做控制反转,是一种降低对象之间耦合关系的设计思想,它把实例化对象的操作移交给spring(容器)来执行,通过容器只需要修改配置文件即可实现对象的热插拔

10.Mybatis跟IBatis的区别

答:最主要的区别就是mybatis简化了编码的过程,不需要去写dao的实现类,直接写一个dao接口

11.IO/NIO的区别

答:io阻塞,基于字节流和字符流进行操作

NIO不阻塞,基于通道(Channel)和缓冲区(Buffer)进行操作

12.MyBatis的传值

答:有四种方式:

1.dao层的函数方法:对应mapper.xml里面第一个参数#{0}

2.采用Map传多参数:mapper.xml的参数为map的key

3.dao层用param注解

4.用javaBean传参

13.Quartz每一分钟怎么设置

quartz格式: [秒] [分] [小时] [日] [月] [周] [年]

设置每一分钟 0 */1 * * * ?

14.volatile的理解

答:volatile:”易失变量“? ”编译时不做优化“、”直接存取原始内存地址“

一般说来,volatile用在如下的几个地方:
1、中断服务程序中修改的供其它程序检测的变量需要加volatile;
2、多任务环境下各任务间共享的标志应该加volatile;
3、存储器映射的硬件寄存器(如状态寄存器)通常也要加volatile说明,因为每次对它的读写都可能有不同意义

15.Integer跟int的区别
答:Integer是int的包装类

Integer在-128-127比较数字时可以用==,不在这范围需要用equals

16.wait跟sleep的区别

答:wait会把占用的锁释放,必须放在同步方法或者同步语句块中使用

sleep会继续占用锁,可以放在任何地方使用,必须要捕获异常

17.dubbo跟dubbox有什么区别

答:dubbo是阿里巴巴开源,不支持rest风格远程调用

dubbox是当当网开源,支持rest风格远程调用

18.Java的修饰符

答:public,protected,private,default

19.jsp的九大内置对象

答:session,page,pageContext,request,response,application,out,config,exception

20.mybatis如何跟spring关联

答:1.mybatis.xml使用MapperScannerConfigurer,包下的类需要@MapperScan注解

2.使用namespace+方法名

21.Mybatis中$跟#的区别

答:1.#将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。

2.$将传入的数据直接显示生成在sql中
3.#方式能够很大程度防止sql注入。
4.$方式无法防止Sql注入。
5.$方式一般用于传入数据库对象,例如传入表名.
6.一般能用#的就别用$.

22.Java的类加载机制

答:虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验,转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型

23.jvm的垃圾回收机制

答:GC通过确定对象是否被活动对象引用来确定是否收集该对象

1.触发GC(Garbage Collector)的条件
1)GC在优先级最低的线程中运行,一般在应用程序空闲即没有应用线程在运行时被调用。但下面的条件例外。
2)Java堆内存不足时,GC会被调用。当应用线程在运行,并在运行过程中创建新对象,若这时内存空间不足,JVM就会强制调用GC线程。若GC一次之后仍不能满足内存分配,JVM会再进行两次GC,若仍无法满足要求,则JVM将报“out of memory”的错误,Java应用将停止


24.jvm的启动各个参数进行解释

25.concurrentHashMap

答:concurrentHashMap采用的是分段锁

ConcurrentHashMap中则是一次锁住一个桶。ConcurrentHashMap默认将hash表分为16个桶,诸如get,put,remove等常用操作只锁当前需要用到的桶。 这样,原来只能一个线程进入,现在却能同时有16个写线程执行,并发性能的提升是显而易见的

26.让HashMap安全要如何实现

答:使用Collections.synchronizedMap

27.synchronized跟lock的区别

答:1.存在层次上:synchronized是Java的关键字,在jvm层面上。Lock是一个接口

2.锁的释放:synchronized 1)以获取锁的线程执行完同步代码,释放锁。 2)线程执行发生异常,jvm会让线程释放锁

Lock在finally中必须释放锁,不然容易造成线程死锁

3.锁的获取:synchronized 1)假设A线程获得锁并阻塞,B线程会一直等待。

Lock B线程可以不用等待,可以尝试获得锁

4.锁的状态:synchronized 无法判断

Lock 可以判断

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值