一套编程题 问答题61-80

61. Windows程序的入口是哪里?写出Windows消息机制的流程。

入口在WinMain()函数。

Windows应用程序消息处理机制:

A. 操作系统接收应用程序的窗口消息,将消息投递到该应用程序的消息队列中

B. 应用程序在消息循环中调用GetMessage函数从消息队列中取出一条一条的消息,取出消息后,应用程序可以对消息进行一些预处理。

C. 应用程序调用DispatchMessage,将消息回传给操作系统。

D. 系统利用WNDCLASS结构体的lpfnWndProc成员保存的窗口过程函数的指针调用窗口过程,对消息进行处理。

 

62. 函数assert的用法?
断言assert是仅在debug版本起作用的宏,用于检查“不应该“发生的情况。程序员可以把assert看成一个在任何系统状态下都可以安全使用的无害测试手段。

 

63. Windows编程线程同步的几种方式?(重要)

    原子锁、临界区(段)、事件、互斥(体)、信号量、可等候定时器

 

64. 关键字volatile有什么含意?并给出三个不同的例子。(嵌入式常考,了解)

一个定义为volatile的变量是说这变量可能会被意想不到地改变,这样,编译器就不会去假设这个变量的值了。精确地说就是,优化器在用到这个变量时必须每次都小心地重新读取这个变量的值,而不是使用保存在寄存器里的备份。下面是volatile变量的几个例子:

      1) 并行设备的硬件寄存器(如:状态寄存器)

      2) 一个中断服务子程序中会访问到的非自动变量

      3) 多线程应用中被几个任务共享的变量

 补充问题:

  1. 一个参数既可以是const还可以是volatile吗?解释为什么。

可以。

一个例子是只读的状态寄存器。它是volatile因为它可能被意想不到地改变。它是const因为程序不应该试图去修改它。

  1. 一个指针可以是volatile 吗?解释为什么。

可以。

尽管这并不很常见。一个例子是当一个中服务子程序修该一个指向一个buffer的指针时。

 

65. 对几种同步机制的总结

1.Critical Section(临界区)

A.速度快

B.不能用于不同进程

C.不能进行资源统计(每次只可以有一个线程对共享资源进行存取)

2.Mutex(互斥量)

A.速度慢

B.可用于不同进程

C.不能进行资源统计

3.Semaphore(信号量)

A.速度慢

B.可用于不同进程

C.可进行资源统计(可以让一个或超过一个线程对共享资源进行存取)

4.Event

A.速度慢

B.可用于不同进程

C.可进行资源统计

 

66. 参数传递有几种方式;实现多态参数传递采用什么方式,如果没有使用某种方式原因是什么;
传值,传指针或者引用

    采用引用的方式在多态中进行传参

原因:使用引用可以节省空间和时间,用于对象时不用调用拷贝构造函数产生参数副本,可以调高效

率,直观,安全。


67. C++和C定义结构的分别是什么。
  C 语言的结构仅仅是数据的结合,不可以定义方法。
  C++的struct 和 class 其实具备几乎一样的功能,只是默认的访问属性不一样而已。


68. 构造函数可否是虚函数,为什么?析构函数呢,可否是纯虚的呢?
  构造函数不能为虚函数,要构造一个对象,必须清楚地知道要构造什么,否则无法构造一个对象。

析构函数可以为纯虚函数。

 

69. 分别写出BOOL,int,float,指针类型的变量a 与“零”的比较语句。
规范写法
    BOOL :    if ( !a ) or if(a)
    int :     if ( a == 0)
    float :   const EXPRESSION EXP = 0.000001
              if ( a < EXP && a >-EXP)
    pointer : if ( a != NULL) or if(a == NULL)

 

70. 纯虚函数如何定义?使用时应注意什么?

virtual void f()=0;
  是接口,子类必须要实现

 

71. 死锁的处理

鸵鸟策略、预防策略、避免策略、检测与解除死锁

 

72. TCP/IP 建立连接的过程

在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。

第一次握手:建立连接时,客户端发送连接请求到服务器,并进入SYN_SEND状态,等待服务器确认;

第二次握手:服务器收到客户端连接请求,向客户端发送允许连接应答,此时服务器进入SYN_RECV状态;

第三次握手:客户端收到服务器的允许连接应答,向服务器发送确认,客户端和服务器进入通信状态,完成三次握手

 

74. 流操作符重载返回值申明为“引用”的作用:

流操作符<<和>>,这两个操作符常常希望被连续使用,例如:cout << "hello" << endl; 因此这两个操作符的返回值应该是一个仍然支持这两个操作符的流引用。可选的其它方案包括:返回一个流对象和返回一个流对象指针。但是对于返回一个流对象,程序必须重新(拷贝)构造一个新的流对象,也就是说,连续的两个<<操作符实际上是针对不同对象的!这无法让人接受。对于返回一个流指针则不能连续使用<<操作符。因此,返回一个流对象引用是惟一选择。这个唯一选择很关键,它说明了引用的重要性以及无可替代性,也许这就是C++语言中引入引用这个概念的原因吧。 赋值操作符=。这个操作符象流操作符一样,是可以连续使用的,例如:x = j = 10;或者(x=10)=100;赋值操作符的返回值必须是一个左值,以便可以被继续赋值。因此引用成了这个操作符的惟一返回值选择。

 

75. 触发器的作用?
    触发器是一中特殊的存储过程,主要是通过事件来触发而被执行的。它可以强化约束,来维护数据的

完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化。可以联级运算。如,某表上的触发器上包含对另一个表的数据操作,而该操作又会导致该表触发器被触发。

     触发器: 当满足触发器条件,则系统自动执行触发器的触发体。

触发时间:有before,after.触发事件:有insert,update,delete三种。触发类型:有行触发、语句

触发

 

76. 什么是存储过程?用什么来调用?
存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说只需创建一次,以后在该程序中就可以调用多次。如果某次操作需要执行多次SQL,使用存储过程比单纯SQL语句执行要快。可以用一个命令对象来调用存储过程。

 

77. 索引的作用?和它的优点缺点是什么?
索引就一种特殊的查询表,数据库的搜索引擎可以利用它加速对数据的检索。它很类似与现实生活中书的目录,不需要查询整本书内容就可以找到想要的数据。索引可以是唯一的,创建索引允许指定单个列或者是多个列。缺点是它减慢了数据录入的速度,同时也增加了数据库的尺寸大小。


78. 什么是内存泄漏?
    一般我们所说的内存泄漏指的是堆内存的泄漏。堆内存是程序从堆中为其分配的,大小任意的,使用

完后要显示释放内存。当应用程序用关键字new等创建对象时,就从堆中为它分配一块内存,使用完

后程序调用free或者delete释放该内存,否则就说该内存就不能被使用,我们就说该内存被泄漏了。

 

79. 维护数据库的完整性和一致性,你喜欢用触发器还是自写业务逻辑?为什么?
我是这样做的,尽可能使用约束,如check,主键,外键,非空字段等来约束,这样做效率最高,也最方便。其次是使用触发器,这种方法可以保证,无论什么业务系统访问数据库都可以保证数据的完整新和一致性。最后考虑的是自写业务逻辑,但这样做麻烦,编程复杂,效率低下。

 

80. 什么是事务?什么是锁?
事务就是被绑定在一起作为一个逻辑工作单元的SQL语句分组,如果任何一个语句操作失败那么整个操作就被失败,以后操作就会回滚到操作前状态,或者是上有个节点。为了确保要么执行,要么不执行,就可以使用事务。要将有组语句作为事务考虑,就需要通过ACID测试,即原子性,一致性,隔离性和持久性。
锁:在所以的DBMS中,锁是实现事务的关键,锁可以保证事务的完整性和并发性。与现实生活中锁一样,它可以使某些数据的拥有者,在某段时间内不能使用某些数据或数据结构。当然锁还分级别的。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一套MySQL数据库练习: 1. 创建一个名为“students”的数据库,其中包含一个名为“users”的表,该表包含以下列:ID(主键,自动增量),name(字符串),age(整数),gender(字符串)和email(字符串)。 2. 写一个SQL查询来显示“users”表中所有女性的名字和电子邮件地址。 3. 写一个SQL查询来显示“users”表中所有16岁及以下的学生的名字和电子邮件地址。 4. 写一个SQL查询来显示“users”表中所有男性学生的平均年龄。 5. 写一个SQL查询来显示“users”表中所有名字以“J”开头的学生的名字和电子邮件地址。 6. 写一个SQL查询来显示“users”表中所有具有电子邮件地址的学生的数量。 7. 写一个SQL查询来显示“users”表中最年轻的学生的名字和年龄。 8. 写一个SQL查询来显示“users”表中最年长的学生的名字和年龄。 9. 写一个SQL查询来显示“users”表中每个年龄组的学生数量。例如,如果表中有10个学生,其中4个年龄为18岁,3个年龄为19岁,2个年龄为20岁和1个年龄为21岁,那么查询应该返回以下结果: Age Group | Number of Students --------------------------- 18 | 4 19 | 3 20 | 2 21 | 1 10. 写一个SQL查询来显示“users”表中每个性别的学生数量。例如,如果表中有10个学生,其中6个是女性,4个是男性,那么查询应该返回以下结果: Gender | Number of Students -------------------------- Female | 6 Male | 4
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值