2023秋招大厂经典面试题及答案整理归纳(261-280)校招必看

目录

261. 设计和实现一个LRU (最近最少使用)缓存数据结构,使它应该支持一下操作:get和put。

262. 已知sqrt(2)约等于1.414,要求不用数学库,求sqrt⑵ 精确到小数点后10位。

263. 给定一个二叉搜索树(BST),找到树中第K小的节点。

264. 如何用socket编程实现ftp协议?

265. 给定一个数组,它的第i个元素是一支给定股票第i天的 价格。设计一个算法来计算你所能获取的最大利润。你可以 尽可能地完成更多的交易(多次买卖一支股票)。注意:你 不能同时参与多笔交易(你必须在再次购买前出售掉之前的 股票)。

266. 描述实时系统的基本特性

267. 求任意一颗二叉树最长路径长度

268. 手写冒泡排序算法,计算冒泡排序算法的时间复杂度?

269. redis中的网络IO有了解过吗,它是单线程的还是多线程的,为什么要用单线程。

270. 优先队列时间复杂度。

271. 堆的维护时间复杂度。

272. CPU是怎么执行指令的?

273. 什么函数不能声明为虚函数?

274. 在函数内定义一个字符数组,用gets函数输入字符串的时候,如果输入越界,为什么程序会崩溃?

275. 线上CPU爆高,请问你如何找到问题所在。

276. 从innodb的索引结构分析,为什么索引的key长度不 能太长?

277. MySQL的数据如何恢复到任意时间点?

278. 曹操南下攻打刘备,刘备派关羽守锦州,关羽派张飞去守城 门。刘备又派诸葛亮去向孙权求援。孙权派兵攻打曹操.请画 岀UML图.

279. 信号的生命周期?

280. 信号的产生方式?


261. 设计和实现一个LRU (最近最少使用)缓存数据结构,使它应该支持一下操作:get和put。

get(key)-如果key存在于缓存中,则获取key的value (总是 正数),否则返回
class LRUCache{
public:
LRUCache(int capacity) {
cap = capacity;
}
int get(int key) {
auto it = m. find (key);
if (it == m. end()) return ~1;
1. splice (1. beginO, 1, it~>second); return it->second">second;
void set(int key, int value) { auto it = m. find (key);
if (it != m. end())
1. erase(it~>second);
1. push_front(make_pair(key, value));
m[key] = 1. beginO ;
if (m. size () > cap) {
int k = 1.rbegin()~>first;
l. pop__back ();
m. erase (k);


262. 已知sqrt(2)约等于1.414,要求不用数学库,求sqrt⑵ 精确到小数点后10位。


1. 已知sqrt(2)约等于1.414,那么就可以在(1.4, 1.5)区间做二分查找,如: high=>l.5
low=>l.4
mid => (high+low)/2=1.45
1.45*1.45>2 ? high=>1.45 : low => 1.45
循环到c)


2. 退出条件
前后两次的差值的绝对值<=0.0000000001,则可退出。
代码:

const double EPSINON = 0.0000000001,
double sqrt2()
[
double low = 1.4, high = 1. 5;
double mid = (low + high) / 2;
while (high - low > EPSINON)
high = mid;
}
else
!
low = mid;
}
mid = (high + low) / 2;
}
return mid;
}


263. 给定一个二叉搜索树(BST),找到树中第K小的节点。

* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
private class ResultType {
//是否找到
boolean found;
//节点数目
int val;
ResultType(boolean found, int val) {
this, found - found;
this, val = val;
}
}
public int kthSmallest(TreeNode root, int k) { return kthSmallestHelper(root, k). val;
private ResultType k thSmalles tHeIp er(TreeNode root, int k) { if (root == null) {
return new ResultType(false, 0);
ResultType left = kthSmallestHelper(root.left, k);
//左子树找到,直接返回
if (left, found) { return new ResultType(tiue, left, val);
}
//左子树的节点数目=K-l,结果为功。t的值
if (k - left, val == 1) { return new ResultType(tiue, root, val);
}
//右子树寻找
ResultType right = kthSmallestHelper(root, right, k - left, val - 1); if (right, found) {
return new ResultType (tiue, right, val);
}
//没找到,返回节点总数
return new ResultType(false, left, val + 1 + right, val);


264. 如何用socket编程实现ftp协议?


以linux为例,使用socket编程中的read。函数和write。函数已可实现文件的发送 接收,为啥还要专门建立ftp协议呢?单单使用:read。函数和write。函数,数据接口和命 令接口未分开,效率低。而ftp将数据接口和命令接口分开,提高了文件传输效率和安全性。
ftp协议的实现仍是使用socket编程,首先是实现tcp连接。
Socket客户端编程主要步骤如下:
socket ()创建一个 Socket
connect ()与服务器连接
write()和readO进行会话
close ()关闭 Socket
Socket服务器端編程主要步骏如下:
socket ()创建一个 Socket
bind()
listenO 监听
accept ()接收连接的请求
write()和readO进行会话
close ()关闭 Socket
建立tcp连接代码简示如下:
SOCKET control_sock;
struct hostent *hp;
struct sockaddr_in server;
memset(^server, 0, sizeof(struct sockaddr_in))
/* 初始化 socket */
control_sock = socket(AF_INET, SOCK_STREAJ.f, 0);
hp = gethostbyname(server_name);
memcpy(&server・ s in_addr, hp->h_addr, hp->h_length);
server. sin_family - AF_INET;
server. sin_port = htons(port);
/*连接到服务器端*/
connect(control_sock, (struct sockaddr *)^server, sizeof(server));
/*客户端接收服务器端的一些欢迎信息*/
read (control_sock, read__buf, read__len);
ftp客户端与服务器建立起tcp连接后,然后向服务器发送命令。(这一步建立的是命 令接口的tcp连接,数据接口连接尚未建立。)
通常第一步发送USER和PASS命令给证账号和密码后登陆服务器。若是匿名服务器则另

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值