面试

Java初/高级面试回答要点

宗旨:每题答案都有得分点,答案涵盖即可。不需要太多细节。

架构方向

初级:

  1. 熟悉SSM架构: 用一个业务说明Spring MVC如何发挥作用。

  2. 熟悉Spring MVC细节,比如@Autowired用法,如何将URL映射到Controller, ModelAndView对象返回到方式等

  3. 结合项目说如何使用AOP。

数据库

  1. 如何建索引,怎么用?比如建好索引后,where语句中写name like ‘123%’会不会用到索引,什么情况下不改建索引,哪些语句不用索引?

  2. 除了索引,还可以怎样优化SQL,比如分库分表,或通过执行计划查看SQL的优化点。结合项目讲。

  3. 会优化很有利于通过面试。(高级开发更要了解优化)

Java Core方面

主要有集合,多线程,异常处理,JVM虚拟机等。

集合

  1. hashcode有没有重写过?什么场景下重写?结合hash table,实现hashmap。
    高级开发最好能通过ConcurrentHashMap说明并发方面的底层代码实现。

  2. ArrayList, LinkedList的差别?ArrayList如何扩容?
    高级开发最好研究底层代码。

  3. Set如何实现防冲的,比如TreeSet和HashSet?

  4. Collection方法,比如方法比较,包装成线程安全的方法?

  5. 如何通过ArrayList实现队列或堆栈?

多线程,项目里用的少,但问题如下:

  1. synchronized和可重入锁的区别,问一下信息量防止并发机制

  2. 线程如何返回值?其实就是callable, runnable区别

  3. ThreadLocal, volatile关键字来说明线程的内存模型

  4. 线程池的使用与常用参数
    线程问的多的说并发机制。

virtual machine

1.结构图,工作流程

  1. 针对队的垃圾回收机制, 画个图,描述一下新生代,老生代等

  2. 回收机制流程,如何在代码中优化内存性能

  3. 如果出现OOM异常,如何排查,如何看Dump文件?

  4. GC概念,强弱软引用, finalize方法等

算法,设计模式

正确回答问题

架构

  1. 证明自己能干活。同时结合底层代码说出Spring MVC, AOP,ICO架构流程。或者拦截器,controller等高级用法

  2. 证明自己有Spring Boot, Spring Cloud经验。说出Spring cloud组件用法

  3. 证明自己有分布式开发经验。说出分布式服务等运行机制,如何部署,如何通过nginx等做到负载均衡

数据库

如何SQL调优,比如索引,执行计划,或其他优化点。

java core

结合concurrentHashMap源码,说出final,volatile,transient用法,以及如何用lock防止写并发。

  1. 结合项目说设计模式

  2. 多线程,说出lock或volatile等高级知识点

  3. GC流程,如何通过日志和dump文件排查OOM异常;在高级一些,如何在代码中优化内存代码

诀窍:结合源代码,实际项目说出资深问题

Redis面试

  1. Advantages of Redis
    (1) blazing fast. Because data stores in memory.
    (2) rich data types, like String, List, Set, Sorted set, Hash
    (3) support transactions, atomic operation.
    (4) it is used to Cache, Message transportation, and set expired time

  2. Advantages of Redis compared to Memcached
    (1) MemCached: only support simple string
    (2) Redis has faster speed than MemCached
    (3) Redis can persist data

  3. Common performance problems and solutions
    (1) It is better not to persistency for Master node, like RDB snapshot, AOF log file
    (2) Turn on AOF replication in a Slave node if data is important; Synchronize once per second.
    (3) For stability of speed and connectivity, master-slave node in one local area net.
    (4) Singly linkedlist data structure is better than graph structure in Master-Slave replication, like Master <- Slave1 <- Slave2 <- Slave3…

reference

Java初高级面试
Redis面试