上次面头条实习挂了,挂了的部门的hr把我推给了另一个部门的校招。
星期天头条加班过来面试的,面试的人贼多,坐满了,每个桌子都有人面试,特别吵。
1,自我介绍
2,项目相关
3,注册登陆逻辑
注册会发送激活邮箱
4,密码怎么保存,怎么防止暴力破解 ,MD5,自定义加密算法,对密码取hashCode( )等
5,session和cookie cookie有哪些属性
cookie属性以前看过,但面试忘了,只记得有个超时
name字段 :一个cookie的名称。
value字段 :一个cookie的值。
domain字段 :可以访问此cookie的域名
path字段:可以访问此cookie的页面路径。
Size字段 :此cookie大小。
http字段 :cookie的httponly属性。若此属性为true,则只有在http请求头中会带有此cookie的信息,而不能通过document.cookie来访问此cookie。
secure 字段 :设置是否只能通过https来传递此条cookie
6,TCP连接状态名称及含义
3次握手,4次分手,具体状态的名称记不住了
7,https怎么实现的
8,java中的锁 (synchronized,lock)
9,synchronized还有什么作用
10,什么是指令重排序
11,怎么产生死锁 (这个经常问)
12,线程池相关 线程池参数
13,手写阻塞队列
当时用wait( ),signal( ),知道大概咋写,但一些细节忘咋写了。。。
public class MyBlockQueue {
private List<Integer> container = new ArrayList<>();
private volatile int size;
private volatile int capacity;
private Lock lock = new ReentrantLock();
private final Condition isNull = lock.newCondition();
private final Condition isFull = lock.newCondition();
MyBlockQueue(int cap) {
this.capacity = cap;
}
public void add(int data) {
try {
lock.lock();
try {
while (size >= capacity) {
System.out.println("阻塞队列满了");
isFull.await();
}
} catch (InterruptedException e) {
isFull.signal();
e.printStackTrace();
}
++size;
container.add(data);
isNull.signal();
} finally {
lock.unlock();
}
}
public int take() {
try {
lock.lock();
try {
while (size == 0) {
System.out.println("阻塞队列空了");
isNull.await();
}
} catch (InterruptedException e) {
isNull.signal();
e.printStackTrace();
}
--size;
int res = container.get(0);
container.remove(0);
isFull.signal();
return res;
} finally {
lock.unlock();
}
}
}
14,mysql存储引擎及其区别
15,mysql隔离级别相关(这个也经常问),设置成哪个级别解决了什么问题,mysql的默认隔离级别可重复解决了什么问题,能解决幻读吗?怎么去验证?
注意:mysql默认的隔离级别下的可重复读,可能会产生幻读(针对数据的整体,凭空多了一行或者少了一行),但是能保证读到过的数据的一致
16,mysql的锁
17,for update是什么锁
行锁
18,怎么加读锁
LOCK TABLES test_table READ
UNLOCK test_table
LOCK TABLES test_table WRITE
UNLOCK test_table
19,写SQL: 有一张表,只有uid,可以重复,求出重复次数最多的前三个uid
select uid from user group by uid order by count(uid) limit 3
20,linux熟嘛
21,linux跨域请求 (不懂)
百度:
22,Zookeeper是做什么的
23,分布式锁
24,给一个List,里面装了一组区间 [ left,right ] ,如果这些区间有交集,合并有交集的区间,如[1,3] , [2,4]合并为[1,4]
//区间类
class Range{
int left;
int right;
}
List<Range> merge(List<Range> data){
}
附上我下来写的代码,面试时候手写的,有一点小问题
package pers.wmx.demo;
import java.util.ArrayList;
import java.util.List;
/**
* @author: wangmingxin1
* @create: 2018-11-26 10:15
**/
public class MergeRange {
List<Range> merge(List<Range> data){
List<Range> result = new ArrayList<>();
boolean []flag = new boolean[result.size()];
for (int i = 0; i <data.size() ; i++) { //对于第i个区间
if(!flag[i]){ //如果没有和之前的区间合并
flag[i] = true;
int tempLeft = data.get(i).left;
int tempRight = data.get(i).right;
for (int j = i+1; j < data.size() ; j++) { //考虑第i个区间后面的区间能否和其合并
if(!flag[j] && data.get(j).left <= tempRight && data.get(j).left >= tempLeft){
if(data.get(j).right > tempRight ) {
tempRight = data.get(j).right;
}
flag[j] = true; //表示与当前第i个区间合并
}
}
Range range = new Range();
range.left = tempLeft;
range.right = tempRight;
result.add(range);
}
}
return result;
}
}
class Range{
int left;
int right;
}
25,你有什么问题
说点什么
您将是第一位评论人!