金山WPS C++一面 12-03-20

#金山# #金山办公面试#
# 自我介绍:略
# 经常使用的容器
`map` k,v可以存储操作id和函数,根据操作类型调用相应的方法,作为回调。
# C++有哪些多线程库
知道两种,一种是std:thread,一种是基于RAII思想封装std::thread得到的std:jthread
# sort()使用了哪种排序算法
`sort()` 底部使用了多种排序算法: 快排,堆排
1. 当数据量大,分布随机时,使用快速排序
2. 数据量小,使用插入排序
2. 递归深度过深时使用堆排序
# 排序算法的使用场景
1. 快排:无序数组效率会很高,但是有序数组效率会很低,
2. 归并排序:内存有限的情况下,可以使用多路归并
3. 插入排序: 基本有序的数据,适合于插入排序。
# 智能指针
`weak_ptr`可以提升为`shared_ptr`吗?
可以。
1. `shared_ptr`: 会使用计数器来记录引用次数,当引用次数为0时,释放对象。
2. `weak_ptr`:`weak_ptr`实现弱引用,用来解决`shared_ptr`的循环引用问题,可以通过`.lock()` 提升为 `shared_ptr`
# 使用一段代码体现C++面向对象的思想
C++面向对象的特性有三个
 1. 封装
 2. 继承
 3. 多态
 写了两个类,一个基类,一个子类,没有成员变量,子类重写了基类的虚函数
###两个类的大小,
回答没有考虑继承时的虚函数指针,所以回答的两个都是1。
实际上因为对象会有一个虚函数指针,对于个一个64位的机器,指针的大小是8字节,所以两个类的大小都是8字节。
# 实现字符串数字相加,相减
需要对特殊情况做特殊处理
1. 前导0
2. 正数+负数
3. 负数+负数
4. 小数-大数等等
# 最后
倒霉倒霉倒霉。面试期间,快手电话没接到,应该是约面的。结束之后去官网看已经挂了。此前快手三面,面试官问插入时不考虑发生冲突,只考虑扩容的hashmap,插入的平均时间复杂度是多少,面试官说是O(logN),只知道C++的最差是O(N),后来搜了一下java里有这个。。。讲解项目面试官说他没听懂😅。。。
有错误的地方还请大佬指点。
全部评论
佬base哪里呀?
点赞 回复 分享
发布于 12-05 18:09 江西
金山wps已释放一个offer 佬加油
点赞 回复 分享
发布于 12-09 03:38 广东

相关推荐

今天 10:50
已编辑
蚌埠坦克学院 C++
#金山# #金山办公面试# #金山校招# #牛客创作赏金赛# ===============时间线====================12-03 一面12-05 二面12-13 HR面12-18 OC ===============时间线====================12月12日更新,约HR面# 无自我介绍# 熟悉的C++版本C++11以后的基本都了解一些, 没有特别针对某个版本.# 智能指针1. `shared_ptr`: 支持拷贝、移动,可以作为返回值类型,避免大对象的拷贝. 引用计数是线程安全的2. `unique_ptr`:支持移动,可以通过转移所有权的方式,将对象的所有权转移给另一个独占指针3. `weak_ptr`: 支持拷贝,可以作为返回值类型,但是不能转移所有权,只能通过weak_ptr转成shared_ptr# gdb gcc有用过吗不怎么用gdb gcc有了解## gcc如何预处理忘了,回答gcc有参数控制```bashgcc -E main.c -o main.i```## 如何获取不进行链接的代码忘了,回答gcc有参数控制```bashgcc -c main.c -o main.o```# 线程安全的单例模式1. 通过C++11`std::call_once`实现2. 对指针判空执行两次,因为第一次判断为空后初始化前,可能其他线程已经初始化了,所以要两次判空问有没有其他的,回答原子变量应该也行,不是很了解。# 了解压缩算法吗不知道为啥问这个问题,面试官接着问是否了解哈夫曼,然后让讲一下自己了解的压缩算法。回答了科研做的图像压缩。# 项目## 项目结构略## 负载均衡怎么做的通过`roundRobin`方式实现,返回一个连接数量少的服务器;接着问道有考虑延迟吗,回答没有,因为是在单个机器测试的。## 单例模板基类是什么通过模板类是实现一个单例基类,子类通过CRTP的方式实现单例。## Qt键盘鼠标事件1. 键盘事件:`keyPressEvent` `keyReleaseEvent`2. 鼠标事件:`mousePressEvent` `mouseReleaseEvent` `mouseMoveEvent`# linux相关## docker如何建立目录映射回答,在创建容器时通过`-v`指定宿主目录和容器目录的映射关系。## top如何根据内存占用排序回答不知道,自己使用的基于top封装的btop,可以通过命令控制```bashtop -o %MEM```## 如何查找进程的句柄,回答不太了解。可以使用`ps`命令查询进程状态。查询大模型得到:进程句柄:操作系统为每个进程分配的一个唯一标识符。它主要用于操作系统内核和其他系统组件之间进行进程管理和通信。以下是关于进程句柄的一些关键点:```bashls -l /proc//fd```## 查看进程端口占用```bashnetstat -anp | grep ```## 查看进程打开的文件句柄回答不知道,查询大模型得到:```bashlsof -p ```# git回答稀碎,只会使用`push`, `pull`## git rebase`git rebase`可以将一个分支的更改应用到另一个分支上,可以用来1. 更新分支:    - 将当前分支的更改应用到最新的主分支(如 main 或 master)上,以保持代码的最新状态。    - 例如,如果你在一个功能分支上工作,而主分支上有新的提交,你可以使用 rebase 将功能分支的更改应用到最新的主分支上。2. 线性化提交历史:    - rebase 可以使提交历史更加线性,避免合并提交(merge commit)的出现,从而使提交历史更清晰。    - 例如,如果你从 main 分支派生了一个功能分支,并且 main 分支上有新的提交,rebase 可以将你的功能分支的提交重新应用到 main 分支的最新提交之上。3. 解决冲突:    - 在 rebase 过程中,如果遇到冲突,Git 会暂停并提示你解决冲突。解决冲突后,你可以继续 rebase 过程。    - 例如,如果你的功能分支和 main 分支在同一个文件上进行了修改,rebase 会提示你解决这些冲突。## git 如何创建分支回答使用`checkout`具体是:```bashgit checkout -b ```
查看20道真题和解析 牛客创作赏金赛
点赞 评论 收藏
分享
评论
1
11
分享
牛客网
牛客企业服务