空指针
- 指向空的指针
数组越界
数据范围越界
命名
- 变量命名
- 命名差原因
- 英文差
- 读书少
- 架构不熟悉
- 匈牙利命名法
- 作用域+类型+名字
- 驼峰命名法
动画开发
- 位移动画
- 让控件在一段时间内不断改变位置
- 配置清单
- 动画开始时控件的起始位置
- 动画结束时控件要到达的位置
- 动画的持续时间
- 缩放动画
- 让控件在一段时间内不断改变自身大小
- 配置清单
- 动画开始时控件的缩放倍率
- 动画结束时控件的缩放倍率
- 动画的持续时间
- 渐隐渐现动画
- 在一定的时间内持续改变控件的透明度
- 配置清单
- 动画开始时控件的透明度
- 动画结束时控件的透明度
- 动画的持续时间
- 设置重复次数
- 设置重复模式
- 旋转动画
- 让一个控件在一段时间内围绕一个固定点旋转指定的角度
- 配置清单
- 动画开始时控件的旋转角度
- 动画结束时控件的旋转角度
- 动画的持续时间
耦合与解耦
- 解耦
- 标准接口进行交互
- 消息
- 引入框架
栈与队列
- 栈
- 先进后出的数据结构
- 历史栈
- 栈溢出
- APP用的内存不小心超过了系统的限制,被系统强制结束
- 队列
- 先进先出的数据结构
BUG不修复
- 修复 Bug 会产生不确定的后果
- 可能是被设计出来以隐藏一个大Bug的
加载等待
- 现代计算机执行任务主要依靠CPU的运算和存储设备对数据的读写
- CPU密集型任务
- I/O密集型任务
- GPU密集型任务
并行计算
- 一台计算机或一个计算系统(如分布式系统)可以在同一时刻执行两个或者两个以上的任务
- 前提
- 被执行的任务可以被拆分成多个可独立执行的子任务
- 实现方式
- 时间上的并行
- 流水线技术
- 空间上的并行
- 增加核的数量
- 时间上的并行
- 系统调度的基本单位
- 线程和进程
- 多核操作系统就是将相互独立的线程和进程分配到不同核心上,达到并行计算的目的
- 线程和进程
- Hadoop
- 将用户的输入转化为大量可以并行的MapReduce操作,然后分配给集群上的各个主机并行执行
进程间通信
- 基于文件的通信方式
- 基于管道的通信方式
- 基于共享内存的通信方式
- 基于信号(消息)
- 基于信号量
- 基于套接字
应用程序崩溃
- 算法设计时遗漏异常状态
- 操作系统崩溃
操作系统
- 启动
- BIOS自检
- BootLoader程序
- 内存管理和进程管理
- 物理内存
- 虚拟内存
- 文件系统
- 文件系统是硬盘上文件的组织方式
- API
代码混淆
- 将一句条理清晰的话翻译得晦涩难懂,但是功能却保持不变
遇到BUG
- 断点调试
- 输出日志
倒排索引
- 正向索引
- 倒排索引
面向对象
- 面向过程
- 程序员接到需求,把它拆成一个一个的命令,然后串起来交给计算机去执行
- 面向对象
- 创建的对象应该刚刚好能做完它能做的事情,不多做也不少做
- 面向接口编程
重构
- 在保留现有功能的基础上,重新梳理软件中的代码结构,让原本杂乱无章的代码重新具有可读性、结构性和扩展性,增加软件的开发效率,优化程序的性能
流水线技术
- 在重复执行一项任务时,可以把它细分成很多小任务,让这些小任务重叠执行,来提高整体的运行效率
多线程
- 获得CPU/获得时间片
- 多线程程序核心
- 开启更多的线程,获得更多的CPU时间片,让程序更快完成
- GUI系统
- 主线程
- 绘制界面、响应用户操作
- 工作者线程
- 运算或者完成逻辑,并将一些结果反馈给主线程
- 主线程
- 多线程含义
- 开启多个线程做不同的事情,目的是并发同时做很多事情
- 开启多个线程做同一个事情,目的是提高效率
- 多线程弊端
- 多个线程的时序不好控制,多个线程之间的共享变量控制难度比较大,通知机制复杂,且调试困难
- 线程池
- 原理
- 设置一个放线程的池子,先分配几个在里面,随用随取,用完放回,循环往复
- 服务器不可能无上限地分配线程
- 操作系统都有线程分配的最大值
- 操作系统创建线程的时候需要同时分配一些内存,虽然服务器的内存都很大,但也不是用不完的
- CPU 创建一个线程和销毁一个线程是要花时间的,虽然很快,但肯定比直接拿来用要慢
- 原理