java面试题1

包名可以大写吗?
参考阿里巴巴手册,要用小写
ArrayList和LinkedList区别?
ArrayList底层是数组实现的,支持扩容,由于是下标访问元素,因此查找元素时,相对于LinkedList更快;删除和增加功能,需要移动元素时,较后者慢
LinkedList底层是一个双向链表,当数据达到一定量时,适合修改,删除操作,不适合查找。
线程的生命周期
新建状态,如new Thread()
就绪状态,调用了start(),该线程等待被cpu调度
运行状态,获得cpu调度后,run()
阻塞状态,由于某种原因,使正在运行的线程变成了阻塞态,如调用了sleep()、wait()方法,这时候需要其他线程机制唤醒线程,如notify()、notifyAll(),唤醒的线程不会立即被执行,它需要等待cpu重新分配资源进入运行态
死亡状态,线程被强行终止,或者正常结束或者异常原因终止,线程被销毁,然后释放资源。
线程的实现方式有哪些?
一共有4种
继承Thread类,重写run方法
实现Runnable接口,重写run方法,将Runnable对象作为Thread的参数
利用Callable中的call()方法和Futuretask。
利用线程池
sycronized锁有哪些?
Synchronized锁的3种使用形式(使用场景):
Synchronized修饰普通同步方法:锁对象当前实例对象;
Synchronized修饰静态同步方法:锁对象是当前的类Class对象;
Synchronized修饰同步代码块:锁对象是Synchronized后面括号里配置的对象,这个对象可以是某个对象,也可以是某个类;
使用synchronized修饰非静态方法或者使用synchronized修饰代码块时制定的为实例对象时,同一个类的不同对象拥有自己的锁,因此不会相互阻塞。
使用synchronized修饰类和对象时,由于类对象和实例对象分别拥有自己的监视器锁,因此不会相互阻塞。
使用使用synchronized修饰实例对象时,如果一个线程正在访问实例对象的一个synchronized方法时,其它线程不仅不能访问该synchronized方法,该对象的其它synchronized方法也不能访问,因为一个对象只有一个监视器锁对象,但是其它线程可以访问该对象的非synchronized方法。
序列化是什么?
序列化就是将对象转化为字节流的过程,而反序列化负责的是将字节流转化为对象的过程。序列化通常需要类实现Serializeable 接口,通过ObjectOutputStream的writeObject方法写入文件。通常String、数组以及enum默认可以序列化。
mysql的存储引擎有哪些?
innodb、MyISAM、MEMORY等(这3个是最主要的)
innodb与MyISAM的区别是什么?
innodb支持事务和集群索引(这个目前还没了解)、外键,MyISAM不支持,它适用于访问速度快,对事务完整性没有要求的应用,基本都可以使用这个引擎来创建表。
每个MyISAM在磁盘上存储成3个文件,其中文件名和表名都相同,但是扩展名分别为:
.frm(存储表定义)
MYD(MYData,存储数据)
MYI(MYIndex,存储索引)
下面是参考其他补充的答案:
事务:MyISAM不支持事务,InnoDB支持事务;
全文索引:MyISAM 支持全文索引,InnoDB 5.6 之前不支持全文索引;
关于 count():MyISAM会直接存储总行数,InnoDB 则不会,需要按行扫描。意思就是对于 select count() from table; 如果数据量大,MyISAM 会瞬间返回,而 InnoDB 则会一行行扫描;
外键:MyISAM 不支持外键,InnoDB 支持外键;
锁:MyISAM 只支持表锁,InnoDB 可以支持行锁。
mysql底层数据结构是什么?
B+树、B树。
二者区别B+树与B树
mysql中的索引有哪些?
索引与存储引擎有关,不同的存储引擎支持不同的索引
1、从数据结构方面:树索引(O(log(n)))、hash索引
Memory存储引擎显示支持hash索引,hash索引仅满足"=",“IN"和”<=>"查询,不能使用范围查询。其检索效率非常高,索引的检索可以一次定位,不像B-Tree 索引需要从根节点到枝节点,最后才能访问到页节点这样多次的IO访问,所以 Hash 索引的查询效率要远高于 B-Tree 索引
2、物理层面:聚集索引、非聚集索引
3、逻辑层面:普通索引、 唯一索引、 主键索引、 联合索引 、全文索引
springmvc的底层原理?
底层是由servlet实现的。

(1)客户端(浏览器)发送请求,直接请求到DispatcherServlet。
(2)DispatcherServlet根据请求信息调用HandlerMapping,解析请求对应的Handler。
(3)解析到对应的Handler后,开始由HandlerAdapter适配器处理。
(4)HandlerAdapter会根据Handler来调用真正的处理器开处理请求,并处理相应的业务逻辑。
(5)处理器处理完业务后,会返回一个ModelAndView对象,Model是返回的数据对象,View是个逻辑上的View。
(6)ViewResolver会根据逻辑View查找实际的View。
(7)DispaterServlet把返回的Model传给View。
(8)通过View返回给请求者(浏览器)

mybatis动态SQL有哪些?
trim、where、set、foreach、if、choose、when、otherwise、bind;
spring注入值的方式有哪些?
1、 setter方式注入
在bean标签内部使用property标签进行配置。 property标签的属性:

name:用于指定注入时所调用的set方法名称
value:用于提供基本类型和String类型的数据
ref:用于指定其他的bean类型数据
 <bean id="accountService" class="com.sks.service.imp.AccountServiceImpl">
    	<!--注入基本类型、包装类型、日期类型数据-->
       <property name="age" value="22"/>
        <property name="name" value="李四"/>
        <property name="birthday" ref="birthday"/>
 </bean>

2、构造函数注入值
在bean标签的内部使用constructor-arg标签就可以进行构造函数注入了

 <bean id="accountService" class="com.sks.service.imp.AccountServiceImpl">
        <constructor-arg type="java.lang.String" value="张三"/>
        <constructor-arg index="1" value="20"/>
        <constructor-arg name="birthday" ref="birthday"/>
 </bean>

3、 注解注入

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值