![](https://img-blog.csdnimg.cn/20190906120528456.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
面试题
Bob__yuan
这个作者很懒,什么都没留下…
展开
-
【PBRT】圆盘均匀采样,python实现
圆盘内的均匀采样问题,是一个很有意思,也很常被考到的问题。在一个圆形内,均匀采点,怎么保证均匀且随机? 有三种方法:1、正方形采样;2、极坐标采样(错误!);3、圆盘采样一、正方形采样(Reject Method) 最容易想到的方法就是在正方形内采样,比如要在圆心为原点,半径为1的圆内均匀采样,可以在 x 从 [-1, 1],y 从 -[-1, 1] 的正方形内均匀采样,然后把不在圆...原创 2020-04-20 13:28:29 · 3340 阅读 · 1 评论 -
判断一个多边形的凸凹性
一、凹凸多边形定义 因为凸多边形刚好定义,所以还是先看凸多边形的定义,凸多边形(Convex Polygon)可以有以下三种定义:没有任何一个内角是优角(Reflexive Angle)的多边形。如果把一个多边形的所有边中,有一条边向两方无限延长成为一直线时,其他各边都在此直线的同旁,那么这个多边形就叫做凸多边形。凸多边形是一个内部为凸集的简单多边形。 简单多边形的下列性质与其凸...原创 2020-04-20 09:42:42 · 4784 阅读 · 0 评论 -
面试中的思维题
先记录所有问题,最后给出所有答案:问题1. 硬币分堆 桌子上有 23 枚一模一样的硬币,光用手摸,摸不出正反面。现在有 10 枚硬币正面朝上,13 枚反面朝上,怎么做可以蒙着眼把这 23 枚硬币分成两堆,这两堆中正面朝上的硬币个数一样多。解答1. 硬币分堆 将这堆硬币随意分成 10 和 13 两堆,把 10 枚硬币这堆,10 枚硬币全部翻面即可。 从结果看肯定没有问题,正向推也...原创 2020-04-12 21:16:14 · 1037 阅读 · 0 评论 -
LeetCode - 138. Copy List with Random Pointer 随机节点链表复制
A linked list is given such that each node contains an additional random pointer which could point to any node in the list or null.Return a deep copy of the list. 节点结构如下:class Node {public: ...原创 2020-01-30 10:29:43 · 210 阅读 · 0 评论 -
【C++】final/override、如何设计一个不能被继承的类
final 和 override 都是在特定场景使用有特殊含义的标识符(specifier / identifier ),并不是C++保留的关键字(not a reserved keyword )。final specifier (since C++11)Specifies that a virtual function cannot be overridden in a derived...原创 2019-11-02 17:51:47 · 571 阅读 · 0 评论 -
【C++】指针和引用的区别
面试中常会问到:“讲一讲指针和引用的区别”,主要区别如下表所示:指针引用变量指针是一个变量,不过变量存储的是一个地址,指向内存中的一个存储单元引用只是别名解引用使用时需要 dereference(*p)不需要解引用定义与初始化可以初始化为nullptr,也可以不初始化(默认为空)定义时必须初始化,且不能为空能否修改内容指针可以指向别的内容...原创 2019-10-26 10:27:10 · 303 阅读 · 0 评论 -
const 指针与迭代器
正常的指针是很好记的:const 在 * 前边,表示 *p 不能变;cosnt 在 * 后边,表示 p 不能变;前后都有 const 表示 *p 和 p 都不能变。 但是 STL vector 的 iterator 和 const_iterator 是不一样的:#include <iostream>#include <vector>using nam...原创 2019-10-22 20:55:04 · 226 阅读 · 0 评论 -
【C++】构造函数、析构函数执行顺序
下边这段代码的输出是什么?#include <iostream>using namespace std;class A {public: A() { cout << "A() "; } ~A(){ cout << "~A() "; }};class B {public: B() { cout << "B() "; } ~...原创 2019-10-22 16:11:10 · 212 阅读 · 0 评论 -
随机数函数设计
问题:怎么设计一个随机函数?有一个随机生成 [1, 5] 的随机函数,怎么设计一个均匀随机 [1, 7] 的随机函数?怎么设计一个随机函数 会了再写。随机函数设计有一个随机生成 [1, 5] 的随机函数,怎么设计一个均匀随机 [1, 7] 的随机函数? 这个问题可以概括成:给定一个在 [a, b] 内均匀随机的函数 F,设计一个 [m, n] 内均匀随机的函数 R。 ...原创 2019-10-21 21:20:40 · 396 阅读 · 0 评论 -
【C++】extern “C“
extern “C” 被 extern 限定的函数或变量是 extern 类型的 被 extern “C” 修饰的变量和函数是按照 C 语言方式编译和链接的。 extern “C” 的作用是让 C++ 编译器将 extern “C” 声明的代码当作 C 语言代码处理,可以避免 C++ 因符号修饰导致代码不能和C语言库中的符号进行链接的问题。extern “C” 块应用 在 C 和...原创 2019-10-21 11:05:14 · 257 阅读 · 1 评论 -
vector push_back 时间复杂度分析
《C++程序设计语言》第4部分:标准库,里边写 vector,第一句如下:The STL vector is the default container. Use it unless you have a good reason not to. If your suggested alternative is a list or built-in array, think twice....原创 2019-10-19 22:21:15 · 4590 阅读 · 0 评论 -
HTTPS
https://blog.csdn.net/qq_21399461/article/details/80367712原创 2019-10-18 16:56:51 · 411 阅读 · 0 评论 -
【C++】四种强制类型转换
C++ 四种强制类型转换 C语言中的强制类型转换(Type Cast)有显式和隐式两种,显式一般就是直接用小括号强制转换,TYPE b = (TYPE)a; 隐式就是直接 float b = 0.5; int a = b; 这样隐式截断(by the way 这样隐式的截断是向 0 取整的,我喜欢这么叫因为 0.9 会变成 0,1.9 变成 1,-0.9 变成 0,-1.9 变成 -1)。 ...原创 2019-02-28 21:05:08 · 44366 阅读 · 3 评论 -
【C++】static关键字
分为4部分:static 修饰非成员变量和函数static 修饰非成员变量static 修饰非成员函数static 修饰成员变量和函数static 修饰成员变量static 修饰成员函数一、static 修饰非成员变量和函数1.1 static 修饰非成员变量 C/C++ 中,static 修饰的非成员变量分为静态全局变量和静态局部变量,两种静态变量都是存储在全...原创 2019-10-14 21:14:16 · 321 阅读 · 0 评论 -
【C++】构造函数、析构函数中的虚函数
今天腾讯一面问了道题,之前没有想过,说构造函数或者析构函数中有虚函数是,那实际执行的是哪个函数,面试完进行了测试,如下代码所示:#include <iostream>class A{public: A() { printf("*** A() begin ***\n"); f(); g(); printf("*** A() end ***\n\n"); ...原创 2019-03-19 19:18:12 · 959 阅读 · 0 评论 -
【C++】虚函数中的默认参数
网上面试题中有一道以前没有想过,也没有试过的题。就是在继承关系中,虚函数中如果有默认参数,实际过程中,默认参数是多少。 试验代码如下:#include <iostream>using namespace std;class A {public: virtual void foo (int i = 1) { cout << "foo in class A...原创 2019-03-27 15:15:34 · 2774 阅读 · 0 评论 -
【C++】类的实例化方式限制
在C++中,类的实例化可以 A a; 或者 A *p = new A; ,有的时候想只能用其中一个中方式实例化。一、只能静态分配类对象,即 A a; 的方式进行实例化 这样需要将类的 new 和 delete 操作符重载为 protected,new[] 、delete[] 同理,如下:class A{public:protected: void* operator new(...原创 2019-04-01 10:50:59 · 698 阅读 · 1 评论 -
【C++】模板特化、偏特化
模板分为函数模板和类模板,特化分为全特化和偏特化。使用模板的时候,我们的目的就是希望可以不用每个类型实现一遍,而是用一个模板代替这个类型。如果所有类型的实现都是一个统一的一样的实现,就不需要模板特化或者偏特化了,但是大多数情况是肯定有特殊版本需要特殊处理的,下边用两个典型的例子记录一下:1、hash<_Kty>:模板全特化2、vector<bool>:模板偏特化一...原创 2019-09-24 13:25:37 · 2162 阅读 · 0 评论 -
【C++】list splice、LRU cache
在做 LeetCode - 146. LRU Cache 的时候用到了 list 的 splice 功能,做一个记录。一、list::splice 先讲 splice 功能。splice 是剪接、胶接的意思,比如剪接电影、胶接磁带这样的,用在 list 上就是在一个 list 中剪接上另一个 list 的部分或全部内容。英文介绍如下:Transfer elements from l...原创 2019-09-06 15:17:33 · 531 阅读 · 0 评论 -
【C++】字符串的 hash 值计算
C++ 11 中新加入的容器 unordered_map 和 unordered_set 底层都是哈希表实现的,那么对于内置类型,肯定是可以自动计算出 hash 值的,但是对于像 pair<int, int> 或者 vector<int> 这样的,或者自定义的类这种复杂类型,就不能自动算出 hash 值了,编译会提示 The C++ Standard doesn’t p...原创 2019-08-22 16:11:42 · 12107 阅读 · 0 评论 -
【C++】设计简单回调函数
当我们写二叉树遍历是,比如写最简单的二叉树前序遍历(二叉树遍历参考),如下:void inorder(TreeNode* root) { if (root != nullptr) { cout << root->val <<endl; inorder(root->left); inorder(root->right); }} ...原创 2019-08-22 16:48:02 · 287 阅读 · 0 评论 -
【CPU缓存】一级二级三级缓存
CPU缓存 CPU缓存(Cache Memory)是位于 CPU 与内存之间的临时存储器,它的容量比内存小的多,但是交换速度却快得多。 CPU运算速度要比内存读写速度快很多,这样会使CPU花费很长时间等待数据到来或把数据写入内存。高速缓存的出现主要是为了解决 CPU 运算速度与内存读写速度不匹配的矛盾。在缓存中的数据是内存中的一小部分,但这一小部分是短时间内CPU即将访问的(?如何判断),...原创 2019-10-16 16:58:18 · 2513 阅读 · 0 评论 -
【C++】 new delete、new[] delete[] 详解
C++ 中,new、delete 和 sizeof 一样,都不是函数,都是操作符。面试经常回问 malloc/free 和 new/delete的区别和联系:malloc/free 只是动态分配内存空间/释放空间,new/delete 除了分配空间还会调用构造函数和析构函数进行初始化与清理它们都是动态管理内存的入口malloc/free 是 C/C++ 标准库的函数,new/delet...原创 2019-09-03 16:29:50 · 1843 阅读 · 0 评论 -
【C++】菱形继承
C++的继承和多态是面试经常回问的问题,菱形继承问的会少一点,但是问到了还是知道些的好。一、正常单继承 对于正常的单继承,可以看到多态的实现,父类指针指向孙子类对象:class A {public: virtual void foo() { cout << "A foo()" << endl; }};class B :public A { void ...原创 2019-09-06 12:02:51 · 246 阅读 · 0 评论 -
【C++】 类的内存对齐、虚函数表
本文分为以下几个部分内容:什么是内存对齐,为什么要内存对齐C++的空类,以及没有虚函数和非静态变量的类正常的C++类的内存分布变量的内存对齐虚函数一、什么是内存对齐,为什么要内存对齐1.1 什么是内存对齐: 内存对齐是从硬件层面出现的概念。可执行程序是由一系列CPU指令构成的,其中有一些指令是需要访问内存的。在很多CPU架构下,这些指令都要求操作的内存地址(更准确的...原创 2019-09-04 14:25:14 · 1880 阅读 · 0 评论 -
【C++】 单例模式
设计模式是面试中经常会问到的问题,而单例模式(Singleton Pattern)又是最常用的几个之一。其意图是保证一个类最多仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。 定义一个单例类需要: 1、私有化它的构造函数,以防止外界创建单例类的对象 2、使用类的私有静态指针变量指向类的唯一实例 3、使用一个公有的静态方法获取该实例 分为懒汉版(Lazy...原创 2019-08-20 15:06:47 · 242 阅读 · 0 评论 -
【C++】 explicit 关键字
C++ 中 explicit 关键字用于指定类的构造函数或转换函数为显式,即它不能用于隐式转换和复制初始化。 C++ 11前,声明时不带函数说明符 explicit 的拥有单个无默认值形参的构造函数被称作转换构造函数。就是可以直接转换,比如 A(int) {} 那么 A a = 1; 是可以自动转换的,C++ 11后,多个无默认参数的可以这么转换了,如下:class A {public...原创 2019-08-26 15:20:15 · 148 阅读 · 0 评论 -
HTTP 1.0, 1.1, 2.0 的区别
https://mp.weixin.qq.com/s/GICbiyJpINrHZ41u_4zT-A 总的来说就是:HTTP 1.1 和 HTTP 1.0 相比的新特性: 长连接,HTTP 1.1 支持长连接(Persistent Connection)、)和请求的流水线(Pipelining)处理,在一个 TCP 连接上可以传送多个 HTTP 请求和响应,减少了建立和关闭连接的消耗和...原创 2019-10-16 11:56:15 · 176 阅读 · 0 评论 -
【TCP】拥塞控制
https://blog.csdn.net/shuxnhs/article/details/80644531原创 2019-09-01 18:44:02 · 152 阅读 · 0 评论 -
【TCP/IP】三次握手、四次挥手
https://mp.weixin.qq.com/s/8t_KFtrrBkFyZKPJg_y6pw原创 2019-09-06 19:07:33 · 146 阅读 · 0 评论 -
【DNS】域名解析过程
DNS (Domain Name System)是域名系统的简称,用于将 http://www.baidu.com/ 这样的主机名解析为 IP 地址。 如果浏览器中输入的是 ip 地址,就不需要域名解析这一步了,如果输入的是 http://www.baidu.com/ 这样的域名,具体解析过程大致如下(肯定还有别的):1、浏览器缓存 用户通过浏览器浏览过某网站之后,浏...原创 2019-08-19 20:54:19 · 121 阅读 · 0 评论 -
操作系统虚拟内存调度方式(页式、段式、段页式)
一、操作系统虚拟内存调度方式 操作系统虚拟内存调度方式有分页式、段式、段页式3种。页式调度 页式调度是将逻辑和物理地址空间都分成固定大小的页。主存按页顺序编号,而每个独立编址的程序空间有自己的页号顺序,通过调度辅存中程序的各页可以离散装入主存中不同的页面位置,并可据表一一对应检索。 在页式虚拟存储系统中,虚拟空间被分成大小相等的页,称为逻辑页或虚页。主存空间也被分成同样大小的页,称为...原创 2019-10-16 14:22:23 · 5735 阅读 · 0 评论 -
字符数组、字符串指针
先放代码:#include <iostream>using namespace std;int main() { char a[] = "abcdef"; const char* b = "abcdef"; // C++11 不允许 char* p = "abc"; 了,必须有 const char c[] = { 'a', 'b', 'c', 'd', 'e', '...原创 2019-09-17 11:05:13 · 160 阅读 · 0 评论 -
一个整数二进制表示中有几个1
求一个整数的二进制表示下有多少个1,比如 32 (100000),返回 1;给定 5 (101),返回 2;给定 1023 (111111111),返回 9。 当然可以一位一位的看,但是这样太慢了,更好的方式是用:n = n & (n - 1),这种方式 每次将 n 二进制表示下最右边的一个 1 变为 0。int countNumofOne(int n){ int cnt...原创 2019-09-24 21:26:20 · 592 阅读 · 0 评论 -
100个人,100盏灯,全部熄灭,第一人过去按所有灯的开关,第二个人会每隔一盏灯按开关,第三个人每隔2盏灯按开关,以此类推,第100人隔99盏灯按开关,100个人都走完,剩多少盏灯亮着?
100个人 , 100盏灯,全部熄灭,第一人过去按所有灯的开关,第二个人会每隔一盏灯按开关,第三个人每隔2盏灯按开关,以此类推,第100人隔99盏灯按开关 , 100个人都走完,剩多少盏灯亮着? 总结来说,所有人都是按他自己编号的倍数的灯(编号都是从1开始),也就是说:1 号人按所有灯,2 号人按 2 4 6 8 10 号灯,三号人按 3 6 9 号灯,依次类推。 我们可以发现:一盏灯...原创 2019-10-08 14:43:56 · 6200 阅读 · 0 评论 -
【设计模式】生产者/消费者模式
https://blog.csdn.net/u011109589/article/details/80519863原创 2019-10-08 14:53:16 · 144 阅读 · 0 评论 -
n 个连续递增的数求和为 35,问 n 可能的值是哪些?
n 个连续递增的数求和为 35,问 n 可能的值是哪些? 连续递增数也就是 1 2 3 4 5 这样的,也就是差为 1 的等差数列。 设第一个数是 a,那么最后一个数就是 a + n - 1,利用等差数列求和公式,(首项 + 末项)* 项数 / 2: (a+a+n−1)∗n/2=35,即(2∗a+n−1)∗n=70(a + a + n - 1) * n / 2 = 35,即 (2 * ...原创 2019-10-10 22:42:56 · 561 阅读 · 0 评论 -
【数学】一根木棍随机折成四段,再随机取三段,能组成三角形的概率
很经典的一道题目:一根木棍随机折成三段,这三段能组成三角形的概率是多少? 我们假设随机折成三段长度分别为 x,y,z 那么能够组成三角形就是要满足:x + y > zx + z > yy + z > x 三个变量不好看,我们用 L - x - y 代替 z,得到:...原创 2019-08-31 22:43:00 · 2794 阅读 · 4 评论 -
int *p[3] 与 int (*q)[3] 的区别
int *p[3] 是一个数组,数组里存放了三个指向 int 的指针; int (*q)[3] 是一个指针,指向一个存放了三个 int 的数组。int main() { // 下边两种方式没有区别 int * a = new int[3]{1,2,3}; int (*b) = new int[3]{ 1,2,3 }; for (int i = 0; i < 3; ++i...原创 2019-08-26 15:59:53 · 1930 阅读 · 0 评论 -
最少的硬币组合出 [1, m] 中的所有值
题目链接:http://oi.nks.edu.cn/zh/Problem/Details?id=3847 题目:手上有 n 种不同面值的硬币,每种硬币有无限多个。为了方便购物,他希望带尽量少的硬币,但是要能组合出 1 到 m(闭区间)之间的任意值。 样例1:Input:20 41 2 5 10Output: 5 (1 2 2 5 10)样例2:Input:...原创 2019-08-22 14:38:27 · 376 阅读 · 0 评论