计算机基础知识

来源:互联网 发布: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
原创粉丝点击