秋招面试问题整理
华为-数通产品
一面(2021-08-09 15:00 - 16:30)
基础知识
- 面向对象有哪些特性?分别在java里是如何体现的,举例说明?
- 你在开发过程中用的Java的哪个版本?Java8有哪些新特性?在实践中你是如何运用的?
- Map容器,输入c:1,a:2,b:3,按输入顺序输出,用什么类型的Map?(LinkedHashMap)
- HashMap是线程安全的吗?Java是如何保证线程安全的?synchronized的工作原理?(AQS的工作原理没问)
- HashMap的key是唯一的吗?Java如何比较两个key是否唯一?
- 以排序为例,如何用泛型重写?
- 定义一个泛型的步骤是怎样的?
- 为什么要用泛型?
- 用过反射吗?怎么用的?
- Spring 是怎么实现AOP的?
工程实践
- 前后端分离的项目中,前后端都分别是部署在哪的?
- 前端(Vue框架)是如何给后端发送数据的?
- 后端部署远程服务的时候,用的jar包还是source code?maven对这两种方式是如何部署的?
算法题
题目
两个岛屿间的最短路径
是lc中的岛屿数量问题的变形,该题中限制一个二维矩阵中有且只有两个岛屿,试返回两个岛屿之间的最短路径?
面试记录
考虑到返回的最小值的两个岛可能来自同一片岛屿,所以一上来要对每个岛所属的岛屿类型进行明确;
step1. 对二维矩阵进行遍历,用dfs算法为同一个岛屿上的岛进行类型标记;
step2. 再对二维矩阵进行遍历,如果当前格子是一个岛,分别对其上下左右进行dfs,如果旁边的格子也是岛,说明它们来自同一片岛,不进入dfs,如果不是岛,则进入dfs;
step3. dfs函数中,先对i, j做边界校验;然后对当前各自做校验,如果当前格子是一个岛,判断岛的类型,并与最初的岛的类型做比较,不同的话,更新最小值。如果当前格子不是一个岛,再对它的上下左右进行dfs。
反思总结
一面总体感觉,面试官更侧重对Java基础和工程经验的考察。然后第一部分准备的不够充分,第二部分是目前的短板,需要后续准备中分别补齐。
问的内容比较全面,但在深度上不是很深,只要对相关知识点,做下准备,能把问的问题接住就行,不需要过多的展开。
二面(2021-08-09 16:30 - 18:00)
实习项目
- 数据封装的时候,可选字段是如何处理的?有没有校验机制?
- 用过哪几种线程池,在实际开发中,什么场景下使用的?
- 数据库中一张表很大的时候,是如何处理的?
基础知识
- Spring 的IoC 和 AOP?
- Spring容器初始化时是如何装载Bean的?Application Contest|Bean Factory(Bean的生命周期)?
- JVM Java堆的内存是如何划分的?(新生代 老年代)
- JVM 新生代和老年代的比例一般是多少?
- JVM 调优经验?
算法题
题目
面试记录
这道题之前做过,思路上还是很快就知道解法的。但是好久没刷了,在实现的时候遇到了巨大的阻碍。好在面试官给了积极的提示,但是在最初给出提示之后,后来在我实现卡住的时候,也没有继续提示。
当时心态很爆炸,想直接放弃的。但一想从面试官给提示的感觉来看,他还是希望我能做出来的,如果放弃了,很可能因为这一点把我pass掉。
这个时候我静下心重新捋了下过程,根据dfs的入参,和递归调用的特性,把整个代码写出来了。
反思总结
手撕代码环节面试官给出了一个非常宝贵的建议:一定要养成面向接口编程的好习惯。一个问题拿来,先对问题进行步骤拆解,具体实现的时候,一定要分清代码层次。
以该题为例,写dfs()的时候,在传参确定前序中序数组的左右边界的时候花费了很长时间,并且写的代码耦合度高,如果后期维护排查出问题,不利于修改。因此一个好的做法是,再新建一个工具函数专门用来解决左右边界的确定,这样如果因为左右边界出错,只需要修改工具函数即可。
通过这道题和面试官的交流,我认为考察角度有:1. 根据提示,是否有能力把问题独立解决出来,而不是因为这道题之前做过,现在忘了,就不能当作一个新的问题解决;2. 编程习惯考察,代码耦合程度是否较低,写出来的代码是否利于后期维护和排查问题;3. 对于面向接口编程,结构化编程的理解和应用。
三面(2021-08-10 16:00 - 16:45)
主管综面
- 实习期间认为有哪些成长?
- 你经历的最大的问题和挑战是什么?
- 从内心上是如何感受和看待这些困难的?
- 工作岗位分布在北京、南京、武汉、东莞,你的意向是什么?
反问环节
- 团队主要的工作职责?(做供应链产品开发)
- 团队的组织架构大致是怎样的,一个小组多少人?
- 上下班双休加班情况(周三鼓励健身、周五鼓励早下班,其他工作日弹性制(区间一小时),满足8小时就可,上班时间看城市,晚上九点有班车)
- 有哪些定期的学习分享(mentor制,半年试用期,有一个答辩。平时会有技术栈专题的技术分享交流,团队有专门的架构师,负责产品升级迭代)
- 半年试用期答辩的后果和影响?(淘汰制,5% - 10%,主要淘汰不适应华为工作环境的人)
- 升职加薪周期(基本两年升一级,优秀的一年一级,非常优秀的一年两级)
- 户口问题(看北京给的指标,每年也都不一样,需要进一步和hr沟通;工作以后排队拿户口,但过程比较复杂)
腾讯-WXG微信支付
一面(2021-08-19 16:00 - 17:30)
算法题(1、2选一道,3、4选一道,40min)
基础知识
- 事务ACID分别指什么?具体解释一下
- 事务的隔离级别
- 数据库锁
- 多副本保持同步一致性的级别有哪些?(分布式系统一致性级别)
- tcp中TIMEOUT发生在什么时候,它起到什么作用?存在哪些问题?如何优化?
- tcp流量控制 & 拥塞控制的方法
- udp和tcp的区别
- 进程间通信方式
- 协程
- 哈希冲突的解决方式
反思总结
复盘
我选的是第二题和第四题,第二题用的前缀和,算法复杂度略高,面试官期待用滑动窗口解法,不过我可以大致说一下思路,他说他知道我明白他的意思了。
第四题悄悄百度了一下,按照链接里的demo写的。但是面试官要求写一个类,里面实现两个方法,这个需求沟通没有完全落实。
堆排序的实现算法之前已经写过,当成了一个模板,不过一直没有人问,等这次真的有人问起来了,还没完全派上用场。好在之前捋过思路,就算按照demo抄一遍,也能口述出整体过程。
通过这次面试能看出来,1、基础常考问题一定要烂熟于心;2、算法题做的漂亮才是王道。
一些细节反思
算法题写的还是混乱,还是停留在实现算法层面,能不能accept都是一回事,但是对面试官一定是不友好的。一定要在提交之前,对代码进行重构,加好注释!!!
回答问题的时候,要直问直答!学习的时候喜欢追根溯源,横纵建立联系。但是面试的时候一定不要卖关子,面试官问什么,直接上来先回答出答案。但通常答案都是一两句话,很难算得上充分详实。这个时候需要对答案进行补充。补充思路大概有以下几种:1、对答案的细节点进行解释说明;2、场景举例说明;3、对所考察知识点相关知识点进行展开(将提前整理的知识体系思维导图进行展开说,说枝不说叶——只讲联系,不讲细节)。
一些套路
很难对所有的问题在短时间内进行充分的响应,有时候需要调用自己提前整理好的资料。这时候需要为找资料续一些时间。一个想到的办法是,可以对面试官的问题进行确认和复述,得到面试官的确认后,可以再问下,您这个问题是说**那块的内容吧?这个时候面试官一般都会确认,如果不是的话,也会引导你他想问的点。以上整个这块的时间完全够global search了。。
百度-ACG智慧城市
一面(2021-08-23 10:00 - 11:30)
准备阶段
- 实习期间工作内容和工作流程?
- 工作的时候使用工具平台过程中遇到了问题是怎么解决的?
基础知识
- synchronized 和 ReentrantLock的区别?
- ReentranLock 在释放锁的时候做了哪些操作?
- 可重入性在源码是如何体现的?
- Java容器的继承关系
- HashMap底层实现原理?
- 讲一下HashMap的put的实现过程?
- TreeMap底层实现原理?(我说没看过TreeMap源码,面试官把问题改成了如果让我设计一个排序的Map,要怎么设计?)
算法题
用快排实现链表排序:排序链表
反思总结
一个比较强烈的感受就是,面试官很喜欢问重点知识点的原理实现的流程。如果能把一个闭环的流程说清楚,面试官就会很满意,至于源码中实现的细节不会过问。
这里提供了一个很好的学习思路,也是面试中一个考察点:在基础知识面够(抛出一个简单常见的基本问题你得能接得住)的基础上,在表达陈述的时候,一定要流程化,不要东一个点,西一个点,尽量做到让整个表述完整,让一个小白听完也知道大概是怎么回事。
二面(2021-08-31 10:30-11:50)
- thrift的优势在哪,为什么公司使用rpc框架?
- thrift用的什么通信协议?
- 美团如何排查错误日志?如何根据traceid找到对应分布式服务器哪一台?(没搞清楚他想问的啥)
- mq选型
- 令牌桶算法整个实现过程?
- 说一下分布式事务?
- spring ioc & aop
- 数据库 ${} 和 #{} 的区别?
- having 和 group by
- 线程池参数,返回值
- java实现多线程的方法?(线程池 & new一个线程,手动执行)
- 线程同步方法?(信号量)
- redis 数据结构及使用场景
快手-xxx
一面(2021-08-23 14:00 - 14:50)
- 线程池在什么场景下使用的?参数有哪些?不使用会怎么样?
- 登录之后是如何做鉴权的?
- cookie 和session 的区别?分布式session存在哪些问题?redis的高可用?
- 从用户发起一个请求,到客户端响应,整个流程描述下?
- List 和 ArrayList底层原理,二者差别?
- 异常有哪些,分类说明?
- Object类的方法有哪些?
算法题
反思总结
无论基础问题还是算法题都比较基础,但是回答的并不好,很难做到,面试官随机抛出一个问题,我都能给出一个系统全面的回答。
应该回归最基础的问题,把知识系统化整理并记忆。
京东-京东零售
一面(2021-08-31 19:00 - 19:40)
- concurrenthashmap 1.7&1.8的区别?和hashtable的对比
- volatile
- 锁升级过程,重量级锁好处
- 垃圾回收算法
- cms和G1对比
- spring源码
- 实习中遇到的技术挑战
- 打算留美团吗
- 如何看待加班