宜信面经(研发工程师)
一面
1、 马从原点在坐标系走日字,任何方向都可以走,问能不能走到所有的点?(想了半天我说可以,但是我不知道怎么证明,面试官说从原点可不可以走到(0,1),我试了一下可以,然后说既然可以移动一步,那必然可以走到所有的点)。
给一个点,问从原点走到这个点最短多少步?我刚开始说dfs,判断八个方向,然后继续判断八个方向,面试官说你这可能永远都走不到,没有结束,然后提示说你这是个八叉树,就看原点在最近的那一层,我说那就BFS,然后让我写代码,写完问我时间复杂度,问这个时间复杂度和坐标点(m,n)哪个是一个量级的,不知道,面试官说和大的那个一个量级,继续问有什么优化,我说可能会有重复的点要去重,那重复的点需要存起来,空间复杂度是多少,这个空间复杂度和(m.n)有什么关系,不知道,面试官说和大的那个平方是一个量级?(时间复杂度和空间复杂度算的脑阔疼)
二面
1、 Object有哪些方法,说几个。Hashcode和equals是干什么的
2、 Hashmap原理
3、 写代码:二叉树先序遍历
4、 写代码:树中两个节点的最短路径
三面
1、 介绍一下项目,有什么难点和挑战(没有,就是CRUD,强行说了个redis实现分布式锁,面试官就问得更加详细了,就不会了)
2、 介绍一下CountDownLatch,介绍一下线程池
3、 有一个无限长的双向链表,给一个list,里面存放的是这个链表里面的某些节点,如果几个节点是连着的,即为一个片段,问这个list里面存放的节点总共有几个片段?
例:…A<>B<>C<>D<>E<>F ….,这样的形式的双向链表,如果给的list里面有A、C、D三个节点,则存在两个片段,因为C、D是连着的是一个片段,A单独是一个片段.
4、 上题如果是单链表怎么解决?说了思路,然后让写代码实现一下。
5、 有一个四位密码锁,需要求一个万能密码串,这个密码串可以通过滑动窗口的方式试出所有的密码,例如123456,其包含了1234、2345、3456三个密码,问这个密码串长度最短多少?答10003。问为什么?让我证明一下。(面试官提示如果10004的长度,则必然有一个密码重复,通过反证得到最少10003个)。问怎么求,求出一个即可(面试官说应该有好多个),暴力搜索。优化:在暴力的同时判断有没有重复。(回来写代码跑了一下,跑两位密码跑出来了,四位的,跑了半个小时没跑出来)
考的大多是算法,估计凉凉。
#宜信##面经##Java工程师##秋招#