1.指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元;而引用跟原来的变量实质上是同一个东西,只不过是原变量的一个别名而已。
2.指针的值可以为空,也可能指向一个不确定的内存空间,但是引用的值不能为空,并且引用在定义的时候必须初始化为特定对象;(因此引用更安全)
3.指针的值在初始化后可以改变,即指向其它的存储单元,而引用在进行初始化后就不会再改变引用对象了;
4.sizeof引用得到的是所指向的变量(对象)的大小,而sizeof指针得到的是指针本身的大小;
5.归并排序(2-路)空间复杂度是N,堆排序空间复杂度是1
6.条件覆盖:除了所有语句都要执行一遍,每个条件的所有可能结果至少出现一次;
7. while(x)
{
countx ++;
x = x&(x-1);//求x的二进制表达式有多少个1
}
8.DNS即域名系统,其作用是将字符串域名解析成相对于的服务器IP地址,免除人们记忆IP地址的单调和苦恼,属于为用户排忧解难之举,因此划归为应用层
9.硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除。
符号连接(Symbolic Link),也叫软连接。软链接文件有类似于Windows的快捷方式。它实际上是一个特殊的文件。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。
10.冯·诺依曼体系结构计算机必须具备五大基本组成部件,包括:输人数据和程序的输入设备、记忆程序和数据的存储器、完成数据加工处理的运算器、控制程序执行的控制器、输出处理结果的输出设备。
11.线程安全函数
• 概念:
线程安全的概念比较直观。一般说来,一个函数被称为线程安全的,当且仅当被多个并发线程反复调用时,它会一直产生正确的结果。
• 确保线程安全:
要确保函数线程安全,主要需要考虑的是线程之间的共享变量。属于同一进程的不同线程会共享进程内存空间中的全局区和堆,而私有的线程空间则主要包括栈和寄存器。因此,对于同一进程的不同线程来说,每个线程的局部变量都是私有的,而全局变量、局部静态变量、分配于堆的变量都是共享的。在对这些共享变量进行访 问时,如果要保证线程安全,则必须通过加锁的方式。
• 线程不安全的后果:
线程不安全可能导致的后果是显而易见的——共享变量的值由于不同线程的访问,可能发生不可预料的变化,进而导致程序的错误,甚至崩溃。

可重入函数
• 概念:
可重入的概念基本没有比较正式的完整解释,多数的文档都只是说明什么样的情况才能保证函数可重入,但没有完整定义。按照Wiki上的说法,“A computer program or routine is described as reentrant if it can be safely executed concurrently; that is, the routine can be re-entered while it is already running.”根据笔者的经验,所谓“重入”,常见的情况是,程序执行到某个函数foo()时,收到信号,于是暂停目前正在执行的函数,转到信号处理 函数,而这个信号处理函数的执行过程中,又恰恰也会进入到刚刚执行的函数foo(),这样便发生了所谓的重入。此时如果foo()能够正确的运行,而且处 理完成后,之前暂停的foo()也能够正确运行,则说明它是可重入的。
• 确保可重入:
要确保函数可重入,需满足以下几个条件:
1、不在函数内部使用静态或全局数据
2、不返回静态或全局数据,所有数据都由函数的调用者提供。
3、使用本地数据,或者通过制作全局数据的本地拷贝来保护全局数据。
4、不调用不可重入函数。
• 不可重入的后果:
不可重入的后果主要体现在象信号处理函数这样需要重入的情况中。如果信号处理函数中使用了不可重入的函数,则可能导致程序的错误甚至崩溃。

可重入与线程安全

   可重入与线程安全并不等同。一般说来,可重入的函数一定是线程安全的,但反过来不一定成立。

12.1,Session 是放在服务器上的。
2,Cookie 是放在本地浏览器的,单个大小不会超过 4KB 一个站点最多保存 20 个。
3,服务器会对每个用户生成一个 Session 其中 SessionID 用来区分用户。
4,在本地保存这个 SessionID 可以将其保存在 Cookie 中。
5,Session 在服务器上,一定时间之后是由服务器销毁的。
13.等待I/O、进程sleep、等待解锁等原因都会导致进程暂停。关于"时间片切换",当进程已经获得了除cpu外所有的资源,这时的状态就是就绪态,当分配到了时间片就成了执行态,当时间片用完之前一直未进入阻塞态的话,此后便继续进入就绪态。所以进程的就绪与阻塞是完全不同的
14.所谓Belady现象是指:采用FIFO算法时,如果对—个进程未分配它所要求的全部页面,有时就会出现分配的页面数增多但缺页率反而提高的异常现象。 FIFO的性能较差,因为较早调入的页往往是经常被访问的页,这些页在FIFO算法下会被反复调入和调出。Belady现象的原因是FIFO算法的置换特征与进程访问内存的动态特征是矛盾的,即被置换的页面并不是进程不会访问的。
15.第一次握手序列号是x;
第二次握手序列号y,确认号x+1;
第三次握手序列号x+1,确认号y+1
16.处理机(cpu)等级显然是最高的,通道是一个独立于 CPU的专管输入/输出控制的处理机,它控制设备与内存直接进行数据交换。所以通道是第二,通道控制设备控制器,设备控制器控制设备。
17.功能测试 1. 正向功能; 2. 参数为空; 3. dealid不存在; 4. dealid为非数字的值; 5. quantity为0或负值; 6. quantity大于库存量; 7. token无效 8. 入参不是JSON 性能测试 1. 压力测试,考察系统在极限压力下的处理能力 2. 狭义性能测试,验证系统能够达到一定的处理能力 3. 并发测试,测试数据库和应用服务器对并发请求的处理 安全性测试 1. 伪造token攻击 2. 订单潮水攻击 3. deal遍历攻击 4. SQL注入攻击 加分项 订单复用:当同一个用户提交的dealid、quantity相同时,返回的orderID总是一样(没有重复创建订单)
18. drop table A 是删除整个表,题目的潜在意思是删除表中的数据而并非删除整个表。
truncate table A是删除表中的数据,删除速度比delete更 快,无法撤回(回退)。
delete from A 删除数据表中的数据,可以回退,可添加where 子句。
19.数据库完整性约束分为以下四类:

1) 实体完整性:规定表的每一行在表中是惟一的实体。
2) 域完整性:是指表中的列必须满足某种特定的数据类型约束,其中约束又包括取值范围、精度等规定。
3) 参照完整性:是指两个表的主关键字和外关键字的数据应一致,保证了表之间的数据的一致性,防止了数据丢失或无意义的数据在数据库中扩散。
4) 用户定义的完整性:不同的关系数据库系统根据其应用环境的不同,往往还需要一些特殊的约束条件。用户定义的完整性即是针对某个特定关系数据库的约束条件,它反映某一具体应用必须满足的语义要求。
20.在避免死锁的方法中,允许进程动态地申请资源,系统在进行资源分配之前,先计算资源分配的安全性。若此次分配不会导致系统进入不安全状态,则将资源分配给进程;否则,进程等待。
银行家算法是避免死锁,而不是解除死锁
21. 功能性测试: 展示相关: 1.排版正常,不出现重叠、缺失等现象 2.图片正常展示,无明显拉伸现象 3.字体大小样式展示正常,过长截断4.点击跳转正常 5.用户滑动无卡顿 6.加载更多无重复 功能相关: 1.账号在登录和非登录状态领券 2.用户在经纬度缺失时距离显示 3.商户券领完后,不能重复领。商户券达到领取上限后,直接下线。 4.10点之前不能参加抢购; 5.抢之后『xxx人已抢』的显示数量要增加 兼容性测试: 1.屏幕大小测试:大屏、小屏手机 2.系统兼容性测试 ios、android 性能相关: 前端性能:CPU,内存占用,低配置Android机体验效果 后端性能:压测对应的后端接口的QPS,预测峰值流量及所对应集群的QPS。制定相应方案。 网络环境模拟测试: Wiki测试、3g/4g、弱网络情景 其他: (1)图片太多,图片不宜太大,以免消耗用户太多流量。 (2)用户数据统计等信息,统计商户曝光率,点击率等信息测试
22.单元测试-》模块测试-》集成测试-》系统测试,单元测试和模块测试界限不清晰,但在进行集成测试前一定都完成了,集成测试是把一些已测试过的模块集成起来,但是“已进入受控库并完成产品集成“,产品都集成了,难道不应该开始进行系统测试了吗
23.Beta测试是在用户场景下由用户进行的测试,比如说有一些我们下载的软件就是Beta版,我们下载并使用,其实就在进行测试,是一种验收测试也可叫做确认测试,通过之后即可发布。Alpha测试在Beta测试之前,由开发人员模拟真实环境进行的,也叫做验证测试。
24.1、测试用例的代表性:能够代表并覆盖各种合理的和不合理、合法的和非法的、边界的和越界的、以及极限的输入数据、操作和环境设置等。
2、测试结果的可判定性:即测试执行结果的正确性是可判定的,每一个测试用例都应有相应的期望结果。
3、测试结果的可再现性:即对同样的测试用例,系统的执行结果应当是相同的。
25.一个case一个功能点:每个case都要有个测点,找准一个测点则可,不能同时覆盖很多功能点,否则执行起来牵连太大;
2、case的易读:从执行者的角度去写case,最好不要有太多的术语在里面,如果要有最好指明位置;
3、case的执行粒度:粒度越小越好;
4、步骤清晰:一个case多个步骤,可一个重点,步骤指名人们怎么去操作,expect则指明这样操作之后应该看到什么结果---最好不要用正确,正常,错误之类的含糊主观的字眼。
5、总体设计:先正常,后异常,这样可以确保正常情况下功能能够走通。
25.Acceptance testing(验收测试),系统开发生命周期方法论的一个阶段,这时相关的用户和/或独立测试人员根据测试计划和结果对系统进行测试和接收。它让系统用户决定是否接收系统。它是一项确定产品是否能够满足合同或用户所规定需求的测试。这是管理性和防御性控制。
所以答案选B
26.Acceptance testing(验收测试),系统开发生命周期方法论的一个阶段,这时相关的用户和/或独立测试人员根据测试计划和结果对系统进行测试和接收。它让系统用户决定是否接收系统。它是一项确定产品是否能够满足合同或用户所规定需求的测试。这是管理性和防御性控制。
27.工件是加工过程中的生产对象。项目立项前,测试人员是不需要提供任何工件的。
28.自底向上测试是从“原子”模块(即软件结构最低层的模块)开始组装测试,因测试到较高层模块时,所需的下层模块功能均已具备,所以不再需要桩模块。
自底向上集成方法不用桩模块,测试用例的设计亦相对简单,但缺点是程序最后一个模块加入时才具有整体形象,需要开发驱动模块。
29.系统的最高能力是压力测试,而负载测试是在超荷情况下的性能测试
30.软件测试计划评审会需要有 项目经理、客户(可选)、配置管理员、测试经理、开发组长等人的参加。
31.软件实施活动的进入准则:
A.需求工件已经被基线化
B.详细设计工件已经被基线化
C.构架工件已经被基线化
32.按照规范的设计方法,一个完整的 数据库设计 一般分为以下六个阶段:
⑴需求分析:分析用户的需求,包括数据、功能和性能需求;
⑵概念结构设计:主要采用E-R模型进行设计,包括画E-R图;
⑶逻辑结构设计:通过将E-R图转换成表,实现从E-R模型到关系模型 的转换; 进行关系规范化。
⑷数据库物理设计:主要是为所设计的数据库选择合适的 存储结构 和存取路径;
⑸数据库的实施:包括编程、测试和试运行;
⑹数据库运行与维护:系统的运行与数据库的日常维护。
33.性能测试是测试过程中不可或缺的一个环节,它是通过自动化脚本的测试工具模拟多种正常、峰值以及异常条件来对系统的各项性能指标进行测试。
恢复测试是测试一个系统从如下灾难中能否很好地恢复,如遇到系统崩溃、硬件损坏或其他灾难性问题。 恢复测试指通过人为的让软件(或者硬件)出现故障来检测系统是否能正确的恢复,通常关注恢复所需的时间以及恢复的程度。
34.插入排序在数组有序时效率最高,因为每次只需要和上一个元素比较,不用移动元素
35.静态库和应用程序编译在一起,在任何情况下都能运行,而动态库是动态链接,文件生效时才会调用。
36.人的原因:弄错网址;拼写错误;未打开网络;
本机原因:浏览器版本低不兼容网页;本机防火墙阻止访问;中病毒导致浏览器工作不正常;
服务端原因:服务器宕机;服务器出错;服务器高负载无法及时回应;服务器超负载主动拒绝回应;本机被服务端加入了黑名单;
网络原因:网络不通;网络拥塞;DNS解析失败;DNS解析到错误的IP;
其他环境原因:域名被劫持;访问被黑客攻击.
37.多叉平衡树;叶节点全部在同一层;非叶节点有n-1个排序关键字和n个子树指针;根节点至少有两个子树,内部节点至少有m/2棵子树;相比B树,B+树内部节点除了关键字和子树指针,不保存数据信息,叶节点包含相应所有关键字和对应数据信息;
例子能说明核心思想即可,要点:1.每读取一个树节点,相当于读一次新的磁盘块,消耗一次磁盘IO;2.同样多的数据量下,B/B+树的高度大大降低,从而查找到数据所在的树节点做的磁盘IO次数少很多;3.树节点读取后,在内存中继续查找出所需数据,要消耗的时间量级与磁盘IO耗时相比小许多。
38.键盘硬件中断;OS处理中断,转换为特定消息放入浏览器程序的事件队列;浏览器的消息循环处理该消息,请求网址;OS请求本地域名缓存或域名服务器解析网址中的域名,得到IP;浏览器向该IP建立TCP连接(默认80端口);浏览器发送GET请求,包含网站的路径,TCP协议栈组装为TCP包,通过网卡发送;浏览器等待网站回复,进程被OS切换为等待状态;网站返回的数据到来,网卡产生中断;OS处理中断,TCP协议栈将数据读入buffer;浏览器获得数据,处理HTTP头,显示HTML网页