2025年6月3日面试总结

发布于:2025-06-06 ⋅ 阅读:(22) ⋅ 点赞:(0)

1. 面试官问一台机器内存或者磁盘占用99% 再点一下就挂了,个人刚开始反应内存不足加内存,磁盘不足加磁盘,还有啥办法,有些时候没干过的事一定要大胆,敲命令都敲不成,只能换磁盘了和加内存了,要么停机,

top -o %MEM # 按内存排序进程,记录高占用PID

top -o %MEM -b -n 1 | head -12 | tail -n +7 |awk '{print $NF " " $1}' 

free -h

(base) [root@elastic-07 arthas]# free -hl
(base) [root@elastic-07 arthas]# free -h -s 5  -c 3
(base) [root@elastic-07 arthas]# free -h -t

df  -h

df -h | grep -E '9[0-9]%|100%'  // 查看使用率超过90%的分区

du  

du -h --max-depth=2 | sort -hr | head -10 

kill -9 <PID> # 优先终止非核心进程(如异常Java进程、失控脚本):ml-cita

2. 最长连续不重复子串

 public String  longestStr(String str){
        int len = str.length();
        int [][] dp = new int [len][len];
        for(int i = 0; i < str.length(); i++){
            dp[i][i] = 1;
        }
        int max = 0;
        String s = "";
        for(int i = 0; i < len; i++){
            List<Character> list = new ArrayList<>();
            list.add(str.charAt(i));
            for(int j = i +  1; j < len; j++){
                if(list.contains(str.charAt(j))){
                    dp[i][j] = dp[i][j - 1];
                    break;
                }else{
                    dp[i][j] = dp[i][j - 1] + 1;
                    if(max < dp[i][j]){
                       s =  str.substring(i, j);
                       max = dp[i][j];
                    }
                    list.add(str.charAt(j));
                }
            }
            list.clear();
        }
        return s;
    }

2.循环打印ABC ,有没有啥更轻量级的

  
    public static  void printABC(){
        AtomicInteger integer = new AtomicInteger(1);
        new Thread(new Runnable() {
            @Override
            public void run() {
                while(true){
                    if(integer.get() > 100){
                        break;
                    }
                    if(integer.get() % 3 == 1){
                        System.out.println(integer.get()+":\t A");
                        integer.getAndAdd(1);
                    }
                }

            }
        }).start();
        new Thread(new Runnable() {
            @Override
            public void run() {
                while(true){
                    if(integer.get() > 100){
                        break;
                    }
                    if(integer.get() % 3 == 2 ){
                        System.out.println(integer.get()+":\t B");
                        integer.getAndAdd(1);
                    }
                }

            }
        }).start();
        new Thread(new Runnable() {
            @Override
            public void run() {
                while(true){
                    if(integer.get() > 100){
                        break;
                    }
                    if(integer.get() % 3 == 0){
                        System.out.println(integer.get()+":\t C");
                        integer.getAndAdd(1);
                    }
                }
            }
        }).start();
    }

    private static Thread t2 = null;
    private static Thread t3 = null;
    private static Thread t1 = null;
    static  volatile  int i = 1;
    public static  void printABCTwo(){
          t1 = new Thread(new Runnable() {
            @Override
            public void run() {
                 while(i < 100){
                   if(i%3 == 1 &&  i == 1){
                       System.out.println(i+":\t A");
                       LockSupport.unpark(t2);
                       i++;
                   }else if(i % 3 == 1){
                       LockSupport.park();
                       System.out.println(i+":\t A");
                       LockSupport.unpark(t2);
                       i++;
                   }
               }
            }
        });
        t2 = new Thread(new Runnable() {
            @Override
            public void run() {
                while(i < 100){
                    if(i % 3 == 2) {
                        LockSupport.park();
                        System.out.println(i + ":\t B");
                        i++;
                        LockSupport.unpark(t3);
                    }
                }
            }
        });

        t3 = new Thread(new Runnable() {
            @Override
            public void run() {
                while(i < 100){
                    if(i%3 == 0) {
                        LockSupport.park();
                        System.out.println(i + ":\t C");
                        i++;
                        LockSupport.unpark(t1);
                    }
                }
            }
        });
        t1.start();
        t2.start();
        t3.start();
    }
   
    static void printABCThree(){
        Semaphore s1 = new Semaphore(1);
        Semaphore s2 = new Semaphore(0);
        Semaphore s3 = new Semaphore(0);
        t1 = new Thread(new Runnable() {
            @Override
            public void run() {
                while(i <= 100){
                    if(i%3 == 1) {
                        try {
                            s1.acquire();
                            System.out.println(i+":\t A");
                            s2.release();
                            i++;
                        } catch (Exception e){
                            e.printStackTrace();
                        }
                    }
                }
            }
        });
        t2 = new Thread(new Runnable() {
            @Override
            public void run() {
                while(i <= 100){
                    if(i%3 == 2) {
                        try {
                            s2.acquire();
                            System.out.println(i+":\t B");
                            s3.release();
                            i++;
                        } catch (Exception e){
                            e.printStackTrace();
                        }
                    }
                }
            }
        });

        t3 = new Thread(new Runnable() {
            @Override
            public void run() {
                while(i <= 100){
                    if(i%3 == 0) {
                        try {
                            s3.acquire();
                            System.out.println(i+":\t C");
                            s1.release();
                            i++;
                        } catch (Exception e){
                            e.printStackTrace();
                        }
                    }
                }
            }
        });
        t1.start();
        t2.start();
        t3.start();
    }

4. 线程池有哪些参数

5. LIst 和Map 有啥区别,jdk 1.7 和 jdk 1.8 HashMap 数据结构变化。HashMap 是线程安全的吗?