Core Java
整数数组按绝对值排序
1
Arrays.sort(T[] a, Comparator<? super T> c)
ConcurrentHashMap 的数据结构
1
Segment 分段锁,减少锁粒度
非阻塞IO和异步IO的区别
1
2内存管理机制,如何回收过期对象,判断依据,内存溢出场景,如何排查等(P7需要很清楚的知道jvm的内存结构,回收过程,及虚拟机相关的回收算法及设计初衷)
1
2equals和==的区别
1
2基本类型都是用 == 做计较的,引用类型,== 判断的是地址是否一致.
equals可以被重写,equals更偏向的是内存地址所持有的值是不是相同。final和finally
1
2
3
4
5final修饰的是一个基本类型,就表示这个变量被赋予的值是不可变的,它是个常量。
final修饰的是一个对象,就表示这个变量被赋予的引用是不可变的,这里这个不可改变的只是这个变量所保存的引用,并不是这个引用所指向的对象。
在final修饰方法时,方法是不可以被该类的子类所继承的。
在final修饰类时,被修饰的类是不可以被继承的。
finally—再异常处理时提供,finally块来执行任何清除操作,是异常处理语句结构的一部分,表示总是执行。常用的集合类有哪些?区别是什么?hashmap和hashtable的区别。哪些是线程安全的哪些不是?
1
2ArrayList、LinkedList、HashSet、TreeSet、ConcurrentHashMap、Collections、
Lists、ArraysObject中的常见的方法
1
clone、hashcode、notify、wait、toString
java中的异常体系,异常出现的情况如:ClassNotFound、空指针等
1
2
3
4Throwable,是所有异常或错误的超类,它有两个子类:Error和Exception,分别表示错误和异常。
Error,一般是指java虚拟机相关的问题,如系统崩溃、虚拟机出错误、动态链接失败等,这种错误无法恢复或不可能捕获,将导致应用程序中断,通常应用程序无法处理这些错误,因此应用程序不应该捕获Error对象,也无须在其throws子句中声明该方法抛出任何Error或其子类。
RuntimeException,及其子类,这些异常是不检查异常,程序中可以选择捕获处理,也可以不处理。
非运行时异常是RuntimeException以外的异常,类型上都属于Exception类及其子类。如 IOException、SQLException等以及用户自定义的Exception异常。必须捕获处理,或者直接跑出去,否则编译就会报错。JVM的内存模型是怎么样的?应用突然变得很慢,如何定位?
1
[https://www.jianshu.com/p/c9ac99b87d56](https://www.jianshu.com/p/c9ac99b87d56)
Java的异常类层次结构
1
2对JDK8的新特性有什么了解
1
流式编程、函数式编程
Java的类加载器的机制((P7除了知道机制外,需要能够说明,利用classloader特性的一些场景应用 )
1
2原子类的实现
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
191. 悲观的解决方案(阻塞同步)
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;
}
}Error、Exception和RuntimeException的区别,作用又是什么
1
2IO和NIO本质不同在实际项目使用场景及如何使用
1
2sleep() 和 wait() 有什么区别
1
2
3sleep没有释放锁,wait释放了锁,使得其他线程可以进入同步块。
sleep可以在任何地方使用,而wait只能在同步块,同步控制方法内使用。
sleep是Thread类上的静态方法,wait是Object类。
数据库&事务
什么样的场景会产生数据库死锁,如何解决
1
2SQL如何优化
1
2oracle或者mysql分页的实现思路
1
2SQL怎么判断字段是否为空
1
2唯一索引能否插入空
1
2数据库索引的算法原理
1
2乐观锁,悲观锁
1
2
WEB (P6 必问)
post/get的区别是什么
1
2
3
4POST比GET更安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
GET参数通过URL传递,POST放在Request body中。
GET请求只能进行url编码,而POST支持多种编码方式。
因URL的长度限制,GET方式传输的数据大小有所限制,传送的数据量不超过2KB。cookie/session有什么区别
1
2
3
4
5
6cookie是一种在客户端记录用户信息的技术,因为http协议是无状态的,为了解决这个问题而产生了cookie。记录用户名等一些应用
session是一种在服务端记录用户信息的技术,一般session用来在服务器端共享数据
cookie是由服务器端创建发送回浏览器端的,并且每次请求服务器都会将cookie带过去,以便服务器知道该用户是哪一个。
session的工作原理就是依靠cookie来做支撑,第一次使用request.getSession()时session被创建,
并且会为该session创建一个独一无二的sessionid存放到cookie中,然后发送会浏览器端,浏览器端每次请求时,
都会带着这个sessionid,服务器就会认识该sessionid,知道了sessionid就找得到哪个session。web集群中登录态如何共享
1
2nginx 一致性hash ip 策略 可以规避session共享问题。
redis、memcache存储session,达到共享目的。xss、csrf等如何防范
1
2sql注入如何防范
1
2浏览器缓存策略
1
2Ajax如何解决跨域问题
1
2
常用框架(P6 必问)
spring AOP/IOC的理解,大致原理,类内部调用是否会触发aop的逻辑?为什么?
1
2Spring的事物传播属性 或 数据库的事物隔离级别,实现原理
1
2velocity如何避免引用空属性的报错
1
2spring的单例或者原型如何配置?还用过其他什么scope?
1
2log4j或者logback的日志记录文件在哪里?(开放式问题,怎么确定日志打到哪里了)
1
2
工具
maven中如何排除包冲突
1
2svn合并代码怎么做
1
2
分布式
如何实现分布式锁
1
2分布式Session如何实现
1
2如何消除分布式事物
1
2MetaQ,Zookeeper 的原理和适用场景,(P7需要对业界的同类产品有一定的了解,知道各自的优缺点 )
1
2Redis 3.0的分布式集群架构,(P7需要对业界的同类产品有一定的了解,知道各自的优缺点 )
1
2
高并发
原子计数器AtomicInteger的技术实现
1
2volatile的内存模型
1
2接口服务如何防止重复调用?
1
2可以幂等消费规避。
redis存最近的序列化串,检验是否存在,存在则证明重复调用。自己使用过多线程的场景是什么?线程安全如何保证?java的并发框架是否用过,线程池是否用过,RejectedExecutionHandler是否知道?
1
2
设计
对常用设计模式的了解,在项目中的实际应用
1
2排序算法描述
1
2在项目中是否采用分层的结构,是怎样划分的,各层之间采用了哪些相关技术
1
2
场景问题
- 对所做的系统的业务描述。能够描述清楚业务的核心逻辑和模型抽象,技术问题解决有正确思路(P6要求)。对其中的技术选型,技术方案有周全考虑,并且独立完成一个较复杂系统的设计和实现。(p7要求)
- 自己平时会学习些什么技术,学习程度如何
- 做项目过程中遇到什么技术难点;(p6和P7通过问题的技术难度、技术范围来区分)
- 怎么看待加班
- 线上问题分析处理是否有经验如何解决的
P7除了要抽查上面的技术问题外,建议选择询问以下问题:
- 描述一个独立设计的较复杂系统的设计思路和实现,能够清晰表达系统中的关键概念模型,行业内的对标产品及相关技术的熟悉程度;
- 对其中的技术方案有周全考虑,技术方案完整无明显漏洞;
- 实际项目设计中的延展性,对业务未来发展有一定考虑;
- 实际项目设计中如何保持优雅,方便运维和发展;
- 独立设计系统中的技术选型的比较, 熟悉的技术领域最佳实践 ;
- 开发设计中,采取了什么样的技术手段,提高开发的效率;
- 如果要设计一个搜索引擎,像google那样只有两个页面,要求性能最大化,web方面应该如何设计?(不需要考虑搜索的逻辑)
- 项目中用到点的技术细节挖掘;主要考察他对技术细节深度理解。如对MetaQ原理的理解,同类产品的比较。
算法和数据结构的描述;展示他对各数据结构的理解,不同场景下如何设计合理的数据
- 结构和算法,如何权衡时间与空间的取舍;
- trouble shooting 的最佳实践 。 这里根据不同的trouble情况会涉及到jvm内存,数据库 ,操作系统等相关的知识点 。
- 目前团队的瓶颈和困难分析 。
- 碰到过的最棘手技术问题或最复杂的业务场景的设计
总结
技术一面和二面的侧重点:
一面重点(从前到后)
技术能力,实际动手能力;
技术思路;
沟通表达能力;
学习能力;