9.6 钉钉一面安卓端(最害怕的一集)

笔试

题目是 “最长不重复字母子串长度

15分钟写完代码,讲解思路,放到main方法,提供几个测试用例。

有bug,改!改完还有bug,没事继续改!

没问题了,能优化这算法吗?性能优化。

还能优化吗?不只是性能,从各方各面,比如现在要把代码commit上去,有哪些要注意的地方?

自己没看出来,后面面试官提示了:代码缩进,入参校验。

整个笔试花了接近30分钟。

面试

  1. 主用语言是java还是kotlin?
    1. **java主要写哪些方面的内容?比如IO,并发等?**这里没答上来,因为平时并不负责某一模块,有什么需要我就去写什么,而且做的事情也比较单一,并不复杂。需要对这一块做一个刻意练习。
  2. 这里对我讲到的项目一个功能展开说
    1. **自定义注解实现检查字段上传功能。**这里我的表述有问题,我说了上传其实是把数据放到请求的body里,而他认为是上传功能,通过上面途径去上传,文件还是?这里可以对上传功能做一个润色。
    2. **还有什么场景需要用到这个功能?**定时任务,原来是用了Thread一分钟执行一次,尝试使用过AlarmWorker,但是效果较差,延迟较高,测试不通过。面试官问:这个定时任务一般配置多长时间?你是怎么保证他能在规定时间生效的?这里没有好方法,让我回去之后好好考虑间隔一段时间去执行任务到底怎么做,能不能做。
  3. 项目遇到存储需要对数据进行持久化的时候该怎么办?
    1. **sqlite用得多吗?**不多。
    2. **假设要提高查询性能一般有哪些方法?**建立索引。**怎么建?**不知道。
    3. **事务知道的多吗?**不多,知道一些原理。就没继续问了。
  4. JAVA的垃圾回收知道吗?
    1. 了解过,说了两个复制算法和标记清除。不过他好像对这个不感兴趣,打断了。
    2. JAVA常用的引用类型清楚吗?
      1. **强软弱虚引用的作用和区别,说下自己的理解。**强引用就是直接声明的引用,软引用和弱引用的对象需要继承各自的Reference类的子类。(这里介绍的也不深)
      2. 提到了ThreadLocal的Entry也用到了弱引用。(这里由于我个人发音的问题加上麦克风质量不好,我的ThreadLocal,很容易听成FredLocal。他也没打断,我一直说。到后面他才反应过来,你说的应该是ThreadLocal吧,我说是啊。然后他笑的很大声,说一直疑惑什么是FredLocal。)
  5. ThreadLocal用到了弱引用是为了防止内存泄漏,引出了内存泄漏这个话题
    1. **说下对内存泄露的理解。**提到了Handler机制,为什么会发生内存泄漏。注意怎么避免内存泄漏。
    2. **抛开Handler机制内存泄漏的例子,内存泄漏的本质是什么?**一个不再需要的对象在垃圾回收的时候应该被回收,而由于不正当的处理导致它不能被回收仍然占用着内存。
    3. **还有哪些场景需要注意内存泄漏问题?**这里也没说好,硬扯了一个注册广播和服务。这里被追问了,如果在onStop把功能停了,那原来的那些数据怎么保存?然后我说了savedInstance?,他笑了笑说,它不是用来干这个的。下去好好看看。
  6. 用过的常见的JAVA集合有哪些?知道的,用过的都可以说。
    1. 这里只说了ArrayList,LinkedList,HashMap,HashSet,ConcurrentMap
    2. **对ConcurrentMap发起提问,是用来解决什么问题,是怎么解决的?**用来解决HashMap并发写入问题。具体是什么问题?两个线程对一个HashMap的同一个桶进行操作的时候导致导致其中一个被覆盖。
  7. 设计模式用过吗?设计模式的分类,三大类。哪三大类?
    1. 创建型,结构型?不知道了。他说平时开发过程中也可以多去思考一下,会发现很多都是这几类的。
    2. **那你自己用过哪些?**了解比较深的是,单例,观察者,责任链,适配器。
    3. **自己写的话写过哪些?**单例。他好像不感兴趣(确实,这个听多了就没啥意思了,下次可以换观察者说)
    4. 设计模式的一些原则,如何理解依赖倒置原则。刚好提前看了设计模式的原则,应该是用来解决循环依赖的,然后我就说了把需要被多个模块引用的类放在低级模块也就是base模块,然后需要用到的其他模块就去引用base模块,从而避免了两个高级模块之间的互相引用。(说完他说稍等他去搜一下这个依赖倒置原则…
  8. 操作系统
    1. **你理解进程的概念吗?**说了一些基本概念,开了进程操作系统就要分配虚拟空间。这里被打断了,应该是对内存空间比较感兴趣。
    2. **怎么理解操作系统分配的内存空间?**每个进程分配的都是虚拟内存,用户申请了内存就向操作系统的页表生成一个页表项,用到这块内存再去申请物理内存。
    3. **一个应用可以有多个进程,怎么理解多进程,你们公司或者自己项目也没有用到多进程,优势是什么?**这里也不知道,纯瞎扯,比如多开一个进程分担一些进程的负担,什么负担?比如Linux限制一个进程最多打开的文件描述符是1024个,如果需要打开的fd比较多,那就多开一个(这里说出来我自己都不敢相信)
    4. **你说的是Linux的,那安卓的呢?**安卓也是基于Linux内核,应该同样受限制吧?
    5. 你结合这个跟前面说的保活一起去看一下,多进程和保活。
  9. 网络这一块,简单问几个问题(翻车)
    1. **应用层和传输层常见的协议。**应用层:HTTP,HTTPS,FTP,SNMP,FTP。传输层:TCP和UDP。
    2. **你们公司用什么协议?**HTTPS。S是什么?SSL,HTTP是明文传输,HTTPS对信息加密。双方SSL连接之后,加密发送信息,用公钥解密。(天呐我居然说了公钥,我原以为对HTTPS很熟悉了,结果在关键时刻还是忘了,忘记客户端最重要的key就是PreMaster了,它用服务器的公钥加密,只有服务器的私钥能解密。所以应该是私钥解密?但是我没有说出来是私钥,因为它不是传统的那种私钥,因为服务器是知道客户端的私钥的,所以我就不认为是私钥了)。虽然确实不是私钥,到那时我也没有解释清楚。面试官还是让我下来再好好看一下
  10. 说一下自己的优势,硬实力软实力都可以说。
    1. 这是全场最尴尬的一个环节,从来没想过,只能说自己勤奋和活泼了。

反问

钉钉安卓端分部门或者小组吗?

  1. 分的,他是IM组(不知道是IM还是IMF?),就是界面这一块,打开钉钉看到的这些界面都是他们负责的。

最后:

面试就到这里结束,后面的话,流程那种都关注一下!

alt

#秋招##面试##面经#
全部评论
感觉同一个面试官
点赞 回复 分享
发布于 2023-09-11 19:15 江苏

相关推荐

04-10 13:13
门头沟学院 Java
1.自我介绍2.深度参与项目,产出3.OCR为撒做文件识别;部署的哪个4.传统的读取pdf docx api sdk有用过吗5.文本内容为啥还要用ocr6.pdf 图片内容;图片,图表的理解,怎么做;饼状图,折线图怎么提取语义信息7.ocr背后的原理,给一个饼图,然后怎么输出内容8.是否真的了解怎么识别 占比 类比这样的语义识别9.有看过ocr调用,语义保留这样的指标的评估10.怎么做评估;完全识别的指标又是怎么评估;九十分一百分怎么打分完全识别11.图表识别怎么评估打分,怎么评判,有哪些依据12.为啥选768维度13.讲下embedding模型,怎么做embedding14.embedding模型底层;什么是token;为撒100wtoken最大token数15.大语言模型参数了解吗;在显存消耗的哪个层面消耗的16transfomer词表是怎么构建的吗17.ES怎么构建的;这里面的关键词怎么构建的;BM25基于什么原理18.一部分milvus语义召回,一部分ES关键词召回;怎么返回用户的19.精排维度是多少,原理是什么20.rerank精排基于什么;为撒精排效果更好21.你觉得这些策略涉及有哪些问题;讲了四个问题权重;向量维度;双向量检索的策略;切分策略(切分维度)22.针对上述的你提的问题,说出自己解法23.最核心的一个指标的什么;最核心的指标;归纳出最核心的一个综合指标24.function calling mcp skill,解释概念;用到什么场景;分别解决了什么问题答得不好25.prompt engining ,context  engining,hareness enginering 解释什么问题答得不好26.抽象类和接口却别27.jvm内存回收;什么情况下适合标记清除,什么标记整理28存活时间怎么定义这里列下六个ai概念和解释24. Function Calling、MCP、Skill:概念、场景与解决的问题这三个概念其实代表了 AI 智能体(Agent)与工具交互的三个不同层级:底层协议、通信标准、业务封装。1. Function Calling (函数调用)概念:这是大模型的一种底层能力。它让模型不仅能输出文本,还能输出结构化的数据(如 JSON),告诉程序“我要调用哪个函数,参数是什么”。解决的问题:解决了“模型说不清楚,程序读不懂”的问题。它打破了模型只能聊天的限制,让模型有了“手”,能触发外部动作。场景:简单的工具调用:查天气、计算器、查询数据库。提取结构化信息:把用户的一段话转换成 JSON 对象。2. MCP (Model Context Protocol,模型上下文协议)概念:由 Anthropic 提出的标准化通信协议。你可以把它理解为 AI 界的 USB-C 接口。它定义了一套标准,让 AI 应用(Client)能统一地连接到各种数据源和工具(Server)。解决的问题:解决了“连接碎片化”和“上下文孤岛”的问题。以前每接一个工具都要写一套适配代码,现在只要工具支持 MCP 协议,AI 就能直接连,不用重复造轮子。场景:企业级应用集成:统一连接本地文件、Google Drive、Slack、GitHub 等。跨平台工具共享:开发者开发一个 MCP Server,所有支持 MCP 的 AI 客户端都能用。3. Skill (技能)概念:这是面向业务的能力封装。它通常是一个包含指令、脚本、资源和提示词的“文件夹”或集合。Skill 往往基于 Function Calling 构建,但更复杂。解决的问题:解决了“工具零散,无法完成复杂业务”的问题。它把一个个原子化的函数(如“查航班”、“查酒店”)组合成一个有意义的业务能力(如“订机酒套餐”)。场景:复杂任务处理:比如“帮我策划一次旅行”,Skill 会自动规划步骤,依次调用查天气、订机票、订酒店的函数。垂直领域专家:比如“法律助手 Skill”,里面封装了查法条、写文书的特定流程和提示词。📌 总结对比表表格概念本质定位核心解决问题形象比喻Function Calling底层交互协议模型输出结构化指令神经信号(告诉手要动)MCP通信与调度层统一连接标准,避免重复开发USB 接口(通用插头)Skill业务能力层复杂任务编排与封装操作手册(怎么做菜)🧠 25. Prompt Engineering、Context Engineering、Harness Engineering这三个概念代表了 AI 应用开发从“手工作坊”到“系统工程”的进化过程。1. Prompt Engineering (提示词工程)解释:这是最早期的阶段。核心是“写咒语”。通过精心设计自然语言指令(如“你是一个专家,请一步步思考...”),引导模型输出更好的结果。局限:它是一次性的、静态的。如果任务太复杂,光靠一段话很难控制模型。2. Context Engineering (上下文工程)解释:这是目前的主流趋势。核心是“构建信息流水线”。它不再只关注那一句提示词,而是关注如何把最有效的信息(知识、历史、工具描述)在恰当的时机喂给模型。它包括 RAG(检索增强)、记忆管理、摘要压缩等技术。解决问题:解决了模型“记性差”、“知识过时”和“幻觉”问题。它把模型从一个“聊天机器人”变成了一个“拥有外部知识库的专家”。3. Harness Engineering (编排工程/智能体工程)注:Harness 在这里通常指“智具编排”或“系统 harness”,类似于 LangChain 或 AutoGen 这类框架所做的工作。解释:这是最高阶的阶段。核心是“系统级管控”。它不仅仅是给信息,而是设计一个工作流。比如:先让模型 A 写代码,再让模型 B 审查代码,如果报错再让模型 A 修改。它涉及多智能体协作、循环反馈、工具调用的逻辑编排。解决问题:解决了复杂任务的自动化执行和可靠性问题。📌 一句话总结进化史Prompt Engineering:教模型“怎么说话”。Context Engineering:给模型“参考资料和记忆”。Harness Engineering:给模型“ teammates(队友)和工作流程”。
查看28道真题和解析
点赞 评论 收藏
分享
03-31 16:42
中南大学 Java
人生第一次面试,从中午开始就紧张的不行,吞了两粒普萘洛尔,面试的时候确实一点没紧张了。问了快四十个问题,面经写出来才发现问题这么多,怎么记得看面经都是只有一二十个,是不是大家发的时候都精简了一些导致的?鼠鼠实力还是不够,死锁居然没想起来,aba问题一句话的事,也没看过,场景题也只能凭自己经验瞎编,没提前准备好在面试官人比较好,没答上来也给提示,说没关系。(感觉面试官也有点紧张,让我放松了不少)没有手撕也比较惊讶,不知道是出于何考虑。希望能有二面吧,给我一点正向反馈吧,压力真的是爆了问题:1. 请花大概五到十分钟,介绍一下你的项目经验,以及整体遇到的问题和如何解决的。2. 本地生活服务平台项目,是你一个人完成的还是团队合作完成的?3. 这个项目(本地生活服务平台)中,你觉得遇到了最重要、最难的问题是什么?你是如何解决的?4. 经过你这个缓存设计之后,你的整个系统 QPS 可以到多少?假如说我现在要扛 1 万 QPS 的话,你觉得整个系统还需要做什么升级改造?5. 你怎么样去识别哪些数据是热点数据的?6. 假如说你的系统一直运行得很好,突然某天出现了宕机,你觉得应该怎么去定位?大概的流程知道吗?7. 你觉得秒杀系统这种商品购买和普通的商品购买,它会有什么不同?整个系统需要考虑什么因素?8. 如果系统现在能扛 1000 QPS,瞬间来了 3000-4000 个客户秒杀,可能会发生什么?应该有什么措施去对抗/缓解这种情况?9. 你滑动窗口限流用的是什么组件?大概是怎么实现的?10. 针对第一个 下单资格判断Lua脚本,脚本主要的逻辑是什么?11. 如果配合 Lua 脚本的话,有没有什么注意事项?12. 假如因为不小心写了个 bug,这个 Lua 脚本执行需要 10 秒或者 20 秒,你觉得这个时候系统可能会发生什么情况?13. 假设 Redis 的 Lua 脚本正在执行一个扣减操作还没执行完,这时候其他客户端的请求打过来了,它会阻塞吗?还是不阻塞?14. 你们的项目里面用到 Caffeine,为什么用它?主要用它做什么?架构设计上有什么考虑?15. Caffeine 的淘汰策略你大概知道吗?16. 系统运行中如果出现慢 SQL,一般是什么原因?以及如何定位慢 SQL 问题?17. 假如系统用户量非常庞大(两三千万),要给数据库去加索引的话,这个索引加起来可能耗时两三个小时,在执行索引时需要注意什么?18. 你怎么样去测你的 QPS?你评估出来的 1000 QPS 主要是关注哪些指标?19. 本地生活服务平台是在公司里面的经历,还是你们自己的一个学习项目?20. 对于 Kafka 了解吗?它是怎么样保证消息顺序的?21. 即便做了缓存缓解压力,MySQL 还是可能有瓶颈,你觉得这个时候需要做哪些对 MySQL 的优化?22. 你说数据库做主从分离,读从库时,怎么样去保持主库和备库的数据一致性?23. 你们整个系统有没有用到什么监控?你觉得应该做哪些监控去保证稳定,避免发生用户投诉而你没感知的情况?24. 假如系统突然之间 CPU 报警到 90%,或者内存马上要不足了,你应该怎么样从哪些方面去排查?25. 假如系统做了集群,其中有台机器持续报警,你没时间定位,最快的止血方式是什么?26. 如果 Redis 数据更新了,但 Caffeine 的数据还是旧的(双缓存不一致),什么情况下会出这种 bug?发生了要怎么办?27. 订单系统里的超时关闭(延时任务),你觉得应该怎么实现?28. 怎么防范爬虫?29. 滑动窗口限流和固定窗口限流有什么区别?为什么用滑动窗口?30. 支付回调和关单任务可能同时操作同一个订单,应该怎么样去设计避免冲突?31. 你大概知道什么是 CAS 吗?这里面可能会有什么问题?除了空耗 CPU 之外,还有什么其他问题?了解过 ABA 问题吗?32. 谈到锁的升级,可以大概说一下 Java(Synchronized)锁的升级策略吗?33. 如何避免死锁?如果系统中确实出现了死锁,要怎么样去排查?34. Java 的 equals 和 == 有什么区别?一般重写 equals 的话,为什么还需要重写 hashCode?35. 对 Vibe Coding 了解吗?平时使用什么框架或工具?在使用这些 AI 工具生成代码的过程中,你遇到过什么问题?36. 假如用户提出恶意问题(提示词攻击),比如要求删除知识库文档,你如何避免这种恶意操作?37. 自动问答知识库系统(RAG)中,为什么要用 BM25 和向量混合索引?基于什么考虑?38. 你怎么样评价或者说评估你的 RAG 系统的好坏?应该做哪些测试?提交给决策者做可行性分析可以给出哪些数据?39. 如果用户问了 A 问题,预期 A 答案,但始终得到错误答案,你怎么样去定位排查这个问题反问1. 做的业务主要是什么?技术栈是什么样的?2. 实习生培养机制大概是怎样的?3. 真实的业务开发中,是否有用到 AI 技术?是怎么使用的?
发面经攒人品
点赞 评论 收藏
分享
03-25 21:50
已编辑
门头沟学院 Java
更新:中午面的,晚上约下一轮(下一轮应该是hr面了)。求问牛油们是直接拒offer还是当做一个备选项?(本人是后端选手😅)1. 简单自我介绍一下2. 你了解计算机网络吗?什么是TCP和UDP?3. TCP和UDP的内部实现有什么区别?TCP如何保证可靠性?4. 如果希望让UDP也具备一定的可靠性,你会考虑怎么去优化?5. 你了解HTTP协议吗?HTTP协议都有哪几个版本?分别底层基于什么协议实现?6. HTTP 1.0和1.1的区别?长连接是怎么实现的?7. 常见的长连接实现方式有哪些?8. 如果有1亿用户都建立长连接不断开,对后台压力巨大,如何优化?(既要快和稳定,又要扛住压力)9. 长连接会对后台造成压力,如何设计后台机制来管理用户状态?10. 你知道什么是进程和线程吗?11. 进程间通常有几种通信的方法?12. 你知道线程的死锁是什么意思?死锁产生的条件和如何避免?13. 什么是分布式死锁?如何避免分布式死锁的产生和恢复?14. 代码审查题:分析一段Java实现的DataCache代码(使用SharedPreference)存在的问题,包括代码实现bug和代码设计问题15. 算法题:最大子序和团队是QQ浏览器,比一面难一些,但因为我简历写的全是后端的东西,就没有拷打项目。有些八股问太深了没答出,算法题秒了,代码审查的bug找的不是很全,感觉要考虑高并发问题吧?
查看15道真题和解析
点赞 评论 收藏
分享
评论
3
20
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务