【牛客】恒生公司2015秋招开发类笔试题

恒生公司2015秋招开发类笔试题(一)

  1. 关于windows的消息机制的描述:
    只有当一个线程调用Win32 API中的GDI(Graphics Device Interface)和User函数时,操作系统才会将其看成是一个UI线程,并为它创建一个消息队列。(线程可以没有消息队列)
    SendMessage函数为指定的窗口调用窗口程序,直到窗口程序处理完消息再返回。而和函数PostMessage不同,PostMessage将一个消息寄送到一个线程的消息队列后就立即返回

  2. Windows中,以下关于动态链接库(DLL)的说法:
    DLL,是一种不可执行的二进制程序文件,它允许程序共享执行特殊任务所必需的代码和其他资源。DLL中可以导出变量、可以创建线程,不可以脱离EXE独立运行

  3. 数据结构中关于串的说法描述:
    数据结构中提到的串,即字符串,是一种特殊的线性表,由 n 个字符组成的一个整体( n >= 0 )。这 n 个字符可以由字母数字或者其他字符组成。
    特殊的串 :
    空串:含有零个字符的串。例如:S = “”(双引号中没有任何东西),一般直接用 Ø 表示。空串长度为0。
    空格串:只包含空格的串。注意和空串区分开,空格串中是有内容的,只不过包含的是空格,且空格串中可以包含多个空格。例如,a = ” ”(包含3个空格)。

  4. 软件工程的基本原则包括:
    抽象,信息隐蔽,模块(板)化,局部化,确定性,一致性,完备性,可验证性。

  5. 操作系统是对计算机资源进行管理的软件。

  6. 关于进程的描述:
    进程是动态的概念、执行需要CPU、具有生命周期、是对指令的描述,而程序才是指令的集合、静态的、没有生命周期。

  7. 数据存储和数据流都是数据,仅仅是所处的状态不同。
    数据存储,静态;数据流,动态。 数据存储,数据流加工过程中产生的临时文件或加工过程中需要查找的信息。

  8. 进程之间通信的途径:管道,信号,信号量,消息队列,共享内存,socket(套接字)。

  9. 给定C语言数据结构
    struct T{
    long w;
    union U {
    char c;
    int i;
    double d;
    } u1;
    } T1;
    假设在64位系统下,在不考虑字对齐方式的情况下
    为存储T1结构所需要的存储区域可能为(16)字节。
    解析】 c语言中的union是联合体,就是一个多个变量的结构同时使用一块内存区域,区域的取值大小为该结构中长度最大的变量的值;
    (1)32位:double 8字节,long 4字节,则最终12字节;
    (2)64位:double 8字节,long 8字节,最终16字节

  10. 基于TCP(面向连接)的Socket编程
    一、客户端:
    1、打开一个套接字(Socket);
    2、发起连接请求(connect);
    3、如果连接成功,则进行数据交换(read、write、send、recv);
    4、数据交换完成,关闭连接(shutdown、close);
    二、服务器端:
    1、打开一个套接字(Socket);
    2、将套接字绑定到服务器地址上(bind); 3、指定套接字为服务器套接字(listen),做好连接请求准备;
    4、等待连接请求(connect);
    5、如果连接请求到,则连接建立,进行数据交换(read、write、send、recv);
    6、数据交换完成,关闭连接(shutdown、close);
    基于UDP(面向无连接)的Socket编程
    客户端\服务器端:
    1、打开一个套接字(Socket);
    2、将套接字绑定到指定的服务器地址和端口上(bind);
    3、进行数据交换(read、write、send、recv); 4、数据交换完成,关闭连接(shutdown、close);
    MFC对Socket的支持:
    1、创建CAsyncSocket对象;
    2、发送接收数据报(SendToRecvFrom);
    3、连接服务器(Connect);
    4、接收连接(Listen);
    5、发送和接收流式数据(Send、Receive);
    6、关闭套接字(Close);
    7、差错处理(GetLastError)

  11. 以下的程序输入结果是:( 134 )
    public static void main(String args[]) {
    try {
    System.out.print(1);
    long l = 4 / (1 - 1);
    System.out.print(2);
    return;
    } catch (Exception e) {
    System.out.print(3);
    return;
    } finally {
    System.out.print(4);
    }
    }
    解析】Try中有异常直接进入能捕获到这个异常的catch块,不管后面的语句,即使有return;进入catch块后顺序执行,return前进入finally,finally中无return,返回catch执行return。

  12. 哪些类型的对象可以被throw指令抛出?
    Error、Exception、Throwable、RuntimeException
    解析】相关异常类继承实现关系 : java.lang.Object
    java.lang.Throwable
    java.lang.Error
    java.lang.Exception
    java.lang.Exception.RuntimeException
    throw指令能够抛出Throwable及其子类。

恒生公司2015秋招开发类笔试题(二)

  1. 一般地,可以将软件开发的生命周期划分为软件项目计划、需求分析与定义、软件设计、编码、测试和运行/维护6个阶段。

  2. 对软件系统进行验收测试(确认测试)的任务是验证软件( 是否符合用户提出的需求 )。

  3. 采用面向对象技术开发的应用系统的特点是(重用性更强)。
    解析面向对象方法具有很多其他方法不具备的特点,比如多态,继承等,这些特点都决定了面向对象方法支持软件复用。可重用性是面向对象方法的一个重要特征。

  4. Linux文件权限drwxr-xr–对应的数字是(754 )。
    【解析】在Linux中r是可读权限,4表示可读权限,w是可写权限,2表示可写权限,x是可执行权限,1表示可执行权限,然后将其相加。所以drwxr-xr–可以拆分为:rwx即4+2+1=7;r-x即4+1=5;r–为4。所以rwx r-x r–转换成权限数字为754。

  5. 在局域网模型中,数据链路层分为逻辑链路控制子层(LLC)和媒体(介质)访问控制子层(MAC)。

  6. 数据库中的多对多关联关系一般需采用中间表的方式处理,将多对多转化为两个一对多。
    对于一对多的关系,外键是由“多”的一方指向“一”的一方;对于多对多的关系,外键是由中间表分别指向两个表的主键,外键是多的一方指向一的一方,所以中间表是多。

  7. 当调用函数时,实参是一个数组名,则向函数传送的是(数组的首地址),数组的其他元素可以通过首元偏移得到。

  8. 申明以下变量:
    char ch;
    int i;
    float f;
    double d;
    则表达式: ch/i + (f*d – i) 的结果类型为(double)
    解析】基本数据类型的等级从低到高如下:char int long float double,运算的时候是从低转到高的,表达式的类型会自动提升为参与表达式求值的最上级类。

  9. 关于垃圾回收的陈述:
    A 垃圾回收线程的优先级很高,以保证不再使用的内存将被及时回收。(×)
    首先,当一个程序运行的时候,至少有两个线程在运行,一个是主线程,一个是垃圾回收线程,垃圾回收线程的优先级较低
    B 垃圾收集不允许程序开发者明确指定释放哪一个对象。(√)
    程序员不可以显示指定垃圾回收器回收对象,只能通过system.gc()来调用最多是推荐释放
    C 垃圾回收机制保证了JAVA程序不会出现内存溢出。(×)
    垃圾回收机制只是回收不再使用的JVM内存, 如果程序有严重的BUG 此时,照样溢出
    D 进入“Dead”状态的线程将被垃圾回收器回收。(×)
    进入死亡状态的线程,还可以恢复,gc不会回收。

  10. 如果希望某个变量只可以被类本身访问和调用,则应该使用下列哪一种访问控制修饰 (private)。
    解析】private和protected的区别:
    首先这两个都是访问类中成员权限的限制符。
    private是完全私有的,只有自己可以访问,派生类和外部都不可以访问。
    protected是受保护的,只有派生类可以访问,外部不能访问。
    在类外如果想使用类中的成员,只能直接使用public类型的,proteced和private都是不能访问的,对于类外而言,这两个是完全相同的。不能把私有数据的地址或引用泄露出去,外部可以改变私有数据的值。

  11. equals通常用来比较两个对象的内容是否相等,==用来比较两个对象的地址是否相等。

Object类中的equals方法定义为判断两个对象的地址是否相等(可以理解成是否是同一个对象),地址相等则认为是对象相等。这也就意味着,我们新建的所有类如果没有复写equals方法,那么判断两个对象是否相等时就等同于“==”,也就是两个对象的地址是否相等。
hashCode的作用是用来获取哈希码,也可以称作散列码。实际返回值为一个int型数据。用于确定对象在哈希表中的位置。
Object中有hashcode方法,也就意味着所有的类都有hashCode方法。
但是,hashcode只有在创建某个类的散列表的时候才有用,需要根据hashcode值确认对象在散列表中的位置,但在其他情况下没用。
java中本质上是散列表的类常见的有HashMap,HashSet,HashTable

  • 两个对象,如果a.equals(b)==true,那么a和b是否相等?
    相等,但地址不一定相等(a!==b)。
    且有a.hashCode()==b.hashCode()

  • 两个对象,如果hashcode一样,那么两个对象是否相等?
    不一定相等,判断两个对象是否相等,需要判断equals是否为true。

  1. Collection接口
    List关注事物的索引列表:
    ArrayList:可以理解为一个可增长的数组,提供快速迭代和随机访问的能力。
    LinkedList:可以理解为一个双链表,提供快速插入删除的能力。
    Vector:是线程安全版本的ArrayList,但是性能低。
    collection只定义了存储数据的标准,但是无法区分存储类型。实际中更多的是使用两个子接口:
    1.List(允许重复)
    2.Set(不允许重复):有两种很重要的子类HashSet(无序存储)和TreeSet(有序存储)。

恒生公司2015秋招开发类笔试题(三)

  1. 软件测试的主要目的是发现程序中的错误。

  2. 属于加密算法的有(DES、RSA、RC4)。
    加密算法的目的,在于别人无法成功查看加密后的数据,并且在需要的时候还可以对数据进行解密来重新查看数据。而 MD5 算法是一种哈希算法,哈希算法的设计目标本身就决定了,它在大多数时候都是不可逆的,即你经过哈希算法得出的数据,无法再经过任何算法还原回去。所以,既然不能将数据还原,也就不能称之为可以解密;既然不能解密,那么哈希的过程自然也就不能称作是「加密」了。

  3. Linux下命令 man 3 sleep中的参数3表示在( 库函数)章节中查找帮助。

  4. 0x12345678在采用BigEndian字节序时在内存中的排列顺序是( 12 34 56 78 ),在采用LittleEndian字节序时在内存中的排列顺序是( 78 56 34 12 )
    解析Little-endian:将低序字节存储在起始地址(低位编址);Big-endian:将高序字节存储在起始地址(高位编址)

  5. TCP协议和UDP协议的区别:
    1)TCP提供面向连接的传输,通信前要先建立连接(三次握手机制);UDP提供无连接的传输,通信前不需要建立连接。
    2)TCP提供可靠的传输(有序,无差错,不丢失,不重复);UDP提供不可靠的传输。
    3)TCP面向字节流的传输,因此它能将信息分割成组,并在接收端将其重组;UDP是面向数据报的传输,没有分组开销。
    4)TCP提供拥塞控制和流量控制机制;UDP不提供拥塞控制和流量控制机制。

  6. 关于虚拟内存的描述:
    虚拟内存可以比物理内存大(√)
    连续的虚拟内存地址对应连续的物理内存地址(×)
    虚拟内存增加了应用程序可以访问的地址空间(√)
    虚拟内存在物理上扩充了内存容量(×)

  7. strcpy是拷贝字符串,在拷贝结束的时候会为字符串添加一个’\0’;strncpy是拷贝字符,不会再字符串末尾添加’\0’,只按给出的字符个数来拷贝,拷贝完n个字符就结束。但是,如果n比src的长度大,那么空余的部分会被’\0’填充,以保证拷贝n个字符。strcpy和strncpy都只能接受char*,也就是字符类型的数据,如果是结构体,没办法操作。而且,这两个函数如果遇到dest和src的内存重叠会导致程序崩溃。
    memcpy是内存拷贝,memcpy函数的功能是从源src所指的内存地址的起始位置开始拷贝N个字节到目标dst所指的内存地址的起始位置中。
    memmove 可以避免内存区域重叠问题。如果出现重叠,则采用反向复制(降序,(dest+n)–, (src+n)-- ),从后向前复制字符串。如果不重叠,则正向复制(升序,dest++,src++),从前向后复制。函数的功能同memcpy基本一致,但是当src区域和dst内存区域重叠时,memcpy可能会出现错误,而memmove能正确进行拷贝。可以接受数组,整型,结构体,类等任何类型,它实现的是内存的拷贝。

  8. 有变量
    struct{
    char type;
    int num;
    char name[10];
    }rec;
    char是1字节,int是4字节,若按4字节对齐,那么sizeof(rec)等于(20)。
    解析】不知道我这样理解的对不对哈仅作为参考。内存对齐的原则是根据最宽数据类型的大小进行对齐的,本题char和int对齐,所以char为4字节,然后再加个int的字节数就是8字节了已经,因为是按4字节对齐的所以最后一个char数组本来占10个字节现在对齐了变成4的倍数就是12字节,全部加起来就是4+4+12=20字节。

  9. void foo() {
    static int val;
    ……
    }
    变量val的内存地址位于(未初始化数据段)
    解析】1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由os回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。 3、全局区(静态区)(static)—全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后有系统释放。 4、文字常量区 —常量字符串就是放在这里的。 程序结束后由系统释放。 5、程序代码区—存放函数体的二进制代码。

  10. 关于类的继承描述中:
    派生类可以访问基类的所有数据成员,调用基类的所有成员函数。(错)
    基类中private 修饰成员变量和成员函数,可以被继承,但是子类无法使用
    可以在派生类中把基类的虚函数重写(override)为非虚函数。(×)
    派生类继承了基类的全部属性(√)
    一个基类可以有多个派生类,一个派生类可以有多个基类。(√)

  11. fun1和fun2都是同一类的两个成员函数,但fun1不能直接调用fun2,这说明(fun1是静态函数,fun2不是静态函数)
    解析】静态方法(fun1)中不可以调用非静态方法(fun2),因为静态方法在类实例化前就写进内存,而非静态成员必须实例化后才写进内存,静态方法可以直接调用,而非静态成员只能用对象来调用。

  12. 关于变量及其范围的描述:
    实例变量是类的成员变量。(√)
    实例变量用关键字static声明。(×)
    java中所有变量分为成员变量(包括实例变量和以static修饰的类变量)和局部变量
    在方法中定义的局部变量在该方法执行时被创建。(√)
    解析】局部变量包括以下三部分:
    a)形参(函数形参)
    b)方法局部变量 (在方法内定义)
    c)代码块局部变量(在代码快内定义)
    上述各种局部变量参数的生存周期不同。尽量使用局部作用范围小的变量,这样可以使其在程序内存中停留的时间变短,提高程序运行速度。
    :Java允许局部变量和成员变量同名,如果方法里的局部变量和成员名相同,局部变量会覆盖成员变量,若要在这个方法里使用成员变量,可使用this来调用成员变量。
    局部变量在使用前必须被初始化。(√)

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

strawberryᝰ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值