尼尧的面试日记:面试记录(六)

最近开始找工作了,坐标杭州。渣渣感觉面试应该挺困难的,也不知道具体会问哪些类型,会在面试完把每一次面试问到的题目列出来, 一个作用是参考记录,另一个作用是可以把自己不会或者弱项的问题及时补齐

暂时是先把问题列出来,有时间的时候会把答案补上。

希望能找到一个好工作,加油


我大概总结一下,小型公司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;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值