面试
practicePLUS
你的目标到底是什么
展开
-
STL之(哈希表)hashtable
容器hashtable(哈希表):另外一种底层机制其基本原理是:使用一个下标范围比较大的数组来存储元素。把关键字Key通过一个固定的算法函数即所谓的哈希函数(散列函数)转换成一个整型数字,然后就将该数字对数组长度进行取余,取余结果就当作数组的下标,将value存储在以该数字为下标的list空间里。也可以简单的理解为,按照关键字key为每一个元素“分类”,然后将这个元素存储在相应“类”所对应的地...原创 2018-08-12 16:07:30 · 5493 阅读 · 0 评论 -
STL之(底层哈希表)hash_set、hash_multiset、hash_map,hash_multimap
hash_set与hash_multiset:实值就是键值以hashtable为底层机制,所以几乎所有的hash_set行为,都是转调hashtable的操作行为。 与set、multiset相比,hash_set、hash_multiset没有自动排序功能。 hash_set与set一样,实值就是键值。使用方式与set完全相同插入元素操作采用底层机制hashtable...原创 2018-08-12 16:20:07 · 569 阅读 · 0 评论 -
STL之vector
容器、结构与分类 容器 :所有的容器都维护着两个迭代器,分别指向头和尾STL容器是将运用最广的数据结构实现出来根据数据在容器中的排列特性,将这些数据结构分为序列式和关联式两种序列式容器(advlsqp)array\deque\vector\list\queue\priority-queueArray连续空间,其迭代器就是指针。 VectorVector&l...原创 2018-08-12 16:31:22 · 585 阅读 · 0 评论 -
有关线程池的面试题
(1)因为我的项目中写到一个项目:简单线程池的实现,那么面试官就问我“如何保证线程池是线程安全的”。首先给大家普及下线程池的知识。我写的线程池是使用POSIX写的。线程池整个项目中包括两个类:一个是Task类,用于描述执行一个任务的方法(一个函数)和执行这个任务所需要的参数(函数的参数)。另外一个类就是我们的线程池类ThreadPool类,在线程池中主要有两个队列,一个是Task类队列,用于...转载 2018-08-12 20:17:19 · 10313 阅读 · 0 评论 -
c++线程中的几种锁
这个是在中兴面试中被面试问到的一个题“你知道线程中的自旋锁么?”,我当时一脸懵逼,不知道。回来后整理下,在这里对线程中的锁进行一个学习。线程之间的锁有:互斥锁、条件锁、自旋锁、读写锁、递归锁。一般而言,锁的功能越强大,性能就会越低。1、互斥锁互斥锁用于控制多个线程对他们之间共享资源互斥访问的一个信号量。也就是说是为了避免多个线程在某一时刻同时操作一个共享资源。例如线程池中的有多个空闲线...转载 2018-08-12 20:20:42 · 273 阅读 · 0 评论 -
Linux操作系统基础
https://blog.csdn.net/syt8945/article/details/50838679原创 2018-08-15 12:28:18 · 196 阅读 · 0 评论 -
STL之关联式容器----红黑树
标准STL关联式容器分为set(集合)和map(映射表)两大类以及这两大类的衍生体multiset(多键集合)和multimap(多键映射表),这些容器的底层机制均以RB-tree红黑树完成。它也是一个独立容器,但不开放给外界用 不在标准规格之列的关联式容器hash table(散列表/哈希表),和以hash table为底层机制的hash_set(散列集合)、hash_map(散列...转载 2018-08-12 10:13:45 · 750 阅读 · 0 评论 -
STL之stack、queue、priority_queue
栈的底层结构:以缺省情况下的deque作为其底层容器(封闭底端出口和入口,利用deque的成员函数完成stack成员函数的定义),list也可以作为其底层容器一种先进后出的数据结构,只能在最顶端新增、移除、取出元素。即不能遍历,所以stack没有迭代器 队列的底层结构:以缺省情况下的deque作为其底层容器(封闭deque的底端出口和顶端入口,利用deque的成员函...原创 2018-08-12 09:09:33 · 315 阅读 · 0 评论 -
有关笔试题,输入输出格式的几个特殊例子
题目描述老师想知道从某某同学当中,分数最高的是多少,现在请你编程模拟老师的询问。当然,老师有时候需要更新某位同学的成绩.输入描述:输入包括多组测试数据。每组输入第一行是两个正整数N和M(0 < N <= 30000,0 < M < 5000),分别代表学生的数目和操作的数目。学生ID编号从1编到N。第二行包含N个整数,代表这N个学生的初始成绩,其中第i个...原创 2018-08-11 18:33:35 · 878 阅读 · 0 评论 -
智能指针
智能指针是行为类似于指针的类对象。为什么需要智能指针? 为了避免当系统异常退出的时候避免资源泄漏(内存)创建指向str的指针ps。有一个问题。如果函数异常终止,则本地变量将从栈内存中删除——因此ps占据的内存将被释放,如果ps指向的内存也被释放了,则就不需要后面的智能指针了。或者如果ps有一个析构函数,当ps过期时,调用它的析构函数删除它指向的内存就行。可惜,没有。原因是ps是一个常...原创 2018-08-14 11:08:30 · 219 阅读 · 0 评论 -
内存分配的三种方式
把所有的点都说到,才能说明你有足够的项目经验,在实际工作的时候不会因为一些小问题而产生一些严重的bug,也证明了你有实力胜任这份工作。要回答这个问题,我们必须先要理解C++的内存管理方式,需要站在内存四区的角度去审视一下代码,这样整个理解了内存分配的方式,回答的时候就只需要注意一些细节了。写一个例子然后画一下内存示意图。int getmem(char **myp,int length)/...转载 2018-08-14 14:57:58 · 18692 阅读 · 0 评论 -
STL面试题
1、说说std::vector的底层(存储)机制。(如何实现vector)vector维护的是一个连续线性空间(动态数组),它以两个迭代器start和finish分别指向配置得来的连续空间中目前已被使用的范围(注意finish指向的是最后一个元素后面那个元素)并以迭代器end_of_storage指向整块连续空间(含备用空间)的尾端。 当我们以push_back()将新元素插入于vec...转载 2018-08-11 22:34:30 · 484 阅读 · 0 评论 -
面试题:C++有了malloc/free,为什么还需要new、delete?
1、面试宝典面试题(P81):C++有了malloc/free,为什么还需要new、delete?malloc与free是C、C++语言的标准库函数,new/delete是C++的运算符。他们都用于申请动态内存和释放内存。对于非内部数据类型的对象而言,只用malloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/f...转载 2018-08-08 11:12:39 · 878 阅读 · 0 评论