秋招面试问题整理

华为-数通产品

一面(2021-08-09 15:00 - 16:30)

基础知识

  1. 面向对象有哪些特性?分别在java里是如何体现的,举例说明?
  2. 你在开发过程中用的Java的哪个版本?Java8有哪些新特性?在实践中你是如何运用的?
  3. Map容器,输入c:1,a:2,b:3,按输入顺序输出,用什么类型的Map?(LinkedHashMap)
  4. HashMap是线程安全的吗?Java是如何保证线程安全的?synchronized的工作原理?(AQS的工作原理没问)
  5. HashMap的key是唯一的吗?Java如何比较两个key是否唯一?
  6. 以排序为例,如何用泛型重写?
  7. 定义一个泛型的步骤是怎样的?
  8. 为什么要用泛型?
  9. 用过反射吗?怎么用的?
  10. Spring 是怎么实现AOP的?

工程实践

  1. 前后端分离的项目中,前后端都分别是部署在哪的?
  2. 前端(Vue框架)是如何给后端发送数据的?
  3. 后端部署远程服务的时候,用的jar包还是source code?maven对这两种方式是如何部署的?

算法题

题目

两个岛屿间的最短路径

是lc中的岛屿数量问题的变形,该题中限制一个二维矩阵中有且只有两个岛屿,试返回两个岛屿之间的最短路径?

面试记录

考虑到返回的最小值的两个岛可能来自同一片岛屿,所以一上来要对每个岛所属的岛屿类型进行明确;

step1. 对二维矩阵进行遍历,用dfs算法为同一个岛屿上的岛进行类型标记;

step2. 再对二维矩阵进行遍历,如果当前格子是一个岛,分别对其上下左右进行dfs,如果旁边的格子也是岛,说明它们来自同一片岛,不进入dfs,如果不是岛,则进入dfs;

step3. dfs函数中,先对i, j做边界校验;然后对当前各自做校验,如果当前格子是一个岛,判断岛的类型,并与最初的岛的类型做比较,不同的话,更新最小值。如果当前格子不是一个岛,再对它的上下左右进行dfs。

反思总结

一面总体感觉,面试官更侧重对Java基础和工程经验的考察。然后第一部分准备的不够充分,第二部分是目前的短板,需要后续准备中分别补齐。

问的内容比较全面,但在深度上不是很深,只要对相关知识点,做下准备,能把问的问题接住就行,不需要过多的展开。

二面(2021-08-09 16:30 - 18:00)

实习项目

  1. 数据封装的时候,可选字段是如何处理的?有没有校验机制?
  2. 用过哪几种线程池,在实际开发中,什么场景下使用的?
  3. 数据库中一张表很大的时候,是如何处理的?

基础知识

  1. Spring 的IoC 和 AOP?
  2. Spring容器初始化时是如何装载Bean的?Application Contest|Bean Factory(Bean的生命周期)?
  3. JVM Java堆的内存是如何划分的?(新生代 老年代)
  4. JVM 新生代和老年代的比例一般是多少?
  5. JVM 调优经验?

算法题

题目

105. 从前序与中序遍历序列构造二叉树

面试记录

这道题之前做过,思路上还是很快就知道解法的。但是好久没刷了,在实现的时候遇到了巨大的阻碍。好在面试官给了积极的提示,但是在最初给出提示之后,后来在我实现卡住的时候,也没有继续提示。

当时心态很爆炸,想直接放弃的。但一想从面试官给提示的感觉来看,他还是希望我能做出来的,如果放弃了,很可能因为这一点把我pass掉。

这个时候我静下心重新捋了下过程,根据dfs的入参,和递归调用的特性,把整个代码写出来了。

反思总结

手撕代码环节面试官给出了一个非常宝贵的建议:一定要养成面向接口编程的好习惯。一个问题拿来,先对问题进行步骤拆解,具体实现的时候,一定要分清代码层次。

以该题为例,写dfs()的时候,在传参确定前序中序数组的左右边界的时候花费了很长时间,并且写的代码耦合度高,如果后期维护排查出问题,不利于修改。因此一个好的做法是,再新建一个工具函数专门用来解决左右边界的确定,这样如果因为左右边界出错,只需要修改工具函数即可。

通过这道题和面试官的交流,我认为考察角度有:1. 根据提示,是否有能力把问题独立解决出来,而不是因为这道题之前做过,现在忘了,就不能当作一个新的问题解决;2. 编程习惯考察,代码耦合程度是否较低,写出来的代码是否利于后期维护和排查问题;3. 对于面向接口编程,结构化编程的理解和应用。

三面(2021-08-10 16:00 - 16:45)

主管综面

  1. 实习期间认为有哪些成长?
  2. 你经历的最大的问题和挑战是什么?
  3. 从内心上是如何感受和看待这些困难的?
  4. 工作岗位分布在北京、南京、武汉、东莞,你的意向是什么?

反问环节

  1. 团队主要的工作职责?(做供应链产品开发)
  2. 团队的组织架构大致是怎样的,一个小组多少人?
  3. 上下班双休加班情况(周三鼓励健身、周五鼓励早下班,其他工作日弹性制(区间一小时),满足8小时就可,上班时间看城市,晚上九点有班车)
  4. 有哪些定期的学习分享(mentor制,半年试用期,有一个答辩。平时会有技术栈专题的技术分享交流,团队有专门的架构师,负责产品升级迭代)
  5. 半年试用期答辩的后果和影响?(淘汰制,5% - 10%,主要淘汰不适应华为工作环境的人)
  6. 升职加薪周期(基本两年升一级,优秀的一年一级,非常优秀的一年两级)
  7. 户口问题(看北京给的指标,每年也都不一样,需要进一步和hr沟通;工作以后排队拿户口,但过程比较复杂)

腾讯-WXG微信支付

一面(2021-08-19 16:00 - 17:30)

算法题(1、2选一道,3、4选一道,40min)

  1. 旋转矩阵
  2. 和为K的子数组
  3. 用拉链法实现hash,接口:插入、查找,删除
  4. 实现大根堆的构建方法和弹出堆顶方法

基础知识

  1. 事务ACID分别指什么?具体解释一下
  2. 事务的隔离级别
  3. 数据库锁
  4. 多副本保持同步一致性的级别有哪些?(分布式系统一致性级别)
  5. tcp中TIMEOUT发生在什么时候,它起到什么作用?存在哪些问题?如何优化?
  6. tcp流量控制 & 拥塞控制的方法
  7. udp和tcp的区别
  8. 进程间通信方式
  9. 协程
  10. 哈希冲突的解决方式

反思总结

复盘

我选的是第二题和第四题,第二题用的前缀和,算法复杂度略高,面试官期待用滑动窗口解法,不过我可以大致说一下思路,他说他知道我明白他的意思了。

第四题悄悄百度了一下,按照链接里的demo写的。但是面试官要求写一个类,里面实现两个方法,这个需求沟通没有完全落实。

堆排序的实现算法之前已经写过,当成了一个模板,不过一直没有人问,等这次真的有人问起来了,还没完全派上用场。好在之前捋过思路,就算按照demo抄一遍,也能口述出整体过程。

通过这次面试能看出来,1、基础常考问题一定要烂熟于心;2、算法题做的漂亮才是王道。

一些细节反思

算法题写的还是混乱,还是停留在实现算法层面,能不能accept都是一回事,但是对面试官一定是不友好的。一定要在提交之前,对代码进行重构,加好注释!!!

回答问题的时候,要直问直答!学习的时候喜欢追根溯源,横纵建立联系。但是面试的时候一定不要卖关子,面试官问什么,直接上来先回答出答案。但通常答案都是一两句话,很难算得上充分详实。这个时候需要对答案进行补充。补充思路大概有以下几种:1、对答案的细节点进行解释说明;2、场景举例说明;3、对所考察知识点相关知识点进行展开(将提前整理的知识体系思维导图进行展开说,说枝不说叶——只讲联系,不讲细节)。

一些套路

很难对所有的问题在短时间内进行充分的响应,有时候需要调用自己提前整理好的资料。这时候需要为找资料续一些时间。一个想到的办法是,可以对面试官的问题进行确认和复述,得到面试官的确认后,可以再问下,您这个问题是说**那块的内容吧?这个时候面试官一般都会确认,如果不是的话,也会引导你他想问的点。以上整个这块的时间完全够global search了。。

百度-ACG智慧城市

一面(2021-08-23 10:00 - 11:30)

准备阶段

  1. 实习期间工作内容和工作流程?
  2. 工作的时候使用工具平台过程中遇到了问题是怎么解决的?

基础知识

  1. synchronized 和 ReentrantLock的区别?
  2. ReentranLock 在释放锁的时候做了哪些操作?
  3. 可重入性在源码是如何体现的?
  4. Java容器的继承关系
  5. HashMap底层实现原理?
  6. 讲一下HashMap的put的实现过程?
  7. TreeMap底层实现原理?(我说没看过TreeMap源码,面试官把问题改成了如果让我设计一个排序的Map,要怎么设计?)

算法题

用快排实现链表排序:排序链表

反思总结

一个比较强烈的感受就是,面试官很喜欢问重点知识点的原理实现的流程。如果能把一个闭环的流程说清楚,面试官就会很满意,至于源码中实现的细节不会过问。

这里提供了一个很好的学习思路,也是面试中一个考察点:在基础知识面够(抛出一个简单常见的基本问题你得能接得住)的基础上,在表达陈述的时候,一定要流程化,不要东一个点,西一个点,尽量做到让整个表述完整,让一个小白听完也知道大概是怎么回事。

二面(2021-08-31 10:30-11:50)

  1. thrift的优势在哪,为什么公司使用rpc框架?
  2. thrift用的什么通信协议?
  3. 美团如何排查错误日志?如何根据traceid找到对应分布式服务器哪一台?(没搞清楚他想问的啥)
  4. mq选型
  5. 令牌桶算法整个实现过程?
  6. 说一下分布式事务?
  7. spring ioc & aop
  8. 数据库 ${} 和 #{} 的区别?
  9. having 和 group by
  10. 线程池参数,返回值
  11. java实现多线程的方法?(线程池 & new一个线程,手动执行)
  12. 线程同步方法?(信号量)
  13. redis 数据结构及使用场景

快手-xxx

一面(2021-08-23 14:00 - 14:50)

  1. 线程池在什么场景下使用的?参数有哪些?不使用会怎么样?
  2. 登录之后是如何做鉴权的?
  3. cookie 和session 的区别?分布式session存在哪些问题?redis的高可用?
  4. 从用户发起一个请求,到客户端响应,整个流程描述下?
  5. List 和 ArrayList底层原理,二者差别?
  6. 异常有哪些,分类说明?
  7. Object类的方法有哪些?

算法题

实现 strStr()

反思总结

无论基础问题还是算法题都比较基础,但是回答的并不好,很难做到,面试官随机抛出一个问题,我都能给出一个系统全面的回答。

应该回归最基础的问题,把知识系统化整理并记忆。

京东-京东零售

一面(2021-08-31 19:00 - 19:40)

  1. concurrenthashmap 1.7&1.8的区别?和hashtable的对比
  2. volatile
  3. 锁升级过程,重量级锁好处
  4. 垃圾回收算法
  5. cms和G1对比
  6. spring源码
  7. 实习中遇到的技术挑战
  8. 打算留美团吗
  9. 如何看待加班