一、Linux你常用的指令
二、Linux内核运行机制
操作系统是应用程序和可用资源之间的媒介。
内核就是一个由interrupt驱动的程序。这个interrupt可以是一个系统调用(x86下,很多OS的系统调用是靠software interrupt实现的),可以是一个用户程序产生的异常,也可以是一个硬件产生的事件中断。一个用户程序运行的时候,Linux就在内存里呆着,等着一个中断的到来。在这个中断的处理过程中,来做“调度”。调度的目的是有效的利用CPU的时间片,同时提供很好的用户体验,调度策略主要基于进程优先级和时间片实现。就是说我先选出优先级高的进程先运行,然后每间隔一个时间片(10ms)的时间采用双向循环链表的形式扫描新的进程,以此反复实现这样一个运行的过程
三、进程和线程
进程进程是一个程序的执行,线程是在进程中独立的执行序列,进程包括很多线程,一个进程的内存空间是共享的,每个线程都可以使用这些共享内存。这代表一个线程使用某些共享内存时,其他线程必须等它结束,才能使用这一块内存,"互斥锁"(Mutual exclusion,缩写 Mutex),防止多个线程同时读写某一块内存区域。
进程和线程的主要差别在于它们是不同的操作系统资源管理方式。进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。但对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。如果有兴趣深入的话,我建议你们看看《现代操作系统》或者《操作系统的设计与实现》。对就个问题说得比较清楚。
Linux内存泄漏:(参考)
内存泄漏指的是堆内存的泄漏,在C语言编程上,从变量存在的生命周期角度,把变量分为静态存储变量和动态存储变量两类,静态存储变量会在程序运行过程中被分配固定存储空间,在程序结束时会释放,而动态存储变量则是在程序执行过程中根据需要通过delete或free动态释放内存。如果没有释放动态分配的存储空间就会造成内存泄漏
在Linux中可以使用ps检测内存使用情况。它会列出所有正在运行的程序名称和对应的进程号(PID)。使用kill来结束相应进程
(1)压力测试,可以模仿用户长时间使用设备或调用接口,经过一段时间后,查看进程内存的使用情况,对于那些内存大量增长的进程,可以初步判断是否有内存泄漏发生。
(2)单独针对某个进程进行压力测试,比较反复调用进程前后内存的使用情况,这种测试的好处在于测试能够全面了解具体是哪些进程存在内存泄漏
我觉得抓住问题大概率出现的系统进程进行单独压测,最后再与其他进程进行全面压测是更好的办法
自动化测试:(参考)
直白理解就是利用程序测试程序
自动化测试的工具
测试套件工具: JUnit, Nunit, MSTest, 这几个工具功能都一样学起来比较简单。
性能测试工具: JMeter, VSTS 负载测试, LoadRunner(收费), QTP(收费)
Web UI 测试框架:WebDriver/Selenium, VSTS Coded UI, Watri
Windows UI 测试框架:VSTS Coded UI
其他工具: firebug, Fiddler
选取测试框架的准则
1、支持目前主流的脚本语言,如ruby,python,java,C#等;
2、易于编写、维护测试用例;
3、测试数据应与脚本分离;
4、易于收集执行情况,执行错误,以及生成可视的测试结果报告;
5、能进行可视化操作,尽可能做到让没有编程经验的人员也能上手;
目前主流为关键字驱动的自动化测试框架。用关键字的形式将测试逻辑封装在数据文件中,测试工具只要能够解释这些关键字即可对其应用自动化
功能测试和非功能测试
功能需求测试就是验证软件是否正在执行操作,而非功能测试则有助于验证客户的期望是否得到满足。
以下是一些常用的功能测试技术:
1. 安装测试 — 用于测试桌面或移动应用程序是否正确安装。
2. 边界值分析 — 数值输入边界测试。
3. 等价划分 — 分组测试,以减少类似功能测试的重叠。
4. 错误猜测 — 评估功能问题最有可能被发现,并比其他领域更广泛地进行测试。
5. 单元测试 — 在软件的最小级别上执行测试。不是将系统作为一个整体运行,而是在单元上测试。
6. API测试 — 检查内部和外部API是否正常运行,包括数据传输和授权。
7. 回归测试 — 用于验证新软件更改没有对现有功能(最常见的自动化技术)产生不利影响的测试。
所有的功能测试都有一个特定的输出。所有的功能测试都可以用非常明确的通过或者失败标准来编写。
非功能性测试策略
以下是主要的非功能性测试技术:
1. 负载测试 — 在模拟环境中执行的测试,以测试系统在预期条件(不同数量的用户)期间的行为。
2. 压力测试 — 在资源不足时测试性能,例如服务器问题或设备上硬盘空间不足。
3. 扩展性测试 — 检查系统的规模,以便随着使用率的增加和性能受到何种程度的影响而进行扩展。
4. 容量测试 — 用大量的数据测试性能,不一定是数量庞大的用户,但可以是一个用户执行高容量的任务,例如多文件上传。
5. 安全性测试 — 进行测试以发现系统受到攻击的脆弱程度,以及数据的保护程度。
6. 灾难恢复测试 — 检查系统在崩溃或重大问题后能在多久时间内的恢复速度。
7. 一致性测试 — 根据某一套标准(无论是行业法规还是公司的标准)来测试软件系统。
8. 可用性测试 — 测试GUI是否一致,以及整个应用程序是否直观且易于使用。
python的测试框架有哪些?试列出常用的3个或更多
答案:unittest, nose,unittest2, doctest, pytest
python的底层网络交互模块有哪些
答案:socket, urllib,urllib3 , requests, grab, pycurl
python网络交互时,二进制打包解包的模块有哪些
答案:打包:pack(), 解包:upk()
网友评论