计算机基础知识
来源:互联网 发布:android json解析库 编辑:程序博客网 时间:2024/06/05 08:19
1.基本数据结构
栈,先进后出,单向队列,先进先出。
栈实现:一个数组,一个计数器,用于记录栈顶元素的坐标。进栈,计数器加1,退栈,计数器减1.
单向队列实现:一个数组,一个头指针,一个尾指针。头指针指向队头,尾指针指向队尾。入队,尾指针向后移动一个单位,出队,头指针移动一个单位。
双向队列实现:两个栈,可以想象一下两个量筒里的球。
接着是树。包括,二叉排序树,平衡树,红黑树。
二叉树,可以认为是一个有序队列二分查找后的所有轨迹。优点:实现简单,理论上时间复杂度是log(n)。缺点:最差情况下,整棵树是单支树,只有一个叶子结点,这时,时间复杂度为n.
平衡二叉查找树(AVL)。问,根据特定规则,高度平衡的树。规则需要背一下。插入和删除,树可能发生变化,怎么变化,左转,右转,左右转,右左转。时间复杂度: log(n)
红黑树。根据特定规则,保持自平衡,平衡程度不如AVL。规则背一下。插入删除时,树变化的方式,直接说,可能行太多,记不住。
红黑树出现的地方: java中的treemap, treeset, c++中的map和set都是用红黑树实现的。java8中的hashmap的冲突解决,先链式,后红黑树。
检索中用到最多的是倒排表
举个例子:文章A包含的文字包括: a, b, c. 文章B包含的文字包括: c, b, d. 那么,正排表为: A=>a, b, c; B=> b, c, d. 倒排表为: a=>A; b=>A, B; c=>A, B; d=>B.
如果要检索关键词b和c的文章,那么计算过程是: 先查找倒排表, b对应A和B; c对应A和B. 合并这两个链表。得到文章A和文章B。 合并两个有序链表的时间复杂度是多少。最少是n, 最大为n+m。
拓扑排序:列举所有启示节点到结束结点的连线。选择入度为0的节点开始。将这个节点移除,去除所以以这个节点为起始节点的连线。接着继续寻找入度为0的节点,继续操作,直到没有节点或者有节点但是没有符合条件的节点。
拓扑排序常见的运用: 依赖问题解决。
查找:二分查找(O(logn)),散列表(O(log1))。
散列表:冲突解决(两个值进过散列函数得到同一个散列值)方案: 1. 探测再散列(线性探测(每次+n),二次探测(每次+n^2)) 2. 再哈希发(多个哈希函数) 3. 链地址(同一个哈希值指向一个链表)
哈希表时间上的优化:优秀的哈希算法,减少哈希冲突。冲突较多时,使用红黑树。因为链表查找时O(n), 红黑树是O(logn)
排序:冒泡(相邻两个比较),选择(每次都是挑最大的或者最小的),插入(回想斗地主抽牌的场景),希尔排序(nlogn, 一般不问),快速排序(分治:把整个数组分成前后两个部分,要整体有序,那么就需要两个部分都有序,再进行排序。对于每个部分,再将其划分为两个部分。优点:快。缺点:不稳定,值相同的两个元素,排序前后顺序会变化。会考代码编写,会考如何用栈实现(默认用的是系统栈,可用栈模拟)),堆排序(先简历一个堆,然后从大到小取。优点:稳定排序,基本都用这个排序,java带的排序是堆排序,c++带两个sort是快拍, stable_sort是堆)。
操作系统:进程同步问题(调度问题,锁问题,经典同步问题), 内存管理(jvm,linux内存模型,这个不太会问,毕竟是测试)
主要是同步问题
计算机网络:tcp的三次握手,四次挥手
算法题, http://blog.csdn.net/htyurencaotang/article/category/1488775/4
常用的shell命令, 测试流程, 白盒测试,黑盒测试,功能测试,性能测试,单元测试.
常用的测试工具: jmeter(压力测试), jenkins(集成测试工具)
服务测试,那么还要会点c++. 毕竟服务都是用c++写的.
stl库中的容器, vector(向量,动态数组), stack(栈), map(字典), set(集合)
总结一下需要复习的东西: 1. 我列举的数据结构 2. 排序算法 3. 文本检索过程(倒排索引) 4. 那个网站上的面试题 5. 进程同步问题 6. 调度问题和内存模型(了解即可) 7. shell命令 8. 测试过程及一些概念 9. 能说出常用的测试工具, 开发工具
shell命令: ps 显示进程信息 top 显示动态进程信息(类似于windows下的任务管理器) grep 正则表达式匹配工具 netstat 网络连接信息(用来看端口) awk 字符串拆分 sort 排序 sed 字符串替换 uniq 去重 pwd 获得当前工作路径 df 磁盘使用信息 du 目录使用信息 find 查找文件
rm 删除 mv 移动
常用的组合: ps -aux | grep xxxx 查找xxx进程获得其程序号。 netstat -aonp | grep xxxx 查找xxx端口是否使用,使用的进程的进程和进程号 rm `find -name *.h` 删除所有的.h文件 awk -F " " '{print $1}' 对每行数据根据空格拆分,然后取第一个。
根据日志获取qps(单位时间处理的请求数), grep 'info' *.log | awk -F " " '{print $1}' | sort | uniq -c
这个命令的意思是,先匹配所有log结尾的文件,过滤所有带有"info"字符的数据。然后对每行数据根据空格拆分,取第一个字段。然后进行排序。然后进行去重,并统计。
为什么要先sort然后才uniq呢?? 因为uniq只对相邻的字符进行合并统计, sort之后就会合并
其实,要理解的部分就那个网站里的面试题,进程同步问题,三次握手,四次挥手
0 0
- 计算机基础知识
- 计算机基础知识
- 计算机基础知识
- 计算机基础知识
- 计算机基础知识
- 计算机基础知识
- 计算机基础知识
- 计算机基础知识
- 计算机基础知识
- 计算机基础知识
- 计算机基础知识
- 计算机基础知识
- 计算机基础知识
- 计算机基础知识
- 计算机基础知识
- 计算机基础知识
- 计算机基础知识
- 计算机基础知识
- mysql数据库中循环插入
- 添加数据库用户
- sql 基本语句
- Android Scroller的基本使用
- proxool
- 计算机基础知识
- KMP算法的Next数组详解
- 分割视图器UISplitViewController初使用
- Android 解决小米手机选取图片返回值为null
- 预防XSS攻击需要注意的地方。
- ubuntu上使用draw_net.py绘制caffe ssd网络结构
- redmine安装部署
- BIT2009年上机题第四题
- 知识库--Creating Nested Transactions By Akka 内存嵌套事务(129)