欢聚831笔试

本文分享了剑指Offer中的两道编程题解决方案,包括字符串转数字与带头结点链表翻转,以及Linux下write函数的行为解释,同一进程下线程共享资源探讨,静态数据初始化位置说明,网络协议在浏览器请求中的作用分析,和一次性加载多个树遍历的容器选择。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这题确实简单,基本就是剑指offer原题。小菜鸡生平第一次AK。先说两道编程:

1.字符串转数字,这个题比较坑的一点就是32位有效数字,我看他那个用例以为是把有效位输出就行,结果就死活66.7,后来我输出INT_MAX奇迹般的就AC了。我贴的是剑指offer的答案,大同小异,这个也能AC。

class Solution {
public:
    int StrToInt(string str) {
        if(str.size() == 0)return 0;
        int i = 0;
        int sign = 1;
        while(i < str.size() && str[i] == ' ')i++;
        if(str[i] == '-'){
            sign = -1;
            i++;
        }
        else if(str[i] == '+'){
            sign = 1;
            i++;
        }
        int ans = 0;
        for(; i < str.size(); i++){
            if(isdigit(str[i])){
            ans = ans * 10 + (str[i]-'0');
            }else return 0;
         //就是这个
            if(ans > INT_MAX) return sign == 1 ? INT_MAX : INT_MIN;
        }
        return sign*ans;
    }
};

2.带头结点的链表翻转,我面试就在翻转链表上被坑了一把,所以我心有余悸啊!

/*
struct ListNode {
	int val;
	struct ListNode *next;
	ListNode(int x) :
			val(x), next(NULL) {
	}
};*/
class Solution {
public:
    ListNode* ReverseList(ListNode* pHead) {
          if(pHead == NULL)return NULL;
          if(pHead->next == NULL)return pHead;
          ListNode* pre = NULL;
          ListNode* cur = pHead;
        while(cur != NULL){
            ListNode* temp = cur->next;
            cur->next = pre;
            pre = cur;
            cur = temp;
        }
        return pre;
    }
};

 

选择题部分不是很容易,记不太清了,把几个写下来:

1.linux,write发送数据返回n,代表什么?

这题我不是很记得了选错了。

正确答案是:

  • 本地已发送n个字节
    已发送,但不保证对方收到
    
  • 函数原型:ssize_t write(int fd , const void *buf ,size_t count);

    函数只是写入本地缓冲区,返回的n是写入缓冲区的数量。

2.同一进程下的线程共享

  1. 进程代码段
  2. 进程的公有数据(利用这些共享的数据,线程很容易的实现相互之间的通讯)、
  3. 进程打开的文件描述符、
  4. 信号的处理器、
  5. 进程的当前目录和
  6. 进程用户ID与进程组ID  

线程的独享:

  1. 线程ID
  2. 寄存器组的值
  3. 线程的堆栈
  4. 错误返回码
  5. 线程的信号屏蔽码

3.静态数据初始化在全局区

4.输入www.XX.com 一定不用的协议:

https://blog.youkuaiyun.com/qq_34827674/article/details/104909394

我以为UDP不使用,实际UDP是传输DNS……但是我觉得也用到了ICMP。另两个是ARP和DNS,希望大家解答……

扩展:

浏览器输入www.baidu.com后,网络过程

事件顺序:

(1) 浏览器获取输入的域名www.baidu.com

(2) 浏览器向DNS请求解析www.baidu.com的IP地址

(3) 域名系统DNS解析出百度服务器的IP地址 (详细介绍DNS)-通过网关出去

(4) 浏览器与该服务器建立TCP连接(默认端口号80)

(5) 浏览器发出HTTP请求,请求百度首页

(6) 服务器通过HTTP响应把首页文件发送给浏览器

(7) TCP连接释放

(8) 浏览器将首页文件进行解析,并将Web页显示给用户。

涉及到的协议:

(1) 应用层:HTTP(WWW访问协议),DNS(域名解析服务)

DNS解析域名为目的IP,通过IP找到服务器路径,客户端向服务器发起HTTP会话,然后通过运输层TCP协议封装数据包,在TCP协议基础上进行传输。

(2) 传输层:TCP(为HTTP提供可靠的数据传输),UDP(DNS使用UDP传输),HTTP会话会被分成报文段,添加源、目的端口;TCP协议进行主要工作。

(3)网络层:IP(IP数据数据包传输和路由选择),ICMP(提供网络传输过程中的差错检测),ARP(将本机的默认网关IP地址映射成物理MAC地址)为数据包选择路由,IP协议进行主要工作,相邻结点的可靠传输,ARP协议将IP地址转成MAC地址。

简单理解:   域名解析 --> 发起TCP的3次握手 --> 建立TCP连接后发起http请求 --> 服务器响应http请求,浏览器得到html代码 --> 浏览器解析html代码,并请求html代码中的资源(如js、css、图片等) --> 浏览器对页面进行渲染呈现给用户。

5.一次性加载n个树进行遍历,最合适的容器是:

链表,也就是list

还有一些继承类的题,相对简单。原题记不得了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值