您的位置:首页 > 职场人生

java面试题目总结

2017-11-26 18:38 309 查看

本文题目来自于 晴天的微笑 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的提供的类型 两者不能同时用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  面试题 java