我的后台Java面经(阿里、腾讯、头条、京东、IBM等)

438 阅读14分钟

简介

经过招聘季每个人都会有相当多的面试经历,对我来说把这些写出来一方面是为了学习,另外一方面也希望能够为之后求职的同学提供一定的借鉴意义 我的笔试经历会把主要记得的题目列出来 我的面试经历详细介绍了以下几点

面试岗位 面试体验:这个有主观成分,但也能从我个人的侧面去反映公司是如何对待招聘的,请记住“面试者也是面试官,反之亦然” 面试问题:在面试过程中被面试官提问的问题

拉勾offer工厂2017资料,是当时拉勾做的一系列沙龙活动,其中ppt提到的面试问题很有参考价值,故而放到其中 我面试的岗位主要是后台开发和Java开发岗,有关Java的复习策略在我的一篇博客中有写 了解单独公司的单独部门情况,我又拆分了一下各公司的情况,想单独了解公司的可以去看各个公司的我个人面试情况

京东金融面试

面试岗位为JAVA开发实习生,一共有两面,第一位是年长的工程师,第二位是年轻的工程师,侧重角度不一样。第一位主要了解你的整体情况和个人想法,以聊天为主。第二位问了很多细节的题目,以问答为主。下面列举一下我遇到的问题

java设计模式有哪些,讲讲单例模式具体怎么写还有具体用在哪里?装饰者模式是什么意思?

现在有三个表 S表

C表

SC表

查找出“数学分数最高的人名”,写个sql语句代码,写的时候我使用了in,然后问到in和exist的区别,哪个效率更好?SQL优化了解哪些?

springmvc路由你是怎么写的 答:xml配置或者注解,RequstMapping springmvc如何接受ajax数据 答:有两个注解,一个能接收json数据,另外一个能返回json数据,好像是ResponseBody和RequestBody 前端多级级联的select怎么写,比如说选择了河北省,下一级就会出现城市名 答:使用jQuery,change监听函数里写ajax,返回后使用append函数加入下一级标签中 java的堆和栈怎么理解的 String a = "a",“a”存到了java的哪个区 答:静态区

a的值是多少? 答:是“a”,因为java都是值传递,不是引用传递

"a"会被销毁么? 答:不会,因为string的加法运算相当于新建了一个对象,所以不会销毁

mybatis #和$区别 linux如何查看进程占用cpu和内存情况 答:top指令 linux如何部署war包?

java环境搭建都用什么指令?

dns服务器如果域名和ip不一致,访问了该域名会发生什么? 如果路由器上路由表内没有你要访问的地址会发生什么? sql优化知道什么 数据库字符乱码可能是哪儿的问题 nosql数据库用过什么,为什么使用 redis用过么,怎么理解的 栈都有哪些典型用途 答:十进制转二进制、括号匹配、二叉树非递归遍历 java虚拟机都知道什么 抽象类和接口有什么区别 重载和重写的区别 有没有看过框架源代码 sql分页查询怎么写 mybatis实现原理、springmvc实现原理 SQL语句exist和in的区别

还有如果简历里放了博客的话,人家可能会问你分享一篇你觉得你写的不错的博客 查找13条到23条的sql语句 答:select * from name limit 13,10

滴滴面试

面试岗位为后台开发实习生,一共有两个面试官,面试的部门为地图开发部,主要使用语言是C++和Python,后台使用的是flask框架,总体上问的比较笼统,问细节上的不是特别多,有一些问题也没答上来

数据库引擎InnoDB和MyISAM的区别 大数据方面你读过什么书么,想做这方面的你有什么优势 写个二叉树的广度遍历和深度遍历 ORM的实现原理 Map Reduce的具体细节步骤

今日头条面试

面试岗位为后台开发实习生,一共有四个面试官,面试的部门为懂车帝,主要是做后台服务的,前三个应该是技术面试,但是第三个面试特别快,前两个面的比较久,第四个是hr面试,聊了聊今日头条的情况,带我参观了下今日头条的工作区,整体环境还蛮不错的,据说提供一日三餐

第一面

介绍一下项目 讲讲区块链和最近读的论文 比如1234的下一个比他大的数是1243,再下一个是1324,如何给出下一个数找到比他大的数 二叉树上最大值和最小值节点路径距离是多少? 3 2 4 1 0 像上面的树就是0和4,距离为3,其实本质就是遍历一遍先找到最大值和最小值,然后从根路径上进行遍历,从两个值路径分开开始记录遍历层数,然后加起来就是距离 问问实习经历

第二面

介绍一下项目 讲讲区块链,对我们当前的设计产生了极大的疑问,我也没有解释清楚,然后被鄙视了下研究生毕业设计没准备、研究方向不明确 问我熟悉哪门语言,我说java和python,然后问我学习过c++木有,我说本科学习过,然后就出了个strcpy库函数的实现,说很简单,,,结果空指针处理什么的,也没弄清楚,最后也没写明白 有两个文件a和b,找出里面相同的url,最开始我写的是遍历,时间复杂度是n2,然后用排序复杂度是nlogn,想起了字典树,复杂度是nlogm,面试官说可以用hash,复杂度就到n了,整个过程也不是很顺利

第三面

讲讲区块链,又讲了下我看的论文 问问你觉得你的优点是什么,缺点是什么 你觉得你是属于更能坚持的类型还是说更喜欢接触不同的新技术类型 除了技术外还有什么爱好 问问实习经历

第四面hr小姐姐

问问你的学习方向,用什么语言 头条你都了解什么 工作时间了解么 balabala,总之hr还是相对和蔼可亲的

面完一天后生无可恋,回来就睡,太难受了

Redhat面试

面试岗位为JAVA的wildfly中间件开发实习生,套路和之前的不一样,是先让做一个工程,使用maven做一个J2EE的hello world,然后做单元测试,改了好久,直到这周才接到面试通知,本来打算直接是外国人的外语面试,但是由于经理很忙,就先由小组的中国人来面试。主要语言就是用JAVA,然后也先讲清楚了要做什么,和其他的面试很不一样,也是怕我没想清楚,毕竟和其他的实习性质有所区别,是在做开源,而且不是做常见的web开发,而是底层中间件web服务器的实现,包括需要测试东西,其实感觉我的个人经历和要求其实并没有很搭配,面试官对web开发相关的也并不是很了解,更多的是希望我沉下心来读很多的源代码,会很枯燥。

了解java什么,lambda表达式本质是什么? maven中之前让你写的phase表示什么意思? 英语自我介绍一下,你想学的是什么,不想学什么(纯英语面试)? git rebase是做什么用的? 有关注过什么开源项目? 平时用什么操作系统 之前说的工程里的有关单元测试的问题你懂了么?不应该throw异常了还能正常通过单元测试。

这只是第一次面试,还有下一次的意大利视频面试,是和外国面试官交流,压力很大。

Redhat 二面

第二次面试真是姗姗来迟,其实就是过去和中国面试官和外国面试官一起聊天,问问我几个基本的问题,并没有技术问题,其实就是练习下英语口语,自己渣的可以,至于会不会被录取也不知道,听天由命吧。

阿里巴巴面试

面试岗位为JAVA开发实习生,今天已经不是第一次面试了,之前有一次,但是当时没记录,只好记录这次的了

自我介绍 讲一个项目,我说的区块链,然后围绕着区块链说了一堆,比如说我没回答上来的,有没有做性能测试,还有orderer节点都有什么服务 最大堆概念 排序算法比较排序时间复杂度,如何查找最大的1000个数 有没有什么排序算法能够小于nlogn的

美团面试

这次面试一共有两面,第一面比较简单问了很多基础问题,基本都能答上来,第二面问了很多细节问题,有很多发现自己理解不深刻,出现了问题,记录几个

跨域的理解,只有浏览器才可能存在跨域,跨域其实是在请求了某个域名的服务之后同时又去发起了其他域名的请求,所以只有浏览器可能存在,因为他会请求回来静态资源后解析再次发送请求,而类似于postman就不会有这样的问题,因为他得到的是静态资源文本而不会再次做解析 tomcat解析sevlet发生了什么? 对于抢单场景要怎样设置数据库,要分开然后利用nginx根据hash去存库,查找也是同理 JSONP如何理解,为什么没有使用 还问了两道算法题,但是自己写的比较慢,而且也不敢保证正确,毕竟好久没练了,但是题目都不难 最小堆如何做插入和删除的 HashMap如何映射到内存里 如何评价自己在云平台项目的表现 数据库线程池有哪几种 对称密钥和非对称密钥是用来解决什么问题的

IBM电话

投递的邮件有作用了,那边在做区块链医疗,招收实习生

是否有golang的开发经验 fabric了解哪些 nodejs开发经验 医疗你们这边在做什么

京东金融面试

面试岗位

JAVA开发实习生

面试体验

一共有两面,电话面试,第一面考察区块链,第二面考察java基础,问了很久,态度很认真

面试问题

区块链交易流程? java中spring是如何理解的? 四道算法题: 第一题:一个人一次可以上一个台阶或者两个台阶,问到第n个台阶有多少种方法? 第二题:n*m的迷宫,只能向右或者向下走,从左上角到右下角有多少条路线 第三题:100101这样的数组,1表示有人在椅子上,0表示没人在,找到一个没人在的地方且距离所有人的距离之和最大 第四题:有一亿个数,找到第10大的数

  1. hashmap结构
  2. get和post区别

京东金融面试

面试岗位

JAVA开发实习生

面试体验

非常糟糕!因为之前面试过所以只面了一次,而且在此次面试中知道了京东原来打着提前批的旗号结果是实习不给校招offer,真是套路满满,而且按照时间到了通州的京东之后hr临时预约邀请码,过了半个小时才带我上去,上去面了之后,居然又是半个小时没有人理我了,面试场地已经没有人了而且到了下班时间,然后给hr打电话不接发微信不回,过了十分钟我离开京东大厦,拉黑了京东金融的hr,这次面试导致了我生平第一次拉黑别人

面试问题

java有什么更多的学习和了解,分布式?多线程? 金融系统的容错级别很高,讲了很多,balabala

拼多多笔试

不用多说了,四道算法题

第一题

题目描述 自动售货机里有 N 瓶复制可乐。复制可乐非常神奇,喝了它的人会复制出一个自己来!

现在有 Alice, Bob, Cathy, Dave 四个人在排队买复制可乐。买完的人会马上喝掉,然后他和他的副本会重新去队伍的最后面排队买可乐。

问最后一个买到复制可乐的人叫什么名字?

输入描述: 输入仅有一行,包含一个正整数 N (1 <= N <= 1,000,000,000),表示可乐的数量。 输出描述: 输出喝到最后一罐复制可乐的人的名字。 示例1 输入 8 输出 Bob 说明: 前8个喝到可乐的人依次为:Alice, Bob, Cathy, Dave, Alice, Alice, Bob, Bob.

解题思路 代码 import java.util.Scanner;

public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String[] names = {"Alice", "Bob", "Cathy", "Dave"}; while (sc.hasNext()) { long N = sc.nextLong(); long i = 0; long basic = 4; while (N > basic) { N -= basic; basic *= 2; i++; } int y = (int) Math.ceil(N / Math.pow(2, i)); System.out.println(names[y - 1]); } } }

第二题

题目描述 四年一度的世界杯又来了!小多在公司内发起了一个票选最强球星的活动。共有 N 个候选球星,每位投票者需要在选票上为每位候选球星评定一个实例等级,等级由英文字母表示,'a' 级最高,'z' 级最低,共26级。

我们称候选球星 X 强于候选球星 Y,当「 X 的评级比 Y 高」的票数高于「 Y 的评级比 X 高」的票数。若一个候选球星强于任一其他候选球星时,则称该球星为“球王”。根据这个规则,至多只会有一个球王。需要注意的是也可能没有球王。现在给出所有 M 张选票,请你帮小多判断一下哪位候选球星是球王。

输入描述: 第一行包含2个整数 N、M,分别表示候选球星数量以及选票数量。接下来有 M 行,每行是一个长度为 N 的字符串,每个字符串表示一张选票上的信息。每个字符串的第 k (0 <= k < N) 个字符,

表示这张选票对第 k 个候选球星的评级。

数据范围: 1 <= N <= 50 1 <= M <= 50 字符串只包含小写英文字母(a-z)。

输出描述: 若有球王,则输出一行仅包含一个整数 X,表示编号为 X (0 <= X < N) 的候选球星是球王;若没有球王,则输出一行仅包含一个整数 -1 。 示例1 输入 4 3 acbd bacd bdca

输出 0

示例2 输入 4 1 acad

输出 -1

解题思路 代码 import java.util.Scanner;

public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); while (sc.hasNext()) { int N = sc.nextInt(); int M = sc.nextInt(); sc.nextLine(); String[] notes = new String[M]; for (int i = 0; i < M; i++) { if (sc.hasNext()) notes[i] = sc.nextLine(); }

        int[][] matrix = new int[N][N];
        for (int i = 0; i < M; i++) {
            for (int j = 0; j < N; j++) {
                char a = notes[i].charAt(j);
                for (int k = j + 1; k < N; k++) {
                    char b = notes[i].charAt(k);
                    if (a < b) {
                        matrix[j][k] += 1;
                    } else if (b < a) {
                        matrix[k][j] += 1;
                    }
                }
            }
        }
        boolean flag = true;
        for (int i = 0; i < N; i++) {
            flag = true;
            for (int j = 0; j < N; j++) {
                if (i == j)
                    continue;
                if (matrix[i][j] <= matrix[j][i]) {
                    flag = false;
                    break;
                }
            }
            if(flag) {
                System.out.println(i);
                break;
            }
        }
        if(!flag)
            System.out.println(-1);
    }
}

}