北京信安go后端开发实习--笔试

北京信安go后端笔试题目

此次笔试一共7道题目,整体难度偏易,涉及到数据库计算机网络测试相关系统原理数据结构与算法

1、简述静态测试与动态测试的区别

1、测试部分的不同:静态测试是指测试不运行的部分:只是检查和审阅,如规范测试、软件模型测试、文档测试等。动态测试是通常意义上的测试,也就是运行和使用软件。

2、测试方式不同:静态测试,通过评审文档、阅读代码等方式测试软件称为静态测试,通过运行程序测试软件称为动态测试。

3、测试方法不同:静态测试是指不用执行程序的测试,它主要采取方案—代码走查、技术评审、代码审查的方法对软件产品进行测试。动态测试主要通过构造测试实例、执行程序、分析程序的输出结果这三种方法来对软件进行测试。

静态测试主要包括:(1)代码检查:代码会审、代码走查、桌面检查;(2)静态结构分析;(3)代码质量度量。
动态测试主要包括:(1)黑盒测试:又称功能测试。这种方法把被测软件看成黑盒,在不考虑软件内部结构和特性的情况下测试 软件的外部特性。(2)白盒测试:又称结构测试。这种方法把被测软件看成白盒,根据程序的内部结构和逻辑设计来设计测试实 例,对程序的路径和过程进行测试。

2、简述POST请求与GET请求的区别

1、get请求一般是去取获取数据(其实也可以提交,但常见的是获取数据);post请求一般是去提交数据。

2、get因为参数会放在url中,所以隐私性,安全性较差,请求的数据长度是有限制的,不同的浏览器和服务器不同,一般限制在 2~8K 之间,更加常见的是 1k 以内;post请求是没有的长度限制,请求数据是放在body中;

3、get请求刷新服务器或者回退没有影响,post请求回退时会重新提交数据请求。

4、get请求可以被缓存,post请求不会被缓存。

5、get请求会被保存在浏览器历史记录当中,post不会。get请求可以被收藏为书签,因为参数就是url中,但post不能。它的参数不在url中。

6、get请求只能进行url编码(appliacation-x-www-form-urlencoded),post请求支持多种(multipart/form-data等)。

3、简述数据中事务的特点(特性)

事务的四大特性:1、原子性(Atomicity);2、一致性(Consistency);3、隔离性(Isolation);4、持久性(Durability)

原子性:

一个事务必须被视为一个不可分割的最小工作单元,整个事务中的所有操作要么全部提交成功,要么 全部失败回滚,对于一个事务来说,不可能只执行其中的一部分操作,这就是事务的原子性

一致性:

数据库总是从一个一致性的状态转换到另一个一致性的状态。(在前面的例子中,一致性确保了,即 使在转账过程中系统崩溃,支票账户中也不会损失200美元,因为事务最终没有提交,所以事务中所做 的修改也不会保存到数据库中。)

隔离性:
通常来说,一个事务所做的修改操作在提交事务之前,对于其他事务来说是不可见的。(在前面的例 子中,当执行完第三条语句、第四条语句还未开始时,此时有另外的一个账户汇总程序开始运行,则 其看到支票帐户的余额并没有被减去200美元。)

持久性:
一旦事务提交,则其所做的修改会永久保存到数据库。

4、现在有一个表结构如下:表明是orders,字段为:name(姓名)typevarcharage(年龄)typeintbirthday(出生日期)typedatetimestatus(是否注册的状态)typevarchar。找出出生日期在2022-01-01之后的并且注册状态是已注册的用户信息,并且按照时间顺序从前往后排序,写出对应的SQL语句
1
SELECT * FROM orders WHERE (birthday > '2022-01-01' AND status = '已注册') ORDER BY birthday ASC;
5、简述进程与协程的区别,并说明它们是如何通信的

1、进程是资源分配和拥有的基本单位,而线程是程序执行的基本单位; 2、进程拥有更多的资源,包括cpu资源、内存资源、文件资源和字柄,而线程拥有的资源包括程序计数器、寄存器、栈和状态字; 3、对于并发性而言,不同进程之间切换实现并发,各自占有CPU实现并行;而一个进程内部的多个线程并发执行; 4、而在通信方面,进程间通信需要借助操作系统;而线程间可以直接读取进程数据段(如全局变量)来进行通信。

6、说明下面程序运行的结果
1
2
3
4
5
6
7
8
9
10
11
func tmp(i int) int {
if i == 0 {
return 1
} else {
return *tmp(i-1)
}
}

func main(){
fmt.Println(tmp(5))
}

你是否会认为这个结果为1???但实际上,它的执行结果应该是:执行错误!!!

错误原因是*tmp(i-1)并不是一个int类型的,而对于tmp函数而言,所传入的参数必须是int类型的,因此这里会发生错误!

7、算法题:现在给定一个数组nums,它里面的值由1-100里的数随机组成(即并不一定所有数都包含),nums的长度为0-10^32,现在需要判断nums中不包含哪些1-100的数字,并将其输出
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
func Search(nums []int) []int {

tmpMap := make(map[int]int, 100)
for k, v := range nums {
if _, ok := tmpMap[v]; !ok {
tmpMap[v] = k
}
}

res := make([]int, 0)
if len(tmpMap) == 0 {
return res
}
for i := 1; i <=100; i++ {
if _, ok := tmp[i]; !ok {
res = append(res, i)
}
}
return res
}

北京信安go后端开发实习--笔试
http://example.com/2024/06/20/日常实习-笔试/
作者
Samuel-Shu
发布于
2024年6月20日
许可协议