360、腾讯、迅雷Windows编程、网络编程面试题及答案

简介: MainFrm为框架类,包含应用程序外框所包含部分。CView为视图类,用于显示数据的空白区域窗口。CDocument为文档类。MFC提供了文档/视类结构,采用数据本身和显示分离的机制。其中文档类CDocument用于数据的存储和加载,视类CView用于数据的显示与修改。

1`. 问MainFrm,CDocument和CView类之间的关系,


MainFrm为框架类,包含应用程序外框所包含部分。CView为视图类,用于显示数据的空白区域窗口。


CDocument为文档类。


MFC提供了文档/视类结构,采用数据本身和显示分离的机制。其中文档类CDocument用于数据的存储和加载,视类CView用于数据的显示与修改。


2. Dialog和 ModuelDialog不同用法


1)类型不同


MoudleDialog 模态对话框,属于垄断对话框,例如打开对话框,点击打开后不能再执行其他操作,会发出“嘟嘟嘟”的声音;


      非模态对话框,属于非垄断对话框,利用查找对话框,点击查找同时可以执行其他操作;


      即:非模态不垄断;模态垄断。


2)用法不同


      CDialog::Create :to create a modelessdialog box


      CDialog::DoModal :Call this member function to invoke the modal dialog box andreturn the dialog-box result when done


3. 网络编程的一般步骤


对于TCP连接:


1.服务器端1)创建套接字create;2)绑定端口号bind;3)监听连接listen;4)接受连接请求accept,并返回新的套接字;5)用新返回的套接字recv/send;6)关闭套接字。


2.客户端1)创建套接字create; 2)发起建立连接请求connect; 3)发送/接收数据send/recv;4)关闭套接字。


TCP总结:


Server端:create -- bind -- listen--  accept--  recv/send-- close


Client端:create------- conncet------send/recv------close.




对于UDP连接:


1.服务器端:1)创建套接字create;2)绑定端口号bind;3)接收/发送消息recvfrom/sendto;4)关闭套接字。


2.客户端:1)创建套接字create;2)发送/接收消息sendto/recvfrom;3)关闭套接字.


UDP总结:


Server端:create----bind ----recvfrom/sendto----close


Client端:create----  sendto/recvfrom----close.




4.sendMessage与postMessage区别?


不同点:sendMessage发送完毕以后需要等待处理完才返回;而postMessage发送消息后立即返回。


Do not post the WM_QUIT message using PostMessage; use thePostQuitMessage function.


postMessage将消息放置到消息队列中,不等待线程处理消息就立即返回。


sendMessage发送指定的消息到窗口,并会调用窗口过程,直到窗口过程处理完毕后才返回。



5. TCP的重发机制是怎么实现的?


      1.滑动窗口机制,确立收发的边界,能让发送方知道已经发送了多少(已确认)、尚未确认的字节数、尚待发送的字节数;让接收方知道(已经确认收到的字节数)。


      2.选择重传,用于对传输出错的序列进行重传。


6. TCP和UDP的区别?


      1)TCP面向连接(三次握手机制),通信前需要先建立连接;UDP面向无连接,通信前不需要建立连接;


      2)TCP保障可靠传输(按序、无差错、不丢失、不重复);UDP不保障可靠传输,使用最大努力交付;


      3)TCP面向字节流的传输,UDP面向数据报的传输。


7.进程间通信有哪些方式?


      1)共享内存,如剪贴板;


      2)匿名管道/命名管道;


      3)邮槽。


      其中共享内存、匿名管道只能实现两个进程间的通信,不能跨网络通信;命名管道和邮槽可以跨网络进程间通信;但命名管道属于点对点的通信,可传输大数据量;而邮槽一次传输的数据量非常有限,通常少于424字节。


8.TCP为什么不是两次连接?而是三次握手?


如果A与B两个进程通信,如果仅是两次连接。可能出现的一种情况就是:A发送完请报文以后,由于网络情况不好,出现了网络拥塞,即B延时很长时间后收到报文,即此时A将此报文认定为失效的报文。B收到报文后,会向A发起连接。此时两次握手完毕,B会认为已经建立了连接可以通信,B会一直等到A发送的连接请求,而A对失效的报文回复自然不会处理。依次会陷入B忙等的僵局,造成资源的浪费。


9. connect方法会阻塞,请问有什么方法可以避免其长时间阻塞?


可以考虑采用异步传输机制,同步传输与异步传输的主要区别在于同步传输中,如果调用recvfrom后会一致阻塞运行,从而导致调用线程暂停运行;异步传输机制则不然,会立即返回。


8.网络编程中设计并发服务器,使用多进程与多线程,请问有什么区别?


答案一:


1,进程:子进程是父进程的复制品。子进程获得父进程数据空间、堆和栈的复制品。


2,线程:相对与进程而言,线程是一个更加接近与执行体的概念,它可以与同进程的其他线程共享数据,但拥有自己的栈空间,拥有独立的执行序列。两者都可以提高程序的并发度,提高程序运行效率和响应时间。


线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源管理和保护;而进程正相反。同时,线程适合于在SMP机器上运行,而进程则可以跨机器迁移。


答案二:


根本区别就一点:用多进程每个进程有自己的地址空间(address space),线程则共享地址空间。所有其它区别都是由此而来的:


1。速度:线程产生的速度快,线程间的通讯快、切换快等,因为他们在同一个地址空间内。


2。资源利用率:线程的资源利用率比较好也是因为他们在同一个地址空间内。


3。同步问题:线程使用公共变量/内存时需要使用同步机制还是因为他们在同一个地址空间内。


等等


9. 简述Windows编程容易出错的几点


      ??


10.Windows编程的知识点,如消息机制,一个自定义消息如何实现。


      自定义消息共分为3步骤:


1)  自定义消息:#defineWM_MYMSG WM_USER+1


2)  在头文件中声明函数:       afx_msg voidonMyMsg();


3) 在消息映射中添加对应关系:


//BEGIN_MESSAGE_MAP(CDefMsgDemoDlg,CDialog) //END_MESSAGE_MAP()


ON_MESSAGE(WM_MYMSG,onMyMsg)


4)定义函数void onMyMsg();


核心即:函数原型、关联消息与消息响应函数的宏、函数实现。



11.SNMP协议


      简单网络管理协议——应用层协议.


      包括5种数据包:Get-Request;Get-Next-Request; Set-Request, Get-Response; Trap;


12.RAW套接字


      广泛应用于高级网络编程,如SNIFFER、拒绝服务、IP欺骗都是通过原始套接字实现的。



13. 窗口创建的步骤:


1)设计窗口类(填充结构体)à2)注册窗口类RegisterClassà3)创建窗口;4)显示ShowWindow&更新窗口UpdateWindowà4)循环获取消息GetMessage(){翻译(转换)TranslateMessage消息、处理消息DispathMessage(将消息交付给窗口过程进行处理)}。



14. 当触发按钮以后发生了什么?


      1)比如点击鼠标左键后,操作系统首先会感知到该事件;2)操作系统将事件其转化为消息;3)操作系统将消息投递到对应程序(线程)的消息队列中;4)应用程序(线程)从消息队列中通过GetMessage获取消息,并通过DispathMessge将消息交付给操作系统;5)操作系统通过设计窗口类时指定的窗口过程对对消息进行处理。



15. 你平时是如何调试程序的?(引申)当一个程序在自己机器上运行正常,但是在其他机器上程序运行崩溃,如何查找原因?


断点调试:


值:查看变量(Variables)、表达式、内存(Memory)、寄存器(Register)的值。


进程控制:VC允许被中断的程序继续运行、单步运行和运行到指定光标处,分别对应快捷键F5、F10/F11和CTRL+F10。


其他调试手段:系统提供一系列特殊的函数或者宏来处理Debug版本相关的信息TRACE、ASSERT、VERIFy。Ctrl+B打开断点设置。


运行崩溃,如何查找原因? [提示后],可以通过打印语句来发现错误!



16.   线程、窗口、消息队列三者之间的关系?


MSDN上如是说:


Thethread to which the message is posted must have created a message queue,or elsethe call to PostThreadMessage fails.  


并提供了如下两种解决方法:


CallPostThreadMessage.If it fails, call the Sleep function and call PostThreadMessageagain. Repeat  until  PostThreadMessage  succeeds.


【面试官】说:一个线程对应一个或多个窗口(创建的关系),同时一个线程对应了一个消息队列。


【总结如下】:

1.在MFC程序框架里面,CWinThread专门负责线程创建的,它可以创建用户界面线程,及工作者线程。其中用户界面线程是包含消息队列的,而工作者线程是不包含消息队列的。即【一句话】:用户界面线程对应一个消息队列。

2.CWinThread类和CWnd类都派生自CCmdTarget,而CDialog对话框类、视图类CView都派生自CWnd。

【深入浅出MFC里一句话】:不是每一个窗口都产生一个线程(因为要付出昂贵的线程切换代价)。即,深入理解之:一个线程可以对应多个窗口。主线程可以创建出其所要的全部窗口。

【结论】一个UI线程就1组消息队列集合,一个线程可以创建多个窗口。


     大家一起探讨下,对不对?欢迎讨论。。。


相关文章
|
6月前
|
SQL Java 数据库连接
阿里腾讯互联网公司校招 Java 面试题总结及答案解析
本文总结了阿里巴巴和腾讯等互联网大厂的Java校招面试题及答案,涵盖Java基础、多线程、集合框架、数据库、Spring与MyBatis框架等内容。从数据类型、面向对象特性到异常处理,从线程安全到SQL优化,再到IOC原理与MyBatis结果封装,全面梳理常见考点。通过详细解析,帮助求职者系统掌握Java核心知识,为校招做好充分准备。资源链接:[点击下载](https://pan.quark.cn/s/14fcf913bae6)。
201 2
|
9月前
|
人工智能 监控 JavaScript
Crack Coder:在线面试“AI外挂”!编程问题秒出答案,完全绕过屏幕监控,连录屏都抓不到痕迹!
Crack Coder 是一款开源的隐形 AI 辅助工具,专为技术面试设计,支持多种编程语言,提供实时编程问题解决方案,帮助面试者高效解决问题。
436 14
|
9月前
|
机器学习/深度学习 API Python
Python 高级编程与实战:深入理解网络编程与异步IO
在前几篇文章中,我们探讨了 Python 的基础语法、面向对象编程、函数式编程、元编程、性能优化、调试技巧、数据科学、机器学习、Web 开发和 API 设计。本文将深入探讨 Python 在网络编程和异步IO中的应用,并通过实战项目帮助你掌握这些技术。
|
监控 安全
公司上网监控:Mercury 在网络监控高级逻辑编程中的应用
在数字化办公环境中,公司对员工上网行为的监控至关重要。Mercury 作为一种强大的编程工具,展示了在公司上网监控领域的独特优势。本文介绍了使用 Mercury 实现网络连接监听、数据解析和日志记录的功能,帮助公司确保信息安全和工作效率。
260 51
|
算法 前端开发 Java
数据结构与算法学习四:单链表面试题,新浪、腾讯【有难度】、百度面试题
这篇文章总结了单链表的常见面试题,并提供了详细的问题分析、思路分析以及Java代码实现,包括求单链表中有效节点的个数、查找单链表中的倒数第k个节点、单链表的反转以及从尾到头打印单链表等题目。
160 1
数据结构与算法学习四:单链表面试题,新浪、腾讯【有难度】、百度面试题
|
数据库连接 Go 数据库
Go语言中的错误注入与防御编程。错误注入通过模拟网络故障、数据库错误等,测试系统稳定性
本文探讨了Go语言中的错误注入与防御编程。错误注入通过模拟网络故障、数据库错误等,测试系统稳定性;防御编程则强调在编码时考虑各种错误情况,确保程序健壮性。文章详细介绍了这两种技术在Go语言中的实现方法及其重要性,旨在提升软件质量和可靠性。
208 1
|
负载均衡 算法 Java
腾讯面试:说说6大Nginx负载均衡?手写一下权重轮询策略?
尼恩,一位资深架构师,分享了关于负载均衡及其策略的深入解析,特别是基于权重的负载均衡策略。文章不仅介绍了Nginx的五大负载均衡策略,如轮询、加权轮询、IP哈希、最少连接数等,还提供了手写加权轮询算法的Java实现示例。通过这些内容,尼恩帮助读者系统化理解负载均衡技术,提升面试竞争力,实现技术上的“肌肉展示”。此外,他还提供了丰富的技术资料和面试指导,助力求职者在大厂面试中脱颖而出。
腾讯面试:说说6大Nginx负载均衡?手写一下权重轮询策略?
|
安全 Java 应用服务中间件
网络安全的护城河:漏洞防御与加密技术深入浅出Java并发编程
【8月更文挑战第31天】在数字世界的棋盘上,每一次点击都可能是一步棋。网络安全的战场无声却激烈,漏洞如同裂缝中的风,悄无声息地侵袭着数据的堡垒。本文将揭示网络漏洞的隐蔽角落,探讨如何通过加密技术筑起防线,同时提升个人和组织的安全意识,共同守护我们的数字家园。
|
安全 Java 网络安全
云计算时代下的网络安全挑战与应对策略Java编程中的异常处理:从基础到高级
在云服务不断深入各行各业的今天,网络安全问题也随之凸显。本文将探讨云计算环境下的安全风险,并提出相应的防护措施,以期为相关行业提供参考和指导。 在Java的世界里,异常处理是代码健壮性的守护神。它不仅保护程序免于意外崩溃,还提供了一种优雅的方式来响应错误。本文将带你领略异常处理的艺术,从简单的try-catch语句到复杂的自定义异常和finally块的神秘力量,我们将一起探索如何让Java程序在面对不确定性时,依然能够优雅地起舞。
【Java基础面试三十五】、谈谈你对面向接口编程的理解
这篇文章讨论了面向接口编程的概念,强调接口作为一种规范和实现分离的设计哲学,可以降低程序模块间的耦合度,提高系统的可扩展性和可维护性。