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

目录

21. 请描述IO多路复用机制?

22. 实践中如何优化MySQL?

23. 什么情况下设置了索引但无法使用?

24. SQL语句的优化.

25. 在一个带头结点的单链表HL中,若要在第一个元素之前插 入一个由指针p指向的结点。其语句为?

26. 如何设计一个高并发的系统?

27. 两条相交的单向链表,如何求他们的第一个公共节点?

28. new/delete 和 malloc/free 的底层实现?

29. overload、override、overwrite 的介绍.

30. 什么是守护进程?

31. 请描述小端/大端机器.

32. 请描述长连接与短连接.

33. C++中引用与指针的联系与区别?

34. 一个大的含有50M个URL的记录,一个小的含有500个URL的记录,找岀两个记录里相同的URLo

35. 海量日志数据,提取岀某日访问百度次数最多的那个IP。

36.有10个文件,每个文件1G,每个文件的每一行都存放 的是用户的query,每个文件的query都可能重复。如何 按照query的频度排序?

37. 有一根27厘米长的细木杆,在第3厘米,7厘米,11 厘米,17厘米,23厘米这五个位置上各有一只蚂蚁,木杆 很细,不能同时通过两只蚂蚁,开始时,蚂蚁的头朝向左还 是右是任意的,他们只会朝前走或掉头,但不会后退,当两 只蚂蚁相遇后,蚂蚁会同时掉头朝反方向走,假设蚂蚁们每 秒钟可以走1厘米的距离。求所有蚂蚁都离开木杆的最小时 间和最大时间。

38. 判断两棵树是否相等,请实现两棵树是否相等的比较, 相等返回1,否则返回其他值,并说明算法复杂度。

39. 将多个集合合并成没有交集的集合。

40. 平面内有11个点,由它们连成48条不同的直,由这些点可连成多少个三角形?


21. 请描述IO多路复用机制?


10模型有4中:同步阻塞10、同步非阻塞10、异步阻塞10、异步非阻塞10; 10多路 复用属于10模型中的异步阻塞10模型,在服务器高性能10构建中常常用到

同步异步是表示服务端的,阻塞非阻塞是表示用户端,所以可解释为什么10多路复用 (异步阻塞)常用于服务器端的原因;

文件描述符(知,又叫文件句柄):描述符就是一个数字,它指向内核中的一个结构体 (文件路径,数据区等属性)。具体来源:Linux内核将所有外部设备都看作一个文件来 操作,对文件的操作都会调用内核提供的系统命令,返回一个fd(文件描述符)。 下面开始介绍10多路复用:


(1) I/。多路复用技术通过把多个I/。的阻塞复用到同一个select、poll或epoll的 阻塞上,从而使得系统在单线程的情况下可以同时处理多个客户端请求。与传统的多线 程/多进程模型比,I/。多路复用的最大优势是系统开销小,系统不需要创建新的额外 进程或者线程。


(2) select, poll, epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自 己负责进行读写,也就是说这个读写过程是阻塞的,而异步I/O则无需自己负责进行读 与,异步I/O的实现会负责把数据从内核拷贝到用户空间。


(3) I/O多路复用的主要应用场景如下:
服务器需要同时处理多个处于监听状态或者多个连接状态的套接字;
服务器需要同时处理多种网络协议的套接字;


(4) 目前支持I/O多路复用的系统调用有select, poll, epoll, epoll与select的 原理比较类似,但epoll作了很多重大改进,现总结如下:
① 支持一个进程打开的文件句柄知个数不受限制(为什么select的句柄数量受限制: select使用位域的方式来传逢关心的文件描述符,因为位域就有最大长度,在Linux 下是1024,所以有数量限制)5
② I/O效率不会随着FD数目的増加而线性下降;
©epoll的API更加简单;


(5) 三种接口调用介绍:
① select函数调用格式:
#include <sys/select. h>
#include < sys/1ime. h>
int select(int maxfdpi, fd_set *readset, fd_set *wxiteset, fd_set
*exceptset, const struct timeval *tineout)
//返回值:就绪描述符的数目,超时返回。,出错返回T
② poll®数调用格式:
# include <poll. h>
int poll ( struct pollfd * fds, unsigned int nfds, int timeout);
©epoll®数格式(操作过程包括三个函数):
Sinelude〈sys/epoll. h>
int epoll_create(int size);
int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);
int epoll_wait(int epfd, struct epoll_event * events, int maxevents, int timeout);


(6) 作用:一定程度上替代多线程/多正程,减少资源占用,保证系统运行的高效率; 更多细节待续……



22. 实践中如何优化MySQL?


四条从效果上第一条影响最大,后面越来越小。
① SQL语句及索引的优化
② 数据库表结构的优化
®系统配置的优化
@硬件的优化



23. 什么情况下设置了索引但无法使用?


① LIKE语句,模糊匹配
② 0R语句
®数据类型出现隐式转化(如varchar不加单引号的话可能会自动转换为int型)



24. SQL语句的优化.


1. 对查询进行优化,应尽量避免全表扫描,首先应考虑在where及order by涉及的 列上建立索引。
2. 应尽量避免在where子句中使用!=或。操作符,否则将引擎放弃使用索引而进行全 表扫描。
3. 应尽量避免在where子句中对字段进行null值判断,否则将导致引擎放弃使用索 引而进行全表扫描,如:
select id from t where num is null
可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:
select id from t where num=0
4. 应尽量避免在where子句中使用or来连接条件,否则将导致引擎放弃使用索引而 进行全表扫描,如:
select id from t where num=10 or nun=20
可以这样查询:
select id from t where num=10
union all
select id from t where num=20
5. 下面的查询也将导致全表扫描:
select id from t where name like
若要提高效率,可以考虑全文检索。


6. in和not in也要慎用,否则会导致全表扫描,如:
select id from t where num in(l,2, 3;
对于连续的数值,能用between就不要用in 了:
select id from t where num between 1 and 3
7. 如果在where子句中使用参数,也会导致全表扫描。因为SQL只有在运行时才会解 析局部变量,但优化程序不能将访问计划的选择推迟到运行时;它必须在编译时进行选 择。然而,如果在编译时建立访问计划,变量的值还是未知的,因而无法作为索引选择 的输入项。如下面语句将进行全表扫描:
select id from t where num=@num
可以改为强制查询使用索引:
select id from t with (index (索引名):where num=@num
8. 应尽量避免在where子句中对字段进行表达式操作,这将导致引擎放弃使用索引而 进行全表扫描。如:
select id from t where num/2=100
应改为:
select id from t where num=100*2
9. 应尽量

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值