2024秋招

koopkl Lv2

面试

百度-AI平台

一面

  • 你实习的工作挑一个你觉得挑战性比较大的,讲讲

  • 你的项目里面这个是什么,你讲讲?

  • go语言八股:

    • go的select的选择逻辑是什么
    • go chan关闭之后,写入和读取会发生什么
    • go的新版本特性有没有了解?
      • 答了泛型,追问:泛型和反射的区别?
    • go如何比较两个slice
      • 手动挨个
      • reflect包的DeepEqual
  • Mysql索引失效情况?

  • Redis中的持久化策略

  • 慢查询语句你怎么发现,怎么处理?

  • 分库分表

二面

  • 实习介绍
  • 你提到es,es的倒排索引
  • go的有缓冲区的chan 和 无缓冲区的chan
  • go的垃圾回收机制
  • go的锁有哪些
  • 下游报错了,你怎么排查
  • 你排查的时候有哪些字段可以作为参考进行过滤
  • mysql索引用的B+树的结构,B+树的结构
  • 高并发场景的系统,你怎么去设计和实现
    • 限流
    • redis
    • 消息队列
    • 主从数据库
  • 你这里有个定时任务的实习需求,你定时任务用的什么框架
  • 你们开发用什么框架,kitex和gin框架有什么区别,好在哪里
    • 我哪里知道
  • go内存泄漏你排查过吗?一般如何排查?
  • 算法题:查找二叉树的最近公共祖先

字节-生活服务-交易与线索

一面 45min

2024-08-26

我有一段字节实习,所以基本都在问实习,一个问题5分钟多

  • 简单介绍一下你的部门业务,以及你在这里扮演的角色,还有你们上下游是什么?

  • 你的实习遇到了什么比较有挑战性的工作,或者你解决了什么问题,带来了什么收益?

  • 你有接触过存储层吗?(其实就是问我们部门有哪些数据库和表)

    • 简单介绍了哪些表,哪些作用
  • 你们是有订单的,那你讲述一下整个订单从前端广告填写,到广告投放这样一个数据流程?

    • 感觉其实就是讲讲整个系统流程吧,不用纠结于数据这个点。。
    • 还好实习开始就仔细研究过了。。
  • 你们用了es,你的es规模有多大,分片、节点等等?

    • 不知道,不了解,但他说没事
  • 你们es有什么报警和监控吗?

    • 答了es的同步的失败和同步太久的报警
  • 了解过es的底层原理吗?写入之后立刻就能查吗?

    • 不太会,只说可以查,es设计理念就是real-time
    • 追问:real-time如何保证的,es数据一致性如何保证的?不知道
    • 追问:有了解过哪些底层?
      • 只能想到倒排索引,其他都不记得了。他就没问了
    • ps:感觉部门es用的挺多的估计
  • Redis会丢数据吗?

    • 答了单机的aof和rdb
    • 追问:多集群呢?
      • 分情况讨论:说了主从断链,但主节点正常,然后主从锻炼恢复,然后会命令传播 or 全部覆盖重写。(其实还有很多,比如主节点掉线了,比如从节点大规模掉线,比如脑裂了,比如哨兵掉线了,太多了也)
  • 看你写了Java,说一下Java的动态代理

    • 完全不记得了,只记得jdk的动态代理和cglib,现场偷偷查了一点哈哈
  • Java的双亲委派机制是什么?为社么要这样设计

    • 保证jdk自身类编译的一致性。
  • Redis set 和 setnx的区别?

  • 如何同时一起set多个,让他们同时完成、

    • lua的原子
  • Redis分布式锁的实现?

    • set nx px
    • RedLock
    • (redisson看门狗想说 他就说可以了。。不让我说了)
  • 算法题:翻转链表的后半段。

  • 你什么时候毕业?能来实习吗如果拿到offer了

注:讲实习内容的时候不能太细节,他会烦的哈哈哈

二面 45min

2024-08-27

面试官看开摄像头了,这下我也不得不开了,看起来很温和,小组8-10个人,和之前团队人数差不多

  • 自我介绍
  • 实习,简单介绍一下你的实习做了什么
  • 我看到你用了es,出于什么考虑用es
  • es为什么可以这么快?
    • 答了real-time
    • 追问:real-time怎么实现和保证的
  • 你的查询条件其实也是一些时间、状态这种,其实sql也可以,为什么es会更快呢?
    • 答了es的value 列,有助于排序和聚合
    • (其实我也不知道哈哈哈,但他点头了捏)
  • es这么好,为什么不全面拥抱es?
    • 存储,索引占空间很大
    • id查询还是sql快啊,B+树的神
    • (现在想想,感觉还有一个叫速度问题,虽然他实现了real-time,但实际生产中,我们更多时候不会设置为1s,可能30s,这种效率对于查询一个id的数据是不能接受的)
  • 介绍一下其他的项目
  • 看到你这个go客户端,有没有用过go的一些特性
    • chan 和 select多
    • 追问:有没有遇到过死锁的?
    • (我都忘的差不多了,说没遇到过,都是阻塞和非阻塞的单向chan,而且死锁的情况很多时候都是比如close一个chan但是select还在轮询就会G,实际代码没搞过这种)
    • (其实还有一个感觉很厉害的是context的Done和cancel,但不知道是啥,但感觉可以讲讲)
  • 为社么这个项目用了区块链呢?看你在这里还写过一些rust(笑)
    • 介绍背景
    • (挺久了,rust都忘光了(笑))
    • 因为觉得rust有意思,想做点有意思的事情
  • 写个小题目吧
  • 算法题:合并K个升序链表

三面 1h 8.29

全是实习和项目。。真累啊

  • 实习

  • 你说你用es是考虑性能问题,那你qps多高

  • qps这么高,你的sql承受不住,你的es肯定也承受不住

    • 其实性能指的是时间,md
  • 别的就不说了。。

  • 你这个安全是怎么保证安全的?难道普通的vpn不行吗?

    • 不知道
  • 你为什么要用Tun的这样一个虚拟网卡,直接的物理网卡不行吗?

    • 流经物理网卡的数据确实可以被监控,但是这个风险很大,一方面部分数据包处理不好,我们本地的虚拟数据包会被发送到网络上,可能会有风险,一方面是监控难度比较大,不如虚拟网卡来的效率和方便
    • 数据流向?我们一个http请求在操作系统进行路由决策时会判断应该发给某个网卡,然后这里如果路由到了我们的Tun网卡,那么我们本地client会从tun读取数据,然后进行一系列加密,决策,修改数据等,然后再发送给真实的物理网卡。
    • 同样的从远端接受数据,操作系统会决定发送给某个网卡,Tun网卡有进入的流量,我们会读取入的流量,然后处理后转发给上层的应用程序?
  • 为什么要用双向TLS,https的模式不行吗?

    • 单向的TLS只能是client对server验证,但是服务端无法对客户端进行验证,这也是传统vpn网络的弊端

    • 双向TLS证书的发布、加密和校验的过程

      • 发布:客户端有了账号密码之后,本地会基于口令生成一个加密后的私钥,通过算法生成私钥对应的公钥,然后发送给server,server会采用客户端证书根证书对这个客户端的属性、客户端的公钥进行加密,并发布证书给客户端。
      • 加密:客户端有证书之后,接下来的请求会对客户端发送的数据包进行加密,这里的加密会加密很多东西,里面包括了HTTP的头部这种未加密的数据,以及TCP包的头部这种,并且我们会在数据包的外部额外增加一些我们自己的头部,里面记录了这个客户端的属性,并用自己的证书进行加密,这些属性的加密是可以利用属性加密的特性保证这个数据包能够被哪些人解密的,比如数据包要转发给转发节点和目标节点查看,这个时候转发节点一定要能够看到一些数据才可以,并进行验证后决策转发到何处,但是传统的点对点加密来说,私钥不共享,所以是没法进行一个同时共享的。
    • 双向TLS客户端证书的泄露和存在的意义:

      • 一方面是设计的过程中我们想要基于一种硬件的方式,比如外插u盘的方式,来进行签名,认为私钥不会离开设备,所以这里本地会有这样一个证书,基于设备的私钥产生的公钥。
      • 一方面本地的私钥和证书确实有泄露的风险:证书本身是公开的,所以泄露了也无所谓,但是私钥是经过了用户的口令加密的,所以说即便私钥泄露了,但是没有用户的口令也是没法实现的。
      • 同时,用户的证书可以理解为是随时更新的,每次用户在启动我们客户端的时候会发送公钥给我们的server,server会从数据库中load出对应的文件给用户,或者说我们可以更新证书,这样能够在一定程度上伪造证书,公钥的发送我们可以采用服务端的证书来加密。
  • 我们的访问控制是为了:决定这个数据包能不能发送到我这个节点,这个数据包能不能从本地发送出去

  • 我们的属性加密是为了:决定这个数据包谁能看到里面的内容

  • 我们的属性路由是为了:决定这个数据包应该发送到何处?

  • 传统vpn的特点是中心化的方式,我们这里的特点是去中心化,没有所谓的中控节点,可以理解为是一个去中心的网络架构

  • 你说一下双向TLS这样证书的交互整体流程是什么?

    • 不知道
  • vpn是怎么实现的安全呢?vpn是什么?

  • 那你说说https的过程

    • RSA说完,打断了
  • 算法题:给一个单词列表,再给你一个字符串,问这个字符串能不能由单词列表组成,写了一个动态规划的Onmk

  • 算法题:设计一个数据结构:查询、插入、删除都是O1,能够按照插入顺序遍历。

    • 其实就是LinkedHashMap,但是没有容量限制的那种,我说了双向链表+hashmap
    • 追问:HashMap怎么实现的一个O1插入?String怎么hash的。。
      • 我真不会啊,让我设计,我说转成byte然后遍历?哈哈 像个2b

总结:我是2b,gg

四面 40min 9.3

  • 介绍实习
  • 介绍一下es的特点
  • 为什么这里用es
  • 线上问题,有遇到吗?怎么处理的
  • 如果线上有一个很大的日志文件,格式是time uid logid这种格式,现在让你去查询某个时间段内的有哪些日志,你怎么设计和实现?
  • 这里你提到了二分,实现一下二分吧
  • 接雨水,说思路

hr面 30min 9.4

正常hr面

  • 你为什么离职,没有转正?
  • 你实习有遇到哪些困难?
  • 你是怎么学习的?
  • 你对于未来的规划有哪些期待
  • 你选择offer的时候,有哪些原因?

五面 40min +2 9.10

+2

  • 讲述你开发过的项目,你扮演了哪些角色,做了什么事情?有哪些问题,你是怎么解决的?
  • 如果让你设计一个电影票务系统,你会怎么做?面向对象的方式
    • 你会设计哪些数据对象?
    • 这些对象有哪些具体的属性?
    • 你会设计哪些模块
    • 这些模块有哪些核心功能?
    • 模块之间如何组织关系?
    • 模块有哪些核心API

美团 到家核心 PMP

一面

Java岗的面试绝对的压力最大,什么八股都有

  • 实习
  • 你这个es,为什么用es,md说了半天他没懂我们的业务,我也是服气了
  • 实习掠过了,问的我贼难受。。
  • 八股开始狂轰烂炸
  • Java的AQS,讲讲
  • Java的线程池的参数
  • 讲讲跳表
  • 讲讲B+树
  • MySQL为什么用B+树不用跳表
  • 讲讲MVVC
  • 讲讲mysql的锁,讲讲间隙锁是怎么实现的
  • 讲讲G1垃圾收集器
    • 简单介绍了,但深入的东西我没讲
  • 讲讲SDS数据结构
  • 讲讲Redis的持久化
  • 讲讲怎么实现的快照读
  • sql的一个事务执行失败了,怎么回滚的,这时候如果我有其他的事务在执行会被中断吗?
  • 你实习里面有微服务的整合,你讲讲微服务拆分的基本逻辑是什么?
  • 拆分遵循什么原则?
  • 算法题:翻转链表,但是首尾拼接链表,1-2-3-4-5-6 变成 1-6-2-5-3-4

总结:我是2b

美团 点评 搜推 基础架构

一面 9.10

评印象写了。。忘光了

  • 实习

  • Es的索引的结构

  • java的垃圾回收器

    • 说了G1
  • 垃圾回收标记算法

  • Go的垃圾回收器

  • Go的协程

  • Java和Go的内存分配有哪些区别

  • MySQL的索引

  • Redis数据结构

    • SDS
  • 手撕题:删除链表的第k个节点

  • 统计前K大个频率的单词

美团 到家 广告 9.20

一面 60min

  • 实习的内容
  • 你这个非闭环都有哪些品
  • 穿山甲和你们这边有什么区别联系吗?
    • 不知道
  • 你的抖音电商算是闭环吧
    • 嗯 确实 一部分是的
  • 你的es有多大
  • 你的这个线上线下数据分别是什么
  • 你们业务同级的有哪些
  • 你是怎么数据同步的?你知道binlog里面的数据格式吗?
    • 公司有框架,我不了解的
  • es的查询时间
    • 几十ms
    • 追问:指标你有了解吗,比如:平均响应时间,t99这些,我说看过,但不怎么了解
  • es分页查询的方式有哪几种
    • page size
    • scroll id
    • 他说还有第三个,但他自己也记不清了,但影响不大
  • 你的这个es索引的设计有没有可以改进的点
  • 你的索引mapping是怎么设计的?
    • 我说就是一些比较常见的字段,日期,keyword这种,没有很特别的设计
  • 你看过es的源码吗?
  • es的倒排索引你了解吗?
    • 倒排索引的结构
    • term index
    • fst
  • 你有看过倒排索引的底层源码吗?
  • 你的es使用场景一般是哪些?
    • 主要是搜索,包括前端的一些搜索和后端处理消息时的搜索
  • 语言你有什么倾向吗?Java 和 Go你更喜欢哪个
    • 我说没明显倾向,感觉都差不多其实
  • mysql:我们mysql里面的一条sql语句包括很多部分,你了解他们的执行顺序吗?
    • limit
    • group by
    • having
    • where条件
    • 字段查询
    • 表连接
  • redis的sds数据结构,你了解哪些特性
  • redis你常用的话,都用来做什么?
  • Java的设计模式你了解哪些,问完我准备回答的时候,说写一个单例模式吧
    • 我写了一个double check的单例
  • 手撕题:删除链表倒数第N个节点
  • 手撕题:二叉树的最大路径和

快手 AB 流量平台

一面

30min

实习

  • es倒排索引?
  • 讲一个你熟悉的垃圾回收器?
    • todo G1 垃圾回收器
  • Java的GC roots 哪些对象可以为GC roots?
    • 栈上的局部变量
    • 方法区的静态属性,类变量
    • 本地方法栈中的引用
    • 活动的线程
    • 类加载器
    • jvm内部的引用:一些jvm自身持有的引用对象也被视为gc roots,比如反射调用的中间对象,jvm内部管理的对象。
  • 继承和多态的区别?
    • 多态:允许父类引用子类对象,从而得到在运行时根据不同的对象,能够把一种行为,表现为多种形式。
    • 继承:子类继承父类,可以复用父类的属性和方法,并添加自己的方法和重写父类的方法。
    • 多态可以通过继承和方法重写表现出来,但也可以通过实现接口的方式。
  • 继承可以不要吗?为什么go这种现代语言都抛弃了继承?
    • 继承的一个缺点就是常常会导致复杂的类层次结构,容易引入难以维护和调试的代码。
    • go里面有类似继承的东西,就是组合,也就是说把一个类型嵌入到另外一个类中,来实现代码的复用。这样可以避免继承导致的强耦合的问题。
    • 追问什么是组合?(说的驴头不对马嘴的)
  • 手撕:最长公共子序列

二面 1h20min

  • 介绍一下你的实习中比较有困难的地方?

  • MySQL索引,给你一个表A、B、C,建立A和B的索引

    • 索引的结构
    • 这里没有主键为什么会有主键索引
    • select * from table where A = 1
    • select * from table where A > 1
    • select B from table where B = 1
    • select * from table where B > 1
  • 介绍一下Mysql的事务有哪些特性

    • 隔离性是什么?
  • MySQL有哪些事务隔离级别?

    • 隔离级别分别解决哪些问题
    • 为什么默认的隔离级别是可重复读呢?
      • 不会,瞎说
  • Redis常用的数据结构

    • String
    • Set
    • List
    • ZSet
    • Hash
    • 常用的String,来做分布式锁
      • 介绍一下分布式锁
    • zset 底层数据结构
      • 跳表,什么是跳表
      • hash表
      • 为什么用跳表不用平衡树
  • Java 基础知识

  • synchronized修饰一个方法和一个静态变量

  • volatile 关键词,给了一个场景题目:

    • 一个volatile int 执行++操作,如n++
    • 10个线程,分别执行10w次
    • 最终n的值是多少?
    • 既然无法保证原子性,那么你会怎么改这个代码?
      • 加锁
      • synchronized关键词修饰方法
      • 原子类
        • 你会选择原子类还是synchronized关键字?为什么?
        • 既然原子类这么好用,我们为什么不全面使用原子类呢?
  • Java的集合有哪些接口?分别有哪些实现类?

    • HashTable 为什么线程安全,但是没人用
    • Vector类呢?
  • 并发操作的时候,如果想要保证并发安全,可以用哪些集合类?

  • HashSet 和 TreeSet使用的是什么数据结构

  • OOP的原则,七个原则

    • 不会
  • 设计模式你熟悉哪些,并介绍一些经典的实现案例

  • 依赖注入的方式有哪些

  • 依赖注入是怎么实现的?

    • 其实就是简单说一下:创建bean,然后扫描注解,注入
    • 感觉还可以扩展,bean本身的相互依赖导致的循环依赖问题
  • 手撕题:循环移动链表:要求:双指针的办法,保证循环移动的长度如果小于链表长度的时候,只遍历一次链表,大于的时候遍历两次。

京东 京东科技-中台

一面 hr

25min

  • 面试官自我介绍
  • 我自我介绍
  • 实习有没有遇到和同事沟通问题?你是如何解决的?
  • 本科、研究生有没有什么校园经历,以及遇到过什么困难,举例说明?
  • 在导师手下干活,如果导师的意见有错误,也就是导师的想法和你的想法冲突了,你会怎么做?
    • 优先导师的,
  • 你觉得你最大的优点和缺点是什么?
    • 有责任心,能够很快的适应环境和学习能力
    • 有时候过于追求完美,时间管理的可能还待调整。
  • 你在实习或者读研过程中,有没有遇到一些比较困难的事情,比如适应环境或者学习一些东西的时候遇到的困难?你是如何克服的呢?
    • 换语言和技术栈,这个部分我觉得不管是在学校还是在未来的工作中都是不可避免的,毕竟技术是在一直发展和进步的,作为开发人员来说,保持一个乐观积极的心态,始终学习。
    • 读研的时候Java转Go,本身我谈不上喜欢或者不喜欢Go语言,只是觉得Java更顺手一点,也能够解决我的问题。到了新的课题组之后转Go,就需要去学习很多的知识,我个人更喜欢看书和文档来学习,所以当时看了一两本go相关的书,也用go写了一些小工具和算法题,然后也去看一些我们实验室代码,这样理论实践结合,上手还是很快的。
  • 你考研是如何安排自己的时间来去保证自己能够顺利考上的,有没有一些困难,你是如何解决的?
  • 一年之后你即将毕业,踏入社会,转变为一个职场人,你觉得你会可能会遇到哪些困难,以及你会在这未来一年中如何准备和克服?
    • 过渡期的适应。职场文化、工作节奏、团队协作方式等都会需要适应
    • 技术能力和业务能力的提升。初入职场在面对业务和一些未接触的技术时,可能会有一些挑战,我会未入职的时候去学习一些新的知识来提高自己,同时有机会我也可能会提前去实习来更早的熟悉和接触工作中的内容,为毕业后的全职提前做准备。
    • 心理上的调整。就是从学生到职场,心理角色上可能会有一定的压力,因为刚开始工作遇到一些自己不知道的问题或者无法解决的问题是大概率发生的,可能会有一定的心理落差。我本来就作为一个比较大心脏和乐观的人,如果真的出现这种问题,我会去努力保持一个积极乐观的心态,和同事、leader学习和沟通来提高自己的能力,同时也是建立自己的自信。

二面 9.10 40min

  • 实习内容
  • Mysql的事务的特性
  • mysql的事务隔离级别
  • Redis的数据结构?
  • 你的学习能力如何?有哪些事情可以证明?
  • 你的成绩本科和研究生差距比较大,你是什么原因呢?
  • 你在校有哪些成果呢?
  • 你的高考分数是多少?
  • 我回头会和hr重新沟通一下?

更新:9.11反手挂我

腾讯

一面 25min 9.11

  • 介绍实习
  • 介绍项目
  • 你觉得你学习能力怎么样?
  • 反问

笔试

京东笔试

2024-08-24

  1. 给你一个数N,问你0-N里面多少个正整数能够被100整除?

数很大,10^100

  1. 一个矩阵,初始都是白色,然后进行k个操作,c操作是让一个坐标变黑色,然后其他是查一个坐标上下左右最近的白色坐标是什么?

数据量不大,可以直接遍历

  1. 给你一个n个木棍,让你选择最大的区间,使得这个区间里面的所有木棍都能组成一个三角形,输出区间的左右下标,长度相同,左端点最小的作为结果

滑动窗口感觉就行,条件就是最小+次小大于最大,可以用优先队列维护,也可以自己维护。

  • Title: 2024秋招
  • Author: koopkl
  • Created at : 2024-08-26 17:48:00
  • Updated at : 2024-09-20 14:43:54
  • Link: https://lime.popla.cc/2024/08/26/2024秋招/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments