美文网首页
面试总结

面试总结

作者: genglintong | 来源:发表于2020-01-18 22:01 被阅读0次

    背景

    去年十一月份的某一天,之前实习的时候隔壁组的一个老大跟我聊到近况,有没有想要尝试一些其他的机会。他现在在某大厂,比较缺人,说实习的时候觉得我比较靠谱
    自己的一些规划也是在今年春季尝试着找一找其他的机会,因此就答应下来,决定尝试一下。

    面试准备

    • 简历准备
      由于工作中,经常间歇性的进行述职,晋升答辩。因此对于自己工作的总结以及数据等都有一些准备。时间比较紧张,没有大篇幅的修改简历,只是增加了一些简练的总结。
      例如,提出并实施某个业务的技术方案调整,将某个接口的性能提升至200%,接口日均访问量降低近500W次。
    • 算法准备
      在正式工作两年时间中,经常间歇性的去刷题,两年时间下来,也勉勉强强的写了200+道leetcode。
      面试之前,将自己校招时的程序员面试金典拿出来,将其中的算法题整体刷了一遍,都是十分经典的题目,总共花了大概半天的时间。
    • 业务准备
      业务上,两年的工作时间,参与负责部门几乎最核心的业务,并且实际参与优化三个大版本。因此业务上,是最有东西说的,没有做详细的准备。
      不过还是将业务改版的几个关键技术又重新了解了一下,例如原有方案和改版方案差别在哪?利用了哪些技术,然后该技术的相关问题追问。

    面试流程

    面试的公司在业界是出了名的流程慢,从开始内推到现在(收到口头offer)已经一个半月了。

    • 11.29 提供简历
    • 12.12 第一次面试 两个小时 一共两面(技术面)
    • 12.17 第二次面试 三个小时 一共三面(一面技术 - 1.5h 技术总监 - 40min 技术副总监 - 30min)
    • 01.02 第三次面试 半个小时 一面GM面
    • 01.14 电话HR面 二十分钟

    面试详情

    技术一面
    • 算法题 - 进制转换
      该题目算法难度很低,但是有很多的坑需要注意。个人觉得这道题是考察基础能力+细心程度。
      思考一分钟左右,跟面试官沟通。
      我:待转换进制K 是否有大小限制 200如何展示 2000如何展示?
      面试官:你觉得呢?
      我:如果K有限制 比如10以下/26以下,使用字母可以表示。比如128以下,ascii编码,单字符可以表示,如果再高,例如200/2000,则需要考虑使用多字符表示。如果为负数,需要提供负数的进制规则。
      面试官:我们只考虑正整数,16以下,超过十用abc表示。
      我:转换数N 是否有大小限制,比如是int?
      面试官:N是int

      开始写代码,大概五到十分钟左右完成。讲解代码思路后...

      我:字符串拼接使用的JAVA的StringBuilder,拼接不会重新生成字符串,节省内存... (没有鸟我)
      面试官:如果N为负数怎么办?
      我:没有考虑到,如果N为负数,我们需要规定负数K进制表示方式,然后首先判断N正负,然后按照正数处理。
      面试官:字符串拼接是不是拼接反了...
      我:没有,我自己还测试过的。结果自己又一测试,果然自己写反了,GG.
      面试官:OK,其他的没问题了,下一道题目。

    • 算法题- 只出现一次的数字
      思考大概两分钟后
      我:其实,我遇到过这道题目。
      面试官:那你把思路说一下把。
      我:使用异或
      面试官:OK,下一道题
      面试官:如果一个数组,其他数字都出现两次,哦,好吧,这个应该也遇到过...(其实这个我不会)
      面试官:如果一个数组,其他数字都出现三次,只有一个数字出现一次,找到这个数字。
      我:思考了两分钟左右,说其实我也遇到过,有印象。
      面试官:简单说下思路
      我:按照位循环计算,对于某一位来说,肯定是 0 个数与1 个数某一个为3倍数,另一个不是,而不是的那个就是出现一次的数字该位的值。
      简单写伪码,然后用例子演示。

      只出现一次的数字 i
      只出现一次的数字 ii
      只出现一次的数字 iii

    • linux命令相关
      平时有没有用过Linux命令,都有哪些?除了ls cd 这种。
      答:grep awk sed sort uniq du dh top 等等
      面试官:使用过 awk,那写一个统计接口平均耗时的命令

    # 日志格式 
    # 域名 api ip 耗时
    # www.test.com  /hello 127.0.0.1 50
    cat access.log | grep '/hello' | awk '{totalTimes=totalTimes+$4} END{print totalTimes/NR}'
    

    当时没有写出来,写了80%左右,主要是对于END START 使用忘记了,说自己平时常用计算频率啥的。
    面试官:那计算频率比这个还要复杂啊,那就写一下吧。

    # 访问时间 域名 api ip 耗时
    # 2019.12.01.12:00:00 www.test.com  /hello 127.0.0.1 50
    
    # 计算 hello qps
    cat access.log | grep '/hello' | awk '{print $1}' | uniq -c | sort -rn | head
    
    • 业务相关
      签到分组相关逻辑 - 三次大的技术改版
      使用redis list 防止签到组并发,性能问题
      redis pipeline 使用在集群模式下 顺序问题 如何解决的
      为什么要改成异步方式?为什么使用redis做队列?mq有使用吗?
      mq都使用了哪些?
    技术二面
    • 自我介绍
      实习经历/工作经历 巴拉巴拉
    • 业务相关
      做的项目 - 签到分组逻辑
      介绍业务背景,自己负责的项目以及所起到的作用。(又聊了一次一面的东西)
      方案更改成异步,对业务有什么影响,如何解决延时问题?
      如何解决异步线程挂掉,集群机器挂掉导致线程死掉问题? - 线程保活方案
    • 工程问题 - 抢购问题
      你们的业务跟抢购很类似,如果挣脱了课程人数的限制,这个问题如何解决?
      首先说明 签到分组 业务逻辑相比于抢购业务 要复杂的多,巴拉巴拉~
      然后,在这样'不复杂'但并发会很高的情况下,方案是不一样的。
      使用MQ,不使用redis,使用消息异步通知。使用端去限流+后台限流 去限制流量进入。
      你们业务也用到了websocket,对他了解吗?
      使用框架pomelo,了解不多,http升级协议
      如何解决websocket重连问题?
      业务上有很多,心跳检测,触发时检测(纯猜测)
      http三次握手 四次挥手 谈一下?
      巴拉巴拉
      PHP 项目有没有使用过守护进程?
      使用过,负责聚合消息,业务场景,选型,限制,如何启动?
      对守护进程,服务器进程级别 了解吗?
      简单了解,进程级别啥的,答的不太行~
    • 工作现状
      对你们现有的团队,感觉如何?
      你期望来这里得到什么?
      你目前级别,薪资如何?
      现在自己的工作状态 工作氛围 技术氛围如何?
      现在的整体技术架构如何?
      这些后面几面也都聊到了,详细说。
    技术三面
    • 自我介绍
    • 业务介绍 - 不赘述
    • 算法题 - 雪花算法实现
      雪花算法 32位 前12位 机器码 后10位 秒级时间戳 中间10位 自增码
      这个题目需要使用多线程编程,这方便了解的比较少
      说了自己的简单思路,然后,尽量将自己的想法拆解,封装。后来在说唯一的难题,生成下一个序号。需要同步生成,需要加锁,但是会造成性能损耗。
      面试官说,这个必须加锁,因此使用 synchronized 同步执行。
    public synchronized long nextId() {
            long timestamp = this.timeGen();
            if (timestamp < this.lastTimestamp) {
                throw new RuntimeException(String.format("Clock moved backwards.  Refusing to generate id for %d milliseconds", this.lastTimestamp - timestamp));
            } else {
                if (this.lastTimestamp == timestamp) {
                    this.sequence = this.sequence + 1L & 4095L;
                    if (this.sequence == 0L) {
                        timestamp = this.tilNextMillis(this.lastTimestamp);
                    }
                } else {
                    this.sequence = 0L;
                }
    
                this.lastTimestamp = timestamp;
                return timestamp - 1514736000000L << 22 | this.dataCenterId << 17 | this.workerId << 12 | this.sequence;
            }
        }
    
    • 工程问题 - 实现发帖回贴功能
      讨论具体功能需求,是否评论,子贴是否还可以有子贴。确认只实现最简单功能。
      设计数据库,使用mysql,表结构设计,索引设计,缓存设计。

    面试官: 如果有某些帖子特别热,一个帖子有千万子贴,如何设计缓存?
    我:使用缓存,分页,offset扫表问题 - 可以带上贴id
    面试官:为什么不使用 redis?
    我: redis 使用zset, 保存顺序,获取贴id展示 但是数据量很大的时候,会对redis有性能影响。
    面试官:这是之前贴吧的实现方案。那大key会对redis有什么影响呢?
    我:影响读的性能,redis单线程
    面试官: 我们不会全量读,读一部分不会有问题
    我:会影响redis持久化,持久化时会生成子进程
    面试官: 嗯,这是一个点,还有吗?
    我:我忘记说啥了,就这个问题又聊了一会~

    (忘记具体场景了,比如查询某个帖子下 男性用户回帖的30条记录)
    面试官:那比如还是这个问题,一个sql执行起来就是很慢,如何解决。
    我:使用explain 看执行计划,看是否使用正确索引。
    面试官:用到了索引,但是还是很慢,执行计划,扫描了几十万条记录。查看表里记录,发现这几十万都是女性用户,查询时全扫到了。
    我:(当时很懵,感觉掉进坑里了) 画了B+树结构,也不能对性别建索引啊,说了一个不太行的建议,倒序查找。
    面试官:倒序也有可能后几十万条也都是女性。
    我:... 想不太出来了
    面试官:使用复合索引啊
    我:哦哦哦,对(...)
    面试官:看来你对mysql不太熟悉啊
    我:业务场景用的比较少,还是纸上谈兵。redis用的比较多。

    总监面(四面) 副总监面(五面) GM面(六面)
    • 对自己的规划
      三年内,主要提升自己的技术能力。
      第一年了解了redis,阅读了30%源码。对mysql/nginx/linux了解加深。
      未来两到三年,首先做好业务工作的同时,加强对于以上三种技能的学习理解深入。
      语言不是问题,数据结构才是。语言只是数据结构+语言独有的特性。
      比如php:fpm java:JVM Go:协程模型
    • 有没有遇到什么问题?如何解决的
      业务上签到分组需要优化,而线上却还OK,是否需要优化,和产品端沟通,一步一步定下来。
      有没有延期?做的优化是不是业务所需要的?
      如期完成,优化完更灵活,而且还可以支撑更大量级。
    • 我看你之前在 微软 百度都实习过,当时为什么离开呢?
      巴拉巴拉~
    • 介绍一下你现在的业务(GM)
      对整个部门的业务都做了介绍,用户的感受,产品设计的思路等等。
      直播如何预约,老师如何上课。老师成本很高,你觉得如何解决?
      你们的业务和你们公司其他部门业务有重合,你怎么看?
      互动延迟问题,有没有出现?
      延迟问题如果在5G时代,会不会有所缓解?
    • 有没有了解过我们这里,业务比较类似有可借鉴之处吗?
      有,忠实粉丝。
      业务场景不同,现在我们公司业务主要面向中小学生,目的是吸引用户注意力,因此需要更多更吸引的互动。
      而贵公司业务则体量更大,用户需求是视频内容,而不是附加的东西。因此可以适当的做一些轻量级互动,比如竞猜,购物巴拉巴拉。我觉得做的已经很不错了。不需要再额外多了。
      如果要做的话,我觉得可以在直播前后,做一些文章,更好一点。
      当然,这只是我个人的一些看法。
    • 现在教育各个场景都搬到了线上,编程 语文等等,你觉得体育可以吗?
      首先我觉得,体育的目的就是在于动,无论是编程还是基础学科都只需要接收屏幕内容,两者是有本质区别的。
      其次,我个人认为这个是有可能的,比如现在随着虚拟现实的到来,是不是可以和体育相结合呢?另外任天堂的switch最近风靡的健身环大冒险,就很不错,我觉得这也是一个方向。
    HR面
    • 考虑换工作原因
      有两点,第一在现有公司两年,学到了很多东西,也做了一些事情,很不错。但是能做的东西也都很熟悉了,想要换个环境。第二,贵公司平台很大,有更多的机会和挑战。我想要去试试,做的更多,更快提高。
    • 沟通薪资 级别
      巴拉巴拉

    相关文章

      网友评论

          本文标题:面试总结

          本文链接:https://www.haomeiwen.com/subject/xctlzctx.html