职位:后台开发工程师
岗位职责:
如果你热爱编程,这里给你平台用代码改变世界;
如果你乐于挑战,这里有用户和商家五花八门的需求和苛刻的系统运行环境在等待着你;
在这里,你可以参与后端模块、数据平台、基础服务和云计算功能的开发工作;
在这里,你还将参与需求定义,确定设计方案并负责最终实现;
你需要对代码质量负责,确保代码正确无误,高效工作,无QA,你的代码你做主!
工作要求:
1. 一句话,会写代码。你可以是本科及以上计算机相关专业的科班出身,也可以是自学成才的技术达人;
2. 至少学习并实践过一门以上的开发语言(比如:JAVA、C、C++、Python、Ruby等);
3. 读过Thinking in Java,Effective Java等Java名著;
4. 熟悉基础数据结构,如链表,二叉树等;
5. 对新技术有强烈的求知精神,能深入代码研究,能通过英文论文等第一手资料了解业界新技术;
6. 优秀的逻辑思维能力,善于从复杂系统表象中分析问题,对解决复杂问题充满激情。
第一面:业务技术面 算法,数据结构1、热身题:手写个二分查找,因为一直用的主要语言是Java,也阅读过 Java 的二分查找 API 源码,就按照这个写的
2、动态规划的算法题:机器人寻路问题
3、简历里也提到使用过Python,包括实习工作中的某项目也是Python写的,就让用Python写了个字符串逆序
学习、工作经历主要是在校开设课程的询问,论文的情况,然后就是实习的过程,对工作里的项目进行描述,需求,参与,计划,核心功能,业务等,让画出流程图,设计的架构
设计题1、开放性设计问题,比如问到了高可用的系统设计思路,负载均衡,线程池,缓存设计等,如接触过Netty,Redis,Memcached的话,再如果研究过它们的原理和源码,那么一些关于缓存,数据存取,高性能服务器的问题就会有思路。
2、让实现一个HashMap,时间有限,没让全写,就写了一个put方法
语言因为主要语言是 Java,问到了 NIO(结合项目里的Netty),GC机制和算法
计算机网络1、TCP 三次连接,四次挥手以及写出报文序列 + 画状态图(这里问的很细致,连接中途断开,选择重传,流量控制,丢失报文等场景)
2、如何让UDP实现可靠传输
3、网络 I/O 模型等等
数据库就让写了 SQL 语句,面试官提出问题,涉及到多表连接,索引使用,数据的计算和查询
第二面:技术面复试 学习、工作经历主要也是按照简历上项目经历来问,只要写到的关键字,都会问到,因为实习过,问了很多实习的经历,包括个人感想,什么体验,什么收获等
操作系统1、为什么要有线程
2、进程和线程区别
3、进程间的通信机制
3、Linux常用命令,需要手写出来
语言1、问了Java的一些特性,比如HashMap和HashTable的区别,主要讲实现上的区别
2、ConcurrentHashMap的原理
设计模式1、手写单例模式(线程安全+懒加载,还有使用枚举实现的)
2、结合责任链模式和工厂模式,还有反射机制,谈了谈MVC模式的拦截器设计
计算机网络1、还是问到了TCP握手
2、Http的请求响应报文格式,一些常见状态码,请求报文里的一些k-v参数的意义
3、长连接和短连接
4、cookie和session
算法、数据结构写了一个 O(1) 时间的最大值的栈的pop,push等操作
第三面:综合技术面 部门主管的综合面,感觉是压力面,因为问的很深,问的非常广,类似HR面+技术面的综合
概率和数理统计1、具体题目忘了,一个概率+逻辑推理的题目
2、接着是一个网页打开的响应速度概论曲线,让画出来分析
操作系统问了一些底层的东西,比如什么是DMA,磁盘 I/O 的原理,CPU的cache,缓存算法等等,非常广,非常杂……问到不会为止,看深度和广度
计算机网络1、打开一个URL,网络层面发生了什么,需要尽可能的说详细,说到位(期间会打分,然后会打断,每说到一个点(如果哪个点没说,会反问为什么没有说),或者每到一个步骤就打断,问问题,考察深度
2、附加的问了SEO的东西,比如301重定向怎么做的,权重,如何推广你的网站
算法和数据结构主要结合网络的那个题目,考了下字典树及其应用
综合素质
1、做个即兴演讲:题目意思大概是“你的求学,实习工作之路中,令你激动,或者高兴,且收获最大的一件事,可以是技术攻关,学习成果,社团活动等等”。