首页 > 其他分享 >腾讯技术岗位笔试&面试题(一)

腾讯技术岗位笔试&面试题(一)

时间:2024-12-08 11:01:15浏览次数:6  
标签:map 面试题 元素 下标 迭代 笔试 list vector 腾讯

说在前面

本篇文章是腾讯技术面试题目汇总第一篇
后续将持续推出互联网大厂,如阿里,腾讯,百度,美团,头条等技术面试题目,以及答案和分析。
欢迎大家点赞关注转发。

1.map插入方式有几种?

  1. 用insert函数插入pair数据,
    mapStudent.insert(pair<int, string>(1, “student_one”));
  2. 用insert函数插入value_type数据
    mapStudent.insert(map<int, string>::value_type (1, “student_one”));
  3. 在insert函数中使用make_pair()函数
    mapStudent.insert(make_pair(1, “student_one”));
  4. 用数组方式插入数据
    mapStudent[1] = “student_one”;

2.STL中unordered_map(hash_map)和map的区别,hash_map如何解决冲突以及扩容

  1. unordered_map和map类似,都是存储的key-value的值,可以通过key快速索引到value。不同的是unordered_map不会根据key的大小进行排序,
  2. 存储时是根据key的hash值判断元素是否相同,即unordered_map内部元素是无序的,而map中的元素是按照二叉搜索树存储,进行中序遍历会得到有序遍历。
  3. 所以使用时map的key需要定义operator<。而unordered_map需要定义hash_value函数并且重载operator==。但是很多系统内置的数据类型都自带这些,
  4. 那么如果是自定义类型,那么就需要自己重载operator<或者hash_value() 了。
  5. 如果需要内部元素自动排序,使用map,不需要排序使用unordered_map
  6. unordered_map的底层实现是hash_table;
  7. hash_map底层使用的是hash_table,而hash_table使用的开链法进行冲突避免,所有hash_map采用开链法进行冲突解决。
  8. 什么时候扩容:当向容器添加元素的时候,会判断当前容器的元素个数,如果大于等于阈值—即当前数组的长度乘以加载因子的值的时候,就要自动扩容啦。
  9. 扩容(resize)就是重新计算容量,向HashMap对象里不停的添加元素,而HashMap对象内部的数组无法装载更多的元素时,对象就需要扩大数组的长度,以便能装入更多的元素。

3.vector越界访问下标,map越界访问下标?vector删除元素时会不会释放空间?

  1. 通过下标访问vector中的元素时不会做边界检查,即便下标越界。也就是说,下标与first迭代器相加的结果超过了finish迭代器的位置,程序也不会报错,而是返回这个地址中存储的值。如果想在访问vector中的元素时首先进行边界检查,可以使用vector中的at函数。通过使用at函数不但可以通过下标访问vector中的元素,而且在at函数内部会对下标进行边界检查。
  2. map的下标运算符[]的作用是:将key作为下标去执行查找,并返回相应的值;如果不存在这个key,就将一个具有该key和value的某人值插入这个map。
  3. erase()函数,只能删除内容,不能改变容量大小; erase成员函数,它删除了itVect迭代器指向的元素,并且返回要被删除的itVect之后的迭代器,迭代器相当于一个智能指针;clear()函数,只能清空内容,不能改变容量大小;如果要想在删除内容的同时释放内存,那么你可以选择deque容器。

4.map[]与find的区别?

  1. map的下标运算符[]的作用是:将关键码作为下标去执行查找,并返回对应的值;如果不存在这个关键码,就将一个具有该关键码和值类型的默认值的项插入这个map。
  2. map的find函数:用关键码执行查找,找到了返回该位置的迭代器;如果不存在这个关键码,就返回尾迭代器。

5.STL中list与queue之间的区别

  1. list不再能够像vector一样以普通指针作为迭代器,因为其节点不保证在存储空间中连续存在;
  2. list插入操作和结合才做都不会造成原有的list迭代器失效;
  3. list不仅是一个双向链表,而且还是一个环状双向链表,所以它只需要一个指针;
  4. list不像vector那样有可能在空间不足时做重新配置、数据移动的操作,所以插入前的所有迭代器在插入操作之后都仍然有效;
  5. deque是一种双向开口的连续线性空间,所谓双向开口,意思是可以在头尾两端分别做元素的插入和删除操作;可以在头尾两端分别做元素的插入和删除操作;
  6. deque和vector最大的差异,一在于deque允许常数时间内对起头端进行元素的插入或移除操作,二在于deque没有所谓容量概念,因为它是动态地以分段连续空间组合而成,随时可以增加一段新的空间并链接起来,deque没有所谓的空间保留功能。

6.STL中的allocator,deallocator

  1. 第一级配置器直接使用malloc()、free()和relloc(),第二级配置器视情况采用不同的策略:当配置区块超过128bytes时,视之为足够大,便调用第一级配置器;当配置器区块小于128bytes时,为了降低额外负担,使用复杂的内存池整理方式,而不再用一级配置器;
  2. 第二级配置器主动将任何小额区块的内存需求量上调至8的倍数,并维护16个free-list,各自管理大小为8~128bytes的小额区块;
  3. 空间配置函数allocate(),首先判断区块大小,大于128就直接调用第一级配置器,小于128时就检查对应的free-list。如果free-list之内有可用区块,就直接拿来用,如果没有可用区块,就将区块大小调整至8的倍数,然后调用refill(),为free-list重新分配空间;
  4. 空间释放函数deallocate(),该函数首先判断区块大小,大于128bytes时,直接调用一级配置器,小于128bytes就找到对应的free-list然后释放内存。

标签:map,面试题,元素,下标,迭代,笔试,list,vector,腾讯
From: https://blog.csdn.net/TechPioneer_lp/article/details/144314258

相关文章

  • 如何使用H5唤起原生地图APP(百度、高德、腾讯地图等)
    要使用H5唤起原生地图App(百度、高德、腾讯地图等),你需要利用URLSchemes。每个地图App都定义了自己的URLScheme,通过在H5页面中构建特定的URL并跳转,即可唤起相应的App。以下是一些常用地图App的URLScheme和使用方法示例:1.百度地图:URLScheme:baidumap://......
  • 腾讯技术岗位笔试&面试题(一)
    说在前面本篇文章是腾讯技术面试题目汇总第一篇。后续将持续推出互联网大厂,如阿里,腾讯,百度,美团,头条等技术面试题目,以及答案和分析。欢迎大家点赞关注转发。1.map插入方式有几种?用insert函数插入pair数据,mapStudent.insert(pair<int,string>(1,“student_one”));用inser......
  • 【文生视频-腾讯混元-HunyuanVideo】AutoDL配好环境开箱即用~
    写在前面自从Sora问世,视频生成领域就火了起来。前不久腾讯AI团队刚刚开源了混元视频生成模型HunyuanVideo,本人第一时间就在AutoDL上面部署了代码,快来体验一下吧。AutoDL算法社区的镜像地址:https://www.codewithgpu.com/i/Tencent/HunyuanVideo/HunyuanVideo-Configured或......
  • 腾讯终于出手了,发布的AI 视频生成模型!完全免费开源,生成质量高!HunyuanVideo AI文生视频
    腾讯发布超强AI视频生成模型!完全免费开源,生成质量极高!HunyuanVideo模型,一、下载链接1、邀请你一起来体验腾讯元宝的应用【AI视频】,让每个创意瞬间生动。点击以下链接:【抢先体验手机APP版本】:https://yuanbao.tencent.com/bot/app/share/chat/VR8O83A/videoTrafficDiv......
  • Java春招大厂面试题
    文章目录软件开发2024春招大厂面试题1.redis的跳表是怎么实现的?2.MVCC实现原理3.Redis怎么实现延时消息4.http默认端口号是多少5.http的几种请求(get、post…)有什么区别1.GET2.POST6.Http和Https的区别7.tcp协议中,三次握手四次挥手是怎样的1.什么是三次握手2.......
  • 面试题:JavaScript+ES5+
    jsthis指向看函数的调用方式,而不是他的定义时候分类构造函数==>new时候创建的对象对象的方法内部==》调用方法的对象事件处理函数==》绑定的事件箭头函数==》没有自己的this其他函数(全局的/局部的)==》匿名的就是window定时器函数==》window立即执行函数==》w......
  • 关于redis的面试题
    目录一:redis的基础知识二:Redis协议与异步方式三:Redis的存储原理和数据模型四:Redis的持久化和高可用性一:redis的基础知识1:redis是一个内存数据库,KV数据库。2:包含的数据结构:string,list,hash,set,zset,其中string是一个安全的二进制字符串,我们可以在这个字符串的末尾添加'\0......
  • 【c++笔试强训】(第三十二篇)
    目录数组变换(贪⼼+位运算)题目解析讲解算法原理编写代码装箱问题(动态规划-01背包)题目解析讲解算法原理编写代码数组变换(贪⼼+位运算)题目解析1.题目链接:数组变换__牛客网2.题目描述 牛牛有一个数组,里面的数可能不相等,现在他想把数组变为:所有的数都相等。问是......
  • 前端面试题(20241205)
    1.Vue如何检测数组变化1.方法重写(push、pop、shift、unshift、splice、sort和reverse)。2.使用Vue.set或vm.$set(对于直接通过索引设置数组项的操作例如arr[index]=newValue)。3.数组长度变化。4.响应式转换。2.Vue的父子组件生命周期钩子函数执行顺序父组件先初......
  • 前端面试题
    JavaScript基础知识:1、数据类型基础数据类型:NumberStringBooleanNullUndefinedSymbolBigInt引用数据类型:ObjectArrayFunctionDate2、作用域与闭包作用域:变量的可访问范围。分为全局作用域、函数作用域、块级作用域(let和const)。闭包:函数可以“记住”并访问定义......