C#中级软件开发笔试题
背景
996的空闲时间参加了某半导体公司的软件开发笔试,记录一下笔试中的经典题目,考核很扎实。
笔试题目
选择题
(2)关于Main方法,以下描述错误的是(C )
A. Main方法是程序的唯一入口
B. Main方法可以设置为非静态方法
C. Main方法可以指定返回值
D. Main方法可以指定输入参数
(3)以下程序的输出结果为( A )
int a = 0;
int b = a++ + ++a;
int c = a++ + ++a;
Console.WriteLine(string.Format("{0},{1},{2}", a,b,c));
A. 4,2,6 B. 4,1,4 C. 4,2,4 D. 4,1,6
(4) 关于构造函数,下列说法正确的是( A )
A. 实例构造函数不能被继承
B. 实例构造函数内不能调用虚方法
C. 值类型构造函数可以对this进行赋值
D. 静态构造函数可以重载
(5)关于抽象类和接口的描述,下列说法错误的是( B )
A. 抽象类可以不包含抽象方法,但不能被实例化
B. 抽象类可以定义方法体,但必须在子类中重写
C. 接口中可以定义方法、字段、属性
D. 接口中方法前面不能有访问修饰符,且不能包含方法体
(6)关于string类,下列说法错误的是( D )
A. string类型属于引用类型
B. string类的内容是不可变的
C. 调用string类的"ToUpper"方法后,不会改变所指向的字符串的内容
D. 比较两个字符串是否相等时,运算符 "=="比较字符串的值,方法 "Equals"比较字符串的引用
(8)关于泛型,下列说法正确的是 ( C )
A.泛型类型可以被用来定义集合类,也可以用来定义非集合类
B.泛型方法必须在泛型类中定义
C.可以添加多个约束条件以限制传入的类型
D.泛型类可以作为父类被继承
(9)关于C#调用C++ dll的描述错误的是 ( E)
A. 定义的方法必须为静态方法
B. 定义的方法名必须和C++定义的方法名相同
C. 定义的方法必须使用DllImport特性修饰
D. 定义的方法必须使用extern关键字修饰
E. 定义的方法必须为public
(10) 某一密码仅使用K、L、M、N、O共5个字母,密码中的单词从左向右排列,密码单词必须遵循如下规则:
1)密码单词的最小长度是两个字母,可以相同,也可以不同
2)K不可能是单词的第一个字母
3)如果L出现,则出现次数不止一次
4)M不能使最后一个也不能是倒数第二个字母
5)K出现,则N就一定出现
6)O如果是最后一个字母,则L一定出现
① 下列哪一个字母可以放在LO中的O后面,形成一个3个字母的密码单词(B )
A. K B. L C. M D. N
② 如果能得到的字母是K、L、M,那么能够形成的两个字母长的密码单词的总数是?(C )
A. 1 B. 3 C. 6 D. 9
③ 下列哪一个是单词密码?( B )
A. KLLN B. LOML C. MLLO D. NMKO
简答题
(2)C#和C++混合编程中,如果C++中函数参数为一个指针,该指针的地址指向长度为10的一维double类型数组,在C#调用该函数时,参数该如何传递??
cs
using System.Runtime.InteropServices;
public class Program
{
[DllImport("YourCppLibrary.dll", CallingConvention = CallingConvention.Cdecl)]
private static extern void ProcessArray(double* arr);
public static void Main()
{
double[] myArray = new double[10] { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0 };
fixed (double* pArray = myArray)
{
ProcessArray(pArray);
}
}
}
(4)使用正则表达式验证给定字符串中包含的数(若数字连续,或点的前后均为数字,则归为一个数)。
如字符串: "$3R09.2D@190ECt5.0pa/",应返回 "3, 9.2, 190, 5.0" ?
cs
using System;
using System.Text.RegularExpressions;
class Program
{
static void Main()
{
string input = "$3R09.2D@190ECt5.0pa/";
string pattern = @"\b\d+(\.\d+)?\b";
MatchCollection matches = Regex.Matches(input, pattern);
foreach (Match match in matches)
{
Console.WriteLine(match.Value);
}
}
}
(3)设计一个自定义绘图控件,用于通过曲线或折线的方式展示一类实时产生并实时记录到文件中的数据,在需求对接中,主要需要考虑什么因素,简略举例?
cs
1.折线的横纵坐标定义
2.客户端数据量的大小,数据量大考虑虚拟化问题
3.界面更新频率
4.数据的展示区间,比如时间段
5.控件样式
6.是否支持历史数据查询
7.文件的异步读写,以及文件大小
编程题之后再更新,这个题目相当扎实,很多都没遇见过。算法题之后更新。