本文题目来自于 晴天的微笑 qq群321964905 提供的题目 我把题目解答一下,顺便回顾下自己的知识点,有些在面试题一中也有体现 可见重要性了
1)集合相关问题(必问)[在面试中很重要的部分]:
1.HashMap、LinkedHashMap、ConcurrentHashMap、ArrayList、LinkedList的底层实现
这道题个人感觉偏向数据结构方面,了解底层实现(我只懂大概)
对于LinkedHashMap而言,它继承于HashMap、底层使用哈希表与双向链表来保存所有元素。
HashMap基于hash算法实现的,通过put(key,value)存储到hashmap中,get来获取对象
ArrayList 底层实现时 有一个固定长度的数组,数组长度不够时会开辟一个新的数组,将原来的数组拷贝到新数组中
Linkedlist 是个链表结构 通过双向链表有序插入数据
2.HashMap和Hashtable的区别。
HashMap集合继承自map集合,有键值对key value 其中key值唯一可以为null,value可以有多个null值 hashmap线程不安全
Hashtable线程安全 key和value都不能为空 可以有一个为null,
3.ArrayList、LinkedList、Vector的区别。
Arraylist继承自list集合 list集合中插入数据是有序的 允许重复 可以插入多个空值,LinkedList 基于基于链表的数据结构,对于随机访问的数据,arraylist速度比linkedlist快,linkedlist需要移动指针
Vector线程安全
4.HashMap和ConcurrentHashMap的区别。
HashMap线程不安全 ConcurrentHashMap线程安全,其中有分段锁的功能,提高并发效率 详细内容可见(转载博客)
http://blog.csdn.net/zldeng19840111/article/details/6703104
5.HashMap和LinkedHashMap的区别。
LinkedHashMap输入和输出的顺序相同,可以按照遍历顺序进行存储
2)线程相关问题(必问):
1.创建线程的3种方式。
1.继承Thread类 重写run方法 调用线程.start()方法
2.实现Runnable接口
3.使用Callable和Future创建线程
2.什么的是线程安全
可以从线程不安全方面回答 线程不安全的情况就是多线程共享资源的时候出现竞争资源的情况,造成数据的错乱,此时就需要线程安全,实现线程之间同步进行
3.Runnable接口和Callable接口的区别。
Callable实现的是call方法,call方法可以返回任意对象 会抛出异常
Runnale接口调用的是run()方法,
Callable和Runnable都可以应用于executors(应用于线程池)。而Thread类只支持Runnable.
4.wait方法和sleep方法的区别。
wait方法是Thread中定义的方法 wait方法不需要设定时间 通过notify和nothfyall来唤醒 在线程同步中进行
sleep是Object方法 需要设定时间 时间到时处于运行或者线程阻塞状态 不一定要在线程同步才能使用
最重要的事 在进行同步时 sleep不会释放所 wait会释放锁
5.synchronized、Lock
synchronized是一个关键字,同步锁 不能判断当前锁状态 处理少量同步
Lock是一个类 可以判断当前所状态 在finally之后 必须释放锁,不然会造成死锁 可处理大量同步
具体内容可参考[博客转载]
http://blog.csdn.net/u012403290/article/details/64910926?locationNum=11&fps=1
6.介绍下CAS(无锁技术)
概念:在无锁的情况下处理多线程间得线程同步
7.什么是ThreadLocal
线程局部变量,保护线程安全的 每个线程管理自己的变量(资源),所以不需要等待其它线程释放资源。以空间换时间
8.分布式环境下,怎么保证线程安全。[暂定]
使用Redis技术 可以实现线程安全
JVM问题
1.有哪些类加载器
根加载器、扩展加载器、系统加载器、自定义加载器
2.能不能自己写一个类叫java.lang.String。
不能,凡是java.的类加载后都会出现异常
设计模式问题
先问你熟悉哪些设计模式,然后再具体问你某个设计模式具体实现和相关扩展问题。
1.单例模式
所谓单例模式,通过人为的设计 使一个类的对象只能产生一次 一次只能创建一个实例
2.工厂模式
工厂模式就是把需要创建的对象放在工厂中来实现 所有都不能用new
3.代理模式
代理模式的话就是 当前类具有完成某项功能的能力但是并不是它去完成,而是交付给具体类去完成。代理模式可分为静态代理和动态代理
数据库问题 Mysql为例
1.面试的时候一般的增删改查都要会 排序order by /order by desc逆序,分页limit a b 偏移量和大小 、多表连接、模糊查询like %、常用函数count()等基础面试前多了解了解
2.数据库优化问题[开发项目中还未涉及,要学习!!!]
添加索引的方法最常见,优化搜索语句
3.数据库关键字执行顺序
from、on、where、group by 聚合函数 having 等(根据实际)
框架问题
1.hibernate和Mybatis的区别。
Mybatis运行速度比hibernate快 数据量比较大的时候可以用Mybatis
2.Spring用了哪些设计模式
工厂模式 通过bean的id、name来建立Bean对象 利用BeanFactory来建立对象
单例模式 保证一个类中只有一个实例,并提供一个访问它的全局访问点。等等
3.Spring中AOP主要用来做什么
AOP就是面向切面编程 通过注解的方式实现通知,利用切面指向不同的目标业务逻辑中,进行操作管理
4.Spring注入bean的方式
基于xml的bean定义 基于注解的方式
5.什么是IOC,什么是依赖注入
ioc就是控制反转,负责容纳bean,并对bean进行管理,减少计算机中的耦合关系 依赖注入IO一般来说ioc=io,BeanFactory是控制容器的典型代表
6.Spring是单例还是多例
spring一般是单例的,通过scope属性可以更改为多例
7.Mybatis的mapper文件中#和$的区别
在数据库语句执行的时候 $容易出现sql注入的情况
8.Mybatis的mapper文件中resultType和resultMap的区别。
resultMap:适合使用返回值是自定义实体类的情况
resultType:适合使用返回值得数据类型是非自定义的,即jdk的提供的类型 两者不能同时用