博客
关于我
面试题刷题 9.12
阅读量:226 次
发布时间:2019-03-01

本文共 3121 字,大约阅读时间需要 10 分钟。

多进程与多线程的区别主要在于资源共享方式和调度机制。多进程通过进程间通信实现资源共享,而多线程则通过共享内存实现资源共享。多线程的线程切换开销较低,适合处理I/O密集型任务;而多进程提供更强的资源隔离,适合处理资源竞争严重的任务。

TCP协议的传输过程中,四层协议都会对报文进行处理。网络接口层通过物理层的数据帧处理,将报文拆分为帧;网络层通过IP分层协议将报文拆分为IP数据包;传输层通过TCP分层协议将报文拆分为TCP段;会话层则通过TCP会话管理协议将报文拆分为应用数据。

一个URL的获取过程包括以下步骤:1. 域名解析(DNS)通过域名查询得到目标主机的IP地址;2. TCP连接建立,客户端发送SYN包,服务器响应SYN-ACK包,客户端发送ACK包完成三次握手;3. HTTP请求通过TCP连接传输,服务器解析请求并返回响应;4. 服务器将响应通过TCP协议发送回客户端;5. 客户端解析并显示响应内容。

DNS解析过程通过DNS服务器查询域名对应的IP地址。客户端发送域名查询请求(DNS查询报文),DNS服务器解析域名并返回对应的IP地址。

多进程之间可以通过共享内存进行内存共享。进程间共享内存需要通过进程间共享的机制,如共享文件或使用共享内存段。

以下是两个编程题:

  • 实现一个能删除vector中所有为0的元素的函数。正确的实现方式是:
  • #include 
    #include
    using namespace std;
    void eraseZeroVector(vector
    & vec) {
    auto it = find(vec.begin(), vec.end(), 0);
    while (it != vec.end()) {
    erase(it);
    it = find(vec.begin(), vec.end(), 0);
    }
    }
    1. 找出二叉搜索树(BST)中的第k大节点。可以使用中序遍历的方法,记录访问节点直到找到第k大节点。
    2. 三次握手是TCP连接建立的过程,目的是建立可靠的数据传输通道。四次挥手是TCP连接断开的过程,确保双方的数据传输完整后正式关闭连接。

      四次挥手的时间等待状态(TIME_WAIT)是为了保证服务端与客户端完全断开连接,避免数据传输错误。该状态在客户端和服务端都可能出现,通常需要等待2MSL(最大段生存时间)。

      多线程和多进程的主要区别在于资源共享方式和调度机制。多线程通过共享内存实现资源共享,线程间调度更为频繁;多进程通过进程间通信实现资源共享,进程间调度更为较少。

      在Linux系统中,可以使用top命令查看CPU负载。

      以下是二叉搜索树的层序遍历(广度优先搜索)实现:

      public class BST {
      public class Node {
      int value;
      Node left;
      Node right;
      public Node(int value) {
      this.value = value;
      left = null;
      right = null;
      }
      }
      public void levelOrderTraversal(Node root) {
      if (root == null) return;
      Queue
      q = new LinkedList<>();
      q.add(root);
      while (!q.isEmpty()) {
      Node current = q.poll();
      System.out.println(current.value);
      if (current.left != null) q.add(current.left);
      if (current.right != null) q.add(current.right);
      }
      }
      }

      协程是一种更高效的线程替代方案,通过用户态的切换减少了内核调度开销。协程采用上下文切换的方式,适合I/O密集型任务。

      Linux中的selectpollepoll都是I/O多路复用机制,但性能和功能上有所不同。select是基于轮询的单线程模型,poll是基于轮询的多线程模型,epoll是更高效的事件驱动模型,支持边缘触发。

      TCP和UDP的主要区别在于连接性和可靠性。TCP是三层协议,提供可靠传输,通过序列号、确认应答和重传机制确保数据完整性;UDP是两层协议,不提供连接性和可靠性,数据传输不保证顺序和完整性。

      在应用层实现可靠传输时,可以通过序列号标记数据包,使用重传机制重发丢失的数据包,确保数据完整性。

      以下是撕代码判断是否回文的实现:

      public class Palindrome {
      public static boolean isPalindrome(String s) {
      int l = 0;
      int r = s.length() - 1;
      while (l < r) {
      if (s.charAt(l++) != s.charAt(r--)) {
      return false;
      }
      }
      return true;
      }
      }

      我在腾讯云的面试中遇到了许多技术问题,涵盖了操作系统、网络、数据库、数据结构、算法等多个方面。面试官对我的项目经验、技术细节和算法实现提出了较高的要求。

      在讨论内存对齐时,我强调了内存对齐的重要性,特别是在不同系统的内存对齐方式可能不同,但总体原则是一致的。在谈到STL时,我提到了常用的容器如vector、deque、list以及string等,并举例说明了它们的使用场景和特点。

      关于内存扩容的问题,我详细解释了vector的动态内存分配机制,提到了默认的内存分配策略以及如何手动管理内存的使用。

      在迭代器失效的问题上,我强调了不同数据结构对迭代器失效的处理方式,如数组型数据结构的连续内存分配导致迭代器失效时需要使用erase返回下一个迭代器,而树型数据结构则需要使用erase(iter++)的方式。

      在讨论HTTP协议时,我重点提到了HTTP的无状态性以及如何通过Cookie和Session维持客户端与服务器之间的会话状态。

      关于协程,我详细介绍了协程的优势和应用场景,并举例说明了如何通过协程实现非阻塞的I/O操作。在编程题部分,我展示了如何实现链表的插入与删除操作,并详细解释了算法的思路和实现细节。

      在面试过程中,我还回答了关于多线程与多进程的区别、JVM的内存模型、数据库的三大范式、设计模式的实现等问题,并展示了我在项目中的实际应用经验。

      整个面试过程让我对自己的技术水平有了更清晰的认识,也让我意识到需要在某些领域进行更深入的学习和练习。

      通过这次面试,我深刻体会到了技术面试的难度和挑战,同时也积累了宝贵的经验,为今后的求职打下了坚实的基础。

    转载地址:http://imlv.baihongyu.com/

    你可能感兴趣的文章
    Node-RED中使用node-red-browser-utils节点实现选择Windows操作系统中的文件并实现图片预览
    查看>>
    Node-RED中使用node-red-contrib-image-output节点实现图片预览
    查看>>
    Node-RED中使用node-red-node-ui-iframe节点实现内嵌iframe访问其他网站的效果
    查看>>
    Node-RED中使用Notification元件显示警告讯息框(温度过高提示)
    查看>>
    Node-RED中使用range范围节点实现从一个范围对应至另一个范围
    查看>>
    Node-RED中实现HTML表单提交和获取提交的内容
    查看>>
    Node-RED中将CSV数据写入txt文件并从文件中读取解析数据
    查看>>
    Node-RED中建立TCP服务端和客户端
    查看>>
    Node-RED中建立Websocket客户端连接
    查看>>
    Node-RED中解析高德地图天气api的json数据显示天气仪表盘
    查看>>
    Node-RED中通过node-red-ui-webcam节点实现访问摄像头并截取照片预览
    查看>>
    Node-RED安装图形化节点dashboard实现订阅mqtt主题并在仪表盘中显示温度
    查看>>
    Node-RED订阅MQTT主题并调试数据
    查看>>
    node-request模块
    查看>>
    Node.js 8 中的 util.promisify的详解
    查看>>
    node.js url模块
    查看>>
    Node.js Web 模块的各种用法和常见场景
    查看>>
    Node.js 函数是什么样的?
    查看>>
    Node.js 切近实战(七) 之Excel在线(文件&文件组)
    查看>>
    node.js 初体验
    查看>>