编程中的疑难杂症
在学习编程和写代码的过程中,应该都或多或少会遇到以下困惑。这些问题和知识点对菜鸟来说真是苦不堪言,然而书上总是一笔带过,或者讲得不清晰易懂,大部分问题还是得网络上到处搜索相关的资料。
虽然不搞清楚这些东西,还是可以继续完成软件需求,但总感觉飘在云端,很不踏实。
现在把他们列举出来。以后有时间就写一部分。逐个击破。
- 字符集,字符编码,乱码
- 数据类型在内存中的结构
- 大端(BigEndian)与小端(LittleEndian)
- 变量/函数的声明、定义、初始化
- c指针的理解,汇编角度
- const static restrict 变量修饰符
- const指针与指向const变量的指针 函数指针
- 内存溢出、空指针,变量的类型转换
- include extern c作用域 头文件和.c源文件
- 动态链接库,静态链接库
- 程序的编译运行过程,gcc命令
- Makefile文件
- c/c++的宏与typedef
- 内核空间与用户空间,系统调用与系统接口、API,POSIX与XSI
- 进程与线程
- shell运行程序的原理,exec,fork
- 进程在内存空间的上下文结构,堆和栈
- 环境变量
- 流、文件、缓冲区、IO、标准输入、标准输出
- 流的冲洗、字符回显、流阻塞与非阻塞
- 重定向、管道
- 脚本文件运行原理
- linux文件系统的模型,目录、文件、文件表、i节点
- linux的文件权限和进程权限机制
- UNIX与Linux 各版本以及关系
- UNIX与Linux的约定俗成的惯例和设计方法
- GNU项目以及GNU、BSD、MIT开源许可
- 面向连接与非连接,数据报和流
- 阻塞与非阻塞
- 信号的重入
- 异步与同步
- 正则表达式
- Git版本控制
- 网络数据中的段、包、帧
- 网络各层次常见的协议
- 代理与反代理,vpn,洋葱路由
- JAVA jvm 、jre、jdk
- 解释型语言和编译型语言,半解释型语言,动态语言与静态语言,脚本语言
- 函数式语言、面向过程语言、面向对象语言
- 跨平台、跨系统、跨架构
- CPU指令集,系统位宽、寻址宽度,总线宽度、寄存器