文章目录
  1. 1. 最近后端java面试题整理
    1. 1.1. 基础类:
      1. 1.1.1. HashSet与HashMap的实质
    2. 1.2. 解决问题能力:
    3. 1.3. 系统安全&并发:
    4. 1.4. 并发工具的使用:
    5. 1.5. sprIng:
    6. 1.6. 持久化框架
    7. 1.7. 数据库
    8. 1.8. 系统架构设计图
    9. 1.9. springCloud 微服务与springMVC有什么区别
    10. 1.10. HTTP协议
    11. 1.11. sorlo

最近后端java面试题整理

最近想从前端管理岗位重新换到我最初起点的工作——java后端开发,已经有两三年没有用java语言进行开发了,发现很多基础都忘记了,其实我只是想重新换一个安静敲代码的工作,不过现在发现,并不是那么容易的。

![paste image][image-1]

以下是我最近面试我整理的面试题:

基础类:

  1. 集合类(collection)下面有哪些类
  2. Map/List
    • HashMap、HashSet的特性与区别
    • HashMap、HashTable区别
    • HashMap、MapTree的区别
    • HashMap、LinkedHashMap区别
    • HashMap、HashSet区别

hashMap实现了Map接口,是线程非安全的,它允许空(null)键值,效率上高于hashTalbe,hashMap的方法不是同步的,而hashTalbe的方法是同步的,线程是安全的。
HashTable.put方法:
public synchronized V put(K key, V value) {
…….
}

get方法:
public synchronized V get(Object key) {
…..
}
remove方法:
public synchronized V remove(Object key){
……
}
等等,所有的方法都是同步的,这样效率自然不高。

HashSet实现了Set接口,它不允许集合中有重复的值,当我们提到HashSet时,第一件事情就是在将对象存储在HashSet之前,要先确保对象重写equals()和hashCode()方法,这样才能比较对象的值是否相等,以确保set中没有储存相等的对象。如果我们没有重写这两个方法,将会使用这个方法的默认实现。
public boolean add(Object o)方法用来在Set中添加元素,当元素值重复时则会立即返回false,如果成功添加的话会返回true。

  • HashMap\HashSet的内部实现方式以及工作原理

[HashMap与HashTable的不同参考这里][1]

HashSet与HashMap的实质

(1)HashSet是set的一个实现类,hashMap是Map的一个实现类,同时hashMap是hashTable的替代品(为什么后面会讲到).
(2)HashSet以对象作为元素,而HashMap以(key-value)的一组对象作为元素,且HashSet拒绝接受重复的对象.HashMap可以看作三个视图:key的Set,value的Collection,Entry的Set。 这里HashSet就是其实就是HashMap的一个视图。
HashSet内部就是使用Hashmap实现的,和Hashmap不同的是它不需要Key和Value两个值。
往hashset中插入对象其实只不过是内部做了
public boolean add(Object o) {
return map.put(o, PRESENT)==null;
}

  • ArrayList与LinkList使用场景与优缺点,工作原理是什么
  • 相同点:
    1), ArrayList,LinkedList,Vector这三个类都实现了java.util.List接口
    2),都是线程不同步的,非线程安全的
  • ArrayList与linkList区别
    优缺点:
    1),ArrayList是实现了基于动态数组的数据结构,而LinkLIst是基于链表的数据结构,所以,ArrayList在未末尾进行添加删除操作时,速度比不上linkList,因为ArrayList需要移动数据位置,而LinkList不需要
    2)而对于get/set随机访问集合元素操作时,LinkList的访问速度不如ArrayList,因为LinkList需要移动指针。
  1. java基类里面你知道的有哪些方法,主要用来做什么?
    • clone方法
    • equals
    • finalize
    • getClass
    • haseCode
    • notify
    • notifyAll
    • toString
    • wait
    • waitAll

见字如面。。。。。

  1. Object类的toString方法是做什么的
  • 用来描述当前对象的相关信息
  • 返回对象的类名+hashCode值
  • 作用是把其它非字符串对象类型转换为字符串,为什么要这么做?因为在打印输入对象的时候,如果不转换为字符串,那运行时就会报错
  1. 对象的equals方法的实现原理是什么?什么是HashCode?如何重写equals方法
    equals实现原理:
  • 默认是比较对象的引用地址,而引用地址是由:对象所属类名+ @hashCode值组成。通过hashCode作为值对比。
  • HashCode简单来讲就是一组哈希码,
    重写equals:
  • 子类重写equals方法的实现。
  • 如果子类重写了equals的方法实现,则hashCode方法也必须重写,因为根据java的协议规定,如果两个对象equals返回为真,那他们各自对象的hashCode值就必须相等。
  • 还有个目的是,重写hashcode方法为了将数据存入HashSet/HashMap/Hashtable类时进行比较

注意:当此方法被重写时,通常有必要重写hashCode方法,以维护hashCode方法的常规协定,该协定声明相等的对象必须具有相等的哈希码。

  1. 线程的使用与原理
  2. json数据解析fastjson和JackSonJSON区别

[先参考下这篇详谈线程的文章][2]

  • 线程是一个操作系统级别的概念。

JAVA语言(包括其他编程语言)本身不创建线程;而是调用操作系统层提供的接口创建、控制、销毁线程实例。

java线程有四个状态:
开始、就绪、阻塞、消亡

[关于状态的描述参考文章][3]

java中保证对象、方法、代码块线程安全的方法是给它们加锁,怎么加呢?当然是加:synchronized 关键字

例:

/**  * 这个类的class对象进行检查。与synchronized(Dog.class)一样的效果
*/
public static synchronized void doSomething() {

}

/**  * 对这个类的实例化对象进行检查 与
*/
public synchronized void doOtherthing() {

}

java 还有个关键字,叫volatile
8. java对象new的时候做过哪些具体事情
9. 什么是base64,原理是什么

所谓Base64,就是说选出64个字符----小写字母a-z、大写字母A-Z、数字0-9、符号"+"、"/"(再加上作为垫字的"=",实际上是65个字符)----作为一个基本字符集。然后,其他所有符号都转换成这个字符集中的字符。

[   具体的解析参考这里][4]

  1. java类加载器有几种方式?原理是什么?

java加载类的方式有两种方式,静态加载和动态加载;

  • 静态加载方式
    在由运行时刻用 new 方法载入
       如:Dog dog = new Dog();
  • 动态类加载方式
    调用 Class.forName() 方法
      1, 通过反射加载类型,并创建对象实例
       如:Class clazz = Class.forName(“Dog”);
           Object dog =clazz.newInstance();
    2,调用某个 ClassLoader 实例的 loadClass() 方法
       通过该 ClassLoader 实例的 loadClass() 方法并传入类路径载入。应用程序可以通过继承 ClassLoader 实现自己的类装载器。
       如:Class clazz = classLoader.loadClass(“Dog”);
           Object dog =clazz.newInstance();

而java虚拟机的类加载器分类有启动类加载器、标准扩展类加载器、类路径类加载器、网络类加载器;

  • 启动类加载器(BootStrap ClassLoader,API)
    这个属于java虚拟机自己内置的类加载器。
    C++实现的,是Java类加载层次中最顶层的类加载器(JVM启动后初始化的),负责加载JDK中的核心类库,如:rt.jar、resources.jar、charsets.jar等

  • 标准扩展类加载器
    ExtensionClassLoader:称为扩展类加载器,负责加载Java的扩展类库 它的双亲是启动类加载器,注意不是继承,而是组合、委派的关系。

  • 类路径类加载器(应用类加载器)
    1,自定义类加载器,比如需要加载一个Dog类请求,必须先询问它的双亲,类路径类加载器来查找加载这个类,而类路径类加载器也会向自己的双亲发出这个请求。
    要想自定义classloader我们需要通过继承java.lang.ClassLoader类。该类中有几个重要方法,但如果想遵循双亲委托机制,则只需要重写findClass方法;如果要改变双亲委派,则重写loadClass方法。
    2,系统类加载器,负责加载应用程序classpath目录下的所有jar和class文件。

它的双亲是扩展类加载器,它是由用户自定义路径的类加载器。

  • 网络类加载器

下载类,并反射加载类

注:
非启动类加载器必须显示的求助于其它类加载器,通过调用loadClass或者findSystemClass方法实现。

  1. HTTP1.1和HTTP1.0有什么大的区别
  • 多连接性能作了很大提升
  • 支持长连接(客户端发送值为Keep-Alive时),一个连接上可以支持多个请求与响应
  • 服务端与客户端如何实现长连接
  • 短连接的情况下,如何实现服务器宕机情况下正常通信
  1. 为什么要面向接口编程是不是多此一举?

解决问题能力:

  1. 做过的项目中,在哪个项目感觉比较有收获
  2. 有解决过什么棘手问题没有,如何解决的
  3. 如何保证多个线程调用同个数据同步问题
  4. 如何自动收取邮件

系统安全&并发:

  1. 你是如何防止系统被恶意访问攻击的
  2. 除了使用验证码、手机短信等业务方法去避免恶意访问,技术上如何去做
  3. 如何保证系统操作的原子性(A系统调B和C系统的接口,A系统的此次操作是依赖B、C接口调用的成功,如果中间有失败,怎么保证A操作的回滚)——分布式事务实现
  4. 如何设计大并发数据量系统,你用过的有哪些解决并发压力的方法
  5. 系统中有数据会频繁更改,如何保证数据的正确性
  6. 你的系统是如何去做分布式的
  7. 数据库具体是如何去做读写分离的(mysql)
  8. ConurrentHashMap和HashTable的区别,为什么需要ConurrentHashMap?

并发工具的使用:

  1. MQ的原理及使用场景
  2. 如何解决批量消息发送失败的问题
  3. 如何延迟发送短信
  4. 分布式锁
  5. 负载均衡时,如果一台服务器挂掉,连接是如何指向另一台服务器的,怎么判断服务器是好还是坏

sprIng:

  1. Ioc原理及用途
  2. AOP原理及用途
  3. spring中是否有用到设计模式,你知道的有哪些?具体是如何实现的
  4. 事务管理原理及用途
  5. spring如何处理多线程
  6. spring注解原理

持久化框架

  1. hibernate与ibatis的区别与优缺点比较
  2. hibernate的ORM技术与ibatis的map比较
  3. 对象关联关系比较
  4. 事务管理使用场景及原理

数据库

  • mysql有几种建立索引的方式,有什么区别
  • mysql在多少数据量时,会有性能瓶颈

系统架构设计图

nginx服务器 + webSever集群 + redis+dbServer 集群 +数据库

springCloud 微服务与springMVC有什么区别

HTTP协议

sorlo

  1. 使用哪种中文分词?

[1]: http://blog.csdn.net/wulunbi/article/details/51105028 “HashTable与HashMap”
[2]: http://blog.csdn.net/yinwenjie/article/details/50371005
[3]: http://blog.csdn.net/yinwenjie/article/details/50403620
[4]: http://www.ruanyifeng.com/blog/2008/06/base64.html

[image-1]: http://clockcoder.com/images/14901501493763z9yf85f.png?imageslim

文章目录
  1. 1. 最近后端java面试题整理
    1. 1.1. 基础类:
      1. 1.1.1. HashSet与HashMap的实质
    2. 1.2. 解决问题能力:
    3. 1.3. 系统安全&并发:
    4. 1.4. 并发工具的使用:
    5. 1.5. sprIng:
    6. 1.6. 持久化框架
    7. 1.7. 数据库
    8. 1.8. 系统架构设计图
    9. 1.9. springCloud 微服务与springMVC有什么区别
    10. 1.10. HTTP协议
    11. 1.11. sorlo