面经
阿康不会敲代码
这个作者很懒,什么都没留下…
展开
-
memcpy函数实现
为避免溢出,目标参数和源参数所指向的数组的大小应至少为 num 个字节,并且不应重叠(对于重叠的内存块,memmove 是一种更安全的方法)。当然,这里可以考虑倒过来拷贝,这样数据就不会丢失,是否可以用dest - src原创 2023-05-04 15:44:52 · 355 阅读 · 0 评论 -
回溯法和dfs的区别
值得注意,回溯法以深度优先搜索的方式搜索解空间,并且在搜索过程中用剪枝函数避免无效搜索。那为何 回溯算法 = 深度优先搜索 + 剪枝函数这一说法没有错?因为树是特殊的图。简单来说,树是广义的图。再简单来说,树是图。因此,回溯算法与深度优先搜索的关系也昭然若揭。因为,实施算法的对象(数据结构)都是图,所以,两者可以相提并论,存在一些共性,回溯算法也得以在搜索时使用深度优先算法。也显而易见,回溯算法 也并不简单的可以说回溯算法 = 深度优先搜索 + 剪枝函数。因为并不是所有图都是树。深度优先搜索适用于原创 2022-06-20 22:07:16 · 651 阅读 · 0 评论 -
面经:红黑树 B树 B+树 哈希表
1.对于插入,删除,查找 以及 输出有序序列 这几个操作,红黑树也可以完成,时间复杂度 与 用跳表实现是相同的。 但是,对于按照区间查找数据这个操作(比如 [20,300]),红黑树的效率没有跳表高,跳表可以做到 O(logn)的时间复杂度定位区间的起点,然后在原始链表中顺序向后遍历输出,直到遇到值大于区间终点的节点为止。2.跳表更加灵活,它可以通过改变节点的抽取间隔,灵活地平衡空间复杂度和时间复杂度3.相比红黑树,跳表更容易实现,代码更简单。...原创 2022-06-20 22:05:21 · 158 阅读 · 0 评论 -
面经:多线程 线程池
当进程被初始化后,主线程就被创建了。对于绝大多数的应用程序来说,通常仅要求有一个主线程,但也可以在进程内创建多个顺序执行流,这些顺序执行流就是线程,每一个线程都是独立的。线程是进程的组成部分,一个进程可以拥有多个线程,一个线程必须有一个父进程。线程可以拥有自己的堆栈、自己的程序计数器和自己的局部变量,但不拥有系统资源,它与父进程的其他线程共享该进程所拥有的全部资源。因为多个线程共享父进程里的全部资源,因此编程更加方便;但必须更加小心,因为需要确保线程不会妨碍统一进程中的其他线程。.........原创 2022-06-20 21:51:03 · 203 阅读 · 0 评论 -
面经:设计模式
什么是接口隔离原则(Interface Segregation Principle)定义:客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。概括的说就是:建立单一接口,不要建立臃肿庞大的接口。(接口尽量细化,同时接口中的方法尽量少。)......原创 2022-06-20 21:49:30 · 83 阅读 · 0 评论 -
面经:http协议
总结HTTPS传输过程客户端先从服务器获取到证书,证书中包含公钥客户端将证书进行校验客户端生成一个对称密钥,用证书中的公钥进行加密,发送给服务器服务器得到这个请求后用私钥进行解密,得到该密钥客户端以后发出后续的请求,都使用这个对称密钥进行加密。服务器收到这个密文也用这个密钥进行解密。...原创 2022-06-20 21:48:38 · 102 阅读 · 0 评论 -
面经:单例模式
c++面经原创 2022-06-20 21:47:28 · 128 阅读 · 0 评论 -
面经:服务器相关
当你去读一个阻塞的文件描述符时,如果在该文件描述符上没有数据可读,那么它会一直阻塞(通俗一点就是一直卡在调用函数那里),直到有数据可读。当你去写一个阻塞的文件描述符时,如果在该文件描述符上没有空间(通常是缓冲区)可写,那么它会一直阻塞,直到有空间可写。以上的读和写我们统一指在某个文件描述符进行的操作,不单单指真正的读数据,写数据,还包括接收连接accept(),发起连接connect()等操作…当你去读写一个非阻塞的文件描述符时,不管可不可以读写,它都会立即返回,返回成功说明读写操作完成了,返回失败会设置相原创 2022-06-20 21:45:41 · 221 阅读 · 0 评论