前言
瓜子二手车
面试内容
一面
1.Spring
1). Spring Session是如何实现的?
详细可参考: 通过Spring Session实现新一代的Session管理
2). Spring中有哪些设计模式,体现在什么地方?
详细可参考: Spring框架中的设计模式
3). Spring AOP是什么设计模式,是什么原理实现的?
详细可参考: Spring AOP的实现原理
4). AOP的应用场景有哪些?
应用场景 | |
---|---|
Authenticatio | 权限 |
Caching | 缓存 |
Context passing | 内容传递 |
Error handling | 错误处理 |
Lazy loading | 懒加载 |
Debugging | 调试 |
logging, tracing, profiling and monitoring | 记录跟踪 优化 校准 |
Performance optimization | 性能优化 |
Persistence | 持久化 |
Resource pooling | 资源池 |
Synchronization | 同步 |
Transactions | 事务 |
2.MySQL
1). 索引的种类有哪些?
2). MySQL的执行计划Explain的参数
3). MySQL的优化是怎么做的?
4). 常用的MySQL函数有哪些?
5). 谈一下MySQL的锁机制是怎样的?
6). Update 10条语句,会不会锁表,如果不会的话会把这10条数据锁住么?
mysql的行锁是通过索引加载的,即是行锁是加在索引响应的行上的,要是对应的SQL语句没有走索引,则会全表扫描,行锁则无法实现,取而代之的是表锁。
简而言之:where条件里面,不加索引时,update会使用“表锁”进行更新,影响所有行的查询更新;加了索引后,使用“行锁”进行udpate,只锁当前行。不影响其他行的查询更新。
其他可参考 : MySql批量更新死锁案例分析
7). 添加索引的SQL语句怎么写?
ALTER TABLE table_name ADD INDEX index_name (column_list)
ALTER TABLE table_name ADD UNIQUE (column_list)
ALTER TABLE table_name ADD PRIMARY KEY (column_list)
CREATE INDEX index_name ON table_name (column_name)
复制代码
8). 有表如下,请写出查询总分大于180分的同学的SQL
name | class | subject | grade |
---|---|---|---|
Mike | 1 | 英语 | 87 |
Mike | 1 | 数学 | 96 |
Mike | 1 | 语文 | 66 |
Nicole | 1 | 英语 | 73 |
…… | …… | …… | …… |
select name, sum(grade) from table group by name having sum(grade) > 180
复制代码
3.Redis
1). Redis有哪几种数据结构?
- String
- Hash
- List
- Set
- Sorted Set或ZSet
2). Redis是单线程但为什么这么快?
- 完全基于内存;
- 使用I/O多路复用模型;
- 采用单线程,避免了不必要的上下文切换和竞争条件;
- 数据结构简单,对数据的操作也简单;
- 自己构建VM机制;
详细可参考: 为什么说Redis是单线程的以及Redis为什么这么快!
3). Redis与MySQL比较的优缺点有哪些?
4). Redis的使用场景有哪些?
5). Redis的内存优化机制是怎样的?
4.Java基础
1). lambda表达式
2). 线程间的通信方式
5.手写代码
1). 数组去重
2). 两个数组求交集
public class ArrayIntersection {
public static void main(String[] args){
int[] a = {1,1,3,4,5,6,7,8,9,9};
int[] b = {0,1,4,5,6,9,9};
Set<Integer> set = new HashSet<>();
for (int i = 0;i<a.length;i++){
set.add(a[i]);
}
for(int j = 0;j<b.length;j++){
if(!set.add(b[j])){
System.out.print(b[j] + " ");
}
}
}
}
复制代码
总的时间复杂度为 O(n)
6.Git
1). 代码回滚
$ git reset --hard HEAD^ 回退到上个版本
$ git reset --hard commit_id 退到/进到 指定commit_id
复制代码
7.Linux
1). 查看文件的命令有哪些?
命令 | 简介 |
---|---|
cat | 从第一行开始显示全部的文本内容 |
tac | 从最后一行开始,显示全部分文本内容,与cat相反 |
nl | 显示文本时,可以输出行号 |
more | 按页显示文本内容 |
less | 与more差不多,也是按页显示文本内容,区别是less可以一行一行的回退,more回退只能一页一页回退 |
head | 从头开始显示文件指定的行数 |
tail | 显示文件指定的结尾的行数,但每一行的位置还是原文件中的位置,不会像tac那样与原文件相反 |
vi | Linux文本编辑器 |
2). 修改文件权限的命令是哪一个?如果想要该文件可读可写可操作该加什么样的参数?
8.Nginx
1). 谈一下Nginx的负载均衡策略有哪几种方式?
- 轮询策略(默认)
- 指定权重策略
- ip绑定 ip_hash
- fair(第三方)
- url_hash(第三方)
- sticky策略
2). 谈一下如何配置Nginx的白名单黑名单?
二面
1.MySQL
1). 谈一下MySQL的事务
2.Java基础
1). 谈一下Java中的集合容器类
2). 谈一下HashTable的底层实现
Hashtable是通过"拉链法"实现的哈希表。它包括几个重要的成员变量:table, count, threshold, loadFactor, modCount
3). 谈一下HashMap的底层实现,红黑树的优点是什么?
2). 谈一下多线程的使用场景
3). 谈一下线程池的使用方式以及各个参数的意义是什么?
其他可参考 : 深入分析java线程池的实现原理
3. IO
1). Java中有哪几种IO?
- 首先,传统的java.io包,基于流模型实现,同步阻塞IO,好处是代码比较简单、直观,缺点是IO效率和扩展性存在局限性,容易成为应用性能的瓶颈;
- 在Java1.4中引入了NIO框架,提供了Channel、Selector、Buffer等新的抽象,可以构建多路复用的、同步非阻塞IO程序,同时提供了更接近操作系统底层的高性能数据操作方式;
- 在Java 7 中,NIO有了进一步的改进,也就是NIO2,引入了异步非阻塞IO方式,也有人叫它AIO。异步IO操作基于事件和回调机制,可以简单的理解为,应用操作直接返回,而不会阻塞在那里,当后台处理完成,操作系统会通知相应线程进行后续工作。
2).
4.JVM
1). 如果New一个对象,都存在了什么地方?
5.手写代码
1). 如何用多个栈实现一个队列的功能?
public class StackToQueue {
Stack<Integer> stack1 = new Stack<Integer>();
Stack<Integer> stack2 = new Stack<Integer>();
public void push(int node){
stack1.push(node);
}
public int pop(){
if(stack1.empty() && stack2.empty()){
throw new RuntimeException("Queue is empty!");
}
if(stack2.empty()){
while(!stack1.empty()){
stack2.push(stack1.pop());
}
}
return stack2.pop();
}
}
复制代码
2). 树的后序遍历 遍历文件夹
详细可参考: 树的后序遍历 遍历文件夹
更新时间
发布时间 : 2018年8月21