腾讯面经----后台开发----初面

整个流程大概在80分钟new关键字做了什么?内存在什么地方?是否一定会成功?失败会发生什么?抛异常?讲讲多态讲讲什么是IO复用?select也是去轮循,用户层使用非阻塞也是去轮循,这两者有什么区别吗?好在哪?select与epoll有什么区别?了解的进程间通信方法?了解消息队列吗?他的调用接口是否还
面经 c/c++ 算法 2021年03月01日 127次浏览

面经大杂烩1

搜索树、平衡树,都有哪些特点呢?平衡树(BalanceTree,BT)指的是,任意节点的子树的高度差都小于等于1。常见的符合平衡树的有,B树(多路平衡搜索树)、AVL树(二叉平衡搜索树)等。二叉搜索树的特点:对于树中的每个节点X,它的左子树中所有关键字值小于X的关键字值,而它的右子树中所有关键字值大
数据结构 c/c++ 数据库 2021年02月04日 44次浏览

时间轮算法设计实现

时间轮算法基本思想参照时钟运转的思路,每个相同刻度下的时间是相同的,将所有相同时间的时间放在一个槽中,通过用一个指针每过一个刻度指向时间轮的槽,取出槽中链表,循环遍历相同刻度下的事件。(liunx内核就是这么做的)。如图所示的是一个时间轮的基本结构。时间轮分为N个时间槽slot,每时间槽指向一个定时
工具 数据结构 c/c++ 2021年01月25日 47次浏览

使用红黑树实现定时器

使用红黑树实现定时器使用的是nginx中使用的红黑树结构,直接从中迁移出来并修改。通过红黑树实现的时间轮,查询与插入的时间复杂度是O(Logn)。查询第一个节点只需要找树的最左边一个节点即可。定时器本身就是从头部开始取数据,红黑树就不比跳表这一数据结构匹配定时器实现的更好。文件rbtree.h#if
工具 数据结构 c/c++ 2021年01月25日 50次浏览

使用跳表实现定时器

使用跳表实现定时器使用的是redis中使用的跳表结构,直接从中迁移出来并修改。通过跳表实现的时间轮,查询第一个数据的时间复杂度就是O(1),插入时间复杂度就大概率的趋向于O(logn(N))。定时器本身就是从头部开始取数据,跳表这一数据结构就特别匹配定时器的实现。文件skiplist.h#ifnde
数据结构 c/c++ 2021年01月25日 58次浏览

数据离奇消失bug------栈覆盖

在通过栈申请的内存有一个特点,他是连续的,这就很容易造成一个现象,如果出现栈溢出问题,会覆盖写掉其他变量的东西。比如我下面写的例子。#include<stdio.h>#include<stdlib.h>#include<string.h>charbigmem[50
c/c++ 2021年01月20日 73次浏览

通过fd链接去获取相应的本地地址和远端地址

通过fd链接去获取相应的本地地址和远端地址intget_ip_and_port_by_fd(intfd,char*local_ip,int*local_port,char*peer_ip,int*peer_port){if((!local_ip||!local_port)&&(!pe
c/c++ 网络编程 2021年01月20日 46次浏览

md5从16字节转换为32字节

md5从16字节变为32字节16字节到32字节的转换,实际上是通过将每个字节输出成十六进制数据的来的,所以通过一下函数实现。#include<stdio.h>voidmd5_short_to_long(char*md5_long,char*md5_short){inti=0;char*p
工具 c/c++ 2021年01月20日 47次浏览

相同指针与全局变量编译之坑

相同指针陷阱这是一个将yp指针的值加到xp指针两次的函数。voidfun1(int*xp,int*yp){*xp+=*yp;*xp+=*yp;}这个代码表面一看可以优化成这样voidfun1(int*xp,int*yp){*xp+=2**yp;}但是如果yp于xp指针指向的是同一个地址,那么情况就会
c/c++ 2020年11月27日 114次浏览

服务器----分布式锁原理

锁线程锁lock(mutex)资源操作unlock(mutex)进程锁(nginx中accept锁-共享内存+信号量)分布式锁在不同机器的进程的锁分布式锁的实现方案数据库redis,mysqlzookeeper分布式锁有哪些特征互斥性。可重入性,一个进程允许递归获取锁(需要递归释放锁)。锁超时(进程
工具 c/c++ 网络编程 计算机网络 2020年11月22日 116次浏览