【笔试】02

news2024/11/24 3:58:07

TCP

TCP(传输控制协议)是一种面向连接的可靠的基于字节流的传输层通信协议

它能够提供以下服务:

  • 可靠传输
    通过序列号、确认应答、重传机制等确保数据完整、准确地从发送端传输到接收端。
    三次握手:
    在这里插入图片描述
  • 点对点
  • 全双工
  • 面向字节流
  • 流量控制:通过滑动窗口机制,接收端可以控制发送端的发送速率,防止接收端来不及处理导致数据丢失。
  • 拥塞控制:当网络出现拥堵时,TCP能够减少其数据传输速率,避免造成更严重的网络拥塞。
  • 数据顺序控制:保证数据按照发送顺序到达接收端。
  • 对比:

在这里插入图片描述

不能提供的服务:

  • 时延和带宽保证
  • 多播和广播:TCP是基于点对点的通信模式,不支持多播(一点对多点)和广播(一点对全点)通信。

HTTP

  • 使用TCP传输
    TCP是一个传输协议,而HTTP全称是超文本传输协议,是在传输时使用TCP协议,HTTP是在应用层进行握手,即服务器上的运行的进程之间的通信
  • HTTP不保留状态,或者说无状态stateless
  • 消息格式
    • 发送:方法(GET POST)+URL+协议
    • 相应:协议+状态码+状态词
  • 响应状态码:
    • 404 Not Found: 表示客户端能够与服务器通信,但服务器找不到请求的资源。
    • 200 OK:请求成功,服务器提供了请求的网页
    • 5XX - 服务器错误

字符数组初始化方法

  • 直接赋值
    编译器会自动计算数组str的大小,包括字符串的结尾标识符\0。
char str[] = "Hello, World!";
  • 指定大小赋值
    数组的大小必须足够大,以存储所有字符和末尾的\0。
char str[14] = "Hello, World!";
  • 逐字符填充
    逐字符初始化时,必须包括字符串的结束符\0。
    如果你指定的大小大于实际初始化的字符数(包括必需的终止符\0),剩余的部分将自动用\0填充。
char str[] = {'H', 'e', 'l', 'l', 'o', ',', ' ', 'W', 'o', 'r', 'l', 'd', '!', '\0'};
  • 二维数组也要注意/0
char str[4][6] = {"hello", "world"};

unsigned int 范围

int 在大多数系统上占用 4 个字节(32 位),其取值范围是从 -2147483648 到 2147483647
unsigned int 在大多数系统上占用 4 个字节(32 位),其取值范围为 0 到 4294967295。

冒泡排序

冒泡排序的基本思想是,重复地遍历待排序序列,每次比较相邻的两个元素,如果它们的顺序错误,则交换它们。通过每次遍历,将最大的元素“冒泡”到最后

def bubble_sort(arr):
    n = len(arr)
    for i in range(n):
        for j in range(0, n-i-1):
            if arr[j] > arr[j+1]:
                arr[j], arr[j+1] = arr[j+1], arr[j]
    return arr

选择排序

选择排序的基本思想是,每次从待排序的元素中选择最小的元素,放置到已排序序列的末尾。

def selection_sort(arr):
    n = len(arr)
    for i in range(n):
        min_index = i
        for j in range(i+1, n):
            if arr[j] < arr[min_index]:
                min_index = j
        arr[i], arr[min_index] = arr[min_index], arr[i]
    return arr

补码

补码是一种用于表示有符号整数的编码方式,常用于计算机系统中。在补码表示法中,正整数的二进制表示与无符号整数相同,而负整数的表示稍有不同。

具体来说,对于一个 n 位的补码表示:

对于正整数,其补码与其原码(即二进制表示)相同。
对于负整数,先将其绝对值表示成二进制形式,然后取反(每一位取反),最后加 1

在一个字节(8bit)的补码中,负数的表示范围是 -128 到 -1,而正数的表示范围是 0 到 127。

参数传递和内存分配

分析运行下面的Test函数会有什么样的结果,为什么?

void GetMemory1(char*p)
{
p = (char*)malloc(100);
}
void Testl(void)
{
char*str =NULL;
GetMemory1(str);
strcpy(str,"hello world");
printf(str);
}

GetMemory() 函数中的指针 p 是按值传递的,而不是按引用传递。在 GetMemory() 函数内部分配了内存,并将其地址存储在 p 中,但这个地址只是 GetMemory() 函数内部的局部变量,它并不会改变 Test() 函数中指针 str 的值。因此,Test() 函数中的 str 指针仍然是 NULL,没有指向任何有效的内存位置。
未定义行为导致程序崩溃,因为试图写入未分配的内存地址。

char *GetMemory2(void)
{
char p[] = "helloworld";
return p;
}
void Test2(void)
{
char *str =NULL;
str= GetMemory2();
printf(str);
}

输出乱码。

GetMemory() 函数中的局部数组 p 是在栈上分配的,它的生命周期仅限于 GetMemory() 函数的执行过程。当 GetMemory() 函数返回时,p 的内存将被释放,但 Test() 函数中的 str 指针仍然指向已释放的内存地址,这会导致未定义行为,可能会输出垃圾值,程序崩溃或其他意外行为。

void GetMemory(char** p, int num)
{
	*p = (char*)malloc(num);
}
void Test(void)
{
	char* str = NULL;
	GetMemory(&str, 100);
	strcpy(str, "hello");
	printf(str);
}

正确打印了hello。利用二级指针做函数形参,成功把str变成分配的大小为100字节连续空间的的起始地址。但是没有用free进行内存释放,造成内存泄漏。

void Test(void)
{
	char* str = (char*)malloc(100);
	strcpy(str, "hello");
	free(str);
	if (str != NULL)
	{
		strcpy(str, "world");
		printf(str);
	}
}

虽然调用了 free(str) 释放了内存,但并没有将 str 指针置为 NULL。因此,在 if (str != NULL) 中,虽然 str 已经指向了一片已经释放的内存,但由于 str 本身并不是 NULL,所以条件成立,进入了 if 分支。所以正常进行strcpy(str, “world”);,最后打印world。对已经释放的内存进行操作,也可能导致未定义行为。

函数的继承派生、虚函数

这段代码的输出结果是什么

class Ca
{
public:
	Ca() {strcpy(m_info,"fa");printf("Ca”);}
	virtual void f() {printf(m info);}
	void f1(){printf("fa1”);}
	void f2(int i=3){ this->f();printf("%d”,i);}
	
	char m info[10];
};
class Cb:public Ca
{
public:
	Cb (){printf("cb”);}
	void f(){printf("fb”);}
	void f1(){printf("fb1”);}
	void f2(int i=5){ this->f();printf("%d”,i);}
};
int main()
{
	Ca* p=NULL;
	Ca a;
	Cb b;
	p = &a;
	p->f();
	p->f1();
	p->f2();
	p = &b;
	p->f();
	p->f1();
	p->f2();
}

**通过基类指针只能访问派生类的成员变量,但是不能访问派生类的成员函数。**为了消除这种尴尬,让基类指针能够访问派生类的成员函数,C++ 增加了虚函数(Virtual Function)。有了虚函数,基类指针指向基类对象时就使用基类的成员(包括成员函数和成员变量),指向派生类对象时就使用派生类的成员。换句话说,基类指针可以按照基类的方式来做事,也可以按照派生类的方式来做事,它有多种形态,或者说有多种表现方式,我们将这种现象称为多态(Polymorphism)。

Ca
Ca
Cb
fa
fa1
fa3
fb
fa1
fb3

模拟题

两个字符串 start 和 target,长度均为n。每个字符串 仅 由字符’L’、‘R’ 和’_‘组成,其中:字符"L’ 和’R’ 表示片段,其中片段"L’只有在其左侧直接存在一个 空位 时才能向 左 移动,而片段’R’ 只有在其右侧直接存在一个 空位 时才能向 右 移动。字符’'表示可以被 任意 ‘L’或’R’ 片段占据的空位。如果在移动字符串 start 中的片段任意次之后可以得到字符串 target ,返回 true ;否则,返回 false 。
示例 1:
输入:start=“L___R___R”,target="L______RR"输出:true

示例 2:
输入:start=“R_L _”,target=" __LR"
输出:false解释:字符串 start 中的’R’ 片段可以向右移动一步得到"RL"但是,在这一步之后,不存在可以移动的片段,所以无法从字符串 start 得到 target 。
示例 3:输入:start="R",target="R"输出:false解释:字符串 start 中的片段只能向右移动,所以无法从字符串 start 得到 target 。
实现函数
bool canChange(char* start, char* target),并说明思路

class Solution {
public:
    bool canChange(string start, string target) {
        if(start.size()!=target.size())return false;
        vector<pair<char,int>>s,t;
        for(int i=0;i<start.size();i++){
            if(start[i]!='_'){
                s.push_back(make_pair(start[i],i));
            }
            if(target[i]!='_'){
                t.push_back(make_pair(target[i],i));
            }
        }
        if(s.size()!=t.size())return false;
        for(int i=0;i<s.size();i++){
            if(s[i].first=='L' && s[i].second<t[i].second)return false;
            else if(s[i].first=='R' && s[i].second>t[i].second)return false;
            else if(s[i].first!=t[i].first)return false;
        }
        return true;
    }
};

将start和target数组里面的非’_'元素全存到vector<pair<char,int>>容器中,然后比较这两个容器,如果相同位置内容不同,则返回false;如果start代表的容器的’L’的下标位置小于target的位置,由于L不能右移,故返回false;同理start的R的位置大于target的R的位置则返回false;其他情况都是返回true。

链表题

leetcode 24 两两交换链表中的节点
https://leetcode.cn/problems/swap-nodes-in-pairs/description/?envType=study-plan-v2&envId=top-100-liked

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    ListNode* swapPairs(ListNode* head) {
        ListNode* dummy=new ListNode(0);
        dummy->next=head;
        ListNode* cur=dummy;
        ListNode* pre=dummy;
        
        while(cur->next!=NULL && cur->next->next!=NULL)
        {
            pre=cur;
            cur=cur->next;

            ListNode* tmp=cur->next;
            cur->next=cur->next->next;
            tmp->next=cur;
            pre->next=tmp;   
        }

        ListNode* res=dummy->next;
        delete dummy;
        return res;
    }
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1583376.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

final、finally、finalize的区别

final final就是不可变的意思&#xff0c;可以修饰变量、⽅法和类。修饰变量时&#xff0c;这个变量必须初始 化&#xff0c;所以也称为常量。 被final修饰的类不能被继承 如果一个变量被final修饰&#xff0c;就需要初始化。可以在声明的时候赋值&#xff0c;或者在每一个构…

Linux_进程的优先级环境变量上下文切换优先级队列

文章目录 一、进程的优先级二、进程的四个重要概念三、上下文切换四、环境变量查看当前shell环境下的环境变量与内容 五、Linux2.6内核进程调度队列一个CPU拥有一个runqueue优先级活动队列过期队列active指针和expired指针 一、进程的优先级 什么是优先级&#xff1f; 指定一个…

第十一届蓝桥杯省赛真题(C/C++大学B组)

试题A &#xff1a;门牌制作 #include <bits/stdc.h> using namespace std;const int N 100000; int arr[N];int main() {int ans 0,t;for(int i 1;i < 2020;i){t i;while(t > 0){if(t % 10 2) ans;t / 10;}}cout<<ans<<endl;return 0; } 试题B …

返回头节点的问题

当需要对链表进行操作又需要返回头节点时&#xff0c;又可能被更改的节点正是头节点 解决方法&#xff1a; 让一个指针事先指向头节点&#xff0c;然后从该指针开始操作就好了 class Solution { public:ListNode* removeNthFromEnd(ListNode* head, int n) {if(headNULL)ret…

【Linux】make是如何判断可执行文件是否需要重新编译呢?(ACM时间)

&#x1f490; &#x1f338; &#x1f337; &#x1f340; &#x1f339; &#x1f33b; &#x1f33a; &#x1f341; &#x1f343; &#x1f342; &#x1f33f; &#x1f344;&#x1f35d; &#x1f35b; &#x1f364; &#x1f4c3;个人主页 &#xff1a;阿然成长日记 …

express操作mysql数据库的方法总结

作为前端&#xff0c;我们无需去考虑数据库的问题&#xff0c;业务场景需要的话&#xff0c;我们可以mock数据&#xff0c;满足暂时的联调场景。但是对于数据库&#xff0c;我们前端可以不用&#xff0c;却不能不了解不懂。所以这篇文章整理下&#xff0c;nodejs框架express中怎…

[闲聊统计]之参数估计是什么?(上)

参数估计是推断统计的重要内容之一。它是在抽样及抽样分布的基础上&#xff0c;根据样本统计量来推断所关心的总体参数。说白了&#xff0c;就是用样本信息来代替总体信息 例如&#xff1a;现在要调查某大学大学生的一个消费情况&#xff0c;假设全校大学生的平均消费金额为 μ…

pycharm一直打不开

一直处在下面的页面&#xff0c;没有反应 第一种方案&#xff1a; 以管理员身份运行 cmd.exe&#xff1b;在打开的cmd窗口中&#xff0c;输入 netsh winsock reset &#xff0c;按回车键&#xff1b;重启电脑&#xff1b;重启后&#xff0c;双击pycharm图标就能打开了&#xf…

[lesson17]对象的构造(上)

对象的构造(上) 对象的初始化 从程序设计的角度&#xff0c;对象只是变量&#xff0c;因此&#xff1a; 在栈上常见对象时&#xff0c;成员变量初始为随机值在堆上创建对象时&#xff0c;成员变量初始为随机值在静态存储区创建对象时&#xff0c;成员变量初始为0值 生活中的对…

fast_bev 学习笔记

目录 一. 简述二. 输入输出三. github资源四. 复现推理过程4.1 cuda tensorrt 版 训练修改图像数 一. 简述 原文:Fast-BEV: A Fast and Strong Bird’s-Eye View Perception Baseline FAST BEV是一种高性能、快速推理和部署友好的解决方案&#xff0c;专为自动驾驶车载芯片设计…

langchain 使用本地通义千问

langchian 使用已经下载到本地的模型&#xff0c;我们使用通义千问 显存&#xff1a;24G 模型&#xff1a;qwen1.5-7B-Chat&#xff0c;qwen-7B-Chat 先使用 qwen-7B-Chat&#xff0c;会报错用不了&#xff1a; 看了下是不支持这中模型&#xff0c;但看列表中有一个 Qwen 字样…

三种常见webshell工具的流量特征分析

又来跟师傅们分享小技巧了&#xff0c;这次简单介绍一下三种常见的webshell流量分析&#xff0c;希望能对参加HW蓝队的师傅们有所帮助。 什么是webshell webshell就是以asp、php、jsp或者cgi等网页文件形式存在的一种代码执行环境&#xff0c;主要用于网站管理、服务器管理、…

基于SSM+Jsp+Mysql的快递管理系统

开发语言&#xff1a;Java框架&#xff1a;ssm技术&#xff1a;JSPJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包…

如何将PHP的Webman框架打包成二进制文件运行

看了看webman的官方文档&#xff0c;发现居然还能打包为二进制&#xff0c;这样太厉害了吧&#xff01; 先执行这个 composer require webman/console ^1.2.24 安装这个console的包&#xff0c;然后 执行 php webman build:bin 8.1 结果谁想到它报错提示&#xff1a; 好…

Spring Boot 切面的一种的测试方法,java中级开发面试

void afterReturnName() { Assertions.assertEquals(studentController.getNameById(123L).getName(), "测试姓名Yz");} } 但往往切面中的逻辑并非这么简单&#xff0c;在实际的测试中其实我们也完成没有必要关心在切面中到底发生了什么&#xff08;发生了什么应该在…

49 样式迁移【李沐动手学深度学习v2课程笔记】

1. 样式迁移&#xff08;Style Transfer) 计算机视觉的应用之一&#xff0c;将样式图片中的样式&#xff08;比如油画风格等&#xff09;迁移到内容图片&#xff08;比如实拍的图片&#xff09;上&#xff0c;得到合成图片 可以理解成为一个滤镜&#xff0c;但相对于滤镜来讲…

leetcode之35 搜索插入位置

文章目录 每日碎碎念一、题目要求及测试点35 搜索插入位置测试点提示 二、题解自己上手正经题解暴力法二分法之优化了一下逻辑 三、总结 每日碎碎念 苦痛生活继续 hello LeetCode&#xff0c;今天还是数组二分专项刷题… 一、题目要求及测试点 35 搜索插入位置 给定一个排序…

力扣HOT100 - 239. 滑动窗口最大值

解题思路&#xff1a; class Solution {public int[] maxSlidingWindow(int[] nums, int k) {if(nums.length 0 || k 0) return new int[0];Deque<Integer> deque new LinkedList<>();int[] res new int[nums.length - k 1];// 未形成窗口for(int i 0; i <…

Spring boot 入门 ---(一),2024年最新java进阶训练营

spring-snapshots http://repo.spring.io/snapshot spring-milestones http://repo.spring.io/milestone spring-boot-starter-parent是使用Spring Boot的一种不错的方式&#xff0c;但它 并不总是最合适的。有时你可能需要继承一个不同的父POM&#xff0c;或只是不喜欢我…

JRT高效率开发

得益于前期的基础投入&#xff0c;借助代码生成的加持&#xff0c;本来计划用一周实现质控物维护界面&#xff0c;实际用来四小时左右完成质控物维护主体&#xff0c;效率大大超过预期。 JRT从设计之初就是为了证明Spring打包模式不适合软件服务模式&#xff0c;觉得Spring打包…