程序员面经分享|后端开发经验总结

Posted CCF学生分会SCU

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了程序员面经分享|后端开发经验总结相关的知识,希望对你有一定的参考价值。

2018秋招面经-后端开发


职位:后端开发

来源:牛客网


自我介绍


博主渣渣本科,挣扎到十一月秋招终于结束了。面过百度/腾讯/小米/网易/搜狗/知乎/京东/360/瓜子。期间总结了一些面试题目,现在放上来。由于是博主自己的面经记录,所以涵盖不全面的话诸位请谅解。 
根据博主的面试经验来看,面试有一定的层次性,如bat级别公司每个点都会深入,而有些公司则只会问到表层,所以将每个领域都分为必须掌握和深入了解这两个部分。

一、计算机网络


基础部分  

1.TCP报头格式

2.UDP报头格式

3.TCP/UDP区别(不仅是宏观上的,最好能根据各自的机制讲解清楚)

4.HTTP状态码(最好结合使用场景,比如在缓存命中时使用哪个)

5.HTTP协议(一些报头字段的作用,如cace-control、keep-alive)

6.OSI协议、TCP/IP协议以及每层对应的协议。

7.SESSION机制、cookie机制

8.TCP三次握手、四次挥手(这个问题真的要回答吐了,不过真的是面试官最喜欢问的,建议每天手撸一遍,而且不只是每次请求的过程,各种FIN_WAIT、TIME_WAIT状态也要掌握)。

9.打开网页到页面显示之间的过程(涵盖了各个方面,DNS解析过程,nginx请求转发、连接建立和保持过程、浏览器内容渲染过程,考虑的越详细越好)。

10.http和https区别,https在请求时额外的过程,https是如何保证数据安全的

12.POST和GET区别

13.DNS解析过程



程序员面经分享|后端开发经验总结

二、数据库


基础部分  

1.事务四大特性(ACID)

2.数据库隔离级别,每个级别会引发什么问题,mysql默认是哪个级别

3.MYSQL的两种存储引擎区别(事务、锁级别等等),各自的适用场景

4.数据库的优化(从sql语句优化和索引两个部分回答)

5.索引有B+索引和hash索引,各自的区别

6.B+索引数据结构,和B树的区别

7.索引的分类(主键索引、唯一索引),最左前缀原则,哪些情况索引会失效

8.聚集索引和非聚集索引区别。

9.有哪些锁(乐观锁悲观锁),select时怎么加排它锁

10.关系型数据库和非关系型数据库区别

11.了解nosql

12.数据库三范式,根据某个场景设计数据表(可以通过手绘ER图)

13.数据库的主从复制

14.使用explain优化sql和索引

15.long_query怎么解决

16.内连接、外连接、交叉连接、笛卡儿积等


深入  

1.MVCC机制

2.根据具体场景,说明版本控制机制

3.死锁怎么解决

4.varchar和char的使用场景。

5.mysql并发情况下怎么解决(通过事务、隔离级别、锁)


Redis  

1.redis数据结构有哪些

2.redis队列应用场景

3.redis和Memcached(支持数据持久化)

4.分布式使用场景(储存session等)

5.发布/订阅使用场景

程序员面经分享|后端开发经验总结

三、操作系统


1.内存的页面置换算法

2.进程调度算法

3.进程间通信方式

4.进程线程区别

5.进程之间的通信

6.父子进程、孤儿进程

7.fork进程时的操作, 
这个部分我回答的都不好,只能是死记硬背,建议基础好的同学多看看操作系统这部分,能大大加分。

程序员面经分享|后端开发经验总结

四、算法


基础

1.剑指OFFER的各个题目是最常见的,即使不是原题也是题目的变体,因为面试不像笔试,一般不会出特别困难的题目,所以剑指OFFER上小而精的题目就非常适合。建议手刷一遍。php的同学可以参考专栏剑指OFFER

2.二叉树相关(层次遍历、求深度、求两个节点距离、翻转二叉树、前中后序遍历)

3.链表相关(插入节点、链表逆置、使用链表进行大数字的加减,双向链表实现队列、寻找链表中的环)

4.堆(大量数据中寻找最大N个数字几乎每次都会问,还有堆在插入时进行的调整)

5.排序(八大排序,各自的时间复杂度、排序算法的稳定性。快排几乎每次都问)

6.二分查找(一般会深入,如寻找数组总和为K的两个数字)

7.两个栈实现队列。

8.图(深度广度优先遍历、单源最短路径、最小生成树)

9.动态规划问题。


深入    

10.红黑树性质

11.分治法和动态规划的区别

12.计算时间复杂度

13.二叉树和哈希表查找的时间复杂度


栈和链表是面试算法的时候经常用到的工具,多考虑怎么用数据结构的性质解决,因为面试不像笔试,对基础数据结构关注的比较多一些,一般问题也比较简单。然后取模也是常用的工具(比如有一次问怎么让100个进程按规定的权重被调用,就可以用取模的方式)。 
面试官一般会先出简单的问题,然后深入地问下去,最好是根据他的思路走,因为能听懂他的提示也是需要考察的能力。

程序员面经分享|后端开发经验总结

LINUX


1.硬链接和软连接区别

2.kill用法,某个进程杀不掉的原因(进入内核态,忽略kill信号)

3.linux用过的命令

4.系统管理命令(如查看内存使用、网络情况)

5.管道的使用 |

6.grep的使用,一定要掌握,每次都会问在文件中查找

7.shell脚本

8.find命令

9.awk使用

程序员面经分享|后端开发经验总结

语言部分(PHP)


1.数组操作函数

2.字符串操作函数(数组和字符串的函数是最常问的,非常多,一定不要记混了)

3.指针和引用区别

4.堆和栈的区别

5.== ===区别

6.PHP的垃圾回收机制

7.zval结构

8.防sql注入

9.跨域问题

10.长链接和长轮询


面向对象、设计模式  

接口和抽象类区别

单继承

construct的调用顺序(子类父类之间)

设计模式(工厂模式、策略模式、单例模式、装饰模式比较常见)

OOP特性,通过哪些机制实现的

重写和重载区别

静态类静态方法

根据某个需求设计一个类(主要考虑类之间的继承关系和属性的权限设置)

项目


1.项目中遇到的困难(提前想好,并且把实现或者优化方法说清楚)

2.系统的量级、pv、uv等

3.应对高并发的解决办法(分布式)

4.在项目中主要负责了哪些工作。

5.nginx的负载均衡

6.分布式缓存的一致性,服务器如何扩容(哈希环)


总之要把写在简历上的项目部分熟悉一遍,技术栈、项目功能、难点都要考虑好。


期间整理了一份难点PDF,在http://blog.csdn.net/acingdreamer/article/details/78479476末尾有下载链接


点击阅读原文,向作者提问


以上是关于程序员面经分享|后端开发经验总结的主要内容,如果未能解决你的问题,请参考以下文章

字节跳动头条2022测试开发岗 3+1 面经+经验分享(收到offer,入职月薪30K)

程序员经验分享:从零开始系统化学Java,一线互联网公司面经总结

史上最全!Java最新实习面试经验总结,分享面经

面试 Google, 我失败了 | Google 面经分享

面经分享:程序汪培训转Java粉丝拿下大数据和电商offer,分别13K和15K

后端开发备战攻略,附难点总结汇总资料 | 牛客面经