面试/笔试
emmm...
zj134_
以物喜
展开
-
翻转栈中的元素(不使用额外数组或者队列)
如果想要反转栈中的元素,可以使用队列作为辅助数据结构的话,就来回倒腾一下就可以了。但是如果不使用队列应该怎么做呢?今天百度面试就被问到了。。。那必然就是使用递归来操作了,关键是怎么去组织递归呢?下来考虑简单的问题,如何将栈底的元素挪动到栈顶?也就是这样:怎么把0挪动到最上面?我们需要获取0,可是使用一个自下而上的递归把最底下的0传递出来(作为递归返回值):int get(stack<int> &s){ int v = s.top(); s.pop();原创 2020-10-25 21:15:34 · 622 阅读 · 0 评论 -
malloc 底层实现及原理
原文:malloc 底层实现及原理 - 爱笑的张飞 - 博客园文章目录结论具体内容内存分配的原理具体分配过程情况一:malloc 小于 128K 的内存,使用 brk 分配情况二:malloc 大于 128K 的内存,使用 mmap 分配(munmap 释放)摘要:偶尔看到面试题会问到 malloc 的底层原理,今天就来记录一下,毕竟学习要“知其所以然”,这样才会胸有成竹。注:下面分析均是基于 linux 环境下的 malloc 实现。步骤是:先总结结论,再逐步展开结论1)当开辟的空间小于 12转载 2020-10-22 11:24:08 · 1535 阅读 · 0 评论 -
C++ 的placement new和placement delete
参考:placement new和placement delete_hujing_Liu-CSDN博客《effctive C++》p256通常的C++程序中,new和delete表达式总是成对出现,并且分别调用了全局的operator new和operator delete,这两个全局操作符(或者直接理解为全局的函数)的基本形式如下:void * operator new ( std::size_t) throw ( std::bad_alloc );void operator delete (原创 2020-10-20 16:08:56 · 1356 阅读 · 0 评论 -
定时器的设计的几种思路
原文:高效定时器的设计_青萍之末的博客-CSDN博客文章目录一、timerfd二、定时器的概念三、排序链表四、最小堆(优先队列)五、时间轮(环形队列+双向链表)五、红黑树(std::set自动排序)一、timerfd调用timerfd_create()创建一个时间文件描述符即把时间变为文件描述符,定时器超时则文件描述符会变得可读,这样可以和epoll结合起来,统一处理I/O事件和超时事件。可以把timerfd和时间戳一起作为key,避免两个定时器相同的情况。二、定时器的概念网络编程转载 2020-10-19 20:30:09 · 2435 阅读 · 0 评论 -
C++智能指针简单实现
参考:C++ 引用计数技术及智能指针的简单实现 - melonstreet - 博客园c++ primer 5th 12.1文章目录智能指针是什么普通指针存在的问题什么是引用计数?智能指针实现基础对象类辅助类为基础对象类实现智能指针类智能指针类的使用与测试智能指针类的改进一智能指针改进二智能指针是什么简单来说,智能指针是一个管理内存的类,它对普通指针进行封装,使智能指针类对象具有普通指针类型一样的操作。具体而言,拷贝对象时,副本和原对象都指向同一存储区域,如果通过一个副本改变其所指的值,则通过另一转载 2020-10-19 19:31:52 · 1102 阅读 · 0 评论 -
面向对象的思想设计榨汁机的类
榨汁机的特点是放入苹果得苹果汁,放入香蕉得香蕉汁,而具体制作的过程并不关心。#include <iostream>#include <string>using namespace std;typedef enum{//枚举水果 apple, banana, orange, nothing}Fruit_type;class Fruit{//抽象水果类public: virtual const string& type()原创 2020-10-13 13:04:18 · 426 阅读 · 0 评论 -
场景题/智力题/概率题
来自网络上到处收集在弱网环境下,如何确保一个请求发送成功?弱网环境会存在的问题:丢包、错包、乱包。高延迟:响应数据回来时间长,甚至大于客户端等待时间带宽小:每次通信的内容少,数据包越大受影响越大网络断续:网络经常断开又连接,类似于经常出入电梯弱网下优化处理:参考:弱网环境下的网络性能调优 - 红嘴鲤鱼 - 博客园1、采用TCP协议、实现长连接2、采用长连接池,节省握手时间3、采用ProtocolBuffer,减少冗余数据(相比xml)4、弃用DNS,直接使用IP,减少了请求DNS服务原创 2020-10-10 11:30:39 · 1675 阅读 · 0 评论 -
如果链表可能有环,判断两个链表是否相交?
链表相交:LeetCode第 160 题:相交链表(C++)_zj-CSDN博客环形链表:LeetCode第 141 题:环形链表(C++)_zj-CSDN博客那如果如果链表可能有环,判断两个链表是否相交?分两步来:第一步:先判断两个链表是否有环,如果有环的话,找到环的入口点。判断是否有环:快慢指针法快慢指针p, q,快指针一次走两步,慢指针一次走一步。如果有环,两者必定相遇,否则没有环。如果有环,当p和q相遇时,q(快指针)回到起点,然后p,q同步走(一次走一步),两者再次相遇的节点就是环原创 2020-10-07 22:22:05 · 495 阅读 · 0 评论 -
不均匀硬币产生等概率/均匀硬币产生非等概率
不均匀硬币产生等概率已知随机数生成函数random(),返回0的概率是60%,返回1的概率是40%。根据random()实现一个随机数函数f(),使返回0和1的概率是50%。连续投掷两次:第一次为0,第二次为1:返回0第一次为1,第二次为0:返回1这样返回0/1的概率都是相同的。#include <bits/stdc++.h>using namespace std;int main(){ while(true){ int a = random();原创 2020-10-06 16:29:01 · 1077 阅读 · 0 评论 -
面试知识点(操作系统)
个人记录,来源参考了很多网上的资料:计算机网络常见面试知识点总结_松生的博客-CSDN博客文章目录计算机网络体系结构TCP三次握手四次挥手三次握手四次挥手为什么客户端最后还要等待2MSL如果已经建立了连接,但是客户端突然出现故障了怎么办?TCP,UDP协议,分析上层协议应该使用 UDP 还是 TCPTCP, UDP协议的区别TCP协议如何保证可靠传输ARQ协议:如何解决线程不安全操作锁有哪些类型?什么情况下可能发生死锁,怎么解决死锁。 死锁的四个条件和避免的方法死锁产生的原因:产生死锁的四个必要条件:处原创 2020-09-14 11:06:34 · 528 阅读 · 0 评论 -
实现string类拷贝构造函数和赋值构造函数
一个简单的string类需要哪些成员呢?默认构造函数;big three(拷贝构造、拷贝复制、析构)一个char*指针成员#include <bits/stdc++.h>using namespace std;"hello");class my_string{public: my_string(const char *cstr = NULL); my_string(const my_string& str); my_string& o原创 2020-09-13 15:44:47 · 752 阅读 · 0 评论 -
c++标准输入输出流的进制表示以及进制之间的转换
dec是10进制 如cout << dec << b 就会把b转换成10进制再输出hex是16进制 如cout << hex << b 就会把b转换成16进制再输出oct 是 8 进制 如cout << oct << b 就会把b转换成8进制再输出同理:dec是10进制 如cin >> dec >> b 切换至十进制输入hex是16进制 如cin >> hex >> b 切换至十原创 2020-09-08 17:14:12 · 510 阅读 · 0 评论 -
calloc、malloc、realloc函数的区别
参考:realloc、malloc、以及calloc函数的区别_逐梦男孩-CSDN博客三者都是分配内存,都是stdlib.h库里的函数文章目录malloccallocreallocmalloc原型:void* malloc (size_t size);size为要申请的空间大小常见使用方式:int *p = (int *)malloc(20*sizeof(int));一般需要将返回的void*指针进行强制类型转换为所需类型指针。示例:/* malloc example: rando原创 2020-09-12 16:26:09 · 194 阅读 · 0 评论 -
struct对齐规则
参考了:结构体在内存中的对齐规则 -CSDN博客先看这一段代码:struct A{ char a; int b; double c;};int main(){ A a; cout << sizeof(a) << endl; cout << &a << endl; cout << (void*)&a.a << " " << &a.b << " " << &a原创 2020-09-12 00:50:14 · 2469 阅读 · 0 评论 -
关于函数strcpy、strncpy和memcpy的细节
参考:别再耍流氓了: 请别再用strcpy, 而用strncpy_认知 行动 坚持-CSDN博客C/C++笔记–strcpy和strncpy函数的安全性分析_xpu_zhouxin的博客-CSDN博客strcpy有什么危险?函数原型:char* strcpy(char* strDest, const char* strSrc)char* strncpy(char* strDest, const char* strSrc, size_t n)strcpy: 用于拷贝字符串,会拷贝 '\0',当原创 2020-09-12 15:45:24 · 537 阅读 · 0 评论 -
面试知识点(C++)
仅作个人记录文章目录构造函数和析构函数是否可以抛出异常里氏原则shared_ptr里面引用计数是什么类型?c++内存空间有哪些段?std::move()默认拷贝构造函数是深还是浅?介绍static关键字。map和unordered_map的区别函数形参用 const & 来修饰,有什么好处?红黑树与平衡二叉树unique_ptr的独占式怎么实现?share_ptr引用计数有没有什么问题?怎么解决这个问题?函数内定义了一个share_ptr对象,但是函数内抛出异常了没有回来继续执行,会造成内存泄漏吗原创 2020-09-12 01:24:04 · 502 阅读 · 0 评论