牛客后端开发面试题2

微软2021

1、给你一个凸多边形,你怎么用一条线,把它分成面积相等的两部分

将凸多边形的任意一个顶点作为顶点,然后连接另外两个相邻的顶点,将凸多边形划分成多个三角形。 计算每个三角形的面积,并且累加面积,得到凸多边形的总面积。 使用二分查找找到一个位置,使得分割线左边的面积为总面积的一半。 最后的分割线即为所求。

2、判断两个单链表是否有交叉

        该函数实现结果:如果有交叉则返回第一个交叉结点,如果没有返回nullptr

ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2){ListNode *p1=pHead1,*p2=pHead2;while(p1!=p2){p1=p1==nullptr?pHead2:p1->next;p2=p2==nullptr?pHead1:p2->next;}return p1;}

3、怎么判断两棵二叉树是否是同构的

两个树的先中后序遍历结果一样则同构.

两个树要么一模一样,要么互为镜像

参考牛客题目BM31 对称的二叉树

 

bool isIsomorphic(TreeNode p, TreeNode q)
{if (p == nullptr && q == nullptr){return true;}if (p == nullptr || q == nullptr){return false;}if (p->val != q->val){return false;}return (isIsomorphic(p->left, q->left) && isIsomorphic(p->right, q->right)) || (isIsomorphic(p->left, q->right) && isIsomorphic(p->right, q->left)) || (isIsomorphic(p->right, q->left) && isIsomorphic(p->left, q->right));
}

4、按层次打印一个二叉树

vector<vector<int> > levelOrder(TreeNode* root) {//因为队列是先进先出vector<vector<int>> res;if(!root) return res;queue<TreeNode*> qu;qu.push(root);while(!qu.empty()){vector<int> vec;int size=qu.size();while(size--){TreeNode* cur=qu.front();qu.pop();vec.push_back(cur->val);if(cur->left)  qu.push(cur->left);if(cur->right) qu.push(cur->right);}res.push_back(vec);}return res;}

5、给你一个数n(最大为10000),怎么求其阶乘

int Num(int n)
{if (n == 0 || n == 1) return 1;int num=n;for (int i = 1; i < n; i++){num *= i;}return num;
}

       对于较大的数,计算阶乘时使用传统的循环乘法效率很低,可以使用数学方法来求解。 一种常用的方法是斯特林公式(Stirling's approximation),公式如下: n! ≈ √(2πn) * (n/e)^n 其中e是自然对数的底数,π是圆周率。 这个公式的精度较高,在n比较大的时候计算出来的结果已经非常接近真实值。

迅雷2021

1、使用C++写一个字符串插入的函数

void StringInsert(char* source,char* insert,int pos)
{int len1 = strlen(source);int len2 = strlen(insert);int newlen = len1 + len2;//为了安全,申请一个新的空间放字符串,避免在原字符串上申请空间失败数据丢失char* newstr = new char[newlen + 1];//拷贝插入位置前面的字符串for (int i = 0; i < pos; i++){newstr[i] = source[i];}//拷贝要插入的字符串for (int i = 0; i < len2; i++){newstr[pos + i] = insert[i];}//拷贝pos位置后面的字符串for (int i = pos; i < len1; i++){newstr[i + len2 ] = source[i];}//新字符串尾部添加'\0'source[newlen] = '\0';//释放原来字符串的空间delete[] source;//将原字符串指针指向新字符串的地址source = newstr;
}

2、关于虚函数底层的实现,你了解多少?

        虚函数可以实现运行时多态。由于编译器在编译时不能确定被调用的函数来自基类还是派生类,所以叫虚函数。

        在底层实现中,C++的虚函数通过虚函数表和虚函数指针实现。可以通过基类指针或引用调用子类的虚函数。类的对象都有一个指向虚函数表的虚函数指针,虚函数表中存放该类的虚函数地址,创建一个新对象时,虚函数指针被初始化为指向该类的虚函数表的虚函数指针。当调用虚函数时,实际上是通过虚函数指针间接的调用虚函数表中的函数地址。

        在继承关系中,子类继承父类的虚函数表,子类可以覆盖父类的虚函数。当父类虚函数在子类中重写时,父类虚函数表中父类的函数地址也会被替换为子类的。当使用父类指针或引用调用子类的函数时实际上调用的也是子类的虚函数。

        由于虚函数的使用需要额外的空间和运行时开销,因此在不需要多态时尽量用普通函数代替虚函数,以提高程序执行效率。

3、请实现快排。

http://t.csdnimg.cn/fEgCd快排及快排优化

4、请实现堆排序。

//最小堆,左右子树小于双亲
void FilterDown(vector<int> &nums, int start, int end)
{int i = start, j = i * 2 + 1;int tmp = nums[i];while (j <= end){if (j < end&&nums[j] > nums[j + 1]) j += 1;//找小的if (tmp <= nums[j]) break;else{nums[i] = nums[j];i = j;j =i * 2 + 1;}}nums[i] = tmp;
}
void HeapSort(vector<int>& nums, int n)
{if (n < 2) return;int pos = (n - 2) / 2;//n-1是最后一个元素的下标,再减一除二是双亲的位置while (pos >= 0){FilterDown(nums, pos, n - 1);pos--;}pos = n - 1;while (pos > 1){swap(nums[0], nums[pos]);pos--;FilterDown(nums, 0, pos);}
}

5、关于TCP、UDP,你了解多少?

1 TCP 面向连接(如打电话要先拨号建立连接) ;UDP 是无连接的,即发送数据之前不需要建立连接
2 TCP 提供可靠的服务,也就是说,通过 TCP 连接传送的数据,无差错,不丢失,不重复,且按序到 达;UDP 尽最大努力交付,即不保证可靠交付
3 TCP 面向字节流,实际上是 TCP 把数据看成一连串无结构的字节流 ;UDP 是面向报文的
UDP 没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如 IP 电话,实 时视频会议等)
4 、每一条 TCP 连接只能是点到点的 ;UDP 支持一对一,一对多,多对一和多对多的交互通信
5 TCP 首部开销 20 字节 ;UDP 的首部开销小,只有 8 个字节
6 TCP 的逻辑通信信道是全双工的可靠信道, UDP 则是不可靠信道
7.因为tcp有各种机制(确认应答,拥塞控制,窗口控制,超时重传)所以慢,而且容易被攻击。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安恒明御安全网关 aaa_local_web_preview文件上传漏洞复现

0x01 产品简介 明御安全网关秉持安全可视、简单有效的理念,以资产为视角,构建全流程防御的下一代安全防护体系,并融合传统防火墙、入侵检测、入侵防御系统、防病毒网关、上网行为管控、VPN网关、威胁情报等安全模块于一体的智慧化安全网关。 0x02 漏洞概述 明御安全网关在…

[css] flex wrap 九宫格布局

<div class"box"><ul class"box-inner"><li>九宫格1</li><li>九宫格2</li><li>九宫格3</li><li>九宫格4</li><li>九宫格5</li><li>九宫格6</li><li>九宫格7&l…

Axure之动态面板轮播图

目录 一.介绍 二.好处 三.动态面板轮播图 四.动态面板多方式登录 五.ERP登录 六.ERP的左侧菜单栏 七.ERP的公告栏 今天就到这了哦&#xff01;&#xff01;&#xff01;希望能帮到你了哦&#xff01;&#xff01;&#xff01; 一.介绍 Axure中的动态面板是一个非常有用的组…

案例066:基于微信小程序的家政预约设计与实现

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…

Qt容器QMdiArea 小部件提供一个显示 MDI 窗口的区域

## QMdiArea ## 控件简介 QMdiArea 继承 QAbstractScrollArea。QMdiArea 小部件提供一个显示 MDI 窗口的区域。QMdiArea的功能本质上类似于MDI窗口的窗口管理器。大多数复杂的程序,都使用MDI框架,在 Qt designer 中可以直接将控件 MDI Area 拖入使用。 ## 用法示例 例 qm…

Linux系统中如何开启和配置OpenGauss数据库的远程连接

文章目录 前言1. Linux 安装 openGauss2. Linux 安装cpolar3. 创建openGauss主节点端口号公网地址4. 远程连接openGauss5. 固定连接TCP公网地址6. 固定地址连接测试7. 结语 前言 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍…

「Swift」Xcode多Target创建

前言&#xff1a;我们日常开发中会使用多个环境&#xff0c;如Dev、UAT&#xff0c;每个环境对应的业务功能都不同&#xff0c;但每个环境之间都只存在较小的差异&#xff0c;所以此时可以使用创建多个Target来实现&#xff0c;每个Target对应这个一个App&#xff0c;可以实现一…

(WPF)Serilog 使用demo实例

Serilog 日志效果&#xff1a; 引入的Serilog库文件 实现代码 xaml 代码&#xff1a; <Window x:Class"Wpf_demo_Serilog.MainWindow" xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x"http://sche…

Python语言学习笔记之十一(DotEnv)

本课程对于有其它语言基础的开发人员可以参考和学习&#xff0c;同时也是记录下来&#xff0c;为个人学习使用&#xff0c;文档中有此不当之处&#xff0c;请谅解。 1、认识Python DotEnv dotenv是Python中的一个工具包&#xff0c;它主要用于谈取项目中的.env文件&#xff0…

语音机器人话术设计重点

要使用语音机器人&#xff0c;首先得要先准备一套业务的话术脚本&#xff0c;这个话术脚本的设计&#xff0c;可能直接决定了语音机器人后续的使用效果。这个脚本的编写一般不是机器人厂家直接能完成的&#xff0c;只有业务的使用方&#xff0c;他们才最了解自己的业务&#xf…

ACT、NAT、NATPT和EASY-IP

目录 一、ACL 1.ACL 2.ACL的两种应用匹配机制 3.ACL的基本类型 4.ACL命令操作 5.ACL实验&#xff1a; 4.ACL的应用原则&#xff1a; 5.匹配原则&#xff1a; 二、NAT 1.NAT的原理及作用&#xff1a; 2.NAT分类 3.NAT配置 三、EASY-ip实验 四、NATPT 五、通配符 …

本地项目添加到gitlab命令操作

gitlab上面创建一个跟项目名同名的文件夹 创建文件夹&#xff0c;填写信息 添加readme文档&#xff0c;先保存下创建的文件夹 回到项目&#xff0c;复制项目的git 地址 然后进入到本地项目的文件夹&#xff0c;如d:/workspace/spring-demo&#xff0c;右键打开git bash弹框 命令…

浅入浅出理解MySQL和InnoDB

目录 数据库的定义 数据库和实例 MySQL 的架构 数据的存储 如何存储表 如何存储记录 数据页结构 索引 索引的数据结构 聚集索引和辅助索引 索引的设计 锁 并发控制机制 锁的种类 锁的粒度 锁的算法 死锁的发生 事务与隔离级别 几种隔离级别 脏读 不可重复读 幻读 总结 Innodb与…

对BIOS进行简单快速的设置更改,就能启用安全引导来安装Windows 11

本文介绍如何在UEFI/BIOS中启用安全引导&#xff0c;以便继续安装Windows 11。 如何启用安全引导 启用安全引导最简单的方法是通过UEFI/BIOS进行。它通常被列为BIOS中的众多选项之一&#xff0c;因此你只需打开它即可启用它。 1、启动&#xff0c;或重新启动你的电脑或笔记本…

【Android】在Android上使用mlKit构建人脸检测程序

在Android上构建人脸检测程序 目录 1、导入mlKit依赖包2、配置人脸检测器并且获取人脸检测器3、加载图片资源4、调用人脸检测器5、绘制矩形边框6、完整代码7、效果展示 1、导入mlKit依赖包 dependencies {// ...// Use this dependency to bundle the model with your appi…

【问题解决】Buildroot文件系统dropbear 上位机scp命令Permission denied, please try again.

前提&#xff1a; 上位机&#xff1a;Ubuntu虚拟机与开发板同局域网开发板&#xff1a;Buildroot文件系统&#xff0c;开启了dropbear&#xff0c;已经联网与虚拟机同局域网 liefyuanubuntu:~/tcp-test/tcp-c-client$ scp tcp_client root192.168.8.199:/opt root192.168.8.1…

构建强大应用的引擎:深度解析Spring Boot Starter机制

目录 引言1. Spring Boot Starter机制1.1 什么是Spring Boot Starter1.2 为什么要使用Spring Boot Starter1.3.应用场景1.4.自动加载核心注解说明 2. 综合案例配置类制作控制功能实现 总结 引言 在当今互联网时代&#xff0c;构建高性能、可维护的应用已成为开发者的首要任务。…

ISCTF(CRYPTO)

easy_rsa nc连接看看 脚本 import gmpy2import libnumfrom Crypto.Util.number import *from binascii import a2b_hex, b2a_hexflag "*****************"p 11920076502966619778438716819444048800827104655497817807132072529253600622832779629686654276924193…

PPT插件-好用的插件-放映笔、绘图板-大珩助手

放映笔 幻灯片放映时&#xff0c;工具在幻灯片的左下方&#xff0c;本工具在幻灯片的右侧&#xff0c;可以移动&#xff0c;可以方便在右侧讲课时候使用 绘图板 可在绘图板上写签名、绘制图画、写字等等&#xff0c;点画笔切换橡皮擦&#xff0c;点插入绘图&#xff0c;将背景…

基于PaddleNLP的深度学习对文本自动添加标点符号(一)

前言 目前以深度学习对文本自动添加标点符号研究很少&#xff0c;已知的开源项目并不多&#xff0c;详细的介绍就更少了&#xff0c;但对文本自动添加标点符号又在古文识别语音识别上有重大应用。 基于此&#xff0c;本文开始讲解基于PaddleNLP的深度学习对文本自动添加标点符号…