后台开发社招面经--科技公司总结

商汤科技-后台开发工程师

总的来说,第一次面试体验不错,不过估计有一道算法题没做出来被挂了。

一面(30分钟)

1、自我介绍

2、介绍一个负责过最复杂的项目

3、讲述下项目现在的运营情况

4、设计分布式系统的时候最需要care的点5、使用前端组件查询日志如何完成实时的同步

二面(30分钟)

1、Leetcode原题,****,中等题,秒了,但秒的太快,后面面试官上难度了,以后大家做题还是要想一想(假装)

2、**************,没做出来,说了下思路,大概就是使用邻接表表示图,然后做下dfs,遍历所有路径,记录当前路径总长度长度。然后每次移动检查路径长度(代码就写到这儿时间不够被叫停了,还没跑测试)

三面(30分钟)

题目

做一个Router功能的设计,给一个 Event Class,包含了MetaImage 两个 InnerclassMeta 里面会有参数 catalogdescriptionImage里面也有参数,参数可以是 sizeurl。要求是Router可以根据不同的参数,把 event 给到不同的服务器。可能的场景:Meta可能是一本电子书,会根据电子书的meta数据而发送到不同的服务器,比如 description里描述 bookSize > 500kb event会转发送到某一个服务器里,book类别是某一类特别的分类,event也会转发到另一个服务器里,可能meta里带有价格信息,也会根据价格信息做一些判断,转发到一个服务器中。而这个功能会期望Event携带的图片大小不超过200kb,才能把event里携带的图片存储到图片服务器中,不然就要先做图片压缩,再拿新的图片url来存储到图片服务器中。

我的设计思路和实现

定义 Event 类及其内部类 MetaImage,设计一个 EventService 接口,然后实现 BookServiceImageService,再通过 EventRouter 路由接口根据事件属性进行路由处理,如果有需要图片压缩的话,则使用 ImageProcessingService 进行图片压缩。

public class Event {
    private Meta meta;
    private Image image;

    public static class Meta {
        private String catalog;
        private String description;

        public boolean hasPriceInfo() {
            Pattern pattern = Pattern.compile("\\d+\\.\\d{2}");
            Matcher matcher = pattern.matcher(description);
            return matcher.find();
        }

        public boolean isBookSizeGreaterThan(int thresholdKB) {
            Pattern pattern = Pattern.compile("bookSize\\s*>\\s*(\\d+)kb");
            Matcher matcher = pattern.matcher(description);
            if (matcher.find()) {
                int bookSize = Integer.parseInt(matcher.group(1));
                return bookSize > thresholdKB;
            }
            return false;
        }
    }

    public static class Image {
        private String size;
        private String url;

        public boolean isSizeGreaterThan(int thresholdKB) {
            String sizeWithoutKB = size.replace("KB", "").trim();
            int sizeInKB = Integer.parseInt(sizeWithoutKB);
            return sizeInKB > thresholdKB;
        }
    }
}

public interface EventService {
    void processEvent(Event event);
    void otherEvent(Event event);
}


public class BookService implements EventService {
    @Override
    public void processEvent(Event event) {}

    @Override
    public void otherEvent(Event event) {}
}

public class ImageService implements EventService {
    @Override
    public void processEvent(Event event) {}

    @Override
    public void otherEvent(Event event) {}
}

public interface ImageProcessingService {
    String compressImage(Event.Image image);
}

public class ImageProcessingServiceImpl implements ImageProcessingService {
    @Override
    public String compressImage(Event.Image image) {
        image = FakeImageProcessor(image);
        return image.getUrl();
    }
}


public interface EventRouter {
    void routeEvent(Event event);
}

public class EventRouterImpl implements EventRouter {
    private final EventService bookService;
    private final EventService imageService;
    private final ImageProcessingService imageProcessingService;

    @Override
    public void routeEvent(Event event) {
        if ("电子书".equals(event.getMeta().getCatalog())) {
            if (event.getMeta().isBookSizeGreaterThan(500)) {
                bookService.processEvent(event);
            } else {
                bookService.otherEvent(event);
            }
        } else if (event.getMeta().hasPriceInfo()) {
            bookService.otherEvent(event);
        }

        if (event.getImage().isSizeGreaterThan(200)) {
            String newImageUrl = imageProcessingService.compressImage(event.getImage());
            event.getImage().setUrl(newImageUrl);
        }
        imageService.processEvent(event);
    }
}

public class EventController {
    private final EventRouter eventRouter;

    public void handleEvent(Event event) {
        eventRouter.routeEvent(event);
    }
}


#第一次面试##软件开发##社招#
全部评论
大佬后面去了哪家
点赞 回复 分享
发布于 07-31 21:29 上海
秒的太快哈哈
点赞 回复 分享
发布于 11-11 15:07 北京

相关推荐

4 5 评论
分享
牛客网
牛客企业服务