后端开发面试知识整理
后端面试大部分内容其实是相通的,一般除了编程语言和算法
外,还会涉及高并发、分布式、高可用、微服务
等领域知识。
- 中华石杉-互联网Java工程师面试突击训练
- 互联网 Java 工程师进阶知识完全扫盲
- CS-Notes 技术面试必备基础知识、Leetcode、计算机操作系统、计算机网络、系统设计、Java、Python、C++
- 一文帮你理清面试知识点
- coding-interview-university -- A complete computer science study plan to become a software engineer.
面试题
进程间的通信方式
一般有6种:
1.管道
举例:ls | grep 1 # 将ls拿到的结果作为grep 1进程的输入,实现了进程间的通信,| 就是管道符。
2.消息队列
内核创建的一个消息队列,操作系统中的多个进程都可以操作这个消息队列,可以往里面发送消息,也可以从里面接收消息。
3.共享内存
每个进程在访问内存的时候都有一个虚拟内存地址和物理内存地址的映射,一般2个进程的虚拟内存地址可以一样,但物理内存地址不一样。 共享地址是将2个进程映射的物理内存地址也变成一样的,此时,2个进程可以访问同一块物理内存,于是借助这块物理内存就可以实现通信了。
4.套接字socket
很常见,比如通过3306端口访问mysql数据库。访问数据库的进程和数据库进程之间的通信就是通过3306这个端口建立的TCP套接字。 但如果是本机访问mysql,不会走TCP套接字,而是走Linux底层的套接字。
5.信号量
类似计数器,控制多个进程对同一个共享资源的访问,最多这个资源能被多少个进程访问,起到控制数量锁的机制。
一个进程可以向另一个进程发送一个信号,这个进程可以去处理这个信号。
Linux系统中可以通过kill -l
指令列出所有信号。(64种)具体看这里
6.文件和记录锁定
为避免两个进程间同时要求访问同一共享资源而引起访问和操作的混乱,在进程对共享资源进行访问前必须对其进行锁定,该进程访问完后再释放。这是UNIX为共享资源提供的互斥性保障。
SIGNINT Ctrl+C
SIGNTERM kill pid_number
SIGNKILL kill -9 pid_number, 强制杀死程序
什么是幂等性
同一个事件无论执行多少次结果前后保持一致。
为什么使用消息队列?
消息队列有什么优点和缺点?
Kafka、ActiveMQ、RabbitMQ、RocketMQ 都有什么区别,以及适合哪些场景?
Python2和Python3的区别
(目前算是Python开发必问,以后大概不会了,毕竟官方也准备2020后不再维护Python2了)
python2中有long类型
python3中没有long类型,只有int类型
后端开发能力提高建议
数据结构和算法
(书籍版本默认为当时最新中文版)
- C入门推荐: C Primer Plus(第6版)
- C/C++:大话数据结构
- Java:算法第4版(红色)
- Python:算图图解(零基础入门),然后看算法第4版
- 剑指Offer(第2版) (国内面试必看)
- 程序员面试金典(第6版) (大外企面试推荐看这本)
- 剩下所有精力建议用于刷题(leetcode,牛客网)
- 打好基础有了稳定工作之后,再考虑看《算法导论》
计算机网络
- 计算机网络 (谢希仁,第7版,另有配套答案书一本)
- 计算机网络:自顶向下方法(原书第7版)
- 《TCP/IP详解》
更多笔记见计算机网络
操作系统
面试高频问题点:进程和线程、并发和多线程,原子性,锁等;内存、内存分配、内存调度
- 《深入理解操作系统》
设计模式
23种设计模式了解,熟悉单例、工厂、代理、策略、模版等。
- 《大话设计模式》
应用与编程实践
- Linux操作系统学习 (Linux常用命令)
- 基本shell编程 (《Linux就该这么学》《鸟哥的Linux私房菜》)
- 编译/调试工具 (gcc,gdb官方文档)
- Linux环境编程
- 多线程编程实践 (线程、资源、信号、同步、互斥、锁)
- 网络编程实践 (综合:面向C语言开发《Unix环境高级编程》《Linux高性能服务器编程》《POSIX多线程程序设计》)
大厂招聘Python工程师,都看中哪些能力?
Python工程师的职业发展方向
保持学习Python的动机与招聘目的的一致性
学习动机
Java/C++/Go + Python
前端开发 + Python
大数据 + Python
算法 + Python
Python + 其他
Unix环境高级编程推荐看,apue
Q:如何把A目录中的上百个文件移动到B目录并打包?
不同职位的Python能力模型
1-3年工作经验 初级
(3-5年工作经验 中极)
5-10年工作经验 高级 架构能力,算法,除Python外的静态语言
后端开发: Linux+MySQL+Web框架,TensorFlow有加分
前端/全栈开发: H5+前端框架+Python框架,数据库有加分
算法、大数据、爬虫: 爬虫+数据库+算法,数学+DeepLearning经验加分
大厂Python面试的考点解析
重点考察范围
原理 比如:多线程、协程、并行和并发、GIL等等。列表赋值在底层的原理。hash冲突如何解决。(不过关可能后面都不会再问了)
语法特性 鸭子类型(好处、坏处),魔术方法,装饰器,闭包。共享行数、元类。数据结构和算法,设计模式。内存回收。
框架 Flask、Django 请求的生命周期是怎样?内部组件form等。Django中间件有哪些常用方法?Flask可能考得更细。
数据库 ORM、关系型、非关系型,索引
结合行业 系统设计(比如:秒杀、优惠券、短网址)
Python工程师的提高路径
系统学习(特别是拿Python作为第一语言)
语法(全面)+算法(经典排序)+框架(看实现代码)+行业知识
后端发展:Python的基础语法、Python特性(闭包、装饰器、元类、魔术方法,etc.)
推荐看《流畅的Python》
代码推荐看:requests和flask的源码(PS:django源码其实也值得看)
面试两个难点:
技术方面:算法
理论方面:设计模式
要学其他编程语言的话,建议先精通Python后再学