最近开始找工作了,坐标杭州。渣渣感觉面试应该挺困难的,也不知道具体会问哪些类型,会在面试完把每一次面试问到的题目列出来, 一个作用是参考记录,另一个作用是可以把自己不会或者弱项的问题及时补齐。
暂时是先把问题列出来,有时间的时候会把答案补上。
希望能找到一个好工作,加油
尼尧的面试日记:面试记录(六)
我大概总结一下,小型公司2年以下开发主要业务就是CRUD,招人肯定是希望能立马上手,所以面试范围我押题是常用的框架(SpringBoot、Spring基本概念,Mybatis),事务、数据库相关(锁、事务级别、sql优化,数据库底层概念等)、异常。有些会问一些设计模式(主要掌握工厂模式、单例模式、代理模式。)。
中大型公司的话,加上 JVM,集合,并发编程,一些网络知识。有些可能还会有一两道算法题。甚至开始问分布式了,具体看他们业务。
大厂请直接参考我画的java路线图,大厂知识路线没有3年以下之分,只有深/广度之分:Java知识体系脑图(2020年)
本次面试过程
在线面试算法题。不会做,说是最简单的题,简单题提交之后才能看见后面的题,我连后面的题目都没见到(哭泣泣)。
简单题
题目都有性能要求,c++ 1s;其他语言 2s。
1、假定有一列整数,下标从0开始,找出比它大的第一个数的下标进行输出,若没有输出0。给定个数,自行生成随机数字,范围[0,40000]。
示例:
输入
4
1 3 2 5
输出:
1 3 3 0
分析:对于1来说3是第一个比它大的数,对于3来说5是第一个比它大的数。
public class getIndexOfFirstBig {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
List<Integer> list = new ArrayList<Integer>();
List<Integer> result = new ArrayList<Integer>();
Random random = new Random();
int num = 0;
while (in.hasNextInt()) {// 注意,如果输入是多个测试用例,请通过while循环处理多个测试用例
num = in.nextInt();
}
for(int e = 0; e < num; e++){
int randomNum = random.nextInt(40000);
list.add(randomNum);//把每个值存下
// System.out.print(randomNum + " ");
}
List out = getIndex(0,list,result);
int size = out.size();
for(int i=0;i<size; i++){
System.out.print(out.get(i) + " ");
}
}
public static List getIndex(int index, List<Integer> list, List<Integer> result){
int n = list.size();
if(index >= n){
result.add(0);
return result;
}
int num = list.get(index);
for(int i = index+1; i<n; i++){
if(num < list.get(i)){
result.add(i);
break;
}else if(i == n-1){
result.add(0);
}
}
//递归比较获取下标
return getIndex(index+1,list,result);
}
}
2、给定整数N,在N范围内找出回文素数。
素数/质数:即只能被1和它本身整除的数。1不是素数。例如3、5.
回文数:即从头开始读和从尾部开始读都是一样的数,例如101。
/**
* 参考 LeetCode 866.回文素数。难度中等
* 求出大于等于N的回文素数
*/
public class primePalindrome {
/**
* 数学法
* 遍历所有数字,检查是不是回文串。如果是,检查是不是素数,如果当前数字长度为 8,可以跳过检查,因为不存在 8 长度的回文素数。
* @param N
* @return
*/
public int primePalindrome(int N) {
while (N>1) {
if (10_000_000 < N && N < 100_000_000)
N = 100_000_00;//跳过8位数字
if (N == reverse(N) && isPrime(N))
return N;
N--;
}
}
/**
* 检查是不是素数
* @param N
* @return
*/
public boolean isPrime(int N) {
if (N < 2) return false;
int R = (int) Math.sqrt(N);
for (int d = 2; d <= R; ++d)
if (N % d == 0) return false;
return true;
}
/**
* 将数字翻转用于检查是不是回文数
* @param N
* @return
*/
public int reverse(int N) {
int ans = 0;
while (N > 0) {
ans = 10 * ans + (N % 10);
N /= 10;
}
return ans;
}
}