深信服2018年实习生校园招聘总结

2024-03-18 10:38

本文主要是介绍深信服2018年实习生校园招聘总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

参加了深信服2018届实习生的笔试,面试,顺利拿到offer,下面记录一下自己在这次笔试和面试的一下问题,题目很基础,但是是多选题,非常容易出错,及其考验基本功。

1下面代码能输出hell的是:

A.char buf[4]="hell";
B.char buf[]="hell";
C.char buf[8]=0;memcpy(buf,"hello",strlen("hell"));
D.char buf[4];strcpy(buf,"hell");
//答案bc,因为ad的内存分配不过,出现错误

2.简单略。

3 .下面代码的运行结果:
这里注意一个宏定义的函数功能,他传进去的arr是数组的指针,因此此题有解,而不是运行错误,本题答案为2。

#include<iostream>
using namespace std;
#define ADD(arr,cnt)                \
do {                                \int i;                          \for (i = 0; i < cnt; ++i){      \ret += arr[i];              \}                               \
}while(0)    //只会执行一次循环
int main(){int arr[2][2] = { 1,1 };//cout << arr[1][1] << arr[1][0] << endl;int i, ret = 0;for (i = 0; i < 2; i++)ADD(arr[i], 2);printf("%d", ret);
}

4.下代码运行结果

//t.a=1,t.b=0,因此错误
1.struct {int a, b;}t = { 1 };printf("%d", t.a/t.b);
//a为初始化,错误
2.void func() {int a;printf("%d", a);
}
//静态局部变化自动初始化为0,
3. void func() {static int a;printf("%d", a);
}
//全局变量初始化为0
4. int a;
void func() {printf("%d", a);
}

5.下面代码输出结果

#include<iostream>
using namespace std;
int main(){int i1 = 0xf0000000;unsigned int i2 = 0xf0000000;//cout << i1 << " " << i2 << endl;i1 >>= 1;i2 >>= 1;printf("%08x,%08x", i1, i2);
}

解析:i1为负数,i2为正数,c中的右移为算数右移,因此i1应为oxf80000,i2为0x78000000。

6.过于简单略
7.下面代码输出结果是:

#include<iostream>
using namespace std;
int main(){signed char c1 = -1;int i1 = (int)c1;unsigned char c2 = -1;int i2 = (int)c2;int i3 = int(3 * 1.0 / 2 * 3);cout << i1 << " " << i2 << " " << i3 << endl;
}

解析:有符号的char类型十六进制0xff,转成int要进行符号扩展成0xffffffff,因此为-1。声明成无符号-1,0xff,转成255,转成int后为255,i3=4,很简单。

8.简单略。
9.下面代码输出结果是:

#include<iostream>
using namespace std;
int main(){int a[6][2] = { 1,2,3,4,5,6,7,8,9 };int *p = a[1];//cout << *(p++) << endl;  //3//cout << *p++ << endl;   //3int(*q)[2] = &a[1];printf("%d,%d,%d", *++p, q[0][0], q[1][2]);
}

解析:依次输出4,3,7,int(*q)[2] = &a[1];比较疑惑q[1][2]=7,本来以为会出错的,这里注意q是一个数组指针。

11.32位x86,下面输出结果为:

#include <iostream>
using namespace std;
int main() {const char* str = "hello";char str1[] = "he";cout << sizeof(str) << endl;cout << sizeof(str1) << endl;cout << sizeof("hello") << endl;
}

分别输出为4,3,6。
注意什么时候数组会退化成指针,比如如果将数组作为形参传入一个函数是,其将退化成指针。

12.下面代码输出结果:

#include <iostream>
using namespace std;
int get(int val) {static int s1, s2 = 1;if (val > 0)s1 = val;return s1 + s2;
}
int main() {cout << get(0) << endl;cout << get(2) << endl;cout << get(0) << endl;
}

解析:*1. 注意到声明的类型为static,因此编译器会自动的初始化s1=0,2. s1的值只声明一次,一旦被修改其不会重新赋值为0,因此本题一次输出:1,3,3*。

13. 在32位x86平台,下面代码输出结果:

#include <iostream>
using namespace std;
struct {int val1;int val2;
}a = { 1 };
int main() {int *p = (int *)&a;p[0] = 2;cout << p[0] << " " << p[1] << endl;
}

解析:这里a是全局的变量,因此a.val1=1,a.val2=0,而p指向的是a.val1,因此分别输出2,0.

14:32位x86,4字节对齐,下面代码的输出结果为:

#include <iostream>
#pragma pack(4)
using namespace std;
union uni {struct {int n3;}s1;struct{int n4;int n5;}s2;
};
int main() {union uni u;cout << sizeof(u) << endl;int *p = &u.s2.n4;memset(&u, 0, sizeof(u));u.s1.n3 = 1;u.s2.n4 = 2;u.s2.n5 = 3;*p = 4;cout << u.s1.n3 << " " << u.s2.n4 << " " << u.s2.n5 << endl;
}

解析:首先要明白的是共用体的特性,这里sizeof(u)=8,指针p指向的是共用体的初始地址,这个地址可以使s1.n3或者s2.n4,因此如果改变了p所指向地址的值,那么将会同时改变,他们两个的值。
因此本题,输出的结果为:4,4,3

15. 下面哪些算法不能保证得到最优解(当存在解的时候):

A.Digikstra算法
B.Floyd算法
C.贪婪算法
D.遗传算法

此题,众所周知贪婪不一定得到最优解的,经查阅资料认为,遗传算法也不一定能得到最优解,因此,我个人认为此题应为CD(如有错误,欢迎指正).

16. 有一颗二叉树,其前序遍历为abcdefg,可能的中序遍历有:

A. abcdefg
B. gfedcba
C. gabcdef
D. cdefbag

解析:此题不难,需要注意的是两种遍历之间的关系,此题选择ABD

这篇关于深信服2018年实习生校园招聘总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/822083

相关文章

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义

Python实现图片分割的多种方法总结

《Python实现图片分割的多种方法总结》图片分割是图像处理中的一个重要任务,它的目标是将图像划分为多个区域或者对象,本文为大家整理了一些常用的分割方法,大家可以根据需求自行选择... 目录1. 基于传统图像处理的分割方法(1) 使用固定阈值分割图片(2) 自适应阈值分割(3) 使用图像边缘检测分割(4)

Windows Docker端口占用错误及解决方案总结

《WindowsDocker端口占用错误及解决方案总结》在Windows环境下使用Docker容器时,端口占用错误是开发和运维中常见且棘手的问题,本文将深入剖析该问题的成因,介绍如何通过查看端口分配... 目录引言Windows docker 端口占用错误及解决方案汇总端口冲突形成原因解析诊断当前端口情况解

java常见报错及解决方案总结

《java常见报错及解决方案总结》:本文主要介绍Java编程中常见错误类型及示例,包括语法错误、空指针异常、数组下标越界、类型转换异常、文件未找到异常、除以零异常、非法线程操作异常、方法未定义异常... 目录1. 语法错误 (Syntax Errors)示例 1:解决方案:2. 空指针异常 (NullPoi

Java反转字符串的五种方法总结

《Java反转字符串的五种方法总结》:本文主要介绍五种在Java中反转字符串的方法,包括使用StringBuilder的reverse()方法、字符数组、自定义StringBuilder方法、直接... 目录前言方法一:使用StringBuilder的reverse()方法方法二:使用字符数组方法三:使用自

Python依赖库的几种离线安装方法总结

《Python依赖库的几种离线安装方法总结》:本文主要介绍如何在Python中使用pip工具进行依赖库的安装和管理,包括如何导出和导入依赖包列表、如何下载和安装单个或多个库包及其依赖,以及如何指定... 目录前言一、如何copy一个python环境二、如何下载一个包及其依赖并安装三、如何导出requirem

Rust格式化输出方式总结

《Rust格式化输出方式总结》Rust提供了强大的格式化输出功能,通过std::fmt模块和相关的宏来实现,主要的输出宏包括println!和format!,它们支持多种格式化占位符,如{}、{:?}... 目录Rust格式化输出方式基本的格式化输出格式化占位符Format 特性总结Rust格式化输出方式

Python中连接不同数据库的方法总结

《Python中连接不同数据库的方法总结》在数据驱动的现代应用开发中,Python凭借其丰富的库和强大的生态系统,成为连接各种数据库的理想编程语言,下面我们就来看看如何使用Python实现连接常用的几... 目录一、连接mysql数据库二、连接PostgreSQL数据库三、连接SQLite数据库四、连接Mo

Git提交代码详细流程及问题总结

《Git提交代码详细流程及问题总结》:本文主要介绍Git的三大分区,分别是工作区、暂存区和版本库,并详细描述了提交、推送、拉取代码和合并分支的流程,文中通过代码介绍的非常详解,需要的朋友可以参考下... 目录1.git 三大分区2.Git提交、推送、拉取代码、合并分支详细流程3.问题总结4.git push

Kubernetes常用命令大全近期总结

《Kubernetes常用命令大全近期总结》Kubernetes是用于大规模部署和管理这些容器的开源软件-在希腊语中,这个词还有“舵手”或“飞行员”的意思,使用Kubernetes(有时被称为“... 目录前言Kubernetes 的工作原理为什么要使用 Kubernetes?Kubernetes常用命令总