面试宝典

Core Java

  1. 整数数组按绝对值排序

    1
    Arrays.sort(T[] a, Comparator<? super T> c)
  2. ConcurrentHashMap 的数据结构

    1
    Segment 分段锁,减少锁粒度
  3. 非阻塞IO和异步IO的区别

    1
    2


  4. 内存管理机制,如何回收过期对象,判断依据,内存溢出场景,如何排查等(P7需要很清楚的知道jvm的内存结构,回收过程,及虚拟机相关的回收算法及设计初衷)

    1
    2


  5. equals和==的区别

    1
    2
        基本类型都是用 == 做计较的,引用类型,== 判断的是地址是否一致.
    equals可以被重写,equals更偏向的是内存地址所持有的值是不是相同。
  6. final和finally

    1
    2
    3
    4
    5
    final修饰的是一个基本类型,就表示这个变量被赋予的值是不可变的,它是个常量。
    final修饰的是一个对象,就表示这个变量被赋予的引用是不可变的,这里这个不可改变的只是这个变量所保存的引用,并不是这个引用所指向的对象。
    在final修饰方法时,方法是不可以被该类的子类所继承的。
    在final修饰类时,被修饰的类是不可以被继承的。
    finally—再异常处理时提供,finally块来执行任何清除操作,是异常处理语句结构的一部分,表示总是执行。
  7. 常用的集合类有哪些?区别是什么?hashmap和hashtable的区别。哪些是线程安全的哪些不是?

    1
    2
    ArrayList、LinkedList、HashSet、TreeSet、ConcurrentHashMap、Collections、
    Lists、Arrays
  8. Object中的常见的方法

    1
    clone、hashcode、notify、wait、toString
  9. java中的异常体系,异常出现的情况如:ClassNotFound、空指针等

    1
    2
    3
    4
    Throwable,是所有异常或错误的超类,它有两个子类:Error和Exception,分别表示错误和异常。
    Error,一般是指java虚拟机相关的问题,如系统崩溃、虚拟机出错误、动态链接失败等,这种错误无法恢复或不可能捕获,将导致应用程序中断,通常应用程序无法处理这些错误,因此应用程序不应该捕获Error对象,也无须在其throws子句中声明该方法抛出任何Error或其子类。
    RuntimeException,及其子类,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。
    非运行时异常是RuntimeException以外的异常,类型上都属于Exception类及其子类。如 IOException、SQLException等以及用户自定义的Exception异常。必须捕获处理,或者直接跑出去,否则编译就会报错。
  10. JVM的内存模型是怎么样的?应用突然变得很慢,如何定位?

    1
    [https://www.jianshu.com/p/c9ac99b87d56](https://www.jianshu.com/p/c9ac99b87d56)
  11. Java的异常类层次结构

    1
    2


  12. 对JDK8的新特性有什么了解

    1
    流式编程、函数式编程
  13. Java的类加载器的机制((P7除了知道机制外,需要能够说明,利用classloader特性的一些场景应用 )

    1
    2


  14. 原子类的实现

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    1. 悲观的解决方案(阻塞同步)
    synchronized(this){
    num++;
    }

    2. 乐观的解决方案(非阻塞同步),compareAndSet
    /**
    * Atomically increments by one the current value.
    *
    * @return the updated value
    */
    public final int incrementAndGet() {
    for (;;) {
    int current = get();
    int next = current + 1;
    if (compareAndSet(current, next))
    return next;
    }
    }
  15. Error、Exception和RuntimeException的区别,作用又是什么

    1
    2


  16. IO和NIO本质不同在实际项目使用场景及如何使用

    1
    2


  17. sleep() 和 wait() 有什么区别

    1
    2
    3
    sleep没有释放锁,wait释放了锁,使得其他线程可以进入同步块。
    sleep可以在任何地方使用,而wait只能在同步块,同步控制方法内使用。
    sleep是Thread类上的静态方法,wait是Object类。

数据库&事务

  1. 什么样的场景会产生数据库死锁,如何解决

    1
    2


  2. SQL如何优化

    1
    2


  3. oracle或者mysql分页的实现思路

    1
    2


  4. SQL怎么判断字段是否为空

    1
    2


  5. 唯一索引能否插入空

    1
    2


  6. 数据库索引的算法原理

    1
    2


  7. 乐观锁,悲观锁

    1
    2


WEB (P6 必问)

  1. post/get的区别是什么

    1
    2
    3
    4
    POST比GET更安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
    GET参数通过URL传递,POST放在Request body中。
    GET请求只能进行url编码,而POST支持多种编码方式。
    因URL的长度限制,GET方式传输的数据大小有所限制,传送的数据量不超过2KB。
  2. cookie/session有什么区别

    1
    2
    3
    4
    5
    6
    cookie是一种在客户端记录用户信息的技术,因为http协议是无状态的,为了解决这个问题而产生了cookie。记录用户名等一些应用
    session是一种在服务端记录用户信息的技术,一般session用来在服务器端共享数据
    cookie是由服务器端创建发送回浏览器端的,并且每次请求服务器都会将cookie带过去,以便服务器知道该用户是哪一个。
    session的工作原理就是依靠cookie来做支撑,第一次使用request.getSession()时session被创建,
    并且会为该session创建一个独一无二的sessionid存放到cookie中,然后发送会浏览器端,浏览器端每次请求时,
    都会带着这个sessionid,服务器就会认识该sessionid,知道了sessionid就找得到哪个session。
  3. web集群中登录态如何共享

    1
    2
    nginx 一致性hash ip 策略 可以规避session共享问题。
    redis、memcache存储session,达到共享目的。
  4. xss、csrf等如何防范

    1
    2


  5. sql注入如何防范

    1
    2


  6. 浏览器缓存策略

    1
    2


  7. Ajax如何解决跨域问题

    1
    2


常用框架(P6 必问)

  1. spring AOP/IOC的理解,大致原理,类内部调用是否会触发aop的逻辑?为什么?

    1
    2


  2. Spring的事物传播属性 或 数据库的事物隔离级别,实现原理

    1
    2


  3. velocity如何避免引用空属性的报错

    1
    2


  4. spring的单例或者原型如何配置?还用过其他什么scope?

    1
    2


  5. log4j或者logback的日志记录文件在哪里?(开放式问题,怎么确定日志打到哪里了)

    1
    2


工具

  1. maven中如何排除包冲突

    1
    2


  2. svn合并代码怎么做

    1
    2


分布式

  1. 如何实现分布式锁

    1
    2


  2. 分布式Session如何实现

    1
    2


  3. 如何消除分布式事物

    1
    2


  4. MetaQ,Zookeeper 的原理和适用场景,(P7需要对业界的同类产品有一定的了解,知道各自的优缺点 )

    1
    2


  5. Redis 3.0的分布式集群架构,(P7需要对业界的同类产品有一定的了解,知道各自的优缺点 )

    1
    2


高并发

  1. 原子计数器AtomicInteger的技术实现

    1
    2


  2. volatile的内存模型

    1
    2


  3. 接口服务如何防止重复调用?

    1
    2
    可以幂等消费规避。
    redis存最近的序列化串,检验是否存在,存在则证明重复调用。
  4. 自己使用过多线程的场景是什么?线程安全如何保证?java的并发框架是否用过,线程池是否用过,RejectedExecutionHandler是否知道?

    1
    2


设计

  1. 对常用设计模式的了解,在项目中的实际应用

    1
    2


  2. 排序算法描述

    1
    2


  3. 在项目中是否采用分层的结构,是怎样划分的,各层之间采用了哪些相关技术

    1
    2


场景问题

  1. 对所做的系统的业务描述。能够描述清楚业务的核心逻辑和模型抽象,技术问题解决有正确思路(P6要求)。对其中的技术选型,技术方案有周全考虑,并且独立完成一个较复杂系统的设计和实现。(p7要求)
  2. 自己平时会学习些什么技术,学习程度如何
  3. 做项目过程中遇到什么技术难点;(p6和P7通过问题的技术难度、技术范围来区分)
  4. 怎么看待加班
  5. 线上问题分析处理是否有经验如何解决的

P7除了要抽查上面的技术问题外,建议选择询问以下问题:

  1. 描述一个独立设计的较复杂系统的设计思路和实现,能够清晰表达系统中的关键概念模型,行业内的对标产品及相关技术的熟悉程度;
  2. 对其中的技术方案有周全考虑,技术方案完整无明显漏洞;
  3. 实际项目设计中的延展性,对业务未来发展有一定考虑;
  4. 实际项目设计中如何保持优雅,方便运维和发展;
  5. 独立设计系统中的技术选型的比较, 熟悉的技术领域最佳实践 ;
  6. 开发设计中,采取了什么样的技术手段,提高开发的效率;
  7. 如果要设计一个搜索引擎,像google那样只有两个页面,要求性能最大化,web方面应该如何设计?(不需要考虑搜索的逻辑)
  8. 项目中用到点的技术细节挖掘;主要考察他对技术细节深度理解。如对MetaQ原理的理解,同类产品的比较。

算法和数据结构的描述;展示他对各数据结构的理解,不同场景下如何设计合理的数据

  1. 结构和算法,如何权衡时间与空间的取舍;
  2. trouble shooting 的最佳实践 。 这里根据不同的trouble情况会涉及到jvm内存,数据库 ,操作系统等相关的知识点 。
  3. 目前团队的瓶颈和困难分析 。
  4. 碰到过的最棘手技术问题或最复杂的业务场景的设计

总结

技术一面和二面的侧重点:
一面重点(从前到后)
技术能力,实际动手能力;
技术思路;
沟通表达能力;
学习能力;

支持原创技术分享,您的支持将鼓励我继续创作!