大三上面经

简单记录下自己的面试经过吧

adult-brainstorming-business-935977


滴滴出行:招聘PHP/GO开发实习生

一面

首先面试官让我自我介绍
然后针对我的简历问我自己觉得有什么亮点

我像流水账一样的介绍了自己,有被人指点说要讲亮点
但可能是我脑回路不一样,我的亮点定义有区别- -

其中有针对项目的提问:
1.支付功能的安全保证

自己有作死的说了用https的实现原理
就是通过2次非对称加密保证其中一对密钥的安全,然后用密钥加密数据并用token去保证传输过程中的安全

2.接口的并发保证-例如调用第三方接口

由于我是在接golang后才接触到的进程与线程,所以对并发没有很好的想法与思路,然后就回答的并不好

然后是技术方面
session与cookie机制

这个属于基础,但梳理整体的流程很重要

一个登录功能的整体访问流程

由于自己理解错误导致以为面试官问的是在登录过程中session与cookie的作用,其实是可以询问面试官的意图,弄清楚再回答,主要是我第一次面试紧张所致吧

mysql中varchar与char类型的区别与选择

其实这个我在面试前一天有看到,但中间有个错误的回答就是mysql的严格模式下存储字符长度的问题,属于我自己作死- -

二面

1.照例介绍自己

稍微比一面好那么一点- -

2.针对我的项目的安全回调处理

直接被跳过了,,,并没有听很清楚面试官的问题,有点懵

3.CI框架的运行流程

很苦恼自己没有回答出来,,,因为在前一天我还百度了CI的路由原理及过程- -

4.GOLANG与PHP的技术选型在我的项目上

不是很好的回答,对php的socket编程没有很全面的了解便选择了GOLANG,貌似自己很随便- -

5.GOLANG的携程模型

只知道是因为GOLANG并不提供直接操作进程的权利所以采用了携程,但并不知道其中的具体,只会用- -

6.GOLANG的interface使用情景以及原理

只会用接口编/解码json,所以不是很懂


小米

一面

1.照例自我介绍
2.如何保证高并发下数据的一致性

首先我说到了事务,然后引申到此,可惜我并不了解,我觉得用锁也是可以解决的,但是我眉头一皱感觉事情并没有这么简单,,,就没有说

3.支付回掉延时怎么处理

这个我只会想到提示用户已经支付请稍后确认订单,谁知道面试官想知道的是按照简单的支付流程用户重复支付了怎么办。

4.web权限系统的设计与开发

我回答的是用数据库建立权限表,然后用类似中间件的方法拦截请求,如果是接口就用token

5.讲述WebSokect的交互流程

在我的印象中只有简单的客户端发起请求然后服务端接收请求并且建立连接通道,可能是我自己弄巧成拙说了自己看了golang一个websokect包的源码,其实我并没有完全的看完源码。面试还是切忌这一点

6.php在数组中取元素的值,怎么合并2个数组,array_pop,array_shift有什么作用

开始不知道怎么合并怎么数组,然后说到了array_diff的使用,然后又问我array_pop,可惜我回答成了取数组的头元素,难怪后面问到了我array_shift

7.json转换2个数组[‘0’=>’a’,’1’=>’b’],[‘2’=>’c’,’3’=>’d’]后的json对象的区别,以及再次转换为数组与原数组的区别

主要是转换后是int类型还是字符串类型的区别

8.tcp/ip的三次握手,为什么不是4次或者2次

没有看过为什么不是4次或者2次,自己的理解是4次是双方的一个确认,2次是没办法建立连接的,后续了解到2次的话第二次服务端发送的数据包可能丢包,所以3次是为了保证传输通道是可靠的,保证数据的完整。

9.linux命令压缩文件夹

回答了,tar -zvh 文件夹/文件名称,然后被问具体的每个参数的作用,可惜并不了解

10.在linux下添加一个用户组和用户的过程,755,644的文件权限含义

具体的命令不太记得,所以只是说了步骤,权限回答错了一个点就是应该分为3个组,第一个是文件所有者,第二个是文件所有者所在组的其他用户,第三个是其他组的所有用户,我把第一个当作了root用户,然后第二个认为是所有者以及所有者所在组下的其他用户

二面

苦等三天总算盼来了小米的二面
1.自我介绍
2.如何解决高并发导致的逻辑错误以及数据的一致性

直接提及事务

3.如何在高并发下缓解服务器的压力

redis访问队列控制访问流量,例如令牌桶

4.mysql的两种表引擎的区别
5.我是如何优化对数据库的操作(任何方面)

索引,限定字段数据类型,大批量插入做语句拼接,重点是我竟然忘记了查询缓存,数据库的连接池
再者有一点就是我不太敢说,怕弄巧成拙,就是用explan语句对低效sql语句进行分析并且优化。

6.算法中的二分

对,就是只说了二分。。。我下意识是以为用二分排序,然后说着说着我感觉像快排,其实是归并- -,然后就放弃了。。。不过面试官很好,说没关系忘记很正常

7.举例子用说出微信抢红包的流程
8.继续说出我觉得微信抢红包中重要的点
9.怎么设计微信的抢红包架构

一起回答了吧,,,开始我是举例说并发的问题,然后就被带入坑了,由于我缺乏上下文的分析能力所以就以为真的是问微信抢红包的具体算法,然后我记得是不是平均概率,而是一个根据剩余数值来算一个加权的数,所以就很乱的回答,后面就完全是自由想象- -

10.thinkphp和codeigniter的区别

我回答的主要是版本不同然后tp用到了命名空间,然后在TP3.1及以前都是和CI一样自己实现了自动加载机制。

11.codeigniter的路由机制

我没考虑到由单一入口需要讲解,因为自己尝试写过小框架,所以知道默认的路由加载的过程,其中问到了is_file和method_exists,还好我记得- -