飞猪外包岗(笔试,一面)

问题了一些java基础,项目,还有日常编写代码的方式.八股基本没有是比较舒服的一次面试.

收获

自己表述能力差,项目表达是弱项,然后因为之前经验都是小公司好像,大家对我的项目也不怎么感兴趣,业务经验上我的优点电商经验有一些算是一个点,项目亮点我觉得通过dts做数据同步的算唯一亮点了吧.之后应该把这部分总结一下.

英语比较差以至于离开了idea,居然Calendar没说出来..

说线程池参数的时候,少说了核心线程数(最小),和空闲时间(keepAliveTime),今年也就写了5次,确实有点忘了,只有写的时候记得住.这不是重点,重点之前写了一个多线程消费的模板代码,其实这是面试陌陌的时候问的一个问题,这个问题的答案其实大家都知道,就是通过hash使同id的消息,在同一个线程上执行来保证消息顺序,我写的代码站在这个角度来看其实就是一个自带task分配策略的简单的线程池,没有最小线程数意味着我一开始,就启动了所有线程造成了不必要的资源浪费,我应该看一下线程池的代码,应该会暴露task分配方法或者接口,这样就可以继承原生线程池对,资源的管理和回收,是更好的写法.之后写一下.

然后问了下我的一篇关于库存.里面的一个错误的点,就是在默认的mysql默认的rr隔离级别下,update语句是加锁的,所以是串行执行的,当乐观锁条件正确的时候,是不会出现并发错误的.

算法题

public class test13 {
    public Set<String> distinctSpecialString(List<String> specialStringList) {
        Set<String> result = new HashSet<>();
        Map<String, String> map = new HashMap<>();
        for (String str : specialStringList) {
            String normalString = this.normalString(str);
            if (!map.containsKey(normalString)) {
                map.put(normalString, str);
                result.add(str);
            }
        }
        return result;
    }

    //使顺序不同的字符串相等
    private String normalString(String str) {
        String[] strs = str.split("_");
        Arrays.sort(strs);
        return String.join("_", strs);
    }

    public List<String> normalizeString(String str) {
        List<String> parts = new ArrayList<>();
        int index = 0;
        StringBuilder sb = new StringBuilder();
        while (index < str.length()) {
            char c = str.charAt(index);
            if (c == '_') {
                parts.add(sb.toString());
                //清空StringBuilder
                sb.setLength(0);
            } else if (c == '\\') {
                sb.append(c);
                char nextChar = str.charAt(index + 1);
                if (nextChar == '_') {
                    // 跳过转义的下划线或斜杠
                    sb.append(nextChar);
                    index++;
                }
            } else {
                sb.append(c);
            }
            index++;
        }
        parts.add(sb.toString());
        //对parts进行排序并重新连接成标准化字符串
        Collections.sort(parts);
        return parts;
    }

    public static void main(String[] args) {
        List<String> specialStringList = Arrays.asList(
                "123_456_abc",
                "456_abc_123",
                "123_4_56_abc",
                "456_123_789",
                "789_123_456",
                "123_456\\_abc",
                "abc_456\\_123"
        );
        test13 processor = new test13();
        List<String> strings = processor.normalizeString(specialStringList.get(specialStringList.size() - 1));
        System.out.println(strings);
    }
}

根据ascii使子串相同但顺序不同的字符串排序后一致,然后去重.附加题需要判断\_,由于一开始思路错了没写完.

public class test12 {
    public boolean test(String s) {
        Deque<Character> stack = new ArrayDeque<>();
        for (int i = 0; i < s.length(); i++) {
            if (s.charAt(i) == '(' || s.charAt(i) == '[' || s.charAt(i) == '{') {
                stack.add(s.charAt(i));
            } else {
                char c = stack.peek();
                if (c == '(' && s.charAt(i) == ')') {
                    stack.pop();
                } else if (c == '[' && s.charAt(i) == ']') {
                    stack.pop();
                } else if (c == '{' && s.charAt(i) == '}') {
                    stack.pop();
                } else {
                    return false;
                }
            }
        }
        return stack.isEmpty();
    }

    public static void main(String[] args) {
        test12 test12 = new test12();
        String s = "()[]{}";
        boolean t1 = test12.test(s);
        System.out.println(t1);
        for (int i = 0; i < s.length(); i++) {
            System.out.println(s.charAt(i));
        }
    }
}

标准的括号匹配题,但是由于一开始想用Deque双端队列模拟栈,脑子一抽写错了,写成了Dueue,然后小紧张一下,死活写不出来了,面试官提醒了一下改成Stack<T>了.但是一开始的想法还是Deque<T>,因为stack性能比较差,leetcode上几乎没人用.

ps:没有白板经验,写起来真的很费劲.好讨厌白板编程啊啊啊啊啊.让我回想起了学生时代,老师让我在纸上写代码的痛苦回忆

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容