2019滴滴java面试总结  (包含面试题) 

    本人6年开发经验、今年年初找工作,在互联网寒冬下成功拿到阿里巴巴、今日头条、滴滴等公司offer,岗位是既有php也有java后端开发,最终选择去了滴滴。

面试了很多家公司,感觉大部分公司考察的点都差不多,所以将自己的心得记下来,希望能给正在找或者准备找工作的朋友提供一点帮助。另外,目前在滴滴也做面试官的工作,身份从求职者变为面试官,看问题的很多角度也不一样,所以下文中既有求职者的视角,也有面试官的视角。

面试流程

   先说下面试流程,一般大公司都有3-4轮技术面,1轮的hr面。就阿里而言,我共经历了4轮技术面,前两轮主要是问基础和项目实现,第3轮是交叉面,两个面试官,主要是问项目实现和拓展。第4轮是部门老大面,主要就问一些架构、技术和业务的理解、个人发展比较抽象的东西了。

hr面主要就是跟你聊聊天,看看你的个人稳定性、价值观、主动性之类的,一般hr是不会挂人的,但很多人在hr面后挂了,原因其实不是你在hr面的表现不好(少数情况除外),而是你之前几面的表现一般,比60分要高一点(所以没在前面的面试直接挂了你),但是又没达到80分,这个时候公司基于hc、人才配比、与其他候选人的对比等多个维度考虑,最终决定是否给你offer。

另外要特别说下的是,今日头条对算法的考察会比较多,我面了4轮技术,每一轮都会问1到2个算法题,大概是leetcode上easy和medium难度。所以想去头条的同学最好先去leetcode上刷刷题。

要注意的点

  • 简历一到两页为最佳,将项目经历写2-3个左右就差不多了,一定要写最有亮点的项目
  • 工作经历的起始时间要写清楚,另外大公司都有背调,不要合并或省略一些比较短的工作经历,影响的可能不只是这次面试,而是之后可能都无法进这家公司
  • 博客没什么好文章,github没好项目就不要写在简历中了
  • 对于面试官的问题,想清楚再回答,如果觉得需要的时间可能比较长,可以跟面试官说我思考下、我整理下思路之类的
  • 遇到不会的问题直接说不会,不要不懂装懂
  • 遇到比较确定的问题,要有自信一点,有时候面试官可能会故意用怀疑的语气来考察你
  • 面试的过程中注意语速和吐字,本人在做面试官后,发现很多人说话语速很快,或吐字不清,导致原本会的问题也会让面试官觉得你没答到点上(尤其是电话面)
  • 面试过程中可以自信但不要与面试官争执
  • 面试完后不要直接问面试结果
  • 面试保持自信而不自大,曾经问一位候选人说对hashmap是了如指掌,结果问到hashmap扩容时需不需要重新计算hash就懵逼了。对于很多人来说,面试官总有办法把你问倒的。
  • 每次面试后都总结有哪些答的不好的地方,有哪些知识点的盲区,解决掉。
  • 被问到为什么想跳槽的时候,因该从自身发展等角度出发,而不是吐槽前公司。

 

另外,在求职的过程中也碰到过少数没有素质的面试官,比如一上来就一副很不屑的语气,话没说两句开始diss你的项目,给人的体验很不好。所以也请各位面试官或将来要做面试官的同学,能在面试的过程中保持基本的礼貌和尊重,就像在阿里常说的:你面试别人的时候,别人也在面试着你。

最重要的一点,不要因为几次的面试失败就开始怀疑自己,永远记住,面试的结果=实力+运气。有时候你擅长的东西可能面试官根本不会,所以他也不可能花很多时间去问他不懂的东西;有时候可能他问你的你都会,但是可能因为对方提问方式、语气等原因,答的就是不顺畅。

接下来说技术相关的考察。

总的来说,技术相关的考察主要分为两大块,一是基础,二是经验。

基础包括php基础,底层原理、数据库、中间件等,来自于日常的积累和面试前的准备。

经验包括以往做过的项目、解决的问题、以及一些场景题(比如你的项目如果流量大了十倍如何保证可用)。

 

 

 

下面是我把一些常见问题设置成了单选题,也包含了部分解析

 

1.下列关于php垃圾回收的说法,错误的是?

a、开启/关闭垃圾回收机制可以通过修改php配置实现

b、可以在程序中使用gc_enable() 和 gc_disable()开启和关闭。

c、php中的垃圾回收机制,会大幅度提升系统性能。

d、开启垃圾回收机制后,针对内存泄露的情况,可以节省大量的内存空间,但是由于垃圾回收算法运行耗费时间,开启垃圾回收算法会增加脚本的执行时间。

参考答案:c

答案解析:php中的垃圾回收机制,仅仅在循环回收算法确实运行时会有时间消耗上的增加。但是在平常的(更小的)脚本中应根本就没有性能影响。

 

2.树结构分为?

a、二叉树和完全二叉树

b、满二叉树和二叉树

c、有序树和无序树

d、btree和搜索树

参考答案:c

答案解析:有序树和无序树。

 

3.数据项与数据元素关系说法错误的是?

a、数据元素是数据的基本单位

b、一个数据项可由若干个数据元素组成

c、数据项是数据的不可分割的最小单位

d、数据对象是性质相同的数据元素的集合

参考答案:b

答案解析:

数据元素:是数据的基本单位,在程序中通常作为一个整体来进行考虑和处理。一个数据元素可由若干个数据项组成。数据项是数据的不可分割的最小单位。数据项是对客观事物某一方面特性的数据描述。 数据对象:是性质相同的数据元素的集合,是数据的一个子集。如字符集合c={‘a’,’b’,’c,…}

 

4.在http 1.1中,状态码 404 的含义是(),如果返回“找不到文件”的提示,则可用 header 函数,其语句为()

a、拒绝执行,header(“location: http://www.sijiaomao.com/404.php”);

b、未授权,header(“http/1.1 404 not found”);

c、拒绝执行,header(“http/1.1 404 not found”);

d、未授权,header(“location: http://www.sijiaomao.com/404.php”);

参考答案:b

答案解析:拒绝执行状态码是403 ,header(“location:xxxx”)默认是做302状态的跳转,所以答案为b。

 

5.在mysql中用a,b,c三个字段建立一个复合索引a_b_c,请问以下哪个查询效率最差?

a、select * from test where a=10 and b>50

b、select * from test where a=10 and b>10 order by c

c、select * from test where a=10 and b=10 order by a

d、select * from test where a=10 and b = 10 order by c

参考答案:b

答案解析:最左匹配原则:该复合索引包含a,a_b,a_b_c。 复合索引只有在前面的字段为精确查询时,才会用上后面的复合索引,一旦出现不精确查询,则不会使用复合索引。 a选项中,使用a_b索引。 b选项中,使用了a_b索引,且有order by c故效率最差。 c选项中,使用a_b索引。 d选项中,使用a_b_c索引。

 

 

6.一条sql语句从执行到返回结果中间花费时间最长的环节是哪步

a、从php到mysql的网络层

b、mysql解析语句 ,优化,生成执行计划

c、执行

d、返回结果

参考答案:d

答案解析:查询结果的数据量越大返回时间越长,远远超过其他环节的占用时间。

 

 

7.关于设计模式遵循的原则,说法错误的是?

a、组合优于继承

b、针对实现编程

c、对扩展开放,对修改关闭

d、降低对象之间的耦合

 

 

8.一个网站用过lvs+keepalived做了集群,负载均衡算法是rr,但是网站后台登陆的时候,一直提示登录超时,无法使用,请问如何解决这个问题?

a、将网站后台请求不做负载均衡

b、修改负载均衡算法为wlc

c、设置lvs参数,添加persistence_timeout参数

d、修改负载均衡算法为ip hash</p><p><br/>

 

 

9.csrf攻击描述错误的是?

a、csrf需要有javascript代码

b、csrf攻击恶意代码位于第三方站点上

c、过滤用户的输入可以防止恶意代码注入到某个站点,但是它无阻止法恶意代码在第三方站点上运行

d、csrf符合同源策略

 

10.关于php模式修饰符说法错误的是?

a、i 大小写不敏感匹配

b、m ^将只匹配字符串的开头

c、x 空白和#注释将被忽略

d、将替换后的字符串作为php代码评估执行

参考答案:b

答案解析:m为增强的行锚点模式,\\n的前后也会被认为结束和开始

 

11 6.3个不同元素依次进栈,有()不同的出栈序列

a、a、4

b、b、5

c、c、6

d、d、7

 

 

12.多个线程可同时操作一个数据,为了保证该数据的准确性,可将操作该数据的部分改为()

a、只写

b、只读

c、异步

d、同步

 

 

13.http协议如何工作?

a、解析域名->通过dns拿到ip->建立tcp连接->向服务器拿到请求->返回信息

b、通过dns拿到ip->建立tcp连接->向服务器拿到请求->返回信息

c、解析域名->通过dns拿到ip->向服务器拿到请求->建立tcp连接->返回信息

d、解析域名->向服务器拿到请求->通过dns拿到ip->建立tcp连接->返回信息

 

 

14.以下关于http method 的说法,错误的是?

a、一台服务器要与http1.1兼容,只要为资源实现get和head方法即可

b、put让服务器用请求的主体部分来创建一个由所请求的url命名的新文档,或者,如果那个url已经存在的话,就用干这个主体替代它

c、post起初是用来向服务器输入数据的。实际上,通常会用它来支持html的表单。表单中填好的数据通常会被送给服务器,然后由服务器将其发送到要去的地方。

d、trace方法请求web服务器告知其支持的各种功能。可以查询服务器支持哪些方法或者对某些特殊资源支持哪些方法

 

 

15.以下javascript代码的运行结果是()

 

 a、true

b、false

c、false 

d、true

 

 

16.关于header请求头,说法错误的是

a、upgrade: http/2.0 切换协议版本

b、rang bytes=0-2000 请求一段内容,如0到2000字节,可用于断点下载

c、vary 使用缓存的版本,一般用于代理服务器

d、x-requested-with 异步请求

 

 

17.关于php数组的大小正确的是

a、hash bucket的大小,最小为8,以2x增长。

b、初始数组不给元素分配空间

c、数组会谁元素的变动随时变化

d、扩容之后需要表不用做任何操作

 

18.在mysql中,可用于创建一个新数据库的sql语句为()

a、create database

b、create table

c、create databases

d、create db

(加入群677079770获取更多面试题答案。)

 

19.大量在外部排序中使用的数据结构是()

a、hashtable

b、b+tree

c、rb-tree

d、skip list

 

20.以下关于php字符串说法错误的是?

a、php字符串二进制安全的

b、php字符串最大为2g

c、php字符串可以被序列化

d、php字符串可以使用\0来结束

 

21.下列数据结构中,能用二分法进行查找的是(  )。

a、 顺序存储的有序线性表

b、 线性链表

c、 二叉链表

d、 有序线性链表

 

 

22.is_numberic()函数的含义?

a、判断传入值是不是数值

b、将传入值转换为整数

c、将传入值转换为数值

d、判断传入值是不是小数

 

23.哪项不是yii入口脚本主要工作?

a、定义全局常量

b、包含 [[yii]] 类文件

c、加载应用配置

d、加载过滤器

 

24.以下代码将会调用display_result() ?

 

a、错误

b、正确

c、编译错误

d、无答案

 

25.php的三个模块不包括哪个?

a、内核

b、zend引擎

c、扩展层

d、解析层

 

26.下面关于opcode的说法错误的是?

a、opcode 是php的扩展模块

b、用apc 或者xcache 缓存可以缓存php的opcode

c、opcode 是php脚本语言编译后的中间语言。

d、缓存opcode 后 可以加快网站的运行速度

 

(加入群677079770获取更多面试题答案。)

 

27.关于php运行机制错误的是:

a、php总共有三个模块:内核、zend引擎、扩展层

b、php通过sapi和apache相连

c、zend引擎可以将源文件转换成二进制文件运行

d、操作mysql的功能没有包含在php内核中

参考答案:c

 

28.黑客利用缓冲区溢出漏洞进行攻击时,对于这一威胁,最可靠的解决方案是( )

  a、安装防火墙  

b、安装用户身份认证系统

c、安装系统打补丁

d、安装防病毒软件

 

29.随着业务的增长,信息系统的访问量和数据流量快速增加,采用负载均衡(load balance)方法可避免由此导致的系统性能下降甚至崩溃。以下关于负载均衡的叙述中,错误的是()。

a、负载均衡通常由服务器端安装的附加软件来实现

b、负载均衡并不会增加系统的吞吐量

c、负载均衡可在不同地理位置、不同网络结构的服务器群之间进行

d、负载均衡可使用户只通过一个ip地址或域名就能访问相应的服务器

 

 

30.smj二进制字节顺序正确的是?

a、0101 0011 0100 1010 0100 1101

b、0011 0101 0100 1101 0100 1010

c、0101 0011 0100 0100 1010 1101

d、0011 0100 0100 1010 0011 1101