多益网络笔试

⼏个排序算法中那个效率最⾼

img

归并

给出前序和中序,求出后序

https://blog.csdn.net/a133900029/article/details/80574823

完全二叉树求叶子节点

img

n = n0+n1+n2

n0=n2+1

若n为奇数,则n1=0,否则n1=1

其中n为总结点数

如题:总结点数为2n-1,则2n-1=n0+n1+n2,又n0=n2+1

得2n-1=n0+n1+n0-1

由题意,2n-1为奇数,所以n1=0

得2n-1=n0+n0-1

n=n0

SQL语句中关于内外连接两者的区别

内连接:只显示两表id匹配的
左外连接:显示join左边的表的所有数据(不管两表是否匹配),对于不匹配的部分都用NULL显示
右外连接:与左外连接相反,显示join右边的表的所有数据

Hash冲突的线性探测开放地址法

在这里插入图片描述

开放定址法处理散列表的冲突,平均查找长度与其它冲突处理方法相比,(高/低)

  • 比二分查找()【没查到- -】
  • 比链地址法(

网络模型

OSI七层网络模型TCP/IP四层概念模型对应网络协议
应用层(Application)应用层HTTP,TFTP,FTP,NFS,WAIS,SMTP
表示层(Presentation)Telnet,Rlogin,SNMP,Gopher
会话层(Session)SMTP,DNS
传输层(Transport)传输层TCP,UDP
网络层(Netword)网络层IP,ICMP,ARP,RARP,AKP,UUCP
数据链路层(Data Link)数据链路层FDDI,Ethernet,Arpanet,PDN,SLIP,PPP
物理层(Physical)IEEE 802.1A,IEEE 802.2 到 IEEE 802.11

关系数据库三要素

关系模型三大组成要素:数据结构、 关系完整性约束关系操作集合。

进程,线程资源分配⽅⾯的区别

进程是操作系统资源分配的基本单位  。

系统在运行的时候会为每个进程分配不同的内存空间。 

每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销; 
线程是任务调度和执行的基本单位 。 

对线程而言,除了CPU外,系统不会为线程分配内存(线程所使用的资源来自其所属进程的资源),线程组之间只能共享资源。 

 线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程之间切换的开销小。 

多线程和多进程区别:

多线程和多进程区别:
数据共享同步

【多进程】:数据是分开的:共享复杂,需要IPC;同步简单

【多线程】:多线程共享进程数据简单,同步复杂
内存CPU

【多进程】:占用内存多,切换复杂,CPU利用率低

【多线程】:占用内存少,切换简单,CPU利用率高
创建销毁切换:

【多进程】:复杂,速度慢。

【多线程】:简单,速度快
编程调试:

【多进程】:编程简单调试简单

【多线程】:编程复杂,调试复杂
可靠性:

【多进程】:进程间通信互不影响

【多线程】:一个线程挂掉将导致整个进程挂掉
优缺点:

多进程:

【优点】:内存隔离,单个进程的异常不会导致其他进程的奔溃,方便调试。

【缺点】:进程间的操作开销比线程大

适合使用场合:目标的子功能之间的交互少
多线程:

【优点】:提高了系统的并行性,开销小,对cup的利用率高

【缺点】:没有内存隔离,单个线程的奔溃会导致整个应用程序的奔溃

使用场合:存在大量的IO,网络等耗时操作。
进程状态的切换(3种状态):

运行态:指该进程正在被CPU调度运行。

就绪态:指该进程满足被cpu调度的所有条件但是并没有被调度执行。

阻塞态:指该进程正在等待某事件的发生之后才可以继续被cpu调度运行。

如何防御crsf攻击

CSRF(cross-site request forgery)跨站请求伪造

1、阻止不明外域的访问 :

同源验证

在http协议中,每个异步请求都会携带两个header,用户标记来源域名

  • origin Header
  • Referer Header

2、 提交时要求附加本域才能获取的信息

  • CSRF token存在session,token提交,服务器验证
  • 双重cookie验证

写出SQL:

Pesron(name,age)表中年龄在26-40岁的⼈优先显⽰,其他年龄段的正常显⽰

select name, age 
fron Person 
where age between 26 and 40
union 
select name, age
from Person
where age <= 26 or age >= 40

select name,age from Pesron order by  
case when flag>=30 and flag<=40 then 0 else 1 end 

删除链表倒数第n个结点,要求时间复杂度O(n)

1.两个指针,步伐相同
2.快指针先移动n步
3.两个指针一起移动,直到快指针为nil
4.此时慢指针就是倒数n位置

func removeNthFromEnd(head *ListNode, n int) *ListNode {
	dummy := &ListNode{
		Val:  0,
		Next: head,
	}
	first := head
	second := dummy
	for i := 0; i < n; i++ {
		first = first.Next
	}
	for first != nil {
		first = first.Next
		second = second.Next
	}
	second.Next = second.Next.Next
	return dummy.Next
}

A,B,C栈的出栈序列可能性有几种?

5

数据库保护分为哪几种?

安全性控制、完整性控制、并发性控制、数据恢复

单选题

1、能正确表示a和b同时为正或同时为负的逻辑表达式是( d)。
A.(a>=0||b>=0)&&(a<0||b<0)

B.(a>=0&&b>=0)&&(a<0&&b<0) d

C.(a+b>0)&&(a+b<=0)

D.ab>0

2、某公司有数据库,其中有一个表包含几十万个数据,但用户抱怨说查询速度太慢,下面哪种方法能提高查询的速度?( c)
A.收缩数据库
B.减少数据占用空间
C.建立聚集索引和非聚集索引
D.换个高档服务器

3、下列哪个选项可以正确用以表示八进制值8.(d )
A. 0x8
B. 0x10
C. 08
D. 010

4、设有5000个待排序的记录关键字,如果需要用最快的方法选出其中最小的10个记录关键字,用下列(d )方法可以达到此目的。
A.快速排序
B.插入排序
C.归并排序
D.堆排序

5、 多线程描述中错误的是(B
A) 共享进程数据简单,同步复杂。
B)占用内存多,切换复杂,CPU利用率低。
C)创建销毁、切换简单,速度快。
D)编程复杂、调试复杂。

6、Http的会话有四个过程,请选出不是的那一个(C)

A. 建立连接 B. 发请求信息 C. 传输数据 D. 发出响应信息

7、若查找每个记录的概率均等,则在具有n个记录的连续顺序文件中采用顺序查找法查找一个记录,其平均查找长度ASL为(B)

A. (n-1)/2 B. (n+1)/2 C. n/2 D. n

题解:

不要混淆O(n)和n

顺序查找,最好情况下,1次找到;最坏情况下,比较n次;以上,平均查找次数1+2+……+n=(1+n)/2,复杂度O(n)

8、以下情况不一定出现TCP分节RST的情况的情况是(C)

A. 服务器端端口未打开而客户端来连接时

B. SO_RCVTIMEO选项设置了超时时间并超时

C. 服务器主机奔溃后重启

D. 在一个已经关闭的socket上收到数据

题解:

四种情况会发送RST包:
1、端口未打开
2、请求超时
3、提前关闭
4、在一个已关闭的socket上收到数据

4、设一组初始记录关键字序列(5,2,6,3,8),以第一个记录关键字5为基准进行一趟快速排序的结果为(C)

A. 3,2,5,8,6

B. 2,3,5,8,6

C. 3,2,5,6,8

D. 2,3,6,5,8

5、(D)属于Web中使用的安全协议

A. PEM、SSL

B. S/MIME、SSL

C. S-HTTP、S/MIME

D. SSL、S-HTTP

6、对动态网络地址交换(NAT),不正确的说法(C)

A. 最多可有64000个同时的动态NAT连接

B. 将很多内部地址映射到单个真实地址

C. 外部网络地址和内部地址一对一的映射

D. 每个连接使用一个接口

7、若需要禁止root用户以SSH方式登录到服务器,可以在服务器上的sshd_config文件中作(A)设置。

A. PermitRootLogin no

B. DenyRoot yes

C. RootEnable no

D. AllowSuperLogin no

8、许多大中型企业出于多种原因建立了数据仓库,以下(A)不是建立数据仓库的合理理由。

A. 将企业的各种应用系统集中在一起

B. 充分利用企业信息系统生成的各种数据

C. 解决企业业务应用和数据分析应用的性能冲突

D、 以面向主题、集成的方式合理的组织数据

9、下面那个测试是属于黑盒测试(B)

A. 基本路径测试

B. 等价类划分

C. 判定结构分析

D. 逻辑覆盖测试

10、以下哪种操作能够实现实体完整性(B)

A. 设置唯一主键

B. 设置外键

C. 减少数据冗余

D. 设置主键

11、在32位机器中,以下哪个表达式的值是与其他三个不同的()

char buf[] = “abcd”;

A. sizeof(char*)

B. sizeof(int*)

C. strlen(buf)

D. sizeof(buf)

填空题

1、Java中用于定义整型变量的关键字有四个(byte)、(short)、(int)、(long)。

2、Java中用(extends)关键字指明继承关系,用(implements)关键字指明对接口的实现。

3、this代表了当前对象的引用,(super)表示的是当前对象的父类对象。

4、一个具有513个节点的二叉树,最少有(10)层,最多有(513)层。

2.、下面程序的输出是(-6)

int i = 5;

int j = 10;

System.out.println(i + ~j)

  • `(~x) = -(x + 1)`
    

简答题

有3个表:Employee职工(工号,姓名,性别,年龄,部门)(num,name, sex, age, departmentno) Wage工资(编号,工资金额)(No,amount) Attend出勤(工号,工资编号,出勤率)(num ,No, attendance) 请根据要求,编写相应的SQL语句。 (1)写一个SQL语句,查询工资金额为8000的职工工号和姓名。 (2)写一个SQL语句,查询职工张三的出勤率。 (3)写一个SQL语句,查询3次出勤率为0的职工姓名和工号。 (4)写一个SQL语句,查询出勤率为10并且工资金额小于2500的职工信息。

参考答案:

(1)
SELECT eml.num,eml.name FROM Employee AS eml
WHERE eml.num =
(
SELECT Wage.num FROM Wage WHERE Wage.amount=8000
);

(2)
SELECT Attend .attendance FROM Attend WHERE Attend.num IN
(
SELECT eml.num FROM Employee AS eml WHERE eml.name LIKE‘张三’
);

(3)SELECT eml.name ,eml.num FROM Employee AS eml WHERE
(
SELECT count(*) FROM Attend WHERE Attend.num=eml.num AND attendance=0
) = 3;

(4)
SELECT * FROM Employee AS eml WHERE
(
SELECT Attend.No FROM Attend WHERE Attend.num=eml.num AND Attend.attendance=10
) =
(
SELECT Wage.No FROM Wage WHERE Wage.amount < 2500
)

【红黑树】插入操作的时间复杂度O(logN),最坏时间复杂度O(logN)
【B+树】插入操作的时间复杂度O(1),最坏时间复杂度O(没查到- - )
【Hash表】插入操作的时间复杂度O(1),最坏时间复杂度O(N)
【排序链表】插入操作的时间复杂度O(1),最坏时间复杂度O(1)

TCP如何保证可靠连接

首先,TCP 的连接是基于三次握手,而断开则是四次挥手 .

其次,TCP 的可靠性,还体现在有状态;TCP 通过校验和、ACK 应答、超时重传

再次,TCP 的可靠性,还体现在可控制。通过流量控制(滑动窗口)和拥塞控制来控制发送方发送速率

for(; ;)和while(true)的区别是什么,列出3个以上。

img

6、给一台普通的2G的内存PC机,要求处理一个包含40亿个不重复并且没有排过序的无符号的int整数,给出一个整数,问如果快速的判断这个整数是否在文件40亿个数据当中?请给出解决思路?
方案1∶申请512M的内存,一个bit位代表一个unsigned int值。读入40亿个数,设置相应的bit位,读入要查询的数,查看相应bit位是否为1,为1表示存在,为0表示不存在。

编程题

冒泡排序

// popUpSorting
package main

import (
	"fmt"
)

func popupSort(col []int) []int {
	var n = len(col)
	if n <= 1 {
		return col
	}
	for i := 0; i < n; i++ {
		for j := n - 2; j >= i; j-- {
			if col[j] > col[j+1] {
				col[j], col[j+1] = col[j+1], col[j]
			}
		}
	}

	return col
}

func main() {
	var b = []int{9, 8, 6, 7, 4, 3, 2, 1}

	fmt.Println(popupSort(b))
}


大数运算A mod B

思路:用数组存储大数A,然后通过循环来计算每一位对B取模。

/*---大数运算伪代码---*/
# include <iostream>
# include <cstring>
using namespace std;

int main(){
	char A[1000]; //大数A
	int B ;
	int ans;//答案

	for(int i = 0;i < strlen(A);i++){		
		ans = (ans*10 + (int)A[i]) % B;
	}

	cout << ans << endl;
	return 0;
} 

权重

有n个样品,第i个样品的权重对应i,权重大的个体被抽到的概率大,权重小的个体被抽到的概率小,现在要求按比重从中随机选取一个样品。

rand.Seed(time.Now().UnixNano())
randomNum := rand.Intn(10)	// 生成0~9的随机数

背包

有N件物品和一个容量为V的背包。第i件物品的费用是c,价值是w。求解将哪些装入背包可使这些物品的费用总和不超过背包容量,且价值最大。

(用Java语言实现,先写编程思路,再写代码,不写编程思路扣分)

https://studygolang.com/articles/25837

func getMaxValue_two() {
    for i := 1; i <= N; i++ {
        for j := V; j >= w[i]; j-- {
            fmt.Println(j, "  ", j-w[i])
            f_two[j] = max(f_two[j], f_two[j-w[i]]+v[i])
        }
    }

    fmt.Println(f_two[V])
}

九宫格

编写一个九宫格程序,有9个格子,填入1-9这9个数字,保证横、竖,对角线必须和相等。(先写思路,在写代码)

 */\* 数组 - 5 行 2 列\*/*
  **var** a = [5][2]int{ {0,0}, {1,2}, {2,4}, {3,6},{4,8}} 

https://blog.csdn.net/jiayouliying/article/details/48930509?spm=1001.2101.3001.6650.5&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-5-48930509-blog-85320233.pc_relevant_antiscanv2&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-5-48930509-blog-85320233.pc_relevant_antiscanv2&utm_relevant_index=10

XML

解释XML时,需检验结点是否闭合,如必须有与之对应,用()数据结构实现比较好?

BFS

广度优先遍历用()数据结构

DFS

深度优先遍历用(队列)数据结构

静态链接库和动态链接库有什么区别?

动态链接库:动态链接库中包含了多个已经被编译、链接好的函数和数据资源,但并不包含函数的源码。动态链接库在windows下是.dll 文件,英文为Dynamic Link Library,在Linux下是.so文件。如果在你的程序中使用了动态链接库,那么在程序运行时,会动态地将该库加载,然后调用库中的函数。动态库的优点是便于维护和更新各个程序模块,比如在一个大型程序中,会有数十个甚至更多的模块。使用动态库封装每个模块后,在需要更新某模块时,只需替换该模块对应的.dll或者.so文件即可,而不需要更新整个程序,这一点是下文要讲到的静态链接库无法实现的。

静态链接库:静态链接库在windows下是.lib文件,在Linux下是.a文件。和动态链接库不同,它包含了函数的源代码,因此文件大小通常比动态库大很多。如果你的程序中依赖了某个静态库,那么在你的程序编译链接过程中,会自动从静态库中取出需要用到的函数代码,然后和当前程序进行链接,生成可执行文件。由此可见,最终的可执行文件在运行时不再需要依赖静态库,可直接运行,这一点明显区别于动态库(在动态库的情况中,程序在运行时必须能够找到相应的动态库文件)。另外和动态库不同的是,静态库中某函数更新后,整个程序需要重新编译链接。

进程之间的通信可以通过哪几种方式实现(至少6种)

无名管道( pipe ) 有名管道 (named pipe) 高级管道(popen) 消息队列( message queue ) 信号量( semophore ) 信号 ( sinal ) 共享内存( shared memory ) 套接字( socket )

翻译

Beautiful is better than ugly.

Explicit is better than implicit.

Simple is better than complex.

Complex is better than complicated.

Flat is better than nested.

Sparse is better than dense.

Readability counts.

Special cases aren’t special enough to break the rules.
美胜于丑。

显性比隐性好。

简单总比复杂好。

复杂总比隐晦好

平的比嵌套的好。

稀疏比密集好。

可读性很重要。

特殊情况不足以违反规则。

Although the compiler ignores comments ,readers of our code do not .Programmers tend to believe comments even when other parts of the system documentation are out of date .An incorrect comment is worse than no comment at all because it may mislead the reader .When you change your code .be sure to update the comments。

尽管编译器忽略了注释,但我们的代码的读者却没有。即使系统文档的其他部分已经过时,程序员也倾向于相信评论。不正确的评论比没有评论更糟糕,因为它可能误导读者。当你改变你的代码。一定要更新注释。

A function definition typically consists of a return type,a name,a list of zero or more parameters,and a body.

The parameters are specified in a comma-separated list enclosed in parentheses.The actions that the

function performs are specified in a statement block ,referred to as the function body.

函数定义通常由返回类型、名称、零个或多个参数的列表和正文组成。

参数在中用逗号分隔的列表中指定圆括号行动

函数执行是在一个称为函数体的语句块中指定的。

简答

1、举例5个以上常见的Web应用安全性问题。

1、跨站脚本攻击

2、SQL注入攻击

3、远程命令执行(Code execution,个人觉得译成代码执行并不确切)

4、目录遍历(Directory traversal)

5、文件包含(File inclusion)

6、脚本代码暴露(Script source code disclosure)

7、Http请求头的额外的回车换行符注入(CRLF injection/HTTP response splitting)

8、跨帧脚本攻击(Cross Frame Scripting)

9、PHP代码注入(PHP code injection)

10、XPath injection

11、Cookie篡改(Cookie manipulation)

12、URL重定向(URL redirection)

13、Blind SQL/XPath injection for numeric/String inputs

14、Google Hacking

  • 8
    点赞
  • 104
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
对于多益网络的算法岗位笔试,我可以为您提供一些一般性的建议。通常,多益网络的算法岗位笔试会涵盖以下内容: 1. 算法和数据结构:您可能会被要求编写一些基本的算法,例如排序算法(如冒泡排序、快速排序)或查找算法(如二分查找)。另外,您还可能需要熟悉常用的数据结构,如数组、链表、栈和队列等。 2. 编程能力:您需要熟练掌握至少一种编程语言,例如Python、C++或Java,并能够运用该编程语言解决实际问题。在笔试中,您可能会被要求完成一些编程题目,如字符串处理、数组操作或递归算法等。 3. 综合能力:除了算法和编程能力外,多益网络的算法岗位笔试还可能考察您的综合能力。这包括对问题的分析和解决能力、代码的可读性和可维护性、以及对软件工程原则的理解等。 针对这些内容,我建议您进行以下准备: 1. 复习常用的算法和数据结构,并熟悉它们的原理和应用场景。 2. 练习编写代码,特别是与算法和数据结构相关的代码。您可以通过刷LeetCode、参加在线编程比赛或解决一些编程题目来提高编程能力。 3. 关注软件工程的最佳实践,了解如何编写可读性好、可维护性强的代码。 4. 在面试前对多益网络的业务和产品进行一定的了解,以便更好地理解和解决相关问题。 希望这些建议对您有所帮助,祝您成功通过多益网络的算法岗位笔试!如果您有其他问题,我会很乐意帮助您。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值