面试
Simon|
这个作者很懒,什么都没留下…
展开
-
HTTPS应该搞懂了吧!
HTTPS流程原创 2022-08-01 20:19:05 · 226 阅读 · 1 评论 -
inline函数
正文 在C语言中,我们使用宏定义函数这种借助编译器的优化技术来减少程序的执行时间,那么在C++中有没有相同的技术或者更好的实现方法呢?答案是有的,那就是内联函数。内联函数作为编译器优化手段的一种技术,在降低运行时间上非常有用。我们将从:什么是内联函数为什么要使用内联函数内联函数优缺点分析何时使用内联函数 这四个方面对内联函数进行介绍。 什么是内联函数转载 2017-10-13 09:22:46 · 281 阅读 · 0 评论 -
有一个能够产生1-5的随机数的函数,如何利用这个函数实现产生1-7的随机函数。
题目给你一个能生成1到5随机数的函数,用它写一个函数生成1到7的随机数。 (即:使用函数rand5()来实现函数rand7())。解答要生成一个1-7的随机数,等可能概率。首先,考虑第一个问题:等可能概率。随机数是等概率的事件,就是1,2,3,4,5,出现的概率应该是相同的,而不是其中某一种概率大一点。看这个公式 5*(x-1)+x;(x是1-5的随机数)那么 5*(x-1)会是等可能的0,5,1...原创 2018-04-17 09:42:37 · 4085 阅读 · 0 评论 -
操作系统内存管理--简单、页式、段式、段页式
一、内存管理的目的和功能内存一直是计算机系统中宝贵而又紧俏的资源,内存能否被有效、合理地使用,将直接影响到操作系统的性能。此外,虽然物理内存的增长现在达到了N个GB,但比物理内存增长还快的是程序,所以无论物理内存如何增长,都赶不上程序增长的速度,所以操作系统如何有效的管理内存便显得尤为重要。(1)内存管理的目的内存管理的目的主要有两个:一是方便用户使用;二是提高存储器的利用率。(2)内存管控的功能...转载 2018-04-18 09:18:57 · 331 阅读 · 0 评论 -
洗牌算法
洗牌算法洗牌算法是常见的随机问题:将1 ~ 52张扑克牌重新洗牌什么是好的洗牌算法:洗牌之后,如果能够保证每一个数出现在所有位置上的概率是相等的,那么这种算法是符合要求的;这在个前提下,尽量降低时间和空间复杂度。第一个算法:随机抽出一张牌,检查这种牌是否被抽取过,如果已经被抽取过,则重新抽取,知道找到没有被抽取的牌;重复该过程,知道所有的牌都被抽取到。这种算法是比较符合大脑的直观思维,这种算法有两...原创 2018-04-19 10:29:26 · 1669 阅读 · 0 评论 -
C++——左值引用和右值引用
转载自:http://blog.csdn.net/hyman_yx/article/details/52044632 左值、右值在C++11中所有的值必属于左值、右值两者之一,右值又可以细分为纯右值、将亡值。在C++11中可以取地址的、有名字的就是左值,反之,不能取地址的、没有名字的就是右值(将亡值或纯右值)。举个例子,int a = b+c, a 就是左值,其有变量名为a,通过&a可以获...转载 2018-04-20 09:32:09 · 191 阅读 · 0 评论 -
c++ 返回变量和返回变量引用
一、主要讨论下面两个函数的区别:int& at(){ return m_data_;}int at(){ return m_data_;}上面两个函数,第一个返回值是int的引用int&,第二个返回值是int,二者的区别是什么呢?我们先用一个语句 const int& a = mymay.at(); 来分别调用一次上面两个函数,然后看汇编语言的结果。...转载 2018-07-10 10:15:40 · 1749 阅读 · 0 评论 -
进程和线程的区别
在理解进程和线程概念之前首选要对并发有一定的感性认识,如果服务器同一时间内只能服务于一个客户端,其他客户端都再那里傻等的话,可见其性能的低下估计会被客户骂出翔来,因此并发编程应运而生,并发是网络编程中必须考虑的问题。实现并发的方式有多种:比如多进程、多线程、IO多路复用。多进程进程是资源(CPU、内存等)分配的基本单位,它是程序执行时的一个实例。程序运行时系统就会创建一个进程,并为它分配资...转载 2018-07-24 14:34:42 · 159 阅读 · 0 评论 -
各种排序算法比较
1.归并排序#include <iostream>using namespace std;#include <vector>class Solution{public: vector<int> mergeSort(vector<int> data) { gao(data, 0, data.size()-1); retur...原创 2018-08-06 16:38:40 · 190 阅读 · 0 评论 -
拷贝构造函数的参数一定要为引用?
看到这个题目,第一反应原因是,为了减少一次内存拷贝。但是我看了别人的博客才知道,这样做为了防止拷贝构造函数的防止无限递归,导致栈溢出。1.构造函数#include <iostream>using namespace std;class test{public: test() { cout << "constructor with argume...原创 2018-08-16 15:31:52 · 606 阅读 · 0 评论 -
c/c++:指针需要了解的基本东西
给自己看看的,留点印象。1.了解a+1,&a+1区别。只有当数组名在表达式中使用时,编译器才会为它产生一个指针常量。而只有以下两种情况,才不被当做指针常量: sizeof(数组名):返回数组长度(所占的字节数,不是数组元素个数),而不是指向数组的指针的长度。 &数组名:产生一个指向数组的指针,而不是一个指向某个指针常量的指针。 以上内容来源:《C和指针》...原创 2019-02-23 16:40:45 · 249 阅读 · 0 评论 -
c++必看书籍
<C++ Primer><C++ Primer Plus><Effective C++><more Effective C++><Effective Modern C++><深入探索C++对象模型><Effective STL><STL源码剖析>看完这八本原创 2017-07-18 16:02:03 · 534 阅读 · 0 评论 -
堆排序
最近看面经总是看到手写堆排序的题,所以自己手写了一个堆排序。主要有四个功能,建立堆,弹出堆顶元素,插入一个新元素,堆排序。1:建立堆找到第一个非叶子节点,和它的子节点比较。假设有两个子节点,选取子节点中大的值,如果父节点比上面的值小,交换。假设有一个子节点,选取右节点的值,如果父节点比上面的值小,交换。然后顺着路径往下更新,重复上面过程。void my_adjust_...原创 2019-08-21 16:27:56 · 171 阅读 · 0 评论 -
C++参数传递方式
c++参数传递方式一共有三种:值传递,指针传递,引用传递1:值传递void f_swap(int m, int n){ int temp; temp = m; m = n; m = temp;}int main(){ int a=1, b=2; cout << a << "\t" << b << endl;//1 2 f_swap(a, b); cout << a原创 2017-09-14 17:33:00 · 373 阅读 · 0 评论 -
静态联编和动态联编
1 函数联编的定义函数联编:将一个调用函数者联结上正确的被调用函数的过程,一般称为联编。C++中的联编分两种: (1)静态联编; (2)动态联编;2. 静态联编2.1 静态联编的定义成员函数必须声明为非virtual,即为非虚函数,该函数是静态联编;静态联编:指联编工作出现在编译连接阶段,这种联编又称为早期联编;编译程序:在编译阶段,被调函数和调用函数的关系以及原创 2017-08-07 10:34:38 · 395 阅读 · 0 评论 -
static和const
static的作用:对变量:1.局部变量:在局部变量之前加上关键字static,局部变量就被定义成为一个局部静态变量。1)内存中的位置:静态存储区2)初始化:未经初始化的全局静态变量会被程序自动初始化为0(自动对象的值是任意的,除非他被显示初始化)3)作用域:作用域仍为局部作用域,当定义它的函数或者语句块结束的时候,作用域随之结束。注:当static用来修饰局部变量的时原创 2017-08-01 14:53:36 · 264 阅读 · 0 评论 -
百度笔试题:malloc/free与new/delete的区别
相同点:都可用于申请动态内存和释放内存不同点:(1)操作对象有所不同。malloc与free是C++/C 语言的标准库函数,new/delete 是C++的运算符。对于非内部数据类的对象而言,光用maloc/free 无法满足动态对象的要求。对象在创建的同时要自动执行构造函数, 对象消亡之前要自动执行析构函数。由于malloc/free 是库函数而不是运算符,不在编译器控制权限之内,不转载 2017-08-02 11:07:05 · 222 阅读 · 0 评论 -
覆盖与重载的区别:相同点与异同点
方法的重载(overload)和覆盖(override)有的时候,类的同一种功能有多种实现方式,到底采用哪种实现方式,取决于调用者给定的参数。重载(overload):对于类的方法(包括从父类中继承的方法),方法名相同,参数列表不同的方法之间就构成了重载关系。这里有两个问题需要注意:(1) 什么叫参数列表?参数列表又叫参数签名,指三样东西:参数的类型,参数的个数,参数的顺序转载 2017-08-02 11:13:09 · 638 阅读 · 0 评论 -
给一个整数数组,输出所有可能的子集
1:迭代法思路很简单,就是用一个二进制的数表示当前元素集合的状态,状态的第i位如果是0,说明当前集合没有这个元素;如果是1,就是有这个元素,然后输出。//动态规划?int a[4] = { 1, 2, 3, 4 };int t = 1<<4;for (int i = 1; i <= t - 1; i++){ cout<<"{"; for (int j = 0; j <=原创 2017-07-25 10:17:34 · 3506 阅读 · 0 评论 -
2个有序数组求合并后的中位数
2个有序数组求合并后的中位数 第一步:假设两个有序数组(已经各自排序完成了)长度相等,试写函数找出两个数组合并后的中位数。 第二步:假设两个有序数组长度不等,一样的求出中位数 解析: 这个题目看起来非常简单。第一题的话: 假设数组长度为n, 那么我就把数组1和数组2直接合并,然后再直接找到中间元素。对于这样的方案,第一题和第一题就没有什么转载 2017-07-24 10:43:06 · 2593 阅读 · 0 评论 -
深入理解c++纯虚函数
为什么使用虚函数?什么是虚函数?虚函数是为了解决什么问题?面向对象的三大特征:封装多态继承普通虚函数虚析构函数纯虚函数抽象类接口类隐藏 vs 覆盖隐藏与覆盖之间的关系早绑定和晚绑定虚函数表什么是多态?相同对象收到不同消息或不同对象收到相同消息时产生的不同的动作。静态多态 vs 动态多态[-:>静态多态也叫做早绑定class Rect转载 2017-07-26 11:18:21 · 608 阅读 · 0 评论 -
析构函数调用顺序
设已经有A,B,C,D4个类的定义,程序中A,B,C,D析构函数调用顺序为?C c;void main(){ A*pa=new A(); B b; static D d; delete pa;}这道题主要考察的知识点是 :全局变量,静态局部变量,局部变量空间的堆分配和栈分配 对于类A, 是建立在堆上的对象指针pa, 手动释放 对于原创 2017-07-27 10:14:59 · 2973 阅读 · 3 评论 -
C++中结构体与类的区别(struct与class的区别)
转载来源:http://blog.sina.com.cn/s/blog_48f587a80100k630.htmlC++中的struct对C中的struct进行了扩充,它已经不再只是一个包含不同数据类型的数据结构了,它已经获取了太多的功能。struct能包含成员函数吗? 能!struct能继承吗? 能!!struct能实现多态吗? 能!!! 既然这些它都能实现,那它和c转载 2017-07-27 10:28:17 · 360 阅读 · 0 评论 -
四种进程或线程同步互斥的控制方法
四种进程或线程同步互斥的控制方法1、临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。 2、互斥量:为协调共同对一个共享资源的单独访问而设计的。 3、信号量:为控制一个具有有限数量用户资源而设计。 4、事 件:用来通知线程有一些事件已发生,从而启动后继任务的开始。临界区(Critical Section)(同一个进程内,实现互斥)保证在某一转载 2017-08-18 17:14:43 · 342 阅读 · 0 评论 -
sizeof
定义:sizeof是Pascal的一种内存容量度量函数。C语言中判断数据类型或者表达式长度的运算符;不是一个函数,字节(byte)数的计算在程序编译时进行,而不是在程序执行的过程中才计算出来。1:字节、位、字长字 word 字节 byte 位 bit 1字=2字节(1 word = 2 byte) 1字节=8位(1 byte = 8bit) 一个字原创 2017-07-28 11:10:26 · 422 阅读 · 0 评论 -
C++中的接口与实现
所谓接口继承,就是派生类只继承函数的接口,也就是声明;而实现继承,就是派生类同时继承函数的接口和实现。 我们都很清楚C++中有几个基本的概念,虚函数、纯虚函数、非虚函数。 虚函数: C++实现运行中的多态性是通过虚函数实现的,而虚函数必须存在于继承环境下。 因此,虚函数是指一个类中你希望进行重载的成员函数,当你用一个基类指针或引用指向转载 2017-08-21 11:02:16 · 1122 阅读 · 0 评论 -
在客户端输入URL到页面返回,发生了什么?
最近看到一个题目,是当在浏览器中输入一个url后回车,后台发生了什么?比如输入url后,你看到了百度的首页,那么这一切是如何发生的呢?这个问题之前、最近、我想以后肯定还会被问到,或者问到这样的题目,如果在百度框里输入查询的字符串开始,是怎么返回你需要的东西呢。那这什么个过程呢(这个问题我在之后的博客中在写)?网上各种的说法,不外乎这么几种第一种简单的说呢就是这样的:转载 2017-08-21 14:57:55 · 2833 阅读 · 0 评论 -
长度为n的整数数组循环左移m位
1.首先逆置数组前m个元素; 2.逆置余下n-m个元素;3.逆置整个数组a。 采用此算法仅需要很少的额外空间,在时间和空间上都很高效,而且代码很短。#include using namespace std;int a[100];void reverse(int *a, int l, int r){ int temp; for (int i = l; i <= (l + r) / 2; i原创 2017-08-21 15:12:27 · 5524 阅读 · 0 评论 -
死锁
1.死锁是什么死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。2.死锁产生的条件和原因四个必要条件:(1) 互斥条件:一个资源每次只能被一个进程使用。(2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获原创 2017-07-31 15:28:01 · 344 阅读 · 0 评论