mirror of
https://github.com/huihut/interview.git
synced 2024-03-22 13:10:48 +08:00
📚 C/C++ 技术面试基础知识总结,包括语言、程序库、数据结构、算法、系统、网络、链接装载库等知识及面试经验、招聘、内推等信息。
algorithmccppdata-structuresdatabaseinterviewinterview-practiceinterview-preparationinterview-questionsinterviewsleetcodeoperating-systemstl
.vscode | ||
Algorithm | ||
Problems | ||
README.md |
目录
C/C++
- 封装
- 继承
- 多态
- 虚函数
- 内存分配和管理
- extern"C"
- const作用
- 什么是面向对象(OOP)
- new、malloc、alloca的区别
- 运行时类型识别(RTTI)
- 友元类和友元函数
- struct和class的区别
STL
数据结构
算法
排序
查找
Problems
Single Problem
Leetcode Problems
Array
- 1. Two Sum
- 4. Median of Two Sorted Arrays
- 11. Container With Most Water
- 26. Remove Duplicates from Sorted Array
- 53. Maximum Subarray
- 66. Plus One
- 88. Merge Sorted Array
- 121. Best Time to Buy and Sell Stock
- 169. Majority Element
- 283. Move Zeroes
操作系统
- 进程间的通信方式(管道、有名管道、信号、共享内存、消息队列、信号量、套接字、文件)
计算机网络
- TCP/IP
- TCP协议
- TCP三次握手
- TCP和UDP的区别
- socket套接字
- HTTP返回码
HTTP
HTTP 请求方法
- GET:请求指定的页面信息,并返回实体主体
- HEAD:类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
- POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
- PUT:从客户端向服务器传送的数据取代指定的文档的内容。
- DELETE:请求服务器删除指定的页面
- CONNECT:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器
- OPTIONS:允许客户端查看服务器的性能
- TRACE:回显服务器收到的请求,主要用于测试或诊断
HTTP 状态码
- 200 OK: 请求成功
- 301 Moved Permanently: 永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替
- 400 Bad Request: 客户端请求的语法错误,服务器无法理解
- 401 Unauthorized: 请求要求用户的身份认证
- 403 Forbidden: 服务器理解请求客户端的请求,但是拒绝执行此请求
- 404 Not Found: 服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面
- 408 Request Timeout: 服务器等待客户端发送的请求时间过长,超时
- 500 Internal Server Error: 服务器内部错误,无法完成请求
- 503 Service Unavailable: 由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中
- 504 Gateway Timeout: 充当网关或代理的服务器,未及时从远端服务器获取请求
数据库
- 数据库事务四大特性:原子性、一致性、分离性、持久性
- 数据库索引:顺序索引 B+树索引 hash索引 MySQL索引背后的数据结构及算法原理
设计模式
网络编程
链接装载库
运行库(Runtime Library)
典型程序运行步骤
- 操作系统创建进程,把控制权交给程序的入口(往往是运行库中的某个入口函数)
- 入口函数对运行库和程序运行环境进行初始化(包括堆、I/O、线程、全局变量构造等等)。
- 入口函数初始化后,调用main函数,正式开始执行程序主体部分。
- main函数执行完毕后,返回到入口函数进行清理工作(包括全局变量析构、堆销毁、关闭I/O等),然后进行系统调用结束进程。
一个程序的I/O指代程序与外界的交互,包括文件、管程、网络、命令行、信号等。更广义地讲,I/O指代操作系统理解为“文件”的事物。
glibc 入口
_start -> __libc_start_main -> exit -> _exit
其中main(argc, argv, __environ)
函数在__libc_start_main
里执行。
MSVC CRT 入口
int mainCRTStartup(void)
执行如下操作:
- 初始化和OS版本有关的全局变量。
- 初始化堆。
- 初始化I/O。
- 获取命令行参数和环境变量。
- 初始化C库的一些数据。
- 调用main并记录返回值。
- 检查错误并将main的返回值返回。
C语言运行库(CRT)
一个C语言运行库大致包含如下功能:
- 启动与退出:包括入口函数及入口函数所依赖的其他函数等。
- 标准函数:有C语言标准规定的C语言标准库所拥有的函数实现。
- I/O:I/O功能的封装和实现。
- 堆:堆的封装和实现。
- 语言实现:语言中一些特殊功能的实现。
- 调试:实现调试功能的代码。
C语言标准库(ANSI C)
包含:
- 标准输入输出(stdio.h)
- 文件操作(stdio.h)
- 字符操作(ctype.h)
- 字符串操作(string.h)
- 数学函数(math.h)
- 资源管理(stdlib.h)
- 格式转换(stdlib.h)
- 时间/日期(time.h)
- 断言(assert.h)
- 各种类型上的常数(limits.h & float.h)
- 变长参数(stdarg.h)
- 非局部跳转(setjmp.h)
海量数据处理
其他
书籍
- 《剑指Offer》
- 《编程珠玑》
- 《深度探索C++对象模型》
- 《Effective C++》
- 《More Effective C++》
- 《深入理解C++11》
- 《STL源码剖析》
- 《深入理解计算机系统》
- 《TCP/IP网络编程》
- 《程序员的自我修养》