• 今天有个逼来我公司面试,

    第一个问题我问的他线程的基本概念(看他履历还是挺厉害的,本来我还想问问 countdownLatch 和 notify wait 的实现差别, volatile 关键字和原子类的使用区别),但不知道是不是故意的,这个 B 答得乱七八糟的,都没有回答到点上,我佯装回答很对的样子点点头,尴尬而又不是礼貌的朝他呵呵微笑着,也懒得纠正他错误答案了。

    知道了他的水平之后,我只能问的浅一些了,反正深得他也答不上来。

    然后又问了线程池、锁、jvm 相关概念,结果回答的和他的履历完全成反比,全是错误答案,我也没有纠正。

    看了他的简历,本来有所期待,但心一沉,感觉没前途。

    回来想发一篇《最近的应聘者的答题质量越来越差了。。。》,发现有个 B 发的比我还快,哎。

  • 所以你的目的是为了吐槽这家公司还是为了装逼?

  • 嗯,测试以后都面试这样的题目,最好一上来就是手写红黑树这样的面试题,才能提现测试的技术水平

  • private static void countSameNumber1(int[] number){  
            HashMap<Integer,Integer> hm = new HashMap<Integer,Integer>();  
            for(int i =0;i < number.length;i++){  
                if(!hm.containsKey(number[i])){  
                    hm.put(number[i],1);  
                }  
                else{  
                    hm.put(number[i],(hm.get(number[i]))+1);  
                }  
            }  
            for(Map.Entry<Integer,Integer> entry:hm.entrySet()){  
                System.out.println(entry.getKey() + "出现了" + entry.getValue() + "次");  
            }  
        } 
    
  • 一楼的问题是剑指 offer 的题目:

    public class Solution {
        public static int GetNumberOfK(int[] array, int k) {
    
            int count = 0;
    
            if (null != array && array.length > 0) {
    
                int first = GetFirstK(array, k, 0, array.length - 1);
                int last = GetLastK(array, k, 0, array.length - 1);
    
                if ((first > -1) && (last > -1)) {
                    count = last - first + 1;
                }
            }
    
            return count;
        }
    
        /**
         * 递归求解第一个k出现的位置
         * 
         * @param array
         * @param k
         * @param start
         * @param end
         * @return
         */
        public static int GetFirstK(int[] array, int k, int start, int end) {
    
            if (start > end) {
                return -1;
            }
    
            int mid = (start + end) / 2;
            int midData = array[mid];
    
            if (midData == k) {
                if ((mid >= 1 && array[mid - 1] != k) || mid == 0) {
                    return mid;
                } else {
                    end = mid - 1;
                }
            } else if (midData > k) {
                end = mid - 1;
            } else {
                start = mid + 1;
            }
    
            return GetFirstK(array, k, start, end);
        }
    
        /**
         * 递归求解最后一个k出现的位置
         * 
         * @param array
         * @param k
         * @param start
         * @param end
         * @return
         */
        public static int GetLastK(int[] array, int k, int start, int end) {
    
            if (start > end) {
                return -1;
            }
    
            int mid = (start + end) / 2;
            int midData = array[mid];
    
            if (midData == k) {
                if ((mid + 1 < array.length && array[mid + 1] != k) || mid == array.length - 1) {
                    return mid;
                } else {
                    start = mid + 1;
                }
            } else if (midData > k) {
                end = mid - 1;
            } else {
                start = mid + 1;
            }
    
            return GetLastK(array, k, start, end);
        }
    }
    
  • 1.countdownLatch 是实时通知,notify 不会释放监控权,所以写 wait 方法的线程需要先 start
    2.ArrayBlockingQueue 是自定义线程中有序队列

    ThreadPoolExecutor pool = new ThreadPoolExecutor( 
                1,              //coreSize 首先会加载的线程
                2,              //MaxSize 最大装载的线程
                60,             //60
                TimeUnit.SECONDS, 
                new ArrayBlockingQueue<Runnable>(3)         //指定一种队列 (有界队列)容量  除了coreSize运行的任务,其他任务会分配到队列中
                , new Rejected()
                );
    

    3.类锁和对象锁区别就是 synchronized 有没有加 static 关键字。

    我觉得除了 jvm 那道,其他 lz 所涉及的问题都是 java 基础,所以并没必要喷 lz。面试官可能主要是做功能测试和管理,技术涉及较少,客观意见,少喷为妙!

  • 进来社区半天发现,现在的社区和一年前的画风天差地别

  • 社区的脉脉既视感……运营小姐姐卖萌瞎扯,一大拨当真的,然后活跃就上去了,是这样吗?

  • 我不是楼主。一楼的问题,上网一查随便就出来了。。。。。请问面试可以上网查吗

  • python 的话可以直接用 Counter 吧,java 不是太清楚

  • 我是一楼,当时我的思路是来个循环嵌套,里面循环去拿外层循环的数和数组中所有数组对比一样就 +1,然后放在 map 集合里面.最后面试官问题有没有考虑过 时间复杂度?大佬你这么厉害,这个题回答下.

  • 你那么牛 B 怎么不去面试开发呢。
    发个这个还匿名?

  • 陈独秀同志,你坐下写道题.我最近也在面试,面试题里有一道题是这样的 给出一个 int 类型的数组,让统计出数组中每个数字出现的个数?

  • 多好的机会,好好珍惜~


  • +1

  • 压力和适当的焦虑可以使人快速进步~

  • 学习使人进步,

  • 牛逼在你头上拉屎,还找你要纸,哈哈

  • 我觉得楼主说的基本上没问题
    技术性测试的推动不是测试人员能搞定的,质量既然是需要整个项目组,乃至公司来提升的东西,作为最底层的测试人员话语权其实是最无力的,即使你每天加班吭哧吭哧弄了一套出来又如何?团队不重视,你连维护的时间都没有,难道整天加班维护?个人的力量实在太渺小
    至于 k8s/docker/大数据/AI 的测试,只是一些工具的使用,到底能沉淀下多少东西?5 年过来又出一批新的工具,这些也是迟早会淘汰的
    当然牛人可以持续学习,这不是自动化测试牛逼,而是牛人比较牛
    如果开发人员具备这种能力,成长得肯定比测试人员更快
    自动化测试有前途论坛还开什么培训班干什么?明显是职业瓶颈到了
    牛人做自动化牛不是因为自动化好,而是因为别人可以保持持续学习

  • 唉,你可以说测试属于辅助岗位,上限没开发高,这没什么问题。
    可连测试的基本概念就没弄明白,就在那大批特批只是发展概念,就太浮躁了。
    哪有什么自动化测试分类,只有测试分类,自动化只是实现测试的手段而已。
    哪怕分类,app 对应的是 web 和接口?app 对应的是 server 端测试,这是按照测试对象的分类。接口、web 明显是分层测试的概念,这三竟然扯在一起,太扯了。
    沉下心来做事吧,当然你可以不选择做测试。但是无论做什么,沉下心很重要

  • 我觉得测试能做的东西很多,我感觉自己根本做不完,不知道楼主怎么产生用不上的想法,我猜测楼主应该工作年限不长,做了点东西觉得很了不起了,已经看不上其他人,我手底下也有这样的,我想说你以为的只是你以为的,你觉得没东西可做没东西可学那是因为你没有意识到这些是需要的,说明你真的存在欠缺,反而那些意识到很多东西需要做的,很多东西需要学的,并且愿意踏实的进步的才是真的能走的远的人。

  • 大多数时候对于某项技术应该达到了解的程度。
    但是,对于很多细节的地方又需要精通,甚至比开发还精通……
    感觉很矛盾~

  • 敏捷团队开发、产品都一起来学习做测试了,测试熟悉开发技能也很正常吧?
    熟悉和精通是两回事,大多数情况下你并不需要像开发那么熟悉开发的技能,但完全不了解,或者只是靠听肯定是不行的。

  • 你应该问有多少人懂底层知识,对底层源码有深入研究。人家面试的时候就会问算法知识,肯定都会

  • 前一阵子去百度国际面试,我问他们的测试团队有多少人懂技术(懂编码,会做自动测试),他说每个都会